Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3583 → Rev 3584

/programs/network/netsurf/libhubbub/include/hubbub/errors.h
0,0 → 1,42
/*
* 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>
*/
 
#ifndef hubbub_errors_h_
#define hubbub_errors_h_
 
#ifdef __cplusplus
extern "C"
{
#endif
 
#include <stddef.h>
 
typedef enum hubbub_error {
HUBBUB_OK = 0, /**< No error */
HUBBUB_REPROCESS = 1,
HUBBUB_ENCODINGCHANGE = 2,
HUBBUB_PAUSED = 3, /**< tokenisation is paused */
 
HUBBUB_NOMEM = 5,
HUBBUB_BADPARM = 6,
HUBBUB_INVALID = 7,
HUBBUB_FILENOTFOUND = 8,
HUBBUB_NEEDDATA = 9,
HUBBUB_BADENCODING = 10,
 
HUBBUB_UNKNOWN = 11
} hubbub_error;
 
/* Convert a hubbub error value to a string */
const char *hubbub_error_to_string(hubbub_error error);
 
#ifdef __cplusplus
}
#endif
 
#endif
 
/programs/network/netsurf/libhubbub/include/hubbub/functypes.h
0,0 → 1,60
/*
* This file is part of Hubbub.
* Licensed under the MIT License,
* http://www.opensource.org/licenses/mit-license.php
* Copyright 2007-8 John-Mark Bell <jmb@netsurf-browser.org>
*/
 
#ifndef hubbub_functypes_h_
#define hubbub_functypes_h_
 
#ifdef __cplusplus
extern "C"
{
#endif
 
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
 
#include <hubbub/types.h>
 
/**
* Type of allocation function for hubbub
*
* The semantics of this function are the same as for realloc().
*
* \param ptr Pointer to object to reallocate, or NULL for a new allocation
* \param size Required length in bytes, or zero to free ::ptr
* \param pw Pointer to client data
* \return Pointer to allocated object, or NULL on failure
*/
typedef void *(*hubbub_allocator_fn)(void *ptr, size_t size, void *pw);
 
/**
* Type of token handling function
*
* \param token Pointer to token to handle
* \param pw Pointer to client data
* \return HUBBUB_OK on success, appropriate error otherwise.
*/
typedef hubbub_error (*hubbub_token_handler)(
const hubbub_token *token, void *pw);
 
/**
* Type of parse error handling function
*
* \param line Source line on which error occurred
* \param col Column in ::line of start of erroneous input
* \param message Error message
* \param pw Pointer to client data
*/
typedef void (*hubbub_error_handler)(uint32_t line, uint32_t col,
const char *message, void *pw);
 
#ifdef __cplusplus
}
#endif
 
#endif
 
/programs/network/netsurf/libhubbub/include/hubbub/hubbub.h
0,0 → 1,25
/*
* 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>
*/
 
#ifndef hubbub_h_
#define hubbub_h_
 
#ifdef __cplusplus
extern "C"
{
#endif
 
#include <hubbub/errors.h>
#include <hubbub/functypes.h>
#include <hubbub/types.h>
 
#ifdef __cplusplus
}
#endif
 
#endif
 
/programs/network/netsurf/libhubbub/include/hubbub/parser.h
0,0 → 1,110
/*
* This file is part of Hubbub.
* Licensed under the MIT License,
* http://www.opensource.org/licenses/mit-license.php
* Copyright 2007-8 John-Mark Bell <jmb@netsurf-browser.org>
*/
 
#ifndef hubbub_parser_h_
#define hubbub_parser_h_
 
