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