normalizeUnicode.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. 'use strict';
  2. exports.__esModule = true;
  3. var _postcss = require('postcss');
  4. var _postcss2 = _interopRequireDefault(_postcss);
  5. var _postcssValueParser = require('postcss-value-parser');
  6. var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. function unicode(range) {
  9. var values = range.slice(2).split('-');
  10. if (values.length < 2) {
  11. return range;
  12. }
  13. var left = values[0].split('');
  14. var right = values[1].split('');
  15. if (left.length !== right.length) {
  16. return range;
  17. }
  18. var questionCounter = 0;
  19. var merged = left.reduce(function (group, value, index) {
  20. if (group === false) {
  21. return false;
  22. }
  23. if (value === right[index] && !questionCounter) {
  24. return group + value;
  25. }
  26. if (value === '0' && right[index] === 'f') {
  27. questionCounter++;
  28. return group + '?';
  29. }
  30. return false;
  31. }, 'u+');
  32. /*
  33. * The maximum number of wildcard characters (?) for ranges is 5.
  34. */
  35. if (merged && questionCounter < 6) {
  36. return merged;
  37. }
  38. return range;
  39. }
  40. exports.default = _postcss2.default.plugin('cssnano-normalize-unicode', function () {
  41. return function (css) {
  42. css.walkDecls(/^unicode-range$/i, function (node) {
  43. node.prop = 'unicode-range';
  44. node.value = (0, _postcssValueParser2.default)(node.value).walk(function (child) {
  45. if (child.type === 'word') {
  46. child.value = unicode(child.value.toLowerCase());
  47. }
  48. return false;
  49. }).toString();
  50. });
  51. };
  52. });
  53. module.exports = exports['default'];