diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2008-11-07 20:47:42 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2008-11-07 20:47:42 +0100 |
commit | 8ab7dd2af3b0230112fbdd552f9461dda6371cea (patch) | |
tree | 961d4410226e4fe4c48d71abc85d5a7b4863b5ef | |
parent | 7cd57f638232a8a066d257de0e032ae9682cbd62 (diff) |
make CssProperty::Value a union of int and char*
-rw-r--r-- | src/css.cc | 46 | ||||
-rw-r--r-- | src/css.hh | 28 | ||||
-rw-r--r-- | src/html.cc | 30 | ||||
-rw-r--r-- | src/styleengine.cc | 28 | ||||
-rw-r--r-- | src/table.cc | 9 |
5 files changed, 59 insertions, 82 deletions
@@ -14,6 +14,8 @@ #include "html_common.hh" #include "css.hh" +using namespace dw::core::style; + /** \todo dummy only */ CssPropertyList *CssPropertyList::parse (const char *buf) { return NULL; @@ -102,58 +104,47 @@ void CssContext::apply (CssPropertyList *props, Doctree *docTree, CssStyleSheet * CssContext::buildUserAgentStyle () { CssStyleSheet *s = new CssStyleSheet (); CssPropertyList *props; - CssProperty::Value v; // <a> props = new CssPropertyList (); - v.color = 0x0000ff; - props->set (CssProperty::CSS_PROPERTY_COLOR, v); - v.textDecoration = dw::core::style::TEXT_DECORATION_UNDERLINE; - props->set (CssProperty::CSS_PROPERTY_TEXT_DECORATION, v); - v.cursor = dw::core::style::CURSOR_POINTER; - props->set (CssProperty::CSS_PROPERTY_CURSOR, v); + 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); // <b> props = new CssPropertyList (); - v.weight = 700; - props->set (CssProperty::CSS_PROPERTY_FONT_WEIGHT, v); + props->set (CssProperty::CSS_PROPERTY_FONT_WEIGHT, 700); s->addRule (new CssSelector(a_Html_tag_index("b"), NULL, NULL), props); // <i> props = new CssPropertyList (); - v.fontStyle = dw::core::style::FONT_STYLE_ITALIC; - props->set (CssProperty::CSS_PROPERTY_FONT_STYLE, v); + props->set (CssProperty::CSS_PROPERTY_FONT_STYLE, FONT_STYLE_ITALIC); s->addRule (new CssSelector(a_Html_tag_index("i"), NULL, NULL), props); // <h1> props = new CssPropertyList (); - v.size = 40; - props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, v); + props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, 40); s->addRule (new CssSelector(a_Html_tag_index("h1"), NULL, NULL), props); // <h2> props = new CssPropertyList (); - v.size = 30; - props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, v); + props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, 30); s->addRule (new CssSelector(a_Html_tag_index("h2"), NULL, NULL), props); // <h3> props = new CssPropertyList (); - v.size = 20; - props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, v); + props->set (CssProperty::CSS_PROPERTY_FONT_SIZE, 20); s->addRule (new CssSelector(a_Html_tag_index("h3"), NULL, NULL), props); // <ol> props = new CssPropertyList (); - v.listStyleType = dw::core::style::LIST_STYLE_TYPE_DECIMAL; - props->set (CssProperty::CSS_PROPERTY_LIST_STYLE_TYPE, v); + props->set (CssProperty::CSS_PROPERTY_LIST_STYLE_TYPE, LIST_STYLE_TYPE_DECIMAL); s->addRule (new CssSelector(a_Html_tag_index("ol"), NULL, NULL), props); // <pre> props = new CssPropertyList (); - v.name = "DejaVu Sans Mono"; - props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, v); + props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, "DejaVu Sans Mono"); s->addRule (new CssSelector(a_Html_tag_index("pre"), NULL, NULL), props); return s; @@ -162,27 +153,22 @@ CssStyleSheet * CssContext::buildUserAgentStyle () { CssStyleSheet * CssContext::buildUserStyle (bool important) { CssStyleSheet *s = new CssStyleSheet (); CssPropertyList *props; - CssProperty::Value v; if (! important) { // <a> props = new CssPropertyList (); - v.color = prefs.link_color; - props->set (CssProperty::CSS_PROPERTY_COLOR, v); + props->set (CssProperty::CSS_PROPERTY_COLOR, prefs.link_color); s->addRule (new CssSelector(a_Html_tag_index("a"), NULL, NULL), props); // <body> props = new CssPropertyList (); - v.name = prefs.vw_fontname; - props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, v); - v.color = prefs.text_color; - props->set (CssProperty::CSS_PROPERTY_COLOR, v); + props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, prefs.vw_fontname); + props->set (CssProperty::CSS_PROPERTY_COLOR, prefs.text_color); s->addRule (new CssSelector(a_Html_tag_index("body"), NULL, NULL), props); // <pre> props = new CssPropertyList (); - v.name = prefs.fw_fontname; - props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, v); + props->set (CssProperty::CSS_PROPERTY_FONT_FAMILY, prefs.fw_fontname); s->addRule (new CssSelector(a_Html_tag_index("pre"), NULL, NULL), props); } @@ -7,22 +7,8 @@ class CssProperty { public: typedef union { - int color; - dw::core::style::Length length; - dw::core::style::Cursor cursor; - dw::core::style::BorderStyle borderStyle; - dw::core::style::TextAlignType textAlignType; - dw::core::style::VAlignType valignType; - dw::core::style::DisplayType displayType; - dw::core::style::ListStyleType listStyleType; - dw::core::style::FontStyle fontStyle; - dw::core::style::TextDecoration textDecoration; - dw::core::style::WhiteSpace whiteSpace; - const char *name; /* used for font family */ - int size; - int weight; - int x_link; - int x_img; + int intVal; + char *strVal; } Value; typedef enum { @@ -125,6 +111,16 @@ class CssPropertyList : public lout::misc::SimpleVector <CssProperty> { static CssPropertyList *parse (const char *buf); void set (CssProperty::Name name, CssProperty::Value value); + void set (CssProperty::Name name, char *value) { + CssProperty::Value v; + v.strVal = value; + set (name, v); + }; + void set (CssProperty::Name name, int value) { + CssProperty::Value v; + v.intVal = value; + set (name, v); + }; void apply (CssPropertyList *props); }; diff --git a/src/html.cc b/src/html.cc index f7934365..e840b46c 100644 --- a/src/html.cc +++ b/src/html.cc @@ -294,16 +294,16 @@ void a_Html_tag_set_align_attr(DilloHtml *html, const char *align; if ((align = a_Html_get_attr(html, tag, tagsize, "align"))) { - CssProperty::Value v; + TextAlignType textAlignType = TEXT_ALIGN_LEFT; if (dStrcasecmp (align, "left") == 0) - v.textAlignType = TEXT_ALIGN_LEFT; + textAlignType = TEXT_ALIGN_LEFT; else if (dStrcasecmp (align, "right") == 0) - v.textAlignType = TEXT_ALIGN_RIGHT; + textAlignType = TEXT_ALIGN_RIGHT; else if (dStrcasecmp (align, "center") == 0) - v.textAlignType = TEXT_ALIGN_CENTER; + textAlignType = TEXT_ALIGN_CENTER; else if (dStrcasecmp (align, "justify") == 0) - v.textAlignType = TEXT_ALIGN_JUSTIFY; + textAlignType = TEXT_ALIGN_JUSTIFY; #if 0 else if (dStrcasecmp (align, "char") == 0) { /* TODO: Actually not supported for <p> etc. */ @@ -322,7 +322,7 @@ void a_Html_tag_set_align_attr(DilloHtml *html, style_attrs.textAlignChar = '.'; } #endif - props->set (CssProperty::CSS_PROPERTY_TEXT_ALIGN, v); + props->set (CssProperty::CSS_PROPERTY_TEXT_ALIGN, textAlignType); } } @@ -2456,7 +2456,6 @@ static void Html_tag_open_a(DilloHtml *html, const char *tag, int tagsize) { DilloUrl *url; CssPropertyList props; - CssProperty::Value propValue; const char *attrbuf; /* TODO: add support for MAP with A HREF */ @@ -2471,8 +2470,7 @@ static void Html_tag_open_a(DilloHtml *html, const char *tag, int tagsize) url = a_Html_url_new(html, attrbuf, NULL, 0); dReturn_if_fail ( url != NULL ); - propValue.x_link = Html_set_new_link(html, &url); - props.set (CssProperty::PROPERTY_X_LINK, propValue); + props.set (CssProperty::PROPERTY_X_LINK, Html_set_new_link(html, &url)); html->styleEngine->setNonCssProperties (&props); } @@ -2623,20 +2621,20 @@ static void Html_tag_open_ol(DilloHtml *html, const char *tag, int tagsize) if ((attrbuf = a_Html_get_attr(html, tag, tagsize, "type"))) { CssPropertyList props; - CssProperty::Value v; + ListStyleType listStyleType = LIST_STYLE_TYPE_DECIMAL; if (*attrbuf == '1') - v.listStyleType = LIST_STYLE_TYPE_DECIMAL; + listStyleType = LIST_STYLE_TYPE_DECIMAL; else if (*attrbuf == 'a') - v.listStyleType = LIST_STYLE_TYPE_LOWER_ALPHA; + listStyleType = LIST_STYLE_TYPE_LOWER_ALPHA; else if (*attrbuf == 'A') - v.listStyleType = LIST_STYLE_TYPE_UPPER_ALPHA; + listStyleType = LIST_STYLE_TYPE_UPPER_ALPHA; else if (*attrbuf == 'i') - v.listStyleType = LIST_STYLE_TYPE_LOWER_ROMAN; + listStyleType = LIST_STYLE_TYPE_LOWER_ROMAN; else if (*attrbuf == 'I') - v.listStyleType = LIST_STYLE_TYPE_UPPER_ROMAN; + listStyleType = LIST_STYLE_TYPE_UPPER_ROMAN; - props.set (CssProperty::CSS_PROPERTY_LIST_STYLE_TYPE, v); + props.set (CssProperty::CSS_PROPERTY_LIST_STYLE_TYPE, listStyleType); html->styleEngine->setNonCssProperties (&props); } diff --git a/src/styleengine.cc b/src/styleengine.cc index d6b639e7..9123007e 100644 --- a/src/styleengine.cc +++ b/src/styleengine.cc @@ -95,47 +95,47 @@ void StyleEngine::apply (StyleAttrs *attrs, CssPropertyList *props) { /* \todo missing cases */ case CssProperty::CSS_PROPERTY_BACKGROUND_COLOR: attrs->backgroundColor = - Color::createSimple (layout, p->value.color); + Color::createSimple (layout, p->value.intVal); break; case CssProperty::CSS_PROPERTY_BORDER_BOTTOM_COLOR: attrs->borderColor.bottom = - Color::createSimple (layout, p->value.color); + Color::createSimple (layout, p->value.intVal); break; case CssProperty::CSS_PROPERTY_BORDER_BOTTOM_STYLE: - attrs->borderStyle.bottom = p->value.borderStyle; + attrs->borderStyle.bottom = (BorderStyle) p->value.intVal; break; case CssProperty::CSS_PROPERTY_COLOR: - attrs->color = Color::createSimple (layout, p->value.color); + attrs->color = Color::createSimple (layout, p->value.intVal); break; case CssProperty::CSS_PROPERTY_CURSOR: - attrs->cursor = p->value.cursor; + attrs->cursor = (Cursor) p->value.intVal; break; case CssProperty::CSS_PROPERTY_FONT_FAMILY: - fontAttrs.name = p->value.name; + fontAttrs.name = p->value.strVal; break; case CssProperty::CSS_PROPERTY_FONT_SIZE: - fontAttrs.size = p->value.size; + fontAttrs.size = p->value.intVal; break; case CssProperty::CSS_PROPERTY_FONT_STYLE: - fontAttrs.style = p->value.fontStyle; + fontAttrs.style = (FontStyle) p->value.intVal; break; case CssProperty::CSS_PROPERTY_FONT_WEIGHT: - fontAttrs.weight = p->value.weight; + fontAttrs.weight = p->value.intVal; break; case CssProperty::CSS_PROPERTY_LIST_STYLE_TYPE: - attrs->listStyleType = p->value.listStyleType; + attrs->listStyleType = (ListStyleType) p->value.intVal; break; case CssProperty::CSS_PROPERTY_TEXT_ALIGN: - attrs->textAlign = p->value.textAlignType; + attrs->textAlign = (TextAlignType) p->value.intVal; break; case CssProperty::CSS_PROPERTY_TEXT_DECORATION: - attrs->textDecoration |= p->value.textDecoration; + attrs->textDecoration |= p->value.intVal; break; case CssProperty::PROPERTY_X_LINK: - attrs->x_link = p->value.x_link; + attrs->x_link = p->value.intVal; break; case CssProperty::PROPERTY_X_IMG: - attrs->x_img = p->value.x_img; + attrs->x_img = p->value.intVal; break; default: diff --git a/src/table.cc b/src/table.cc index 04c98f5f..97f53064 100644 --- a/src/table.cc +++ b/src/table.cc @@ -239,7 +239,6 @@ static void Html_tag_open_table_cell(DilloHtml *html, Style *style; bool_t new_style; CssPropertyList props; - CssProperty::Value v; switch (S_TOP(html)->table_mode) { case DILLO_HTML_TABLE_MODE_NONE: @@ -264,14 +263,12 @@ static void Html_tag_open_table_cell(DilloHtml *html, /* text style */ if (!S_TOP(html)->cell_text_align_set) { - v.textAlignType = text_align; - props.set (CssProperty::CSS_PROPERTY_TEXT_ALIGN, v); + props.set (CssProperty::CSS_PROPERTY_TEXT_ALIGN, text_align); } if (a_Html_get_attr(html, tag, tagsize, "nowrap")) - v.whiteSpace = WHITE_SPACE_NOWRAP; + props.set (CssProperty::CSS_PROPERTY_WHITE_SPACE, WHITE_SPACE_NOWRAP); else - v.whiteSpace = WHITE_SPACE_NORMAL; - props.set (CssProperty::CSS_PROPERTY_WHITE_SPACE, v); + props.set (CssProperty::CSS_PROPERTY_WHITE_SPACE, WHITE_SPACE_NORMAL); // html->styleEngine->style () = // Style::create (HT2LT(html), &style_attrs); |