summaryrefslogtreecommitdiff
path: root/src/core/CSSParser.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/CSSParser.hpp')
-rw-r--r--src/core/CSSParser.hpp124
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: