minify-font.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. var unit = require('postcss-value-parser').unit;
  2. var keywords = require('./keywords');
  3. var minifyFamily = require('./minify-family');
  4. var minifyWeight = require('./minify-weight');
  5. module.exports = function (nodes, opts) {
  6. var i, max, node, familyStart, family;
  7. var hasSize = false;
  8. for (i = 0, max = nodes.length; i < max; i += 1) {
  9. node = nodes[i];
  10. if (node.type === 'word') {
  11. if (node.value === 'normal' ||
  12. ~keywords.style.indexOf(node.value) ||
  13. ~keywords.variant.indexOf(node.value) ||
  14. ~keywords.stretch.indexOf(node.value)) {
  15. if (!hasSize) {
  16. familyStart = i;
  17. }
  18. } else if (~keywords.weight.indexOf(node.value)) {
  19. if (!hasSize) {
  20. node.value = minifyWeight(node.value, opts);
  21. familyStart = i;
  22. }
  23. } else if (~keywords.size.indexOf(node.value) || unit(node.value)) {
  24. if (!hasSize) {
  25. familyStart = i;
  26. hasSize = true;
  27. }
  28. }
  29. } else if (node.type === 'div') {
  30. node.before = '';
  31. node.after = '';
  32. if (node.value === '/') {
  33. familyStart = i + 1;
  34. }
  35. break;
  36. } else if (node.type === 'space') {
  37. node.value = ' ';
  38. }
  39. }
  40. if (!isNaN(familyStart)) {
  41. familyStart += 2;
  42. family = minifyFamily(nodes.slice(familyStart), opts);
  43. nodes = nodes.slice(0, familyStart).concat(family);
  44. }
  45. return nodes;
  46. };