/[suikacvs]/markup/html/whatpm/Whatpm/HTML/Tokenizer.pm
Suika

Diff of /markup/html/whatpm/Whatpm/HTML/Tokenizer.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by wakaba, Tue Oct 14 05:34:05 2008 UTC revision 1.5 by wakaba, Tue Oct 14 14:38:59 2008 UTC
# Line 178  sub _initialize_tokenizer ($) { Line 178  sub _initialize_tokenizer ($) {
178    #$self->{is_xml} (if XML)    #$self->{is_xml} (if XML)
179    
180    $self->{state} = DATA_STATE; # MUST    $self->{state} = DATA_STATE; # MUST
181    #$self->{s_kwd}; # state keyword - initialized when used    $self->{s_kwd} = ''; # state keyword
182    #$self->{entity__value}; # initialized when used    #$self->{entity__value}; # initialized when used
183    #$self->{entity__match}; # initialized when used    #$self->{entity__match}; # initialized when used
184    $self->{content_model} = PCDATA_CONTENT_MODEL; # be    $self->{content_model} = PCDATA_CONTENT_MODEL; # be
# Line 362  sub _get_next_token ($) { Line 362  sub _get_next_token ($) {
362          }          }
363        } elsif ($self->{nc} == 0x002D) { # -        } elsif ($self->{nc} == 0x002D) { # -
364          if ($self->{content_model} & CM_LIMITED_MARKUP) { # RCDATA | CDATA          if ($self->{content_model} & CM_LIMITED_MARKUP) { # RCDATA | CDATA
365            $self->{s_kwd} .= '-';            if ($self->{s_kwd} eq '<!-') {
             
           if ($self->{s_kwd} eq '<!--') {  
366                            
367              $self->{escape} = 1; # unless $self->{escape};              $self->{escape} = 1; # unless $self->{escape};
368              $self->{s_kwd} = '--';              $self->{s_kwd} = '--';
369              #              #
370            } elsif ($self->{s_kwd} eq '---') {            } elsif ($self->{s_kwd} eq '-') {
371                            
372              $self->{s_kwd} = '--';              $self->{s_kwd} = '--';
373              #              #
374              } elsif ($self->{s_kwd} eq '<!' or $self->{s_kwd} eq '-') {
375                
376                $self->{s_kwd} .= '-';
377                #
378            } else {            } else {
379                            
380                $self->{s_kwd} = '-';
381              #              #
382            }            }
383          }          }
# Line 420  sub _get_next_token ($) { Line 423  sub _get_next_token ($) {
423            if ($self->{s_kwd} eq '--') {            if ($self->{s_kwd} eq '--') {
424                            
425              delete $self->{escape};              delete $self->{escape};
426                #
427            } else {            } else {
428                            
429                #
430            }            }
431            } elsif ($self->{is_xml} and $self->{s_kwd} eq ']]') {
432              
433              $self->{parse_error}->(level => $self->{level}->{must}, type => 'unmatched mse', ## TODO: type
434                              line => $self->{line_prev},
435                              column => $self->{column_prev} - 1);
436              #
437          } else {          } else {
438                        
439              #
440          }          }
441                    
442          $self->{s_kwd} = '';          $self->{s_kwd} = '';
443          #          #
444          } elsif ($self->{nc} == 0x005D) { # ]
445            if ($self->{s_kwd} eq ']' or $self->{s_kwd} eq '') {
446              
447              $self->{s_kwd} .= ']';
448            } elsif ($self->{s_kwd} eq ']]') {
449              
450              #
451            } else {
452              
453              $self->{s_kwd} = '';
454            }
455            #
456        } elsif ($self->{nc} == -1) {        } elsif ($self->{nc} == -1) {
457                    
458          $self->{s_kwd} = '';          $self->{s_kwd} = '';
# Line 446  sub _get_next_token ($) { Line 470  sub _get_next_token ($) {
470                     data => chr $self->{nc},                     data => chr $self->{nc},
471                     line => $self->{line}, column => $self->{column},                     line => $self->{line}, column => $self->{column},
472                    };                    };
473        if ($self->{read_until}->($token->{data}, q[-!<>&],        if ($self->{read_until}->($token->{data}, q{-!<>&\]},
474                                  length $token->{data})) {                                  length $token->{data})) {
475          $self->{s_kwd} = '';          $self->{s_kwd} = '';
476        }        }
477    
478        ## Stay in the data state.        ## Stay in the data state.
479        if ($self->{content_model} == PCDATA_CONTENT_MODEL) {        if (not $self->{is_xml} and
480              $self->{content_model} == PCDATA_CONTENT_MODEL) {
481                    
482          $self->{state} = PCDATA_STATE;          $self->{state} = PCDATA_STATE;
483        } else {        } else {
# Line 500  sub _get_next_token ($) { Line 525  sub _get_next_token ($) {
525    
526          ## reconsume          ## reconsume
527          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
528            $self->{s_kwd} = '';
529          return  ({type => CHARACTER_TOKEN, data => '<',          return  ({type => CHARACTER_TOKEN, data => '<',
530                    line => $self->{line_prev},                    line => $self->{line_prev},
531                    column => $self->{column_prev},                    column => $self->{column_prev},
# Line 541  sub _get_next_token ($) { Line 567  sub _get_next_token ($) {
567                        
568            $self->{ct}            $self->{ct}
569              = {type => START_TAG_TOKEN,              = {type => START_TAG_TOKEN,
570                 tag_name => chr ($self->{nc} + 0x0020),                 tag_name => chr ($self->{nc} + ($self->{is_xml} ? 0 : 0x0020)),
571                 line => $self->{line_prev},                 line => $self->{line_prev},
572                 column => $self->{column_prev}};                 column => $self->{column_prev}};
573            $self->{state} = TAG_NAME_STATE;            $self->{state} = TAG_NAME_STATE;
# Line 583  sub _get_next_token ($) { Line 609  sub _get_next_token ($) {
609                            line => $self->{line_prev},                            line => $self->{line_prev},
610                            column => $self->{column_prev});                            column => $self->{column_prev});
611            $self->{state} = DATA_STATE;            $self->{state} = DATA_STATE;
612              $self->{s_kwd} = '';
613                        
614      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
615        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 619  sub _get_next_token ($) { Line 646  sub _get_next_token ($) {
646                            line => $self->{line_prev},                            line => $self->{line_prev},
647                            column => $self->{column_prev});                            column => $self->{column_prev});
648            $self->{state} = DATA_STATE;            $self->{state} = DATA_STATE;
649              $self->{s_kwd} = '';
650            ## reconsume            ## reconsume
651    
652            return  ({type => CHARACTER_TOKEN, data => '<',            return  ({type => CHARACTER_TOKEN, data => '<',
# Line 647  sub _get_next_token ($) { Line 675  sub _get_next_token ($) {
675            ## NOTE: See <http://krijnhoetmer.nl/irc-logs/whatwg/20070626#l-564>.            ## NOTE: See <http://krijnhoetmer.nl/irc-logs/whatwg/20070626#l-564>.
676                        
677            $self->{state} = DATA_STATE;            $self->{state} = DATA_STATE;
678              $self->{s_kwd} = '';
679            ## Reconsume.            ## Reconsume.
680            return  ({type => CHARACTER_TOKEN, data => '</',            return  ({type => CHARACTER_TOKEN, data => '</',
681                      line => $l, column => $c,                      line => $l, column => $c,
# Line 660  sub _get_next_token ($) { Line 689  sub _get_next_token ($) {
689                    
690          $self->{ct}          $self->{ct}
691              = {type => END_TAG_TOKEN,              = {type => END_TAG_TOKEN,
692                 tag_name => chr ($self->{nc} + 0x0020),                 tag_name => chr ($self->{nc} + ($self->{is_xml} ? 0 : 0x0020)),
693                 line => $l, column => $c};                 line => $l, column => $c};
694          $self->{state} = TAG_NAME_STATE;          $self->{state} = TAG_NAME_STATE;
695                    
# Line 700  sub _get_next_token ($) { Line 729  sub _get_next_token ($) {
729                          line => $self->{line_prev}, ## "<" in "</>"                          line => $self->{line_prev}, ## "<" in "</>"
730                          column => $self->{column_prev} - 1);                          column => $self->{column_prev} - 1);
731          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
732            $self->{s_kwd} = '';
733                    
734      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
735        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 715  sub _get_next_token ($) { Line 745  sub _get_next_token ($) {
745        } elsif ($self->{nc} == -1) {        } elsif ($self->{nc} == -1) {
746                    
747          $self->{parse_error}->(level => $self->{level}->{must}, type => 'bare etago');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'bare etago');
748            $self->{s_kwd} = '';
749          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
750          # reconsume          # reconsume
751    
# Line 764  sub _get_next_token ($) { Line 795  sub _get_next_token ($) {
795          } else {          } else {
796                        
797            $self->{state} = DATA_STATE;            $self->{state} = DATA_STATE;
798              $self->{s_kwd} = '';
799            ## Reconsume.            ## Reconsume.
800            return  ({type => CHARACTER_TOKEN,            return  ({type => CHARACTER_TOKEN,
801                      data => '</' . $self->{s_kwd},                      data => '</' . $self->{s_kwd},
# Line 782  sub _get_next_token ($) { Line 814  sub _get_next_token ($) {
814                        
815            ## Reconsume.            ## Reconsume.
816            $self->{state} = DATA_STATE;            $self->{state} = DATA_STATE;
817              $self->{s_kwd} = '';
818            return  ({type => CHARACTER_TOKEN,            return  ({type => CHARACTER_TOKEN,
819                      data => '</' . $self->{s_kwd},                      data => '</' . $self->{s_kwd},
820                      line => $self->{line_prev},                      line => $self->{line_prev},
# Line 833  sub _get_next_token ($) { Line 866  sub _get_next_token ($) {
866            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
867          }          }
868          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
869            $self->{s_kwd} = '';
870                    
871      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
872        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 851  sub _get_next_token ($) { Line 885  sub _get_next_token ($) {
885        } elsif (0x0041 <= $self->{nc} and        } elsif (0x0041 <= $self->{nc} and
886                 $self->{nc} <= 0x005A) { # A..Z                 $self->{nc} <= 0x005A) { # A..Z
887                    
888          $self->{ct}->{tag_name} .= chr ($self->{nc} + 0x0020);          $self->{ct}->{tag_name}
889                .= chr ($self->{nc} + ($self->{is_xml} ? 0 : 0x0020));
890            # start tag or end tag            # start tag or end tag
891          ## Stay in this state          ## Stay in this state
892                    
# Line 884  sub _get_next_token ($) { Line 919  sub _get_next_token ($) {
919            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
920          }          }
921          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
922            $self->{s_kwd} = '';
923          # reconsume          # reconsume
924    
925          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
# Line 954  sub _get_next_token ($) { Line 990  sub _get_next_token ($) {
990            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
991          }          }
992          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
993            $self->{s_kwd} = '';
994                    
995      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
996        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 973  sub _get_next_token ($) { Line 1010  sub _get_next_token ($) {
1010                 $self->{nc} <= 0x005A) { # A..Z                 $self->{nc} <= 0x005A) { # A..Z
1011                    
1012          $self->{ca}          $self->{ca}
1013              = {name => chr ($self->{nc} + 0x0020),              = {name => chr ($self->{nc} + ($self->{is_xml} ? 0 : 0x0020)),
1014                 value => '',                 value => '',
1015                 line => $self->{line}, column => $self->{column}};                 line => $self->{line}, column => $self->{column}};
1016          $self->{state} = ATTRIBUTE_NAME_STATE;          $self->{state} = ATTRIBUTE_NAME_STATE;
# Line 1021  sub _get_next_token ($) { Line 1058  sub _get_next_token ($) {
1058            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1059          }          }
1060          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1061            $self->{s_kwd} = '';
1062          # reconsume          # reconsume
1063    
1064          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
# Line 1116  sub _get_next_token ($) { Line 1154  sub _get_next_token ($) {
1154            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1155          }          }
1156          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1157            $self->{s_kwd} = '';
1158                    
1159      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
1160        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 1134  sub _get_next_token ($) { Line 1173  sub _get_next_token ($) {
1173        } elsif (0x0041 <= $self->{nc} and        } elsif (0x0041 <= $self->{nc} and
1174                 $self->{nc} <= 0x005A) { # A..Z                 $self->{nc} <= 0x005A) { # A..Z
1175                    
1176          $self->{ca}->{name} .= chr ($self->{nc} + 0x0020);          $self->{ca}->{name}
1177                .= chr ($self->{nc} + ($self->{is_xml} ? 0 : 0x0020));
1178          ## Stay in the state          ## Stay in the state
1179                    
1180      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
# Line 1183  sub _get_next_token ($) { Line 1223  sub _get_next_token ($) {
1223            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1224          }          }
1225          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1226            $self->{s_kwd} = '';
1227          # reconsume          # reconsume
1228    
1229          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
# Line 1259  sub _get_next_token ($) { Line 1300  sub _get_next_token ($) {
1300            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1301          }          }
1302          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1303            $self->{s_kwd} = '';
1304                    
1305      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
1306        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 1278  sub _get_next_token ($) { Line 1320  sub _get_next_token ($) {
1320                 $self->{nc} <= 0x005A) { # A..Z                 $self->{nc} <= 0x005A) { # A..Z
1321                    
1322          $self->{ca}          $self->{ca}
1323              = {name => chr ($self->{nc} + 0x0020),              = {name => chr ($self->{nc} + ($self->{is_xml} ? 0 : 0x0020)),
1324                 value => '',                 value => '',
1325                 line => $self->{line}, column => $self->{column}};                 line => $self->{line}, column => $self->{column}};
1326          $self->{state} = ATTRIBUTE_NAME_STATE;          $self->{state} = ATTRIBUTE_NAME_STATE;
# Line 1326  sub _get_next_token ($) { Line 1368  sub _get_next_token ($) {
1368          } else {          } else {
1369            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1370          }          }
1371            $self->{s_kwd} = '';
1372          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1373          # reconsume          # reconsume
1374    
# Line 1427  sub _get_next_token ($) { Line 1470  sub _get_next_token ($) {
1470            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1471          }          }
1472          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1473            $self->{s_kwd} = '';
1474                    
1475      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
1476        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 1460  sub _get_next_token ($) { Line 1504  sub _get_next_token ($) {
1504            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1505          }          }
1506          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1507            $self->{s_kwd} = '';
1508          ## reconsume          ## reconsume
1509    
1510          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
# Line 1542  sub _get_next_token ($) { Line 1587  sub _get_next_token ($) {
1587            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1588          }          }
1589          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1590            $self->{s_kwd} = '';
1591          ## reconsume          ## reconsume
1592    
1593          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
# Line 1623  sub _get_next_token ($) { Line 1669  sub _get_next_token ($) {
1669            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1670          }          }
1671          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1672            $self->{s_kwd} = '';
1673          ## reconsume          ## reconsume
1674    
1675          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
# Line 1703  sub _get_next_token ($) { Line 1750  sub _get_next_token ($) {
1750            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1751          }          }
1752          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1753            $self->{s_kwd} = '';
1754                    
1755      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
1756        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 1736  sub _get_next_token ($) { Line 1784  sub _get_next_token ($) {
1784            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1785          }          }
1786          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1787            $self->{s_kwd} = '';
1788          ## reconsume          ## reconsume
1789    
1790          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
# Line 1804  sub _get_next_token ($) { Line 1853  sub _get_next_token ($) {
1853            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1854          }          }
1855          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1856            $self->{s_kwd} = '';
1857                    
1858      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
1859        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 1851  sub _get_next_token ($) { Line 1901  sub _get_next_token ($) {
1901            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1902          }          }
1903          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1904            $self->{s_kwd} = '';
1905          ## Reconsume.          ## Reconsume.
1906          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
1907          redo A;          redo A;
# Line 1881  sub _get_next_token ($) { Line 1932  sub _get_next_token ($) {
1932          }          }
1933    
1934          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1935            $self->{s_kwd} = '';
1936                    
1937      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
1938        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 1913  sub _get_next_token ($) { Line 1965  sub _get_next_token ($) {
1965            die "$0: $self->{ct}->{type}: Unknown token type";            die "$0: $self->{ct}->{type}: Unknown token type";
1966          }          }
1967          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1968            $self->{s_kwd} = '';
1969          ## Reconsume.          ## Reconsume.
1970          return  ($self->{ct}); # start tag or end tag          return  ($self->{ct}); # start tag or end tag
1971          redo A;          redo A;
# Line 1933  sub _get_next_token ($) { Line 1986  sub _get_next_token ($) {
1986        if ($self->{nc} == 0x003E) { # >        if ($self->{nc} == 0x003E) { # >
1987                    
1988          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
1989            $self->{s_kwd} = '';
1990                    
1991      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
1992        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 1950  sub _get_next_token ($) { Line 2004  sub _get_next_token ($) {
2004        } elsif ($self->{nc} == -1) {        } elsif ($self->{nc} == -1) {
2005                    
2006          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2007            $self->{s_kwd} = '';
2008          ## reconsume          ## reconsume
2009    
2010          return  ($self->{ct}); # comment          return  ($self->{ct}); # comment
# Line 2224  sub _get_next_token ($) { Line 2279  sub _get_next_token ($) {
2279                    
2280          $self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment');
2281          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2282            $self->{s_kwd} = '';
2283                    
2284      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
2285        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 2243  sub _get_next_token ($) { Line 2299  sub _get_next_token ($) {
2299                    
2300          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');
2301          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2302            $self->{s_kwd} = '';
2303          ## reconsume          ## reconsume
2304    
2305          return  ($self->{ct}); # comment          return  ($self->{ct}); # comment
# Line 2286  sub _get_next_token ($) { Line 2343  sub _get_next_token ($) {
2343                    
2344          $self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment');
2345          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2346            $self->{s_kwd} = '';
2347                    
2348      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
2349        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 2305  sub _get_next_token ($) { Line 2363  sub _get_next_token ($) {
2363                    
2364          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');
2365          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2366            $self->{s_kwd} = '';
2367          ## reconsume          ## reconsume
2368    
2369          return  ($self->{ct}); # comment          return  ($self->{ct}); # comment
# Line 2348  sub _get_next_token ($) { Line 2407  sub _get_next_token ($) {
2407                    
2408          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');
2409          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2410            $self->{s_kwd} = '';
2411          ## reconsume          ## reconsume
2412    
2413          return  ($self->{ct}); # comment          return  ($self->{ct}); # comment
# Line 2393  sub _get_next_token ($) { Line 2453  sub _get_next_token ($) {
2453        } elsif ($self->{nc} == -1) {        } elsif ($self->{nc} == -1) {
2454                    
2455          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');
2456            $self->{s_kwd} = '';
2457          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2458            $self->{s_kwd} = '';
2459          ## reconsume          ## reconsume
2460    
2461          return  ($self->{ct}); # comment          return  ($self->{ct}); # comment
# Line 2420  sub _get_next_token ($) { Line 2482  sub _get_next_token ($) {
2482        if ($self->{nc} == 0x003E) { # >        if ($self->{nc} == 0x003E) { # >
2483                    
2484          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2485            $self->{s_kwd} = '';
2486                    
2487      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
2488        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 2458  sub _get_next_token ($) { Line 2521  sub _get_next_token ($) {
2521                    
2522          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment');
2523          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2524            $self->{s_kwd} = '';
2525          ## reconsume          ## reconsume
2526    
2527          return  ($self->{ct}); # comment          return  ($self->{ct}); # comment
# Line 2526  sub _get_next_token ($) { Line 2590  sub _get_next_token ($) {
2590                    
2591          $self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name');
2592          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2593            $self->{s_kwd} = '';
2594                    
2595      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
2596        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 2545  sub _get_next_token ($) { Line 2610  sub _get_next_token ($) {
2610                    
2611          $self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name');
2612          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2613            $self->{s_kwd} = '';
2614          ## reconsume          ## reconsume
2615    
2616          return  ($self->{ct}); # DOCTYPE (quirks)          return  ($self->{ct}); # DOCTYPE (quirks)
# Line 2588  sub _get_next_token ($) { Line 2654  sub _get_next_token ($) {
2654        } elsif ($self->{nc} == 0x003E) { # >        } elsif ($self->{nc} == 0x003E) { # >
2655                    
2656          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2657            $self->{s_kwd} = '';
2658                    
2659      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
2660        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 2607  sub _get_next_token ($) { Line 2674  sub _get_next_token ($) {
2674                    
2675          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');
2676          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2677            $self->{s_kwd} = '';
2678          ## reconsume          ## reconsume
2679    
2680          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 2650  sub _get_next_token ($) { Line 2718  sub _get_next_token ($) {
2718        } elsif ($self->{nc} == 0x003E) { # >        } elsif ($self->{nc} == 0x003E) { # >
2719                    
2720          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2721            $self->{s_kwd} = '';
2722                    
2723      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
2724        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 2669  sub _get_next_token ($) { Line 2738  sub _get_next_token ($) {
2738                    
2739          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');
2740          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2741            $self->{s_kwd} = '';
2742          ## reconsume          ## reconsume
2743    
2744          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 2897  sub _get_next_token ($) { Line 2967  sub _get_next_token ($) {
2967          $self->{parse_error}->(level => $self->{level}->{must}, type => 'no PUBLIC literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'no PUBLIC literal');
2968    
2969          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2970            $self->{s_kwd} = '';
2971                    
2972      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
2973        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 2918  sub _get_next_token ($) { Line 2989  sub _get_next_token ($) {
2989          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');
2990    
2991          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
2992            $self->{s_kwd} = '';
2993          ## reconsume          ## reconsume
2994    
2995          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 2964  sub _get_next_token ($) { Line 3036  sub _get_next_token ($) {
3036          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal');
3037    
3038          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3039            $self->{s_kwd} = '';
3040                    
3041      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3042        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 2985  sub _get_next_token ($) { Line 3058  sub _get_next_token ($) {
3058          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal');
3059    
3060          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3061            $self->{s_kwd} = '';
3062          ## reconsume          ## reconsume
3063    
3064          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 3033  sub _get_next_token ($) { Line 3107  sub _get_next_token ($) {
3107          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal');
3108    
3109          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3110            $self->{s_kwd} = '';
3111                    
3112      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3113        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3054  sub _get_next_token ($) { Line 3129  sub _get_next_token ($) {
3129          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal');
3130    
3131          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3132            $self->{s_kwd} = '';
3133          ## reconsume          ## reconsume
3134    
3135          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 3132  sub _get_next_token ($) { Line 3208  sub _get_next_token ($) {
3208        } elsif ($self->{nc} == 0x003E) { # >        } elsif ($self->{nc} == 0x003E) { # >
3209                    
3210          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3211            $self->{s_kwd} = '';
3212                    
3213      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3214        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3152  sub _get_next_token ($) { Line 3229  sub _get_next_token ($) {
3229          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');
3230    
3231          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3232            $self->{s_kwd} = '';
3233          ## reconsume          ## reconsume
3234    
3235          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 3229  sub _get_next_token ($) { Line 3307  sub _get_next_token ($) {
3307                    
3308          $self->{parse_error}->(level => $self->{level}->{must}, type => 'no SYSTEM literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'no SYSTEM literal');
3309          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3310            $self->{s_kwd} = '';
3311                    
3312      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3313        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3250  sub _get_next_token ($) { Line 3329  sub _get_next_token ($) {
3329          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');
3330    
3331          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3332            $self->{s_kwd} = '';
3333          ## reconsume          ## reconsume
3334    
3335          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 3296  sub _get_next_token ($) { Line 3376  sub _get_next_token ($) {
3376          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal');
3377    
3378          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3379            $self->{s_kwd} = '';
3380                    
3381      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3382        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3317  sub _get_next_token ($) { Line 3398  sub _get_next_token ($) {
3398          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal');
3399    
3400          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3401            $self->{s_kwd} = '';
3402          ## reconsume          ## reconsume
3403    
3404          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 3365  sub _get_next_token ($) { Line 3447  sub _get_next_token ($) {
3447          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal');
3448    
3449          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3450            $self->{s_kwd} = '';
3451                    
3452      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3453        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3386  sub _get_next_token ($) { Line 3469  sub _get_next_token ($) {
3469          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal');
3470    
3471          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3472            $self->{s_kwd} = '';
3473          ## reconsume          ## reconsume
3474    
3475          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 3432  sub _get_next_token ($) { Line 3516  sub _get_next_token ($) {
3516        } elsif ($self->{nc} == 0x003E) { # >        } elsif ($self->{nc} == 0x003E) { # >
3517                    
3518          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3519            $self->{s_kwd} = '';
3520                    
3521      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3522        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3451  sub _get_next_token ($) { Line 3536  sub _get_next_token ($) {
3536                    
3537          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');          $self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE');
3538          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3539            $self->{s_kwd} = '';
3540          ## reconsume          ## reconsume
3541    
3542          $self->{ct}->{quirks} = 1;          $self->{ct}->{quirks} = 1;
# Line 3480  sub _get_next_token ($) { Line 3566  sub _get_next_token ($) {
3566        if ($self->{nc} == 0x003E) { # >        if ($self->{nc} == 0x003E) { # >
3567                    
3568          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3569            $self->{s_kwd} = '';
3570                    
3571      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3572        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3498  sub _get_next_token ($) { Line 3585  sub _get_next_token ($) {
3585        } elsif ($self->{nc} == -1) {        } elsif ($self->{nc} == -1) {
3586                    
3587          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3588            $self->{s_kwd} = '';
3589          ## reconsume          ## reconsume
3590    
3591          return  ($self->{ct}); # DOCTYPE          return  ($self->{ct}); # DOCTYPE
# Line 3544  sub _get_next_token ($) { Line 3632  sub _get_next_token ($) {
3632          redo A;          redo A;
3633        } elsif ($self->{nc} == -1) {        } elsif ($self->{nc} == -1) {
3634          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3635            $self->{s_kwd} = '';
3636                    
3637      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3638        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3612  sub _get_next_token ($) { Line 3701  sub _get_next_token ($) {
3701      } elsif ($self->{state} == CDATA_SECTION_MSE2_STATE) {      } elsif ($self->{state} == CDATA_SECTION_MSE2_STATE) {
3702        if ($self->{nc} == 0x003E) { # >        if ($self->{nc} == 0x003E) { # >
3703          $self->{state} = DATA_STATE;          $self->{state} = DATA_STATE;
3704            $self->{s_kwd} = '';
3705                    
3706      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {      if ($self->{char_buffer_pos} < length $self->{char_buffer}) {
3707        $self->{line_prev} = $self->{line};        $self->{line_prev} = $self->{line};
# Line 3719  sub _get_next_token ($) { Line 3809  sub _get_next_token ($) {
3809        if ($self->{prev_state} == DATA_STATE) {        if ($self->{prev_state} == DATA_STATE) {
3810                    
3811          $self->{state} = $self->{prev_state};          $self->{state} = $self->{prev_state};
3812            $self->{s_kwd} = '';
3813          ## Reconsume.          ## Reconsume.
3814          return  ({type => CHARACTER_TOKEN, data => '&',          return  ({type => CHARACTER_TOKEN, data => '&',
3815                    line => $self->{line_prev},                    line => $self->{line_prev},
# Line 3729  sub _get_next_token ($) { Line 3820  sub _get_next_token ($) {
3820                    
3821          $self->{ca}->{value} .= '&';          $self->{ca}->{value} .= '&';
3822          $self->{state} = $self->{prev_state};          $self->{state} = $self->{prev_state};
3823            $self->{s_kwd} = '';
3824          ## Reconsume.          ## Reconsume.
3825          redo A;          redo A;
3826        }        }
# Line 3779  sub _get_next_token ($) { Line 3871  sub _get_next_token ($) {
3871          if ($self->{prev_state} == DATA_STATE) {          if ($self->{prev_state} == DATA_STATE) {
3872                        
3873            $self->{state} = $self->{prev_state};            $self->{state} = $self->{prev_state};
3874              $self->{s_kwd} = '';
3875            ## Reconsume.            ## Reconsume.
3876            return  ({type => CHARACTER_TOKEN,            return  ({type => CHARACTER_TOKEN,
3877                      data => '&#',                      data => '&#',
# Line 3790  sub _get_next_token ($) { Line 3883  sub _get_next_token ($) {
3883                        
3884            $self->{ca}->{value} .= '&#';            $self->{ca}->{value} .= '&#';
3885            $self->{state} = $self->{prev_state};            $self->{state} = $self->{prev_state};
3886              $self->{s_kwd} = '';
3887            ## Reconsume.            ## Reconsume.
3888            redo A;            redo A;
3889          }          }
# Line 3855  sub _get_next_token ($) { Line 3949  sub _get_next_token ($) {
3949        if ($self->{prev_state} == DATA_STATE) {        if ($self->{prev_state} == DATA_STATE) {
3950                    
3951          $self->{state} = $self->{prev_state};          $self->{state} = $self->{prev_state};
3952            $self->{s_kwd} = '';
3953          ## Reconsume.          ## Reconsume.
3954          return  ({type => CHARACTER_TOKEN, data => chr $code,          return  ({type => CHARACTER_TOKEN, data => chr $code,
3955                    line => $l, column => $c,                    line => $l, column => $c,
# Line 3865  sub _get_next_token ($) { Line 3960  sub _get_next_token ($) {
3960          $self->{ca}->{value} .= chr $code;          $self->{ca}->{value} .= chr $code;
3961          $self->{ca}->{has_reference} = 1;          $self->{ca}->{has_reference} = 1;
3962          $self->{state} = $self->{prev_state};          $self->{state} = $self->{prev_state};
3963            $self->{s_kwd} = '';
3964          ## Reconsume.          ## Reconsume.
3965          redo A;          redo A;
3966        }        }
# Line 3890  sub _get_next_token ($) { Line 3986  sub _get_next_token ($) {
3986          if ($self->{prev_state} == DATA_STATE) {          if ($self->{prev_state} == DATA_STATE) {
3987                        
3988            $self->{state} = $self->{prev_state};            $self->{state} = $self->{prev_state};
3989              $self->{s_kwd} = '';
3990            ## Reconsume.            ## Reconsume.
3991            return  ({type => CHARACTER_TOKEN,            return  ({type => CHARACTER_TOKEN,
3992                      data => '&' . $self->{s_kwd},                      data => '&' . $self->{s_kwd},
# Line 3901  sub _get_next_token ($) { Line 3998  sub _get_next_token ($) {
3998                        
3999            $self->{ca}->{value} .= '&' . $self->{s_kwd};            $self->{ca}->{value} .= '&' . $self->{s_kwd};
4000            $self->{state} = $self->{prev_state};            $self->{state} = $self->{prev_state};
4001              $self->{s_kwd} = '';
4002            ## Reconsume.            ## Reconsume.
4003            redo A;            redo A;
4004          }          }
# Line 4003  sub _get_next_token ($) { Line 4101  sub _get_next_token ($) {
4101        if ($self->{prev_state} == DATA_STATE) {        if ($self->{prev_state} == DATA_STATE) {
4102                    
4103          $self->{state} = $self->{prev_state};          $self->{state} = $self->{prev_state};
4104            $self->{s_kwd} = '';
4105          ## Reconsume.          ## Reconsume.
4106          return  ({type => CHARACTER_TOKEN, data => chr $code,          return  ({type => CHARACTER_TOKEN, data => chr $code,
4107                    line => $l, column => $c,                    line => $l, column => $c,
# Line 4013  sub _get_next_token ($) { Line 4112  sub _get_next_token ($) {
4112          $self->{ca}->{value} .= chr $code;          $self->{ca}->{value} .= chr $code;
4113          $self->{ca}->{has_reference} = 1;          $self->{ca}->{has_reference} = 1;
4114          $self->{state} = $self->{prev_state};          $self->{state} = $self->{prev_state};
4115            $self->{s_kwd} = '';
4116          ## Reconsume.          ## Reconsume.
4117          redo A;          redo A;
4118        }        }
# Line 4125  sub _get_next_token ($) { Line 4225  sub _get_next_token ($) {
4225        if ($self->{prev_state} == DATA_STATE) {        if ($self->{prev_state} == DATA_STATE) {
4226                    
4227          $self->{state} = $self->{prev_state};          $self->{state} = $self->{prev_state};
4228            $self->{s_kwd} = '';
4229          ## Reconsume.          ## Reconsume.
4230          return  ({type => CHARACTER_TOKEN,          return  ({type => CHARACTER_TOKEN,
4231                    data => $data,                    data => $data,
# Line 4137  sub _get_next_token ($) { Line 4238  sub _get_next_token ($) {
4238          $self->{ca}->{value} .= $data;          $self->{ca}->{value} .= $data;
4239          $self->{ca}->{has_reference} = 1 if $has_ref;          $self->{ca}->{has_reference} = 1 if $has_ref;
4240          $self->{state} = $self->{prev_state};          $self->{state} = $self->{prev_state};
4241            $self->{s_kwd} = '';
4242          ## Reconsume.          ## Reconsume.
4243          redo A;          redo A;
4244        }        }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.5

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24