Annotation of Amaya/amaya/fetchXMLname.c, revision 1.23

1.1       cvs         1: /*
                      2:  *
1.13      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:  * fetchXMLname
                     11:  *
                     12:  * Author: I. Vatton
                     13:  *
                     14:  */
                     15: 
                     16: #define THOT_EXPORT extern
                     17: #include "amaya.h"
                     18: #include "parser.h"
1.14      cvs        19: 
                     20: /* mapping table of XHTML elements */
                     21: static ElemMapping    XHTMLElemMappingTable[] =
                     22: {
                     23:    /* This table MUST be in alphabetical order */
1.20      cvs        24:    {TEXT("XMLcomment"), SPACE, HTML_EL_Comment_, L_Undefined},
                     25:    {TEXT("XMLcomment_line"), SPACE, HTML_EL_Comment_line, L_Undefined},
                     26:    {TEXT("a"), SPACE, HTML_EL_Anchor, L_Basic},
                     27:    {TEXT("abbr"), SPACE, HTML_EL_ABBR, L_Basic},
                     28:    {TEXT("acronym"), SPACE, HTML_EL_ACRONYM, L_Basic},
                     29:    {TEXT("address"), SPACE, HTML_EL_Address, L_Basic},
                     30:    {TEXT("applet"), SPACE, HTML_EL_Applet, L_Transitional},
                     31:    {TEXT("area"), 'E', HTML_EL_AREA, L_Transitional},
                     32:    {TEXT("b"), SPACE, HTML_EL_Bold_text, L_Transitional},
                     33:    {TEXT("base"), 'E', HTML_EL_BASE, L_Basic},
                     34:    {TEXT("basefont"), 'E', HTML_EL_BaseFont, L_Transitional},
                     35:    {TEXT("bdo"), SPACE, HTML_EL_BDO, L_Transitional},
                     36:    {TEXT("big"), SPACE, HTML_EL_Big_text, L_Transitional},
                     37:    {TEXT("blockquote"), SPACE, HTML_EL_Block_Quote, L_Basic},
                     38:    {TEXT("body"), SPACE, HTML_EL_BODY, L_Basic},
                     39:    {TEXT("br"), 'E', HTML_EL_BR, L_Basic},
                     40:    {TEXT("button"), SPACE, HTML_EL_BUTTON, L_Transitional},
                     41:    {TEXT("c"), SPACE, HTML_EL_TEXT_UNIT, L_Transitional},
                     42:    {TEXT("caption"), SPACE, HTML_EL_CAPTION, L_Transitional},
                     43:    {TEXT("center"), SPACE, HTML_EL_Center, L_Transitional},
                     44:    {TEXT("cite"), SPACE, HTML_EL_Cite, L_Basic},
                     45:    {TEXT("code"), SPACE, HTML_EL_Code, L_Basic},
                     46:    {TEXT("colgroup"), SPACE, HTML_EL_COLGROUP, L_Transitional},
                     47:    {TEXT("col"), SPACE, HTML_EL_COL, L_Transitional},
                     48:    {TEXT("dd"), SPACE, HTML_EL_Definition, L_Basic},
                     49:    {TEXT("del"), SPACE, HTML_EL_DEL, L_Transitional},
                     50:    {TEXT("dfn"), SPACE, HTML_EL_Def, L_Basic},
                     51:    {TEXT("dir"), SPACE, HTML_EL_Directory, L_Transitional},
                     52:    {TEXT("div"), SPACE, HTML_EL_Division, L_Basic},
                     53:    {TEXT("dl"), SPACE, HTML_EL_Definition_List, L_Basic},
                     54:    {TEXT("dt"), SPACE, HTML_EL_Term, L_Basic},
                     55:    {TEXT("em"), SPACE, HTML_EL_Emphasis, L_Basic},
                     56:    {TEXT("fieldset"), SPACE, HTML_EL_FIELDSET, L_Transitional},
                     57:    {TEXT("font"), SPACE, HTML_EL_Font_, L_Transitional},
                     58:    {TEXT("form"), SPACE, HTML_EL_Form, L_Basic},
                     59:    {TEXT("frame"), 'E', HTML_EL_FRAME, L_Transitional},
                     60:    {TEXT("frameset"), SPACE, HTML_EL_FRAMESET, L_Transitional},
                     61:    {TEXT("h1"), SPACE, HTML_EL_H1, L_Basic},
                     62:    {TEXT("h2"), SPACE, HTML_EL_H2, L_Basic},
                     63:    {TEXT("h3"), SPACE, HTML_EL_H3, L_Basic},
                     64:    {TEXT("h4"), SPACE, HTML_EL_H4, L_Basic},
                     65:    {TEXT("h5"), SPACE, HTML_EL_H5, L_Basic},
                     66:    {TEXT("h6"), SPACE, HTML_EL_H6, L_Basic},
                     67:    {TEXT("head"), SPACE, HTML_EL_HEAD, L_Basic},
                     68:    {TEXT("hr"), 'E', HTML_EL_Horizontal_Rule, L_Transitional},
                     69:    {TEXT("html"), SPACE, HTML_EL_HTML, L_Basic},
                     70:    {TEXT("i"), SPACE, HTML_EL_Italic_text, L_Transitional},
                     71:    {TEXT("iframe"), SPACE, HTML_EL_IFRAME, L_Transitional},
                     72:    {TEXT("image"), 'E', HTML_EL_PICTURE_UNIT, L_Transitional},
                     73:    {TEXT("img"), 'E', HTML_EL_PICTURE_UNIT, L_Basic},
                     74:    {TEXT("input"), 'E', HTML_EL_Input, L_Basic},
                     75:    {TEXT("ins"), SPACE, HTML_EL_INS, L_Transitional},
                     76:    {TEXT("isindex"), 'E', HTML_EL_ISINDEX, L_Transitional},
                     77:    {TEXT("kbd"), SPACE, HTML_EL_Keyboard, L_Basic},
                     78:    {TEXT("label"), SPACE, HTML_EL_LABEL, L_Basic},
                     79:    {TEXT("legend"), SPACE, HTML_EL_LEGEND, L_Transitional},
                     80:    {TEXT("li"), SPACE, HTML_EL_List_Item, L_Basic},
                     81:    {TEXT("link"), 'E', HTML_EL_LINK, L_Basic},
                     82:    {TEXT("listing"), SPACE, HTML_EL_Preformatted, L_Transitional}, /*converted to PRE */
                     83:    {TEXT("map"), SPACE, HTML_EL_MAP, L_Transitional},
                     84:    {TEXT("menu"), SPACE, HTML_EL_Menu, L_Transitional},
                     85:    {TEXT("meta"), 'E', HTML_EL_META, L_Basic},
                     86:    {TEXT("noframes"), SPACE, HTML_EL_NOFRAMES, L_Transitional},
                     87:    {TEXT("noscript"), SPACE, HTML_EL_NOSCRIPT, L_Transitional},
                     88:    {TEXT("object"), SPACE, HTML_EL_Object, L_Basic},
                     89:    {TEXT("ol"), SPACE, HTML_EL_Numbered_List, L_Basic},
                     90:    {TEXT("optgroup"), SPACE, HTML_EL_OptGroup, L_Transitional},
                     91:    {TEXT("option"), SPACE, HTML_EL_Option, L_Basic},
                     92:    {TEXT("p"), SPACE, HTML_EL_Paragraph, L_Basic},
                     93:    {TEXT("p*"), SPACE, HTML_EL_Pseudo_paragraph, L_Basic},
                     94:    {TEXT("param"), 'E', HTML_EL_Parameter, L_Basic},
                     95:    {TEXT("plaintext"), SPACE, HTML_EL_Preformatted, L_Transitional},/* converted to PRE */
                     96:    {TEXT("pre"), SPACE, HTML_EL_Preformatted, L_Basic},
                     97:    {TEXT("q"), SPACE, HTML_EL_Quotation, L_Basic},
                     98:    {TEXT("s"), SPACE, HTML_EL_Struck_text, L_Transitional},
                     99:    {TEXT("samp"), SPACE, HTML_EL_Sample, L_Basic},
                    100:    {TEXT("script"), SPACE, HTML_EL_SCRIPT, L_Transitional},
                    101:    {TEXT("select"), SPACE, HTML_EL_Option_Menu, L_Basic},
                    102:    {TEXT("small"), SPACE, HTML_EL_Small_text, L_Transitional},
                    103:    {TEXT("span"), SPACE, HTML_EL_Span, L_Basic},
                    104:    {TEXT("strike"), SPACE, HTML_EL_Struck_text, L_Transitional},
                    105:    {TEXT("strong"), SPACE, HTML_EL_Strong, L_Basic},
                    106:    {TEXT("style"), SPACE, HTML_EL_STYLE_, L_Transitional},
                    107:    {TEXT("sub"), SPACE, HTML_EL_Subscript, L_Transitional},
                    108:    {TEXT("sup"), SPACE, HTML_EL_Superscript, L_Transitional},
                    109:    {TEXT("table"), SPACE, HTML_EL_Table, L_Basic},
                    110:    {TEXT("tbody"), SPACE, HTML_EL_tbody, L_Basic},
                    111:    {TEXT("td"), SPACE, HTML_EL_Data_cell, L_Basic},
                    112:    {TEXT("textarea"), SPACE, HTML_EL_Text_Area, L_Basic},
                    113:    {TEXT("tfoot"), SPACE, HTML_EL_tfoot, L_Transitional},
                    114:    {TEXT("th"), SPACE, HTML_EL_Heading_cell, L_Basic},
                    115:    {TEXT("thead"), SPACE, HTML_EL_thead, L_Transitional},
                    116:    {TEXT("title"), SPACE, HTML_EL_TITLE, L_Basic},
                    117:    {TEXT("tr"), SPACE, HTML_EL_Table_row, L_Basic},
                    118:    {TEXT("tt"), SPACE, HTML_EL_Teletype_text, L_Transitional},
                    119:    {TEXT("u"), SPACE, HTML_EL_Underlined_text, L_Transitional},
                    120:    {TEXT("ul"), SPACE, HTML_EL_Unnumbered_List, L_Basic},
                    121:    {TEXT("var"), SPACE, HTML_EL_Variable, L_Basic},
                    122:    {TEXT("xmp"), SPACE, HTML_EL_Preformatted, L_Transitional},  /* converted to PRE */
                    123:    {TEXT(""), SPACE, 0, L_Basic}       /* Last entry. Mandatory */
1.14      cvs       124: };
1.20      cvs       125: int           HTML_ENTRIES = (sizeof(XHTMLElemMappingTable) / sizeof(ElemMapping));
                    126: ElemMapping  *pHTMLGIMapping = XHTMLElemMappingTable;
                    127: 
