aboutsummaryrefslogtreecommitdiff
path: root/src/css.cc
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2008-11-08 17:14:39 +0100
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2008-11-08 17:14:39 +0100
commitdc012030ac53bfc77f2c03af8d4e672d4cb5ef05 (patch)
tree29488068073026f1e59bb4ab86baece8b22a24e0 /src/css.cc
parenteeef7a21f456f7b3e766e9cb782f29a1f43d64b3 (diff)
finish CSS pseudo class support and fix color of visisted links
Diffstat (limited to 'src/css.cc')
-rw-r--r--src/css.cc35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/css.cc b/src/css.cc
index b28f1d03..65615013 100644
--- a/src/css.cc
+++ b/src/css.cc
@@ -43,9 +43,20 @@ CssSelector *CssSelector::parse (const char *buf) {
return NULL;
}
-/** \todo dummy only */
+/** \todo implement all selection option CSS offers */
bool CssSelector::match (Doctree *docTree) {
- return tag < 0 || tag == docTree->top ()->tag;
+ const DoctreeNode *n = docTree-> top ();
+
+ 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))
+ return false;
+ if (id != NULL && (n->id == NULL || strcmp (id, n->id) != 0))
+ return false;
+
+ return true;
}
void CssRule::apply (CssPropertyList *props, Doctree *docTree) {
@@ -105,12 +116,19 @@ CssStyleSheet * CssContext::buildUserAgentStyle () {
CssStyleSheet *s = new CssStyleSheet ();
CssPropertyList *props;
- // <a>
+ // :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(a_Html_tag_index("a"), NULL, NULL), props);
+ s->addRule (new CssSelector(-1, "link", NULL), 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);
// <b>
props = new CssPropertyList ();
@@ -155,10 +173,15 @@ CssStyleSheet * CssContext::buildUserStyle (bool important) {
CssPropertyList *props;
if (! important) {
- // <a>
+ // :link
props = new CssPropertyList ();
props->set (CssProperty::CSS_PROPERTY_COLOR, prefs.link_color);
- s->addRule (new CssSelector(a_Html_tag_index("a"), NULL, NULL), props);
+ s->addRule (new CssSelector(-1, "link", NULL), props);
+
+ // :visited
+ props = new CssPropertyList ();
+ props->set (CssProperty::CSS_PROPERTY_COLOR, prefs.visited_color);
+ s->addRule (new CssSelector(-1, "visited", NULL), props);
// <body>
props = new CssPropertyList ();