00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef SGML_PARSER_H_INCLUDED
00026 #define SGML_PARSER_H_INCLUDED
00027 #include "util.h"
00028
00029
00030
00031
00032
00033
00034 #define SGML_AT_DEFAULT 0x1
00035
00036 typedef struct _sgml_attribute
00037 { struct
00038 { ochar *cdata;
00039 ichar *text;
00040 long number;
00041 } value;
00042 dtd_attr *definition;
00043 unsigned flags;
00044 } sgml_attribute;
00045
00046 typedef struct _dtd_parser *dtd_parser_p;
00047
00048 typedef int (*sgml_begin_element_f)(dtd_parser_p parser,
00049 dtd_element *e,
00050 int argc,
00051 sgml_attribute *argv);
00052 typedef int (*sgml_end_element_f)(dtd_parser_p parser,
00053 dtd_element *e);
00054 typedef int (*sgml_data_f)(dtd_parser_p parser,
00055 data_type type, int len, const ochar *text);
00056 typedef int (*sgml_entity_f)(dtd_parser_p parser,
00057 dtd_entity *entity,
00058 int chr);
00059 typedef int (*sgml_pi_f)(dtd_parser_p parser, const ichar *pi);
00060 typedef int (*sgml_error_f)(dtd_parser_p parser,
00061 dtd_error *error);
00062 typedef int (*sgml_decl_f)(dtd_parser_p parser, const ichar *decl);
00063 #ifdef XMLNS
00064 typedef int (*xmlns_f)(dtd_parser_p parser,
00065 dtd_symbol *ns, dtd_symbol *url);
00066 #endif
00067
00068
00069
00070
00071
00072
00073 #define SGML_PARSER_MAGIC (0x834ab663)
00074
00075 typedef enum
00076 { S_PCDATA,
00077 #ifdef UTF8
00078 S_UTF8,
00079 #endif
00080 S_CDATA,
00081 S_RCDATA,
00082 S_MSCDATA,
00083 S_EMSCDATA1,
00084 S_EMSCDATA2,
00085 S_ECDATA1,
00086 S_ECDATA2,
00087 S_EMSC1,
00088 S_EMSC2,
00089 S_PI,
00090 S_PI2,
00091 S_DECL0,
00092 S_DECL,
00093 S_MDECL0,
00094 S_STRING,
00095 S_DECLCMT0,
00096 S_DECLCMT,
00097 S_DECLCMTE0,
00098 S_CMTO,
00099 S_CMT,
00100 S_CMTE0,
00101 S_CMTE1,
00102 S_GROUP,
00103 S_PENT,
00104 S_ENT0,
00105 S_ENT,
00106 S_ENTCR
00107 } dtdstate;
00108
00109
00110 typedef enum
00111 { DCL_DTD,
00112 DCL_BEGIN,
00113 DCL_END
00114 } dcl_type;
00115
00116
00117 typedef enum
00118 { MS_IGNORE,
00119 MS_INCLUDE,
00120 MS_CDATA,
00121 MS_RCDATA
00122 } marktype;
00123
00124
00125 typedef enum
00126 { EV_EXPLICIT,
00127 EV_OMITTED,
00128 EV_SHORTTAG,
00129 EV_SHORTREF
00130 } sgml_event_class;
00131
00132
00133 typedef struct _dtd_marked
00134 { dtd_symbol *keyword;
00135 marktype type;
00136 struct _dtd_marked *parent;
00137 } dtd_marked;
00138
00139
00140 typedef enum
00141 { DM_DTD,
00142 DM_DATA
00143 } data_mode;
00144
00145
00146 typedef struct _sgml_environment
00147 { dtd_element *element;
00148 struct _dtd_state *state;
00149 #ifdef XMLNS
00150 struct _xmlns *xmlns;
00151 struct _xmlns *thisns;
00152 #endif
00153 #ifdef XMLBASE
00154 ochar *uri_base;
00155 #endif
00156 dtd_space_mode space_mode;
00157 dtd_shortref *map;
00158 struct _sgml_environment *parent;
00159 int wants_net;
00160 int saved_waiting_for_net;
00161 } sgml_environment;
00162
00163
00164 #define SGML_PARSER_NODEFS 0x01
00165 #define SGML_PARSER_QUALIFY_ATTS 0x02
00166
00167 typedef struct _dtd_parser
00168 { unsigned long magic;
00169 dtd *dtd;
00170 dtdstate state;
00171 dtdstate cdata_state;
00172 dtd_marked *marked;
00173 marktype mark_state;
00174 dtd_element *empty_element;
00175 sgml_environment *environments;
00176 data_mode dmode;
00177 int first;
00178 int waiting_for_net;
00179 icharbuf *buffer;
00180 ocharbuf *cdata;
00181 int blank_cdata;
00182 int cdata_must_be_empty;
00183 const ichar *etag;
00184 int etaglen;
00185 int grouplevel;
00186 int saved;
00187 dtdstate lit_saved_state;
00188 dtd_char_encoding encoding;
00189 dtd_shortref *map;
00190 #ifdef UTF8
00191 int utf8_decode;
00192 int utf8_char;
00193 int utf8_left;
00194 dtdstate utf8_saved_state;
00195 #endif
00196 dtd_srcloc location;
00197 dtd_srcloc startloc;
00198 dtd_srcloc startcdata;
00199 dtd_symbol *enforce_outer_element;
00200 sgml_event_class event_class;
00201
00202 void *closure;
00203 sgml_begin_element_f on_begin_element;
00204 sgml_end_element_f on_end_element;
00205 sgml_data_f on_data;
00206 sgml_entity_f on_entity;
00207 sgml_pi_f on_pi;
00208 sgml_error_f on_error;
00209 sgml_decl_f on_decl;
00210 #ifdef XMLNS
00211 xmlns_f on_xmlns;
00212 #endif
00213 unsigned flags;
00214 } dtd_parser;
00215
00216
00217 #ifdef XMLNS
00218 #include "xmlns.h"
00219 #endif
00220
00221 extern int gripe(dtd_error_id e, ...);
00222
00223 #define SGML_SUB_DOCUMENT 0x1
00224
00225 #endif
00226