1.1       cvs       128: /* mapping table of MathML elements */
                    129: #include "MathML.h"
                    130: static ElemMapping    MathMLElemMappingTable[] =
                    131: {
                    132:    /* This table MUST be in alphabetical order */
1.20      cvs       133:    {TEXT("XMLcomment"), SPACE, MathML_EL_XMLcomment, L_Undefined},
                    134:    {TEXT("XMLcomment_line"), SPACE, MathML_EL_XMLcomment_line, L_Undefined},
                    135:    {TEXT("maligngroup"), 'E', MathML_EL_MALIGNGROUP, L_Undefined},
                    136:    {TEXT("malignmark"), 'E', MathML_EL_MALIGNMARK, L_Undefined},
1.23    ! cvs       137:    {TEXT("math"), SPACE, MathML_EL_MathML, L_Undefined},
1.20      cvs       138:    {TEXT("mchar"), 'E', MathML_EL_MCHAR, L_Undefined},
                    139:    {TEXT("menclose"), SPACE, MathML_EL_MENCLOSE, L_Undefined},
                    140:    {TEXT("merror"), SPACE, MathML_EL_MERROR, L_Undefined},
                    141:    {TEXT("mf"), SPACE, MathML_EL_MF, L_Undefined},  /* for compatibility with an old version
1.13      cvs       142:                                          of MathML: WD-math-970704 */
1.20      cvs       143:    {TEXT("mfenced"), SPACE, MathML_EL_MFENCED, L_Undefined},
                    144:    {TEXT("mfrac"), SPACE, MathML_EL_MFRAC, L_Undefined},
                    145:    {TEXT("mglyph"), 'E', MathML_EL_MGLYPH, L_Undefined},
                    146:    {TEXT("mi"), SPACE, MathML_EL_MI, L_Undefined},
                    147:    {TEXT("mlabeledtr"), SPACE, MathML_EL_MLABELEDTR, L_Undefined},
                    148:    {TEXT("mmultiscripts"), SPACE, MathML_EL_MMULTISCRIPTS, L_Undefined},
                    149:    {TEXT("mn"), SPACE, MathML_EL_MN, L_Undefined},
                    150:    {TEXT("mo"), SPACE, MathML_EL_MO, L_Undefined},
                    151:    {TEXT("mover"), SPACE, MathML_EL_MOVER, L_Undefined},
                    152:    {TEXT("mpadded"), SPACE, MathML_EL_MPADDED, L_Undefined},
                    153:    {TEXT("mphantom"), SPACE, MathML_EL_MPHANTOM, L_Undefined},
                    154:    {TEXT("mprescripts"), SPACE, MathML_EL_PrescriptPairs, L_Undefined},
                    155:    {TEXT("mroot"), SPACE, MathML_EL_MROOT, L_Undefined},
                    156:    {TEXT("mrow"), SPACE, MathML_EL_MROW, L_Undefined},
                    157:    {TEXT("ms"), SPACE, MathML_EL_MS, L_Undefined},
                    158:    {TEXT("mspace"), 'E', MathML_EL_MSPACE, L_Undefined},
                    159:    {TEXT("msqrt"), SPACE, MathML_EL_MSQRT, L_Undefined},
                    160:    {TEXT("mstyle"), SPACE, MathML_EL_MSTYLE, L_Undefined},
                    161:    {TEXT("msub"), SPACE, MathML_EL_MSUB, L_Undefined},
                    162:    {TEXT("msubsup"), SPACE, MathML_EL_MSUBSUP, L_Undefined},
                    163:    {TEXT("msup"), SPACE, MathML_EL_MSUP, L_Undefined},
                    164:    {TEXT("mtable"), SPACE, MathML_EL_MTABLE, L_Undefined},
                    165:    {TEXT("mtd"), SPACE, MathML_EL_MTD, L_Undefined},
                    166:    {TEXT("mtext"), SPACE, MathML_EL_MTEXT, L_Undefined},
                    167:    {TEXT("mtr"), SPACE, MathML_EL_MTR, L_Undefined},
                    168:    {TEXT("munder"), SPACE, MathML_EL_MUNDER, L_Undefined},
                    169:    {TEXT("munderover"), SPACE, MathML_EL_MUNDEROVER, L_Undefined},
                    170:    {TEXT("none"), SPACE, MathML_EL_Construct, L_Undefined},
                    171:    {TEXT("sep"), 'E', MathML_EL_SEP, L_Undefined},
                    172:    {TEXT(""), SPACE, 0, L_Undefined}   /* Last entry. Mandatory */
1.1       cvs       173: };
                    174: 
                    175: #ifdef GRAPHML
                    176: /* mapping table of GraphML elements */
                    177: #include "GraphML.h"
                    178: static ElemMapping    GraphMLElemMappingTable[] =
                    179: {
                    180:    /* This table MUST be in alphabetical order */
1.20      cvs       181:    {TEXT("XMLcomment"), SPACE, GraphML_EL_XMLcomment, L_Undefined},
                    182:    {TEXT("XMLcomment_line"), SPACE, GraphML_EL_XMLcomment_line, L_Undefined},
                    183:    {TEXT("circle"), SPACE, GraphML_EL_Circle, L_Undefined},
                    184:    {TEXT("closedspline"), SPACE, GraphML_EL_ClosedSpline, L_Undefined},
                    185:    {TEXT("desc"), SPACE, GraphML_EL_desc, L_Undefined},
                    186:    {TEXT("group"), SPACE, GraphML_EL_Group, L_Undefined},
                    187:    {TEXT("label"), 'X', GraphML_EL_Label, L_Undefined}, /* see function GraphMLGetDTDName */
                    188:    {TEXT("line"), 'E', GraphML_EL_Line_, L_Undefined},
                    189:    {TEXT("math"), 'X', GraphML_EL_Math, L_Undefined},   /* see function GraphMLGetDTDName */
                    190:    {TEXT("metadata"), SPACE, GraphML_EL_metadata, L_Undefined},
                    191:    {TEXT("oval"), SPACE, GraphML_EL_Oval, L_Undefined},
                    192:    {TEXT("polygon"), SPACE, GraphML_EL_Polygon, L_Undefined},
                    193:    {TEXT("polyline"), 'E', GraphML_EL_Polyline, L_Undefined},
                    194:    {TEXT("rect"), SPACE, GraphML_EL_Rectangle, L_Undefined},
                    195:    {TEXT("roundrect"), SPACE, GraphML_EL_RoundRect, L_Undefined},
                    196:    {TEXT("spline"), 'E', GraphML_EL_Spline, L_Undefined},
1.23    ! cvs       197:    {TEXT("svg"), SPACE, GraphML_EL_GraphML, L_Undefined},
1.20      cvs       198:    {TEXT("text"), 'X', GraphML_EL_Text_, L_Undefined},  /* see function GraphMLGetDTDName */
                    199:    {TEXT("title"), SPACE, GraphML_EL_title, L_Undefined},
1.23    ! cvs       200:    {TEXT("xmlgraphics"), SPACE, GraphML_EL_GraphML, L_Undefined},
1.20      cvs       201:    {TEXT(""), SPACE, 0, L_Undefined}   /* Last entry. Mandatory */
1.1       cvs       202: };
                    203: #else /* GRAPHML */
                    204: /* there is no mapping table of GraphML elements */
                    205: 
                    206: static ElemMapping *GraphMLElemMappingTable = NULL;
                    207: #endif /* GRAPHML */
                    208: 
                    209: #include "fetchXMLname_f.h"
                    210: 
                    211: /*----------------------------------------------------------------------
1.14      cvs       212:    GetXHTMLSSchema returns the XHTML Thot schema for document doc.
                    213:   ----------------------------------------------------------------------*/
                    214: #ifdef __STDC__
                    215: SSchema            GetXHTMLSSchema (Document doc)
                    216: #else
                    217: SSchema            GetXHTMLSSchema (doc)
                    218: Document          doc;
                    219: 
                    220: #endif
                    221: {
                    222:   SSchema      XHTMLSSchema;
                    223: 
                    224:    XHTMLSSchema = TtaGetSSchema (TEXT("HTML"), doc);
                    225:    if (XHTMLSSchema == NULL)
1.17      cvs       226:        XHTMLSSchema = TtaNewNature(doc, TtaGetDocumentSSchema(doc),
1.14      cvs       227:                                    TEXT("HTML"), TEXT("HTMLP"));
                    228:    return (XHTMLSSchema);
                    229: }
                    230: 
                    231: /*----------------------------------------------------------------------
1.1       cvs       232:    GetMathMLSSchema returns the MathML Thot schema for document doc.
                    233:   ----------------------------------------------------------------------*/
                    234: #ifdef __STDC__
                    235: SSchema            GetMathMLSSchema (Document doc)
                    236: #else
                    237: SSchema            GetMathMLSSchema (doc)
                    238: Document          doc;
                    239: 
                    240: #endif
                    241: {
                    242:   SSchema      MathMLSSchema;
                    243: 
1.13      cvs       244:   MathMLSSchema = TtaGetSSchema (TEXT("MathML"), doc);
                    245:   if (MathMLSSchema == NULL)
1.17      cvs       246:      MathMLSSchema = TtaNewNature(doc, 
                    247:                                  TtaGetDocumentSSchema(doc), TEXT("MathML"),
1.13      cvs       248:                                  TEXT("MathMLP"));
                    249:   return (MathMLSSchema);
1.1       cvs       250: }
                    251: 
                    252: /*----------------------------------------------------------------------
                    253:    GetGraphMLSSchema returns the GraphML Thot schema for document doc.
                    254:   ----------------------------------------------------------------------*/
                    255: #ifdef __STDC__
                    256: SSchema            GetGraphMLSSchema (Document doc)
                    257: #else
                    258: SSchema            GetGraphMLSSchema (doc)
                    259: Document          doc;
                    260: 
                    261: #endif
                    262: {
                    263:   SSchema      GraphMLSSchema;
                    264: 
1.8       cvs       265:   GraphMLSSchema = TtaGetSSchema (TEXT("GraphML"), doc);
1.1       cvs       266:   if (GraphMLSSchema == NULL)
1.17      cvs       267:     GraphMLSSchema = TtaNewNature(doc,
                    268:                                  TtaGetDocumentSSchema(doc), TEXT("GraphML"),
1.13      cvs       269:                                  TEXT("GraphMLP"));
1.1       cvs       270:   return (GraphMLSSchema);
                    271: }
                    272: 
                    273: /*----------------------------------------------------------------------
1.13      cvs       274:    GetXLinkSSchema returns the XLink Thot schema for document doc.
                    275:   ----------------------------------------------------------------------*/
                    276: #ifdef __STDC__
                    277: SSchema            GetXLinkSSchema (Document doc)
                    278: #else
                    279: SSchema            GetXLinkSSchema (doc)
                    280: Document          doc;
                    281: 
                    282: #endif
                    283: {
                    284:   SSchema      XLinkSSchema;
                    285: 
                    286:   XLinkSSchema = TtaGetSSchema (TEXT("XLink"), doc);
                    287:   if (XLinkSSchema == NULL)
1.17      cvs       288:     XLinkSSchema = TtaNewNature(doc, TtaGetDocumentSSchema(doc), TEXT("XLink"),
1.13      cvs       289:                                TEXT("XLinkP"));
                    290:   return (XLinkSSchema);
                    291: }
                    292: 
                    293: /*----------------------------------------------------------------------
                    294:    GetXMLSSchema returns the XML Thot schema for document doc.
1.1       cvs       295:   ----------------------------------------------------------------------*/
                    296: #ifdef __STDC__
                    297: SSchema            GetXMLSSchema (int XMLtype, Document doc)
                    298: #else
                    299: SSchema            GetXMLSSchema (XMLtype, doc)
                    300: Document          doc;
                    301: int                XMLtype;
                    302: #endif
                    303: {
1.14      cvs       304:   if (XMLtype == XHTML_TYPE)
                    305:     return GetXHTMLSSchema (doc);
                    306:   else if (XMLtype == MATH_TYPE)
1.13      cvs       307:     return GetMathMLSSchema (doc);
                    308:   else if (XMLtype == GRAPH_TYPE)
                    309:     return GetGraphMLSSchema (doc);
                    310:   else if (XMLtype == XLINK_TYPE)
1.15      cvs       311:     return GetXLinkSSchema (doc);
1.13      cvs       312:   else
                    313:     return NULL;
1.1       cvs       314: }
                    315: 
                    316: 
                    317: /*----------------------------------------------------------------------
1.22      cvs       318:   MapXMLElementType
                    319:   Generic function which searchs in the Element Mapping table, selected
                    320:   by the parameter XMLtype, the entry XMLname and returns the corresponding
                    321:   Thot element type.
1.1       cvs       322:    Returns:
1.22      cvs       323:     - ElTypeNum and ElSSchema into elType  ElTypeNum = 0 if not found.
1.1       cvs       324:     - content 
                    325:   ----------------------------------------------------------------------*/
                    326: #ifdef __STDC__
