#ifndef SASS_EXTENSION_H #define SASS_EXTENSION_H // sass.hpp must go before all system headers to get the // __EXTENSIONS__ fix on Solaris. #include "sass.hpp" #include #include #include "ast_fwd_decl.hpp" #include "backtrace.hpp" namespace Sass { class Extension { public: // The selector in which the `@extend` appeared. ComplexSelectorObj extender; // The selector that's being extended. // `null` for one-off extensions. SimpleSelectorObj target; // The minimum specificity required for any // selector generated from this extender. size_t specificity; // Whether this extension is optional. bool isOptional; // Whether this is a one-off extender representing a selector that was // originally in the document, rather than one defined with `@extend`. bool isOriginal; bool isSatisfied; // The media query context to which this extend is restricted, // or `null` if it can apply within any context. CssMediaRuleObj mediaContext; // Creates a one-off extension that's not intended to be modified over time. // If [specificity] isn't passed, it defaults to `extender.maxSpecificity`. Extension(ComplexSelectorObj extender) : extender(extender), target({}), specificity(0), isOptional(true), isOriginal(false), isSatisfied(false), mediaContext({}) { } // Copy constructor Extension(const Extension& extension) : extender(extension.extender), target(extension.target), specificity(extension.specificity), isOptional(extension.isOptional), isOriginal(extension.isOriginal), isSatisfied(extension.isSatisfied), mediaContext(extension.mediaContext) { } // Default constructor Extension() : extender({}), target({}), specificity(0), isOptional(false), isOriginal(false), isSatisfied(false), mediaContext({}) { } // Asserts that the [mediaContext] for a selector is // compatible with the query context for this extender. void assertCompatibleMediaContext(CssMediaRuleObj mediaContext, Backtraces& traces) const; Extension withExtender(const ComplexSelectorObj& newExtender) const; }; } #endif