summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/parser.c7
-rw-r--r--src/treebuilder/in_body.c5
-rw-r--r--src/treebuilder/in_head.c3
-rw-r--r--src/treebuilder/internal.h2
-rw-r--r--src/treebuilder/treebuilder.c4
-rw-r--r--src/treebuilder/treebuilder.h3
6 files changed, 20 insertions, 4 deletions
diff --git a/src/parser.c b/src/parser.c
index 8b8dbc5..88979d5 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -155,6 +155,13 @@ hubbub_error hubbub_parser_setopt(hubbub_parser *parser,
(hubbub_treebuilder_optparams *) params);
}
break;
+ case HUBBUB_PARSER_ENABLE_SCRIPTING:
+ if (parser->tb != NULL) {
+ result = hubbub_treebuilder_setopt(parser->tb,
+ HUBBUB_TREEBUILDER_ENABLE_SCRIPTING,
+ (hubbub_treebuilder_optparams *) params);
+ }
+ break;
default:
result = HUBBUB_INVALID;
}
diff --git a/src/treebuilder/in_body.c b/src/treebuilder/in_body.c
index 699152e..e1a0a8f 100644
--- a/src/treebuilder/in_body.c
+++ b/src/treebuilder/in_body.c
@@ -297,7 +297,8 @@ bool process_start_tag(hubbub_treebuilder *treebuilder,
process_textarea_in_body(treebuilder, token);
} else if (type == IFRAME || type == NOEMBED ||
type == NOFRAMES ||
- (false /* scripting */ && type == NOSCRIPT)) {
+ (treebuilder->context.enable_scripting &&
+ type == NOSCRIPT)) {
parse_generic_rcdata(treebuilder, token, false);
} else if (type == SELECT) {
process_select_in_body(treebuilder, token);
@@ -411,7 +412,7 @@ bool process_end_tag(hubbub_treebuilder *treebuilder,
type == PARAM || type == SELECT ||
type == SPACER || type == TABLE ||
type == TEXTAREA || type == WBR ||
- (false /* scripting enabled */ &&
+ (treebuilder->context.enable_scripting &&
type == NOSCRIPT)) {
/** \todo parse error */
/* } else if (type == EVENT_SOURCE || type == SECTION ||
diff --git a/src/treebuilder/in_head.c b/src/treebuilder/in_head.c
index 79cfbc8..2df1062 100644
--- a/src/treebuilder/in_head.c
+++ b/src/treebuilder/in_head.c
@@ -130,8 +130,7 @@ bool handle_in_head(hubbub_treebuilder *treebuilder,
} else if (type == NOFRAMES || type == STYLE) {
parse_generic_rcdata(treebuilder, token, false);
} else if (type == NOSCRIPT) {
- /** \todo determine if scripting is enabled */
- if (false /*scripting_is_enabled*/) {
+ if (treebuilder->context.enable_scripting) {
parse_generic_rcdata(treebuilder, token, false);
} else {
insert_element(treebuilder, &token->data.tag);
diff --git a/src/treebuilder/internal.h b/src/treebuilder/internal.h
index 5c9eb49..059e177 100644
--- a/src/treebuilder/internal.h
+++ b/src/treebuilder/internal.h
@@ -82,6 +82,8 @@ typedef struct hubbub_treebuilder_context
void *document; /**< Pointer to the document node */
+ bool enable_scripting; /**< Whether scripting is enabled */
+
struct {
insertion_mode mode; /**< Insertion mode to return to */
void *node; /**< Node to attach Text child to */
diff --git a/src/treebuilder/treebuilder.c b/src/treebuilder/treebuilder.c
index c6d8f69..95a05b5 100644
--- a/src/treebuilder/treebuilder.c
+++ b/src/treebuilder/treebuilder.c
@@ -236,6 +236,10 @@ hubbub_error hubbub_treebuilder_setopt(hubbub_treebuilder *treebuilder,
case HUBBUB_TREEBUILDER_DOCUMENT_NODE:
treebuilder->context.document = params->document_node;
break;
+ case HUBBUB_TREEBUILDER_ENABLE_SCRIPTING:
+ treebuilder->context.enable_scripting =
+ params->enable_scripting;
+ break;
}
return HUBBUB_OK;
diff --git a/src/treebuilder/treebuilder.h b/src/treebuilder/treebuilder.h
index 67451b8..c7587a8 100644
--- a/src/treebuilder/treebuilder.h
+++ b/src/treebuilder/treebuilder.h
@@ -27,6 +27,7 @@ typedef enum hubbub_treebuilder_opttype {
HUBBUB_TREEBUILDER_ERROR_HANDLER,
HUBBUB_TREEBUILDER_TREE_HANDLER,
HUBBUB_TREEBUILDER_DOCUMENT_NODE,
+ HUBBUB_TREEBUILDER_ENABLE_SCRIPTING,
} hubbub_treebuilder_opttype;
/**
@@ -41,6 +42,8 @@ typedef union hubbub_treebuilder_optparams {
hubbub_tree_handler *tree_handler;
void *document_node;
+
+ bool enable_scripting;
} hubbub_treebuilder_optparams;
/* Create a hubbub treebuilder */