code: function parseCss(node, text) {
    let t = text.substring(node['start'], node['end'] - 1);
    node['parsedCssText'] = node['cssText'] = t.trim();
    if (node['parent']) {
      let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];
      t = text.substring(ss, node['start'] - 1);
      t = _expandUnicodeEscapes(t);
      t = t.replace(RX.multipleSpaces, ' ');
      // TODO(sorvell): ad hoc; make selector include only after last ;
      // helps with mixin syntax
      t = t.substring(t.lastIndexOf(';') + 1);
      let s = node['parsedSelector'] = node['selector'] = t.trim();
      node['atRule'] = (s.indexOf(AT_START) === 0);
      // note, support a subset of rule types...
      if (node['atRule']) {
        if (s.indexOf(MEDIA_START) === 0) {
          node['type'] = types.MEDIA_RULE;
        } else if (s.match(RX.keyframesRule)) {
          node['type'] = types.KEYFRAMES_RULE;
          node['keyframesName'] =
            node['selector'].split(RX.multipleSpaces).pop();
        }
      } else {
        if (s.indexOf(VAR_START) === 0) {
          node['type'] = types.MIXIN_RULE;
        } else {
          node['type'] = types.STYLE_RULE;
        }
      }
    }
    let r$ = node['rules'];
    if (r$) {
      for (let i = 0, l = r$.length, r;
        (i < l) && (r = r$[i]); i++) {
        parseCss(r, text);
      }
    }
    return node;
  }
docs: add selectors/cssText to node tree 
  @param {StyleNode} node
  @param {string} text
  @return {StyleNode}