1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* CSS parsing utility functions */
#ifndef mozilla_ServoCSSParser_h
#define mozilla_ServoCSSParser_h
#include "mozilla/AlreadyAddRefed.h"
#include "mozilla/gfx/Matrix.h"
#include "nsColor.h"
#include "nsCSSPropertyID.h"
#include "nsDOMCSSDeclaration.h"
#include "nsStringFwd.h"
struct nsCSSRect;
template <class T>
class RefPtr;
namespace mozilla {
struct AnimatedPropertyID;
class ServoStyleSet;
struct URLExtraData;
struct StyleFontFamilyList;
struct StyleFontStretch;
struct StyleFontWeight;
struct StyleFontStyle;
struct StyleLockedDeclarationBlock;
struct StyleParsingMode;
union StyleComputedFontStyleDescriptor;
template <typename Integer, typename Number, typename LinearStops>
struct StyleTimingFunction;
struct StylePiecewiseLinearFunction;
using StyleComputedTimingFunction =
StyleTimingFunction<int32_t, float, StylePiecewiseLinearFunction>;
namespace css {
class Loader;
}
namespace dom {
class Document;
}
class ServoCSSParser {
public:
using ParsingEnvironment = nsDOMCSSDeclaration::ParsingEnvironment;
/**
* Returns whether the specified string can be parsed as a valid CSS
* <color> value.
*
* This includes Mozilla-specific keywords such as -moz-default-color.
*/
static bool IsValidCSSColor(const nsACString& aValue);
/**
* Computes an nscolor from the given CSS <color> value.
*
* @param aStyleSet The style set whose nsPresContext will be used to
* compute system colors and other special color values.
* @param aCurrentColor The color value that currentcolor should compute to.
* @param aValue The CSS <color> value.
* @param aResultColor The resulting computed color value.
* @param aWasCurrentColor Whether aValue was currentcolor. Can be nullptr
* if the caller doesn't care.
* @param aLoader The CSS loader for document we're parsing a color for,
* so that parse errors can be reported to the console. If nullptr, errors
* won't be reported to the console.
* @return Whether aValue was successfully parsed and aResultColor was set.
*/
static bool ComputeColor(ServoStyleSet* aStyleSet, nscolor aCurrentColor,
const nsACString& aValue, nscolor* aResultColor,
bool* aWasCurrentColor = nullptr,
css::Loader* aLoader = nullptr);
/**
* Takes a CSS <color> and convert it to another color space.
*
* @param aStyleSet The style set whose nsPresContext will be used to
* compute system colors and other special color values.
* @param aFromColor The CSS <color> we use to convert from.
* @param aToColorSpace The CSS <color-space> to convert the color into.
* @param aResultColor The resulting converted color value.
* @param aResultAdjusted Whether the color was adjusted to fit into the SRGB
color space.
* @param aLoader The CSS loader for document we're parsing a color for,
* so that parse errors can be reported to the console. If nullptr, errors
* won't be reported to the console.
* @return Whether aFromColor and aToColorSpace was successfully parsed and
* aResultColor and aResultAdjusted was set.
*/
static bool ColorTo(const nsACString& aFromColor,
const nsACString& aToColorSpace, nsACString* aResultColor,
nsTArray<float>* aResultComponents, bool* aResultAdjusted,
css::Loader* aLoader = nullptr);
/**
* Parse a string representing a CSS property value into a
* StyleLockedDeclarationBlock.
*
* @param aProperty The property to be parsed.
* @param aValue The specified value.
* @param aParsingEnvironment All the parsing environment data we need.
* @param aParsingMode The parsing mode we apply.
* @return The parsed value as a StyleLockedDeclarationBlock. We put the value
* in a declaration block since that is how we represent specified values
* in Servo.
*/
static already_AddRefed<StyleLockedDeclarationBlock> ParseProperty(
nsCSSPropertyID aProperty, const nsACString& aValue,
const ParsingEnvironment& aParsingEnvironment,
const StyleParsingMode& aParsingMode);
static already_AddRefed<StyleLockedDeclarationBlock> ParseProperty(
const AnimatedPropertyID& aProperty, const nsACString& aValue,
const ParsingEnvironment& aParsingEnvironment,
const StyleParsingMode& aParsingMode);
/**
* Parse a animation timing function.
*
* @param aValue The specified value.
* @param aResult The output timing function. (output)
* @return Whether the value was successfully parsed.
*/
static bool ParseEasing(const nsACString& aValue,
StyleComputedTimingFunction& aResult);
/**
* Parse a specified transform list into a gfx matrix.
*
* @param aValue The specified value.
* @param aContains3DTransform The output flag indicates whether this is any
* 3d transform function. (output)
* @param aResult The output matrix. (output)
* @return Whether the value was successfully parsed.
*/
static bool ParseTransformIntoMatrix(const nsACString& aValue,
bool& aContains3DTransform,
gfx::Matrix4x4& aResult);
/**
* Parse a font shorthand for FontFaceSet matching, so we only care about
* FontFamily, FontStyle, FontStretch, and FontWeight.
*
* @param aValue The specified value.
* @param aUrl The parser url extra data.
* @param aList The parsed FontFamily list. (output)
* @param aStyle The parsed FontStyle. (output)
* @param aStretch The parsed FontStretch. (output)
* @param aWeight The parsed FontWeight. (output)
* @param aSize If non-null, returns the parsed font size. (output)
* @param aSmallCaps If non-null, whether small-caps was specified (output)
* @return Whether the value was successfully parsed.
*/
static bool ParseFontShorthandForMatching(
const nsACString& aValue, URLExtraData* aUrl, StyleFontFamilyList& aList,
StyleFontStyle& aStyle, StyleFontStretch& aStretch,
StyleFontWeight& aWeight, float* aSize = nullptr,
bool* aSmallCaps = nullptr);
/**
* Get a URLExtraData from a document.
*/
static already_AddRefed<URLExtraData> GetURLExtraData(dom::Document*);
/**
* Get a ParsingEnvironment from a document.
*/
static ParsingEnvironment GetParsingEnvironment(dom::Document*);
};
} // namespace mozilla
#endif // mozilla_ServoCSSParser_h
|