1 /* 2 * Copyright (C) 2018 Alexander Borisov 3 * 4 * Author: Alexander Borisov <borisov@lexbor.com> 5 */ 6 7 #include "lexbor/html/interfaces/style_element.h" 8 #include "lexbor/html/interfaces/document.h" 9 10 11 lxb_html_style_element_t * lxb_html_style_element_interface_create(lxb_html_document_t * document)12lxb_html_style_element_interface_create(lxb_html_document_t *document) 13 { 14 lxb_html_style_element_t *element; 15 16 element = lexbor_mraw_calloc(document->dom_document.mraw, 17 sizeof(lxb_html_style_element_t)); 18 if (element == NULL) { 19 return NULL; 20 } 21 22 lxb_dom_node_t *node = lxb_dom_interface_node(element); 23 24 node->owner_document = lxb_html_document_original_ref(document); 25 node->type = LXB_DOM_NODE_TYPE_ELEMENT; 26 27 return element; 28 } 29 30 lxb_html_style_element_t * lxb_html_style_element_interface_destroy(lxb_html_style_element_t * style_element)31lxb_html_style_element_interface_destroy(lxb_html_style_element_t *style_element) 32 { 33 lxb_css_stylesheet_t *sst = style_element->stylesheet; 34 35 (void) lxb_dom_node_interface_destroy(lxb_dom_interface_node(style_element)); 36 37 if (sst != NULL) { 38 #if 0 39 (void) lxb_css_stylesheet_destroy(sst, true); 40 #endif 41 } 42 43 return NULL; 44 } 45 46 lxb_status_t lxb_html_style_element_parse(lxb_html_style_element_t * element)47lxb_html_style_element_parse(lxb_html_style_element_t *element) 48 { 49 #if 0 50 lexbor_str_t *str; 51 lxb_dom_text_t *text; 52 #endif 53 lxb_dom_node_t *node; 54 55 lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document; 56 lxb_html_document_t *doc = lxb_html_interface_document(ddoc); 57 lxb_html_document_css_t *css = &doc->css; 58 59 node = lxb_dom_interface_node(element); 60 61 if (node->first_child == NULL 62 || node->first_child->local_name != LXB_TAG__TEXT 63 || node->first_child != node->last_child) 64 { 65 return LXB_STATUS_OK; 66 } 67 68 #if 0 69 text = lxb_dom_interface_text(lxb_dom_interface_node(element)->first_child); 70 str = &text->char_data.data; 71 72 element->stylesheet = lxb_css_stylesheet_parse(css->parser, str->data, 73 str->length); 74 #endif 75 if (element->stylesheet == NULL) { 76 return css->parser->status; 77 } 78 79 element->stylesheet->element = element; 80 81 return LXB_STATUS_OK; 82 } 83 84 lxb_status_t lxb_html_element_style_remove(lxb_html_style_element_t * style)85lxb_html_element_style_remove(lxb_html_style_element_t *style) 86 { 87 lxb_dom_document_t *ddoc = lxb_dom_interface_node(style)->owner_document; 88 lxb_html_document_t *doc = lxb_html_interface_document(ddoc); 89 90 lxb_html_document_stylesheet_remove(doc, style->stylesheet); 91 92 return LXB_STATUS_OK; 93 } 94