| var NUMBER = require('../../tokenizer').TYPE.Number; |
| |
| // special reader for units to avoid adjoined IE hacks (i.e. '1px\9') |
| function readUnit(scanner) { |
| var unit = scanner.getTokenValue(); |
| var backSlashPos = unit.indexOf('\\'); |
| |
| if (backSlashPos > 0) { |
| // patch token offset |
| scanner.tokenStart += backSlashPos; |
| |
| // return part before backslash |
| return unit.substring(0, backSlashPos); |
| } |
| |
| // no backslash in unit name |
| scanner.next(); |
| |
| return unit; |
| } |
| |
| // number ident |
| module.exports = { |
| name: 'Dimension', |
| structure: { |
| value: String, |
| unit: String |
| }, |
| parse: function() { |
| var start = this.scanner.tokenStart; |
| var value = this.scanner.consume(NUMBER); |
| var unit = readUnit(this.scanner); |
| |
| return { |
| type: 'Dimension', |
| loc: this.getLocation(start, this.scanner.tokenStart), |
| value: value, |
| unit: unit |
| }; |
| }, |
| generate: function(node) { |
| this.chunk(node.value); |
| this.chunk(node.unit); |
| } |
| }; |