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

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.20      cvs        26: 
                     27: /*----------------------------------------------------------------------
                     28:   LowercaseGI converts uppercases into lovercases
                     29:   GI is the input string
                     30:   gi is the output string
                     31:   ----------------------------------------------------------------------*/
                     32: #ifdef __STDC__
                     33: static void      LowercaseGI (CHAR_T *GI, CHAR_T *gi)
                     34: #else
                     35: static void      LowercaseGI (GI, gi)
                     36: CHAR_T          *GI;
                     37: CHAR_T          *gi;
                     38: #endif
1.4       cvs        39: {
1.20      cvs        40:   int        i;
1.1       cvs        41: 
1.21    ! cvs        42:   for (i = 0; GI[i] != WC_EOS && i < MaxTypeNameLength-1; i++)
1.20      cvs        43:     {
                     44:       if (GI[i] >= TEXT('A') && GI[i] <= TEXT('Z'))
                     45:        gi[i] = (CHAR_T) ((int) GI[i] + 32);
                     46:       else
                     47:        gi[i] = GI[i];
                     48:     }
                     49:   gi[i] = WC_EOS;
                     50: }
1.4       cvs        51: 
1.1       cvs        52: 
                     53: /*----------------------------------------------------------------------
                     54:    MapGI
                     55:    search in the mapping tables the entry for the element of
                     56:    name GI and returns the rank of that entry.
                     57:    When returning, schema contains the Thot SSchema that defines that element,
                     58:    Returns -1 and schema = NULL if not found.
                     59:   ----------------------------------------------------------------------*/
                     60: #ifdef __STDC__
1.20      cvs        61: int                 MapGI (CHAR_T *gi, SSchema *schema, Document doc)
1.1       cvs        62: #else
                     63: int                 MapGI (gi, schema, doc)
1.12      cvs        64: CHAR_T*             gi;
1.9       cvs        65: SSchema*            schema;
1.1       cvs        66: Document            doc;
                     67: #endif
                     68: {
1.9       cvs        69:   ElementType     elType;
1.11      cvs        70:   CHAR_T*         ptr; 
1.12      cvs        71:   CHAR_T          c;
1.9       cvs        72:   int             i;
                     73:   int             entry;
1.14      cvs        74:   ThotBool       isHTML;
1.1       cvs        75: 
                     76:   /* TODO: use NameSpaces to search in the right table */
                     77:   entry = -1;
                     78:   if (*schema == NULL)
                     79:     {
                     80:       isHTML = FALSE;
                     81:       ptr = NULL;
                     82:     }
                     83:   else
                     84:     {
                     85:       ptr = TtaGetSSchemaName (*schema);
1.11      cvs        86:       isHTML = !ustrcmp (ptr, TEXT("HTML"));
1.1       cvs        87:     }
                     88: 
                     89:   i = 0;
                     90:   if (*schema == NULL || isHTML)
                     91:     {
                     92:       /*
                     93:        First convert the first char into lower case to locate
                     94:        registered tags in the HTML mapping table.
                     95:        Entries are registered in upper case and in alphabetic order.
                     96:       */
                     97: 
                     98:       /* TODO: define a function which works on unicode */
1.12      cvs        99:       c = utolower (gi[0]);
1.1       cvs       100:       /* look for the first concerned entry in the table */
1.16      cvs       101:       while (pHTMLGIMapping[i].XMLname[0] < c
                    102:             && pHTMLGIMapping[i].XMLname[0] != EOS)
1.1       cvs       103:        i++;
                    104: 
                    105:       /* look at all entries starting with the right character */
                    106:       do
                    107:        {
1.16      cvs       108:          if (ustrcasecmp (pHTMLGIMapping[i].XMLname, gi))
1.1       cvs       109:            i++;
                    110:          else
                    111:            entry = i;
                    112:        }
1.16      cvs       113:       while (entry < 0 && pHTMLGIMapping[i].XMLname[0] == c);
1.1       cvs       114:     }
                    115: 
                    116:   if (entry < 0)
                    117:     if (*schema != NULL && isHTML)
                    118:       *schema = NULL;
                    119:     else
                    120:       /* not found. Look at the XML mapping tables */
                    121:       {
                    122:        elType.ElTypeNum = 0;
                    123:        elType.ElSSchema = *schema;
                    124: 
1.11      cvs       125:        if (!ptr || !ustrcmp (ptr, TEXT("MathML")))
1.1       cvs       126:          MapXMLElementType (MATH_TYPE, gi, &elType, &ptr, &c, doc);
1.11      cvs       127:        if (elType.ElTypeNum == 0 && (!ptr || !ustrcmp (ptr, TEXT("GraphML"))))
1.1       cvs       128:          MapXMLElementType (GRAPH_TYPE, gi, &elType, &ptr, &c, doc);
                    129:        if (elType.ElTypeNum == 0)
                    130:          {
                    131:             entry = -1;
                    132:            elType.ElSSchema = NULL;
                    133:            *schema = NULL;
                    134:          }
                    135:        else
                    136:          {
                    137:             entry = elType.ElTypeNum;
                    138:             *schema = elType.ElSSchema;
                    139:          }
                    140:       }
                    141:   return entry;
                    142: }
                    143: 
                    144: /*----------------------------------------------------------------------
                    145:    GIType  search in mapping tables the Element type associated with
                    146:    a given GI Name. If not found returns zero.
                    147:   ----------------------------------------------------------------------*/
                    148: #ifdef __STDC__
