1#ifndef LH_TYPES_H
2#define LH_TYPES_H
3
4#include <stdlib.h>
5#include <memory>
6#include <map>
7#include <vector>
8
9namespace litehtml
10{
11 class document;
12 class element;
13
14 typedef std::map<litehtml::tstring, litehtml::tstring> string_map;
15 typedef std::vector< std::shared_ptr<litehtml::element> > elements_vector;
16 typedef std::vector<int> int_vector;
17 typedef std::vector<litehtml::tstring> string_vector;
18
19 const unsigned int font_decoration_none = 0x00;
20 const unsigned int font_decoration_underline = 0x01;
21 const unsigned int font_decoration_linethrough = 0x02;
22 const unsigned int font_decoration_overline = 0x04;
23
24 typedef unsigned char byte;
25 typedef unsigned int ucode_t;
26
27 struct margins
28 {
29 int left;
30 int right;
31 int top;
32 int bottom;
33
34 margins()
35 {
36 left = right = top = bottom = 0;
37 }
38
39 int width() const { return left + right; }
40 int height() const { return top + bottom; }
41 };
42
43 struct size
44 {
45 int width;
46 int height;
47
48 size()
49 {
50 width = 0;
51 height = 0;
52 }
53 };
54
55 struct position
56 {
57 typedef std::vector<position> vector;
58
59 int x;
60 int y;
61 int width;
62 int height;
63
64 position()
65 {
66 x = y = width = height = 0;
67 }
68
69 position(int x, int y, int width, int height)
70 {
71 this->x = x;
72 this->y = y;
73 this->width = width;
74 this->height = height;
75 }
76
77 int right() const { return x + width; }
78 int bottom() const { return y + height; }
79 int left() const { return x; }
80 int top() const { return y; }
81
82 void operator+=(const margins& mg)
83 {
84 x -= mg.left;
85 y -= mg.top;
86 width += mg.left + mg.right;
87 height += mg.top + mg.bottom;
88 }
89 void operator-=(const margins& mg)
90 {
91 x += mg.left;
92 y += mg.top;
93 width -= mg.left + mg.right;
94 height -= mg.top + mg.bottom;
95 }
96
97 void clear()
98 {
99 x = y = width = height = 0;
100 }
101
102 void operator=(const size& sz)
103 {
104 width = sz.width;
105 height = sz.height;
106 }
107
108 void move_to(int x, int y)
109 {
110 this->x = x;
111 this->y = y;
112 }
113
114 bool does_intersect(const position* val) const
115 {
116 if(!val) return true;
117
118 return (
119 left() <= val->right() &&
120 right() >= val->left() &&
121 bottom() >= val->top() &&
122 top() <= val->bottom() )
123 || (
124 val->left() <= right() &&
125 val->right() >= left() &&
126 val->bottom() >= top() &&
127 val->top() <= bottom() );
128 }
129
130 bool empty() const
131 {
132 if(!width && !height)
133 {
134 return true;
135 }
136 return false;
137 }
138
139 bool is_point_inside(int x, int y) const
140 {
141 if(x >= left() && x <= right() && y >= top() && y <= bottom())
142 {
143 return true;
144 }
145 return false;
146 }
147 };
148
149 struct font_metrics
150 {
151 int height;
152 int ascent;
153 int descent;
154 int x_height;
155 bool draw_spaces;
156
157 font_metrics()
158 {
159 height = 0;
160 ascent = 0;
161 descent = 0;
162 x_height = 0;
163 draw_spaces = true;
164 }
165 int base_line() { return descent; }
166 };
167
168 struct font_item
169 {
170 uint_ptr font;
171 font_metrics metrics;
172 };
173
174 typedef std::map<tstring, font_item> fonts_map;
175
176 enum draw_flag
177 {
178 draw_root,
179 draw_block,
180 draw_floats,
181 draw_inlines,
182 draw_positioned,
183 };
184
185#define style_display_strings _t("none;block;inline;inline-block;inline-table;list-item;table;table-caption;table-cell;table-column;table-column-group;table-footer-group;table-header-group;table-row;table-row-group;inline-text")
186
187 enum style_display
188 {
189 display_none,
190 display_block,
191 display_inline,
192 display_inline_block,
193 display_inline_table,
194 display_list_item,
195 display_table,
196 display_table_caption,
197 display_table_cell,
198 display_table_column,
199 display_table_column_group,
200 display_table_footer_group,
201 display_table_header_group,
202 display_table_row,
203 display_table_row_group,
204 display_inline_text,
205 };
206
207 enum style_border
208 {
209 borderNope,
210 borderNone,
211 borderHidden,
212 borderDotted,
213 borderDashed,
214 borderSolid,
215 borderDouble
216 };
217
218#define font_size_strings _t("xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger")
219
220 enum font_size
221 {
222 fontSize_xx_small,
223 fontSize_x_small,
224 fontSize_small,
225 fontSize_medium,
226 fontSize_large,
227 fontSize_x_large,
228 fontSize_xx_large,
229 fontSize_smaller,
230 fontSize_larger,
231 };
232
233#define font_style_strings _t("normal;italic")
234
235 enum font_style
236 {
237 fontStyleNormal,
238 fontStyleItalic
239 };
240
241#define font_variant_strings _t("normal;small-caps")
242
243 enum font_variant
244 {
245 font_variant_normal,
246 font_variant_italic
247 };
248
249#define font_weight_strings _t("normal;bold;bolder;lighter;100;200;300;400;500;600;700")
250
251 enum font_weight
252 {
253 fontWeightNormal,
254 fontWeightBold,
255 fontWeightBolder,
256 fontWeightLighter,
257 fontWeight100,
258 fontWeight200,
259 fontWeight300,
260 fontWeight400,
261 fontWeight500,
262 fontWeight600,
263 fontWeight700
264 };
265
266#define list_style_type_strings _t("none;circle;disc;square;armenian;cjk-ideographic;decimal;decimal-leading-zero;georgian;hebrew;hiragana;hiragana-iroha;katakana;katakana-iroha;lower-alpha;lower-greek;lower-latin;lower-roman;upper-alpha;upper-latin;upper-roman")
267
268 enum list_style_type
269 {
270 list_style_type_none,
271 list_style_type_circle,
272 list_style_type_disc,
273 list_style_type_square,
274 list_style_type_armenian,
275 list_style_type_cjk_ideographic,
276 list_style_type_decimal,
277 list_style_type_decimal_leading_zero,
278 list_style_type_georgian,
279 list_style_type_hebrew,
280 list_style_type_hiragana,
281 list_style_type_hiragana_iroha,
282 list_style_type_katakana,
283 list_style_type_katakana_iroha,
284 list_style_type_lower_alpha,
285 list_style_type_lower_greek,
286 list_style_type_lower_latin,
287 list_style_type_lower_roman,
288 list_style_type_upper_alpha,
289 list_style_type_upper_latin,
290 list_style_type_upper_roman,
291 };
292
293#define list_style_position_strings _t("inside;outside")
294
295 enum list_style_position
296 {
297 list_style_position_inside,
298 list_style_position_outside
299 };
300
301#define vertical_align_strings _t("baseline;sub;super;top;text-top;middle;bottom;text-bottom")
302
303 enum vertical_align
304 {
305 va_baseline,
306 va_sub,
307 va_super,
308 va_top,
309 va_text_top,
310 va_middle,
311 va_bottom,
312 va_text_bottom
313 };
314
315#define border_width_strings _t("thin;medium;thick")
316
317 enum border_width
318 {
319 border_width_thin,
320 border_width_medium,
321 border_width_thick
322 };
323
324#define border_style_strings _t("none;hidden;dotted;dashed;solid;double;groove;ridge;inset;outset")
325
326 enum border_style
327 {
328 border_style_none,
329 border_style_hidden,
330 border_style_dotted,
331 border_style_dashed,
332 border_style_solid,
333 border_style_double,
334 border_style_groove,
335 border_style_ridge,
336 border_style_inset,
337 border_style_outset
338 };
339
340#define element_float_strings _t("none;left;right")
341
342 enum element_float
343 {
344 float_none,
345 float_left,
346 float_right
347 };
348
349#define element_clear_strings _t("none;left;right;both")
350
351 enum element_clear
352 {
353 clear_none,
354 clear_left,
355 clear_right,
356 clear_both
357 };
358
359#define css_units_strings _t("none;%;in;cm;mm;em;ex;pt;pc;px;dpi;dpcm;vw;vh;vmin;vmax;rem")
360
361 enum css_units
362 {
363 css_units_none,
364 css_units_percentage,
365 css_units_in,
366 css_units_cm,
367 css_units_mm,
368 css_units_em,
369 css_units_ex,
370 css_units_pt,
371 css_units_pc,
372 css_units_px,
373 css_units_dpi,
374 css_units_dpcm,
375 css_units_vw,
376 css_units_vh,
377 css_units_vmin,
378 css_units_vmax,
379 css_units_rem,
380 };
381
382#define background_attachment_strings _t("scroll;fixed")
383
384 enum background_attachment
385 {
386 background_attachment_scroll,
387 background_attachment_fixed
388 };
389
390#define background_repeat_strings _t("repeat;repeat-x;repeat-y;no-repeat")
391
392 enum background_repeat
393 {
394 background_repeat_repeat,
395 background_repeat_repeat_x,
396 background_repeat_repeat_y,
397 background_repeat_no_repeat
398 };
399
400#define background_box_strings _t("border-box;padding-box;content-box")
401
402 enum background_box
403 {
404 background_box_border,
405 background_box_padding,
406 background_box_content
407 };
408
409#define element_position_strings _t("static;relative;absolute;fixed")
410
411 enum element_position
412 {
413 element_position_static,
414 element_position_relative,
415 element_position_absolute,
416 element_position_fixed,
417 };
418
419#define text_align_strings _t("left;right;center;justify")
420
421 enum text_align
422 {
423 text_align_left,
424 text_align_right,
425 text_align_center,
426 text_align_justify
427 };
428
429#define text_transform_strings _t("none;capitalize;uppercase;lowercase")
430
431 enum text_transform
432 {
433 text_transform_none,
434 text_transform_capitalize,
435 text_transform_uppercase,
436 text_transform_lowercase
437 };
438
439#define white_space_strings _t("normal;nowrap;pre;pre-line;pre-wrap")
440
441 enum white_space
442 {
443 white_space_normal,
444 white_space_nowrap,
445 white_space_pre,
446 white_space_pre_line,
447 white_space_pre_wrap
448 };
449
450#define overflow_strings _t("visible;hidden;scroll;auto;no-display;no-content")
451
452 enum overflow
453 {
454 overflow_visible,
455 overflow_hidden,
456 overflow_scroll,
457 overflow_auto,
458 overflow_no_display,
459 overflow_no_content
460 };
461
462#define background_size_strings _t("auto;cover;contain")
463
464 enum background_size
465 {
466 background_size_auto,
467 background_size_cover,
468 background_size_contain,
469 };
470
471#define visibility_strings _t("visible;hidden;collapse")
472
473 enum visibility
474 {
475 visibility_visible,
476 visibility_hidden,
477 visibility_collapse,
478 };
479
480#define border_collapse_strings _t("collapse;separate")
481
482 enum border_collapse
483 {
484 border_collapse_collapse,
485 border_collapse_separate,
486 };
487
488
489#define pseudo_class_strings _t("only-child;only-of-type;first-child;first-of-type;last-child;last-of-type;nth-child;nth-of-type;nth-last-child;nth-last-of-type;not;lang")
490
491 enum pseudo_class
492 {
493 pseudo_class_only_child,
494 pseudo_class_only_of_type,
495 pseudo_class_first_child,
496 pseudo_class_first_of_type,
497 pseudo_class_last_child,
498 pseudo_class_last_of_type,
499 pseudo_class_nth_child,
500 pseudo_class_nth_of_type,
501 pseudo_class_nth_last_child,
502 pseudo_class_nth_last_of_type,
503 pseudo_class_not,
504 pseudo_class_lang,
505 };
506
507#define content_property_string _t("none;normal;open-quote;close-quote;no-open-quote;no-close-quote")
508
509 enum content_property
510 {
511 content_property_none,
512 content_property_normal,
513 content_property_open_quote,
514 content_property_close_quote,
515 content_property_no_open_quote,
516 content_property_no_close_quote,
517 };
518
519
520 struct floated_box
521 {
522 typedef std::vector<floated_box> vector;
523
524 position pos;
525 element_float float_side;
526 element_clear clear_floats;
527 std::shared_ptr<element> el;
528
529 floated_box() = default;
530 floated_box(const floated_box& val)
531 {
532 pos = val.pos;
533 float_side = val.float_side;
534 clear_floats = val.clear_floats;
535 el = val.el;
536 }
537 floated_box& operator=(const floated_box& val)
538 {
539 pos = val.pos;
540 float_side = val.float_side;
541 clear_floats = val.clear_floats;
542 el = val.el;
543 return *this;
544 }
545 floated_box(floated_box&& val)
546 {
547 pos = val.pos;
548 float_side = val.float_side;
549 clear_floats = val.clear_floats;
550 el = std::move(val.el);
551 }
552 void operator=(floated_box&& val)
553 {
554 pos = val.pos;
555 float_side = val.float_side;
556 clear_floats = val.clear_floats;
557 el = std::move(val.el);
558 }
559 };
560
561 struct int_int_cache
562 {
563 int hash;
564 int val;
565 bool is_valid;
566 bool is_default;
567
568 int_int_cache()
569 {
570 hash = 0;
571 val = 0;
572 is_valid = false;
573 is_default = false;
574 }
575 void invalidate()
576 {
577 is_valid = false;
578 is_default = false;
579 }
580 void set_value(int vHash, int vVal)
581 {
582 hash = vHash;
583 val = vVal;
584 is_valid = true;
585 }
586 };
587
588 enum select_result
589 {
590 select_no_match = 0x00,
591 select_match = 0x01,
592 select_match_pseudo_class = 0x02,
593 select_match_with_before = 0x10,
594 select_match_with_after = 0x20,
595 };
596
597 template<class T>
598 class def_value
599 {
600 T m_val;
601 bool m_is_default;
602 public:
603 def_value(T def_val)
604 {
605 m_is_default = true;
606 m_val = def_val;
607 }
608 void reset(T def_val)
609 {
610 m_is_default = true;
611 m_val = def_val;
612 }
613 bool is_default()
614 {
615 return m_is_default;
616 }
617 T operator=(T new_val)
618 {
619 m_val = new_val;
620 m_is_default = false;
621 return m_val;
622 }
623 operator T()
624 {
625 return m_val;
626 }
627 };
628
629
630#define media_orientation_strings _t("portrait;landscape")
631
632 enum media_orientation
633 {
634 media_orientation_portrait,
635 media_orientation_landscape,
636 };
637
638#define media_feature_strings _t("none;width;min-width;max-width;height;min-height;max-height;device-width;min-device-width;max-device-width;device-height;min-device-height;max-device-height;orientation;aspect-ratio;min-aspect-ratio;max-aspect-ratio;device-aspect-ratio;min-device-aspect-ratio;max-device-aspect-ratio;color;min-color;max-color;color-index;min-color-index;max-color-index;monochrome;min-monochrome;max-monochrome;resolution;min-resolution;max-resolution")
639
640 enum media_feature
641 {
642 media_feature_none,
643
644 media_feature_width,
645 media_feature_min_width,
646 media_feature_max_width,
647
648 media_feature_height,
649 media_feature_min_height,
650 media_feature_max_height,
651
652 media_feature_device_width,
653 media_feature_min_device_width,
654 media_feature_max_device_width,
655
656 media_feature_device_height,
657 media_feature_min_device_height,
658 media_feature_max_device_height,
659
660 media_feature_orientation,
661
662 media_feature_aspect_ratio,
663 media_feature_min_aspect_ratio,
664 media_feature_max_aspect_ratio,
665
666 media_feature_device_aspect_ratio,
667 media_feature_min_device_aspect_ratio,
668 media_feature_max_device_aspect_ratio,
669
670 media_feature_color,
671 media_feature_min_color,
672 media_feature_max_color,
673
674 media_feature_color_index,
675 media_feature_min_color_index,
676 media_feature_max_color_index,
677
678 media_feature_monochrome,
679 media_feature_min_monochrome,
680 media_feature_max_monochrome,
681
682 media_feature_resolution,
683 media_feature_min_resolution,
684 media_feature_max_resolution,
685 };
686
687#define box_sizing_strings _t("content-box;border-box")
688
689 enum box_sizing
690 {
691 box_sizing_content_box,
692 box_sizing_border_box,
693 };
694
695
696#define media_type_strings _t("none;all;screen;print;braille;embossed;handheld;projection;speech;tty;tv")
697
698 enum media_type
699 {
700 media_type_none,
701 media_type_all,
702 media_type_screen,
703 media_type_print,
704 media_type_braille,
705 media_type_embossed,
706 media_type_handheld,
707 media_type_projection,
708 media_type_speech,
709 media_type_tty,
710 media_type_tv,
711 };
712
713 struct media_features
714 {
715 media_type type;
716 int width; // (pixels) For continuous media, this is the width of the viewport including the size of a rendered scroll bar (if any). For paged media, this is the width of the page box.
717 int height; // (pixels) The height of the targeted display area of the output device. For continuous media, this is the height of the viewport including the size of a rendered scroll bar (if any). For paged media, this is the height of the page box.
718 int device_width; // (pixels) The width of the rendering surface of the output device. For continuous media, this is the width of the screen. For paged media, this is the width of the page sheet size.
719 int device_height; // (pixels) The height of the rendering surface of the output device. For continuous media, this is the height of the screen. For paged media, this is the height of the page sheet size.
720 int color; // The number of bits per color component of the output device. If the device is not a color device, the value is zero.
721 int color_index; // The number of entries in the color lookup table of the output device. If the device does not use a color lookup table, the value is zero.
722 int monochrome; // The number of bits per pixel in a monochrome frame buffer. If the device is not a monochrome device, the output device value will be 0.
723 int resolution; // The resolution of the output device (in DPI)
724
725 media_features()
726 {
727 type = media_type::media_type_none,
728 width =0;
729 height = 0;
730 device_width = 0;
731 device_height = 0;
732 color = 0;
733 color_index = 0;
734 monochrome = 0;
735 resolution = 0;
736 }
737 };
738
739 enum render_type
740 {
741 render_all,
742 render_no_fixed,
743 render_fixed_only,
744 };
745
746 // List of the Void Elements (can't have any contents)
747 const litehtml::tchar_t* const void_elements = _t("area;base;br;col;command;embed;hr;img;input;keygen;link;meta;param;source;track;wbr");
748}
749
750#endif // LH_TYPES_H
751

source code of qttools/src/assistant/qlitehtml/src/3rdparty/litehtml/include/litehtml/types.h