Annotation of Amaya/amaya/fetchHTMLname.c, revision 1.17

1.1       cvs         1: /*
                      2:  *
1.15      cvs         3:  *  (c) COPYRIGHT MIT and INRIA, 1996-2000
1.1       cvs         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.17    ! cvs        26: /* mapping table of Xhtml attributes */
        !            27: AttributeMapping XhtmlAttributeMappingTable[] =
1.4       cvs        28: {
                     29:    /* The first entry MUST be unknown_attr */
1.17    ! cvs        30:    {TEXT("unknown_attr"), TEXT(""), 'A', HTML_ATTR_Invalid_attribute, L_Basic},
        !            31:    {TEXT("abbr"), TEXT(""), 'A', HTML_ATTR_abbr, L_Basic},
        !            32:    {TEXT("accept"), TEXT(""), 'A', HTML_ATTR_accept, L_Basic},
        !            33:    {TEXT("accept-charset"), TEXT("form"), 'A', HTML_ATTR_accept_charset, L_Basic},
        !            34:    {TEXT("accesskey"), TEXT(""), 'A', HTML_ATTR_accesskey, L_Basic},
        !            35:    {TEXT("action"), TEXT(""), 'A', HTML_ATTR_Script_URL, L_Basic},
1.16      cvs        36:    {TEXT("align"), TEXT("applet"), 'A', HTML_ATTR_Alignment, L_Transitional},
                     37:    {TEXT("align"), TEXT("caption"), 'A', HTML_ATTR_Position, L_Transitional},
                     38:    {TEXT("align"), TEXT("col"), 'A', HTML_ATTR_Cell_align, L_Transitional},
                     39:    {TEXT("align"), TEXT("colgroup"), 'A', HTML_ATTR_Cell_align, L_Transitional},
                     40:    {TEXT("align"), TEXT("div"), 'A', HTML_ATTR_TextAlign, L_Transitional},
                     41:    {TEXT("align"), TEXT("h1"), 'A', HTML_ATTR_TextAlign, L_Transitional},
                     42:    {TEXT("align"), TEXT("h2"), 'A', HTML_ATTR_TextAlign, L_Transitional},
                     43:    {TEXT("align"), TEXT("h3"), 'A', HTML_ATTR_TextAlign, L_Transitional},
                     44:    {TEXT("align"), TEXT("h4"), 'A', HTML_ATTR_TextAlign, L_Transitional},
                     45:    {TEXT("align"), TEXT("h5"), 'A', HTML_ATTR_TextAlign, L_Transitional},
                     46:    {TEXT("align"), TEXT("h6"), 'A', HTML_ATTR_TextAlign, L_Transitional},
                     47:    {TEXT("align"), TEXT("hr"), 'A', HTML_ATTR_Align, L_Transitional},
                     48:    {TEXT("align"), TEXT("iframe"), 'A', HTML_ATTR_Alignment, L_Transitional},
                     49:    {TEXT("align"), TEXT("image"), 'A', HTML_ATTR_Alignment, L_Transitional},
                     50:    {TEXT("align"), TEXT("img"), 'A', HTML_ATTR_Alignment, L_Transitional},
                     51:    {TEXT("align"), TEXT("input"), 'A', HTML_ATTR_Alignment, L_Transitional},
                     52:    {TEXT("align"), TEXT("legend"), 'A', HTML_ATTR_LAlign, L_Transitional},
                     53:    {TEXT("align"), TEXT("object"), 'A', HTML_ATTR_Alignment, L_Transitional},
                     54:    {TEXT("align"), TEXT("p"), 'A', HTML_ATTR_TextAlign, L_Transitional},
                     55:    {TEXT("align"), TEXT("table"), 'A', HTML_ATTR_Align, L_Transitional},
                     56:    {TEXT("align"), TEXT("tbody"), 'A', HTML_ATTR_Cell_align, L_Transitional},
                     57:    {TEXT("align"), TEXT("td"), 'A', HTML_ATTR_Cell_align, L_Transitional},
                     58:    {TEXT("align"), TEXT("tfoot"), 'A', HTML_ATTR_Cell_align, L_Transitional},
                     59:    {TEXT("align"), TEXT("th"), 'A', HTML_ATTR_Cell_align, L_Transitional},
                     60:    {TEXT("align"), TEXT("thead"), 'A', HTML_ATTR_Cell_align, L_Transitional},
                     61:    {TEXT("align"), TEXT("tr"), 'A', HTML_ATTR_Cell_align, L_Transitional},
                     62:    {TEXT("alink"), TEXT("body"), 'A', HTML_ATTR_ActiveLinkColor, L_Transitional},
1.17    ! cvs        63:    {TEXT("alt"), TEXT(""), 'A', HTML_ATTR_ALT, L_Basic},
        !            64:    {TEXT("archive"), TEXT(""), 'A', HTML_ATTR_archive, L_Basic},
        !            65:    {TEXT("axis"), TEXT(""), 'A', HTML_ATTR_axis, L_Basic},
1.16      cvs        66: 
                     67:    {TEXT("background"), TEXT(""), 'A', HTML_ATTR_background_, L_Transitional},
                     68:    {TEXT("bgcolor"), TEXT(""), 'A', HTML_ATTR_BackgroundColor, L_Transitional},
                     69:    {TEXT("border"), TEXT("image"), 'A', HTML_ATTR_Img_border, L_Transitional},
                     70:    {TEXT("border"), TEXT("img"), 'A', HTML_ATTR_Img_border, L_Transitional},
                     71:    {TEXT("border"), TEXT("object"), 'A', HTML_ATTR_Img_border, L_Transitional},
                     72:    {TEXT("border"), TEXT("table"), 'A', HTML_ATTR_Border, L_Transitional},
                     73: 
                     74:    {TEXT("cellspacing"), TEXT(""), 'A', HTML_ATTR_cellspacing, L_Transitional},
                     75:    {TEXT("cellpadding"), TEXT(""), 'A', HTML_ATTR_cellpadding, L_Transitional},
1.17    ! cvs        76:    {TEXT("char"), TEXT(""), 'A', HTML_ATTR_char, L_Basic},
        !            77:    {TEXT("charoff"), TEXT(""), 'A', HTML_ATTR_charoff, L_Basic},
        !            78:    {TEXT("charset"), TEXT(""), 'A', HTML_ATTR_charset, L_Basic},
        !            79:    {TEXT("checked"), TEXT(""), 'A', HTML_ATTR_Checked, L_Basic},
        !            80:    {TEXT("cite"), TEXT(""), 'A', HTML_ATTR_cite, L_Basic},
        !            81:    {TEXT("class"), TEXT(""), 'A', HTML_ATTR_Class, L_Basic},
        !            82:    {TEXT("classid"), TEXT(""), 'A', HTML_ATTR_classid, L_Basic},
1.16      cvs        83:    {TEXT("clear"), TEXT("br"), 'A', HTML_ATTR_Clear, L_Transitional},
1.17    ! cvs        84:    {TEXT("code"), TEXT(""), 'A', HTML_ATTR_code, L_Basic},
        !            85:    {TEXT("codebase"), TEXT(""), 'A', HTML_ATTR_codebase, L_Basic},
        !            86:    {TEXT("codetype"), TEXT(""), 'A', HTML_ATTR_codetype, L_Basic},
1.16      cvs        87:    {TEXT("color"), TEXT("basefont"), 'A', HTML_ATTR_BaseFontColor, L_Transitional},
                     88:    {TEXT("color"), TEXT(""), 'A', HTML_ATTR_color, L_Transitional},
                     89:    {TEXT("cols"), TEXT("frameset"), 'A', HTML_ATTR_ColWidth, L_Transitional},
1.17    ! cvs        90:    {TEXT("cols"), TEXT("textarea"), 'A', HTML_ATTR_Columns, L_Basic},
        !            91:    {TEXT("colspan"), TEXT(""), 'A', HTML_ATTR_colspan_, L_Basic},
1.16      cvs        92:    {TEXT("compact"), TEXT(""), 'A', HTML_ATTR_COMPACT, L_Transitional},
1.17    ! cvs        93:    {TEXT("content"), TEXT(""), 'A', HTML_ATTR_meta_content, L_Basic},
        !            94:    {TEXT("coords"), TEXT(""), 'A', HTML_ATTR_coords, L_Basic},
1.16      cvs        95: 
1.17    ! cvs        96:    {TEXT("data"), TEXT(""), 'A', HTML_ATTR_data, L_Basic},
        !            97:    {TEXT("datapagesize"), TEXT("table"), 'A', HTML_ATTR_datapagesize, L_Basic},
        !            98:    {TEXT("datetime"), TEXT(""), 'A', HTML_ATTR_datetime, L_Basic},
        !            99:    {TEXT("declare"), TEXT("object"), 'A', HTML_ATTR_declare, L_Basic},
        !           100:    {TEXT("defer"), TEXT("script"), 'A', HTML_ATTR_defer, L_Basic},
        !           101:    {TEXT("dir"), TEXT(""), 'A', HTML_ATTR_dir, L_Basic},
        !           102:    {TEXT("disabled"), TEXT(""), 'A', HTML_ATTR_disabled, L_Basic},
1.16      cvs       103: 
                    104:    {TEXT("enctype"), TEXT(""), 'A', HTML_ATTR_ENCTYPE, L_Transitional},
                    105:    {TEXT("event"), TEXT("script"), 'A', HTML_ATTR_event, L_Transitional},
                    106: 
                    107:    {TEXT("face"), TEXT("basefont"), 'A', HTML_ATTR_BaseFontFace, L_Transitional},
                    108:    {TEXT("face"), TEXT("font"), 'A', HTML_ATTR_face, L_Transitional},
                    109:    {TEXT("for"), TEXT("label"), 'A', HTML_ATTR_Associated_control, L_Transitional},
                    110:    {TEXT("for"), TEXT("script"), 'A', HTML_ATTR_for_, L_Transitional},
                    111:    {TEXT("frame"), TEXT("table"), 'A', HTML_ATTR_frame, L_Transitional},
                    112:    {TEXT("frameborder"), TEXT(""), 'A', HTML_ATTR_frameborder, L_Transitional},
1.4       cvs       113: 
1.16      cvs       114:    {TEXT("headers"), TEXT(""), 'A', HTML_ATTR_headers, L_Transitional},
1.15      cvs       115: #ifdef GRAPHML
1.16      cvs       116:    {TEXT("height"), TEXT("svg"), 'A', HTML_ATTR_SvgHeight, L_Transitional},
1.17    ! cvs       117: #endif /* GRAPHML */
        !           118:    {TEXT("height"), TEXT(""), 'A', HTML_ATTR_Height_, L_Basic},
        !           119:    {TEXT("href"), TEXT(""), 'A', HTML_ATTR_HREF_, L_Basic},
        !           120:    {TEXT("hreflang"), TEXT(""), 'A', HTML_ATTR_hreflang, L_Basic},
1.16      cvs       121:    {TEXT("hspace"), TEXT(""), 'A', HTML_ATTR_hspace, L_Transitional},
1.17    ! cvs       122:    {TEXT("http-equiv"), TEXT(""), 'A', HTML_ATTR_http_equiv, L_Basic},
1.16      cvs       123: 
1.17    ! cvs       124:    {TEXT("id"), TEXT(""), 'A', HTML_ATTR_ID, L_Basic},
1.16      cvs       125:    {TEXT("ismap"), TEXT(""), 'A', HTML_ATTR_ISMAP, L_Transitional},
                    126: 
1.17    ! cvs       127:    {TEXT("label"), TEXT(""), 'A', HTML_ATTR_label, L_Basic},
        !           128:    {TEXT("lang"), TEXT(""), 'A', HTML_ATTR_Langue, L_Basic},
        !           129:    {TEXT("language"), TEXT("script"), 'A', HTML_ATTR_script_language, L_Basic},
        !           130:    {TEXT("link"), TEXT("body"), 'A', HTML_ATTR_LinkColor, L_Basic},
        !           131:    {TEXT("longdesc"), TEXT(""), 'A', HTML_ATTR_longdesc, L_Basic},
1.16      cvs       132: 
                    133:    {TEXT("marginheight"), TEXT(""), 'A', HTML_ATTR_marginheight, L_Transitional},
                    134:    {TEXT("marginwidth"), TEXT(""), 'A', HTML_ATTR_marginwidth, L_Transitional},
1.17    ! cvs       135:    {TEXT("maxlength"), TEXT(""), 'A', HTML_ATTR_MaxLength, L_Basic},
        !           136:    {TEXT("media"), TEXT(""), 'A', HTML_ATTR_media, L_Basic},
        !           137:    {TEXT("method"), TEXT(""), 'A', HTML_ATTR_METHOD, L_Basic},
        !           138:    {TEXT("mode"), TEXT(""), 'A', HTML_ATTR_mode, L_Basic},
        !           139:    {TEXT("multiple"), TEXT(""), 'A', HTML_ATTR_Multiple, L_Basic},
        !           140: 
        !           141:    {TEXT("N"), TEXT(""), 'C', 0, L_Basic},
        !           142:    {TEXT("name"), TEXT("applet"), 'A', HTML_ATTR_applet_name, L_Basic},
        !           143:    {TEXT("name"), TEXT("frame"), 'A', HTML_ATTR_FrameName, L_Basic},
        !           144:    {TEXT("name"), TEXT("iframe"), 'A', HTML_ATTR_FrameName, L_Basic},
        !           145:    {TEXT("name"), TEXT("meta"), 'A', HTML_ATTR_meta_name, L_Basic},
        !           146:    {TEXT("name"), TEXT("param"), 'A', HTML_ATTR_Param_name, L_Basic},
        !           147:    {TEXT("name"), TEXT(""), 'A', HTML_ATTR_NAME, L_Basic},
        !           148:    {TEXT("nohref"), TEXT(""), 'A', HTML_ATTR_nohref, L_Basic},
        !           149:    {TEXT("noresize"), TEXT(""), 'A', HTML_ATTR_no_resize, L_Basic},
        !           150:    {TEXT("noshade"), TEXT(""), 'A', HTML_ATTR_NoShade, L_Basic},
        !           151:    {TEXT("nowrap"), TEXT(""), 'A', HTML_ATTR_No_wrap, L_Basic},
1.16      cvs       152: 
                    153:    {TEXT("object"), TEXT("applet"), 'A', HTML_ATTR_object, L_Transitional},
                    154:    {TEXT("onblur"), TEXT(""), 'A', HTML_ATTR_onblur, L_Transitional},
                    155:    {TEXT("onchange"), TEXT(""), 'A', HTML_ATTR_onchange, L_Transitional},
                    156:    {TEXT("onclick"), TEXT(""), 'A', HTML_ATTR_onclick, L_Transitional},
                    157:    {TEXT("ondblclick"), TEXT(""), 'A', HTML_ATTR_ondblclick, L_Transitional},
                    158:    {TEXT("onfocus"), TEXT(""), 'A', HTML_ATTR_onfocus, L_Transitional},
                    159:    {TEXT("onkeydown"), TEXT(""), 'A', HTML_ATTR_onkeydown, L_Transitional},
                    160:    {TEXT("onkeypress"), TEXT(""), 'A', HTML_ATTR_onkeypress, L_Transitional},
                    161:    {TEXT("onkeyup"), TEXT(""), 'A', HTML_ATTR_onkeyup, L_Transitional},
                    162:    {TEXT("onload"), TEXT(""), 'A', HTML_ATTR_onload, L_Transitional},
                    163:    {TEXT("onmousedown"), TEXT(""), 'A', HTML_ATTR_onmousedown, L_Transitional},
                    164:    {TEXT("onmousemove"), TEXT(""), 'A', HTML_ATTR_onmousemove, L_Transitional},
                    165:    {TEXT("onmouseout"), TEXT(""), 'A', HTML_ATTR_onmouseout, L_Transitional},
                    166:    {TEXT("onmouseover"), TEXT(""), 'A', HTML_ATTR_onmouseover, L_Transitional},
                    167:    {TEXT("onmouseup"), TEXT(""), 'A', HTML_ATTR_onmouseup, L_Transitional},
                    168:    {TEXT("onreset"), TEXT("form"), 'A', HTML_ATTR_onreset, L_Transitional},
                    169:    {TEXT("onselect"), TEXT(""), 'A', HTML_ATTR_onselect, L_Transitional},
                    170:    {TEXT("onsubmit"), TEXT("form"), 'A', HTML_ATTR_onsubmit, L_Transitional},
                    171:    {TEXT("onunload"), TEXT(""), 'A', HTML_ATTR_onunload, L_Transitional},
                    172: 
1.17    ! cvs       173:    {TEXT("profile"), TEXT("head"), 'A', HTML_ATTR_profile, L_Basic},
1.16      cvs       174:    {TEXT("prompt"), TEXT(""), 'A', HTML_ATTR_Prompt, L_Transitional},
                    175: 
1.17    ! cvs       176:    {TEXT("readonly"), TEXT(""), 'A', HTML_ATTR_readonly, L_Basic},
        !           177:    {TEXT("rel"), TEXT(""), 'A', HTML_ATTR_REL, L_Basic},
        !           178:    {TEXT("rev"), TEXT(""), 'A', HTML_ATTR_REV, L_Basic},
1.16      cvs       179:    {TEXT("rows"), TEXT("frameset"), 'A', HTML_ATTR_RowHeight, L_Transitional},
1.17    ! cvs       180:    {TEXT("rows"), TEXT("textarea"), 'A', HTML_ATTR_Rows, L_Basic},
        !           181:    {TEXT("rowspan"), TEXT(""), 'A', HTML_ATTR_rowspan_, L_Basic},
        !           182:    {TEXT("rules"), TEXT("table"), 'A', HTML_ATTR_rules_, L_Basic},
1.16      cvs       183: 
1.17    ! cvs       184:    {TEXT("scheme"), TEXT("meta"), 'A', HTML_ATTR_scheme, L_Basic},
        !           185:    {TEXT("scope"), TEXT(""), 'A', HTML_ATTR_scope, L_Basic},
1.16      cvs       186:    {TEXT("scrolling"), TEXT(""), 'A', HTML_ATTR_scrolling, L_Transitional},
                    187:    {TEXT("selected"), TEXT(""), 'A', HTML_ATTR_Selected, L_Transitional},
                    188:    {TEXT("shape"), TEXT(""), 'A', HTML_ATTR_shape, L_Transitional},
                    189:    {TEXT("size"), TEXT("basefont"), 'A', HTML_ATTR_BaseFontSize, L_Transitional},
                    190:    {TEXT("size"), TEXT("font"), 'A', HTML_ATTR_Font_size, L_Transitional},
                    191:    {TEXT("size"), TEXT("hr"), 'A', HTML_ATTR_Size_, L_Transitional},
                    192:    {TEXT("size"), TEXT("input"), 'A', HTML_ATTR_Area_Size, L_Transitional},
                    193:    {TEXT("size"), TEXT("select"), 'A', HTML_ATTR_MenuSize, L_Transitional},
                    194:    {TEXT("span"), TEXT("col"), 'A', HTML_ATTR_span_, L_Transitional},
                    195:    {TEXT("span"), TEXT("colgroup"), 'A', HTML_ATTR_span_, L_Transitional},
                    196:    {TEXT("src"), TEXT("frame"), 'A', HTML_ATTR_FrameSrc, L_Transitional},
                    197:    {TEXT("src"), TEXT("iframe"), 'A', HTML_ATTR_FrameSrc, L_Transitional},
                    198:    {TEXT("src"), TEXT("script"), 'A', HTML_ATTR_script_src, L_Transitional},
1.17    ! cvs       199:    {TEXT("src"), TEXT(""), 'A', HTML_ATTR_SRC, L_Basic},
        !           200:    {TEXT("standby"), TEXT(""), 'A', HTML_ATTR_standby, L_Basic},
        !           201:    {TEXT("start"), TEXT(""), 'A', HTML_ATTR_Start, L_Basic},
        !           202:    {TEXT("style"), TEXT(""), 'A', HTML_ATTR_Style_, L_Basic},
        !           203:    {TEXT("summary"), TEXT("table"), 'A', HTML_ATTR_summary, L_Basic},
        !           204: 
        !           205:    {TEXT("tabindex"), TEXT(""), 'A', HTML_ATTR_tabindex, L_Basic},
        !           206:    {TEXT("target"), TEXT(""), 'A', HTML_ATTR_target_, L_Basic},
        !           207:    {TEXT("text"), TEXT(""), 'A', HTML_ATTR_TextColor, L_Basic},
        !           208:    {TEXT("title"), TEXT(""), 'A', HTML_ATTR_Title, L_Basic},
1.16      cvs       209:    {TEXT("type"), TEXT("button"), 'A', HTML_ATTR_Button_type, L_Transitional},
1.17    ! cvs       210:    {TEXT("type"), TEXT("li"), 'A', HTML_ATTR_ItemStyle, L_Basic},
        !           211:    {TEXT("type"), TEXT("link"), 'A', HTML_ATTR_Link_type, L_Basic},
        !           212:    {TEXT("type"), TEXT("a"), 'A', HTML_ATTR_Link_type, L_Basic},
        !           213:    {TEXT("type"), TEXT("object"), 'A', HTML_ATTR_Object_type, L_Basic},
        !           214:    {TEXT("type"), TEXT("ol"), 'A', HTML_ATTR_NumberStyle, L_Basic},
        !           215:    {TEXT("type"), TEXT("param"), 'A', HTML_ATTR_Param_type, L_Basic},
1.16      cvs       216:    {TEXT("type"), TEXT("script"), 'A', HTML_ATTR_content_type, L_Transitional},
                    217:    {TEXT("type"), TEXT("style"), 'A', HTML_ATTR_Notation, L_Transitional},
1.17    ! cvs       218:    {TEXT("type"), TEXT("ul"), 'A', HTML_ATTR_BulletStyle, L_Basic},
        !           219:    {TEXT("type"), TEXT(""), SPACE, DummyAttribute, L_Basic},
1.16      cvs       220: 
1.17    ! cvs       221:    {TEXT("usemap"), TEXT(""), 'A', HTML_ATTR_USEMAP, L_Basic},
1.16      cvs       222: 
1.17    ! cvs       223:    {TEXT("valign"), TEXT("tbody"), 'A', HTML_ATTR_Row_valign, L_Basic},
        !           224:    {TEXT("valign"), TEXT("td"), 'A', HTML_ATTR_Cell_valign, L_Basic},
        !           225:    {TEXT("valign"), TEXT("tfoot"), 'A', HTML_ATTR_Row_valign, L_Basic},
        !           226:    {TEXT("valign"), TEXT("th"), 'A', HTML_ATTR_Cell_valign, L_Basic},
        !           227:    {TEXT("valign"), TEXT("thead"), 'A', HTML_ATTR_Row_valign, L_Basic},
        !           228:    {TEXT("valign"), TEXT("tr"), 'A', HTML_ATTR_Row_valign, L_Basic},
        !           229:    {TEXT("value"), TEXT("li"), 'A', HTML_ATTR_ItemValue, L_Basic},
        !           230:    {TEXT("value"), TEXT("param"), 'A', HTML_ATTR_Param_value, L_Basic},
        !           231:    {TEXT("value"), TEXT(""), 'A', HTML_ATTR_Value_, L_Basic},
        !           232:    {TEXT("valuetype"), TEXT("param"), 'A', HTML_ATTR_valuetype, L_Basic},
        !           233:    {TEXT("version"), TEXT(""), 'A', 0, L_Basic},
1.16      cvs       234:    {TEXT("vlink"), TEXT("body"), 'A', HTML_ATTR_VisitedLinkColor, L_Transitional},
                    235:    {TEXT("vspace"), TEXT(""), 'A', HTML_ATTR_vspace, L_Transitional},
                    236: 
                    237:    {TEXT("width"), TEXT("applet"), 'A', HTML_ATTR_Width__, L_Transitional},
                    238:    {TEXT("width"), TEXT("col"), 'A', HTML_ATTR_Width__, L_Transitional},
                    239:    {TEXT("width"), TEXT("colgroup"), 'A', HTML_ATTR_Width__, L_Transitional},
                    240:    {TEXT("width"), TEXT("hr"), 'A', HTML_ATTR_Width__, L_Transitional},
                    241:    {TEXT("width"), TEXT("iframe"), 'A', HTML_ATTR_Width__, L_Transitional},
                    242:    {TEXT("width"), TEXT("image"), 'A', HTML_ATTR_Width__, L_Transitional},
1.17    ! cvs       243:    {TEXT("width"), TEXT("img"), 'A', HTML_ATTR_Width__, L_Basic},
        !           244:    {TEXT("width"), TEXT("object"), 'A', HTML_ATTR_Width__, L_Basic},
1.16      cvs       245:    {TEXT("width"), TEXT("pre"), 'A', HTML_ATTR_Width__, L_Transitional},
1.4       cvs       246: #ifdef GRAPHML
1.16      cvs       247:    {TEXT("width"), TEXT("svg"), 'A', HTML_ATTR_SvgWidth, L_Transitional},
1.17    ! cvs       248: #endif /* GRAPHML */
1.16      cvs       249:    {TEXT("width"), TEXT("table"), 'A', HTML_ATTR_Width__, L_Transitional},
                    250:    {TEXT("width"), TEXT("td"), 'A', HTML_ATTR_Width__, L_Transitional},
                    251:    {TEXT("width"), TEXT("th"), 'A', HTML_ATTR_Width__, L_Transitional},
                    252: #ifdef GRAPHML
                    253:    {TEXT("width"), TEXT("xmlgraphics"), 'A', HTML_ATTR_Width__, L_Transitional},
1.17    ! cvs       254: #endif /* GRAPHML */
        !           255: 
        !           256:    {TEXT("zzghost"), TEXT(""), 'A', HTML_ATTR_Ghost_restruct, L_Basic},
        !           257:    {TEXT(""), TEXT(""), EOS, 0, L_Basic}               /* Last entry. Mandatory */
1.4       cvs       258: };
1.1       cvs       259: 
                    260: /* define a pointer to let other parser functions access the local table */
