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

1.1       cvs         1: /*
                      2:  *
1.55    ! vatton      3:  *  (c) COPYRIGHT MIT and INRIA, 1996-2002
1.1       cvs         4:  *  Please first read the full copyright statement in file COPYRIGHT.
                      5:  *
                      6:  */
                      7:  
                      8: /*
                      9:  *
                     10:  * fetchXMLname
                     11:  *
1.46      cvs        12:  * Authors: I. Vatton
                     13:  *          L. Carcone
1.1       cvs        14:  *
                     15:  */
                     16: 
                     17: #define THOT_EXPORT extern
                     18: #include "amaya.h"
                     19: #include "parser.h"
1.24      cvs        20: #include "HTMLnames.h"
                     21: #include "MathMLnames.h"
1.49      vatton     22: #include "SVGnames.h"
1.24      cvs        23: #include "XLinknames.h"
                     24: 
1.35      cvs        25: /* define some pointers to let other parser functions access the local table */
1.24      cvs        26: int               HTML_ENTRIES = (sizeof(XHTMLElemMappingTable) / sizeof(ElemMapping));
                     27: ElemMapping      *pHTMLGIMapping = XHTMLElemMappingTable;
                     28: AttributeMapping *pHTMLAttributeMapping = XHTMLAttributeMappingTable;
1.14      cvs        29: 
1.35      cvs        30: XmlEntity        *pXhtmlEntityTable = XhtmlEntityTable;
                     31: XmlEntity        *pMathEntityTable = MathEntityTable;
1.1       cvs        32: 
                     33: #include "fetchXMLname_f.h"
                     34: 
1.39      cvs        35: /* Global variables used by the entity mapping */
                     36: static int        XHTMLSup = 0;
                     37: static int        MathSup = 0;
                     38: 
1.1       cvs        39: /*----------------------------------------------------------------------
1.14      cvs        40:    GetXHTMLSSchema returns the XHTML Thot schema for document doc.
                     41:   ----------------------------------------------------------------------*/
1.55    ! vatton     42: SSchema GetXHTMLSSchema (Document doc)
1.14      cvs        43: {
                     44:   SSchema      XHTMLSSchema;
                     45: 
1.43      cvs        46:    XHTMLSSchema = TtaGetSSchema ("HTML", doc);
1.14      cvs        47:    if (XHTMLSSchema == NULL)
1.17      cvs        48:        XHTMLSSchema = TtaNewNature(doc, TtaGetDocumentSSchema(doc),
1.46      cvs        49:                                   "HTML", "HTMLP");
1.14      cvs        50:    return (XHTMLSSchema);
                     51: }
                     52: 
1.54      cvs        53: /*----------------------------------------------------------------------
1.1       cvs        54:    GetMathMLSSchema returns the MathML Thot schema for document doc.
                     55:   ----------------------------------------------------------------------*/
1.55    ! vatton     56: SSchema GetMathMLSSchema (Document doc)
1.1       cvs        57: {
                     58:   SSchema      MathMLSSchema;
                     59: 
1.43      cvs        60:   MathMLSSchema = TtaGetSSchema ("MathML", doc);
1.13      cvs        61:   if (MathMLSSchema == NULL)
1.17      cvs        62:      MathMLSSchema = TtaNewNature(doc, 
1.46      cvs        63:                                  TtaGetDocumentSSchema(doc),
                     64:                                  "MathML", "MathMLP");
1.13      cvs        65:   return (MathMLSSchema);
1.1       cvs        66: }
                     67: 
                     68: /*----------------------------------------------------------------------
1.49      vatton     69:    GetSVGSSchema returns the SVG Thot schema for document doc.
1.1       cvs        70:   ----------------------------------------------------------------------*/
1.55    ! vatton     71: SSchema GetSVGSSchema (Document doc)
1.1       cvs        72: 
                     73: {
1.49      vatton     74:   SSchema      SVGSSchema;
1.1       cvs        75: 
1.49      vatton     76:   SVGSSchema = TtaGetSSchema ("SVG", doc);
                     77:   if (SVGSSchema == NULL)
                     78:     SVGSSchema = TtaNewNature(doc,
1.46      cvs        79:                                  TtaGetDocumentSSchema(doc),
1.49      vatton     80:                                  "SVG", "SVGP");
                     81:   return (SVGSSchema);
1.1       cvs        82: }
                     83: 
                     84: /*----------------------------------------------------------------------
1.13      cvs        85:    GetXLinkSSchema returns the XLink Thot schema for document doc.
                     86:   ----------------------------------------------------------------------*/
