Implement image handling
[claws.git] / src / plugins / litehtml_viewer / litehtml / el_table.cpp
1 #include "html.h"\r
2 #include "el_table.h"\r
3 #include "document.h"\r
4 #include "iterators.h"\r
5 #include <algorithm>\r
6 \r
7 \r
8 litehtml::el_table::el_table(const std::shared_ptr<litehtml::document>& doc) : html_tag(doc)\r
9 {\r
10         m_border_spacing_x      = 0;\r
11         m_border_spacing_y      = 0;\r
12         m_border_collapse       = border_collapse_separate;\r
13 }\r
14 \r
15 \r
16 litehtml::el_table::~el_table()\r
17 {\r
18 \r
19 }\r
20 \r
21 bool litehtml::el_table::appendChild(const litehtml::element::ptr& el)\r
22 {\r
23         if(!el) return false;\r
24         if(!t_strcmp(el->get_tagName(), _t("tbody")) || !t_strcmp(el->get_tagName(), _t("thead")) || !t_strcmp(el->get_tagName(), _t("tfoot")))\r
25         {\r
26                 return html_tag::appendChild(el);\r
27         }\r
28         return false;\r
29 }\r
30 \r
31 void litehtml::el_table::parse_styles(bool is_reparse)\r
32 {\r
33         html_tag::parse_styles(is_reparse);\r
34 \r
35         m_border_collapse = (border_collapse) value_index(get_style_property(_t("border-collapse"), true, _t("separate")), border_collapse_strings, border_collapse_separate);\r
36 \r
37         if(m_border_collapse == border_collapse_separate)\r
38         {\r
39                 m_css_border_spacing_x.fromString(get_style_property(_t("-litehtml-border-spacing-x"), true, _t("0px")));\r
40                 m_css_border_spacing_y.fromString(get_style_property(_t("-litehtml-border-spacing-y"), true, _t("0px")));\r
41 \r
42                 int fntsz = get_font_size();\r
43                 document::ptr doc = get_document();\r
44                 m_border_spacing_x = doc->cvt_units(m_css_border_spacing_x, fntsz);\r
45                 m_border_spacing_y = doc->cvt_units(m_css_border_spacing_y, fntsz);\r
46         } else\r
47         {\r
48                 m_border_spacing_x      = 0;\r
49                 m_border_spacing_y      = 0;\r
50                 m_padding.bottom        = 0;\r
51                 m_padding.top           = 0;\r
52                 m_padding.left          = 0;\r
53                 m_padding.right         = 0;\r
54                 m_css_padding.bottom.set_value(0, css_units_px);\r
55                 m_css_padding.top.set_value(0, css_units_px);\r
56                 m_css_padding.left.set_value(0, css_units_px);\r
57                 m_css_padding.right.set_value(0, css_units_px);\r
58         }\r
59 }\r
60 \r
61 void litehtml::el_table::parse_attributes()\r
62 {\r
63         const tchar_t* str = get_attr(_t("width"));\r
64         if(str)\r
65         {\r
66                 m_style.add_property(_t("width"), str, 0, false);\r
67         }\r
68 \r
69         str = get_attr(_t("align"));\r
70         if(str)\r
71         {\r
72                 int align = value_index(str, _t("left;center;right"));\r
73                 switch(align)\r
74                 {\r
75                 case 1:\r
76                         m_style.add_property(_t("margin-left"), _t("auto"), 0, false);\r
77                         m_style.add_property(_t("margin-right"), _t("auto"), 0, false);\r
78                         break;\r
79                 case 2:\r
80                         m_style.add_property(_t("margin-left"), _t("auto"), 0, false);\r
81                         m_style.add_property(_t("margin-right"), _t("0"), 0, false);\r
82                         break;\r
83                 }\r
84         }\r
85 \r
86         str = get_attr(_t("cellspacing"));\r
87         if(str)\r
88         {\r
89                 tstring val = str;\r
90                 val += _t(" ");\r
91                 val += str;\r
92                 m_style.add_property(_t("border-spacing"), val.c_str(), 0, false);\r
93         }\r
94         \r
95         str = get_attr(_t("border"));\r
96         if(str)\r
97         {\r
98                 m_style.add_property(_t("border-width"), str, 0, false);\r
99         }\r
100 \r
101         str = get_attr(_t("bgcolor"));\r
102         if (str)\r
103         {\r
104                 m_style.add_property(_t("background-color"), str, 0, false);\r
105         }\r
106 \r
107         html_tag::parse_attributes();\r
108 }\r