summaryrefslogtreecommitdiff
path: root/include/hubbub
diff options
context:
space:
mode:
Diffstat (limited to 'include/hubbub')
-rw-r--r--include/hubbub/functypes.h61
-rw-r--r--include/hubbub/parser.h6
-rw-r--r--include/hubbub/tree.h31
3 files changed, 96 insertions, 2 deletions
diff --git a/include/hubbub/functypes.h b/include/hubbub/functypes.h
index aa3e649..8d7f199 100644
--- a/include/hubbub/functypes.h
+++ b/include/hubbub/functypes.h
@@ -2,12 +2,13 @@
* This file is part of Hubbub.
* Licensed under the MIT License,
* http://www.opensource.org/licenses/mit-license.php
- * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
+ * Copyright 2007-8 John-Mark Bell <jmb@netsurf-browser.org>
*/
#ifndef hubbub_functypes_h_
#define hubbub_functypes_h_
+#include <stdbool.h>
#include <stdlib.h>
#include <hubbub/types.h>
@@ -32,6 +33,64 @@ typedef void (*hubbub_buffer_handler)(const uint8_t *data,
typedef void (*hubbub_error_handler)(uint32_t line, uint32_t col,
const char *message, void *pw);
+/**
+ * Type of tree comment node creation function
+ */
+typedef int (*hubbub_tree_create_comment)(void *ctx, const hubbub_string *data,
+ void **result);
+
+/**
+ * Type of tree doctype node creation function
+ */
+typedef int (*hubbub_tree_create_doctype)(void *ctx, const hubbub_string *qname,
+ const hubbub_string *public_id, const hubbub_string *system_id,
+ void **result);
+
+/**
+ * Type of tree element node creation function
+ */
+typedef int (*hubbub_tree_create_element)(void *ctx,
+ const hubbub_string *tag_name, void **result);
+
+/**
+ * Type of tree text node creation function
+ */
+typedef int (*hubbub_tree_create_text)(void *ctx, const hubbub_string *data,
+ void **result);
+
+/**
+ * Type of tree node destruction function
+ */
+typedef int (*hubbub_tree_free_node)(void *ctx, void *node);
+
+/**
+ * Type of tree node appending function
+ */
+typedef int (*hubbub_tree_append_child)(void *ctx, void *parent, void *child,
+ void **result);
+
+/**
+ * Type of tree node insertion function
+ */
+typedef int (*hubbub_tree_insert_before)(void *ctx, void *parent, void *child,
+ void *ref_child, void **result);
+
+/**
+ * Type of tree node removal function
+ */
+typedef int (*hubbub_tree_remove_child)(void *ctx, void *parent, void *child,
+ void **result);
+
+/**
+ * Type of tree node cloning function
+ */
+typedef int (*hubbub_tree_clone_node)(void *ctx, void *node, bool deep,
+ void **result);
+
+/**
+ * Type of tree quirks mode notification function
+ */
+typedef int (*hubbub_tree_set_quirks_mode)(void *ctx, bool quirky);
#endif
diff --git a/include/hubbub/parser.h b/include/hubbub/parser.h
index cdf8664..134f4b7 100644
--- a/include/hubbub/parser.h
+++ b/include/hubbub/parser.h
@@ -2,7 +2,7 @@
* This file is part of Hubbub.
* Licensed under the MIT License,
* http://www.opensource.org/licenses/mit-license.php
- * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
+ * Copyright 2007-8 John-Mark Bell <jmb@netsurf-browser.org>
*/
#ifndef hubbub_parser_h_
@@ -12,6 +12,7 @@
#include <hubbub/errors.h>
#include <hubbub/functypes.h>
+#include <hubbub/tree.h>
#include <hubbub/types.h>
typedef struct hubbub_parser hubbub_parser;
@@ -24,6 +25,7 @@ typedef enum hubbub_parser_opttype {
HUBBUB_PARSER_BUFFER_HANDLER,
HUBBUB_PARSER_ERROR_HANDLER,
HUBBUB_PARSER_CONTENT_MODEL,
+ HUBBUB_PARSER_TREE_HANDLER,
} hubbub_parser_opttype;
/**
@@ -48,6 +50,8 @@ typedef union hubbub_parser_optparams {
struct {
hubbub_content_model model;
} content_model;
+
+ hubbub_tree_handler tree_handler;
} hubbub_parser_optparams;
/* Create a hubbub parser */
diff --git a/include/hubbub/tree.h b/include/hubbub/tree.h
new file mode 100644
index 0000000..a883f1a
--- /dev/null
+++ b/include/hubbub/tree.h
@@ -0,0 +1,31 @@
+/*
+ * This file is part of Hubbub.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2008 John-Mark Bell <jmb@netsurf-browser.org>
+ */
+
+#ifndef hubbub_tree_h_
+#define hubbub_tree_h_
+
+#include <hubbub/functypes.h>
+
+/**
+ * Hubbub tree handler
+ */
+typedef struct hubbub_tree_handler {
+ hubbub_tree_create_comment create_comment;
+ hubbub_tree_create_doctype create_doctype;
+ hubbub_tree_create_element create_element;
+ hubbub_tree_create_text create_text;
+ hubbub_tree_free_node free_node;
+ hubbub_tree_append_child append_child;
+ hubbub_tree_insert_before insert_before;
+ hubbub_tree_remove_child remove_child;
+ hubbub_tree_clone_node clone_node;
+ hubbub_tree_set_quirks_mode set_quirks_mode;
+ void *ctx;
+} hubbub_tree_handler;
+
+#endif
+