diff options
author | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2014-12-02 17:35:11 +0100 |
---|---|---|
committer | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2014-12-02 17:35:11 +0100 |
commit | 3e64255773e15d34c204591a06c93c04a384dfe4 (patch) | |
tree | 1d0346c26d2825283c572152319ef7b18d7bd7c8 /src/core/CSSParser.hpp | |
parent | eb0540751badfaa0f56d174f905d30eb7667ff3a (diff) |
Refactored CSS object structure into an own header file and added additional documentation.
Diffstat (limited to 'src/core/CSSParser.hpp')
-rw-r--r-- | src/core/CSSParser.hpp | 124 |
1 files changed, 1 insertions, 123 deletions
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<std::string, std::string> values; - const Specificity specificity; - -public: - RuleSet(Manager &mgr, std::map<std::string, std::string> values, - Specificity specificity) - : Managed(mgr), values(std::move(values)), specificity(specificity) - { - } - - const std::map<std::string, std::string> &getValues() const - { - return values; - } - - const Specificity &getSpecificity() const { return specificity; } -}; - -class PseudoSelector { -private: - const std::string name; - const std::vector<std::string> args; - const bool generative; - -public: - PseudoSelector(std::string name, std::vector<std::string> args, - bool generative) - : name(std::move(name)), args(std::move(args)), generative(generative) - { - } - - const std::string &getName() const { return name; } - - const std::vector<std::string> &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<StyleNode> target; - const SelectionOperator selectionOperator; - - public: - StyleEdge(Manager &mgr, Handle<StyleNode> target, - SelectionOperator selectionOperator) - : Managed(mgr), - target(acquire(target)), - selectionOperator(selectionOperator) - { - } - - Rooted<StyleNode> getTarget() const { return target; } - - const SelectionOperator &getSelectionOperator() const - { - return selectionOperator; - } - }; - -private: - const PseudoSelector pseudoSelector; - std::vector<Owned<StyleEdge>> edges; - const std::vector<Owned<RuleSet>> ruleSets; - -public: - StyleNode(Manager &mgr, std::string name, - PseudoSelector pseudoSelector, - const std::vector<Handle<StyleEdge>> &edges, - const std::vector<Handle<RuleSet>> &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<Owned<StyleEdge>> &getEdges() const { return edges; } - - const std::vector<Owned<RuleSet>> &getRuleSets() const { return ruleSets; } -}; - class CSSParser { private: |