Changeset 92 for trunk/src/engine.c


Ignore:
Timestamp:
Apr 8, 2008, 9:53:53 AM (11 years ago)
Author:
cameron
Message:

Passing buffer pointers/lgths to markup actions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/engine.c

    r91 r92  
    149149}
    150150
     151template <CodeUnit_Base C>
     152inline int ParsingEngine<C>::LengthFrom(int start_pos) const {
     153  return buffer_base_pos + buffer_rel_pos - start_pos;
     154}
     155
     156
    151157
    152158template <CodeUnit_Base C>
     
    195201        buffer_rel_pos = bitstream_scan(buf->item_stream[MarkupStart], buffer_rel_pos);
    196202        while (buffer_rel_pos >= BUFFER_SIZE) {
    197                 Text_action(text_or_markup_start, AbsPos());
     203                Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    198204                text_or_markup_start = AbsPos();
    199205                FinalizeBuffer_action(preserve_pos);
     
    208214        buffer_rel_pos = bitstream_scan(buf->item_stream[CD_End_check], buffer_rel_pos);
    209215        while (buffer_rel_pos >= BUFFER_SIZE) {
    210                 Text_action(text_or_markup_start, AbsPos());
     216                Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    211217                text_or_markup_start = AbsPos();
    212218                FinalizeBuffer_action(preserve_pos);
     
    260266        else {
    261267                Advance(1);
    262                 Error_action(text_or_markup_start, AbsPos());
     268                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    263269        }
    264270}
     
    276282        if (at_Comment_End<C>(cur())) {
    277283                Advance(3); /* Skip "-->". */
    278                 Comment_action(text_or_markup_start, AbsPos());
     284                Comment_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    279285        }
    280286        else {
    281287                Advance(2);  /* "--" */
    282                 Error_action(text_or_markup_start, AbsPos());
     288                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    283289        }
    284290}
     
    291297        if (AtChar<C,'>'>(cur())) {
    292298                Advance(1);
    293                 EndTag_action(text_or_markup_start, AbsPos());
     299                EndTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    294300        }
    295301        else {
     
    297303                if (AtChar<C,'>'>(cur())) {
    298304                        Advance(1);
    299                         EndTag_action(text_or_markup_start, AbsPos());
    300                 }
    301                 else Error_action(text_or_markup_start, AbsPos());
     305                        EndTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     306                }
     307                else Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    302308        }
    303309}
     
    308314        Advance(8); /* Skip "<![CDATA". */
    309315        if (!AtChar<C,'['>(cur())) {
    310                 Error_action(text_or_markup_start, AbsPos());
     316                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    311317        }
    312318        else { 
    313319                Advance(1);
     320                CDATA_start_action(GetCodeUnitPtr(text_or_markup_start));
    314321                text_or_markup_start = AbsPos();
    315                 CDATA_start_action(text_or_markup_start);
    316322                ScanTo(CD_End_check);
    317323                while (!at_CDATA_End<C>(cur())) {
     
    319325                        ScanTo(CD_End_check);
    320326                }
    321                 Text_action(text_or_markup_start, AbsPos());
     327                Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    322328                Advance(3); /* Skip "]]>". */
    323                 CDATA_end_action(AbsPos());
     329                CDATA_end_action(GetCodeUnitPtr(AbsPos()));
    324330        }
    325331}
     
    330336        ScanTo(NameFollow);  /* Name delimiter */
    331337        if (!AtChar<C,';'>(cur())) {
    332                 Error_action(text_or_markup_start, AbsPos());
     338                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    333339        }
    334340        else {
    335341                Advance(1);
    336                 Reference_action(text_or_markup_start, AbsPos());
     342                Reference_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    337343        }
    338344}
     
    345351        if (at_XxMmLll_WS<C>(cur())) {
    346352                Advance(4);
    347                 Error_action(text_or_markup_start, AbsPos());
     353                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    348354                return;
    349355        }
    350356        ScanTo(NameFollow);  /* Name delimiter */
    351         PI_Target_action(target_start, AbsPos());
     357        PI_Target_action(GetCodeUnitPtr(target_start), LengthFrom(target_start));
    352358        ScanTo(QMark);
    353359        while (!at_PI_End<C>(cur())) {
     
    356362        }
    357363        Advance(2); /* Skip "?>". */
    358         PI_action(text_or_markup_start, AbsPos());
     364        PI_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    359365}
    360366 
     
    368374        Advance(1);
    369375        ScanTo(NameFollow);  /* Name delimiter: WS, "/" or ">" */
    370         ElementName_action(text_or_markup_start+1, AbsPos());
     376        ElementName_action(GetCodeUnitPtr(text_or_markup_start+1), LengthFrom(text_or_markup_start+1));
    371377        /* The following test optimizes the most common case of a
    372378        start tag with no attributes.  */
    373379        if (AtChar<C,'>'>(cur())) {
    374380                Advance(1);
    375                 StartTag_action(text_or_markup_start, AbsPos());
     381                StartTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    376382        }
    377383        else {
     
    379385                if (AtChar<C,'>'>(cur())) {
    380386                        Advance(1);
    381                         StartTag_action(text_or_markup_start, AbsPos());
     387                        StartTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    382388                }
    383389                else if (at_EmptyElementDelim<C>(cur())) {
    384390                        Advance(2);
    385                         EmptyElement_action(text_or_markup_start, AbsPos());
     391                        EmptyElement_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    386392                }
    387393                else do {
     
    396402                        else {
    397403                                if (LastAttOccurrence[attID] > text_or_markup_start) {
    398                                         Error_action(text_or_markup_start, AbsPos()); /* Duplicate attribute. */
     404                                        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start)); /* Duplicate attribute. */
    399405                                        break;
    400406                                }                       
     
    412418                                ScanTo(NonWS);
    413419                                if (!AtChar<C,'='>(cur())) {
    414                                         Error_action(text_or_markup_start, AbsPos());
     420                                        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    415421                                        break;
    416422                                }
     
    418424                                quoteCh = cur()[0];
    419425                                if (!AtQuote<C>(cur())) {
    420                                         Error_action(text_or_markup_start, AbsPos());
     426                                        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    421427                                        break;
    422428                                }
     
    434440                                }
    435441                                else /* if (AtChar<C,'<'>(cur())) */{
    436                                         Error_action(text_or_markup_start, AbsPos());
     442                                        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    437443                                        break;
    438444                                }
     
    441447                        Advance(1);
    442448                        if (at_xmlns<C>(cur()+att_name_start-AbsPos())) {
    443                                 Namespace_action(att_name_start, att_name_end,
    444                                                  att_val_start, att_val_end);
     449                                Namespace_action(GetCodeUnitPtr(att_name_start), att_name_end - att_name_start,
     450                                                 GetCodeUnitPtr(att_val_start), att_val_end - att_val_start);
    445451                        }
    446452                        else {
    447                                 AttributeValue_action(att_name_start, att_name_end,
    448                                                       att_val_start, att_val_end);
     453                                AttributeValue_action(GetCodeUnitPtr(att_name_start), att_name_end - att_name_start,
     454                                                 GetCodeUnitPtr(att_val_start), att_val_end - att_val_start);
    449455                        }
    450456                        /* Now check for end or repeat. Avoid whitespace scan if possible.*/
    451457                        if (AtChar<C,'>'>(cur())) {
    452458                                Advance(1);
    453                                 StartTag_action(text_or_markup_start, AbsPos());
     459                                StartTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    454460                                break;
    455461                        }
    456462                        else if (at_EmptyElementDelim<C>(cur())) {
    457463                                Advance(2);
    458                                 EmptyElement_action(text_or_markup_start, AbsPos());
     464                                EmptyElement_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    459465                                break;
    460466                        }
     
    462468                        if (AtChar<C,'>'>(cur())) {
    463469                                Advance(1);
    464                                 StartTag_action(text_or_markup_start, AbsPos());
     470                                StartTag_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    465471                                break;
    466472                        }
    467473                        else if (at_EmptyElementDelim<C>(cur())) {
    468474                                Advance(2);
    469                                 EmptyElement_action(text_or_markup_start, AbsPos());
     475                                EmptyElement_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    470476                                break;
    471477                        }
    472478                        else if (AbsPos() == att_val_end + 1) {
    473479                                /* No WS following att value */
    474                                 Error_action(text_or_markup_start, AbsPos());
     480                                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    475481                                break;
    476482                        }
     
    482488inline void ParsingEngine<C>::text_if_nonnull_action(){
    483489        if (AbsPos() > text_or_markup_start) {
    484                 Text_action(text_or_markup_start, AbsPos());
     490                Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    485491                text_or_markup_start = AbsPos();
    486492        }
     
    524530                        text_if_nonnull_action();
    525531                        Advance(3);
    526                         Error_action(AbsPos()-3, AbsPos());
     532                        Error_action(GetCodeUnitPtr(AbsPos()-3), 3);
    527533                }
    528534                else if (at_EOF()) {
     
    560566    if(at_SYSTEM<C>(cur())||at_PUBLIC<C>(cur())){
    561567        if(old_abspos == AbsPos())
    562                 Error_action(start_pos, AbsPos());
     568                Error_action(GetCodeUnitPtr(start_pos), LengthFrom(start_pos));
    563569        Parse_ExternalID();
    564570    }
     
    572578                        Advance(1);
    573579                else
    574                         Error_action(start_pos, AbsPos());
     580                        Error_action(GetCodeUnitPtr(start_pos), LengthFrom(start_pos));
    575581                ScanTo(NonWS);
    576582        }
     
    578584        if (AtChar<C,'>'>(cur())){
    579585                Advance(1);   
    580                 Doctype_action(start_pos, AbsPos());
     586                Doctype_action(GetCodeUnitPtr(start_pos), LengthFrom(start_pos));
    581587        }
    582588}
     
    598604        }
    599605        else
    600                 Error_action(text_or_markup_start, AbsPos());
     606                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    601607}
    602608
     
    645651                        }
    646652                        else
    647                                 Error_action(text_or_markup_start, AbsPos());
     653                                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    648654                }
    649655                else if (AtChar<C,']'>(cur())){
     
    651657                }
    652658                else
    653                         Error_action(text_or_markup_start, AbsPos());
     659                        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    654660        }
    655661}
     
    663669        if (AtChar<C,';'>(cur())) {
    664670                Advance(1);
    665                 PEReference_action(text_or_markup_start, AbsPos());
     671                PEReference_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    666672        }
    667673        else
    668                 Error_action(text_or_markup_start, AbsPos());
     674                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    669675}
    670676
     
    699705        if (AtChar<C,'>'>(cur())) {
    700706                Advance(1);
    701                 Elementdecl_action(text_or_markup_start, AbsPos());
     707                Elementdecl_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    702708        }
    703709        else
    704                 Error_action(text_or_markup_start, AbsPos());
     710                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    705711}
    706712template <CodeUnit_Base C>
     
    766772        }
    767773        else
    768                 Error_action(text_or_markup_start, AbsPos());
     774                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    769775               
    770776        if (AtChar<C,'?'>(cur())||AtChar<C,'*'>(cur())||AtChar<C,'+'>(cur()))
     
    809815        while(!AtChar<C,'>'>(cur())) {
    810816                if(old_abspos == AbsPos())
    811                 Error_action(text_or_markup_start, AbsPos());
     817                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    812818               
    813819        name_start = AbsPos();
     
    864870        }
    865871        else
    866                 Error_action(text_or_markup_start, AbsPos());
     872                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    867873        requireWS();
    868874        Parse_DefaultDecl(this_info);
     
    873879
    874880        Advance(1);
    875         AttlistDecl_action(text_or_markup_start, AbsPos());
     881        AttlistDecl_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    876882}
    877883
     
    882888                Advance(1);
    883889        else
    884                 Error_action(text_or_markup_start, AbsPos());
     890                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    885891        ScanTo(NonWS);
    886892        ScanTo(NameFollow);
     
    894900                Advance(1);
    895901        else
    896                 Error_action(text_or_markup_start, AbsPos());
     902                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    897903}
    898904
     
    925931                        }
    926932                else
    927                         Error_action(text_or_markup_start, AbsPos());
     933                        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    928934        }
    929935}
     
    952958        }
    953959        else
    954                 Error_action(text_or_markup_start, AbsPos());
     960                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    955961        }
    956962        else{
     
    965971                if(at_NOTATION<C>(cur())){
    966972                        if(old_abspos == AbsPos())
    967                                 Error_action(text_or_markup_start, AbsPos());
     973                                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    968974                        else
    969975                                Advance(5);
     
    976982        }
    977983        else
    978                 Error_action(text_or_markup_start, AbsPos());
     984                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    979985        }
    980986        ScanTo(NonWS);
    981987        if (AtChar<C,'>'>(cur())){
    982988                Advance(1);
    983                 Entitydecl_action(entity_name_start, entity_name_end, text_or_markup_start, AbsPos());
     989                Entitydecl_action(GetCodeUnitPtr(entity_name_start), entity_name_end - entity_name_start,
     990                                  GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    984991        }
    985992        else
    986                 Error_action(text_or_markup_start, AbsPos());
     993                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    987994}
    988995
     
    10071014                if (!AtChar<C,'>'>(cur())){
    10081015                        if (old_abspos == AbsPos())
    1009                                 Error_action(text_or_markup_start, AbsPos());
     1016                                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    10101017                        Parse_MatchedQuote (); /*  SystemLiteral */
    10111018                }
    10121019        }
    10131020        else
    1014                 Error_action(text_or_markup_start, AbsPos());
     1021                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    10151022        ScanTo(NonWS);
    10161023        if (AtChar<C,'>'>(cur())) {
    10171024                Advance(1);
    1018                 Notationdecl_action(text_or_markup_start, AbsPos());
     1025                Notationdecl_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    10191026        }
    10201027        else
    1021                 Error_action(text_or_markup_start, AbsPos());
     1028                Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    10221029}
    10231030
     
    10281035    ScanTo(NonWS);
    10291036    if(old_abspos == AbsPos())
    1030         Error_action(text_or_markup_start, AbsPos());
     1037        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    10311038}
    10321039
     
    10481055                }
    10491056                else /* if (AtChar<C,'<'>(cur())) */
    1050                         Error_action(text_or_markup_start, AbsPos());
     1057                        Error_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
    10511058        }
    10521059        Advance(1);
     
    10631070                                Parse_PI();
    10641071                else{
    1065                         Prolog_action(old_pos, AbsPos());
     1072                        Prolog_action(GetCodeUnitPtr(old_pos), LengthFrom(old_pos));
    10661073                        return;
    10671074                }
     
    10771084                ScanTo(NonWS);
    10781085        }
    1079         Prolog_action(old_pos, AbsPos());
    1080 }
    1081 
    1082 
    1083 
     1086        Prolog_action(GetCodeUnitPtr(old_pos), LengthFrom(old_pos));
     1087}
     1088
     1089
     1090
Note: See TracChangeset for help on using the changeset viewer.