| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | // This extractor is used in level 2 optimizations// IMPORTANT: Mind Token class and this code is not related!// Properties will be tokenized in one step, see #429var Token = require('../../tokenizer/token');var serializeRules = require('../../writer/one-time').rules;var serializeValue = require('../../writer/one-time').value;function extractProperties(token) {  var properties = [];  var inSpecificSelector;  var property;  var name;  var value;  var i, l;  if (token[0] == Token.RULE) {    inSpecificSelector = !/[\.\+>~]/.test(serializeRules(token[1]));    for (i = 0, l = token[2].length; i < l; i++) {      property = token[2][i];      if (property[0] != Token.PROPERTY)        continue;      name = property[1][1];      if (name.length === 0)        continue;      if (name.indexOf('--') === 0)        continue;      value = serializeValue(property, i);      properties.push([        name,        value,        findNameRoot(name),        token[2][i],        name + ':' + value,        token[1],        inSpecificSelector      ]);    }  } else if (token[0] == Token.NESTED_BLOCK) {    for (i = 0, l = token[2].length; i < l; i++) {      properties = properties.concat(extractProperties(token[2][i]));    }  }  return properties;}function findNameRoot(name) {  if (name == 'list-style')    return name;  if (name.indexOf('-radius') > 0)    return 'border-radius';  if (name == 'border-collapse' || name == 'border-spacing' || name == 'border-image')    return name;  if (name.indexOf('border-') === 0 && /^border\-\w+\-\w+$/.test(name))    return name.match(/border\-\w+/)[0];  if (name.indexOf('border-') === 0 && /^border\-\w+$/.test(name))    return 'border';  if (name.indexOf('text-') === 0)    return name;  if (name == '-chrome-')    return name;  return name.replace(/^\-\w+\-/, '').match(/([a-zA-Z]+)/)[0].toLowerCase();}module.exports = extractProperties;
 |