зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1208951 - Part 4: Add an nsCSSParser entry point to parse a single longhand property and return an nsCSSValue. r=birtles
It is a slight hassle for code to have to create a Declaration object to pass in to nsCSSParser::ParseProperty when all it wants is the resulting single nsCSSValue, if parsing a longhand property. Declaration is also inaccessible outside layout/style/.
This commit is contained in:
Родитель
9b05852073
Коммит
d970ebb2b7
|
@ -168,6 +168,12 @@ public:
|
|||
bool* aChanged,
|
||||
bool aIsImportant,
|
||||
bool aIsSVGMode);
|
||||
void ParseLonghandProperty(const nsCSSProperty aPropID,
|
||||
const nsAString& aPropValue,
|
||||
nsIURI* aSheetURL,
|
||||
nsIURI* aBaseURL,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
nsCSSValue& aValue);
|
||||
|
||||
void ParseMediaList(const nsSubstring& aBuffer,
|
||||
nsIURI* aURL, // for error reporting
|
||||
|
@ -1756,6 +1762,33 @@ CSSParserImpl::ParseRule(const nsAString& aRule,
|
|||
return rv;
|
||||
}
|
||||
|
||||
void
|
||||
CSSParserImpl::ParseLonghandProperty(const nsCSSProperty aPropID,
|
||||
const nsAString& aPropValue,
|
||||
nsIURI* aSheetURL,
|
||||
nsIURI* aBaseURL,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
nsCSSValue& aValue)
|
||||
{
|
||||
MOZ_ASSERT(aPropID < eCSSProperty_COUNT_no_shorthands,
|
||||
"ParseLonghandProperty must only take a longhand property");
|
||||
|
||||
Declaration declaration;
|
||||
declaration.InitializeEmpty();
|
||||
|
||||
bool changed;
|
||||
ParseProperty(aPropID, aPropValue, aSheetURL, aBaseURL, aSheetPrincipal,
|
||||
&declaration, &changed,
|
||||
/* aIsImportant */ false,
|
||||
/* aIsSVGMode */ false);
|
||||
|
||||
if (changed) {
|
||||
aValue = *declaration.GetNormalBlock()->ValueFor(aPropID);
|
||||
} else {
|
||||
aValue.Reset();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CSSParserImpl::ParseProperty(const nsCSSProperty aPropID,
|
||||
const nsAString& aPropValue,
|
||||
|
@ -16096,6 +16129,19 @@ nsCSSParser::ParseProperty(const nsCSSProperty aPropID,
|
|||
aIsImportant, aIsSVGMode);
|
||||
}
|
||||
|
||||
void
|
||||
nsCSSParser::ParseLonghandProperty(const nsCSSProperty aPropID,
|
||||
const nsAString& aPropValue,
|
||||
nsIURI* aSheetURI,
|
||||
nsIURI* aBaseURI,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
nsCSSValue& aResult)
|
||||
{
|
||||
static_cast<CSSParserImpl*>(mImpl)->
|
||||
ParseLonghandProperty(aPropID, aPropValue, aSheetURI, aBaseURI,
|
||||
aSheetPrincipal, aResult);
|
||||
}
|
||||
|
||||
void
|
||||
nsCSSParser::ParseVariable(const nsAString& aVariableName,
|
||||
const nsAString& aPropValue,
|
||||
|
|
|
@ -135,6 +135,16 @@ public:
|
|||
bool aIsImportant,
|
||||
bool aIsSVGMode = false);
|
||||
|
||||
// Same as ParseProperty but returns an nsCSSValue in aResult
|
||||
// rather than storing the property in a Declaration. aPropID
|
||||
// must be a longhand property.
|
||||
void ParseLonghandProperty(const nsCSSProperty aPropID,
|
||||
const nsAString& aPropValue,
|
||||
nsIURI* aSheetURL,
|
||||
nsIURI* aBaseURL,
|
||||
nsIPrincipal* aSheetPrincipal,
|
||||
nsCSSValue& aResult);
|
||||
|
||||
// The same as ParseProperty but for a variable.
|
||||
void ParseVariable(const nsAString& aVariableName,
|
||||
const nsAString& aPropValue,
|
||||
|
|
Загрузка…
Ссылка в новой задаче