1.55    ! vatton     87: SSchema GetXLinkSSchema (Document doc)
1.13      cvs        88: 
                     89: {
                     90:   SSchema      XLinkSSchema;
                     91: 
1.43      cvs        92:   XLinkSSchema = TtaGetSSchema ("XLink", doc);
1.13      cvs        93:   if (XLinkSSchema == NULL)
1.46      cvs        94:     XLinkSSchema = TtaNewNature(doc, TtaGetDocumentSSchema(doc),
                     95:                                "XLink", "XLinkP");
1.13      cvs        96:   return (XLinkSSchema);
                     97: }
                     98: 
                     99: /*----------------------------------------------------------------------
1.46      cvs       100:    GetGenericXMLSSchema returns the XML Thot schema for the document doc.
                    101:   ----------------------------------------------------------------------*/
1.55    ! vatton    102: SSchema GetGenericXMLSSchema (Document doc)
1.46      cvs       103: 
                    104: {
                    105:   SSchema      XMLSSchema;
                    106: 
                    107:   XMLSSchema = TtaGetSSchema ("XML", doc);
                    108:   if (XMLSSchema == NULL)
                    109:       XMLSSchema = TtaNewNature(doc, TtaGetDocumentSSchema(doc),
                    110:                                "XML", "XMLP");
                    111:   return (XMLSSchema);
                    112: }
                    113: 
                    114: /*----------------------------------------------------------------------
                    115:    GetGenericXMLSSchemaByUri returns the XML Thot schema for the document doc.
                    116:   ----------------------------------------------------------------------*/
1.55    ! vatton    117: SSchema GetGenericXMLSSchemaByUri (char *uriName, Document doc, ThotBool *isnew)
1.46      cvs       118: 
                    119: {
                    120:   SSchema      XMLSSchema;
                    121: 
                    122:   XMLSSchema = TtaGetSSchemaByUri (uriName, doc);
                    123:   if (XMLSSchema == NULL)
                    124:     {
                    125:       XMLSSchema = TtaNewNature(doc, TtaGetDocumentSSchema(doc),
                    126:                                "XML", "XMLP");
                    127:       *isnew = TRUE;
                    128:     }
                    129:   return (XMLSSchema);
                    130: }
                    131: 
                    132: /*----------------------------------------------------------------------
1.13      cvs       133:    GetXMLSSchema returns the XML Thot schema for document doc.
1.1       cvs       134:   ----------------------------------------------------------------------*/
1.45      cvs       135: SSchema GetXMLSSchema (int XMLtype, Document doc)
1.38      cvs       136: 
1.1       cvs       137: {
1.14      cvs       138:   if (XMLtype == XHTML_TYPE)
                    139:     return GetXHTMLSSchema (doc);
                    140:   else if (XMLtype == MATH_TYPE)
1.13      cvs       141:     return GetMathMLSSchema (doc);
1.51      cvs       142:   else if (XMLtype == SVG_TYPE)
1.49      vatton    143:     return GetSVGSSchema (doc);
1.13      cvs       144:   else if (XMLtype == XLINK_TYPE)
1.15      cvs       145:     return GetXLinkSSchema (doc);
1.13      cvs       146:   else
                    147:     return NULL;
1.1       cvs       148: }
                    149: 
                    150: /*----------------------------------------------------------------------
1.22      cvs       151:   MapXMLElementType
                    152:   Generic function which searchs in the Element Mapping table, selected
                    153:   by the parameter XMLtype, the entry XMLname and returns the corresponding
                    154:   Thot element type.
1.55    ! vatton    155:   Returns:
1.22      cvs       156:     - ElTypeNum and ElSSchema into elType  ElTypeNum = 0 if not found.
1.55    ! vatton    157:     - content information about this entry
        !           158:     - checkProfile TRUE if the entry is valid for the current Doc profile.
1.1       cvs       159:   ----------------------------------------------------------------------*/
1.55    ! vatton    160: void MapXMLElementType (int XMLtype, char *XMLname, ElementType *elType,
        !           161:                        char **mappedName, char *content,
        !           162:                        ThotBool *checkProfile, Document doc)
