whole_func_string: function collectStyleRules(styleSheet, result, styleSheetUrl) {
      if (!result) {
          result = { // an StyleObjList
              length: 0
          }
      }
  
      if (!styleSheet.cssRules.length) {
          return result;
      }
  
      var styleSheetDir = path.dirname(styleSheetUrl);
  
      // 遍历所有 css 规则收集进行图片合并的样式规则
      styleSheet.cssRules.forEach(function(rule, i) {
  
          // typeof rule === 'CSSStyleRule'
          if (rule.href && rule.styleSheet) {
  
              // @import 引入的样式表, 把 css 文件读取进来继续处理
              var fileName = rule.href;
  
              // 忽略掉链接到网络上的文件
              if (!fileName || regexp.ignoreNetwork.test(fileName)) {
                  return;
              }
              var match = fileName.match(regexp.css);
              if (!match) {
                  return;
              }
              fileName = match[1];
  
              var url = path.join(styleSheetDir, fileName);
              var styleSheet = readStyleSheet(url);
              debug('read import style: ' + url + ' , has styleSheet == : ' + !!styleSheet);
              if (!styleSheet) {
                  return;
              }
              rule.styleSheet = styleSheet;
  
              debug('collect import style: ' + fileName);
  
              // 继续收集 import 的样式
              collectStyleRules(styleSheet, result, url);
              return;
          }
  
          if (rule.cssRules && rule.cssRules.length) {
              if (rule instanceof CSSOM.CSSKeyframesRule) {
                  return; // FIXME 先跳过 keyframes 的属性
              }
  
              // 遇到有子样式的，比如 @media, 递归收集
              collectStyleRules(rule, result, styleSheetUrl);
              return;
          }
  
          if (!rule.style) {
  
              // 有可能 @media 等中没有任何样式, 如: @media xxx {}
              return;
          }
  
          /* 
           * typeof style === 'CSSStyleDeclaration'
           * 给 style 对象扩展基本的方法
           */
          var style = us.extend(rule.style, BaseCSSStyleDeclaration);
  
          if (style['background-size']) {
  
              /* 
               * 跳过有 background-size 的样式, 因为:
               * 1. background-size 不能简写在 background 里面, 而拆分 background 之后再组装,
               *    background 就变成在 background-size 后面了, 会导致 background-size 被 background 覆盖;
               * 2. 拥有 background-size 的背景图片一般都涉及到拉伸, 这类图片是不能合并的
               */
              return;
          }
          if (style['background']) {
  
              // 有 background 属性的 style 就先把 background 简写拆分出来
              style.splitBackground();
          } else if (style['background-position']) {
              var value = style['background-position'];
              value = value.trim().replace(/\s{2}/g, '').split(' ');
              if (!value[1]) {
                  value[1] = value[0];
              }
              style.setProperty('background-position-x', value[0]);
              style.setProperty('background-position-y', value[1]);
          }
  
          if (regexp.ignorePosition.test(style['background-position-x']) ||
              regexp.ignorePosition.test(style['background-position-y'])) {
  
              /*
               * background 定位是 right center bottom 的图片不合并
               * 因为这三个的定位方式比较特殊, 浏览器有个自动适应的特性
               * 把刚刚拆分的 background 属性合并并返回
               */
              style.mergeBackgound();
              return;
          }
  
          if (regexp.ignoreRepeat.test(style['background-repeat']) ||
              regexp.ignoreRepeat.test(style['background-repeat-x']) ||
              regexp.ignoreRepeat.test(style['background-repeat-y'])) {
  
              // 显式的使用了平铺的图片, 也不进行合并
              style.mergeBackgound();
              return;
          }
  
          var imageUrl = getImageUrl(style, styleSheetDir),
              imageAbsUrl,
              fileName;
  
          if (imageUrl) {
  
              imageAbsUrl = path.join(styleSheetDir, imageUrl);
              fileName = path.join(spriteConfig.workspace, imageAbsUrl);
  
              if (!fs.existsSync(fileName)) {
  
                  // 如果这个图片是不存在的, 就直接返回了, 进行容错
                  info('>>Skip: "' + fileName + '" is not exist');
                  return;
              }
  
              // 把用了同一个文件的样式汇集在一起
              if (!result[imageUrl]) {
                  result[imageUrl] = { // an StyleObj
                      imageUrl: imageUrl,
                      imageAbsUrl: imageAbsUrl,
                      cssRules: []
                  };
                  result.length++;
              }
              result[imageUrl].cssRules.push(style);
          }
          else{
             //图片找不到css_backgound合并还原  20150405
             style.mergeBackgound();
          }
      });
      return result;
  }
