diff --git a/src/lib/reducer.js b/src/lib/reducer.js index a82ca93..e7f3340 100644 --- a/src/lib/reducer.js +++ b/src/lib/reducer.js @@ -28,7 +28,7 @@ function isValueType(type) { case 'VminValue': case 'VmaxValue': case 'PercentageValue': - case 'Value': + case 'Number': return true; } return false; @@ -236,7 +236,7 @@ function reduceDivisionExpression(node) { return node; } - if (node.right.type !== 'Value') { + if (node.right.type !== 'Number') { throw new Error(`Cannot divide by "${node.right.unit}", number expected`); } @@ -253,8 +253,8 @@ function reduceDivisionExpression(node) { } function reduceMultiplicationExpression(node) { - // (expr) * value - if (node.left.type === 'MathExpression' && node.right.type === 'Value') { + // (expr) * number + if (node.left.type === 'MathExpression' && node.right.type === 'Number') { if ( isValueType(node.left.left.type) && isValueType(node.left.right.type) @@ -264,13 +264,13 @@ function reduceMultiplicationExpression(node) { return node.left; } } - // something * value - else if (isValueType(node.left.type) && node.right.type === 'Value') { + // something * number + else if (isValueType(node.left.type) && node.right.type === 'Number') { node.left.value *= node.right.value; return node.left; } - // value * (expr) - else if (node.left.type === 'Value' && node.right.type === 'MathExpression') { + // number * (expr) + else if (node.left.type === 'Number' && node.right.type === 'MathExpression') { if ( isValueType(node.right.left.type) && isValueType(node.right.right.type) @@ -280,8 +280,8 @@ function reduceMultiplicationExpression(node) { return node.right; } } - // value * something - else if (node.left.type === 'Value' && isValueType(node.right.type)) { + // number * something + else if (node.left.type === 'Number' && isValueType(node.right.type)) { node.right.value *= node.left.value; return node.right; } diff --git a/src/lib/stringifier.js b/src/lib/stringifier.js index e2ccbbc..d8e1bff 100644 --- a/src/lib/stringifier.js +++ b/src/lib/stringifier.js @@ -35,7 +35,7 @@ function stringify(node, prec) { return str; } - case "Value": + case 'Number': return round(node.value, prec); case 'Function': return node.value; diff --git a/src/parser.jison b/src/parser.jison index 892cbc1..eb402b8 100644 --- a/src/parser.jison +++ b/src/parser.jison @@ -76,15 +76,15 @@ expression | math_expression DIV math_expression { $$ = { type: 'MathExpression', operator: $2, left: $1, right: $3 }; } | LPAREN math_expression RPAREN { $$ = $2; } | function { $$ = $1; } - | css_value { $$ = $1; } - | value { $$ = $1; } + | dimension { $$ = $1; } + | number { $$ = $1; } ; function : FUNCTION { $$ = { type: 'Function', value: $1 }; } ; - css_value + dimension : LENGTH { $$ = { type: 'LengthValue', value: parseFloat($1), unit: /[a-z]+$/i.exec($1)[0] }; } | ANGLE { $$ = { type: 'AngleValue', value: parseFloat($1), unit: /[a-z]+$/i.exec($1)[0] }; } | TIME { $$ = { type: 'TimeValue', value: parseFloat($1), unit: /[a-z]+$/i.exec($1)[0] }; } @@ -100,12 +100,12 @@ expression | VMINS { $$ = { type: 'VminValue', value: parseFloat($1), unit: 'vmin' }; } | VMAXS { $$ = { type: 'VmaxValue', value: parseFloat($1), unit: 'vmax' }; } | PERCENTAGE { $$ = { type: 'PercentageValue', value: parseFloat($1), unit: '%' }; } - | ADD css_value { var prev = $2; $$ = prev; } - | SUB css_value { var prev = $2; prev.value *= -1; $$ = prev; } + | ADD dimension { var prev = $2; $$ = prev; } + | SUB dimension { var prev = $2; prev.value *= -1; $$ = prev; } ; - value - : NUMBER { $$ = { type: 'Value', value: parseFloat($1) }; } - | ADD NUMBER { $$ = { type: 'Value', value: parseFloat($2) }; } - | SUB NUMBER { $$ = { type: 'Value', value: parseFloat($2) * -1 }; } + number + : NUMBER { $$ = { type: 'Number', value: parseFloat($1) }; } + | ADD NUMBER { $$ = { type: 'Number', value: parseFloat($2) }; } + | SUB NUMBER { $$ = { type: 'Number', value: parseFloat($2) * -1 }; } ;