Annotation of Amaya/amaya/fetchHTMLname.c, revision 1.9
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: */
15:
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.9 ! cvs 30: {"a", SPACE, HTML_EL_Anchor, NULL},
! 31: {"abbr", SPACE, HTML_EL_ABBR, NULL},
! 32: {"acronym", SPACE, HTML_EL_ACRONYM, NULL},
! 33: {"address", SPACE, HTML_EL_Address, NULL},
! 34: {"applet", SPACE, HTML_EL_Applet, NULL},
! 35: {"area", 'E', HTML_EL_AREA, NULL},
! 36: {"b", SPACE, HTML_EL_Bold_text, NULL},
! 37: {"base", 'E', HTML_EL_BASE, NULL},
! 38: {"basefont", 'E', HTML_EL_BaseFont, NULL},
! 39: {"bdo", SPACE, HTML_EL_BDO, NULL},
! 40: {"big", SPACE, HTML_EL_Big_text, NULL},
! 41: {"blockquote", SPACE, HTML_EL_Block_Quote, NULL},
! 42: {"body", SPACE, HTML_EL_BODY, NULL},
! 43: {"br", 'E', HTML_EL_BR, NULL},
! 44: {"button", SPACE, HTML_EL_BUTTON, NULL},
! 45: {"c", SPACE, HTML_EL_TEXT_UNIT, NULL},
! 46: {"caption", SPACE, HTML_EL_CAPTION, NULL},
! 47: {"center", SPACE, HTML_EL_Center, NULL},
! 48: {"cite", SPACE, HTML_EL_Cite, NULL},
! 49: {"code", SPACE, HTML_EL_Code, NULL},
! 50: {"colgroup", SPACE, HTML_EL_COLGROUP, NULL},
! 51: {"col", SPACE, HTML_EL_COL, NULL},
! 52: {"dd", SPACE, HTML_EL_Definition, NULL},
! 53: {"del", SPACE, HTML_EL_DEL, NULL},
! 54: {"dfn", SPACE, HTML_EL_Def, NULL},
! 55: {"dir", SPACE, HTML_EL_Directory, NULL},
! 56: {"div", SPACE, HTML_EL_Division, NULL},
! 57: {"dl", SPACE, HTML_EL_Definition_List, NULL},
! 58: {"dt", SPACE, HTML_EL_Term, NULL},
! 59: {"em", SPACE, HTML_EL_Emphasis, NULL},
! 60: {"fieldset", SPACE, HTML_EL_FIELDSET, NULL},
! 61: {"font", SPACE, HTML_EL_Font_, NULL},
! 62: {"form", SPACE, HTML_EL_Form, NULL},
! 63: {"frame", 'E', HTML_EL_FRAME, NULL},
! 64: {"frameset", SPACE, HTML_EL_FRAMESET, NULL},
! 65: {"h1", SPACE, HTML_EL_H1, NULL},
! 66: {"h2", SPACE, HTML_EL_H2, NULL},
! 67: {"h3", SPACE, HTML_EL_H3, NULL},
! 68: {"h4", SPACE, HTML_EL_H4, NULL},
! 69: {"h5", SPACE, HTML_EL_H5, NULL},
! 70: {"h6", SPACE, HTML_EL_H6, NULL},
! 71: {"head", SPACE, HTML_EL_HEAD, NULL},
! 72: {"hr", 'E', HTML_EL_Horizontal_Rule, NULL},
! 73: {"html", SPACE, HTML_EL_HTML, NULL},
! 74: {"i", SPACE, HTML_EL_Italic_text, NULL},
! 75: {"iframe", SPACE, HTML_EL_IFRAME, NULL},
! 76: {"image", 'E', HTML_EL_PICTURE_UNIT, NULL},
! 77: {"img", 'E', HTML_EL_PICTURE_UNIT, NULL},
! 78: {"input", 'E', HTML_EL_Input, NULL},
! 79: {"ins", SPACE, HTML_EL_INS, NULL},
! 80: {"isindex", 'E', HTML_EL_ISINDEX, NULL},
! 81: {"kbd", SPACE, HTML_EL_Keyboard, NULL},
! 82: {"label", SPACE, HTML_EL_LABEL, NULL},
! 83: {"legend", SPACE, HTML_EL_LEGEND, NULL},
! 84: {"li", SPACE, HTML_EL_List_Item, NULL},
! 85: {"link", 'E', HTML_EL_LINK, NULL},
! 86: {"listing", SPACE, HTML_EL_Preformatted, NULL}, /*converted to PRE */
! 87: {"map", SPACE, HTML_EL_MAP, NULL},
! 88: {"math", SPACE, HTML_EL_Math, NULL},
! 89: {"mathdisp", SPACE, HTML_EL_Math, NULL}, /* for compatibility with an
1.1 cvs 90: old version of MathML: WD-math-970704 */
1.9 ! cvs 91: {"menu", SPACE, HTML_EL_Menu, NULL},
! 92: {"meta", 'E', HTML_EL_META, NULL},
! 93: {"noframes", SPACE, HTML_EL_NOFRAMES, NULL},
! 94: {"noscript", SPACE, HTML_EL_NOSCRIPT, NULL},
! 95: {"object", SPACE, HTML_EL_Object, NULL},
! 96: {"ol", SPACE, HTML_EL_Numbered_List, NULL},
! 97: {"optgroup", SPACE, HTML_EL_OptGroup, NULL},
! 98: {"option", SPACE, HTML_EL_Option, NULL},
! 99: {"p", SPACE, HTML_EL_Paragraph, NULL},
! 100: {"p*", SPACE, HTML_EL_Pseudo_paragraph, NULL},
! 101: {"param", 'E', HTML_EL_Parameter, NULL},
! 102: {"plaintext", SPACE, HTML_EL_Preformatted, NULL},/* converted to PRE */
! 103: {"pre", SPACE, HTML_EL_Preformatted, NULL},
! 104: {"q", SPACE, HTML_EL_Quotation, NULL},
! 105: {"s", SPACE, HTML_EL_Struck_text, NULL},
! 106: {"samp", SPACE, HTML_EL_Sample, NULL},
! 107: {"script", SPACE, HTML_EL_SCRIPT, NULL},
! 108: {"select", SPACE, HTML_EL_Option_Menu, NULL},
! 109: {"small", SPACE, HTML_EL_Small_text, NULL},
! 110: {"span", SPACE, HTML_EL_Span, NULL},
! 111: {"strike", SPACE, HTML_EL_Struck_text, NULL},
! 112: {"strong", SPACE, HTML_EL_Strong, NULL},
! 113: {"style", SPACE, HTML_EL_STYLE_, NULL},
! 114: {"sub", SPACE, HTML_EL_Subscript, NULL},
! 115: {"sup", SPACE, HTML_EL_Superscript, NULL},
! 116: {"table", SPACE, HTML_EL_Table, NULL},
! 117: {"tbody", SPACE, HTML_EL_tbody, NULL},
! 118: {"td", SPACE, HTML_EL_Data_cell, NULL},
! 119: {"textarea", SPACE, HTML_EL_Text_Area, NULL},
! 120: {"tfoot", SPACE, HTML_EL_tfoot, NULL},
! 121: {"th", SPACE, HTML_EL_Heading_cell, NULL},
! 122: {"thead", SPACE, HTML_EL_thead, NULL},
! 123: {"title", SPACE, HTML_EL_TITLE, NULL},
! 124: {"tr", SPACE, HTML_EL_Table_row, NULL},
! 125: {"tt", SPACE, HTML_EL_Teletype_text, NULL},
! 126: {"u", SPACE, HTML_EL_Underlined_text, NULL},
! 127: {"ul", SPACE, HTML_EL_Unnumbered_List, NULL},
! 128: {"var", SPACE, HTML_EL_Variable, NULL},
! 129: {"xmlgraphics", SPACE, HTML_EL_XMLGraphics, NULL},
! 130: {"xmp", SPACE, HTML_EL_Preformatted, NULL}, /* converted to PRE */
! 131: {"", 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.9 ! cvs 139: {"unknown_attr", "", 'A', HTML_ATTR_Invalid_attribute},
1.4 cvs 140:
1.9 ! cvs 141: {"abbr", "", 'A', HTML_ATTR_abbr},
! 142: {"accept", "", 'A', HTML_ATTR_accept},
! 143: {"accept-charset", "form", 'A', HTML_ATTR_accept_charset},
! 144: {"accesskey", "", 'A', HTML_ATTR_accesskey},
! 145: {"action", "", 'A', HTML_ATTR_Script_URL},
! 146: {"align", "applet", 'A', HTML_ATTR_Alignment},
! 147: {"align", "caption", 'A', HTML_ATTR_Position},
! 148: {"align", "col", 'A', HTML_ATTR_Cell_align},
! 149: {"align", "colgroup", 'A', HTML_ATTR_Cell_align},
! 150: {"align", "div", 'A', HTML_ATTR_TextAlign},
! 151: {"align", "h1", 'A', HTML_ATTR_TextAlign},
! 152: {"align", "h2", 'A', HTML_ATTR_TextAlign},
! 153: {"align", "h3", 'A', HTML_ATTR_TextAlign},
! 154: {"align", "h4", 'A', HTML_ATTR_TextAlign},
! 155: {"align", "h5", 'A', HTML_ATTR_TextAlign},
! 156: {"align", "h6", 'A', HTML_ATTR_TextAlign},
! 157: {"align", "hr", 'A', HTML_ATTR_Align},
! 158: {"align", "iframe", 'A', HTML_ATTR_Alignment},
! 159: {"align", "image", 'A', HTML_ATTR_Alignment},
! 160: {"align", "img", 'A', HTML_ATTR_Alignment},
! 161: {"align", "input", 'A', HTML_ATTR_Alignment},
! 162: {"align", "legend", 'A', HTML_ATTR_LAlign},
! 163: {"align", "object", 'A', HTML_ATTR_Alignment},
! 164: {"align", "p", 'A', HTML_ATTR_TextAlign},
! 165: {"align", "table", 'A', HTML_ATTR_Align},
! 166: {"align", "tbody", 'A', HTML_ATTR_Cell_align},
! 167: {"align", "td", 'A', HTML_ATTR_Cell_align},
! 168: {"align", "tfoot", 'A', HTML_ATTR_Cell_align},
! 169: {"align", "th", 'A', HTML_ATTR_Cell_align},
! 170: {"align", "thead", 'A', HTML_ATTR_Cell_align},
! 171: {"align", "tr", 'A', HTML_ATTR_Cell_align},
! 172: {"alink", "body", 'A', HTML_ATTR_ActiveLinkColor},
! 173: {"alt", "", 'A', HTML_ATTR_ALT},
! 174: {"archive", "", 'A', HTML_ATTR_archive},
! 175: {"axis", "", 'A', HTML_ATTR_axis},
! 176:
! 177: {"background", "", 'A', HTML_ATTR_background_},
! 178: {"bgcolor", "", 'A', HTML_ATTR_BackgroundColor},
! 179: {"border", "image", 'A', HTML_ATTR_Img_border},
! 180: {"border", "img", 'A', HTML_ATTR_Img_border},
! 181: {"border", "object", 'A', HTML_ATTR_Img_border},
! 182: {"border", "table", 'A', HTML_ATTR_Border},
! 183:
! 184: {"cellspacing", "", 'A', HTML_ATTR_cellspacing},
! 185: {"cellpadding", "", 'A', HTML_ATTR_cellpadding},
! 186: {"char", "", 'A', HTML_ATTR_char},
! 187: {"charoff", "", 'A', HTML_ATTR_charoff},
! 188: {"charset", "", 'A', HTML_ATTR_charset},
! 189: {"checked", "", 'A', HTML_ATTR_Checked},
! 190: {"cite", "", 'A', HTML_ATTR_cite},
! 191: {"class", "", 'A', HTML_ATTR_Class},
! 192: {"classid", "", 'A', HTML_ATTR_classid},
! 193: {"clear", "br", 'A', HTML_ATTR_Clear},
! 194: {"code", "", 'A', HTML_ATTR_code},
! 195: {"codebase", "", 'A', HTML_ATTR_codebase},
! 196: {"codetype", "", 'A', HTML_ATTR_codetype},
! 197: {"color", "basefont", 'A', HTML_ATTR_BaseFontColor},
! 198: {"color", "", 'A', HTML_ATTR_color},
! 199: {"cols", "frameset", 'A', HTML_ATTR_ColWidth},
! 200: {"cols", "textarea", 'A', HTML_ATTR_Columns},
! 201: {"colspan", "", 'A', HTML_ATTR_colspan_},
! 202: {"compact", "", 'A', HTML_ATTR_COMPACT},
! 203: {"content", "", 'A', HTML_ATTR_meta_content},
! 204: {"coords", "", 'A', HTML_ATTR_coords},
! 205:
! 206: {"data", "", 'A', HTML_ATTR_data},
! 207: {"datapagesize", "table", 'A', HTML_ATTR_datapagesize},
! 208: {"datetime", "", 'A', HTML_ATTR_datetime},
! 209: {"declare", "object", 'A', HTML_ATTR_declare},
! 210: {"defer", "script", 'A', HTML_ATTR_defer},
! 211: {"dir", "", 'A', HTML_ATTR_dir},
! 212: {"disabled", "", 'A', HTML_ATTR_disabled},
! 213:
! 214: {"enctype", "", 'A', HTML_ATTR_ENCTYPE},
! 215: {"event", "script", 'A', HTML_ATTR_event},
! 216:
! 217: {"face", "basefont", 'A', HTML_ATTR_BaseFontFace},
! 218: {"face", "font", 'A', HTML_ATTR_face},
! 219: {"for", "label", 'A', HTML_ATTR_Associated_control},
! 220: {"for", "script", 'A', HTML_ATTR_for_},
! 221: {"frame", "table", 'A', HTML_ATTR_frame},
! 222: {"frameborder", "", 'A', HTML_ATTR_frameborder},
! 223:
! 224: {"headers", "", 'A', HTML_ATTR_headers},
! 225: {"height", "", 'A', HTML_ATTR_Height_},
! 226: {"href", "", 'A', HTML_ATTR_HREF_},
! 227: {"hreflang", "", 'A', HTML_ATTR_hreflang},
! 228: {"hspace", "", 'A', HTML_ATTR_hspace},
! 229: {"http-equiv", "", 'A', HTML_ATTR_http_equiv},
! 230:
! 231: {"id", "", 'A', HTML_ATTR_ID},
! 232: {"ismap", "", 'A', HTML_ATTR_ISMAP},
! 233:
! 234: {"label", "", 'A', HTML_ATTR_label},
! 235: {"lang", "", 'A', HTML_ATTR_Langue},
! 236: {"language", "script", 'A', HTML_ATTR_script_language},
! 237: {"link", "body", 'A', HTML_ATTR_LinkColor},
! 238: {"longdesc", "", 'A', HTML_ATTR_longdesc},
! 239:
! 240: {"marginheight", "", 'A', HTML_ATTR_marginheight},
! 241: {"marginwidth", "", 'A', HTML_ATTR_marginwidth},
! 242: {"maxlength", "", 'A', HTML_ATTR_MaxLength},
! 243: {"media", "", 'A', HTML_ATTR_media},
! 244: {"method", "", 'A', HTML_ATTR_METHOD},
! 245: {"mode", "", 'A', HTML_ATTR_mode},
! 246: {"multiple", "", 'A', HTML_ATTR_Multiple},
! 247:
! 248: {"N", "", 'C', 0},
! 249: {"name", "applet", 'A', HTML_ATTR_applet_name},
! 250: {"name", "frame", 'A', HTML_ATTR_FrameName},
! 251: {"name", "iframe", 'A', HTML_ATTR_FrameName},
! 252: {"name", "meta", 'A', HTML_ATTR_meta_name},
! 253: {"name", "param", 'A', HTML_ATTR_Param_name},
! 254: {"name", "", 'A', HTML_ATTR_NAME},
! 255: {"nohref", "", 'A', HTML_ATTR_nohref},
! 256: {"noresize", "", 'A', HTML_ATTR_no_resize},
! 257: {"noshade", "", 'A', HTML_ATTR_NoShade},
! 258: {"nowrap", "", 'A', HTML_ATTR_No_wrap},
! 259:
! 260: {"object", "applet", 'A', HTML_ATTR_object},
! 261: {"onblur", "", 'A', HTML_ATTR_onblur},
! 262: {"onchange", "", 'A', HTML_ATTR_onchange},
! 263: {"onclick", "", 'A', HTML_ATTR_onclick},
! 264: {"ondblclick", "", 'A', HTML_ATTR_ondblclick},
! 265: {"onfocus", "", 'A', HTML_ATTR_onfocus},
! 266: {"onkeydown", "", 'A', HTML_ATTR_onkeydown},
! 267: {"onkeypress", "", 'A', HTML_ATTR_onkeypress},
! 268: {"onkeyup", "", 'A', HTML_ATTR_onkeyup},
! 269: {"onload", "", 'A', HTML_ATTR_onload},
! 270: {"onmousedown", "", 'A', HTML_ATTR_onmousedown},
! 271: {"onmousemove", "", 'A', HTML_ATTR_onmousemove},
! 272: {"onmouseout", "", 'A', HTML_ATTR_onmouseout},
! 273: {"onmouseover", "", 'A', HTML_ATTR_onmouseover},
! 274: {"onmouseup", "", 'A', HTML_ATTR_onmouseup},
! 275: {"onreset", "form", 'A', HTML_ATTR_onreset},
! 276: {"onselect", "", 'A', HTML_ATTR_onselect},
! 277: {"onsubmit", "form", 'A', HTML_ATTR_onsubmit},
! 278: {"onunload", "", 'A', HTML_ATTR_onunload},
! 279:
! 280: {"profile", "head", 'A', HTML_ATTR_profile},
! 281: {"prompt", "", 'A', HTML_ATTR_Prompt},
! 282:
! 283: {"readonly", "", 'A', HTML_ATTR_readonly},
! 284: {"rel", "", 'A', HTML_ATTR_REL},
! 285: {"rev", "", 'A', HTML_ATTR_REV},
! 286: {"rows", "frameset", 'A', HTML_ATTR_RowHeight},
! 287: {"rows", "textarea", 'A', HTML_ATTR_Rows},
! 288: {"rowspan", "", 'A', HTML_ATTR_rowspan_},
! 289: {"rules", "table", 'A', HTML_ATTR_rules_},
! 290:
! 291: {"scheme", "meta", 'A', HTML_ATTR_scheme},
! 292: {"scope", "", 'A', HTML_ATTR_scope},
! 293: {"scrolling", "", 'A', HTML_ATTR_scrolling},
! 294: {"selected", "", 'A', HTML_ATTR_Selected},
! 295: {"shape", "", 'A', HTML_ATTR_shape},
! 296: {"size", "basefont", 'A', HTML_ATTR_BaseFontSize},
! 297: {"size", "font", 'A', HTML_ATTR_Font_size},
! 298: {"size", "hr", 'A', HTML_ATTR_Size_},
! 299: {"size", "input", 'A', HTML_ATTR_Area_Size},
! 300: {"size", "select", 'A', HTML_ATTR_MenuSize},
! 301: {"span", "col", 'A', HTML_ATTR_span_},
! 302: {"span", "colgroup", 'A', HTML_ATTR_span_},
! 303: {"src", "frame", 'A', HTML_ATTR_FrameSrc},
! 304: {"src", "iframe", 'A', HTML_ATTR_FrameSrc},
! 305: {"src", "script", 'A', HTML_ATTR_script_src},
! 306: {"src", "", 'A', HTML_ATTR_SRC},
! 307: {"standby", "", 'A', HTML_ATTR_standby},
! 308: {"start", "", 'A', HTML_ATTR_Start},
! 309: {"style", "", 'A', HTML_ATTR_Style_},
! 310: {"summary", "table", 'A', HTML_ATTR_summary},
! 311:
! 312: {"tabindex", "", 'A', HTML_ATTR_tabindex},
! 313: {"target", "", 'A', HTML_ATTR_target_},
! 314: {"text", "", 'A', HTML_ATTR_TextColor},
! 315: {"title", "", 'A', HTML_ATTR_Title},
! 316: {"type", "button", 'A', HTML_ATTR_Button_type},
! 317: {"type", "li", 'A', HTML_ATTR_ItemStyle},
! 318: {"type", "link", 'A', HTML_ATTR_Link_type},
! 319: {"type", "a", 'A', HTML_ATTR_Link_type},
! 320: {"type", "object", 'A', HTML_ATTR_Object_type},
! 321: {"type", "ol", 'A', HTML_ATTR_NumberStyle},
! 322: {"type", "param", 'A', HTML_ATTR_Param_type},
! 323: {"type", "script", 'A', HTML_ATTR_content_type},
! 324: {"type", "style", 'A', HTML_ATTR_Notation},
! 325: {"type", "ul", 'A', HTML_ATTR_BulletStyle},
! 326: {"type", "", SPACE, DummyAttribute},
! 327:
! 328: {"usemap", "", 'A', HTML_ATTR_USEMAP},
! 329:
! 330: {"valign", "tbody", 'A', HTML_ATTR_Row_valign},
! 331: {"valign", "td", 'A', HTML_ATTR_Cell_valign},
! 332: {"valign", "tfoot", 'A', HTML_ATTR_Row_valign},
! 333: {"valign", "th", 'A', HTML_ATTR_Cell_valign},
! 334: {"valign", "thead", 'A', HTML_ATTR_Row_valign},
! 335: {"valign", "tr", 'A', HTML_ATTR_Row_valign},
! 336: {"value", "li", 'A', HTML_ATTR_ItemValue},
! 337: {"value", "param", 'A', HTML_ATTR_Param_value},
! 338: {"value", "", 'A', HTML_ATTR_Value_},
! 339: {"valuetype", "param", 'A', HTML_ATTR_valuetype},
! 340: {"version", "", 'A', 0},
! 341: {"vlink", "body", 'A', HTML_ATTR_VisitedLinkColor},
! 342: {"vspace", "", 'A', HTML_ATTR_vspace},
! 343:
! 344: {"width", "applet", 'A', HTML_ATTR_Width__},
! 345: {"width", "col", 'A', HTML_ATTR_Width__},
! 346: {"width", "colgroup", 'A', HTML_ATTR_Width__},
! 347: {"width", "hr", 'A', HTML_ATTR_Width__},
! 348: {"width", "iframe", 'A', HTML_ATTR_Width__},
! 349: {"width", "image", 'A', HTML_ATTR_Width__},
! 350: {"width", "img", 'A', HTML_ATTR_Width__},
! 351: {"width", "object", 'A', HTML_ATTR_Width__},
! 352: {"width", "pre", 'A', HTML_ATTR_Width__},
! 353: {"width", "table", 'A', HTML_ATTR_Width__},
! 354: {"width", "td", 'A', HTML_ATTR_Width__},
! 355: {"width", "th", 'A', HTML_ATTR_Width__},
1.4 cvs 356: #ifdef GRAPHML
1.9 ! cvs 357: {"width", "xmlgraphics", 'A', HTML_ATTR_Width__},
1.4 cvs 358: #endif
359:
1.9 ! cvs 360: {"zzghost", "", 'A', HTML_ATTR_Ghost_restruct},
! 361: {"", "", 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.9 ! cvs 377: int MapGI (char* gi, SSchema *schema, Document doc)
1.1 cvs 378: #else
379: int MapGI (gi, schema, doc)
1.9 ! cvs 380: char* gi;
! 381: SSchema* schema;
1.1 cvs 382: Document doc;
383: #endif
384: {
1.9 ! cvs 385: ElementType elType;
! 386: char* ptr;
! 387: char c;
! 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.9 ! cvs 402: isHTML = !strcmp (ptr, "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.7 cvs 415: c = tolower (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.9 ! cvs 424: if (strcasecmp (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.9 ! cvs 442: if (!ptr || !strcmp (ptr, "MathML"))
1.1 cvs 443: MapXMLElementType (MATH_TYPE, gi, &elType, &ptr, &c, doc);
1.9 ! cvs 444: if (elType.ElTypeNum == 0 && (!ptr || !strcmp (ptr, "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.9 ! cvs 467: void GIType (char* gi, ElementType *elType, Document doc)
1.1 cvs 468: #else
469: void GIType (gi, elType, doc)
1.9 ! cvs 470: char* gi;
! 471: ElementType* elType;
! 472: Document doc;
1.1 cvs 473: #endif
474: {
1.9 ! cvs 475: char c;
! 476: char* 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.7 cvs 490: c = tolower (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.9 ! cvs 500: if (!strcasecmp (HTMLGIMappingTable[i].htmlGI, gi))
1.4 cvs 501: {
502: if (doc != 0)
503: elType->ElSSchema = TtaGetSSchema (TEXT("HTML"), doc);
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.9 ! cvs 525: AttributeMapping *MapAttr (char* Attr, SSchema *schema, int elemEntry, Document doc)
1.4 cvs 526: #else
527: AttributeMapping *MapAttr (Attr, schema, elemEntry, doc)
1.9 ! cvs 528: char* Attr;
! 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.9 ! cvs 541: if (!strcasecmp (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.9 ! cvs 548: !strcasecmp (HTMLAttributeMappingTable[i].XMLelement,
1.4 cvs 549: pHTMLGIMapping[elemEntry].htmlGI))
550: {
551: entry = i;
552: *schema = TtaGetDocumentSSchema (doc);
553: }
554: else
555: i++;
556: else
557: i++;
558: while (entry < 0 && HTMLAttributeMappingTable[i].AttrOrContent != EOS);
559:
560: if (entry >= 0)
561: return (&HTMLAttributeMappingTable[entry]);
562: else
563: return (NULL);
564: }
565:
566: /*----------------------------------------------------------------------
567: MapHTMLAttribute search in the HTML Attribute Mapping Tables the entry
568: for the attribute of name Attr and returns the corresponding Thot
569: attribute type.
570: ----------------------------------------------------------------------*/
571: #ifdef __STDC__
1.9 ! cvs 572: void MapHTMLAttribute (char* Attr, AttributeType *attrType, char* elementName, Document doc)
1.4 cvs 573: #else
574: void MapHTMLAttribute (Attr, attrType, elementName, doc)
1.9 ! cvs 575: char* Attr;
! 576: AttributeType* attrType;
! 577: char* elementName;
1.4 cvs 578: Document doc;
579: #endif
580: {
581: SSchema schema = NULL;
582: AttributeMapping* tableEntry;
583: int elemEntry;
584:
585: elemEntry = MapGI (elementName, &schema, doc);
586: if (elemEntry >= 0)
587: {
588: tableEntry = MapAttr (Attr, &schema, elemEntry, doc);
589: if (tableEntry != NULL)
590: {
591: attrType->AttrTypeNum = tableEntry->ThotAttribute;
592: if (schema == NULL && doc != 0)
593: attrType->AttrSSchema = TtaGetSSchema (TEXT("HTML"), doc);
594: else
595: attrType->AttrSSchema = schema;
596: }
597: else
598: {
599: attrType->AttrTypeNum = 0;
600: attrType->AttrSSchema = NULL;
601: }
602: }
603: else
604: {
605: attrType->AttrTypeNum = 0;
606: attrType->AttrSSchema = NULL;
607: }
1.1 cvs 608: }
Webmaster