Changeset 173 for trunk


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.

Location:
trunk/src
Files:
4 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];
  • trunk/src/symtab.c

    r171 r173  
    329329        UTF8NameTable.push_back(name_data);
    330330//      UTF8NameTable.push_back(NULL);
    331         for (int i = 0; i < 5; i++) {
     331/*      for (int i = 0; i < 5; i++) {
    332332                UTF8NameMap[predefined[i]] = ++(globalNameCount);
    333333                Name_Data name_data;
     
    335335                name_data.lgth = strlen(predefined[i]);
    336336                UTF8NameTable.push_back(name_data);
     337                printf("predefined name: %s, global name count: %d\n",predefined[i],globalNameCount);
    337338//              UTF8NameTable.push_back(predefined[i]);
    338         }
     339        }*/
    339340        pool = new StringPool;
    340341}
  • trunk/src/symtab.h

    r169 r173  
    6262       
    6363        XML_version version;
    64        
     64        vector<Name_Data> UTF8NameTable;
    6565private:
    6666        hash_map<const char *, int, hash<const char *>, eqstr > UTF8NameMap;
    6767        int globalNameCount;
    6868//      vector<char *> UTF8NameTable;
    69         vector<Name_Data> UTF8NameTable;
     69
    7070        char * reserved;
    7171        int reserved_lgth;
  • trunk/src/xmlmodel.c

    r163 r173  
    3434        globalElementCount = 0;
    3535        globalAttributeCount = 0;
    36 //      symbol_table = new Symbol_Table();
    37 //      SimpleEntity("lt", "<");
    38 //      SimpleEntity("gt", ">");
    39 //      SimpleEntity("amp", "&");
    40 //      SimpleEntity("quot", "\"");
    41 //      SimpleEntity("apos", "'");     
     36        symbol_table = new Symbol_Table();
     37        SimpleEntity("lt", "<");
     38        SimpleEntity("gt", ">");
     39        SimpleEntity("amp", "&");
     40        SimpleEntity("quot", "\"");
     41        SimpleEntity("apos", "'");     
    4242}
    4343
Note: See TracChangeset for help on using the changeset viewer.