#ifdef __cplusplus
extern "C"
{
#endif
 
#include <stdbool.h>
#include <inttypes.h>
 
#include <hubbub/errors.h>
#include <hubbub/functypes.h>
#include <hubbub/tree.h>
#include <hubbub/types.h>
 
typedef struct hubbub_parser hubbub_parser;
 
/**
* Hubbub parser option types
*/
typedef enum hubbub_parser_opttype {
HUBBUB_PARSER_TOKEN_HANDLER,
HUBBUB_PARSER_ERROR_HANDLER,
HUBBUB_PARSER_CONTENT_MODEL,
HUBBUB_PARSER_TREE_HANDLER,
HUBBUB_PARSER_DOCUMENT_NODE,
HUBBUB_PARSER_ENABLE_SCRIPTING,
HUBBUB_PARSER_PAUSE
} hubbub_parser_opttype;
 
/**
* Hubbub parser option parameters
*/
typedef union hubbub_parser_optparams {
struct {
hubbub_token_handler handler;
void *pw;
} token_handler; /**< Token handling callback */
 
struct {
hubbub_error_handler handler;
void *pw;
} error_handler; /**< Error handling callback */
 
struct {
hubbub_content_model model;
} content_model; /**< Current content model */
 
hubbub_tree_handler *tree_handler; /**< Tree handling callbacks */
 
void *document_node; /**< Document node */
 
bool enable_scripting; /**< Whether to enable scripting */
 
bool pause_parse; /**< Pause parsing */
} hubbub_parser_optparams;
 
/* Create a hubbub parser */
hubbub_error hubbub_parser_create(const char *enc, bool fix_enc,
hubbub_allocator_fn alloc, void *pw, hubbub_parser **parser);
/* Destroy a hubbub parser */
hubbub_error hubbub_parser_destroy(hubbub_parser *parser);
 
/* Configure a hubbub parser */
hubbub_error hubbub_parser_setopt(hubbub_parser *parser,
hubbub_parser_opttype type,
hubbub_parser_optparams *params);
 
/* Pass a chunk of data to a hubbub parser for parsing */
/* This data is encoded in the input charset */
hubbub_error hubbub_parser_parse_chunk(hubbub_parser *parser,
const uint8_t *data, size_t len);
 
/**
* Insert a chunk of data into a hubbub parser input stream
*
* This data is encoded in the input charset
*
* Inserts the given data into the input stream ready for parsing but
* does not cause any additional processing of the input. This is
* useful to allow hubbub callbacks to add computed data to the input.
*
* \param parser Parser instance to use
* \param data Data to parse (encoded in the input charset)
* \param len Length, in bytes, of data
* \return HUBBUB_OK on success, appropriate error otherwise
*/
hubbub_error hubbub_parser_insert_chunk(hubbub_parser *parser,
const uint8_t *data, size_t len);
/* Inform the parser that the last chunk of data has been parsed */
hubbub_error hubbub_parser_completed(hubbub_parser *parser);
 
/* Read the document charset */
const char *hubbub_parser_read_charset(hubbub_parser *parser,
hubbub_charset_source *source);
 
#ifdef __cplusplus
}
#endif
 
#endif
 
/programs/network/netsurf/libhubbub/include/hubbub/tree.h
0,0 → 1,300
/*
* 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_
 
#ifdef __cplusplus
extern "C"
{
#endif
 
#include <hubbub/functypes.h>
 
/**
* Create a comment node
*
* \param ctx Client's context
* \param data String content of node
* \param result Pointer to location to receive created node
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: if successful, result's reference count must be 1.
*/
typedef hubbub_error (*hubbub_tree_create_comment)(void *ctx,
const hubbub_string *data,
void **result);
 
/**
* Create a doctype node
*
* \param ctx Client's context
* \param doctype Data for doctype node (name, public id, system id)
* \param result Pointer to location to receive created node
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: if successful, result's reference count must be 1.
*/
typedef hubbub_error (*hubbub_tree_create_doctype)(void *ctx,
const hubbub_doctype *doctype,
void **result);
 
/**
* Create an element node
*
* \param ctx Client's context
* \param tag Data for element node (namespace, name, attributes)
* \param result Pointer to location to receive created node
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: if successful, result's reference count must be 1.
*/
typedef hubbub_error (*hubbub_tree_create_element)(void *ctx,
const hubbub_tag *tag,
void **result);
 
/**
* Create a text node
*
* \param ctx Client's context
* \param data String content of node
* \param result Pointer to location to receive created node
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: if successful, result's reference count must be 1.
*/
typedef hubbub_error (*hubbub_tree_create_text)(void *ctx,
const hubbub_string *data,
void **result);
 
/**
* Increase a node's reference count
*
* \param ctx Client's context
* \param node Node to reference
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: node's reference count is one larger than before
*/
typedef hubbub_error (*hubbub_tree_ref_node)(void *ctx, void *node);
 
/**
* Decrease a node's reference count
*
* \param ctx Client's context
* \param node Node to reference
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: If the node's reference count becomes zero, and it has no
* parent, and it is not the document node, then it is destroyed. Otherwise,
* the reference count is one less than before.
*/
typedef hubbub_error (*hubbub_tree_unref_node)(void *ctx, void *node);
 
/**
* Append a node to the end of another's child list
*
* \param ctx Client's context
* \param parent The node to append to
* \param child The node to append
* \param result Pointer to location to receive appended node
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: if successful, result's reference count is increased by 1
*
* Important: *result may not == child (e.g. if text nodes got coalesced)
*/
typedef hubbub_error (*hubbub_tree_append_child)(void *ctx,
void *parent,
void *child,
void **result);
 