1.17    ! cvs       261: AttributeMapping *pHTMLAttributeMapping = XhtmlAttributeMappingTable;
1.4       cvs       262: 
1.1       cvs       263: 
                    264: /*----------------------------------------------------------------------
                    265:    MapGI
                    266:    search in the mapping tables the entry for the element of
                    267:    name GI and returns the rank of that entry.
                    268:    When returning, schema contains the Thot SSchema that defines that element,
                    269:    Returns -1 and schema = NULL if not found.
                    270:   ----------------------------------------------------------------------*/
                    271: #ifdef __STDC__
1.12      cvs       272: int                 MapGI (CHAR_T* gi, SSchema *schema, Document doc)
1.1       cvs       273: #else
                    274: int                 MapGI (gi, schema, doc)
1.12      cvs       275: CHAR_T*             gi;
1.9       cvs       276: SSchema*            schema;
1.1       cvs       277: Document            doc;
                    278: #endif
                    279: {
1.9       cvs       280:   ElementType     elType;
1.11      cvs       281:   CHAR_T*         ptr; 
1.12      cvs       282:   CHAR_T          c;
1.9       cvs       283:   int             i;
                    284:   int             entry;
1.14      cvs       285:   ThotBool       isHTML;
1.1       cvs       286: 
                    287:   /* TODO: use NameSpaces to search in the right table */
                    288:   entry = -1;
                    289:   if (*schema == NULL)
                    290:     {
                    291:       isHTML = FALSE;
                    292:       ptr = NULL;
                    293:     }
                    294:   else
                    295:     {
                    296:       ptr = TtaGetSSchemaName (*schema);
1.11      cvs       297:       isHTML = !ustrcmp (ptr, TEXT("HTML"));
1.1       cvs       298:     }
                    299: 
                    300:   i = 0;
                    301:   if (*schema == NULL || isHTML)
                    302:     {
                    303:       /*
                    304:        First convert the first char into lower case to locate
                    305:        registered tags in the HTML mapping table.
                    306:        Entries are registered in upper case and in alphabetic order.
                    307:       */
                    308: 
                    309:       /* TODO: define a function which works on unicode */
1.12      cvs       310:       c = utolower (gi[0]);
1.1       cvs       311:       /* look for the first concerned entry in the table */
1.16      cvs       312:       while (pHTMLGIMapping[i].XMLname[0] < c
                    313:             && pHTMLGIMapping[i].XMLname[0] != EOS)
1.1       cvs       314:        i++;
                    315: 
                    316:       /* look at all entries starting with the right character */
                    317:       do
                    318:        {
1.16      cvs       319:          if (ustrcasecmp (pHTMLGIMapping[i].XMLname, gi))
1.1       cvs       320:            i++;
                    321:          else
                    322:            entry = i;
                    323:        }
1.16      cvs       324:       while (entry < 0 && pHTMLGIMapping[i].XMLname[0] == c);
1.1       cvs       325:     }
                    326: 
                    327:   if (entry < 0)
                    328:     if (*schema != NULL && isHTML)
                    329:       *schema = NULL;
                    330:     else
                    331:       /* not found. Look at the XML mapping tables */
                    332:       {
                    333:        elType.ElTypeNum = 0;
                    334:        elType.ElSSchema = *schema;
                    335: 
                    336: #ifndef STANDALONE
1.11      cvs       337:        if (!ptr || !ustrcmp (ptr, TEXT("MathML")))
1.1       cvs       338:          MapXMLElementType (MATH_TYPE, gi, &elType, &ptr, &c, doc);
1.11      cvs       339:        if (elType.ElTypeNum == 0 && (!ptr || !ustrcmp (ptr, TEXT("GraphML"))))
1.1       cvs       340:          MapXMLElementType (GRAPH_TYPE, gi, &elType, &ptr, &c, doc);
                    341: #endif
                    342:        if (elType.ElTypeNum == 0)
                    343:          {
                    344:             entry = -1;
                    345:            elType.ElSSchema = NULL;
                    346:            *schema = NULL;
                    347:          }
                    348:        else
                    349:          {
                    350:             entry = elType.ElTypeNum;
                    351:             *schema = elType.ElSSchema;
                    352:          }
                    353:       }
                    354:   return entry;
                    355: }
                    356: 
                    357: /*----------------------------------------------------------------------
                    358:    GIType  search in mapping tables the Element type associated with
                    359:    a given GI Name. If not found returns zero.
                    360:   ----------------------------------------------------------------------*/
                    361: #ifdef __STDC__
