1 /* 2 * Copyright (C) 2018 Alexander Borisov 3 * 4 * Author: Alexander Borisov <borisov@lexbor.com> 5 */ 6 7 #ifndef LEXBOR_HTML_TEMPLATE_INSERTION_H 8 #define LEXBOR_HTML_TEMPLATE_INSERTION_H 9 10 #ifdef __cplusplus 11 extern "C" { 12 #endif 13 14 #include "lexbor/core/array.h" 15 16 #include "lexbor/html/tree.h" 17 18 19 typedef struct { 20 lxb_html_tree_insertion_mode_f mode; 21 } 22 lxb_html_tree_template_insertion_t; 23 24 25 /* 26 * Inline functions 27 */ 28 lxb_inline lxb_html_tree_insertion_mode_f lxb_html_tree_template_insertion_current(lxb_html_tree_t * tree)29lxb_html_tree_template_insertion_current(lxb_html_tree_t *tree) 30 { 31 if (lexbor_array_obj_length(tree->template_insertion_modes) == 0) { 32 return NULL; 33 } 34 35 lxb_html_tree_template_insertion_t *tmp_ins; 36 37 tmp_ins = (lxb_html_tree_template_insertion_t *) 38 lexbor_array_obj_last(tree->template_insertion_modes); 39 40 return tmp_ins->mode; 41 } 42 43 lxb_inline lxb_html_tree_insertion_mode_f lxb_html_tree_template_insertion_get(lxb_html_tree_t * tree,size_t idx)44lxb_html_tree_template_insertion_get(lxb_html_tree_t *tree, size_t idx) 45 { 46 lxb_html_tree_template_insertion_t *tmp_ins; 47 48 tmp_ins = (lxb_html_tree_template_insertion_t *) 49 lexbor_array_obj_get(tree->template_insertion_modes, idx); 50 if (tmp_ins == NULL) { 51 return NULL; 52 } 53 54 return tmp_ins->mode; 55 } 56 57 lxb_inline lxb_html_tree_insertion_mode_f lxb_html_tree_template_insertion_first(lxb_html_tree_t * tree)58lxb_html_tree_template_insertion_first(lxb_html_tree_t *tree) 59 { 60 return lxb_html_tree_template_insertion_get(tree, 0); 61 } 62 63 lxb_inline lxb_status_t lxb_html_tree_template_insertion_push(lxb_html_tree_t * tree,lxb_html_tree_insertion_mode_f mode)64lxb_html_tree_template_insertion_push(lxb_html_tree_t *tree, 65 lxb_html_tree_insertion_mode_f mode) 66 { 67 lxb_html_tree_template_insertion_t *tmp_ins; 68 69 tmp_ins = (lxb_html_tree_template_insertion_t *) 70 lexbor_array_obj_push(tree->template_insertion_modes); 71 if (tmp_ins == NULL) { 72 return LXB_STATUS_ERROR_MEMORY_ALLOCATION; 73 } 74 75 tmp_ins->mode = mode; 76 77 return LXB_STATUS_OK; 78 } 79 80 lxb_inline lxb_html_tree_insertion_mode_f lxb_html_tree_template_insertion_pop(lxb_html_tree_t * tree)81lxb_html_tree_template_insertion_pop(lxb_html_tree_t *tree) 82 { 83 lxb_html_tree_template_insertion_t *tmp_ins; 84 85 tmp_ins = (lxb_html_tree_template_insertion_t *) 86 lexbor_array_obj_pop(tree->template_insertion_modes); 87 if (tmp_ins == NULL) { 88 return NULL; 89 } 90 91 return tmp_ins->mode; 92 } 93 94 95 #ifdef __cplusplus 96 } /* extern "C" */ 97 #endif 98 99 #endif /* LEXBOR_HTML_TEMPLATE_INSERTION_H */ 100 101