From 3e64255773e15d34c204591a06c93c04a384dfe4 Mon Sep 17 00:00:00 2001 From: Benjamin Paassen Date: Tue, 2 Dec 2014 17:35:11 +0100 Subject: Refactored CSS object structure into an own header file and added additional documentation. --- src/core/CSSParser.hpp | 124 +------------------------------------------------ 1 file changed, 1 insertion(+), 123 deletions(-) (limited to 'src/core/CSSParser.hpp') diff --git a/src/core/CSSParser.hpp b/src/core/CSSParser.hpp index 8c15e8e..4c99a5a 100644 --- a/src/core/CSSParser.hpp +++ b/src/core/CSSParser.hpp @@ -27,132 +27,10 @@ #include "BufferedCharReader.hpp" #include "Managed.hpp" #include "Node.hpp" +#include "CSS.hpp" namespace ousia { -/* - * The Specificity or Precedence of a CSS RuleSet, which decides which - * rules are applied when different RuleSets contain conflicting information. - * - * The Specificity is calculated using the official W3C recommendation - * http://www.w3.org/TR/CSS2/cascade.html#specificity - * - * Note that we do not need to use the integer 'a', since we do not allow - * local style definitions for single nodes. - */ -struct Specificity { - int b; - int c; - int d; - - Specificity(int b, int c, int d) : b(b), c(c), d(d) {} -}; - -bool operator<(const Specificity &x, const Specificity &y) -{ - return std::tie(x.b, x.c, x.d) < std::tie(y.b, y.c, y.d); -} - -bool operator>(const Specificity &x, const Specificity &y) -{ - return std::tie(x.b, x.c, x.d) > std::tie(y.b, y.c, y.d); -} - -bool operator==(const Specificity &x, const Specificity &y) -{ - return std::tie(x.b, x.c, x.d) == std::tie(y.b, y.c, y.d); -} - -class RuleSet : public Managed { -private: - const std::map values; - const Specificity specificity; - -public: - RuleSet(Manager &mgr, std::map values, - Specificity specificity) - : Managed(mgr), values(std::move(values)), specificity(specificity) - { - } - - const std::map &getValues() const - { - return values; - } - - const Specificity &getSpecificity() const { return specificity; } -}; - -class PseudoSelector { -private: - const std::string name; - const std::vector args; - const bool generative; - -public: - PseudoSelector(std::string name, std::vector args, - bool generative) - : name(std::move(name)), args(std::move(args)), generative(generative) - { - } - - const std::string &getName() const { return name; } - - const std::vector &getArgs() const { return args; } - - const bool &isGenerative() const { return generative; } -}; - -enum class SelectionOperator { DESCENDANT, DIRECT_DESCENDANT }; - -class StyleNode : public Node { -public: - class StyleEdge : public Managed { - private: - Owned target; - const SelectionOperator selectionOperator; - - public: - StyleEdge(Manager &mgr, Handle target, - SelectionOperator selectionOperator) - : Managed(mgr), - target(acquire(target)), - selectionOperator(selectionOperator) - { - } - - Rooted getTarget() const { return target; } - - const SelectionOperator &getSelectionOperator() const - { - return selectionOperator; - } - }; - -private: - const PseudoSelector pseudoSelector; - std::vector> edges; - const std::vector> ruleSets; - -public: - StyleNode(Manager &mgr, std::string name, - PseudoSelector pseudoSelector, - const std::vector> &edges, - const std::vector> &ruleSets) - : Node(mgr, std::move(name)), - pseudoSelector(std::move(pseudoSelector)), - edges(acquire(edges)), - ruleSets(acquire(ruleSets)) - { - } - - const PseudoSelector &getPseudoSelector() const { return pseudoSelector; } - - const std::vector> &getEdges() const { return edges; } - - const std::vector> &getRuleSets() const { return ruleSets; } -}; - class CSSParser { private: -- cgit v1.2.3