Gitweb links:

...log 
http://git.netsurf-browser.org/libdom.git/shortlog/41b0a260811a0880e2f84e29e20e3ebea9d0b6fe
...commit 
http://git.netsurf-browser.org/libdom.git/commit/41b0a260811a0880e2f84e29e20e3ebea9d0b6fe
...tree 
http://git.netsurf-browser.org/libdom.git/tree/41b0a260811a0880e2f84e29e20e3ebea9d0b6fe

The branch, master has been updated
       via  41b0a260811a0880e2f84e29e20e3ebea9d0b6fe (commit)
      from  4fdf474eaaca503d3bb261e9637a63e4a48cb27c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/libdom.git/commit/?id=41b0a260811a0880e2f84e29e20e3ebea9d0b6fe
commit 41b0a260811a0880e2f84e29e20e3ebea9d0b6fe
Author: Daniel Silverstone <[email protected]>
Commit: Daniel Silverstone <[email protected]>

    Begin to support SCRIPT elements flags
    
    Signed-off-by: Daniel Silverstone <[email protected]>

diff --git a/bindings/hubbub/parser.c b/bindings/hubbub/parser.c
index 9dfe738..6ee3004 100644
--- a/bindings/hubbub/parser.c
+++ b/bindings/hubbub/parser.c
@@ -226,6 +226,41 @@ static hubbub_error create_element(void *parser, const 
hubbub_tag *tag,
                        goto clean1;
        }
 
+       /* Now do some special per-element-type handling */
+       dom_html_element_type tag_type;
+       err = dom_html_element_get_tag_type(element, &tag_type);
+       if (err != DOM_NO_ERR) {
+               dom_parser->msg(DOM_MSG_CRITICAL, dom_parser->mctx,
+                               "Can't get tag type out of element");
+               goto clean1;
+       }
+
+       switch (tag_type) {
+       case DOM_HTML_ELEMENT_TYPE_SCRIPT: {
+               /* Kickstart of 
https://html.spec.whatwg.org/multipage/scripting.html#script-processing-model */
+               dom_html_script_element *script = (dom_html_script_element 
*)element;
+               dom_html_script_element_flags flags;
+               err = dom_html_script_element_get_flags(script, &flags);
+               if (err != DOM_NO_ERR) {
+                       dom_parser->msg(DOM_MSG_CRITICAL, dom_parser->mctx,
+                                       "Can't get flags out of script 
element");
+                       goto clean1;
+               }
+               flags |= DOM_HTML_SCRIPT_ELEMENT_FLAG_PARSER_INSERTED;
+               err = dom_html_script_element_set_flags(script, flags);
+               if (err != DOM_NO_ERR) {
+                       dom_parser->msg(DOM_MSG_CRITICAL, dom_parser->mctx,
+                                       "Can't set flags into script element");
+                       goto clean1;
+               }
+               break;
+       }
+       default:
+               /* Nothing */
+               break;
+       }
+
+
        *result = element;
 
 clean1:
diff --git a/include/dom/html/html_script_element.h 
b/include/dom/html/html_script_element.h
index 855bf9d..880ca1c 100644
--- a/include/dom/html/html_script_element.h
+++ b/include/dom/html/html_script_element.h
@@ -4,7 +4,9 @@
  *                http://www.opensource.org/licenses/mit-license.php
  * Copyright 2009 Bo Yang <[email protected]>
  * Copyright 2014 Rupinder Singh Khokhar <[email protected]>
+ * Copyright 2019 Daniel Silverstone <[email protected]>
  */
+
 #ifndef dom_html_script_element_h_
 #define dom_html_script_element_h_
 
@@ -14,6 +16,20 @@
 
 typedef struct dom_html_script_element dom_html_script_element;
 
+typedef enum {
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_ALREADY_STARTED             = 1 << 0,
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_PARSER_INSERTED             = 1 << 1,
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_NON_BLOCKING                = 1 << 2,
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_READY_TO_BE_PARSER_EXECUTED = 1 << 3,
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_FROM_EXTERNAL               = 1 << 4,
+} dom_html_script_element_flags;
+
+dom_exception dom_html_script_element_get_flags(
+       dom_html_script_element *ele, dom_html_script_element_flags *flags);
+
+dom_exception dom_html_script_element_set_flags(
+       dom_html_script_element *ele, dom_html_script_element_flags flags);
+
 dom_exception dom_html_script_element_get_defer(
        dom_html_script_element *ele, bool *defer);
 
diff --git a/src/html/html_script_element.c b/src/html/html_script_element.c
index d20d727..e8dfb1d 100644
--- a/src/html/html_script_element.c
+++ b/src/html/html_script_element.c
@@ -60,6 +60,8 @@ dom_exception _dom_html_script_element_initialise(
                struct dom_html_element_create_params *params,
                struct dom_html_script_element *ele)
 {
+       ele->flags = DOM_HTML_SCRIPT_ELEMENT_FLAG_NON_BLOCKING;
+
        return _dom_html_element_initialise(params, &ele->base);
 }
 
@@ -273,3 +275,40 @@ dom_exception dom_html_script_element_set_text(
 {
        return _dom_node_set_text_content((dom_node_internal *)ele, text);
 }
+
+/**
+ * Read the internal node flags
+ *
+ * \param ele The dom_html_script_element object
+ * \param flags Where to fill out the flags
+ * \return DOM_NO_ERR on success
+ */
+dom_exception dom_html_script_element_get_flags(
+       dom_html_script_element *ele,
+       dom_html_script_element_flags *flags)
+{
+       assert(flags != NULL);
+       assert(ele != NULL);
+
+       *flags = ele->flags;
+
+       return DOM_NO_ERR;
+}
+
+/**
+ * Set the internal node flags
+ *
+ * \param ele The dom_html_script_element object
+ * \param flags The flags to retain
+ * \return DOM_NO_ERR on success
+ */
+dom_exception dom_html_script_element_set_flags(
+       dom_html_script_element *ele,
+       dom_html_script_element_flags flags)
+{
+       assert(ele != NULL);
+
+       ele->flags = flags;
+
+       return DOM_NO_ERR;
+}
diff --git a/src/html/html_script_element.h b/src/html/html_script_element.h
index 9b1d704..1b34f6a 100644
--- a/src/html/html_script_element.h
+++ b/src/html/html_script_element.h
@@ -16,6 +16,7 @@
 struct dom_html_script_element {
        struct dom_html_element base;
                        /**< The base class */
+       dom_html_script_element_flags flags;
 };
 
 /* Create a dom_html_script_element object */


-----------------------------------------------------------------------

Summary of changes:
 bindings/hubbub/parser.c               |   35 ++++++++++++++++++++++++++++
 include/dom/html/html_script_element.h |   16 +++++++++++++
 src/html/html_script_element.c         |   39 ++++++++++++++++++++++++++++++++
 src/html/html_script_element.h         |    1 +
 4 files changed, 91 insertions(+)

diff --git a/bindings/hubbub/parser.c b/bindings/hubbub/parser.c
index 9dfe738..6ee3004 100644
--- a/bindings/hubbub/parser.c
+++ b/bindings/hubbub/parser.c
@@ -226,6 +226,41 @@ static hubbub_error create_element(void *parser, const 
hubbub_tag *tag,
                        goto clean1;
        }
 
+       /* Now do some special per-element-type handling */
+       dom_html_element_type tag_type;
+       err = dom_html_element_get_tag_type(element, &tag_type);
+       if (err != DOM_NO_ERR) {
+               dom_parser->msg(DOM_MSG_CRITICAL, dom_parser->mctx,
+                               "Can't get tag type out of element");
+               goto clean1;
+       }
+
+       switch (tag_type) {
+       case DOM_HTML_ELEMENT_TYPE_SCRIPT: {
+               /* Kickstart of 
https://html.spec.whatwg.org/multipage/scripting.html#script-processing-model */
+               dom_html_script_element *script = (dom_html_script_element 
*)element;
+               dom_html_script_element_flags flags;
+               err = dom_html_script_element_get_flags(script, &flags);
+               if (err != DOM_NO_ERR) {
+                       dom_parser->msg(DOM_MSG_CRITICAL, dom_parser->mctx,
+                                       "Can't get flags out of script 
element");
+                       goto clean1;
+               }
+               flags |= DOM_HTML_SCRIPT_ELEMENT_FLAG_PARSER_INSERTED;
+               err = dom_html_script_element_set_flags(script, flags);
+               if (err != DOM_NO_ERR) {
+                       dom_parser->msg(DOM_MSG_CRITICAL, dom_parser->mctx,
+                                       "Can't set flags into script element");
+                       goto clean1;
+               }
+               break;
+       }
+       default:
+               /* Nothing */
+               break;
+       }
+
+
        *result = element;
 
 clean1:
diff --git a/include/dom/html/html_script_element.h 
b/include/dom/html/html_script_element.h
index 855bf9d..880ca1c 100644
--- a/include/dom/html/html_script_element.h
+++ b/include/dom/html/html_script_element.h
@@ -4,7 +4,9 @@
  *                http://www.opensource.org/licenses/mit-license.php
  * Copyright 2009 Bo Yang <[email protected]>
  * Copyright 2014 Rupinder Singh Khokhar <[email protected]>
+ * Copyright 2019 Daniel Silverstone <[email protected]>
  */
+
 #ifndef dom_html_script_element_h_
 #define dom_html_script_element_h_
 
@@ -14,6 +16,20 @@
 
 typedef struct dom_html_script_element dom_html_script_element;
 
+typedef enum {
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_ALREADY_STARTED             = 1 << 0,
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_PARSER_INSERTED             = 1 << 1,
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_NON_BLOCKING                = 1 << 2,
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_READY_TO_BE_PARSER_EXECUTED = 1 << 3,
+       DOM_HTML_SCRIPT_ELEMENT_FLAG_FROM_EXTERNAL               = 1 << 4,
+} dom_html_script_element_flags;
+
+dom_exception dom_html_script_element_get_flags(
+       dom_html_script_element *ele, dom_html_script_element_flags *flags);
+
+dom_exception dom_html_script_element_set_flags(
+       dom_html_script_element *ele, dom_html_script_element_flags flags);
+
 dom_exception dom_html_script_element_get_defer(
        dom_html_script_element *ele, bool *defer);
 
diff --git a/src/html/html_script_element.c b/src/html/html_script_element.c
index d20d727..e8dfb1d 100644
--- a/src/html/html_script_element.c
+++ b/src/html/html_script_element.c
@@ -60,6 +60,8 @@ dom_exception _dom_html_script_element_initialise(
                struct dom_html_element_create_params *params,
                struct dom_html_script_element *ele)
 {
+       ele->flags = DOM_HTML_SCRIPT_ELEMENT_FLAG_NON_BLOCKING;
+
        return _dom_html_element_initialise(params, &ele->base);
 }
 
@@ -273,3 +275,40 @@ dom_exception dom_html_script_element_set_text(
 {
        return _dom_node_set_text_content((dom_node_internal *)ele, text);
 }
+
+/**
+ * Read the internal node flags
+ *
+ * \param ele The dom_html_script_element object
+ * \param flags Where to fill out the flags
+ * \return DOM_NO_ERR on success
+ */
+dom_exception dom_html_script_element_get_flags(
+       dom_html_script_element *ele,
+       dom_html_script_element_flags *flags)
+{
+       assert(flags != NULL);
+       assert(ele != NULL);
+
+       *flags = ele->flags;
+
+       return DOM_NO_ERR;
+}
+
+/**
+ * Set the internal node flags
+ *
+ * \param ele The dom_html_script_element object
+ * \param flags The flags to retain
+ * \return DOM_NO_ERR on success
+ */
+dom_exception dom_html_script_element_set_flags(
+       dom_html_script_element *ele,
+       dom_html_script_element_flags flags)
+{
+       assert(ele != NULL);
+
+       ele->flags = flags;
+
+       return DOM_NO_ERR;
+}
diff --git a/src/html/html_script_element.h b/src/html/html_script_element.h
index 9b1d704..1b34f6a 100644
--- a/src/html/html_script_element.h
+++ b/src/html/html_script_element.h
@@ -16,6 +16,7 @@
 struct dom_html_script_element {
        struct dom_html_element base;
                        /**< The base class */
+       dom_html_script_element_flags flags;
 };
 
 /* Create a dom_html_script_element object */


-- 
Document Object Model library

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to