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