| const OMIT_PLUSSIGN = /^(?:\+|(-))?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/; |
| const KEEP_PLUSSIGN = /^([\+\-])?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/; |
| const unsafeToRemovePlusSignAfter = new Set([ |
| 'Dimension', |
| 'Hash', |
| 'Identifier', |
| 'Number', |
| 'Raw', |
| 'UnicodeRange' |
| ]); |
| |
| export function packNumber(value, item) { |
| // omit plus sign only if no prev or prev is safe type |
| const regexp = item && item.prev !== null && unsafeToRemovePlusSignAfter.has(item.prev.data.type) |
| ? KEEP_PLUSSIGN |
| : OMIT_PLUSSIGN; |
| |
| // 100 -> '100' |
| // 00100 -> '100' |
| // +100 -> '100' |
| // -100 -> '-100' |
| // 0.123 -> '.123' |
| // 0.12300 -> '.123' |
| // 0.0 -> '' |
| // 0 -> '' |
| // -0 -> '-' |
| value = String(value).replace(regexp, '$1$2$3'); |
| |
| if (value === '' || value === '-') { |
| value = '0'; |
| } |
| // FIXME: is it solution simplier? |
| // value = String(Number(value)).replace(/^(-?)0+\./, '$1.'); |
| |
| return value; |
| } |
| |
| export function Number(node) { |
| node.value = packNumber(node.value); |
| }; |