/**
* Insert a node into another's child list
*
* \param ctx Client's context
* \param parent The node to insert into
* \param child The node to insert
* \param ref_child The node to insert before
* \param result Pointer to location to receive inserted node
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: if successful, result's reference count is increased by 1
*
* Important: *result may not == child (e.g. if text nodes got coalesced)
*/
typedef hubbub_error (*hubbub_tree_insert_before)(void *ctx,
void *parent,
void *child,
void *ref_child,
void **result);
 
/**
* Remove a node from another's child list
*
* \param ctx Client context
* \param parent The node to remove from
* \param child The node to remove
* \param result Pointer to location to receive removed node
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: if successful, result's reference count is increased by 1
*/
typedef hubbub_error (*hubbub_tree_remove_child)(void *ctx,
void *parent,
void *child,
void **result);
 
/**
* Clone a node
*
* \param ctx Client's context
* \param node The node to clone
* \param deep True to clone entire subtree, false to clone only the node
* \param result Pointer to location to receive clone
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* Postcondition: if successful, result's reference count must be 1.
*/
typedef hubbub_error (*hubbub_tree_clone_node)(void *ctx,
void *node,
bool deep,
void **result);
 
/**
* Move all the children of one node to another
*
* \param ctx Client's context
* \param node The initial parent node
* \param new_parent The new parent node
* \return HUBBUB_OK on success, appropriate error otherwise.
*/
typedef hubbub_error (*hubbub_tree_reparent_children)(void *ctx,
void *node,
void *new_parent);
 
/**
* Retrieve the parent of a node
*
* \param ctx Client context
* \param node Node to retrieve the parent of
* \param element_only True if the parent must be an element, false otherwise
* \param result Pointer to location to receive parent node
* \return HUBBUB_OK on success, appropriate error otherwise.
*
* If there is a parent node, but it is not an element node and element_only
* is true, then act as if no parent existed.
*
* Postcondition: if there is a parent, then result's reference count must be
* increased.
*/
typedef hubbub_error (*hubbub_tree_get_parent)(void *ctx,
void *node,
bool element_only,
void **result);
 
/**
* Determine if a node has children
*
* \param ctx Client's context
* \param node The node to inspect
* \param result Location to receive result
* \return HUBBUB_OK on success, appropriate error otherwise.
*/
typedef hubbub_error (*hubbub_tree_has_children)(void *ctx,
void *node,
bool *result);
 
/**
* Associate a node with a form
*
* \param ctx Client's context
* \param form The form to associate with
* \param node The node to associate
* \return HUBBUB_OK on success, appropriate error otherwise.
*/
typedef hubbub_error (*hubbub_tree_form_associate)(void *ctx,
void *form,
void *node);
 
/**
* Add attributes to a node
*
* \param ctx Client's context
* \param node The node to add to
* \param attributes Array of attributes to add
* \param n_attributes Number of entries in array
* \return HUBBUB_OK on success, appropriate error otherwise.
*/
typedef hubbub_error (*hubbub_tree_add_attributes)(void *ctx,
void *node,
const hubbub_attribute *attributes,
uint32_t n_attributes);
 
/**
* Notification of the quirks mode of a document
*
* \param ctx Client's context
* \param mode The quirks mode
* \return HUBBUB_OK on success, appropriate error otherwise.
*/
typedef hubbub_error (*hubbub_tree_set_quirks_mode)(void *ctx,
hubbub_quirks_mode mode);
 
/**
* Notification that a potential encoding change is required
*
* \param ctx Client's context
* \param charset The new charset for the source data
* \return HUBBUB_OK to continue using the current input handler,
* HUBBUB_ENCODINGCHANGE to stop processing immediately and
* return control to the client,
* appropriate error otherwise.
*/
typedef hubbub_error (*hubbub_tree_encoding_change)(void *ctx,
const char *encname);
 
/**
* Complete script processing
*
* \param ctx Client's context
* \param script The script
* \return HUBBUB_OK on success, appropriate error otherwise.
*/
typedef hubbub_error (*hubbub_tree_complete_script)(void *ctx, void *script);
 
