13 typedef std::vector<css_text> vector;
23 css_text(const tchar_t* txt, const tchar_t* url, const tchar_t* media_str)
25 text = txt ? txt : _t("");
26 baseurl = url ? url : _t("");
27 media = media_str ? media_str : _t("");
30 css_text(const css_text& val)
33 baseurl = val.baseurl;
40 const litehtml::tchar_t* tags;
41 const litehtml::tchar_t* stop_parent;
44 struct ommited_end_tags_t
46 const litehtml::tchar_t* tag;
47 const litehtml::tchar_t* followed_tags;
52 class document : public std::enable_shared_from_this<document>
55 typedef std::shared_ptr<document> ptr;
56 typedef std::weak_ptr<document> weak_ptr;
58 std::shared_ptr<element> m_root;
59 document_container* m_container;
61 css_text::vector m_css;
62 litehtml::css m_styles;
63 litehtml::web_color m_def_color;
64 litehtml::context* m_context;
65 litehtml::size m_size;
66 position::vector m_fixed_boxes;
67 media_query_list::vector m_media_lists;
68 element::ptr m_over_element;
69 elements_vector m_tabular_elements;
70 media_features m_media;
74 document(litehtml::document_container* objContainer, litehtml::context* ctx);
77 litehtml::document_container* container() { return m_container; }
78 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);
79 int render(int max_width, render_type rt = render_all);
80 void draw(uint_ptr hdc, int x, int y, const position* clip);
81 web_color get_def_color() { return m_def_color; }
82 int cvt_units(const tchar_t* str, int fontSize, bool* is_percent = 0) const;
83 int cvt_units(css_length& val, int fontSize, int size = 0) const;
86 void add_stylesheet(const tchar_t* str, const tchar_t* baseurl, const tchar_t* media);
87 bool on_mouse_over(int x, int y, int client_x, int client_y, position::vector& redraw_boxes);
88 bool on_lbutton_down(int x, int y, int client_x, int client_y, position::vector& redraw_boxes);
89 bool on_lbutton_up(int x, int y, int client_x, int client_y, position::vector& redraw_boxes);
90 bool on_mouse_leave(position::vector& redraw_boxes);
91 litehtml::element::ptr create_element(const tchar_t* tag_name, const string_map& attributes);
93 const element::ptr over_element() const;
94 void get_fixed_boxes(position::vector& fixed_boxes);
95 void add_fixed_box(const position& pos);
96 void add_media_list(media_query_list::ptr list);
99 bool match_lang(const tstring & lang);
100 void add_tabular(const element::ptr& el);
102 static litehtml::document::ptr createFromString(const tchar_t* str, litehtml::document_container* objPainter, litehtml::context* ctx, litehtml::css* user_styles = 0);
103 static litehtml::document::ptr createFromUTF8(const char* str, litehtml::document_container* objPainter, litehtml::context* ctx, litehtml::css* user_styles = 0);
106 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);
108 void create_node(GumboNode* node, elements_vector& elements);
109 bool update_media_lists(const media_features& features);
110 void fix_tables_layout();
111 void fix_table_children(element::ptr& el_ptr, style_display disp, const tchar_t* disp_str);
112 void fix_table_parent(element::ptr& el_ptr, style_display disp, const tchar_t* disp_str);
115 inline element::ptr document::root()
119 inline const element::ptr document::over_element() const
121 return m_over_element;
123 inline void document::add_tabular(const element::ptr& el)
125 m_tabular_elements.push_back(el);
127 inline bool document::match_lang(const tstring & lang)
129 return lang == m_lang || lang == m_culture;
133 #endif // LH_DOCUMENT_H