func_code_string: function collectStyleRules(styleSheet, result, styleSheetUrl) {
      if (!result) {
          result = { // an StyleObjList
              length: 0
          }
      }
  
      if (!styleSheet.cssRules.length) {
          return result;
      }
  
      var styleSheetDir = path.dirname(styleSheetUrl);
  
      // 遍历所有 css 规则收集进行图片合并的样式规则
      styleSheet.cssRules.forEach(function(rule, i) {
  
          // typeof rule === 'CSSStyleRule'
          if (rule.href && rule.styleSheet) {
  
              // @import 引入的样式表, 把 css 文件读取进来继续处理
              var fileName = rule.href;
  
              // 忽略掉链接到网络上的文件
              if (!fileName || regexp.ignoreNetwork.test(fileName)) {
                  return;
              }
              var match = fileName.match(regexp.css);
              if (!match) {
                  return;
              }
              fileName = match[1];
  
              var url = path.join(styleSheetDir, fileName);
              var styleSheet = readStyleSheet(url);
              debug('read import style: ' + url + ' , has styleSheet == : ' + !!styleSheet);
              if (!styleSheet) {
                  return;
              }
              rule.styleSheet = styleSheet;
  
              debug('collect import style: ' + fileName);
  
              // 继续收集 import 的样式
              collectStyleRules(styleSheet, result, url);
              return;
          }
  
          if (rule.cssRules && rule.cssRules.length) {
              if (rule instanceof CSSOM.CSSKeyframesRule) {
                  return; // FIXME 先跳过 keyframes 的属性
              }
  
              // 遇到有子样式的，比如 @media, 递归收集
              collectStyleRules(rule, result, styleSheetUrl);
              return;
          }
  
          if (!rule.style) {
  
              // 有可能 @media 等中没有任何样式, 如: @media xxx {}
              return;
          }
  
          /* 
           * typeof style === 'CSSStyleDeclaration'
           * 给 style 对象扩展基本的方法
           */
          var style = us.extend(rule.style, BaseCSSStyleDeclaration);
  
          if (style['background-size']) {
  
              /* 
               * 跳过有 background-size 的样式, 因为:
               * 1. background-size 不能简写在 background 里面, 而拆分 background 之后再组装,
               *    background 就变成在 background-size 后面了, 会导致 background-size 被 background 覆盖;
               * 2. 拥有 background-size 的背景图片一般都涉及到拉伸, 这类图片是不能合并的
               */
              return;
          }
          if (style['background']) {
  
              // 有 background 属性的 style 就先把 background 简写拆分出来
              style.splitBackground();
          } else if (style['background-position']) {
              var value = style['background-position'];
              value = value.trim().replace(/\s{2}/g, '').split(' ');
              if (!value[1]) {
                  value[1] = value[0];
              }
              style.setProperty('background-position-x', value[0]);
              style.setProperty('background-position-y', value[1]);
          }
  
          if (regexp.ignorePosition.test(style['background-position-x']) ||
              regexp.ignorePosition.test(style['background-position-y'])) {
  
              /*
               * background 定位是 right center bottom 的图片不合并
               * 因为这三个的定位方式比较特殊, 浏览器有个自动适应的特性
               * 把刚刚拆分的 background 属性合并并返回
               */
              style.mergeBackgound();
              return;
          }
  
          if (regexp.ignoreRepeat.test(style['background-repeat']) ||
              regexp.ignoreRepeat.test(style['background-repeat-x']) ||
              regexp.ignoreRepeat.test(style['background-repeat-y'])) {
  
              // 显式的使用了平铺的图片, 也不进行合并
              style.mergeBackgound();
              return;
          }
  
          var imageUrl = getImageUrl(style, styleSheetDir),
              imageAbsUrl,
              fileName;
  
          if (imageUrl) {
  
              imageAbsUrl = path.join(styleSheetDir, imageUrl);
              fileName = path.join(spriteConfig.workspace, imageAbsUrl);
  
              if (!fs.existsSync(fileName)) {
  
                  // 如果这个图片是不存在的, 就直接返回了, 进行容错
                  info('>>Skip: "' + fileName + '" is not exist');
                  return;
              }
  
              // 把用了同一个文件的样式汇集在一起
              if (!result[imageUrl]) {
                  result[imageUrl] = { // an StyleObj
                      imageUrl: imageUrl,
                      imageAbsUrl: imageAbsUrl,
                      cssRules: []
                  };
                  result.length++;
              }
              result[imageUrl].cssRules.push(style);
          }
          else{
             //图片找不到css_backgound合并还原  20150405
             style.mergeBackgound();
          }
      });
      return result;
  }
func_documentation_string: 收集需要合并的样式和图片
  @param  {CSSStyleSheet} styleSheet
  @param  {Object} result StyleObjList
  @return {Object}
  @example
  result: { // StyleObjList
  length: 1,
  "./img/icon1.png": { // StyleObj
  imageUrl: "./img/icon1.png",
  imageAbsUrl: "./img/icon1.png", //相对于 workspace 的路径
  cssRules: []
  }
  }