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