|
|
|
Lines 108-124
namespace css = mozilla::css;
|
Link Here
|
|---|
|
| 108 |
#define VARIANT_ATTR 0x001000 // |
108 |
#define VARIANT_ATTR 0x001000 // |
| 109 |
#define VARIANT_IDENTIFIER 0x002000 // D |
109 |
#define VARIANT_IDENTIFIER 0x002000 // D |
| 110 |
#define VARIANT_AUTO 0x010000 // A |
110 |
#define VARIANT_AUTO 0x010000 // A |
| 111 |
#define VARIANT_INHERIT 0x020000 // H eCSSUnit_Initial, eCSSUnit_Inherit |
111 |
#define VARIANT_INHERIT 0x020000 // H eCSSUnit_Initial, eCSSUnit_Inherit |
| 112 |
#define VARIANT_NONE 0x040000 // O |
112 |
#define VARIANT_NONE 0x040000 // O |
| 113 |
#define VARIANT_NORMAL 0x080000 // M |
113 |
#define VARIANT_NORMAL 0x080000 // M |
| 114 |
#define VARIANT_SYSFONT 0x100000 // eCSSUnit_System_Font |
114 |
#define VARIANT_SYSFONT 0x100000 // eCSSUnit_System_Font |
| 115 |
#define VARIANT_GRADIENT 0x200000 // eCSSUnit_Gradient |
115 |
#define VARIANT_GRADIENT 0x200000 // eCSSUnit_Gradient |
| 116 |
#define VARIANT_CUBIC_BEZIER 0x400000 // CSS transition timing function |
116 |
#define VARIANT_TIMING_FUNCTION 0x400000 // cubic-bezier() and steps() |
| 117 |
#define VARIANT_ALL 0x800000 // |
117 |
#define VARIANT_ALL 0x800000 // |
| 118 |
#define VARIANT_IMAGE_RECT 0x01000000 // eCSSUnit_Function |
118 |
#define VARIANT_IMAGE_RECT 0x01000000 // eCSSUnit_Function |
| 119 |
// This is an extra bit that says that a VARIANT_ANGLE allows unitless zero: |
119 |
// This is an extra bit that says that a VARIANT_ANGLE allows unitless zero: |
| 120 |
#define VARIANT_ZERO_ANGLE 0x02000000 // unitless zero for angles |
120 |
#define VARIANT_ZERO_ANGLE 0x02000000 // unitless zero for angles |
| 121 |
#define VARIANT_CALC 0x04000000 // eCSSUnit_Calc |
121 |
#define VARIANT_CALC 0x04000000 // eCSSUnit_Calc |
| 122 |
#define VARIANT_ELEMENT 0x08000000 // eCSSUnit_Element |
122 |
#define VARIANT_ELEMENT 0x08000000 // eCSSUnit_Element |
| 123 |
|
123 |
|
| 124 |
// Common combinations of variants |
124 |
// Common combinations of variants |
|
Lines 149-165
namespace css = mozilla::css;
|
Link Here
|
|---|
|
| 149 |
#define VARIANT_HUK (VARIANT_HK | VARIANT_URL) |
149 |
#define VARIANT_HUK (VARIANT_HK | VARIANT_URL) |
| 150 |
#define VARIANT_HUO (VARIANT_INHERIT | VARIANT_URL | VARIANT_NONE) |
150 |
#define VARIANT_HUO (VARIANT_INHERIT | VARIANT_URL | VARIANT_NONE) |
| 151 |
#define VARIANT_AHUO (VARIANT_AUTO | VARIANT_HUO) |
151 |
#define VARIANT_AHUO (VARIANT_AUTO | VARIANT_HUO) |
| 152 |
#define VARIANT_HPN (VARIANT_INHERIT | VARIANT_PERCENT | VARIANT_NUMBER) |
152 |
#define VARIANT_HPN (VARIANT_INHERIT | VARIANT_PERCENT | VARIANT_NUMBER) |
| 153 |
#define VARIANT_HN (VARIANT_INHERIT | VARIANT_NUMBER) |
153 |
#define VARIANT_HN (VARIANT_INHERIT | VARIANT_NUMBER) |
| 154 |
#define VARIANT_HON (VARIANT_HN | VARIANT_NONE) |
154 |
#define VARIANT_HON (VARIANT_HN | VARIANT_NONE) |
| 155 |
#define VARIANT_HOS (VARIANT_INHERIT | VARIANT_NONE | VARIANT_STRING) |
155 |
#define VARIANT_HOS (VARIANT_INHERIT | VARIANT_NONE | VARIANT_STRING) |
| 156 |
#define VARIANT_LPN (VARIANT_LP | VARIANT_NUMBER) |
156 |
#define VARIANT_LPN (VARIANT_LP | VARIANT_NUMBER) |
| 157 |
#define VARIANT_TIMING_FUNCTION (VARIANT_KEYWORD | VARIANT_CUBIC_BEZIER) |
|
|
| 158 |
#define VARIANT_UK (VARIANT_URL | VARIANT_KEYWORD) |
157 |
#define VARIANT_UK (VARIANT_URL | VARIANT_KEYWORD) |
| 159 |
#define VARIANT_UO (VARIANT_URL | VARIANT_NONE) |
158 |
#define VARIANT_UO (VARIANT_URL | VARIANT_NONE) |
| 160 |
#define VARIANT_ANGLE_OR_ZERO (VARIANT_ANGLE | VARIANT_ZERO_ANGLE) |
159 |
#define VARIANT_ANGLE_OR_ZERO (VARIANT_ANGLE | VARIANT_ZERO_ANGLE) |
| 161 |
#define VARIANT_TRANSFORM_LPCALC (VARIANT_LP | VARIANT_CALC) |
160 |
#define VARIANT_TRANSFORM_LPCALC (VARIANT_LP | VARIANT_CALC) |
| 162 |
#define VARIANT_IMAGE (VARIANT_URL | VARIANT_NONE | VARIANT_GRADIENT | \ |
161 |
#define VARIANT_IMAGE (VARIANT_URL | VARIANT_NONE | VARIANT_GRADIENT | \ |
| 163 |
VARIANT_IMAGE_RECT | VARIANT_ELEMENT) |
162 |
VARIANT_IMAGE_RECT | VARIANT_ELEMENT) |
| 164 |
|
163 |
|
| 165 |
// This lives here because it depends on the above macros. |
164 |
// This lives here because it depends on the above macros. |
|
|
| 512 |
PRBool ParseShadowItem(nsCSSValue& aValue, PRBool aIsBoxShadow); |
511 |
PRBool ParseShadowItem(nsCSSValue& aValue, PRBool aIsBoxShadow); |
| 513 |
PRBool ParseShadowList(nsCSSProperty aProperty); |
512 |
PRBool ParseShadowList(nsCSSProperty aProperty); |
| 514 |
PRBool ParseTransitionProperty(); |
513 |
PRBool ParseTransitionProperty(); |
| 515 |
PRBool ParseTransition(); |
514 |
PRBool ParseTransition(); |
| 516 |
PRBool ParseTransitionTimingFunctionValues(nsCSSValue& aValue); |
515 |
PRBool ParseTransitionTimingFunctionValues(nsCSSValue& aValue); |
| 517 |
PRBool ParseTransitionTimingFunctionValueComponent(float& aComponent, |
516 |
PRBool ParseTransitionTimingFunctionValueComponent(float& aComponent, |
| 518 |
char aStop, |
517 |
char aStop, |
| 519 |
PRBool aCheckRange); |
518 |
PRBool aCheckRange); |
|
|
519 |
PRBool ParseTransitionStepTimingFunctionValues(nsCSSValue& aValue); |
| 520 |
|
520 |
|
| 521 |
#ifdef MOZ_SVG |
521 |
#ifdef MOZ_SVG |
| 522 |
PRBool ParsePaint(nsCSSProperty aPropID); |
522 |
PRBool ParsePaint(nsCSSProperty aPropID); |
| 523 |
PRBool ParseDasharray(); |
523 |
PRBool ParseDasharray(); |
| 524 |
PRBool ParseMarker(); |
524 |
PRBool ParseMarker(); |
| 525 |
#endif |
525 |
#endif |
| 526 |
|
526 |
|
| 527 |
// Reused utility parsing routines |
527 |
// Reused utility parsing routines |
|
Lines 4222-4238
CSSParserImpl::TranslateDimension(nsCSSV
|
Link Here
|
|---|
|
| 4222 |
VARIANT_ATTR | \ |
4222 |
VARIANT_ATTR | \ |
| 4223 |
VARIANT_IDENTIFIER | \ |
4223 |
VARIANT_IDENTIFIER | \ |
| 4224 |
VARIANT_AUTO | \ |
4224 |
VARIANT_AUTO | \ |
| 4225 |
VARIANT_INHERIT | \ |
4225 |
VARIANT_INHERIT | \ |
| 4226 |
VARIANT_NONE | \ |
4226 |
VARIANT_NONE | \ |
| 4227 |
VARIANT_NORMAL | \ |
4227 |
VARIANT_NORMAL | \ |
| 4228 |
VARIANT_SYSFONT | \ |
4228 |
VARIANT_SYSFONT | \ |
| 4229 |
VARIANT_GRADIENT | \ |
4229 |
VARIANT_GRADIENT | \ |
| 4230 |
VARIANT_CUBIC_BEZIER | \ |
4230 |
VARIANT_TIMING_FUNCTION | \ |
| 4231 |
VARIANT_ALL | \ |
4231 |
VARIANT_ALL | \ |
| 4232 |
VARIANT_CALC |
4232 |
VARIANT_CALC |
| 4233 |
|
4233 |
|
| 4234 |
// Note that callers passing VARIANT_CALC in aVariantMask will get |
4234 |
// Note that callers passing VARIANT_CALC in aVariantMask will get |
| 4235 |
// full-range parsing inside the calc() expression, and the code that |
4235 |
// full-range parsing inside the calc() expression, and the code that |
| 4236 |
// computes the calc will be required to clamp the resulting value to an |
4236 |
// computes the calc will be required to clamp the resulting value to an |
| 4237 |
// appropriate range. |
4237 |
// appropriate range. |
| 4238 |
PRBool |
4238 |
PRBool |
|
Lines 4494-4518
CSSParserImpl::ParseVariant(nsCSSValue&
|
Link Here
|
|---|
|
| 4494 |
(eCSSToken_Function == tk->mType) && |
4494 |
(eCSSToken_Function == tk->mType) && |
| 4495 |
tk->mIdent.LowerCaseEqualsLiteral("attr")) { |
4495 |
tk->mIdent.LowerCaseEqualsLiteral("attr")) { |
| 4496 |
if (!ParseAttr(aValue)) { |
4496 |
if (!ParseAttr(aValue)) { |
| 4497 |
SkipUntil(')'); |
4497 |
SkipUntil(')'); |
| 4498 |
return PR_FALSE; |
4498 |
return PR_FALSE; |
| 4499 |
} |
4499 |
} |
| 4500 |
return PR_TRUE; |
4500 |
return PR_TRUE; |
| 4501 |
} |
4501 |
} |
| 4502 |
if (((aVariantMask & VARIANT_CUBIC_BEZIER) != 0) && |
4502 |
if (((aVariantMask & VARIANT_TIMING_FUNCTION) != 0) && |
| 4503 |
(eCSSToken_Function == tk->mType)) { |
4503 |
(eCSSToken_Function == tk->mType)) { |
| 4504 |
if (tk->mIdent.LowerCaseEqualsLiteral("cubic-bezier")) { |
4504 |
if (tk->mIdent.LowerCaseEqualsLiteral("cubic-bezier")) { |
| 4505 |
if (!ParseTransitionTimingFunctionValues(aValue)) { |
4505 |
if (!ParseTransitionTimingFunctionValues(aValue)) { |
| 4506 |
SkipUntil(')'); |
4506 |
SkipUntil(')'); |
| 4507 |
return PR_FALSE; |
4507 |
return PR_FALSE; |
| 4508 |
} |
4508 |
} |
| 4509 |
return PR_TRUE; |
4509 |
return PR_TRUE; |
| 4510 |
} |
4510 |
} |
|
|
4511 |
if (tk->mIdent.LowerCaseEqualsLiteral("steps")) { |
| 4512 |
if (!ParseTransitionStepTimingFunctionValues(aValue)) { |
| 4513 |
SkipUntil(')'); |
| 4514 |
return PR_FALSE; |
| 4515 |
} |
| 4516 |
return PR_TRUE; |
| 4517 |
} |
| 4511 |
} |
4518 |
} |
| 4512 |
if ((aVariantMask & VARIANT_CALC) && |
4519 |
if ((aVariantMask & VARIANT_CALC) && |
| 4513 |
(eCSSToken_Function == tk->mType) && |
4520 |
(eCSSToken_Function == tk->mType) && |
| 4514 |
tk->mIdent.LowerCaseEqualsLiteral("-moz-calc")) { |
4521 |
tk->mIdent.LowerCaseEqualsLiteral("-moz-calc")) { |
| 4515 |
// calc() currently allows only lengths and percents inside it. |
4522 |
// calc() currently allows only lengths and percents inside it. |
| 4516 |
return ParseCalc(aValue, aVariantMask & VARIANT_LP); |
4523 |
return ParseCalc(aValue, aVariantMask & VARIANT_LP); |
| 4517 |
} |
4524 |
} |
| 4518 |
|
4525 |
|
|
Lines 7963-7978
CSSParserImpl::ParseTransitionTimingFunc
|
Link Here
|
|---|
|
| 7963 |
aComponent = num; |
7970 |
aComponent = num; |
| 7964 |
if (ExpectSymbol(aStop, PR_TRUE)) { |
7971 |
if (ExpectSymbol(aStop, PR_TRUE)) { |
| 7965 |
return PR_TRUE; |
7972 |
return PR_TRUE; |
| 7966 |
} |
7973 |
} |
| 7967 |
} |
7974 |
} |
| 7968 |
return PR_FALSE; |
7975 |
return PR_FALSE; |
| 7969 |
} |
7976 |
} |
| 7970 |
|
7977 |
|
|
|
7978 |
PRBool |
| 7979 |
CSSParserImpl::ParseTransitionStepTimingFunctionValues(nsCSSValue& aValue) |
| 7980 |
{ |
| 7981 |
NS_ASSERTION(!mHavePushBack && |
| 7982 |
mToken.mType == eCSSToken_Function && |
| 7983 |
mToken.mIdent.LowerCaseEqualsLiteral("steps"), |
| 7984 |
"unexpected initial state"); |
| 7985 |
|
| 7986 |
nsRefPtr<nsCSSValue::Array> val = nsCSSValue::Array::Create(2); |
| 7987 |
|
| 7988 |
if (!ParsePositiveNonZeroVariant(val->Item(0), VARIANT_INTEGER, nsnull)) { |
| 7989 |
return PR_FALSE; |
| 7990 |
} |
| 7991 |
|
| 7992 |
PRInt32 type = NS_STYLE_TRANSITION_TIMING_FUNCTION_STEP_END; |
| 7993 |
if (ExpectSymbol(',', PR_TRUE)) { |
| 7994 |
if (!GetToken(PR_TRUE)) { |
| 7995 |
return PR_FALSE; |
| 7996 |
} |
| 7997 |
type = -1; |
| 7998 |
if (mToken.mType == eCSSToken_Ident) { |
| 7999 |
if (mToken.mIdent.LowerCaseEqualsLiteral("start")) { |
| 8000 |
type = NS_STYLE_TRANSITION_TIMING_FUNCTION_STEP_START; |
| 8001 |
} else if (mToken.mIdent.LowerCaseEqualsLiteral("end")) { |
| 8002 |
type = NS_STYLE_TRANSITION_TIMING_FUNCTION_STEP_END; |
| 8003 |
} |
| 8004 |
} |
| 8005 |
if (type == -1) { |
| 8006 |
UngetToken(); |
| 8007 |
return PR_FALSE; |
| 8008 |
} |
| 8009 |
} |
| 8010 |
val->Item(1).SetIntValue(type, eCSSUnit_Enumerated); |
| 8011 |
|
| 8012 |
if (!ExpectSymbol(')', PR_TRUE)) { |
| 8013 |
return PR_FALSE; |
| 8014 |
} |
| 8015 |
|
| 8016 |
aValue.SetArrayValue(val, eCSSUnit_Steps); |
| 8017 |
return PR_TRUE; |
| 8018 |
} |
| 8019 |
|
| 7971 |
static nsCSSValueList* |
8020 |
static nsCSSValueList* |
| 7972 |
AppendValueToList(nsCSSValue& aContainer, |
8021 |
AppendValueToList(nsCSSValue& aContainer, |
| 7973 |
nsCSSValueList* aTail, |
8022 |
nsCSSValueList* aTail, |
| 7974 |
const nsCSSValue& aValue) |
8023 |
const nsCSSValue& aValue) |
| 7975 |
{ |
8024 |
{ |
| 7976 |
nsCSSValueList* entry; |
8025 |
nsCSSValueList* entry; |
| 7977 |
if (aContainer.GetUnit() == eCSSUnit_Null) { |
8026 |
if (aContainer.GetUnit() == eCSSUnit_Null) { |
| 7978 |
NS_ABORT_IF_FALSE(!aTail, "should not have an entry"); |
8027 |
NS_ABORT_IF_FALSE(!aTail, "should not have an entry"); |