// Note that this does include VARIANT_CALC, which is numeric. This is // because calc() parsing, as proposed, drops range restrictions inside // the calc() expression and clamps the result of the calculation to the // range. // Note that callers passing VARIANT_CALC in aVariantMask will get // full-range parsing inside the calc() expression, and the code that // computes the calc will be required to clamp the resulting value to an // appropriate range. internal bool ParseNonNegativeVariant(ref nsCSSValue aValue, int32_t aVariantMask, int32_t[] aKeywordTable) { // The variant mask must only contain non-numeric variants or the ones // that we specifically handle. Debug.Assert((aVariantMask & ~(VARIANT_ALL_NONNUMERIC | VARIANT_NUMBER | VARIANT_LENGTH | VARIANT_PERCENT | VARIANT_INTEGER)) == 0, "need to update code below to handle additional variants"); if (ParseVariant(ref aValue, aVariantMask, aKeywordTable)) { if (nsCSSUnit.Number == aValue.GetUnit() || aValue.IsLengthUnit()){ if (aValue.GetFloatValue() < 0) { UngetToken(); return false; } } else if (aValue.GetUnit() == nsCSSUnit.Percent) { if (aValue.GetPercentValue() < 0) { UngetToken(); return false; } } else if (aValue.GetUnit() == nsCSSUnit.Integer) { if (aValue.GetIntValue() < 0) { UngetToken(); return false; } } return true; } return false; }