Skip to content

Commit

Permalink
fix: handle numbers with exponen composed (#83)
Browse files Browse the repository at this point in the history
  • Loading branch information
evilebottnawi authored Apr 3, 2019
1 parent c4db282 commit 1cd2c5f
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 32 deletions.
42 changes: 42 additions & 0 deletions src/__tests__/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -849,3 +849,45 @@ test(
'calc(/*test*/100px + calc(/*test*/100px/*test*/ + /*test*/100px/*test*/))',
'300px',
);

test(
'exponent composed',
testValue,
'calc(1.1e+1px + 1.1e+1px)',
'22px',
);

test(
'exponent composed (#1)',
testValue,
'calc(10e+1px + 10e+1px)',
'200px',
);

test(
'exponent composed (#2)',
testValue,
'calc(1.1e+10px + 1.1e+10px)',
'22000000000px',
);

test(
'exponent composed (#3)',
testValue,
'calc(9e+1 * 1px)',
'90px',
);

test(
'exponent composed (#4)',
testValue,
'calc(9e+1% + 10%)',
'100%',
);

test(
'exponent composed (uppercase)',
testValue,
'calc(1.1E+1px + 1.1E+1px)',
'22px',
);
64 changes: 32 additions & 32 deletions src/parser.jison
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,33 @@
"+" return 'ADD';
"-" return 'SUB';

([0-9]+("."[0-9]+)?|"."[0-9]+)em\b return 'EMS';
([0-9]+("."[0-9]+)?|"."[0-9]+)ex\b return 'EXS';
([0-9]+("."[0-9]+)?|"."[0-9]+)ch\b return 'CHS';
([0-9]+("."[0-9]+)?|"."[0-9]+)rem\b return 'REMS';
([0-9]+("."[0-9]+)?|"."[0-9]+)vw\b return 'VWS';
([0-9]+("."[0-9]+)?|"."[0-9]+)vh\b return 'VHS';
([0-9]+("."[0-9]+)?|"."[0-9]+)vmin\b return 'VMINS';
([0-9]+("."[0-9]+)?|"."[0-9]+)vmax\b return 'VMAXS';
([0-9]+("."[0-9]+)?|"."[0-9]+)cm\b return 'LENGTH';
([0-9]+("."[0-9]+)?|"."[0-9]+)mm\b return 'LENGTH';
([0-9]+("."[0-9]+)?|"."[0-9]+)in\b return 'LENGTH';
([0-9]+("."[0-9]+)?|"."[0-9]+)pt\b return 'LENGTH';
([0-9]+("."[0-9]+)?|"."[0-9]+)pc\b return 'LENGTH';
([0-9]+("."[0-9]+)?|"."[0-9]+)px\b return 'LENGTH';
([0-9]+("."[0-9]+)?|"."[0-9]+)deg\b return 'ANGLE';
([0-9]+("."[0-9]+)?|"."[0-9]+)grad\b return 'ANGLE';
([0-9]+("."[0-9]+)?|"."[0-9]+)rad\b return 'ANGLE';
([0-9]+("."[0-9]+)?|"."[0-9]+)turn\b return 'ANGLE';
([0-9]+("."[0-9]+)?|"."[0-9]+)s\b return 'TIME';
([0-9]+("."[0-9]+)?|"."[0-9]+)ms\b return 'TIME';
([0-9]+("."[0-9]+)?|"."[0-9]+)Hz\b return 'FREQ';
([0-9]+("."[0-9]+)?|"."[0-9]+)kHz\b return 'FREQ';
([0-9]+("."[0-9]+)?|"."[0-9]+)dpi\b return 'RES';
([0-9]+("."[0-9]+)?|"."[0-9]+)dpcm\b return 'RES';
([0-9]+("."[0-9]+)?|"."[0-9]+)dppx\b return 'RES';
([0-9]+("."[0-9]+)?|"."[0-9]+)\% return 'PERCENTAGE';
([0-9]+("."[0-9]+)?|"."[0-9]+)\b return 'NUMBER';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)em\b return 'EMS';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)ex\b return 'EXS';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)ch\b return 'CHS';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)rem\b return 'REMS';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)vw\b return 'VWS';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)vh\b return 'VHS';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)vmin\b return 'VMINS';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)vmax\b return 'VMAXS';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)cm\b return 'LENGTH';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)mm\b return 'LENGTH';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)in\b return 'LENGTH';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)pt\b return 'LENGTH';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)pc\b return 'LENGTH';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)px\b return 'LENGTH';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)deg\b return 'ANGLE';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)grad\b return 'ANGLE';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)rad\b return 'ANGLE';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)turn\b return 'ANGLE';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)s\b return 'TIME';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)ms\b return 'TIME';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)Hz\b return 'FREQ';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)kHz\b return 'FREQ';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)dpi\b return 'RES';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)dpcm\b return 'RES';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)dppx\b return 'RES';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)\% return 'PERCENTAGE';
(([0-9]+("."[0-9]+)?|"."[0-9]+)(e(\+|-)[0-9]+)?)\b return 'NUMBER';

"(" return 'LPAREN';
")" return 'RPAREN';
Expand Down Expand Up @@ -82,11 +82,11 @@ expression
;

css_value
: 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] }; }
| FREQ { $$ = { type: 'FrequencyValue', value: parseFloat($1), unit: /[a-z]+/i.exec($1)[0] }; }
| RES { $$ = { type: 'ResolutionValue', value: parseFloat($1), unit: /[a-z]+/i.exec($1)[0] }; }
: 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] }; }
| FREQ { $$ = { type: 'FrequencyValue', value: parseFloat($1), unit: /[a-z]+$/i.exec($1)[0] }; }
| RES { $$ = { type: 'ResolutionValue', value: parseFloat($1), unit: /[a-z]+$/i.exec($1)[0] }; }
| EMS { $$ = { type: 'EmValue', value: parseFloat($1), unit: 'em' }; }
| EXS { $$ = { type: 'ExValue', value: parseFloat($1), unit: 'ex' }; }
| CHS { $$ = { type: 'ChValue', value: parseFloat($1), unit: 'ch' }; }
Expand Down

0 comments on commit 1cd2c5f

Please sign in to comment.