Changeset 174 for trunk/src/engine.c


Ignore:
Timestamp:
Jun 27, 2008, 11:21:42 AM (11 years ago)
Author:
lindanl
Message:

Nmtokens.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/engine.c

    r173 r174  
    11781178               
    11791179                model_info->rootModel = cre;
    1180 
     1180               
     1181                /* Check for notations that were used, but not defined by the end of the DTD. */
     1182                #if (VALIDATION_MODE == ON)
     1183                hash_map<int, int >::iterator j;
     1184                for (j=model_info->GlobalNotationTable.begin(); j!=model_info->GlobalNotationTable.end(); j++) {
     1185                        if (j->second == -1)
     1186                                Validity_Error(vErr_notatn);
     1187                }
     1188                #endif
    11811189        }
    11821190        else
     
    16111619        ScanTo(NonWS);
    16121620       
    1613     int nameID = Parse_Name();
     1621    int notn_nameID = Parse_Name();
    16141622
    16151623        /*Notation name is not in the global table!*/
    1616         if(model_info->GlobalNotationTable[nameID]==0)
    1617                 Validity_Error(vErr_notatn);
     1624        if(model_info->GlobalNotationTable[notn_nameID]==0)
     1625                model_info->GlobalNotationTable[notn_nameID] = -1;
    16181626       
    16191627        ScanTo(NonWS);
     
    16211629                Advance(1);
    16221630                ScanTo(NonWS); 
    1623                 int not_nameID = Parse_Name();
     1631                notn_nameID = Parse_Name();
    16241632                       
    1625                 if(model_info->GlobalNotationTable[not_nameID]==0)
    1626                         Validity_Error(vErr_notatn);
     1633                if(model_info->GlobalNotationTable[notn_nameID]==0)
     1634//                      Validity_Error(vErr_notatn);
     1635                        model_info->GlobalNotationTable[notn_nameID] = -1;
    16271636                       
    16281637                ScanTo(NonWS);
     
    16441653        ScanTo(NonWS);
    16451654       
    1646         int nameID = Parse_Name();
    1647        
    1648         this_info->enumValues[nameID]=++(enumCount);
     1655        int nmtokenID = Parse_Nmtoken();
     1656       
     1657        this_info->enumValues[nmtokenID]=++(enumCount);
    16491658       
    16501659        ScanTo(NonWS);
     
    16521661                Advance(1);
    16531662                ScanTo(NonWS); 
    1654                 int nameID = Parse_Name();
    1655        
    1656                 int enumID = this_info->enumValues[nameID];
     1663                int nmtokenID = Parse_Nmtoken();
     1664       
     1665                int enumID = this_info->enumValues[nmtokenID];
    16571666                if(enumID==0){ 
    1658                         this_info->enumValues[nameID]=++(enumCount);
     1667                        this_info->enumValues[nmtokenID]=++(enumCount);
    16591668                        enumID = enumCount;
    16601669                }
     
    17981807
    17991808        int notationID = model_info->GlobalNotationTable[nameID];
    1800         if(notationID==0){     
     1809        /* notationID == -1: used but not yet defined; == 0: new, > 0 prev. defined */
     1810        if(notationID <= 0){   
    18011811                model_info->GlobalNotationTable[nameID]=++(model_info->globalNotationCount);
    18021812                notationID = model_info->globalNotationCount;
     
    23472357        ScanTo(NameFollow);
    23482358        int lgth = AbsPos()-name_pos;
    2349         int nameID = model_info->symbol_table->ASCII_Lookup_or_Insert(&((char *) x8data)[buffer_rel_pos-lgth], lgth);
     2359        int nameID = model_info->symbol_table->ASCII_Lookup_or_Insert_Name(&((char *) x8data)[buffer_rel_pos-lgth], lgth);
    23502360        if (nameID != 0) return nameID;
    23512361        else {
     
    23772387        ScanTo(NameFollow);
    23782388        int lgth = AbsPos()-name_pos;
    2379         return model_info->symbol_table->UTF8_Lookup_or_Insert(&((char *)x8data)[buffer_rel_pos-lgth], lgth);
    2380 }
    2381 
     2389        return model_info->symbol_table->UTF8_Lookup_or_Insert_Name(&((char *)x8data)[buffer_rel_pos-lgth], lgth);
     2390}
     2391
     2392template <class B>
     2393inline int ParsingEngine<B>::Parse_Nmtoken() {
     2394        int name_pos = AbsPos();
     2395        ScanTo(NameFollow);
     2396        int lgth = AbsPos()-name_pos;
     2397        int nameID = model_info->symbol_table->ASCII_Lookup_or_Insert_Nmtoken(&((char *) x8data)[buffer_rel_pos-lgth], lgth);
     2398        if (nameID != 0) return nameID;
     2399        else {
     2400                int u8_lgth = byteplex->UTF8_Length(name_pos, lgth);
     2401                char * u8_ptr = model_info->symbol_table->ReserveSymbolSpace(u8_lgth);
     2402                byteplex->to_UTF8(name_pos, lgth, u8_ptr);
     2403                return model_info->symbol_table->LookupOrInsertReserved_nmtoken();
     2404        }
     2405}
     2406
     2407template <>
     2408inline int ParsingEngine< X8_Buffer<EBCDIC> >::Parse_Nmtoken() {
     2409        int name_pos = AbsPos();
     2410        ScanTo(NameFollow);
     2411        int lgth = AbsPos()-name_pos;
     2412//      int nameID = local_EBCDIC_table->Lookup_or_Insert(GetCodeUnitPtr(name_pos), lgth);
     2413//      if (nameID != 0) return nameID;
     2414//      else {
     2415                int u8_lgth = byteplex->UTF8_Length(name_pos, lgth);
     2416                char * u8_ptr = model_info->symbol_table->ReserveSymbolSpace(u8_lgth);
     2417                byteplex->to_UTF8(name_pos, lgth, u8_ptr);
     2418                return model_info->symbol_table->LookupOrInsertReserved_nmtoken();
     2419//      }
     2420}
     2421template <>
     2422inline int ParsingEngine<UTF8_Buffer>::Parse_Nmtoken() {
     2423        int name_pos = AbsPos();
     2424        ScanTo(NameFollow);
     2425        int lgth = AbsPos()-name_pos;
     2426        return model_info->symbol_table->UTF8_Lookup_or_Insert_Nmtoken(&((char *)x8data)[buffer_rel_pos-lgth], lgth);
     2427}
    23822428
    23832429template <class B>
Note: See TracChangeset for help on using the changeset viewer.