gecko/layout/style/moz.build
Cameron McCormack 4fb5922824 Bug 773296 - Part 8: Resolve and compute CSS variables. r=dbaron
We add a new class CSSVariableResolver whose job is to take the
inherited computed variables and the specified variable declarations and
to perform cycle removal and resolution of the variables, storing the
result in the CSSVariableValues object on an nsStyleVariables.  We use
CSSVariableResolver in nsRuleNode::ComputeVariablesData.

The variable resolver does this:

  1. Asks the CSSVariableValues and CSSVariableDeclarations objects
     to add their variables to it.
  2. Calls in to a new nsCSSParser function
     EnumerateVariableReferences that informs the resolver which
     other variables a given variable references, and by doing so,
     builds a graph of variable dependencies.
  3. Removes variables involved in cyclic references using Tarjan's
     strongly connected component algorithm, setting those variables
     to have an invalid value.
  4. Calls in to a new nsCSSParser function ResolveVariableValue
     to resolve the remaining valid variables by substituting variable
     references.

We extend nsCSSParser::ParseValueWithVariables to take a callback
function to be invoked when encountering a variable reference.  This
lets EnumerateVariableReferences re-use ParseValueWithVariables.

CSSParserImpl::ResolveValueWithVariableReferences needs different
error handling behaviour from ParseValueWithVariables, so we don't
re-use it.

CSSParserImpl::AppendImpliedEOFCharacters is used to take the
value returned from nsCSSScanner::GetImpliedEOFCharacters while
resolving variable references that were declared using custom
properties that encountered EOF before being closed properly.

The SeparatorRequiredBetweenTokens helper function in nsCSSParser.cpp
implements the serialization rules in CSS Syntax Module Level 3:

https://dvcs.w3.org/hg/csswg/raw-file/3479cdefc59a/css-syntax/Overview.html#serialization
2013-12-12 13:09:41 +11:00

157 lines
3.7 KiB
Python

# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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/.
DIRS += ['xbl-marquee']
TEST_TOOL_DIRS += ['test']
EXPORTS += [
'AnimationCommon.h',
'nsAnimationManager.h',
'nsComputedDOMStylePropertyList.h',
'nsCSSAnonBoxes.h',
'nsCSSAnonBoxList.h',
'nsCSSFontDescList.h',
'nsCSSKeywordList.h',
'nsCSSKeywords.h',
'nsCSSParser.h',
'nsCSSPropAliasList.h',
'nsCSSProperty.h',
'nsCSSPropList.h',
'nsCSSProps.h',
'nsCSSPseudoClasses.h',
'nsCSSPseudoClassList.h',
'nsCSSPseudoElementList.h',
'nsCSSPseudoElements.h',
'nsCSSRuleProcessor.h',
'nsCSSScanner.h',
'nsCSSStyleSheet.h',
'nsCSSValue.h',
'nsDOMCSSAttrDeclaration.h',
'nsDOMCSSDeclaration.h',
'nsDOMCSSRGBColor.h',
'nsDOMMediaQueryList.h',
'nsICSSDeclaration.h',
'nsICSSLoaderObserver.h',
'nsICSSPseudoComparator.h',
'nsICSSRuleList.h',
'nsICSSStyleRuleDOMWrapper.h',
'nsIStyleRule.h',
'nsIStyleRuleProcessor.h',
'nsIStyleSheet.h',
'nsLayoutStylesheetCache.h',
'nsRuleData.h',
'nsRuleNode.h',
'nsRuleProcessorData.h',
'nsRuleWalker.h',
'nsStyleAnimation.h',
'nsStyleConsts.h',
'nsStyleContext.h',
'nsStyleCoord.h',
'nsStyleSet.h',
'nsStyleStruct.h',
'nsStyleStructFwd.h',
'nsStyleStructInlines.h',
'nsStyleTransformMatrix.h',
'nsStyleUtil.h',
]
EXPORTS.mozilla += [
'CSSVariableDeclarations.h',
'CSSVariableResolver.h',
'CSSVariableValues.h',
]
EXPORTS.mozilla.dom += [
'CSS.h',
'CSSValue.h',
]
EXPORTS.mozilla.css += [
'Declaration.h',
'ErrorReporter.h',
'GroupRule.h',
'ImageLoader.h',
'ImportRule.h',
'Loader.h',
'NameSpaceRule.h',
'Rule.h',
'StyleRule.h',
]
UNIFIED_SOURCES += [
'AnimationCommon.cpp',
'CSS.cpp',
'CSSVariableDeclarations.cpp',
'CSSVariableResolver.cpp',
'CSSVariableValues.cpp',
'Declaration.cpp',
'ErrorReporter.cpp',
'ImageLoader.cpp',
'Loader.cpp',
'nsAnimationManager.cpp',
'nsComputedDOMStyle.cpp',
'nsCSSAnonBoxes.cpp',
'nsCSSDataBlock.cpp',
'nsCSSKeywords.cpp',
'nsCSSParser.cpp',
'nsCSSProps.cpp',
'nsCSSPseudoClasses.cpp',
'nsCSSPseudoElements.cpp',
'nsCSSRules.cpp',
'nsCSSScanner.cpp',
'nsCSSStyleSheet.cpp',
'nsCSSValue.cpp',
'nsDOMCSSAttrDeclaration.cpp',
'nsDOMCSSDeclaration.cpp',
'nsDOMCSSRect.cpp',
'nsDOMCSSRGBColor.cpp',
'nsDOMCSSValueList.cpp',
'nsDOMMediaQueryList.cpp',
'nsHTMLCSSStyleSheet.cpp',
'nsHTMLStyleSheet.cpp',
'nsLayoutStylesheetCache.cpp',
'nsMediaFeatures.cpp',
'nsNthIndexCache.cpp',
'nsROCSSPrimitiveValue.cpp',
'nsRuleData.cpp',
'nsRuleNode.cpp',
'nsStyleAnimation.cpp',
'nsStyleContext.cpp',
'nsStyleCoord.cpp',
'nsStyleSet.cpp',
'nsStyleStruct.cpp',
'nsStyleTransformMatrix.cpp',
'nsStyleUtil.cpp',
'nsTransitionManager.cpp',
'StyleRule.cpp',
]
# nsCSSRuleProcessor.cpp needs to be built separately because it uses plarena.h.
# nsFontFaceLoader.cpp needs to be built separately because it forces NSPR logging.
SOURCES += [
'nsCSSRuleProcessor.cpp',
'nsFontFaceLoader.cpp',
]
FAIL_ON_WARNINGS = True
MSVC_ENABLE_PGO = True
include('/ipc/chromium/chromium-config.mozbuild')
FINAL_LIBRARY = 'gklayout'
LOCAL_INCLUDES += [
'../../content/base/src',
'../../content/html/content/src',
'../../content/xbl/src',
'../../content/xul/document/src',
'../base',
'../generic',
'../xul',
'/dom/base',
]