summaryrefslogtreecommitdiff
path: root/plugins/MirOTR/ekhtml/include/ekhtml.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MirOTR/ekhtml/include/ekhtml.h')
-rw-r--r--plugins/MirOTR/ekhtml/include/ekhtml.h266
1 files changed, 266 insertions, 0 deletions
diff --git a/plugins/MirOTR/ekhtml/include/ekhtml.h b/plugins/MirOTR/ekhtml/include/ekhtml.h
new file mode 100644
index 0000000000..1bed8eaa70
--- /dev/null
+++ b/plugins/MirOTR/ekhtml/include/ekhtml.h
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2002, Jon Travis
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef EKHTML_DOT_H
+#define EKHTML_DOT_H
+
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!
+ * \file ekhtml.h
+ * \brief Main El-Kabong header file.
+ *
+ * This header defines everything that a program should need to use
+ * the El-Kabong library.
+ */
+
+/**
+ * A string object, which is not NUL terminated.
+ * For speed reasons, El-Kabong does not deal with zero-terminated
+ * strings.
+ */
+
+typedef struct ekhtml_string_t {
+ const char *str; /**< Actual string data */
+ size_t len; /**< Length of the data in `str` */
+} ekhtml_string_t;
+
+/**
+ * Attribute object, passed into callbacks.
+ * When ekhtml parses tags containing key/value attributes, it will pass
+ * this structure representing those values into the callbacks. Note, for
+ * speed reasons, things such as the 'name' and 'value' fields are not
+ * terminated with '\0', and therefore have an associated length
+ * field (namelen, vallen).
+ */
+
+typedef struct ekhtml_attr_t {
+ ekhtml_string_t name; /**< Name of the attribute */
+ ekhtml_string_t val; /**< Value of the attribute */
+ unsigned int isBoolean; /**< True of the attribute is boolean */
+ struct ekhtml_attr_t *next; /**< Pointer to next attribute in the list */
+} ekhtml_attr_t;
+
+/*
+ * Typedefs for function callback types
+ */
+
+/**
+ * The parser object.
+ * The parser object holds state information, such as which callbacks
+ * to invoke when reading tags, how much data is being processed, etc.
+ */
+
+typedef struct ekhtml_parser_t ekhtml_parser_t;
+
+/**
+ * Callback for simple data.
+ * Callback functions of this form are used to process data which is
+ * not part of a start or end tag. This callback may also be used
+ * to process the body of comment tags.
+ *
+ * I.e. <FOO>data_to_process</FOO>
+ * The data passed into the callback function will be "data_to_process"
+ *
+ * @param cbdata Callback data, as previously set by ekhtml_parser_cbdata_set
+ * @param data A pointer to the data in-between tags.
+ *
+ * @see ekhtml_parser_cbdata_set()
+ * @see ekhtml_parser_datacb_set()
+ */
+
+typedef void (*ekhtml_data_cb_t)(void *cbdata, ekhtml_string_t *data);
+
+/**
+ * Callback for start tags.
+ * Callback functions of this form are used to process start tags.
+ *
+ * I.e. <FOO>data_to_process</FOO>
+ * The tag passed into the callback will be "FOO" with a length of 3.
+ *
+ * @param cbdata Callback data, as previously set by ekhtml_parser_cbdata_set
+ * @param tag A pointer to tag name. This is a traditional NUL terminated
+ * string.
+ * @param attrs Attributes of the tag.
+ *
+ * @see ekhtml_parser_cbdata_set()
+ * @see ekhtml_parser_startcb_add()
+ */
+
+typedef void (*ekhtml_starttag_cb_t)(void *cbdata, ekhtml_string_t *tag,
+ ekhtml_attr_t *attrs);
+
+/**
+ * Callback for end tags.
+ * Callback functions of this form are used to process end tags.
+ *
+ * I.e. <FOO>data_to_process</FOO>
+ * The tag passed into the callback will be "FOO" with a length of 3.
+ *
+ * @param cbdata Callback data, as previously set by ekhtml_parser_cbdata_set
+ * @param tag A pointer to tag name. This is a traditional NUL terminated
+ * string.
+ *
+ * @see ekhtml_parser_cbdata_set()
+ * @see ekhtml_parser_endcb_add()
+ */
+
+typedef void (*ekhtml_endtag_cb_t)(void *cbdata, ekhtml_string_t *tag);
+
+/**
+ * Create a new parser object.
+ * This routine creates a new parser object, with no set callback
+ * functions or state.
+ *
+ * @param cbdata Callback data to use when invoking callbacks
+ *
+ * @returns A new ekhtml_parser_t object
+ *
+ * @see ekhtml_parser_cbdata_set()
+ */
+
+extern ekhtml_parser_t *ekhtml_parser_new(void *cbdata);
+
+/**
+ * Destroys a parser object and all memory associated with it.
+ * After calling this routine, the parser should no longer be
+ * used, as any results would be undefined.
+ *
+ * @param parser The parser to destroy
+ *
+ * @see ekhtml_parser_new()
+ */
+
+extern void ekhtml_parser_destroy(ekhtml_parser_t *parser);
+
+/**
+ * Set the callback data for the parser.
+ * This routine sets the callback data which is passed to set callbacks.
+ *
+ * @param parser Parser to set the callback data for
+ * @param cbdata Callback data the parser should use to pass to callbacks
+ */
+
+extern void ekhtml_parser_cbdata_set(ekhtml_parser_t *parser, void *cbdata);
+
+/**
+ * Set the parser's data callback.
+ * This routine sets the callback which should be invoked for
+ * non-tagged data.
+ *
+ * @param parser Parser to set the callback for
+ * @param cb Callback to invoke when processing non-tagged data
+ */
+
+extern void ekhtml_parser_datacb_set(ekhtml_parser_t *parser,
+ ekhtml_data_cb_t cb);
+
+/**
+ * Set the parser's comment callback.
+ * This routine sets the callback which should be invoked when
+ * the parser processes a comment.
+ *
+ * @param parser Parser to set the callback for
+ * @param cb Callback to invoke when processing a comment
+ */
+
+extern void ekhtml_parser_commentcb_set(ekhtml_parser_t *parser,
+ ekhtml_data_cb_t cb);
+
+/**
+ * Feed data for the parser to process.
+ * Feed data into the HTML parser. This routine will fill up the
+ * internal buffer until it can go no more, then flush the data
+ * and refill. If there is more data that is required than the
+ * internal buffer can hold, it will be resized
+ *
+ * @param parser Parser to feed data to
+ * @param data Data to feed to the parser
+ */
+
+extern void ekhtml_parser_feed(ekhtml_parser_t *parser,
+ ekhtml_string_t *data);
+
+/**
+ * Flush the parser innards.
+ * When this function is invoked, the parser will flush all data that is
+ * currently held, and any remaining state is saved. All data which is
+ * processed is removed from the parser, and the internal buffer is
+ * reshuffled.
+ *
+ * @param parser Parser to flush
+ * @param flushall If true, will flush all data, even if tags are not
+ * complete (i.e. "<FO")
+ * @returns 1 if action was taken (i.e. bytes were processed and the
+ * internal buffer was reshuffled) else 0
+ */
+
+extern int ekhtml_parser_flush(ekhtml_parser_t *parser, int flushall);
+
+/**
+ * Add a callback for a start tag.
+ * This routine sets the callback which should be invoked when
+ * the parser processes a start tag. Both specific tags, and
+ * unknown tags can be used with this method.
+ *
+ * @param parser Parser to set the callback for
+ * @param tag Name of the tag to call `cb` for. If `tag` is NULL, then
+ * any tags which are unknown to the parser will be sent
+ * to the callback specified by `cb`.
+ * @param cb Callback to invoke
+ */
+
+extern void ekhtml_parser_startcb_add(ekhtml_parser_t *parser, const char *tag,
+ ekhtml_starttag_cb_t cb);
+
+/**
+ * Add a callback for an end tag.
+ * This routine sets the callback which should be invoked when
+ * the parser processes an end tag. Both specific tags, and
+ * unknown tags can be used with this method.
+ *
+ * @param parser Parser to set the callback for
+ * @param tag Name of the tag to call `cb` for. If `tag` is NULL, then
+ * any tags which are unknown to the parser will be sent
+ * to the callback specified by `cb`.
+ * @param cb Callback to invoke
+ */
+
+extern void ekhtml_parser_endcb_add(ekhtml_parser_t *parser, const char *tag,
+ ekhtml_endtag_cb_t cb);
+
+/** EKHTML_BLOCKSIZE = # of blocks to allocate per chunk */
+#define EKHTML_BLOCKSIZE (1024 * 4)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif