aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2008-11-11 21:22:52 +0100
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2008-11-11 21:22:52 +0100
commit70a6db98663592464a5b082d195f93d280391eb7 (patch)
treeb0ff17a0d96d67458d8d5bd4302d641be6dada3a /src
parent1649a022271e67611d830127a0d9f34852b2718c (diff)
adjust pseudo class handling
Diffstat (limited to 'src')
-rw-r--r--src/css.cc46
-rw-r--r--src/css.hh6
-rw-r--r--src/doctree.hh2
-rw-r--r--src/styleengine.cc6
4 files changed, 32 insertions, 28 deletions
diff --git a/src/css.cc b/src/css.cc
index d8b48a46..d35e818c 100644
--- a/src/css.cc
+++ b/src/css.cc
@@ -51,8 +51,10 @@ bool CssSelector::match (Doctree *docTree) {
if (tag >= 0 && tag != n->tag)
return false;
if (klass != NULL &&
- (n->klass == NULL || strcmp (klass, n->klass) != 0) &&
- (n->pseudoClass == NULL || strcmp (klass, n->pseudoClass) != 0))
+ (n->klass == NULL || strcmp (klass, n->klass) != 0))
+ return false;
+ if (pseudo != NULL &&
+ (n->pseudo == NULL || strcmp (pseudo, n->pseudo) != 0))
return false;
if (id != NULL && (n->id == NULL || strcmp (id, n->id) != 0))
return false;
@@ -123,78 +125,78 @@ CssStyleSheet * CssContext::buildUserAgentStyle () {
props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, "DejaVu Sans");
props->set (CssProperty::CSS_PROPERTY_COLOR, 0x000000);
props->set (CssProperty::CSS_PROPERTY_MARGIN, 5);
- s->addRule (new CssSelector(a_Html_tag_index("body"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("body")), props);
// :link
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_COLOR, 0x0000ff);
props->set (CssProperty::CSS_PROPERTY_TEXT_DECORATION, TEXT_DECORATION_UNDERLINE);
props->set (CssProperty::CSS_PROPERTY_CURSOR, CURSOR_POINTER);
- s->addRule (new CssSelector(-1, "link", NULL), props);
+ s->addRule (new CssSelector(-1, NULL, "link"), props);
// :visited
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_COLOR, 0x800080);
props->set (CssProperty::CSS_PROPERTY_TEXT_DECORATION, TEXT_DECORATION_UNDERLINE);
props->set (CssProperty::CSS_PROPERTY_CURSOR, CURSOR_POINTER);
- s->addRule (new CssSelector(-1, "visited", NULL), props);
+ s->addRule (new CssSelector(-1, NULL, "visited"), props);
// <b>, <strong>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_FONT_WEIGHT, CssProperty::CSS_FONT_WEIGHT_BOLDER);
- s->addRule (new CssSelector(a_Html_tag_index("b"), NULL, NULL), props);
- s->addRule (new CssSelector(a_Html_tag_index("strong"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("b")), props);
+ s->addRule (new CssSelector(a_Html_tag_index("strong")), props);
// <i>, <em>, <cite>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_FONT_STYLE, FONT_STYLE_ITALIC);
- s->addRule (new CssSelector(a_Html_tag_index("i"), NULL, NULL), props);
- s->addRule (new CssSelector(a_Html_tag_index("em"), NULL, NULL), props);
- s->addRule (new CssSelector(a_Html_tag_index("cite"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("i")), props);
+ s->addRule (new CssSelector(a_Html_tag_index("em")), props);
+ s->addRule (new CssSelector(a_Html_tag_index("cite")), props);
// <h1>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, 40);
- s->addRule (new CssSelector(a_Html_tag_index("h1"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("h1")), props);
// <h2>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, 30);
- s->addRule (new CssSelector(a_Html_tag_index("h2"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("h2")), props);
// <h3>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, 20);
- s->addRule (new CssSelector(a_Html_tag_index("h3"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("h3")), props);
// <h4>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, 12);
props->set (CssProperty::CSS_PROPERTY_FONT_WEIGHT, CssProperty::CSS_FONT_WEIGHT_BOLD);
- s->addRule (new CssSelector(a_Html_tag_index("h4"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("h4")), props);
// <ol>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_LIST_STYLE_TYPE, LIST_STYLE_TYPE_DECIMAL);
- s->addRule (new CssSelector(a_Html_tag_index("ol"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("ol")), props);
// <pre>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, "DejaVu Sans Mono");
- s->addRule (new CssSelector(a_Html_tag_index("pre"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("pre")), props);
// <table>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_BORDER_STYLE, BORDER_OUTSET);
props->set (CssProperty::CSS_PROPERTY_BORDER_SPACING_HORIZONTAL, 1);
props->set (CssProperty::CSS_PROPERTY_BORDER_SPACING_VERTICAL, 1);
- s->addRule (new CssSelector(a_Html_tag_index("table"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("table")), props);
// <td>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_BORDER_STYLE, BORDER_INSET);
props->set (CssProperty::CSS_PROPERTY_PADDING, 2);
- s->addRule (new CssSelector(a_Html_tag_index("td"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("td")), props);
return s;
}
@@ -207,12 +209,12 @@ CssStyleSheet * CssContext::buildUserStyle (bool important) {
// :link
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_COLOR, prefs.link_color);
- s->addRule (new CssSelector(-1, "link", NULL), props);
+ s->addRule (new CssSelector(-1, NULL, "link"), props);
// :visited
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_COLOR, prefs.visited_color);
- s->addRule (new CssSelector(-1, "visited", NULL), props);
+ s->addRule (new CssSelector(-1, NULL, "visited"), props);
// <body>
props = new CssPropertyList ();
@@ -221,12 +223,12 @@ CssStyleSheet * CssContext::buildUserStyle (bool important) {
props->set (CssProperty::CSS_PROPERTY_FONT_SIZE,
(int) rint(14.0 * prefs.font_factor));
props->set (CssProperty::CSS_PROPERTY_COLOR, prefs.text_color);
- s->addRule (new CssSelector(a_Html_tag_index("body"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("body")), props);
// <pre>
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, prefs.fw_fontname);
- s->addRule (new CssSelector(a_Html_tag_index("pre"), NULL, NULL), props);
+ s->addRule (new CssSelector(a_Html_tag_index("pre")), props);
}
return s;
diff --git a/src/css.hh b/src/css.hh
index 017a2fc2..a18e8987 100644
--- a/src/css.hh
+++ b/src/css.hh
@@ -156,12 +156,14 @@ class CssPropertyList : public lout::misc::SimpleVector <CssProperty> {
class CssSelector {
private:
int tag;
- const char *klass, *id;
+ const char *klass, *pseudo, *id;
public:
- CssSelector (int tag, const char *klass, const char *id) {
+ CssSelector (int tag, const char *klass = NULL,
+ const char *pseudo = NULL, const char *id = NULL) {
this->tag = tag;
this->klass = klass;
+ this->pseudo = pseudo;
this->id = id;
};
diff --git a/src/doctree.hh b/src/doctree.hh
index 5533d136..43eb742f 100644
--- a/src/doctree.hh
+++ b/src/doctree.hh
@@ -6,7 +6,7 @@ class DoctreeNode {
int depth;
int tag;
const char *klass;
- const char *pseudoClass;
+ const char *pseudo;
const char *id;
};
diff --git a/src/styleengine.cc b/src/styleengine.cc
index e43d9171..6d6d3085 100644
--- a/src/styleengine.cc
+++ b/src/styleengine.cc
@@ -59,7 +59,7 @@ void StyleEngine::startElement (int tag, const char *id, const char *klass,
n->tag = tag;
n->id = id;
n->klass = klass;
- n->pseudoClass = NULL;
+ n->pseudo = NULL;
n->styleAttribute = style;
}
@@ -76,8 +76,8 @@ void StyleEngine::setNonCssProperties (CssPropertyList *props) {
/**
* \brief set the CSS pseudo class (e.g. "link", "visited").
*/
-void StyleEngine::setPseudoClass (const char *pseudoClass) {
- stack->getRef (stack->size () - 1)->pseudoClass = pseudoClass;
+void StyleEngine::setPseudoClass (const char *pseudo) {
+ stack->getRef (stack->size () - 1)->pseudo = pseudo;
}
/**