1.1       cvs       163: {
                    164:    int                 i;
                    165:    ElemMapping        *ptr;
                    166: 
1.32      cvs       167:    /* Initialize variables */
                    168:    *mappedName = NULL;
1.55    ! vatton    169:    *checkProfile = TRUE;
1.32      cvs       170:    elType->ElTypeNum = 0;
                    171: 
1.1       cvs       172:    /* Select the right table */
1.14      cvs       173:    if (XMLtype == XHTML_TYPE)
                    174:      ptr = XHTMLElemMappingTable;
                    175:    else if (XMLtype == MATH_TYPE)
1.31      cvs       176:      {
1.53      cvs       177:        if (TtaGetDocumentProfile(doc) == L_Basic &&
                    178:           DocumentTypes[doc] == docHTML)
1.32      cvs       179:         {
                    180:           /* Maths are not allowed in this document */
                    181:           ptr = NULL;
1.55    ! vatton    182:           *checkProfile = FALSE;
1.32      cvs       183:         }
1.31      cvs       184:        else
                    185:         ptr = MathMLElemMappingTable;
                    186:      }
1.51      cvs       187:    else if (XMLtype == SVG_TYPE)
1.31      cvs       188:      {
1.53      cvs       189:        if (TtaGetDocumentProfile(doc) == L_Basic &&
                    190:           DocumentTypes[doc] == docHTML)
1.32      cvs       191:         {
                    192:           /* Graphics are not allowed in this document */
                    193:           ptr = NULL;
1.55    ! vatton    194:           *checkProfile = FALSE;
1.32      cvs       195:         }
1.31      cvs       196:        else
1.49      vatton    197:         ptr = SVGElemMappingTable;
1.31      cvs       198:      }
1.1       cvs       199:    else
                    200:      ptr = NULL;
1.32      cvs       201:    
1.1       cvs       202:    if (ptr != NULL)
                    203:      {
                    204:        /* search in the ElemMappingTable */
                    205:        i = 0;
                    206:        /* look for the first concerned entry in the table */
1.44      cvs       207:        while (ptr[i].XMLname[0] < XMLname[0] && ptr[i].XMLname[0] != EOS)
1.32      cvs       208:         i++;     
1.1       cvs       209:        /* look at all entries starting with the right character */
                    210:        do
1.44      cvs       211:         if (strcmp (ptr[i].XMLname, XMLname))
1.32      cvs       212:           /* it's not the tag */
1.1       cvs       213:           i++;
1.53      cvs       214:         else if (TtaGetDocumentProfile(doc) != L_Other &&
                    215:                  !(ptr[i].Level & TtaGetDocumentProfile(doc)))
1.32      cvs       216:           {
1.53      cvs       217:             /* this tag is not valid in the document profile */
1.55    ! vatton    218:             *checkProfile = FALSE;
1.32      cvs       219:             i++;
                    220:           }
1.1       cvs       221:         else
                    222:           {
                    223:             elType->ElTypeNum = ptr[i].ThotType;
                    224:             if (elType->ElSSchema == NULL)
                    225:               elType->ElSSchema = GetXMLSSchema (XMLtype, doc);
                    226:             *mappedName = ptr[i].XMLname;
                    227:             *content = ptr[i].XMLcontents;
                    228:           }
                    229:        while (elType->ElTypeNum <= 0 && ptr[i].XMLname[0] == XMLname[0]);
                    230:      }
                    231: }
                    232: 
                    233: 
                    234: /*----------------------------------------------------------------------
                    235:    GetXMLElementName
1.52      cvs       236:    Generic function which searchs in the mapping tables the XML name for
1.22      cvs       237:    a given Thot type.
1.1       cvs       238:   ----------------------------------------------------------------------*/
1.55    ! vatton    239: char *GetXMLElementName (ElementType elType, Document doc)
1.1       cvs       240: {
1.46      cvs       241:   ElemMapping  *ptr;
                    242:   char         *name;
                    243:   int           i;
                    244:   ThotBool      invalid = FALSE;
1.27      cvs       245: 
                    246:   if (elType.ElTypeNum > 0)
                    247:     {
                    248:       i = 0;
                    249:       /* Select the table which matches with the element schema */
                    250:       name = TtaGetSSchemaName (elType.ElSSchema);
1.44      cvs       251:       if (strcmp ("MathML", name) == 0)
1.27      cvs       252:        ptr = MathMLElemMappingTable;
1.49      vatton    253:       else if (strcmp ("SVG", name) == 0)
                    254:        ptr = SVGElemMappingTable;
1.27      cvs       255:       else
                    256:        ptr = XHTMLElemMappingTable;
                    257:       
                    258:       if (ptr)
                    259:        do
                    260:          {
                    261:            if (ptr[i].ThotType == elType.ElTypeNum)
                    262:              {
1.37      cvs       263:                if (doc == 0 || 
1.53      cvs       264:                    TtaGetDocumentProfile(doc) == L_Other ||
                    265:                    (ptr[i].Level & TtaGetDocumentProfile(doc)))
1.27      cvs       266:                  return ptr[i].XMLname;
                    267:                else
                    268:                  invalid = TRUE;
                    269:              }
                    270:            i++;
                    271:          }
1.44      cvs       272:        while (ptr[i].XMLname[0] != EOS);         
1.27      cvs       273:     }
                    274:   if (invalid)
1.43      cvs       275:     return "";
1.27      cvs       276:   else
1.43      cvs       277:     return "???";
1.22      cvs       278: }
1.25      cvs       279: 
                    280: 
