Changeset 173 for trunk/src/engine.c


Ignore:
Timestamp:
Jun 27, 2008, 10:04:17 AM (11 years ago)
Author:
lindanl
Message:

End-tags for non UTF-8; predefined symbol fix; DTD parsing fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/engine.c

    r172 r173  
    189189        byteplex = b;
    190190
    191         m->symbol_table = new Symbol_Table();
    192         m->SimpleEntity("lt", "<");
    193         m->SimpleEntity("gt", ">");
    194         m->SimpleEntity("amp", "&");
    195         m->SimpleEntity("quot", "\"");
    196         m->SimpleEntity("apos", "'");   
     191//      m->symbol_table = new Symbol_Table();
     192//      m->SimpleEntity("lt", "<");
     193//      m->SimpleEntity("gt", ">");
     194//      m->SimpleEntity("amp", "&");
     195//      m->SimpleEntity("quot", "\"");
     196//      m->SimpleEntity("apos", "'");   
    197197        m->symbol_table->version = e->version;
    198198
     
    781781}
    782782
    783 
    784 
    785783template <class B>
    786784inline void ParsingEngine<B>::Parse_WF_EndTag(int nameID) {
     785        Advance(2);
     786        int end_nameID = Parse_Name();
     787        if(end_nameID != nameID)
     788                WF_Error(wfErr_GIMatch);
     789        if (AtChar<B::Base,'>'>(cur())) {
     790                Advance(1);
     791                EndTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     792        }
     793    else {
     794                ScanTo(NonWS);
     795                if (AtChar<B::Base,'>'>(cur())) {
     796                        Advance(1);
     797                        EndTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     798                }
     799                else Syntax_Error(NT_ETag);
     800    }
     801}
     802
     803template <>
     804inline void ParsingEngine<UTF8_Buffer>::Parse_WF_EndTag(int nameID) {
    787805        Advance(2); /* Skip "</". */
    788806       
     
    836854//      if (start_elem_name[lgth] != '\0') WF_Error(wfErr_GIMatch);
    837855
    838         if (AtChar<B::Base,'>'>(cur())) {
     856        if (AtChar<ASCII,'>'>(cur())) {
    839857                Advance(1);
    840858                EndTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     
    842860    else {
    843861                ScanTo(NonWS);
    844                 if (AtChar<B::Base,'>'>(cur())) {
     862                if (AtChar<ASCII,'>'>(cur())) {
    845863                        Advance(1);
    846864                        EndTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     
    17011719               
    17021720                int nameID = Parse_Name();
    1703        
    17041721                PEntity_info * this_info = new PEntity_info;
    17051722                int entityID = model_info->GlobalPEntityTable[nameID];
     
    17881805                Validity_Error(vErr_NoDuplicateTokens);
    17891806        Notation_info * this_info = new Notation_info;
    1790                        
     1807        ScanTo(NonWS);         
    17911808    Parse_ExternalID(this_info->systemLiteral, this_info->pubidLiteral);
    17921809        ScanTo(NonWS);
     
    18401857        this_info->is_simple = true;
    18411858        int quot_start = AbsPos();
     1859        char * replText;
    18421860        ScanTo(Quote);         
    1843         char *  replText = copy_string(GetCodeUnitPtr(quot_start),AbsPos()-quot_start);
    1844 
     1861        replText = copy_string(GetCodeUnitPtr(quot_start),AbsPos()-quot_start);
    18451862        while (cur()[0] != quoteCh){
    18461863                if (at_CharRef_Start<B::Base>(cur())){
     
    18631880                        Advance(1);
    18641881                        ScanTo(Quote);
    1865                         this_info->is_simple = false;
    1866                        
     1882                        this_info->is_simple = false;                   
    18671883                }
    18681884                replText = cat_string (replText,(char *)GetCodeUnitPtr(quot_start), strlen(replText), AbsPos()-quot_start);
     
    18931909template <class B>
    18941910inline void ParsingEngine<B>::Parse_PEntityValue(PEntity_info * this_info){
     1911        fprintf(stderr,"parsing of parameter entity value has not been completed yet.\n");
     1912        exit(-1);
    18951913}
    18961914
    18971915template <class B>
    18981916inline char * ParsingEngine<B>::Replace_CharRef(){
    1899         Advance(1);
    1900         int nameID = Parse_Name();
    1901         int entityID = model_info->GlobalGEntityTable[nameID];
    1902         if (entityID == 0)
    1903                 WF_Error(wfErr_wf_entdeclared);
    1904         else
    1905                 return model_info->GEntityData[entityID-1]->ReplacementText;   
    1906        
     1917        Advance(2);
     1918        fprintf(stderr,"Replacement of Character Reference has not been completed yet.\n");
     1919        exit(-1);
    19071920}
    19081921
     
    21302143        int nameID = Parse_ValidStartTag(is_emptyStartTag);
    21312144#ifdef DEBUG
    2132         printf("Parse_ValidElement: nameID = %d, is_emptyStartTag=%i\n",nameID, is_emptyStartTag);
     2145        printf("Parse_ValidElement: nameID = %d, name = %s, is_emptyStartTag=%i\n",nameID, model_info->symbol_table->Get_UTF8_name(nameID), is_emptyStartTag);
    21332146#endif
    21342147        ContentModel * cm = model_info->ContentModelData[nameID];
Note: See TracChangeset for help on using the changeset viewer.