From 70a6db98663592464a5b082d195f93d280391eb7 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Tue, 11 Nov 2008 21:22:52 +0100 Subject: adjust pseudo class handling --- src/css.cc | 46 ++++++++++++++++++++++++---------------------- src/css.hh | 6 ++++-- src/doctree.hh | 2 +- src/styleengine.cc | 6 +++--- 4 files changed, 32 insertions(+), 28 deletions(-) (limited to 'src') 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); // , 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); // , , 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); //

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); //

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); //

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); //

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); //
    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); //
        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);
     
        // 
        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);
     
        // 
    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); // 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); //
           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  {
     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;
     }
     
     /**
    -- 
    cgit v1.2.3