1.12      cvs       362: void                GIType (CHAR_T* gi, ElementType *elType, Document doc)
1.1       cvs       363: #else
                    364: void                GIType (gi, elType, doc)
1.12      cvs       365: CHAR_T*             gi;
1.9       cvs       366: ElementType*        elType;
                    367: Document            doc;
1.1       cvs       368: #endif
                    369: {
1.12      cvs       370:   CHAR_T              c;
                    371:   CHAR_T*             ptr;
1.1       cvs       372:   int                 i;
                    373: 
                    374:   /* TODO: use NameSpaces to search in the right table */
                    375:   elType->ElSSchema = NULL;
                    376:   elType->ElTypeNum = 0;
                    377: 
                    378:   /*
                    379:     First convert the first char into lower case to locate
                    380:     registered tags in the HTML mapping table.
                    381:     Entries are registered in upper case and in alphabetic order.
                    382:   */
                    383: 
                    384:   /* TODO: define a function which works on unicode */
1.12      cvs       385:   c = utolower (gi[0]);
1.1       cvs       386: 
                    387:   i = 0;
                    388:   /* look for the first concerned entry in the table */
1.16      cvs       389:   while (pHTMLGIMapping[i].XMLname[0] < c &&
                    390:         pHTMLGIMapping[i].XMLname[0] != EOS)
1.1       cvs       391:     i++;
                    392:   /* look at all entries starting with the right character */
                    393:   do
                    394:     {
1.16      cvs       395:       if (!ustrcasecmp (pHTMLGIMapping[i].XMLname, gi))
1.4       cvs       396:       {
                    397:        if (doc != 0)
1.11      cvs       398:         elType->ElSSchema = TtaGetSSchema (TEXT("HTML"), doc);
1.16      cvs       399:        elType->ElTypeNum = pHTMLGIMapping[i].ThotType;
1.4       cvs       400:        return;
                    401:       }
1.1       cvs       402:       i++;
                    403:     }
1.16      cvs       404:   while (pHTMLGIMapping[i].XMLname[0] == c);
1.1       cvs       405: 
                    406: #ifndef STANDALONE
                    407:   /* if not found, look at the XML mapping tables */
                    408:   MapXMLElementType (MATH_TYPE, gi, elType, &ptr, &c, doc);
                    409:   if (elType->ElTypeNum == 0)
1.4       cvs       410:   MapXMLElementType (GRAPH_TYPE, gi, elType, &ptr, &c, doc);
1.1       cvs       411: #endif
1.4       cvs       412: }
                    413: 
                    414: /*----------------------------------------------------------------------
                    415:    MapAttr search in all AttributeMappingTables the entry for the
                    416:    attribute of name Attr and returns a pointer to that entry,
                    417:    as well as the corresponding Thot SSchema
                    418:   ----------------------------------------------------------------------*/
                    419: #ifdef __STDC__
