Changeset 93 for trunk/src/engine.c


Ignore:
Timestamp:
Apr 8, 2008, 11:24:38 AM (11 years ago)
Author:
lindanl
Message:

Hashmap for enumerated types in Attlists.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/engine.c

    r92 r93  
    8484        byteplex->DoByteplex();
    8585        byteplex->PreparePseudoASCII_Stream();
    86        
     86         StrictWellFormedness=false;
    8787        LastAttOccurrence.push_back(0);
    8888       
     
    885885inline void ParsingEngine<C>::Parse_Enumeration (ATT_info * this_info){
    886886
     887        int enumCount=0;
    887888        if(AtChar<C,'('>(cur()))
    888889                Advance(1);
     
    890891                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    891892        ScanTo(NonWS);
     893       
     894    int name_start = AbsPos();
    892895        ScanTo(NameFollow);
     896        int     lgth = AbsPos()-name_start;
     897       
     898        char *s = new char[lgth+1];
     899        memcpy(s, GetCodeUnitPtr(name_start), lgth);
     900        s[lgth] = '\0';
     901       
     902        this_info->enumValues[s]=++(enumCount);
     903       
    893904        ScanTo(NonWS);
    894905        while(AtChar<C,'|'>(cur())){
    895906                Advance(1);
     907                ScanTo(NonWS);         
     908                name_start = AbsPos();
    896909                ScanTo(NameFollow);
     910                lgth = AbsPos()-name_start;
     911       
     912                char *s = new char[lgth+1];
     913                memcpy(s, GetCodeUnitPtr(name_start), lgth);
     914                s[lgth] = '\0';
     915       
     916                int enumID = this_info->enumValues[s];
     917                if(enumID==0){ 
     918                        this_info->enumValues[s]=++(enumCount);
     919                        enumID = enumCount;
     920                }
     921                else if(!StrictWellFormedness){
     922                        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     923                }
    897924                ScanTo(NonWS);
    898925        }
Note: See TracChangeset for help on using the changeset viewer.