11 typedef std::vector<css_text> vector;
\r
21 css_text(const tchar_t* txt, const tchar_t* url, const tchar_t* media_str)
\r
23 text = txt ? txt : _t("");
\r
24 baseurl = url ? url : _t("");
\r
25 media = media_str ? media_str : _t("");
\r
28 css_text(const css_text& val)
\r
31 baseurl = val.baseurl;
\r
38 const litehtml::tchar_t* tags;
\r
39 const litehtml::tchar_t* stop_parent;
\r
42 struct ommited_end_tags_t
\r
44 const litehtml::tchar_t* tag;
\r
45 const litehtml::tchar_t* followed_tags;
\r
50 class document : public std::enable_shared_from_this<document>
\r
53 typedef std::shared_ptr<document> ptr;
\r
54 typedef std::weak_ptr<document> weak_ptr;
\r
56 std::shared_ptr<element> m_root;
\r
57 document_container* m_container;
\r
59 css_text::vector m_css;
\r
60 litehtml::css m_styles;
\r
61 litehtml::web_color m_def_color;
\r
62 litehtml::context* m_context;
\r
63 litehtml::size m_size;
\r
64 position::vector m_fixed_boxes;
\r
65 media_query_list::vector m_media_lists;
\r
66 element::ptr m_over_element;
\r
67 elements_vector m_tabular_elements;
\r
68 media_features m_media;
\r
72 document(litehtml::document_container* objContainer, litehtml::context* ctx);
\r
73 virtual ~document();
\r
75 litehtml::document_container* container() { return m_container; }
\r
76 uint_ptr get_font(const tchar_t* name, int size, const tchar_t* weight, const tchar_t* style, const tchar_t* decoration, font_metrics* fm);
\r
77 int render(int max_width, render_type rt = render_all);
\r
78 void draw(uint_ptr hdc, int x, int y, const position* clip);
\r
79 web_color get_def_color() { return m_def_color; }
\r
80 int cvt_units(const tchar_t* str, int fontSize, bool* is_percent = 0) const;
\r
81 int cvt_units(css_length& val, int fontSize, int size = 0) const;
\r
84 void add_stylesheet(const tchar_t* str, const tchar_t* baseurl, const tchar_t* media);
\r
85 bool on_mouse_over(int x, int y, int client_x, int client_y, position::vector& redraw_boxes);
\r
86 bool on_lbutton_down(int x, int y, int client_x, int client_y, position::vector& redraw_boxes);
\r
87 bool on_lbutton_up(int x, int y, int client_x, int client_y, position::vector& redraw_boxes);
\r
88 bool on_mouse_leave(position::vector& redraw_boxes);
\r
89 litehtml::element::ptr create_element(const tchar_t* tag_name, const string_map& attributes);
\r
90 element::ptr root();
\r
91 void get_fixed_boxes(position::vector& fixed_boxes);
\r
92 void add_fixed_box(const position& pos);
\r
93 void add_media_list(media_query_list::ptr list);
\r
94 bool media_changed();
\r
95 bool lang_changed();
\r
96 bool match_lang(const tstring & lang);
\r
97 void add_tabular(const element::ptr& el);
\r
99 static litehtml::document::ptr createFromString(const tchar_t* str, litehtml::document_container* objPainter, litehtml::context* ctx, litehtml::css* user_styles = 0);
\r
100 static litehtml::document::ptr createFromUTF8(const char* str, litehtml::document_container* objPainter, litehtml::context* ctx, litehtml::css* user_styles = 0);
\r
103 litehtml::uint_ptr add_font(const tchar_t* name, int size, const tchar_t* weight, const tchar_t* style, const tchar_t* decoration, font_metrics* fm);
\r
105 void create_node(GumboNode* node, elements_vector& elements);
\r
106 bool update_media_lists(const media_features& features);
\r
107 void fix_tables_layout();
\r
108 void fix_table_children(element::ptr& el_ptr, style_display disp, const tchar_t* disp_str);
\r
109 void fix_table_parent(element::ptr& el_ptr, style_display disp, const tchar_t* disp_str);
\r
112 inline element::ptr document::root()
\r
116 inline void document::add_tabular(const element::ptr& el)
\r
118 m_tabular_elements.push_back(el);
\r
120 inline bool document::match_lang(const tstring & lang)
\r
122 return lang == m_lang || lang == m_culture;
\r