Changeset 180 for trunk/src


Ignore:
Timestamp:
Jul 9, 2008, 12:27:16 PM (11 years ago)
Author:
cameron
Message:

Adding boolean more parameter to Text_Action.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/engine.c

    r179 r180  
    407407        while (buffer_rel_pos >= BUFFER_SIZE) {
    408408                AdjustBufferEndForIncompleteSequences();
    409                 Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     409                Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start), true);
    410410                text_or_markup_start = AbsPos();
    411411                FinalizeBuffer_action();
     
    420420        while (buffer_rel_pos >= BUFFER_SIZE) {
    421421                AdjustBufferEndForIncompleteSequences();
    422                 Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     422                Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start), true);
    423423                text_or_markup_start = AbsPos();
    424424                FinalizeBuffer_action();
     
    427427        }
    428428}
    429 
    430 //#ifdef OPTIMIZE_SHORT_SCAN
    431 //template <class B>
    432 //inline void ParsingEngine<B>::ScanTo(int item) {
    433 //  SIMD_type * stream = buf->item_stream[item];
    434 //  unsigned long * bitstream_ptr = (unsigned long *) (((intptr_t) stream) + buffer_rel_pos/8);
    435 //  unsigned long bitstream_slice = *bitstream_ptr >> buffer_rel_pos % 8;
    436 //  if (bitstream_slice != 0) {
    437 //    buffer_rel_pos += __builtin_ctzl(bitstream_slice);
    438 //  }
    439 //  else {
    440 //    buffer_rel_pos = (buffer_rel_pos & -8) + 8*sizeof(unsigned long);
    441 //    buffer_rel_pos += bitstream_scan0((SIMD_type *) &bitstream_ptr[1]);
    442 //    while (buffer_rel_pos >= BUFFER_BLOCKS * BLOCKSIZE) {
    443 //      buffer_rel_pos = BUFFER_BLOCKS * BLOCKSIZE;
    444 //      AdjustBufferEndForIncompleteSequences();
    445 //      FinalizeBuffer_action();
    446 //      AdvanceBuffers();
    447 //      buffer_rel_pos = bitstream_scan(buf->item_stream[item], buffer_rel_pos);
    448 //    }
    449 //  }
    450 //}
    451 //#endif
    452429
    453430template <class B>
     
    536513                        ScanTo(CD_End_check);
    537514                }
    538                 Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     515                Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start), true);
    539516                Advance(3); /* Skip "]]>". */
    540517                CDATA_end_action(GetCodeUnitPtr(AbsPos()));
     
    895872
    896873template <class B>
    897 inline void ParsingEngine<B>::text_if_nonnull_action(){
     874inline void ParsingEngine<B>::text_if_nonnull_action(bool more){
    898875        if (AbsPos() > text_or_markup_start) {
    899                 Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start));
     876                Text_action(GetCodeUnitPtr(text_or_markup_start), LengthFrom(text_or_markup_start), more);
    900877                text_or_markup_start = AbsPos();
    901878        }
     
    903880
    904881template <class B>
    905 inline void ParsingEngine<B>::Parse_WF_EndTag(int nameID) {
     882void ParsingEngine<B>::Parse_WF_EndTag(int nameID) {
    906883        Advance(2);
    907884        int end_nameID = Parse_Name();
     
    923900
    924901template <>
    925 inline void ParsingEngine<UTF8_Buffer>::Parse_WF_EndTag(int nameID) {
     902void ParsingEngine<UTF8_Buffer>::Parse_WF_EndTag(int nameID) {
    926903        Advance(2); /* Skip "</". */
    927904       
     
    1008985/* Parse a valid start or empty element tag. */
    1009986template <class B>
    1010 inline int ParsingEngine<B>::Parse_WF_StartTag (bool& is_emptyStartTag){
     987int ParsingEngine<B>::Parse_WF_StartTag (bool& is_emptyStartTag){
    1011988        int att_name_start;
    1012989        int att_val_start;
     
    11471124                ScanToMarkupStart(); /* '<', '&', or ']' for ']]>' test */
    11481125                if (at_ElementTag_Start<B::Base>(cur())) {
    1149                         text_if_nonnull_action();
     1126                        text_if_nonnull_action(false);
    11501127                        Parse_WF_Element();
    11511128                }
    11521129                else if (at_EndTag_Start<B::Base>(cur())) {
    1153                         text_if_nonnull_action();
     1130                        text_if_nonnull_action(false);
    11541131                        return;
    11551132                }
    11561133                else if (at_Comment_Start<B::Base>(cur())) {
    1157                         text_if_nonnull_action();
     1134                        text_if_nonnull_action(false);
    11581135                        Parse_Comment();
    11591136                }
    11601137                else if (at_CharRef_Start<B::Base>(cur())) {
    1161                         text_if_nonnull_action();
     1138                        text_if_nonnull_action(true);
    11621139                        Parse_CharRef();
    11631140                }
    11641141                else if (AtChar<B::Base,'&'>(cur())) {
    1165                         text_if_nonnull_action();
     1142                        text_if_nonnull_action(true);
    11661143                        Parse_EntityRef();
    11671144                }
    11681145                else if (at_CDATA_Start<B::Base>(cur())) {
    1169                         text_if_nonnull_action();
     1146                        text_if_nonnull_action(true);
    11701147                        Parse_CDATA();
    11711148                }
    11721149                else if (at_PI_Start<B::Base>(cur())) {
    1173                         text_if_nonnull_action();
     1150                        text_if_nonnull_action(false);
    11741151                        Parse_PI();
    11751152                }
    11761153                else if (at_CDATA_End<B::Base>(cur())) {
    1177                         text_if_nonnull_action();
     1154                        text_if_nonnull_action(true);
    11781155                        Advance(3);
    11791156                        Syntax_Error(NT_CharData);
    11801157                }
    11811158                else if (at_EOF()) {
    1182                         text_if_nonnull_action();
     1159                        text_if_nonnull_action(false);
    11831160                        return;
    11841161                }
     
    12071184                }*/
    12081185                if (at_ElementTag_Start<B::Base>(cur())) {
    1209                         text_if_nonnull_action();
     1186                        text_if_nonnull_action(false);
    12101187                        Parse_StartTag();
    12111188                }
    12121189                else if (at_EndTag_Start<B::Base>(cur())) {
    1213                         text_if_nonnull_action();
     1190                        text_if_nonnull_action(false);
    12141191                        Parse_EndTag();
    12151192                }
    12161193                else if (at_Comment_Start<B::Base>(cur())) {
    1217                         text_if_nonnull_action();
     1194                        text_if_nonnull_action(false);
    12181195                        Parse_Comment();
    12191196                }
    12201197                else if (at_CharRef_Start<B::Base>(cur())) {
    1221                         text_if_nonnull_action();
     1198                        text_if_nonnull_action(true);
    12221199                        Parse_CharRef();
    12231200                }
    12241201                else if (AtChar<B::Base,'&'>(cur())) {
    1225                         text_if_nonnull_action();
     1202                        text_if_nonnull_action(true);
    12261203                        Parse_EntityRef();
    12271204                }
    12281205                else if (at_CDATA_Start<B::Base>(cur())) {
    1229                         text_if_nonnull_action();
     1206                        text_if_nonnull_action(true);
    12301207                        Parse_CDATA();
    12311208                }
    12321209                else if (at_PI_Start<B::Base>(cur())) {
    1233                         text_if_nonnull_action();
     1210                        text_if_nonnull_action(false);
    12341211                        Parse_PI();
    12351212                }
    12361213                else if (at_CDATA_End<B::Base>(cur())) {
    1237                         text_if_nonnull_action();
     1214                        text_if_nonnull_action(true);
    12381215                        Advance(3);
    12391216                        Syntax_Error(NT_CharData);
    12401217                }
    12411218                else if (at_EOF()) {
    1242                         text_if_nonnull_action();
     1219                        text_if_nonnull_action(false);
    12431220                        break;
    12441221                }
     
    19671944
    19681945template <class B>
    1969 inline void ParsingEngine<B>::requireWS(){
     1946void ParsingEngine<B>::requireWS(){
    19701947       
    19711948    int old_abspos = AbsPos(); 
     
    23862363                ScanToMarkupStart(); /* '<', '&', or ']' for ']]>' test */
    23872364                if (at_ElementTag_Start<B::Base>(cur())) {
    2388                         text_if_nonnull_action();
     2365                        text_if_nonnull_action(false);
    23892366                        int nameID = Parse_ValidElement();
    23902367                }
    23912368                else if (at_EndTag_Start<B::Base>(cur())) {
    2392                         text_if_nonnull_action();
     2369                        text_if_nonnull_action(false);
    23932370                        return;
    23942371                }
    23952372                else if (at_Comment_Start<B::Base>(cur())) {
    2396                         text_if_nonnull_action();
     2373                        text_if_nonnull_action(false);
    23972374                        Parse_Comment();
    23982375                }
    23992376                else if (at_CharRef_Start<B::Base>(cur())) {
    2400                         text_if_nonnull_action();
     2377                        text_if_nonnull_action(true);
    24012378                        Parse_CharRef();
    24022379                }
    24032380                else if (AtChar<B::Base,'&'>(cur())) {
    2404                         text_if_nonnull_action();
     2381                        text_if_nonnull_action(true);
    24052382                        Parse_EntityRef_inAnyContent();
    24062383                }
    24072384                else if (at_CDATA_Start<B::Base>(cur())) {
    2408                         text_if_nonnull_action();
     2385                        text_if_nonnull_action(true);
    24092386                        Parse_CDATA();
    24102387                }
    24112388                else if (at_PI_Start<B::Base>(cur())) {
    2412                         text_if_nonnull_action();
     2389                        text_if_nonnull_action(false);
    24132390                        Parse_PI();
    24142391                }
    24152392                else if (at_CDATA_End<B::Base>(cur())) {
    2416                         text_if_nonnull_action();
     2393                        text_if_nonnull_action(true);
    24172394                        Advance(3);
    24182395                        Syntax_Error(NT_CharData);
    24192396                }
    24202397                else if (at_EOF()) {
    2421                         text_if_nonnull_action();
     2398                        text_if_nonnull_action(false);
    24222399                        return;
    24232400                }
     
    24412418                }*/
    24422419                if (at_ElementTag_Start<B::Base>(cur())) {
    2443                         text_if_nonnull_action();
     2420                        text_if_nonnull_action(false);
    24442421                        int nameID = Parse_ValidElement();
    24452422                        if (elems[nameID] == 0) {
     
    24482425                }
    24492426                else if (at_EndTag_Start<B::Base>(cur())) {
    2450                         text_if_nonnull_action();
     2427                        text_if_nonnull_action(false);
    24512428                        return;
    24522429                }
    24532430                else if (at_Comment_Start<B::Base>(cur())) {
    2454                         text_if_nonnull_action();
     2431                        text_if_nonnull_action(false);
    24552432                        Parse_Comment();
    24562433                }
    24572434                else if (at_CharRef_Start<B::Base>(cur())) {
    2458                         text_if_nonnull_action();
     2435                        text_if_nonnull_action(true);
    24592436                        Parse_CharRef();
    24602437                }
    24612438                else if (AtChar<B::Base,'&'>(cur())) {
    2462                         text_if_nonnull_action();
     2439                        text_if_nonnull_action(true);
    24632440                        Parse_EntityRef_inMixed(elems);
    24642441                }
    24652442                else if (at_CDATA_Start<B::Base>(cur())) {
    2466                         text_if_nonnull_action();
     2443                        text_if_nonnull_action(true);
    24672444                        Parse_CDATA();
    24682445                }
    24692446                else if (at_PI_Start<B::Base>(cur())) {
    2470                         text_if_nonnull_action();
     2447                        text_if_nonnull_action(false);
    24712448                        Parse_PI();
    24722449                }
    24732450                else if (at_CDATA_End<B::Base>(cur())) {
    2474                         text_if_nonnull_action();
     2451                        text_if_nonnull_action(true);
    24752452                        Advance(3);
    24762453                        Syntax_Error(NT_CharData);
    24772454                }
    24782455                else if (at_EOF()) {
    2479                         text_if_nonnull_action();
     2456                        text_if_nonnull_action(false);
    24802457                        return;
    24812458                }
     
    24922469
    24932470template <class B>
    2494 inline int ParsingEngine<B>::Parse_Name() {
     2471int ParsingEngine<B>::Parse_Name() {
    24952472        int name_pos = AbsPos();
    24962473        ScanTo(NameFollow);
     
    25072484
    25082485template <>
    2509 inline int ParsingEngine< X8_Buffer<EBCDIC> >::Parse_Name() {
     2486int ParsingEngine< X8_Buffer<EBCDIC> >::Parse_Name() {
    25102487        int name_pos = AbsPos();
    25112488        ScanTo(NameFollow);
     
    25302507
    25312508template <class B>
    2532 inline int ParsingEngine<B>::Parse_Nmtoken() {
     2509int ParsingEngine<B>::Parse_Nmtoken() {
    25332510        int name_pos = AbsPos();
    25342511        ScanTo(NameFollow);
     
    25452522
    25462523template <>
    2547 inline int ParsingEngine< X8_Buffer<EBCDIC> >::Parse_Nmtoken() {
     2524int ParsingEngine< X8_Buffer<EBCDIC> >::Parse_Nmtoken() {
    25482525        int name_pos = AbsPos();
    25492526        ScanTo(NameFollow);
     
    25592536}
    25602537template <>
    2561 inline int ParsingEngine<UTF8_Buffer>::Parse_Nmtoken() {
     2538int ParsingEngine<UTF8_Buffer>::Parse_Nmtoken() {
    25622539        int name_pos = AbsPos();
    25632540        ScanTo(NameFollow);
  • trunk/src/engine.h

    r175 r180  
    8383        bool at_EOF () const;
    8484        /*Internal helper for text action*/
    85         void text_if_nonnull_action();
     85        void text_if_nonnull_action(bool more);
    8686        /* Mutators that advance the input. */
    8787        void Advance(int n);
     
    183183       
    184184        /* Action routine for a text item */
    185         void Text_action(unsigned char * item, int lgth);
     185        void Text_action(unsigned char * item, int lgth, bool more);
    186186       
    187187        /* Action routine for a character or entity reference.*/
Note: See TracChangeset for help on using the changeset viewer.