Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * This file is part of Hubbub.
  3.  * Licensed under the MIT License,
  4.  *                http://www.opensource.org/licenses/mit-license.php
  5.  * Copyright 2007 John-Mark Bell <jmb@netsurf-browser.org>
  6.  */
  7.  
  8. #ifndef hubbub_types_h_
  9. #define hubbub_types_h_
  10.  
  11. #ifdef __cplusplus
  12. extern "C"
  13. {
  14. #endif
  15.  
  16. #include <stdbool.h>
  17. #include <inttypes.h>
  18.  
  19. /** Source of charset information, in order of importance
  20.  * A client-dictated charset will override all others.
  21.  * A document-specified charset will override autodetection or the default */
  22. typedef enum hubbub_charset_source {
  23.         HUBBUB_CHARSET_UNKNOWN          = 0,    /**< Unknown */
  24.         HUBBUB_CHARSET_TENTATIVE        = 1,    /**< Charset may be changed
  25.                                                  * with further data */
  26.         HUBBUB_CHARSET_CONFIDENT        = 2     /**< Charset definite */
  27. } hubbub_charset_source;
  28.  
  29. /**
  30.  * Content model flag
  31.  */
  32. typedef enum hubbub_content_model {
  33.         HUBBUB_CONTENT_MODEL_PCDATA,
  34.         HUBBUB_CONTENT_MODEL_RCDATA,
  35.         HUBBUB_CONTENT_MODEL_CDATA,
  36.         HUBBUB_CONTENT_MODEL_PLAINTEXT
  37. } hubbub_content_model;
  38.  
  39. /**
  40.  * Quirks mode flag
  41.  */
  42. typedef enum hubbub_quirks_mode {
  43.         HUBBUB_QUIRKS_MODE_NONE,
  44.         HUBBUB_QUIRKS_MODE_LIMITED,
  45.         HUBBUB_QUIRKS_MODE_FULL
  46. } hubbub_quirks_mode;
  47.  
  48. /**
  49.  * Type of an emitted token
  50.  */
  51. typedef enum hubbub_token_type {
  52.         HUBBUB_TOKEN_DOCTYPE,
  53.         HUBBUB_TOKEN_START_TAG,
  54.         HUBBUB_TOKEN_END_TAG,
  55.         HUBBUB_TOKEN_COMMENT,
  56.         HUBBUB_TOKEN_CHARACTER,
  57.         HUBBUB_TOKEN_EOF
  58. } hubbub_token_type;
  59.  
  60. /**
  61.  * Possible namespaces
  62.  */
  63. typedef enum hubbub_ns {
  64.         HUBBUB_NS_NULL,
  65.         HUBBUB_NS_HTML,
  66.         HUBBUB_NS_MATHML,
  67.         HUBBUB_NS_SVG,
  68.         HUBBUB_NS_XLINK,
  69.         HUBBUB_NS_XML,
  70.         HUBBUB_NS_XMLNS
  71. } hubbub_ns;
  72.  
  73. /**
  74.  * Tokeniser string type
  75.  */
  76. typedef struct hubbub_string {
  77.         const uint8_t *ptr;             /**< Pointer to data */
  78.         size_t len;                     /**< Byte length of string */
  79. } hubbub_string;
  80.  
  81. /**
  82.  * Tag attribute data
  83.  */
  84. typedef struct hubbub_attribute {
  85.         hubbub_ns ns;                   /**< Attribute namespace */
  86.         hubbub_string name;             /**< Attribute name */
  87.         hubbub_string value;            /**< Attribute value */
  88. } hubbub_attribute;
  89.  
  90. /**
  91.  * Data for doctype token
  92.  */
  93. typedef struct hubbub_doctype {
  94.         hubbub_string name;             /**< Doctype name */
  95.  
  96.         bool public_missing;            /**< Whether the public id is missing */
  97.         hubbub_string public_id;        /**< Doctype public identifier */
  98.  
  99.         bool system_missing;            /**< Whether the system id is missing */
  100.         hubbub_string system_id;        /**< Doctype system identifier */
  101.  
  102.         bool force_quirks;              /**< Doctype force-quirks flag */
  103. } hubbub_doctype;
  104.  
  105. /**
  106.  * Data for a tag
  107.  */
  108. typedef struct hubbub_tag {
  109.         hubbub_ns ns;                   /**< Tag namespace */
  110.         hubbub_string name;             /**< Tag name */
  111.         uint32_t n_attributes;          /**< Count of attributes */
  112.         hubbub_attribute *attributes;   /**< Array of attribute data */
  113.         bool self_closing;              /**< Whether the tag can have children */
  114. } hubbub_tag;
  115.  
  116. /**
  117.  * Token data
  118.  */
  119. typedef struct hubbub_token {
  120.         hubbub_token_type type;         /**< The token type */
  121.  
  122.         union {
  123.                 hubbub_doctype doctype;
  124.  
  125.                 hubbub_tag tag;
  126.  
  127.                 hubbub_string comment;
  128.  
  129.                 hubbub_string character;
  130.         } data;                         /**< Type-specific data */
  131. } hubbub_token;
  132.  
  133. #ifdef __cplusplus
  134. }
  135. #endif
  136.  
  137. #endif
  138.