Update litehtml_viewer to build on Windows
[claws.git] / src / plugins / litehtml_viewer / litehtml / iterators.cpp
1 #include "html.h"
2 #include "iterators.h"
3 #include "html_tag.h"
4
5 litehtml::element::ptr litehtml::elements_iterator::next(bool ret_parent)
6 {
7         next_idx();
8
9         while(m_idx < (int) m_el->get_children_count())
10         {
11                 element::ptr el = m_el->get_child(m_idx);
12                 if(     el->get_children_count() && m_go_inside && m_go_inside->select(el) )
13                 {
14                         stack_item si;
15                         si.idx          = m_idx;
16                         si.el           = m_el;
17                         m_stack.push_back(si);
18                         m_el            = el;
19                         m_idx           = -1;
20                         if(ret_parent)
21                         {
22                                 return el;
23                         }
24                         next_idx();
25                 } else
26                 {
27                         if( !m_select || (m_select && m_select->select(m_el->get_child(m_idx))) )
28                         {
29                                 return m_el->get_child(m_idx);
30                         } else
31                         {
32                                 next_idx();
33                         }
34                 }
35         }
36
37         return 0;
38 }
39
40 void litehtml::elements_iterator::next_idx()
41 {
42         m_idx++;
43         while(m_idx >= (int) m_el->get_children_count() && m_stack.size())
44         {
45                 stack_item si = m_stack.back();
46                 m_stack.pop_back();
47                 m_idx   = si.idx;
48                 m_el    = si.el;
49                 m_idx++;
50                 continue;
51         }
52 }
53
54 //////////////////////////////////////////////////////////////////////////
55 //////////////////////////////////////////////////////////////////////////
56
57
58 bool litehtml::go_inside_inline::select(const element::ptr& el)
59 {
60         if(el->get_display() == display_inline || el->get_display() == display_inline_text)
61         {
62                 return true;
63         }
64         return false;
65 }
66
67 bool litehtml::go_inside_table::select(const element::ptr& el)
68 {
69         if(     el->get_display() == display_table_row_group ||
70                 el->get_display() == display_table_header_group ||
71                 el->get_display() == display_table_footer_group)
72         {
73                 return true;
74         }
75         return false;
76 }
77
78 bool litehtml::table_rows_selector::select(const element::ptr& el)
79 {
80         if(     el->get_display() == display_table_row)
81         {
82                 return true;
83         }
84         return false;
85 }
86
87 bool litehtml::table_cells_selector::select(const element::ptr& el)
88 {
89         if(     el->get_display() == display_table_cell)
90         {
91                 return true;
92         }
93         return false;
94 }