1.12      cvs       149: void                GIType (CHAR_T* gi, ElementType *elType, Document doc)
1.1       cvs       150: #else
                    151: void                GIType (gi, elType, doc)
1.12      cvs       152: CHAR_T*             gi;
1.9       cvs       153: ElementType*        elType;
                    154: Document            doc;
1.1       cvs       155: #endif
                    156: {
1.12      cvs       157:   CHAR_T              c;
                    158:   CHAR_T*             ptr;
1.1       cvs       159:   int                 i;
                    160: 
                    161:   /* TODO: use NameSpaces to search in the right table */
                    162:   elType->ElSSchema = NULL;
                    163:   elType->ElTypeNum = 0;
                    164: 
                    165:   /*
                    166:     First convert the first char into lower case to locate
                    167:     registered tags in the HTML mapping table.
                    168:     Entries are registered in upper case and in alphabetic order.
                    169:   */
                    170: 
                    171:   /* TODO: define a function which works on unicode */
1.12      cvs       172:   c = utolower (gi[0]);
1.1       cvs       173: 
                    174:   i = 0;
                    175:   /* look for the first concerned entry in the table */
1.16      cvs       176:   while (pHTMLGIMapping[i].XMLname[0] < c &&
                    177:         pHTMLGIMapping[i].XMLname[0] != EOS)
1.1       cvs       178:     i++;
                    179:   /* look at all entries starting with the right character */
                    180:   do
                    181:     {
1.16      cvs       182:       if (!ustrcasecmp (pHTMLGIMapping[i].XMLname, gi))
1.4       cvs       183:       {
                    184:        if (doc != 0)
1.11      cvs       185:         elType->ElSSchema = TtaGetSSchema (TEXT("HTML"), doc);
1.16      cvs       186:        elType->ElTypeNum = pHTMLGIMapping[i].ThotType;
1.4       cvs       187:        return;
                    188:       }
1.1       cvs       189:       i++;
                    190:     }
1.16      cvs       191:   while (pHTMLGIMapping[i].XMLname[0] == c);
1.1       cvs       192: 
                    193:   /* if not found, look at the XML mapping tables */
                    194:   MapXMLElementType (MATH_TYPE, gi, elType, &ptr, &c, doc);
                    195:   if (elType->ElTypeNum == 0)
1.4       cvs       196:   MapXMLElementType (GRAPH_TYPE, gi, elType, &ptr, &c, doc);
                    197: }
                    198: 
                    199: /*----------------------------------------------------------------------
                    200:    MapAttr search in all AttributeMappingTables the entry for the
                    201:    attribute of name Attr and returns a pointer to that entry,
                    202:    as well as the corresponding Thot SSchema
                    203:   ----------------------------------------------------------------------*/
                    204: #ifdef __STDC__
1.18      cvs       205: AttributeMapping   *MapAttr (CHAR_T *attrName, SSchema *schema, int elemEntry, Document doc)
1.4       cvs       206: #else
1.18      cvs       207: AttributeMapping   *MapAttr (attrName, schema, elemEntry, doc)
                    208: CHAR_T             *attrName;
                    209: SSchema            *schema;
1.4       cvs       210: int                 elemEntry;
                    211: Document            doc;
                    212: #endif
                    213: {
1.20      cvs       214:   typeName          attr, elem;
1.18      cvs       215:   int               i;
1.20      cvs       216:   int               thotType;
                    217: 
1.18      cvs       218:   *schema = TtaGetDocumentSSchema (doc);
1.20      cvs       219:   LowercaseGI (attrName, attr);
                    220:   LowercaseGI (pHTMLGIMapping[elemEntry].XMLname, elem);
                    221:   i = MapXMLAttribute (XHTML_TYPE, attr, elem, doc, &thotType);
                    222:   if (i < 0)
1.18      cvs       223:     /* not found */
                    224:     return (NULL);
1.4       cvs       225:   else
1.20      cvs       226:     return (&(pHTMLAttributeMapping[i]));
1.4       cvs       227: }
                    228: 
1.18      cvs       229: 
1.4       cvs       230: /*----------------------------------------------------------------------
1.18      cvs       231:    MapHTMLAttribute
                    232:    Search in the Attribute Mapping Table the entry for the attribute
                    233:    of name Attr and returns the corresponding Thot attribute type.
1.4       cvs       234:   ----------------------------------------------------------------------*/
                    235: #ifdef __STDC__
1.18      cvs       236: AttributeMapping *MapHTMLAttribute (CHAR_T *attrName,
                    237:                                    AttributeType *attrType,
                    238:                                    CHAR_T *elementName,
                    239:                                    Document doc)
1.4       cvs       240: #else
1.18      cvs       241: AttributeMapping *MapHTMLAttribute (attrName,
                    242:                                    attrType,
                    243:                                    elementName,
                    244:                                     doc)
                    245: CHAR_T*           attrName;
                    246: AttributeType*    attrType;
                    247: CHAR_T*           elementName;
                    248: Document          doc;
1.4       cvs       249: #endif
                    250: {
1.18      cvs       251:   int                 i;
1.4       cvs       252: 
1.18      cvs       253:   attrType->AttrSSchema = GetXHTMLSSchema (doc);
1.20      cvs       254:   i = MapXMLAttribute (XHTML_TYPE, attrName, elementName, doc, &(attrType->AttrTypeNum));
                    255:   if (i < 0)
                    256:     return (NULL);
1.4       cvs       257:   else
1.20      cvs       258:     return (&(pHTMLAttributeMapping[i]));
1.1       cvs       259: }
1.18      cvs       260: 

Webmaster