fix bug 4376, 'Litehtml breaks locale'
[claws.git] / src / plugins / litehtml_viewer / litehtml / iterators.h
1 #ifndef LH_ITERATORS_H
2 #define LH_ITERATORS_H
3
4 #include "types.h"
5
6 namespace litehtml
7 {
8         class element;
9
10         class iterator_selector
11         {
12         public:
13                 virtual bool select(const element::ptr& el) = 0;
14         };
15
16         class elements_iterator
17         {
18         private:
19                 struct stack_item
20                 {
21                         int                             idx;
22                         element::ptr    el;
23                         stack_item()
24                         {
25
26                         }
27                         stack_item(const stack_item& val)
28                         {
29                                 idx = val.idx;
30                                 el = val.el;
31                         }
32                         stack_item(stack_item&& val)
33                         {
34                                 idx = val.idx;
35                                 el = std::move(val.el);
36                         }
37                 };
38
39                 std::vector<stack_item>         m_stack;
40                 element::ptr                            m_el;
41                 int                                                     m_idx;
42                 iterator_selector*                      m_go_inside;
43                 iterator_selector*                      m_select;
44         public:
45
46                 elements_iterator(const element::ptr& el, iterator_selector* go_inside, iterator_selector* select)
47                 { 
48                         m_el                    = el;
49                         m_idx                   = -1; 
50                         m_go_inside             = go_inside;
51                         m_select                = select;
52                 }
53
54                 ~elements_iterator()
55                 {
56
57                 }
58
59                 element::ptr next(bool ret_parent = true);
60         
61         private:
62                 void next_idx();
63         };
64
65         class go_inside_inline : public iterator_selector
66         {
67         public:
68                 virtual bool select(const element::ptr& el);
69         };
70
71         class go_inside_table : public iterator_selector
72         {
73         public:
74                 virtual bool select(const element::ptr& el);
75         };
76
77         class table_rows_selector : public iterator_selector
78         {
79         public:
80                 virtual bool select(const element::ptr& el);
81         };
82
83         class table_cells_selector : public iterator_selector
84         {
85         public:
86                 virtual bool select(const element::ptr& el);
87         };
88 }
89
90 #endif  // LH_ITERATORS_H