1.29      cvs       281: 
                    282: /*----------------------------------------------------------------------
1.30      cvs       283:    IsXMLElementInline
1.52      cvs       284:    Generic function which searchs in the mapping tables if a given
1.29      cvs       285:    Thot type is an inline character or not
                    286:   ----------------------------------------------------------------------*/
1.55    ! vatton    287: ThotBool IsXMLElementInline (ElementType elType, Document doc)
1.29      cvs       288: {
1.34      cvs       289:   int            i;
                    290:   ThotBool       ret = FALSE;
1.45      cvs       291:   char          *name;
1.34      cvs       292:   ElemMapping   *ptr;
1.29      cvs       293: 
                    294:   if (elType.ElTypeNum > 0)
                    295:     {
                    296:       i = 0;
                    297:       /* Select the table which matches with the element schema */
                    298:       name = TtaGetSSchemaName (elType.ElSSchema);
1.44      cvs       299:       if (strcmp ("MathML", name) == 0)
1.29      cvs       300:        ptr = MathMLElemMappingTable;
1.49      vatton    301:       else if (strcmp ("SVG", name) == 0)
                    302:        ptr = SVGElemMappingTable;
1.52      cvs       303:       else if (strcmp ("HTML", name) == 0)
                    304:        ptr = XHTMLElemMappingTable;
1.29      cvs       305:       else
1.52      cvs       306:        ptr = NULL;
1.29      cvs       307:       
                    308:       if (ptr)
                    309:        {
1.44      cvs       310:          while (ptr[i].XMLname[0] != EOS &&
1.29      cvs       311:                 ptr[i].ThotType != elType.ElTypeNum)
                    312:            i++;
                    313:          if (ptr[i].ThotType == elType.ElTypeNum)
                    314:            ret = ptr[i].Inline;
                    315:        }
                    316:     }
                    317:   return ret;
                    318: }
                    319: 
1.22      cvs       320: /*----------------------------------------------------------------------
1.24      cvs       321:    MapXMLAttribute
1.22      cvs       322:    Generic function which searchs in the Attribute Mapping Table (table)
                    323:    the entry attrName associated to the element elementName.
1.24      cvs       324:    Returns the corresponding entry or -1.
1.22      cvs       325:   ----------------------------------------------------------------------*/
1.55    ! vatton    326: int MapXMLAttribute (int XMLtype, char *attrName, char *elementName,
        !           327:                     ThotBool *checkProfile, Document doc, int *thotType)
