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