Dimension.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. var NUMBER = require('../../tokenizer').TYPE.Number;
  2. // special reader for units to avoid adjoined IE hacks (i.e. '1px\9')
  3. function readUnit(scanner) {
  4. var unit = scanner.getTokenValue();
  5. var backSlashPos = unit.indexOf('\\');
  6. if (backSlashPos > 0) {
  7. // patch token offset
  8. scanner.tokenStart += backSlashPos;
  9. // return part before backslash
  10. return unit.substring(0, backSlashPos);
  11. }
  12. // no backslash in unit name
  13. scanner.next();
  14. return unit;
  15. }
  16. // number ident
  17. module.exports = {
  18. name: 'Dimension',
  19. structure: {
  20. value: String,
  21. unit: String
  22. },
  23. parse: function() {
  24. var start = this.scanner.tokenStart;
  25. var value = this.scanner.consume(NUMBER);
  26. var unit = readUnit(this.scanner);
  27. return {
  28. type: 'Dimension',
  29. loc: this.getLocation(start, this.scanner.tokenStart),
  30. value: value,
  31. unit: unit
  32. };
  33. },
  34. generate: function(node) {
  35. this.chunk(node.value);
  36. this.chunk(node.unit);
  37. }
  38. };