1.22      cvs       328: {
1.24      cvs       329:   int               i;
                    330:   AttributeMapping *ptr;
                    331: 
1.33      cvs       332:   /* Initialization */
1.55    ! vatton    333:   *checkProfile = TRUE;
1.33      cvs       334:   i = 1;
                    335:   *thotType = 0;
1.50      cvs       336:   
                    337:   /* Select the right table */
                    338:   if (XMLtype == XHTML_TYPE)
                    339:     ptr = XHTMLAttributeMappingTable;
                    340:   else if (XMLtype == MATH_TYPE)
                    341:     ptr = MathMLAttributeMappingTable;
1.51      cvs       342:   else if (XMLtype == SVG_TYPE)
1.50      cvs       343:     ptr = SVGAttributeMappingTable;
                    344:   else if (XMLtype == XLINK_TYPE)
                    345:     ptr = XLinkAttributeMappingTable;
                    346:   else
                    347:     ptr = NULL;
                    348:   
1.24      cvs       349:   if (ptr == NULL)
                    350:     return -1;
1.50      cvs       351:   
                    352:   if (strcmp (attrName, "unknown_attr") == 0)
                    353:     {
                    354:       *thotType = ptr[0].ThotAttribute;
                    355:       return 0;
                    356:     }
1.22      cvs       357: 
                    358:   /* look for the first concerned entry in the table */
1.33      cvs       359:   while (ptr[i].XMLattribute[0] < attrName[0] && 
1.44      cvs       360:         ptr[i].XMLattribute[0] != EOS)
1.22      cvs       361:     i++;
1.33      cvs       362: 
1.24      cvs       363:   while (ptr[i].XMLattribute[0] == attrName[0])
1.22      cvs       364:     {
1.44      cvs       365:       if (strcmp (ptr[i].XMLattribute, attrName) ||
                    366:          (ptr[i].XMLelement[0] != EOS &&
                    367:           strcmp (ptr[i].XMLelement, elementName)))
1.22      cvs       368:        i++;
1.53      cvs       369:       else if (TtaGetDocumentProfile(doc) != L_Other &&
                    370:               !(ptr[i].Level & TtaGetDocumentProfile(doc)))
1.33      cvs       371:        {
1.55    ! vatton    372:          *checkProfile = FALSE;
1.33      cvs       373:          i++;
                    374:        }
1.22      cvs       375:       else
1.24      cvs       376:        {
                    377:          *thotType = ptr[i].ThotAttribute;
                    378:          return (i);
                    379:        }
1.22      cvs       380:     }
1.24      cvs       381:   return (-1);
1.25      cvs       382: }
                    383: 
                    384: 
                    385: /*----------------------------------------------------------------------
1.37      cvs       386:    GetXMLAttributeName
1.52      cvs       387:    Generic function which searchs in the mapping tables the XML name for
1.25      cvs       388:    a given Thot type.
                    389:   ----------------------------------------------------------------------*/
1.55    ! vatton    390: char *GetXMLAttributeName (AttributeType attrType, ElementType elType,
        !           391:                           Document doc)
1.25      cvs       392: {
                    393:   AttributeMapping   *ptr;
1.45      cvs       394:   char               *name, *tag;
1.25      cvs       395:   int                 i;
1.27      cvs       396:   ThotBool            invalid = FALSE;
1.25      cvs       397: 
1.27      cvs       398:   if (attrType.AttrTypeNum > 0)
                    399:     {
1.28      cvs       400:       /* get the specific element tag */
                    401:       if (elType.ElTypeNum > 0)
                    402:        tag = GetXMLElementName (elType, doc);
                    403:       else
1.43      cvs       404:        tag = "";
1.28      cvs       405: 
1.27      cvs       406:       i = 0;
                    407:       /* Select the table which matches with the element schema */
                    408:       name = TtaGetSSchemaName (attrType.AttrSSchema);
1.44      cvs       409:       if (strcmp ("MathML", name) == 0)
1.27      cvs       410:        ptr = MathMLAttributeMappingTable;
1.49      vatton    411:       else if (strcmp ("SVG", name) == 0)
                    412:        ptr = SVGAttributeMappingTable;
1.44      cvs       413:       else if (strcmp ("XLink", name) == 0)
1.27      cvs       414:        ptr = XLinkAttributeMappingTable;
                    415:       else
                    416:        ptr = XHTMLAttributeMappingTable;
                    417:       
                    418:       if (ptr)
                    419:        do
                    420:          {
1.28      cvs       421:            if (ptr[i].ThotAttribute == attrType.AttrTypeNum &&
1.44      cvs       422:                (ptr[i].XMLelement[0] == EOS ||
                    423:                 !strcmp (ptr[i].XMLelement, tag)))
1.25      cvs       424:              {
1.48      cvs       425:                if (doc != 0 &&
1.53      cvs       426:                    TtaGetDocumentProfile(doc) != L_Other &&
                    427:                    !(ptr[i].Level & TtaGetDocumentProfile(doc)))
1.48      cvs       428:                  invalid = TRUE;
                    429:                else
1.25      cvs       430:                  return ptr[i].XMLattribute;
                    431:              }
                    432:            i++;
1.27      cvs       433:          }
1.44      cvs       434:        while (ptr[i].XMLattribute[0] != EOS);    
1.27      cvs       435:     }
                    436:   if (invalid)
1.43      cvs       437:     return "";
1.27      cvs       438:   else
1.43      cvs       439:     return "???";
1.36      cvs       440: }
                    441: 
                    442: /*----------------------------------------------------------------------
                    443:    MapXMLEntity
                    444:    Generic function which searchs in the Entity Mapping Table (table)
                    445:    the entry entityName and give the corresponding decimal value.
                    446:    Returns FALSE if entityName is not found.
                    447:   ----------------------------------------------------------------------*/