1.14      cvs       327: void               MapXMLElementType (int XMLtype,
                    328:                                      STRING XMLname,
                    329:                                      ElementType *elType,
                    330:                                      STRING *mappedName,
                    331:                                      CHAR_T *content,
                    332:                                      Document doc)
1.1       cvs       333: #else
1.14      cvs       334: void               MapXMLElementType (XMLtype,
                    335:                                      XMLname,
                    336:                                      elType,
                    337:                                      mappedName,
                    338:                                      content,
                    339:                                      doc)
1.6       cvs       340: int                XMLtype;
1.12      cvs       341: STRING             XMLname;
                    342: ElementType       *elType;
                    343: STRING            *mappedName;
                    344: CHAR_T           *content;
1.6       cvs       345: Document           doc;
1.1       cvs       346: #endif
                    347: {
                    348:    int                 i;
                    349:    ElemMapping        *ptr;
                    350: 
                    351:    /* Select the right table */
1.14      cvs       352:    if (XMLtype == XHTML_TYPE)
                    353:      ptr = XHTMLElemMappingTable;
                    354:    else if (XMLtype == MATH_TYPE)
1.1       cvs       355:      ptr = MathMLElemMappingTable;
                    356:    else if (XMLtype == GRAPH_TYPE)
                    357:      ptr = GraphMLElemMappingTable;
                    358:    else
                    359:      ptr = NULL;
1.16      cvs       360:    *mappedName = NULL;
1.1       cvs       361:    elType->ElTypeNum = 0;
                    362:    if (ptr != NULL)
                    363:      {
                    364:        /* search in the ElemMappingTable */
                    365:        i = 0;
                    366:        /* look for the first concerned entry in the table */
1.22      cvs       367:        while (ptr[i].XMLname[0] < XMLname[0] && ptr[i].XMLname[0] != WC_EOS)
1.1       cvs       368:         i++;
1.22      cvs       369: 
1.1       cvs       370:        /* look at all entries starting with the right character */
                    371:        do
1.22      cvs       372:         if (ustrcmp (ptr[i].XMLname, XMLname) || ptr[i].Level > ParsingLevel[doc])
                    373:           /* it's not the tag or this tag is not valid for the current parsing level */
1.1       cvs       374:           i++;
                    375:         else
                    376:           {
                    377:             elType->ElTypeNum = ptr[i].ThotType;
                    378:             if (elType->ElSSchema == NULL)
                    379:               elType->ElSSchema = GetXMLSSchema (XMLtype, doc);
                    380:             *mappedName = ptr[i].XMLname;
                    381:             *content = ptr[i].XMLcontents;
                    382:           }
                    383:        while (elType->ElTypeNum <= 0 && ptr[i].XMLname[0] == XMLname[0]);
                    384:      }
                    385: }
                    386: 
                    387: 
                    388: /*----------------------------------------------------------------------
                    389:    GetXMLElementName
1.22      cvs       390:    Generic function which searchs in the mapping table the XML name for
                    391:    a given Thot type.
1.1       cvs       392:   ----------------------------------------------------------------------*/
                    393: #ifdef __STDC__
