ServoCSSParser.cpp (4352B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 /* CSS parsing utility functions */ 8 9 #include "ServoCSSParser.h" 10 11 #include "mozilla/CSSPropertyId.h" 12 #include "mozilla/ServoBindings.h" 13 #include "mozilla/ServoStyleSet.h" 14 #include "mozilla/dom/Document.h" 15 16 using namespace mozilla; 17 using namespace mozilla::dom; 18 19 /* static */ 20 bool ServoCSSParser::IsValidCSSColor(const nsACString& aValue) { 21 return Servo_IsValidCSSColor(&aValue); 22 } 23 24 /* static */ 25 bool ServoCSSParser::ComputeColor(const StylePerDocumentStyleData* aStyleData, 26 nscolor aCurrentColor, 27 const nsACString& aValue, 28 nscolor* aResultColor, bool* aWasCurrentColor, 29 css::Loader* aLoader) { 30 return Servo_ComputeColor(aStyleData, aCurrentColor, &aValue, aResultColor, 31 aWasCurrentColor, aLoader); 32 } 33 34 /* static */ 35 Maybe<StyleAbsoluteColor> ServoCSSParser::ComputeColorWellControlColor( 36 const StylePerDocumentStyleData* aStyleData, const nsACString& aValue, 37 StyleColorSpace aToColorSpace) { 38 StyleAbsoluteColor color{}; 39 if (Servo_ComputeColorWellControlColor(aStyleData, &aValue, aToColorSpace, 40 &color)) { 41 return Some(color); 42 } 43 return Nothing(); 44 } 45 46 /* static */ 47 bool ServoCSSParser::ColorTo(const nsACString& aFromColor, 48 const nsACString& aToColorSpace, 49 nsACString* aResultColor, 50 nsTArray<float>* aResultComponents, 51 bool* aResultAdjusted, css::Loader* aLoader) { 52 return Servo_ColorTo(&aFromColor, &aToColorSpace, aResultColor, 53 aResultComponents, aResultAdjusted, aLoader); 54 } 55 56 /* static */ 57 already_AddRefed<StyleLockedDeclarationBlock> ServoCSSParser::ParseProperty( 58 NonCustomCSSPropertyId aProperty, const nsACString& aValue, 59 const ParsingEnvironment& aParsingEnvironment, 60 const StyleParsingMode& aParsingMode) { 61 CSSPropertyId property(aProperty); 62 return ParseProperty(property, aValue, aParsingEnvironment, aParsingMode); 63 } 64 65 /* static */ 66 already_AddRefed<StyleLockedDeclarationBlock> ServoCSSParser::ParseProperty( 67 const CSSPropertyId& aProperty, const nsACString& aValue, 68 const ParsingEnvironment& aParsingEnvironment, 69 const StyleParsingMode& aParsingMode) { 70 return Servo_ParseProperty( 71 &aProperty, &aValue, aParsingEnvironment.mUrlExtraData, 72 aParsingMode, aParsingEnvironment.mCompatMode, 73 aParsingEnvironment.mLoader, aParsingEnvironment.mRuleType) 74 .Consume(); 75 } 76 77 /* static */ 78 bool ServoCSSParser::ParseEasing(const nsACString& aValue, 79 StyleComputedTimingFunction& aResult) { 80 return Servo_ParseEasing(&aValue, &aResult); 81 } 82 83 /* static */ 84 bool ServoCSSParser::ParseTransformIntoMatrix(const nsACString& aValue, 85 bool& aContains3DTransform, 86 gfx::Matrix4x4& aResult) { 87 return Servo_ParseTransformIntoMatrix(&aValue, &aContains3DTransform, 88 &aResult.components); 89 } 90 91 /* static */ 92 bool ServoCSSParser::ParseFontShorthandForMatching( 93 const nsACString& aValue, URLExtraData* aUrl, StyleFontFamilyList& aList, 94 StyleFontStyle& aStyle, StyleFontStretch& aStretch, 95 StyleFontWeight& aWeight, float* aSize, bool* aSmallCaps) { 96 return Servo_ParseFontShorthandForMatching( 97 &aValue, aUrl, &aList, &aStyle, &aStretch, &aWeight, aSize, aSmallCaps); 98 } 99 100 /* static */ 101 already_AddRefed<URLExtraData> ServoCSSParser::GetURLExtraData( 102 Document* aDocument) { 103 MOZ_ASSERT(aDocument); 104 return do_AddRef(aDocument->DefaultStyleAttrURLData()); 105 } 106 107 /* static */ ServoCSSParser::ParsingEnvironment 108 ServoCSSParser::GetParsingEnvironment(Document* aDocument) { 109 return { 110 GetURLExtraData(aDocument), aDocument->GetCompatibilityMode(), 111 aDocument->GetExistingCSSLoader()}; // Loader for error reporting only. 112 }