1.12      cvs       420: AttributeMapping   *MapAttr (CHAR_T* Attr, SSchema *schema, int elemEntry, Document doc)
1.4       cvs       421: #else
                    422: AttributeMapping   *MapAttr (Attr, schema, elemEntry, doc)
1.12      cvs       423: CHAR_T*               Attr;
1.9       cvs       424: SSchema*            schema;
1.4       cvs       425: int                 elemEntry;
                    426: Document            doc;
                    427: #endif
                    428: {
                    429:   int                 i;
                    430:   int                 entry;
                    431: 
                    432:   entry = -1;
                    433:   *schema = NULL;
                    434:   i = 0;
                    435:   do
1.17    ! cvs       436:     if (!ustrcasecmp (XhtmlAttributeMappingTable[i].XMLattribute, Attr))
        !           437:       if (XhtmlAttributeMappingTable[i].XMLelement[0] == EOS)
1.4       cvs       438:         {
                    439:          entry = i;
                    440:          *schema = TtaGetDocumentSSchema (doc);
                    441:        }
                    442:      else if (elemEntry >= 0 &&
1.17    ! cvs       443:              !ustrcasecmp (XhtmlAttributeMappingTable[i].XMLelement, pHTMLGIMapping[elemEntry].XMLname))
1.4       cvs       444:        {
                    445:         entry = i;
                    446:         *schema = TtaGetDocumentSSchema (doc);
                    447:        }
                    448:       else
                    449:        i++;
                    450:     else
                    451:       i++;
1.17    ! cvs       452:   while (entry < 0 && XhtmlAttributeMappingTable[i].AttrOrContent != EOS);
1.4       cvs       453: 
                    454:   if (entry >= 0)
1.17    ! cvs       455:     return (&XhtmlAttributeMappingTable[entry]);
1.4       cvs       456:   else
                    457:     return (NULL);
                    458: }
                    459: 
                    460: /*----------------------------------------------------------------------
                    461:    MapHTMLAttribute search in the HTML Attribute Mapping Tables the entry
                    462:    for the attribute of name Attr and returns the corresponding Thot
                    463:    attribute type.
                    464:   ----------------------------------------------------------------------*/
                    465: #ifdef __STDC__
