@@ -65,7 +65,6 @@ import org.w3c.css.values.CssAttr;
65
65
import org.w3c.css.values.CssBracket;
66
66
import org.w3c.css.values.CssCalc;
67
67
import org.w3c.css.values.CssCheckableValue;
68
- import org.w3c.css.values.CssClamp;
69
68
import org.w3c.css.values.CssColor;
70
69
import org.w3c.css.values.CssComparator;
71
70
import org.w3c.css.values.CssExpression;
@@ -76,8 +75,7 @@ import org.w3c.css.values.CssHashIdent;
76
75
import org.w3c.css.values.CssIdent;
77
76
import org.w3c.css.values.CssImage;
78
77
import org.w3c.css.values.CssLength;
79
- import org.w3c.css.values.CssMax;
80
- import org.w3c.css.values.CssMin;
78
+ import org.w3c.css.values.CssMathFunction;
81
79
import org.w3c.css.values.CssNumber;
82
80
import org.w3c.css.values.CssOperator;
83
81
import org.w3c.css.values.CssPercentage;
@@ -647,20 +645,18 @@ TOKEN [IGNORE_CASE] :
647
645
<DEFAULT>
648
646
TOKEN [IGNORE_CASE] :
649
647
{
650
- < RELFONTLENGTH : <NUM> "em"
651
- | <NUM> "ex"
652
- | <NUM> "cap"
653
- | <NUM> "ch"
654
- | <NUM> "ic"
655
- | <NUM> "lh"
656
- | <NUM> "rlh"
657
- | <NUM> "rem" >
658
- | <RELVIEWLENGTH : <NUM> "vw"
659
- | <NUM> "vh"
660
- | <NUM> "vi"
661
- | <NUM> "vb"
662
- | <NUM> "vmin"
663
- | <NUM> "vmax" >
648
+ < RELFONTLENGTH : <NUM> ( "r" )? "em"
649
+ | <NUM> ( "r" )? "ex"
650
+ | <NUM> ( "r" )? "cap"
651
+ | <NUM> ( "r" )? "ch"
652
+ | <NUM> ( "r" )? "ic"
653
+ | <NUM> ( "r" )? "lh" >
654
+ | <RELVIEWLENGTH : <NUM> ( "s" | "l" | "d" )? "vw"
655
+ | <NUM> ( "s" | "l" | "d" )? "vh"
656
+ | <NUM> ( "s" | "l" | "d" )? "vi"
657
+ | <NUM> ( "s" | "l" | "d" )? "vb"
658
+ | <NUM> ( "s" | "l" | "d" )? "vmin"
659
+ | <NUM> ( "s" | "l" | "d" )? "vmax" >
664
660
| <ABSOLUTLENGTH : <NUM> "cm"
665
661
| <NUM> "mm"
666
662
| <NUM> "q"
@@ -778,8 +774,10 @@ TOKEN [IGNORE_CASE] :
778
774
| <FUNCTIONNTHLASTOFTYPE : "nth-last-of-type(" >
779
775
| <FUNCTIONNOT : "not(" >
780
776
| <FUNCTIONCALC : "calc(" | "-moz-calc(" | "-webkit-calc(" >
781
- | <FUNCTIONMIN : "min(" >
782
- | <FUNCTIONMAX : "max(" >
777
+ | <FUNCTIONMATHN : "min(" | "max(" | "hypot(" >
778
+ | <FUNCTIONMATH1 : "sin(" | "cos(" | "tan(" | "asin(" | "acos(" | "atan(" | "sqrt(" | "exp(" | "abs(" | "sign(" >
779
+ | <FUNCTIONMATH2 : "mod(" | "rem(" | "atan2(" | "pow(" | "log(" >
780
+ | <FUNCTIONROUND : "round(" >
783
781
| <FUNCTIONCLAMP : "clamp(" >
784
782
| <FUNCTIONATTR : "attr(" >
785
783
| <FUNCTIONVAR : "var(" >
@@ -3171,8 +3169,7 @@ void term(CssExpression exp) :
3171
3169
)
3172
3170
)
3173
3171
| ( func=mathcalc() { setValue(func, exp, operator, null, FUNCTIONCALC); }
3174
- | func=mathmax() { setValue(func, exp, operator, null, FUNCTION); }
3175
- | func=mathmin() { setValue(func, exp, operator, null, FUNCTION); }
3172
+ | func=mathfunction() { setValue(func, exp, operator, null, FUNCTION); }
3176
3173
| func=mathclamp() { setValue(func, exp, operator, null, FUNCTION); }
3177
3174
| func=attr() { setValue(func, exp, operator, null, FUNCTION); }
3178
3175
| func=functionvar() { setValue(func, exp, operator, null, FUNCTIONVAR); }
@@ -3265,8 +3262,7 @@ void mediaterm(CssExpression exp) :
3265
3262
}
3266
3263
| ( func=function() { setValue(func, exp, operator, null, FUNCTION); }
3267
3264
| func=mathcalc() { setValue(func, exp, operator, null, FUNCTIONCALC); }
3268
- | func=mathmax() { setValue(func, exp, operator, null, FUNCTION); }
3269
- | func=mathmin() { setValue(func, exp, operator, null, FUNCTION); }
3265
+ | func=mathfunction() { setValue(func, exp, operator, null, FUNCTION); }
3270
3266
| func=mathclamp() { setValue(func, exp, operator, null, FUNCTION); }
3271
3267
) ) ( <S> )* )
3272
3268
| (( n=<STRING> { setValue(new CssString(), exp, operator, n, STRING); }
@@ -3305,60 +3301,103 @@ void mediaterm(CssExpression exp) :
3305
3301
) ( <S> )* )
3306
3302
}
3307
3303
3308
- CssCheckableValue mathmin() :
3304
+ CssCheckableValue mathfunction() :
3305
+ {
3306
+ CssCheckableValue v;
3307
+ }
3308
+ {
3309
+ ( v=mathfunction1() | v=mathfunction2() | v=mathfunctionn() | v=mathfunctionround() ) {
3310
+ return v;
3311
+ }
3312
+ }
3313
+
3314
+
3315
+ CssCheckableValue mathfunctionn() :
3309
3316
{
3310
3317
CssCheckableValue v;
3311
- CssMin c;
3318
+ CssMathFunction c;
3312
3319
Token n;
3313
3320
}
3314
3321
{
3315
- ( n=<FUNCTIONMIN> ( <S> )* v=mathsum() {
3316
- if (v.getRawType() != CssTypes.CSS_MIN) {
3317
- c = new CssMin(v);
3318
- } else {
3319
- c = (CssMin) v;
3320
- }
3322
+ ( n=<FUNCTIONMATHN> ( <S> )* v=mathsum() {
3323
+ c = new CssMathFunction(ac, n.image, v);
3321
3324
}
3322
3325
( <S> )* ( <COMMA> ( <S> )* v=mathsum() {
3323
- c.addValue(v);
3326
+ c.addValue(v);
3324
3327
} ( <S> )* )* <RPAREN> ) {
3325
3328
c.validate();
3326
3329
return c;
3327
3330
}
3328
3331
}
3329
3332
3330
- CssCheckableValue mathmax () :
3333
+ CssCheckableValue mathfunctionround () :
3331
3334
{
3332
3335
CssCheckableValue v;
3333
- CssMax c;
3336
+ CssMathFunction c;
3334
3337
Token n;
3335
3338
}
3336
3339
{
3337
- ( n=<FUNCTIONMAX> ( <S> )* v=mathsum() {
3338
- if (v.getRawType() != CssTypes.CSS_MAX) {
3339
- c = new CssMax(v);
3340
- } else {
3341
- c = (CssMax) v;
3342
- }
3340
+ ( n=<FUNCTIONROUND> { c = new CssMathFunction(ac, n.image); }
3341
+ ( <S> )* ( LOOKAHEAD(2) n=<IDENT> { c.addValue(CssIdent.getIdent(convertIdent(n.image))); }
3342
+ | v=mathsum() { c.addValue(v); } )
3343
+ ( <S> )* ( <COMMA> ( <S> )* v=mathsum() {
3344
+ c.addValue(v);
3345
+ } ( <S> )* )* <RPAREN> ) {
3346
+ c.validate();
3347
+ return c;
3348
+ }
3349
+ }
3350
+
3351
+
3352
+ CssCheckableValue mathfunction1() :
3353
+ {
3354
+ CssCheckableValue v;
3355
+ CssMathFunction c;
3356
+ Token n;
3357
+ }
3358
+ {
3359
+ ( n=<FUNCTIONMATH1> ( <S> )* v=mathsum() {
3360
+ c = new CssMathFunction(ac, n.image, v);
3343
3361
}
3344
- ( <S> )* ( <COMMA> ( <S> )* v=mathsum() {
3345
- c.addValue(v);
3346
- } ( <S> )* )* <RPAREN> ) {
3347
- c.validate();
3362
+ ( <S> )* <RPAREN> ) {
3363
+ c.validate();
3364
+ return c;
3365
+ }
3366
+ }
3367
+
3368
+ CssCheckableValue mathfunction2() :
3369
+ {
3370
+ CssCheckableValue v;
3371
+ CssMathFunction c;
3372
+ Token n;
3373
+ }
3374
+ {
3375
+ ( n=<FUNCTIONMATH2> ( <S> )* v=mathsum() {
3376
+ c = new CssMathFunction(ac, n.image, v);
3377
+ }
3378
+ ( <S> )* ( <COMMA> ( <S> )* v=mathsum() {
3379
+ c.addValue(v);
3380
+ } ( <S> )* )? <RPAREN> ) {
3381
+ c.validate();
3348
3382
return c;
3349
3383
}
3350
3384
}
3351
3385
3386
+
3387
+
3352
3388
CssCheckableValue mathclamp() :
3353
3389
{
3354
3390
CssCheckableValue v1, v2, v3;
3355
- CssClamp c;
3356
- Token n;
3391
+ CssMathFunction c;
3392
+ Token n;
3357
3393
}
3358
3394
{
3359
3395
( n=<FUNCTIONCLAMP> ( <S> )* v1=mathsum() ( <S> )* <COMMA> ( <S> )* v2=mathsum() ( <S> )*
3360
3396
<COMMA> ( <S> )* v3=mathsum() ( <S> )* <RPAREN> ) {
3361
- c = new CssClamp(ac, v1, v2, v3);
3397
+ c = new CssMathFunction(ac, n.image);
3398
+ c.addValue(v1);
3399
+ c.addValue(v2);
3400
+ c.addValue(v3);
3362
3401
c.validate();
3363
3402
return c;
3364
3403
}
@@ -3479,7 +3518,7 @@ CssCheckableValue calcnumbervalue() :
3479
3518
}
3480
3519
{
3481
3520
(
3482
- ( ( operator=unaryOperator() )? n=<NUMBER> { v = new CssNumber(); v.set(addOperator(operator, n.image), ac); } ) |
3521
+ ( ( operator=unaryOperator() )? ( n=<NUMBER> | n=<IDENT> ) { v = new CssNumber(); v.set(addOperator(operator, n.image), ac); } ) |
3483
3522
( <LPAREN> ( <S> )* v=calcnumbersum() ( <S> )* <RPAREN> { try { ((CssCalc) v).setParenthesis(); } catch (Exception ex) { ex.printStackTrace();}} )
3484
3523
) {
3485
3524
return v;
@@ -3548,7 +3587,7 @@ CssCheckableValue v = null;
3548
3587
char operator = ' ';
3549
3588
}
3550
3589
{
3551
- ( ( operator=unaryOperator() )? ( n=<NUMBER> { v = new CssNumber(); v.set(addOperator(operator, n.image), ac); }
3590
+ ( ( operator=unaryOperator() )? ( ( n=<NUMBER> | n=<IDENT> ) { v = new CssNumber(); v.set(addOperator(operator, n.image), ac); }
3552
3591
| n=<PERCENTAGE> { v = new CssPercentage(); v.set(addOperator(operator, n.image), ac); }
3553
3592
| n=<RELFONTLENGTH> { v = new CssLength(); v.set(addOperator(operator, n.image), ac); }
3554
3593
| n=<RELVIEWLENGTH> { v = new CssLength(); v.set(addOperator(operator, n.image), ac); }
@@ -3560,8 +3599,7 @@ char operator = ' ';
3560
3599
)
3561
3600
| ( <LPAREN> ( <S> )* v=mathsum() ( <S> )* <RPAREN> ) { ((CssCalc) v).setParenthesis(); }
3562
3601
| v=mathcalc()
3563
- | v=mathmax()
3564
- | v=mathmin()
3602
+ | v=mathfunction()
3565
3603
| v=mathclamp()
3566
3604
| v=attr()
3567
3605
| v=functionvar()
@@ -3869,9 +3907,11 @@ String skip_to_matching_paren() {
3869
3907
case FUNCTIONNTHLASTOFTYPE:
3870
3908
case FUNCTIONNOT:
3871
3909
case FUNCTIONCALC:
3872
- case FUNCTIONMIN:
3873
- case FUNCTIONMAX:
3910
+ case FUNCTIONMATHN:
3911
+ case FUNCTIONMATH1:
3912
+ case FUNCTIONMATH2:
3874
3913
case FUNCTIONCLAMP:
3914
+ case FUNCTIONROUND:
3875
3915
case FUNCTIONATTR:
3876
3916
case FUNCTIONVAR:
3877
3917
s.append(tok.image);
0 commit comments