/**
* Hubbub tree handler
*/
typedef struct hubbub_tree_handler {
hubbub_tree_create_comment create_comment; /**< Create comment */
hubbub_tree_create_doctype create_doctype; /**< Create doctype */
hubbub_tree_create_element create_element; /**< Create element */
hubbub_tree_create_text create_text; /**< Create text */
hubbub_tree_ref_node ref_node; /**< Reference node */
hubbub_tree_unref_node unref_node; /**< Unreference node */
hubbub_tree_append_child append_child; /**< Append child */
hubbub_tree_insert_before insert_before; /**< Insert before */
hubbub_tree_remove_child remove_child; /**< Remove child */
hubbub_tree_clone_node clone_node; /**< Clone node */
hubbub_tree_reparent_children reparent_children;/**< Reparent children*/
hubbub_tree_get_parent get_parent; /**< Get parent */
hubbub_tree_has_children has_children; /**< Has children? */
hubbub_tree_form_associate form_associate; /**< Form associate */
hubbub_tree_add_attributes add_attributes; /**< Add attributes */
hubbub_tree_set_quirks_mode set_quirks_mode; /**< Set quirks mode */
hubbub_tree_encoding_change encoding_change; /**< Change encoding */
hubbub_tree_complete_script complete_script; /**< Script Complete */
void *ctx; /**< Context pointer */
} hubbub_tree_handler;
 
#ifdef __cplusplus
}
#endif
 
#endif
 
/programs/network/netsurf/libhubbub/include/hubbub/types.h
0,0 → 1,137
/*
* 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>
*/
 
#ifndef hubbub_types_h_
#define hubbub_types_h_
 
#ifdef __cplusplus
extern "C"
{
#endif
 
#include <stdbool.h>
#include <inttypes.h>
 
/** Source of charset information, in order of importance
* A client-dictated charset will override all others.
* A document-specified charset will override autodetection or the default */
typedef enum hubbub_charset_source {
HUBBUB_CHARSET_UNKNOWN = 0, /**< Unknown */
HUBBUB_CHARSET_TENTATIVE = 1, /**< Charset may be changed
* with further data */
HUBBUB_CHARSET_CONFIDENT = 2 /**< Charset definite */
} hubbub_charset_source;
 
/**
* Content model flag
*/
typedef enum hubbub_content_model {
HUBBUB_CONTENT_MODEL_PCDATA,
HUBBUB_CONTENT_MODEL_RCDATA,
HUBBUB_CONTENT_MODEL_CDATA,
HUBBUB_CONTENT_MODEL_PLAINTEXT
} hubbub_content_model;
 
/**
* Quirks mode flag
*/
typedef enum hubbub_quirks_mode {
HUBBUB_QUIRKS_MODE_NONE,
HUBBUB_QUIRKS_MODE_LIMITED,
HUBBUB_QUIRKS_MODE_FULL
} hubbub_quirks_mode;
 
/**
* Type of an emitted token
*/
typedef enum hubbub_token_type {
HUBBUB_TOKEN_DOCTYPE,
HUBBUB_TOKEN_START_TAG,
HUBBUB_TOKEN_END_TAG,
HUBBUB_TOKEN_COMMENT,
HUBBUB_TOKEN_CHARACTER,
HUBBUB_TOKEN_EOF
} hubbub_token_type;
 
/**
* Possible namespaces
*/
typedef enum hubbub_ns {
HUBBUB_NS_NULL,
HUBBUB_NS_HTML,
HUBBUB_NS_MATHML,
HUBBUB_NS_SVG,
HUBBUB_NS_XLINK,
HUBBUB_NS_XML,
HUBBUB_NS_XMLNS
} hubbub_ns;
 
/**
* Tokeniser string type
*/
typedef struct hubbub_string {
const uint8_t *ptr; /**< Pointer to data */
size_t len; /**< Byte length of string */
} hubbub_string;
 
/**
* Tag attribute data
*/
typedef struct hubbub_attribute {
hubbub_ns ns; /**< Attribute namespace */
hubbub_string name; /**< Attribute name */
hubbub_string value; /**< Attribute value */
} hubbub_attribute;
 
/**
* Data for doctype token
*/
typedef struct hubbub_doctype {
hubbub_string name; /**< Doctype name */
 
bool public_missing; /**< Whether the public id is missing */
hubbub_string public_id; /**< Doctype public identifier */
 
bool system_missing; /**< Whether the system id is missing */
hubbub_string system_id; /**< Doctype system identifier */
 
bool force_quirks; /**< Doctype force-quirks flag */
} hubbub_doctype;
 
/**
* Data for a tag
*/
typedef struct hubbub_tag {
hubbub_ns ns; /**< Tag namespace */
hubbub_string name; /**< Tag name */
uint32_t n_attributes; /**< Count of attributes */
hubbub_attribute *attributes; /**< Array of attribute data */
bool self_closing; /**< Whether the tag can have children */
} hubbub_tag;
 
/**
* Token data
*/
typedef struct hubbub_token {
hubbub_token_type type; /**< The token type */
 
union {
hubbub_doctype doctype;
 
hubbub_tag tag;
 
hubbub_string comment;
 
hubbub_string character;
} data; /**< Type-specific data */
} hubbub_token;
 
#ifdef __cplusplus
}
#endif
 
#endif