Initial revision
[TestXSLT.git] / libxml2 / include / libxml / HTMLparser.h
1 /*
2  * HTMLparser.h : interface for an HTML 4.0 non-verifying parser
3  *
4  * See Copyright for the status of this software.
5  *
6  * daniel@veillard.com
7  */
8
9 #ifndef __HTML_PARSER_H__
10 #define __HTML_PARSER_H__
11 #include <libxml/parser.h>
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17 /*
18  * Most of the back-end structures from XML and HTML are shared.
19  */
20 typedef xmlParserCtxt htmlParserCtxt;
21 typedef xmlParserCtxtPtr htmlParserCtxtPtr;
22 typedef xmlParserNodeInfo htmlParserNodeInfo;
23 typedef xmlSAXHandler htmlSAXHandler;
24 typedef xmlSAXHandlerPtr htmlSAXHandlerPtr;
25 typedef xmlParserInput htmlParserInput;
26 typedef xmlParserInputPtr htmlParserInputPtr;
27 typedef xmlDocPtr htmlDocPtr;
28 typedef xmlNodePtr htmlNodePtr;
29
30 /*
31  * Internal description of an HTML element, representing HTML 4.01
32  * and XHTML 1.0 (which share the same structure).
33  */
34 typedef struct _htmlElemDesc htmlElemDesc;
35 typedef htmlElemDesc *htmlElemDescPtr;
36 struct _htmlElemDesc {
37     const char *name;   /* The tag name */
38     char startTag;      /* Whether the start tag can be implied */
39     char endTag;        /* Whether the end tag can be implied */
40     char saveEndTag;    /* Whether the end tag should be saved */
41     char empty;         /* Is this an empty element ? */
42     char depr;          /* Is this a deprecated element ? */
43     char dtd;           /* 1: only in Loose DTD, 2: only Frameset one */
44     char isinline;      /* is this a block 0 or inline 1 element */
45     const char *desc;   /* the description */
46
47 /* NRK Jan.2003
48  * New fields encapsulating HTML structure
49  *
50  * Bugs:
51  *      This is a very limited representation.  It fails to tell us when
52  *      an element *requires* subelements (we only have whether they're
53  *      allowed or not), and it doesn't tell us where CDATA and PCDATA
54  *      are allowed.  Some element relationships are not fully represented:
55  *      these are flagged with the word MODIFIER
56  */
57     const char** subelts;               /* allowed sub-elements of this element */
58     const char* defaultsubelt;  /* subelement for suggested auto-repair
59                                            if necessary or NULL */
60     const char** attrs_opt;             /* Optional Attributes */
61     const char** attrs_depr;            /* Additional deprecated attributes */
62     const char** attrs_req;             /* Required attributes */
63 };
64
65 /*
66  * Internal description of an HTML entity.
67  */
68 typedef struct _htmlEntityDesc htmlEntityDesc;
69 typedef htmlEntityDesc *htmlEntityDescPtr;
70 struct _htmlEntityDesc {
71     unsigned int value; /* the UNICODE value for the character */
72     const char *name;   /* The entity name */
73     const char *desc;   /* the description */
74 };
75
76 /*
77  * There is only few public functions.
78  */
79 const htmlElemDesc *    htmlTagLookup   (const xmlChar *tag);
80 const htmlEntityDesc *  htmlEntityLookup(const xmlChar *name);
81 const htmlEntityDesc *  htmlEntityValueLookup(unsigned int value);
82
83 int                     htmlIsAutoClosed(htmlDocPtr doc,
84                                          htmlNodePtr elem);
85 int                     htmlAutoCloseTag(htmlDocPtr doc,
86                                          const xmlChar *name,
87                                          htmlNodePtr elem);
88 const htmlEntityDesc *  htmlParseEntityRef(htmlParserCtxtPtr ctxt,
89                                          xmlChar **str);
90 int                     htmlParseCharRef(htmlParserCtxtPtr ctxt);
91 void                    htmlParseElement(htmlParserCtxtPtr ctxt);
92
93 int                     htmlParseDocument(htmlParserCtxtPtr ctxt);
94 htmlDocPtr              htmlSAXParseDoc (xmlChar *cur,
95                                          const char *encoding,
96                                          htmlSAXHandlerPtr sax,
97                                          void *userData);
98 htmlDocPtr              htmlParseDoc    (xmlChar *cur,
99                                          const char *encoding);
100 htmlDocPtr              htmlSAXParseFile(const char *filename,
101                                          const char *encoding,
102                                          htmlSAXHandlerPtr sax,
103                                          void *userData);
104 htmlDocPtr              htmlParseFile   (const char *filename,
105                                          const char *encoding);
106 int                     UTF8ToHtml      (unsigned char *out,
107                                          int *outlen,
108                                          const unsigned char *in,
109                                          int *inlen);
110 int                     htmlEncodeEntities(unsigned char *out,
111                                          int *outlen,
112                                          const unsigned char *in,
113                                          int *inlen, int quoteChar);
114 int                     htmlIsScriptAttribute(const xmlChar *name);
115 int                     htmlHandleOmittedElem(int val);
116
117 /**
118  * Interfaces for the Push mode.
119  */
120 void                    htmlFreeParserCtxt      (htmlParserCtxtPtr ctxt);
121 htmlParserCtxtPtr       htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax,
122                                                  void *user_data,
123                                                  const char *chunk,
124                                                  int size,
125                                                  const char *filename,
126                                                  xmlCharEncoding enc);
127 int                     htmlParseChunk          (htmlParserCtxtPtr ctxt,
128                                                  const char *chunk,
129                                                  int size,
130                                                  int terminate);
131
132 /* NRK/Jan2003: further knowledge of HTML structure
133  */
134 typedef enum {
135   HTML_NA = 0 ,         /* something we don't check at all */
136   HTML_INVALID = 0x1 ,
137   HTML_DEPRECATED = 0x2 ,
138   HTML_VALID = 0x4 ,
139   HTML_REQUIRED = 0xc /* VALID bit set so ( & HTML_VALID ) is TRUE */
140 } htmlStatus ;
141
142 /* Using htmlElemDesc rather than name here, to emphasise the fact
143    that otherwise there's a lookup overhead
144 */
145 htmlStatus htmlAttrAllowed(const htmlElemDesc*, const xmlChar*, int) ;
146 int htmlElementAllowedHere(const htmlElemDesc*, const xmlChar*) ;
147 htmlStatus htmlElementStatusHere(const htmlElemDesc*, const htmlElemDesc*) ;
148 htmlStatus htmlNodeStatus(const htmlNodePtr, int) ;
149 #define htmlDefaultSubelement(elt) elt->defaultsubelt
150 #define htmlElementAllowedHereDesc(parent,elt) \
151         htmlElementAllowedHere((parent), (elt)->name)
152 #define htmlRequiredAttrs(elt) (elt)->attrs_req
153
154
155 #ifdef __cplusplus
156 }
157 #endif
158
159 #endif /* __HTML_PARSER_H__ */