Update current version of litehtml. Fix a crash when document contains no fonts
[claws.git] / src / plugins / litehtml_viewer / litehtml / el_table.cpp
index 4f5ff750a36f0f27363edc4ebf73f8f917b0c21a..06d77be7dc7c4dd81c85782cf3f4c68d0f2ce744 100644 (file)
-#include "html.h"\r
-#include "el_table.h"\r
-#include "document.h"\r
-#include "iterators.h"\r
-#include <algorithm>\r
-\r
-\r
-litehtml::el_table::el_table(const std::shared_ptr<litehtml::document>& doc) : html_tag(doc)\r
-{\r
-       m_border_spacing_x      = 0;\r
-       m_border_spacing_y      = 0;\r
-       m_border_collapse       = border_collapse_separate;\r
-}\r
-\r
-\r
-litehtml::el_table::~el_table()\r
-{\r
-\r
-}\r
-\r
-bool litehtml::el_table::appendChild(const litehtml::element::ptr& el)\r
-{\r
-       if(!el) return false;\r
-       if(!t_strcmp(el->get_tagName(), _t("tbody")) || !t_strcmp(el->get_tagName(), _t("thead")) || !t_strcmp(el->get_tagName(), _t("tfoot")))\r
-       {\r
-               return html_tag::appendChild(el);\r
-       }\r
-       return false;\r
-}\r
-\r
-void litehtml::el_table::parse_styles(bool is_reparse)\r
-{\r
-       html_tag::parse_styles(is_reparse);\r
-\r
-       m_border_collapse = (border_collapse) value_index(get_style_property(_t("border-collapse"), true, _t("separate")), border_collapse_strings, border_collapse_separate);\r
-\r
-       if(m_border_collapse == border_collapse_separate)\r
-       {\r
-               m_css_border_spacing_x.fromString(get_style_property(_t("-litehtml-border-spacing-x"), true, _t("0px")));\r
-               m_css_border_spacing_y.fromString(get_style_property(_t("-litehtml-border-spacing-y"), true, _t("0px")));\r
-\r
-               int fntsz = get_font_size();\r
-               document::ptr doc = get_document();\r
-               m_border_spacing_x = doc->cvt_units(m_css_border_spacing_x, fntsz);\r
-               m_border_spacing_y = doc->cvt_units(m_css_border_spacing_y, fntsz);\r
-       } else\r
-       {\r
-               m_border_spacing_x      = 0;\r
-               m_border_spacing_y      = 0;\r
-               m_padding.bottom        = 0;\r
-               m_padding.top           = 0;\r
-               m_padding.left          = 0;\r
-               m_padding.right         = 0;\r
-               m_css_padding.bottom.set_value(0, css_units_px);\r
-               m_css_padding.top.set_value(0, css_units_px);\r
-               m_css_padding.left.set_value(0, css_units_px);\r
-               m_css_padding.right.set_value(0, css_units_px);\r
-       }\r
-}\r
-\r
-void litehtml::el_table::parse_attributes()\r
-{\r
-       const tchar_t* str = get_attr(_t("width"));\r
-       if(str)\r
-       {\r
-               m_style.add_property(_t("width"), str, 0, false);\r
-       }\r
-\r
-       str = get_attr(_t("align"));\r
-       if(str)\r
-       {\r
-               int align = value_index(str, _t("left;center;right"));\r
-               switch(align)\r
-               {\r
-               case 1:\r
-                       m_style.add_property(_t("margin-left"), _t("auto"), 0, false);\r
-                       m_style.add_property(_t("margin-right"), _t("auto"), 0, false);\r
-                       break;\r
-               case 2:\r
-                       m_style.add_property(_t("margin-left"), _t("auto"), 0, false);\r
-                       m_style.add_property(_t("margin-right"), _t("0"), 0, false);\r
-                       break;\r
-               }\r
-       }\r
-\r
-       str = get_attr(_t("cellspacing"));\r
-       if(str)\r
-       {\r
-               tstring val = str;\r
-               val += _t(" ");\r
-               val += str;\r
-               m_style.add_property(_t("border-spacing"), val.c_str(), 0, false);\r
-       }\r
-       \r
-       str = get_attr(_t("border"));\r
-       if(str)\r
-       {\r
-               m_style.add_property(_t("border-width"), str, 0, false);\r
-       }\r
-\r
-       str = get_attr(_t("bgcolor"));\r
-       if (str)\r
-       {\r
-               m_style.add_property(_t("background-color"), str, 0, false);\r
-       }\r
-\r
-       html_tag::parse_attributes();\r
-}\r
+#include "html.h"
+#include "el_table.h"
+#include "document.h"
+#include "iterators.h"
+#include <algorithm>
+
+
+litehtml::el_table::el_table(const std::shared_ptr<litehtml::document>& doc) : html_tag(doc)
+{
+       m_border_spacing_x      = 0;
+       m_border_spacing_y      = 0;
+       m_border_collapse       = border_collapse_separate;
+}
+
+
+litehtml::el_table::~el_table()
+{
+
+}
+
+bool litehtml::el_table::appendChild(const litehtml::element::ptr& el)
+{
+       if(!el) return false;
+       if(!t_strcmp(el->get_tagName(), _t("tbody")) || !t_strcmp(el->get_tagName(), _t("thead")) || !t_strcmp(el->get_tagName(), _t("tfoot")))
+       {
+               return html_tag::appendChild(el);
+       }
+       return false;
+}
+
+void litehtml::el_table::parse_styles(bool is_reparse)
+{
+       html_tag::parse_styles(is_reparse);
+
+       m_border_collapse = (border_collapse) value_index(get_style_property(_t("border-collapse"), true, _t("separate")), border_collapse_strings, border_collapse_separate);
+
+       if(m_border_collapse == border_collapse_separate)
+       {
+               m_css_border_spacing_x.fromString(get_style_property(_t("-litehtml-border-spacing-x"), true, _t("0px")));
+               m_css_border_spacing_y.fromString(get_style_property(_t("-litehtml-border-spacing-y"), true, _t("0px")));
+
+               int fntsz = get_font_size();
+               document::ptr doc = get_document();
+               m_border_spacing_x = doc->cvt_units(m_css_border_spacing_x, fntsz);
+               m_border_spacing_y = doc->cvt_units(m_css_border_spacing_y, fntsz);
+       } else
+       {
+               m_border_spacing_x      = 0;
+               m_border_spacing_y      = 0;
+               m_padding.bottom        = 0;
+               m_padding.top           = 0;
+               m_padding.left          = 0;
+               m_padding.right         = 0;
+               m_css_padding.bottom.set_value(0, css_units_px);
+               m_css_padding.top.set_value(0, css_units_px);
+               m_css_padding.left.set_value(0, css_units_px);
+               m_css_padding.right.set_value(0, css_units_px);
+       }
+}
+
+void litehtml::el_table::parse_attributes()
+{
+       const tchar_t* str = get_attr(_t("width"));
+       if(str)
+       {
+               m_style.add_property(_t("width"), str, 0, false);
+       }
+
+       str = get_attr(_t("align"));
+       if(str)
+       {
+               int align = value_index(str, _t("left;center;right"));
+               switch(align)
+               {
+               case 1:
+                       m_style.add_property(_t("margin-left"), _t("auto"), 0, false);
+                       m_style.add_property(_t("margin-right"), _t("auto"), 0, false);
+                       break;
+               case 2:
+                       m_style.add_property(_t("margin-left"), _t("auto"), 0, false);
+                       m_style.add_property(_t("margin-right"), _t("0"), 0, false);
+                       break;
+               }
+       }
+
+       str = get_attr(_t("cellspacing"));
+       if(str)
+       {
+               tstring val = str;
+               val += _t(" ");
+               val += str;
+               m_style.add_property(_t("border-spacing"), val.c_str(), 0, false);
+       }
+       
+       str = get_attr(_t("border"));
+       if(str)
+       {
+               m_style.add_property(_t("border-width"), str, 0, false);
+       }
+
+       str = get_attr(_t("bgcolor"));
+       if (str)
+       {
+               m_style.add_property(_t("background-color"), str, 0, false);
+       }
+
+       html_tag::parse_attributes();
+}