Annotation of Amaya/amaya/fetchHTMLname.c, revision 1.13
1.1 cvs 1: /*
2: *
3: * (c) COPYRIGHT MIT and INRIA, 1996.
4: * Please first read the full copyright statement in file COPYRIGHT.
5: *
6: */
7:
8: /*
9: *
10: * fetchHTMLname
11: *
12: * Author: I. Vatton
13: *
14: */
1.13 ! cvs 15:
1.1 cvs 16: /* This module is used by the html2thot parser and the css parser. */
17:
1.2 cvs 18: #define THOT_EXPORT
1.1 cvs 19: #include "amaya.h"
20: #include "fetchHTMLname.h"
21: #include "parser.h"
22:
1.3 cvs 23: #include "fetchHTMLname_f.h"
24: #include "fetchXMLname_f.h"
25:
1.1 cvs 26: /* mapping table of HTML elements */
27: static GIMapping HTMLGIMappingTable[] =
28: {
29: /* This table MUST be in alphabetical order */
1.12 cvs 30: {TEXT("a"), SPACE, HTML_EL_Anchor, NULL},
31: {TEXT("abbr"), SPACE, HTML_EL_ABBR, NULL},
32: {TEXT("acronym"), SPACE, HTML_EL_ACRONYM, NULL},
33: {TEXT("address"), SPACE, HTML_EL_Address, NULL},
34: {TEXT("applet"), SPACE, HTML_EL_Applet, NULL},
35: {TEXT("area"), 'E', HTML_EL_AREA, NULL},
36: {TEXT("b"), SPACE, HTML_EL_Bold_text, NULL},
37: {TEXT("base"), 'E', HTML_EL_BASE, NULL},
38: {TEXT("basefont"), 'E', HTML_EL_BaseFont, NULL},
39: {TEXT("bdo"), SPACE, HTML_EL_BDO, NULL},
40: {TEXT("big"), SPACE, HTML_EL_Big_text, NULL},
41: {TEXT("blockquote"), SPACE, HTML_EL_Block_Quote, NULL},
42: {TEXT("body"), SPACE, HTML_EL_BODY, NULL},
43: {TEXT("br"), 'E', HTML_EL_BR, NULL},
44: {TEXT("button"), SPACE, HTML_EL_BUTTON, NULL},
45: {TEXT("c"), SPACE, HTML_EL_TEXT_UNIT, NULL},
46: {TEXT("caption"), SPACE, HTML_EL_CAPTION, NULL},
47: {TEXT("center"), SPACE, HTML_EL_Center, NULL},
48: {TEXT("cite"), SPACE, HTML_EL_Cite, NULL},
49: {TEXT("code"), SPACE, HTML_EL_Code, NULL},
50: {TEXT("colgroup"), SPACE, HTML_EL_COLGROUP, NULL},
51: {TEXT("col"), SPACE, HTML_EL_COL, NULL},
52: {TEXT("dd"), SPACE, HTML_EL_Definition, NULL},
53: {TEXT("del"), SPACE, HTML_EL_DEL, NULL},
54: {TEXT("dfn"), SPACE, HTML_EL_Def, NULL},
55: {TEXT("dir"), SPACE, HTML_EL_Directory, NULL},
56: {TEXT("div"), SPACE, HTML_EL_Division, NULL},
57: {TEXT("dl"), SPACE, HTML_EL_Definition_List, NULL},
58: {TEXT("dt"), SPACE, HTML_EL_Term, NULL},
59: {TEXT("em"), SPACE, HTML_EL_Emphasis, NULL},
60: {TEXT("fieldset"), SPACE, HTML_EL_FIELDSET, NULL},
61: {TEXT("font"), SPACE, HTML_EL_Font_, NULL},
62: {TEXT("form"), SPACE, HTML_EL_Form, NULL},
63: {TEXT("frame"), 'E', HTML_EL_FRAME, NULL},
64: {TEXT("frameset"), SPACE, HTML_EL_FRAMESET, NULL},
65: {TEXT("h1"), SPACE, HTML_EL_H1, NULL},
66: {TEXT("h2"), SPACE, HTML_EL_H2, NULL},
67: {TEXT("h3"), SPACE, HTML_EL_H3, NULL},
68: {TEXT("h4"), SPACE, HTML_EL_H4, NULL},
69: {TEXT("h5"), SPACE, HTML_EL_H5, NULL},
70: {TEXT("h6"), SPACE, HTML_EL_H6, NULL},
71: {TEXT("head"), SPACE, HTML_EL_HEAD, NULL},
72: {TEXT("hr"), 'E', HTML_EL_Horizontal_Rule, NULL},
73: {TEXT("html"), SPACE, HTML_EL_HTML, NULL},
74: {TEXT("i"), SPACE, HTML_EL_Italic_text, NULL},
75: {TEXT("iframe"), SPACE, HTML_EL_IFRAME, NULL},
76: {TEXT("image"), 'E', HTML_EL_PICTURE_UNIT, NULL},
77: {TEXT("img"), 'E', HTML_EL_PICTURE_UNIT, NULL},
78: {TEXT("input"), 'E', HTML_EL_Input, NULL},
79: {TEXT("ins"), SPACE, HTML_EL_INS, NULL},
80: {TEXT("isindex"), 'E', HTML_EL_ISINDEX, NULL},
81: {TEXT("kbd"), SPACE, HTML_EL_Keyboard, NULL},
82: {TEXT("label"), SPACE, HTML_EL_LABEL, NULL},
83: {TEXT("legend"), SPACE, HTML_EL_LEGEND, NULL},
84: {TEXT("li"), SPACE, HTML_EL_List_Item, NULL},
85: {TEXT("link"), 'E', HTML_EL_LINK, NULL},
86: {TEXT("listing"), SPACE, HTML_EL_Preformatted, NULL}, /*converted to PRE */
87: {TEXT("map"), SPACE, HTML_EL_MAP, NULL},
88: {TEXT("math"), SPACE, HTML_EL_Math, NULL},
89: {TEXT("mathdisp"), SPACE, HTML_EL_Math, NULL}, /* for compatibility with an
1.1 cvs 90: old version of MathML: WD-math-970704 */
1.12 cvs 91: {TEXT("menu"), SPACE, HTML_EL_Menu, NULL},
92: {TEXT("meta"), 'E', HTML_EL_META, NULL},
93: {TEXT("noframes"), SPACE, HTML_EL_NOFRAMES, NULL},
94: {TEXT("noscript"), SPACE, HTML_EL_NOSCRIPT, NULL},
95: {TEXT("object"), SPACE, HTML_EL_Object, NULL},
96: {TEXT("ol"), SPACE, HTML_EL_Numbered_List, NULL},
97: {TEXT("optgroup"), SPACE, HTML_EL_OptGroup, NULL},
98: {TEXT("option"), SPACE, HTML_EL_Option, NULL},
99: {TEXT("p"), SPACE, HTML_EL_Paragraph, NULL},
100: {TEXT("p*"), SPACE, HTML_EL_Pseudo_paragraph, NULL},
101: {TEXT("param"), 'E', HTML_EL_Parameter, NULL},
102: {TEXT("plaintext"), SPACE, HTML_EL_Preformatted, NULL},/* converted to PRE */
103: {TEXT("pre"), SPACE, HTML_EL_Preformatted, NULL},
104: {TEXT("q"), SPACE, HTML_EL_Quotation, NULL},
105: {TEXT("s"), SPACE, HTML_EL_Struck_text, NULL},
106: {TEXT("samp"), SPACE, HTML_EL_Sample, NULL},
107: {TEXT("script"), SPACE, HTML_EL_SCRIPT, NULL},
108: {TEXT("select"), SPACE, HTML_EL_Option_Menu, NULL},
109: {TEXT("small"), SPACE, HTML_EL_Small_text, NULL},
110: {TEXT("span"), SPACE, HTML_EL_Span, NULL},
111: {TEXT("strike"), SPACE, HTML_EL_Struck_text, NULL},
112: {TEXT("strong"), SPACE, HTML_EL_Strong, NULL},
113: {TEXT("style"), SPACE, HTML_EL_STYLE_, NULL},
114: {TEXT("sub"), SPACE, HTML_EL_Subscript, NULL},
115: {TEXT("sup"), SPACE, HTML_EL_Superscript, NULL},
116: {TEXT("table"), SPACE, HTML_EL_Table, NULL},
117: {TEXT("tbody"), SPACE, HTML_EL_tbody, NULL},
118: {TEXT("td"), SPACE, HTML_EL_Data_cell, NULL},
119: {TEXT("textarea"), SPACE, HTML_EL_Text_Area, NULL},
120: {TEXT("tfoot"), SPACE, HTML_EL_tfoot, NULL},
121: {TEXT("th"), SPACE, HTML_EL_Heading_cell, NULL},
122: {TEXT("thead"), SPACE, HTML_EL_thead, NULL},
123: {TEXT("title"), SPACE, HTML_EL_TITLE, NULL},
124: {TEXT("tr"), SPACE, HTML_EL_Table_row, NULL},
125: {TEXT("tt"), SPACE, HTML_EL_Teletype_text, NULL},
126: {TEXT("u"), SPACE, HTML_EL_Underlined_text, NULL},
127: {TEXT("ul"), SPACE, HTML_EL_Unnumbered_List, NULL},
128: {TEXT("var"), SPACE, HTML_EL_Variable, NULL},
129: {TEXT("xmlgraphics"), SPACE, HTML_EL_XMLGraphics, NULL},
130: {TEXT("xmp"), SPACE, HTML_EL_Preformatted, NULL}, /* converted to PRE */
131: {TEXT(""), SPACE, 0, NULL} /* Last entry. Mandatory */
1.1 cvs 132: };
1.4 cvs 133: /* mapping table of HTML attributes */
134:
135: static AttributeMapping HTMLAttributeMappingTable[] =
136: {
137: /* The first entry MUST be unknown_attr */
138: /* The rest of this table MUST be in alphabetical order */
1.12 cvs 139: {TEXT("unknown_attr"), TEXT(""), 'A', HTML_ATTR_Invalid_attribute},
1.4 cvs 140:
1.12 cvs 141: {TEXT("abbr"), TEXT(""), 'A', HTML_ATTR_abbr},
142: {TEXT("accept"), TEXT(""), 'A', HTML_ATTR_accept},
143: {TEXT("accept-charset"), TEXT("form"), 'A', HTML_ATTR_accept_charset},
144: {TEXT("accesskey"), TEXT(""), 'A', HTML_ATTR_accesskey},
145: {TEXT("action"), TEXT(""), 'A', HTML_ATTR_Script_URL},
146: {TEXT("align"), TEXT("applet"), 'A', HTML_ATTR_Alignment},
147: {TEXT("align"), TEXT("caption"), 'A', HTML_ATTR_Position},
148: {TEXT("align"), TEXT("col"), 'A', HTML_ATTR_Cell_align},
149: {TEXT("align"), TEXT("colgroup"), 'A', HTML_ATTR_Cell_align},
150: {TEXT("align"), TEXT("div"), 'A', HTML_ATTR_TextAlign},
151: {TEXT("align"), TEXT("h1"), 'A', HTML_ATTR_TextAlign},
152: {TEXT("align"), TEXT("h2"), 'A', HTML_ATTR_TextAlign},
153: {TEXT("align"), TEXT("h3"), 'A', HTML_ATTR_TextAlign},
154: {TEXT("align"), TEXT("h4"), 'A', HTML_ATTR_TextAlign},
155: {TEXT("align"), TEXT("h5"), 'A', HTML_ATTR_TextAlign},
156: {TEXT("align"), TEXT("h6"), 'A', HTML_ATTR_TextAlign},
157: {TEXT("align"), TEXT("hr"), 'A', HTML_ATTR_Align},
158: {TEXT("align"), TEXT("iframe"), 'A', HTML_ATTR_Alignment},
159: {TEXT("align"), TEXT("image"), 'A', HTML_ATTR_Alignment},
160: {TEXT("align"), TEXT("img"), 'A', HTML_ATTR_Alignment},
161: {TEXT("align"), TEXT("input"), 'A', HTML_ATTR_Alignment},
162: {TEXT("align"), TEXT("legend"), 'A', HTML_ATTR_LAlign},
163: {TEXT("align"), TEXT("object"), 'A', HTML_ATTR_Alignment},
164: {TEXT("align"), TEXT("p"), 'A', HTML_ATTR_TextAlign},
165: {TEXT("align"), TEXT("table"), 'A', HTML_ATTR_Align},
166: {TEXT("align"), TEXT("tbody"), 'A', HTML_ATTR_Cell_align},
167: {TEXT("align"), TEXT("td"), 'A', HTML_ATTR_Cell_align},
168: {TEXT("align"), TEXT("tfoot"), 'A', HTML_ATTR_Cell_align},
169: {TEXT("align"), TEXT("th"), 'A', HTML_ATTR_Cell_align},
170: {TEXT("align"), TEXT("thead"), 'A', HTML_ATTR_Cell_align},
171: {TEXT("align"), TEXT("tr"), 'A', HTML_ATTR_Cell_align},
172: {TEXT("alink"), TEXT("body"), 'A', HTML_ATTR_ActiveLinkColor},
173: {TEXT("alt"), TEXT(""), 'A', HTML_ATTR_ALT},
174: {TEXT("archive"), TEXT(""), 'A', HTML_ATTR_archive},
175: {TEXT("axis"), TEXT(""), 'A', HTML_ATTR_axis},
176:
177: {TEXT("background"), TEXT(""), 'A', HTML_ATTR_background_},
178: {TEXT("bgcolor"), TEXT(""), 'A', HTML_ATTR_BackgroundColor},
179: {TEXT("border"), TEXT("image"), 'A', HTML_ATTR_Img_border},
180: {TEXT("border"), TEXT("img"), 'A', HTML_ATTR_Img_border},
181: {TEXT("border"), TEXT("object"), 'A', HTML_ATTR_Img_border},
182: {TEXT("border"), TEXT("table"), 'A', HTML_ATTR_Border},
183:
184: {TEXT("cellspacing"), TEXT(""), 'A', HTML_ATTR_cellspacing},
185: {TEXT("cellpadding"), TEXT(""), 'A', HTML_ATTR_cellpadding},
186: {TEXT("char"), TEXT(""), 'A', HTML_ATTR_char},
187: {TEXT("charoff"), TEXT(""), 'A', HTML_ATTR_charoff},
188: {TEXT("charset"), TEXT(""), 'A', HTML_ATTR_charset},
189: {TEXT("checked"), TEXT(""), 'A', HTML_ATTR_Checked},
190: {TEXT("cite"), TEXT(""), 'A', HTML_ATTR_cite},
191: {TEXT("class"), TEXT(""), 'A', HTML_ATTR_Class},
192: {TEXT("classid"), TEXT(""), 'A', HTML_ATTR_classid},
193: {TEXT("clear"), TEXT("br"), 'A', HTML_ATTR_Clear},
194: {TEXT("code"), TEXT(""), 'A', HTML_ATTR_code},
195: {TEXT("codebase"), TEXT(""), 'A', HTML_ATTR_codebase},
196: {TEXT("codetype"), TEXT(""), 'A', HTML_ATTR_codetype},
197: {TEXT("color"), TEXT("basefont"), 'A', HTML_ATTR_BaseFontColor},
198: {TEXT("color"), TEXT(""), 'A', HTML_ATTR_color},
199: {TEXT("cols"), TEXT("frameset"), 'A', HTML_ATTR_ColWidth},
200: {TEXT("cols"), TEXT("textarea"), 'A', HTML_ATTR_Columns},
201: {TEXT("colspan"), TEXT(""), 'A', HTML_ATTR_colspan_},
202: {TEXT("compact"), TEXT(""), 'A', HTML_ATTR_COMPACT},
203: {TEXT("content"), TEXT(""), 'A', HTML_ATTR_meta_content},
204: {TEXT("coords"), TEXT(""), 'A', HTML_ATTR_coords},
205:
206: {TEXT("data"), TEXT(""), 'A', HTML_ATTR_data},
207: {TEXT("datapagesize"), TEXT("table"), 'A', HTML_ATTR_datapagesize},
208: {TEXT("datetime"), TEXT(""), 'A', HTML_ATTR_datetime},
209: {TEXT("declare"), TEXT("object"), 'A', HTML_ATTR_declare},
210: {TEXT("defer"), TEXT("script"), 'A', HTML_ATTR_defer},
211: {TEXT("dir"), TEXT(""), 'A', HTML_ATTR_dir},
212: {TEXT("disabled"), TEXT(""), 'A', HTML_ATTR_disabled},
213:
214: {TEXT("enctype"), TEXT(""), 'A', HTML_ATTR_ENCTYPE},
215: {TEXT("event"), TEXT("script"), 'A', HTML_ATTR_event},
216:
217: {TEXT("face"), TEXT("basefont"), 'A', HTML_ATTR_BaseFontFace},
218: {TEXT("face"), TEXT("font"), 'A', HTML_ATTR_face},
219: {TEXT("for"), TEXT("label"), 'A', HTML_ATTR_Associated_control},
220: {TEXT("for"), TEXT("script"), 'A', HTML_ATTR_for_},
221: {TEXT("frame"), TEXT("table"), 'A', HTML_ATTR_frame},
222: {TEXT("frameborder"), TEXT(""), 'A', HTML_ATTR_frameborder},
223:
224: {TEXT("headers"), TEXT(""), 'A', HTML_ATTR_headers},
225: {TEXT("height"), TEXT(""), 'A', HTML_ATTR_Height_},
226: {TEXT("href"), TEXT(""), 'A', HTML_ATTR_HREF_},
227: {TEXT("hreflang"), TEXT(""), 'A', HTML_ATTR_hreflang},
228: {TEXT("hspace"), TEXT(""), 'A', HTML_ATTR_hspace},
229: {TEXT("http-equiv"), TEXT(""), 'A', HTML_ATTR_http_equiv},
230:
231: {TEXT("id"), TEXT(""), 'A', HTML_ATTR_ID},
232: {TEXT("ismap"), TEXT(""), 'A', HTML_ATTR_ISMAP},
233:
234: {TEXT("label"), TEXT(""), 'A', HTML_ATTR_label},
235: {TEXT("lang"), TEXT(""), 'A', HTML_ATTR_Langue},
236: {TEXT("language"), TEXT("script"), 'A', HTML_ATTR_script_language},
237: {TEXT("link"), TEXT("body"), 'A', HTML_ATTR_LinkColor},
238: {TEXT("longdesc"), TEXT(""), 'A', HTML_ATTR_longdesc},
239:
240: {TEXT("marginheight"), TEXT(""), 'A', HTML_ATTR_marginheight},
241: {TEXT("marginwidth"), TEXT(""), 'A', HTML_ATTR_marginwidth},
242: {TEXT("maxlength"), TEXT(""), 'A', HTML_ATTR_MaxLength},
243: {TEXT("media"), TEXT(""), 'A', HTML_ATTR_media},
244: {TEXT("method"), TEXT(""), 'A', HTML_ATTR_METHOD},
245: {TEXT("mode"), TEXT(""), 'A', HTML_ATTR_mode},
246: {TEXT("multiple"), TEXT(""), 'A', HTML_ATTR_Multiple},
247:
248: {TEXT("N"), TEXT(""), 'C', 0},
249: {TEXT("name"), TEXT("applet"), 'A', HTML_ATTR_applet_name},
250: {TEXT("name"), TEXT("frame"), 'A', HTML_ATTR_FrameName},
251: {TEXT("name"), TEXT("iframe"), 'A', HTML_ATTR_FrameName},
252: {TEXT("name"), TEXT("meta"), 'A', HTML_ATTR_meta_name},
253: {TEXT("name"), TEXT("param"), 'A', HTML_ATTR_Param_name},
254: {TEXT("name"), TEXT(""), 'A', HTML_ATTR_NAME},
255: {TEXT("nohref"), TEXT(""), 'A', HTML_ATTR_nohref},
256: {TEXT("noresize"), TEXT(""), 'A', HTML_ATTR_no_resize},
257: {TEXT("noshade"), TEXT(""), 'A', HTML_ATTR_NoShade},
258: {TEXT("nowrap"), TEXT(""), 'A', HTML_ATTR_No_wrap},
259:
260: {TEXT("object"), TEXT("applet"), 'A', HTML_ATTR_object},
261: {TEXT("onblur"), TEXT(""), 'A', HTML_ATTR_onblur},
262: {TEXT("onchange"), TEXT(""), 'A', HTML_ATTR_onchange},
263: {TEXT("onclick"), TEXT(""), 'A', HTML_ATTR_onclick},
264: {TEXT("ondblclick"), TEXT(""), 'A', HTML_ATTR_ondblclick},
265: {TEXT("onfocus"), TEXT(""), 'A', HTML_ATTR_onfocus},
266: {TEXT("onkeydown"), TEXT(""), 'A', HTML_ATTR_onkeydown},
267: {TEXT("onkeypress"), TEXT(""), 'A', HTML_ATTR_onkeypress},
268: {TEXT("onkeyup"), TEXT(""), 'A', HTML_ATTR_onkeyup},
269: {TEXT("onload"), TEXT(""), 'A', HTML_ATTR_onload},
270: {TEXT("onmousedown"), TEXT(""), 'A', HTML_ATTR_onmousedown},
271: {TEXT("onmousemove"), TEXT(""), 'A', HTML_ATTR_onmousemove},
272: {TEXT("onmouseout"), TEXT(""), 'A', HTML_ATTR_onmouseout},
273: {TEXT("onmouseover"), TEXT(""), 'A', HTML_ATTR_onmouseover},
274: {TEXT("onmouseup"), TEXT(""), 'A', HTML_ATTR_onmouseup},
275: {TEXT("onreset"), TEXT("form"), 'A', HTML_ATTR_onreset},
276: {TEXT("onselect"), TEXT(""), 'A', HTML_ATTR_onselect},
277: {TEXT("onsubmit"), TEXT("form"), 'A', HTML_ATTR_onsubmit},
278: {TEXT("onunload"), TEXT(""), 'A', HTML_ATTR_onunload},
279:
280: {TEXT("profile"), TEXT("head"), 'A', HTML_ATTR_profile},
281: {TEXT("prompt"), TEXT(""), 'A', HTML_ATTR_Prompt},
282:
283: {TEXT("readonly"), TEXT(""), 'A', HTML_ATTR_readonly},
284: {TEXT("rel"), TEXT(""), 'A', HTML_ATTR_REL},
285: {TEXT("rev"), TEXT(""), 'A', HTML_ATTR_REV},
286: {TEXT("rows"), TEXT("frameset"), 'A', HTML_ATTR_RowHeight},
287: {TEXT("rows"), TEXT("textarea"), 'A', HTML_ATTR_Rows},
288: {TEXT("rowspan"), TEXT(""), 'A', HTML_ATTR_rowspan_},
289: {TEXT("rules"), TEXT("table"), 'A', HTML_ATTR_rules_},
290:
291: {TEXT("scheme"), TEXT("meta"), 'A', HTML_ATTR_scheme},
292: {TEXT("scope"), TEXT(""), 'A', HTML_ATTR_scope},
293: {TEXT("scrolling"), TEXT(""), 'A', HTML_ATTR_scrolling},
294: {TEXT("selected"), TEXT(""), 'A', HTML_ATTR_Selected},
295: {TEXT("shape"), TEXT(""), 'A', HTML_ATTR_shape},
296: {TEXT("size"), TEXT("basefont"), 'A', HTML_ATTR_BaseFontSize},
297: {TEXT("size"), TEXT("font"), 'A', HTML_ATTR_Font_size},
298: {TEXT("size"), TEXT("hr"), 'A', HTML_ATTR_Size_},
299: {TEXT("size"), TEXT("input"), 'A', HTML_ATTR_Area_Size},
300: {TEXT("size"), TEXT("select"), 'A', HTML_ATTR_MenuSize},
301: {TEXT("span"), TEXT("col"), 'A', HTML_ATTR_span_},
302: {TEXT("span"), TEXT("colgroup"), 'A', HTML_ATTR_span_},
303: {TEXT("src"), TEXT("frame"), 'A', HTML_ATTR_FrameSrc},
304: {TEXT("src"), TEXT("iframe"), 'A', HTML_ATTR_FrameSrc},
305: {TEXT("src"), TEXT("script"), 'A', HTML_ATTR_script_src},
306: {TEXT("src"), TEXT(""), 'A', HTML_ATTR_SRC},
307: {TEXT("standby"), TEXT(""), 'A', HTML_ATTR_standby},
308: {TEXT("start"), TEXT(""), 'A', HTML_ATTR_Start},
309: {TEXT("style"), TEXT(""), 'A', HTML_ATTR_Style_},
310: {TEXT("summary"), TEXT("table"), 'A', HTML_ATTR_summary},
311:
312: {TEXT("tabindex"), TEXT(""), 'A', HTML_ATTR_tabindex},
313: {TEXT("target"), TEXT(""), 'A', HTML_ATTR_target_},
314: {TEXT("text"), TEXT(""), 'A', HTML_ATTR_TextColor},
315: {TEXT("title"), TEXT(""), 'A', HTML_ATTR_Title},
316: {TEXT("type"), TEXT("button"), 'A', HTML_ATTR_Button_type},
317: {TEXT("type"), TEXT("li"), 'A', HTML_ATTR_ItemStyle},
318: {TEXT("type"), TEXT("link"), 'A', HTML_ATTR_Link_type},
319: {TEXT("type"), TEXT("a"), 'A', HTML_ATTR_Link_type},
320: {TEXT("type"), TEXT("object"), 'A', HTML_ATTR_Object_type},
321: {TEXT("type"), TEXT("ol"), 'A', HTML_ATTR_NumberStyle},
322: {TEXT("type"), TEXT("param"), 'A', HTML_ATTR_Param_type},
323: {TEXT("type"), TEXT("script"), 'A', HTML_ATTR_content_type},
324: {TEXT("type"), TEXT("style"), 'A', HTML_ATTR_Notation},
325: {TEXT("type"), TEXT("ul"), 'A', HTML_ATTR_BulletStyle},
326: {TEXT("type"), TEXT(""), SPACE, DummyAttribute},
327:
328: {TEXT("usemap"), TEXT(""), 'A', HTML_ATTR_USEMAP},
329:
330: {TEXT("valign"), TEXT("tbody"), 'A', HTML_ATTR_Row_valign},
331: {TEXT("valign"), TEXT("td"), 'A', HTML_ATTR_Cell_valign},
332: {TEXT("valign"), TEXT("tfoot"), 'A', HTML_ATTR_Row_valign},
333: {TEXT("valign"), TEXT("th"), 'A', HTML_ATTR_Cell_valign},
334: {TEXT("valign"), TEXT("thead"), 'A', HTML_ATTR_Row_valign},
335: {TEXT("valign"), TEXT("tr"), 'A', HTML_ATTR_Row_valign},
336: {TEXT("value"), TEXT("li"), 'A', HTML_ATTR_ItemValue},
337: {TEXT("value"), TEXT("param"), 'A', HTML_ATTR_Param_value},
338: {TEXT("value"), TEXT(""), 'A', HTML_ATTR_Value_},
339: {TEXT("valuetype"), TEXT("param"), 'A', HTML_ATTR_valuetype},
340: {TEXT("version"), TEXT(""), 'A', 0},
341: {TEXT("vlink"), TEXT("body"), 'A', HTML_ATTR_VisitedLinkColor},
342: {TEXT("vspace"), TEXT(""), 'A', HTML_ATTR_vspace},
343:
344: {TEXT("width"), TEXT("applet"), 'A', HTML_ATTR_Width__},
345: {TEXT("width"), TEXT("col"), 'A', HTML_ATTR_Width__},
346: {TEXT("width"), TEXT("colgroup"), 'A', HTML_ATTR_Width__},
347: {TEXT("width"), TEXT("hr"), 'A', HTML_ATTR_Width__},
348: {TEXT("width"), TEXT("iframe"), 'A', HTML_ATTR_Width__},
349: {TEXT("width"), TEXT("image"), 'A', HTML_ATTR_Width__},
350: {TEXT("width"), TEXT("img"), 'A', HTML_ATTR_Width__},
351: {TEXT("width"), TEXT("object"), 'A', HTML_ATTR_Width__},
352: {TEXT("width"), TEXT("pre"), 'A', HTML_ATTR_Width__},
353: {TEXT("width"), TEXT("table"), 'A', HTML_ATTR_Width__},
354: {TEXT("width"), TEXT("td"), 'A', HTML_ATTR_Width__},
355: {TEXT("width"), TEXT("th"), 'A', HTML_ATTR_Width__},
1.4 cvs 356: #ifdef GRAPHML
1.12 cvs 357: {TEXT("width"), TEXT("xmlgraphics"), 'A', HTML_ATTR_Width__},
1.4 cvs 358: #endif
359:
1.12 cvs 360: {TEXT("zzghost"), TEXT(""), 'A', HTML_ATTR_Ghost_restruct},
361: {TEXT(""), TEXT(""), EOS, 0} /* Last entry. Mandatory */
1.4 cvs 362: };
1.1 cvs 363:
364: /* define a pointer to let other parser functions access the local table */
365: GIMapping *pHTMLGIMapping = HTMLGIMappingTable;
1.4 cvs 366: AttributeMapping *pHTMLAttributeMapping = HTMLAttributeMappingTable;
367:
1.1 cvs 368:
369: /*----------------------------------------------------------------------
370: MapGI
371: search in the mapping tables the entry for the element of
372: name GI and returns the rank of that entry.
373: When returning, schema contains the Thot SSchema that defines that element,
374: Returns -1 and schema = NULL if not found.
375: ----------------------------------------------------------------------*/
376: #ifdef __STDC__
1.12 cvs 377: int MapGI (CHAR_T* gi, SSchema *schema, Document doc)
1.1 cvs 378: #else
379: int MapGI (gi, schema, doc)
1.12 cvs 380: CHAR_T* gi;
1.9 cvs 381: SSchema* schema;
1.1 cvs 382: Document doc;
383: #endif
384: {
1.9 cvs 385: ElementType elType;
1.11 cvs 386: CHAR_T* ptr;
1.12 cvs 387: CHAR_T c;
1.9 cvs 388: int i;
389: int entry;
1.1 cvs 390: ThotBool isHTML;
391:
392: /* TODO: use NameSpaces to search in the right table */
393: entry = -1;
394: if (*schema == NULL)
395: {
396: isHTML = FALSE;
397: ptr = NULL;
398: }
399: else
400: {
401: ptr = TtaGetSSchemaName (*schema);
1.11 cvs 402: isHTML = !ustrcmp (ptr, TEXT("HTML"));
1.1 cvs 403: }
404:
405: i = 0;
406: if (*schema == NULL || isHTML)
407: {
408: /*
409: First convert the first char into lower case to locate
410: registered tags in the HTML mapping table.
411: Entries are registered in upper case and in alphabetic order.
412: */
413:
414: /* TODO: define a function which works on unicode */
1.12 cvs 415: c = utolower (gi[0]);
1.1 cvs 416: /* look for the first concerned entry in the table */
417: while (HTMLGIMappingTable[i].htmlGI[0] < c
418: && HTMLGIMappingTable[i].htmlGI[0] != EOS)
419: i++;
420:
421: /* look at all entries starting with the right character */
422: do
423: {
1.12 cvs 424: if (ustrcasecmp (HTMLGIMappingTable[i].htmlGI, gi))
1.1 cvs 425: i++;
426: else
427: entry = i;
428: }
429: while (entry < 0 && HTMLGIMappingTable[i].htmlGI[0] == c);
430: }
431:
432: if (entry < 0)
433: if (*schema != NULL && isHTML)
434: *schema = NULL;
435: else
436: /* not found. Look at the XML mapping tables */
437: {
438: elType.ElTypeNum = 0;
439: elType.ElSSchema = *schema;
440:
441: #ifndef STANDALONE
1.11 cvs 442: if (!ptr || !ustrcmp (ptr, TEXT("MathML")))
1.1 cvs 443: MapXMLElementType (MATH_TYPE, gi, &elType, &ptr, &c, doc);
1.11 cvs 444: if (elType.ElTypeNum == 0 && (!ptr || !ustrcmp (ptr, TEXT("GraphML"))))
1.1 cvs 445: MapXMLElementType (GRAPH_TYPE, gi, &elType, &ptr, &c, doc);
446: #endif
447: if (elType.ElTypeNum == 0)
448: {
449: entry = -1;
450: elType.ElSSchema = NULL;
451: *schema = NULL;
452: }
453: else
454: {
455: entry = elType.ElTypeNum;
456: *schema = elType.ElSSchema;
457: }
458: }
459: return entry;
460: }
461:
462: /*----------------------------------------------------------------------
463: GIType search in mapping tables the Element type associated with
464: a given GI Name. If not found returns zero.
465: ----------------------------------------------------------------------*/
466: #ifdef __STDC__
1.12 cvs 467: void GIType (CHAR_T* gi, ElementType *elType, Document doc)
1.1 cvs 468: #else
469: void GIType (gi, elType, doc)
1.12 cvs 470: CHAR_T* gi;
1.9 cvs 471: ElementType* elType;
472: Document doc;
1.1 cvs 473: #endif
474: {
1.12 cvs 475: CHAR_T c;
476: CHAR_T* ptr;
1.1 cvs 477: int i;
478:
479: /* TODO: use NameSpaces to search in the right table */
480: elType->ElSSchema = NULL;
481: elType->ElTypeNum = 0;
482:
483: /*
484: First convert the first char into lower case to locate
485: registered tags in the HTML mapping table.
486: Entries are registered in upper case and in alphabetic order.
487: */
488:
489: /* TODO: define a function which works on unicode */
1.12 cvs 490: c = utolower (gi[0]);
1.1 cvs 491:
492: i = 0;
493: /* look for the first concerned entry in the table */
1.4 cvs 494: while (HTMLGIMappingTable[i].htmlGI[0] < c &&
495: HTMLGIMappingTable[i].htmlGI[0] != EOS)
1.1 cvs 496: i++;
497: /* look at all entries starting with the right character */
498: do
499: {
1.12 cvs 500: if (!ustrcasecmp (HTMLGIMappingTable[i].htmlGI, gi))
1.4 cvs 501: {
502: if (doc != 0)
1.11 cvs 503: elType->ElSSchema = TtaGetSSchema (TEXT("HTML"), doc);
1.4 cvs 504: elType->ElTypeNum = HTMLGIMappingTable[i].ThotType;
505: return;
506: }
1.1 cvs 507: i++;
508: }
509: while (HTMLGIMappingTable[i].htmlGI[0] == c);
510:
511: #ifndef STANDALONE
512: /* if not found, look at the XML mapping tables */
513: MapXMLElementType (MATH_TYPE, gi, elType, &ptr, &c, doc);
514: if (elType->ElTypeNum == 0)
1.4 cvs 515: MapXMLElementType (GRAPH_TYPE, gi, elType, &ptr, &c, doc);
1.1 cvs 516: #endif
1.4 cvs 517: }
518:
519: /*----------------------------------------------------------------------
520: MapAttr search in all AttributeMappingTables the entry for the
521: attribute of name Attr and returns a pointer to that entry,
522: as well as the corresponding Thot SSchema
523: ----------------------------------------------------------------------*/
524: #ifdef __STDC__
1.12 cvs 525: AttributeMapping *MapAttr (CHAR_T* Attr, SSchema *schema, int elemEntry, Document doc)
1.4 cvs 526: #else
527: AttributeMapping *MapAttr (Attr, schema, elemEntry, doc)
1.12 cvs 528: CHAR_T* Attr;
1.9 cvs 529: SSchema* schema;
1.4 cvs 530: int elemEntry;
531: Document doc;
532: #endif
533: {
534: int i;
535: int entry;
536:
537: entry = -1;
538: *schema = NULL;
539: i = 0;
540: do
1.12 cvs 541: if (!ustrcasecmp (HTMLAttributeMappingTable[i].XMLattribute, Attr))
1.4 cvs 542: if (HTMLAttributeMappingTable[i].XMLelement[0] == EOS)
543: {
544: entry = i;
545: *schema = TtaGetDocumentSSchema (doc);
546: }
547: else if (elemEntry >= 0 &&
1.12 cvs 548: !ustrcasecmp (HTMLAttributeMappingTable[i].XMLelement, pHTMLGIMapping[elemEntry].htmlGI))
1.4 cvs 549: {
550: entry = i;
551: *schema = TtaGetDocumentSSchema (doc);
552: }
553: else
554: i++;
555: else
556: i++;
557: while (entry < 0 && HTMLAttributeMappingTable[i].AttrOrContent != EOS);
558:
559: if (entry >= 0)
560: return (&HTMLAttributeMappingTable[entry]);
561: else
562: return (NULL);
563: }
564:
565: /*----------------------------------------------------------------------
566: MapHTMLAttribute search in the HTML Attribute Mapping Tables the entry
567: for the attribute of name Attr and returns the corresponding Thot
568: attribute type.
569: ----------------------------------------------------------------------*/
570: #ifdef __STDC__
1.12 cvs 571: void MapHTMLAttribute (CHAR_T* Attr, AttributeType *attrType, CHAR_T* elementName, Document doc)
1.4 cvs 572: #else
573: void MapHTMLAttribute (Attr, attrType, elementName, doc)
1.12 cvs 574: CHAR_T* Attr;
1.9 cvs 575: AttributeType* attrType;
1.12 cvs 576: CHAR_T* elementName;
1.4 cvs 577: Document doc;
578: #endif
579: {
580: SSchema schema = NULL;
581: AttributeMapping* tableEntry;
582: int elemEntry;
583:
584: elemEntry = MapGI (elementName, &schema, doc);
585: if (elemEntry >= 0)
586: {
587: tableEntry = MapAttr (Attr, &schema, elemEntry, doc);
588: if (tableEntry != NULL)
589: {
590: attrType->AttrTypeNum = tableEntry->ThotAttribute;
591: if (schema == NULL && doc != 0)
1.11 cvs 592: attrType->AttrSSchema = TtaGetSSchema (TEXT("HTML"), doc);
1.4 cvs 593: else
594: attrType->AttrSSchema = schema;
595: }
596: else
597: {
598: attrType->AttrTypeNum = 0;
599: attrType->AttrSSchema = NULL;
600: }
601: }
602: else
603: {
604: attrType->AttrTypeNum = 0;
605: attrType->AttrSSchema = NULL;
606: }
1.1 cvs 607: }
Webmaster