1.12      cvs       466: void           MapHTMLAttribute (CHAR_T* Attr, AttributeType *attrType, CHAR_T* elementName, Document doc)
1.4       cvs       467: #else
                    468: void           MapHTMLAttribute (Attr, attrType, elementName, doc)
1.12      cvs       469: CHAR_T*        Attr;
1.9       cvs       470: AttributeType* attrType;
1.12      cvs       471: CHAR_T*        elementName;
1.4       cvs       472: Document       doc;
                    473: #endif
                    474: {
                    475:   SSchema             schema = NULL;
                    476:   AttributeMapping*   tableEntry;
                    477:   int                 elemEntry;
                    478: 
                    479:   elemEntry = MapGI (elementName, &schema, doc);
                    480:   if (elemEntry >= 0)
                    481:     {
                    482:       tableEntry = MapAttr (Attr, &schema, elemEntry, doc);
                    483:       if (tableEntry != NULL)
                    484:        {
                    485:          attrType->AttrTypeNum = tableEntry->ThotAttribute;
                    486:          if (schema == NULL && doc != 0)
1.11      cvs       487:            attrType->AttrSSchema = TtaGetSSchema (TEXT("HTML"), doc);
1.4       cvs       488:          else      
                    489:            attrType->AttrSSchema = schema;
                    490:        }
                    491:       else
                    492:        {
                    493:          attrType->AttrTypeNum = 0;
                    494:          attrType->AttrSSchema = NULL;
                    495:        }
                    496:     }
                    497:   else
                    498:     {
                    499:       attrType->AttrTypeNum = 0;
                    500:       attrType->AttrSSchema = NULL;
                    501:     }
1.1       cvs       502: }

Webmaster