Changeset 81 for trunk/src/engine.c


Ignore:
Timestamp:
Mar 31, 2008, 5:37:37 AM (11 years ago)
Author:
cameron
Message:

Separate CDATA start/end actions as in expat.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/engine.c

    r80 r81  
    195195                AdvanceBuffers(preserve_pos);
    196196                buffer_rel_pos = bitstream_scan(buf->item_stream[MarkupStart], buffer_rel_pos);
     197        }
     198}
     199
     200template <CodeUnit_Base C>
     201inline void ParsingEngine<C>::ScanToCD_End_check() {
     202        int preserve_pos;
     203        buffer_rel_pos = bitstream_scan(buf->item_stream[CD_End_check], buffer_rel_pos);
     204        while (buffer_rel_pos >= BUFFER_SIZE) {
     205                Text_action(text_or_markup_start, AbsPos());
     206                text_or_markup_start = AbsPos();
     207                FinalizeBuffer_action(preserve_pos);
     208                AdvanceBuffers(preserve_pos);
     209                buffer_rel_pos = bitstream_scan(buf->item_stream[CD_End_check], buffer_rel_pos);
    197210        }
    198211}
     
    292305                Error_action(text_or_markup_start, AbsPos());
    293306        }
    294         else {
     307        else { 
     308                Advance(1);
     309                text_or_markup_start = AbsPos();
     310                CDATA_start_action(text_or_markup_start);
    295311                ScanTo(CD_End_check);
    296312                while (!at_CDATA_End<C>(cur())) {
     
    298314                        ScanTo(CD_End_check);
    299315                }
     316                Text_action(text_or_markup_start, AbsPos());
    300317                Advance(3); /* Skip "]]>". */
    301                 CDATA_action(text_or_markup_start, AbsPos());
     318                CDATA_end_action(AbsPos());
    302319        }
    303320}
Note: See TracChangeset for help on using the changeset viewer.