1.9       cvs       394: void              GetXMLElementName (ElementType elType, CHAR_T** buffer)
1.1       cvs       395: #else
                    396: void              GetXMLElementName (elType, buffer)
                    397: ElementType       elType;
1.9       cvs       398: CHAR_T**          buffer;
1.1       cvs       399: #endif
                    400: {
                    401:    int                 i;
                    402:    ElemMapping        *ptr;
                    403:    STRING              name;
                    404: 
                    405:    if (elType.ElTypeNum > 0)
                    406:      {
                    407:        i = 0;
                    408:        /* Select the table which matches with the element schema */
                    409:        name = TtaGetSSchemaName (elType.ElSSchema);
                    410:        if (ustrcmp (TEXT("MathML"), name) == 0)
                    411:          ptr = MathMLElemMappingTable;
1.4       cvs       412:        else if (ustrcmp (TEXT("GraphML"), name) == 0)
1.1       cvs       413:          ptr = GraphMLElemMappingTable;
1.4       cvs       414:         else
                    415:          ptr = NULL;
1.1       cvs       416: 
1.4       cvs       417:        if (ptr)
                    418:          do
                    419:            {
1.1       cvs       420:            if (ptr[i].ThotType == elType.ElTypeNum)
                    421:              {
                    422:                *buffer = ptr[i].XMLname;
                    423:                return;
                    424:              }
                    425:            i++;
1.4       cvs       426:            }
1.22      cvs       427:          while (ptr[i].XMLname[0] != WC_EOS);    
1.1       cvs       428:      }
                    429:    *buffer = TEXT("???");
                    430:    return;
1.22      cvs       431: }
                    432: /*----------------------------------------------------------------------
                    433:    XmlMapAttribute
                    434:    Generic function which searchs in the Attribute Mapping Table (table)
                    435:    the entry attrName associated to the element elementName.
                    436:    Returns the corresponding entry.
                    437:   ----------------------------------------------------------------------*/
                    438: #ifdef __STDC__
                    439: int               XmlMapAttribute (CHAR_T *attrName,
                    440:                                   CHAR_T *elementName,
                    441:                                   Document doc,
                    442:                                   AttributeMapping table[])
                    443: #else
                    444: int               XmlMapAttribute (attrName,
                    445:                                   elementName,
                    446:                                   doc,
                    447:                                   table)
                    448: CHAR_T           *attrName;
                    449: CHAR_T           *elementName;
                    450: Document          doc;
                    451: AttributeMapping  table[];
                    452: #endif
                    453: {
                    454:   int             i;
                    455: 
                    456:   i = 0;
                    457:   /* look for the first concerned entry in the table */
                    458:   while (table[i].XMLattribute[0] < attrName[0] && table[i].XMLattribute[0] != WC_EOS)
                    459:     i++;
                    460:   while (table[i].XMLattribute[0] == attrName[0])
                    461:     {
                    462:       if (table[i].Level > ParsingLevel[doc] ||
                    463:          ustrcasecmp (table[i].XMLattribute, attrName) ||
                    464:          (table[i].XMLelement[0] != WC_EOS && ustrcasecmp (table[i].XMLelement, elementName)))
                    465:        i++;
                    466:       else
                    467:        return (i);
                    468:     }
                    469:   return (i);
1.1       cvs       470: }

Webmaster