1.46      cvs       448: ThotBool      MapXMLEntity (int XMLtype, char *entityName, int *entityValue)
1.36      cvs       449: {
                    450:   XmlEntity  *ptr;
                    451:   ThotBool    found;
1.38      cvs       452:   int         inf, sup, med, rescomp;
1.36      cvs       453: 
1.38      cvs       454:   /* Initialization */
1.36      cvs       455:   found = FALSE;
1.42      cvs       456:   sup = 0;
1.36      cvs       457: 
                    458:   /* Select the right table */
                    459:   if (XMLtype == XHTML_TYPE)
1.39      cvs       460:     {
                    461:       ptr = XhtmlEntityTable;
                    462:       if (XHTMLSup == 0)
                    463:        for (XHTMLSup = 0; ptr[XHTMLSup].charCode > 0; XHTMLSup++);
                    464:       sup = XHTMLSup;
                    465:     }
1.36      cvs       466:   else if (XMLtype == MATH_TYPE)
1.39      cvs       467:     {
                    468:       ptr = MathEntityTable;
                    469:       if (MathSup == 0)
                    470:        for (MathSup = 0; ptr[MathSup].charCode > 0; MathSup++);
                    471:       sup = MathSup;
                    472:     }
1.36      cvs       473:   else
                    474:     ptr = NULL;
                    475:   
                    476:   if (ptr == NULL)
1.38      cvs       477:     return found;
                    478: 
                    479:   inf = 0;
                    480:   while (sup >= inf && !found)
                    481:     /* Dichotomic research */
1.36      cvs       482:     {
1.38      cvs       483:       med = (sup + inf) / 2;
1.44      cvs       484:       rescomp = strcmp (ptr[med].charName, entityName);
1.38      cvs       485:       if (rescomp == 0)
                    486:        {
                    487:          /* entity found */
                    488:          *entityValue = ptr[med].charCode;
                    489:          found = TRUE;
                    490:        }
                    491:       else
                    492:        {
                    493:          if (rescomp > 0)
                    494:            sup = med - 1;
                    495:          else
                    496:            inf = med + 1;
                    497:        }
1.36      cvs       498:     }
1.38      cvs       499:   return found;
                    500:  }
1.39      cvs       501: 
                    502: /*----------------------------------------------------------------------
                    503:    MapEntityByCode
                    504:    Generic function which searchs in the Entity Mapping Table (table)
                    505:    the entry with code entityValue and give the corresponding name.
                    506:    Returns FALSE if entityValue is not found.
                    507:   ----------------------------------------------------------------------*/
1.40      cvs       508: void MapEntityByCode (int entityValue, char **entityName)
1.39      cvs       509: {
                    510:   XmlEntity  *ptr;
                    511:   ThotBool    found;
                    512:   int         i;
                    513: 
                    514:   /* Select the right table */
1.40      cvs       515:   ptr = XhtmlEntityTable;
                    516:   if (ptr)
                    517:     {
1.41      cvs       518:       /* look for in the HTML entities table */
1.40      cvs       519:       found = FALSE;
1.41      cvs       520:       while (ptr && !found)
                    521:        {
                    522:          for (i = 0; ptr[i].charCode >= 0 && !found; i++)
                    523:            found = (ptr[i].charCode == entityValue);
1.39      cvs       524:   
1.41      cvs       525:          if (found)
                    526:            {
                    527:              /* entity value found */
                    528:              i--;
                    529:              *entityName = (char *) (ptr[i].charName);
                    530:            }
                    531:          else if (ptr != MathEntityTable)
                    532:            /* look for in the Math entities table */
                    533:            ptr = MathEntityTable;
                    534:          else
                    535:            {
                    536:              *entityName = NULL;
                    537:              ptr = NULL;
                    538:            }
1.40      cvs       539:        }
                    540:     }
1.39      cvs       541:   else
1.40      cvs       542:     *entityName = NULL;
1.39      cvs       543: }

Webmaster