| 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 |
| 219 |
## ->{value} |
## ->{value} |
| 220 |
## ->{has_reference} == 1 or 0 |
## ->{has_reference} == 1 or 0 |
| 221 |
## ->{data} (COMMENT_TOKEN, CHARACTER_TOKEN) |
## ->{data} (COMMENT_TOKEN, CHARACTER_TOKEN) |
| 222 |
|
## ->{has_reference} == 1 or 0 (CHARACTER_TOKEN) |
| 223 |
## NOTE: The "self-closing flag" is hold as |$self->{self_closing}|. |
## NOTE: The "self-closing flag" is hold as |$self->{self_closing}|. |
| 224 |
## |->{self_closing}| is used to save the value of |$self->{self_closing}| |
## |->{self_closing}| is used to save the value of |$self->{self_closing}| |
| 225 |
## while the token is pushed back to the stack. |
## while the token is pushed back to the stack. |
| 363 |
} |
} |
| 364 |
} elsif ($self->{nc} == 0x002D) { # - |
} elsif ($self->{nc} == 0x002D) { # - |
| 365 |
if ($self->{content_model} & CM_LIMITED_MARKUP) { # RCDATA | CDATA |
if ($self->{content_model} & CM_LIMITED_MARKUP) { # RCDATA | CDATA |
| 366 |
$self->{s_kwd} .= '-'; |
if ($self->{s_kwd} eq '<!-') { |
|
|
|
|
if ($self->{s_kwd} eq '<!--') { |
|
| 367 |
|
|
| 368 |
$self->{escape} = 1; # unless $self->{escape}; |
$self->{escape} = 1; # unless $self->{escape}; |
| 369 |
$self->{s_kwd} = '--'; |
$self->{s_kwd} = '--'; |
| 370 |
# |
# |
| 371 |
} elsif ($self->{s_kwd} eq '---') { |
} elsif ($self->{s_kwd} eq '-') { |
| 372 |
|
|
| 373 |
$self->{s_kwd} = '--'; |
$self->{s_kwd} = '--'; |
| 374 |
# |
# |
| 375 |
|
} elsif ($self->{s_kwd} eq '<!' or $self->{s_kwd} eq '-') { |
| 376 |
|
|
| 377 |
|
$self->{s_kwd} .= '-'; |
| 378 |
|
# |
| 379 |
} else { |
} else { |
| 380 |
|
|
| 381 |
|
$self->{s_kwd} = '-'; |
| 382 |
# |
# |
| 383 |
} |
} |
| 384 |
} |
} |
| 424 |
if ($self->{s_kwd} eq '--') { |
if ($self->{s_kwd} eq '--') { |
| 425 |
|
|
| 426 |
delete $self->{escape}; |
delete $self->{escape}; |
| 427 |
|
# |
| 428 |
} else { |
} else { |
| 429 |
|
|
| 430 |
|
# |
| 431 |
} |
} |
| 432 |
|
} elsif ($self->{is_xml} and $self->{s_kwd} eq ']]') { |
| 433 |
|
|
| 434 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unmatched mse', ## TODO: type |
| 435 |
|
line => $self->{line_prev}, |
| 436 |
|
column => $self->{column_prev} - 1); |
| 437 |
|
# |
| 438 |
} else { |
} else { |
| 439 |
|
|
| 440 |
|
# |
| 441 |
} |
} |
| 442 |
|
|
| 443 |
$self->{s_kwd} = ''; |
$self->{s_kwd} = ''; |
| 444 |
# |
# |
| 445 |
|
} elsif ($self->{nc} == 0x005D) { # ] |
| 446 |
|
if ($self->{s_kwd} eq ']' or $self->{s_kwd} eq '') { |
| 447 |
|
|
| 448 |
|
$self->{s_kwd} .= ']'; |
| 449 |
|
} elsif ($self->{s_kwd} eq ']]') { |
| 450 |
|
|
| 451 |
|
# |
| 452 |
|
} else { |
| 453 |
|
|
| 454 |
|
$self->{s_kwd} = ''; |
| 455 |
|
} |
| 456 |
|
# |
| 457 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 458 |
|
|
| 459 |
$self->{s_kwd} = ''; |
$self->{s_kwd} = ''; |
| 471 |
data => chr $self->{nc}, |
data => chr $self->{nc}, |
| 472 |
line => $self->{line}, column => $self->{column}, |
line => $self->{line}, column => $self->{column}, |
| 473 |
}; |
}; |
| 474 |
if ($self->{read_until}->($token->{data}, q[-!<>&], |
if ($self->{read_until}->($token->{data}, q{-!<>&\]}, |
| 475 |
length $token->{data})) { |
length $token->{data})) { |
| 476 |
$self->{s_kwd} = ''; |
$self->{s_kwd} = ''; |
| 477 |
} |
} |
| 478 |
|
|
| 479 |
## Stay in the data state. |
## Stay in the data state. |
| 480 |
if ($self->{content_model} == PCDATA_CONTENT_MODEL) { |
if (not $self->{is_xml} and |
| 481 |
|
$self->{content_model} == PCDATA_CONTENT_MODEL) { |
| 482 |
|
|
| 483 |
$self->{state} = PCDATA_STATE; |
$self->{state} = PCDATA_STATE; |
| 484 |
} else { |
} else { |
| 526 |
|
|
| 527 |
## reconsume |
## reconsume |
| 528 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 529 |
|
$self->{s_kwd} = ''; |
| 530 |
return ({type => CHARACTER_TOKEN, data => '<', |
return ({type => CHARACTER_TOKEN, data => '<', |
| 531 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 532 |
column => $self->{column_prev}, |
column => $self->{column_prev}, |
| 610 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 611 |
column => $self->{column_prev}); |
column => $self->{column_prev}); |
| 612 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 613 |
|
$self->{s_kwd} = ''; |
| 614 |
|
|
| 615 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 616 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 647 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 648 |
column => $self->{column_prev}); |
column => $self->{column_prev}); |
| 649 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 650 |
|
$self->{s_kwd} = ''; |
| 651 |
## reconsume |
## reconsume |
| 652 |
|
|
| 653 |
return ({type => CHARACTER_TOKEN, data => '<', |
return ({type => CHARACTER_TOKEN, data => '<', |
| 676 |
## NOTE: See <http://krijnhoetmer.nl/irc-logs/whatwg/20070626#l-564>. |
## NOTE: See <http://krijnhoetmer.nl/irc-logs/whatwg/20070626#l-564>. |
| 677 |
|
|
| 678 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 679 |
|
$self->{s_kwd} = ''; |
| 680 |
## Reconsume. |
## Reconsume. |
| 681 |
return ({type => CHARACTER_TOKEN, data => '</', |
return ({type => CHARACTER_TOKEN, data => '</', |
| 682 |
line => $l, column => $c, |
line => $l, column => $c, |
| 730 |
line => $self->{line_prev}, ## "<" in "</>" |
line => $self->{line_prev}, ## "<" in "</>" |
| 731 |
column => $self->{column_prev} - 1); |
column => $self->{column_prev} - 1); |
| 732 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 733 |
|
$self->{s_kwd} = ''; |
| 734 |
|
|
| 735 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 736 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 746 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 747 |
|
|
| 748 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bare etago'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bare etago'); |
| 749 |
|
$self->{s_kwd} = ''; |
| 750 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 751 |
# reconsume |
# reconsume |
| 752 |
|
|
| 796 |
} else { |
} else { |
| 797 |
|
|
| 798 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 799 |
|
$self->{s_kwd} = ''; |
| 800 |
## Reconsume. |
## Reconsume. |
| 801 |
return ({type => CHARACTER_TOKEN, |
return ({type => CHARACTER_TOKEN, |
| 802 |
data => '</' . $self->{s_kwd}, |
data => '</' . $self->{s_kwd}, |
| 815 |
|
|
| 816 |
## Reconsume. |
## Reconsume. |
| 817 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 818 |
|
$self->{s_kwd} = ''; |
| 819 |
return ({type => CHARACTER_TOKEN, |
return ({type => CHARACTER_TOKEN, |
| 820 |
data => '</' . $self->{s_kwd}, |
data => '</' . $self->{s_kwd}, |
| 821 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 867 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 868 |
} |
} |
| 869 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 870 |
|
$self->{s_kwd} = ''; |
| 871 |
|
|
| 872 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 873 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 920 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 921 |
} |
} |
| 922 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 923 |
|
$self->{s_kwd} = ''; |
| 924 |
# reconsume |
# reconsume |
| 925 |
|
|
| 926 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 991 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 992 |
} |
} |
| 993 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 994 |
|
$self->{s_kwd} = ''; |
| 995 |
|
|
| 996 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 997 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 1059 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1060 |
} |
} |
| 1061 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1062 |
|
$self->{s_kwd} = ''; |
| 1063 |
# reconsume |
# reconsume |
| 1064 |
|
|
| 1065 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 1155 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1156 |
} |
} |
| 1157 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1158 |
|
$self->{s_kwd} = ''; |
| 1159 |
|
|
| 1160 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1161 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 1224 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1225 |
} |
} |
| 1226 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1227 |
|
$self->{s_kwd} = ''; |
| 1228 |
# reconsume |
# reconsume |
| 1229 |
|
|
| 1230 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 1301 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1302 |
} |
} |
| 1303 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1304 |
|
$self->{s_kwd} = ''; |
| 1305 |
|
|
| 1306 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1307 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 1369 |
} else { |
} else { |
| 1370 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1371 |
} |
} |
| 1372 |
|
$self->{s_kwd} = ''; |
| 1373 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1374 |
# reconsume |
# reconsume |
| 1375 |
|
|
| 1471 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1472 |
} |
} |
| 1473 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1474 |
|
$self->{s_kwd} = ''; |
| 1475 |
|
|
| 1476 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1477 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 1505 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1506 |
} |
} |
| 1507 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1508 |
|
$self->{s_kwd} = ''; |
| 1509 |
## reconsume |
## reconsume |
| 1510 |
|
|
| 1511 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 1588 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1589 |
} |
} |
| 1590 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1591 |
|
$self->{s_kwd} = ''; |
| 1592 |
## reconsume |
## reconsume |
| 1593 |
|
|
| 1594 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 1670 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1671 |
} |
} |
| 1672 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1673 |
|
$self->{s_kwd} = ''; |
| 1674 |
## reconsume |
## reconsume |
| 1675 |
|
|
| 1676 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 1751 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1752 |
} |
} |
| 1753 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1754 |
|
$self->{s_kwd} = ''; |
| 1755 |
|
|
| 1756 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1757 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 1785 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1786 |
} |
} |
| 1787 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1788 |
|
$self->{s_kwd} = ''; |
| 1789 |
## reconsume |
## reconsume |
| 1790 |
|
|
| 1791 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 1854 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1855 |
} |
} |
| 1856 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1857 |
|
$self->{s_kwd} = ''; |
| 1858 |
|
|
| 1859 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1860 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 1902 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1903 |
} |
} |
| 1904 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1905 |
|
$self->{s_kwd} = ''; |
| 1906 |
## Reconsume. |
## Reconsume. |
| 1907 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 1908 |
redo A; |
redo A; |
| 1933 |
} |
} |
| 1934 |
|
|
| 1935 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1936 |
|
$self->{s_kwd} = ''; |
| 1937 |
|
|
| 1938 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1939 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 1966 |
die "$0: $self->{ct}->{type}: Unknown token type"; |
die "$0: $self->{ct}->{type}: Unknown token type"; |
| 1967 |
} |
} |
| 1968 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1969 |
|
$self->{s_kwd} = ''; |
| 1970 |
## Reconsume. |
## Reconsume. |
| 1971 |
return ($self->{ct}); # start tag or end tag |
return ($self->{ct}); # start tag or end tag |
| 1972 |
redo A; |
redo A; |
| 1987 |
if ($self->{nc} == 0x003E) { # > |
if ($self->{nc} == 0x003E) { # > |
| 1988 |
|
|
| 1989 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1990 |
|
$self->{s_kwd} = ''; |
| 1991 |
|
|
| 1992 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1993 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2005 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 2006 |
|
|
| 2007 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2008 |
|
$self->{s_kwd} = ''; |
| 2009 |
## reconsume |
## reconsume |
| 2010 |
|
|
| 2011 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2229 |
} elsif ($self->{s_kwd} eq '[CDATA' and |
} elsif ($self->{s_kwd} eq '[CDATA' and |
| 2230 |
$self->{nc} == 0x005B) { # [ |
$self->{nc} == 0x005B) { # [ |
| 2231 |
|
|
| 2232 |
|
|
| 2233 |
|
if ($self->{is_xml} and |
| 2234 |
|
not $self->{tainted} and |
| 2235 |
|
@{$self->{open_elements} or []} == 0) { |
| 2236 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'cdata outside of root element', |
| 2237 |
|
line => $self->{line_prev}, |
| 2238 |
|
column => $self->{column_prev} - 7); |
| 2239 |
|
$self->{tainted} = 1; |
| 2240 |
|
} |
| 2241 |
|
|
| 2242 |
$self->{ct} = {type => CHARACTER_TOKEN, |
$self->{ct} = {type => CHARACTER_TOKEN, |
| 2243 |
data => '', |
data => '', |
| 2244 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 2290 |
|
|
| 2291 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment'); |
| 2292 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2293 |
|
$self->{s_kwd} = ''; |
| 2294 |
|
|
| 2295 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2296 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2310 |
|
|
| 2311 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2312 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2313 |
|
$self->{s_kwd} = ''; |
| 2314 |
## reconsume |
## reconsume |
| 2315 |
|
|
| 2316 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2354 |
|
|
| 2355 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment'); |
| 2356 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2357 |
|
$self->{s_kwd} = ''; |
| 2358 |
|
|
| 2359 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2360 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2374 |
|
|
| 2375 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2376 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2377 |
|
$self->{s_kwd} = ''; |
| 2378 |
## reconsume |
## reconsume |
| 2379 |
|
|
| 2380 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2418 |
|
|
| 2419 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2420 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2421 |
|
$self->{s_kwd} = ''; |
| 2422 |
## reconsume |
## reconsume |
| 2423 |
|
|
| 2424 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2464 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 2465 |
|
|
| 2466 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2467 |
|
$self->{s_kwd} = ''; |
| 2468 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2469 |
|
$self->{s_kwd} = ''; |
| 2470 |
## reconsume |
## reconsume |
| 2471 |
|
|
| 2472 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2493 |
if ($self->{nc} == 0x003E) { # > |
if ($self->{nc} == 0x003E) { # > |
| 2494 |
|
|
| 2495 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2496 |
|
$self->{s_kwd} = ''; |
| 2497 |
|
|
| 2498 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2499 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2532 |
|
|
| 2533 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2534 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2535 |
|
$self->{s_kwd} = ''; |
| 2536 |
## reconsume |
## reconsume |
| 2537 |
|
|
| 2538 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2601 |
|
|
| 2602 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name'); |
| 2603 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2604 |
|
$self->{s_kwd} = ''; |
| 2605 |
|
|
| 2606 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2607 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2621 |
|
|
| 2622 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name'); |
| 2623 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2624 |
|
$self->{s_kwd} = ''; |
| 2625 |
## reconsume |
## reconsume |
| 2626 |
|
|
| 2627 |
return ($self->{ct}); # DOCTYPE (quirks) |
return ($self->{ct}); # DOCTYPE (quirks) |
| 2665 |
} elsif ($self->{nc} == 0x003E) { # > |
} elsif ($self->{nc} == 0x003E) { # > |
| 2666 |
|
|
| 2667 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2668 |
|
$self->{s_kwd} = ''; |
| 2669 |
|
|
| 2670 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2671 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2685 |
|
|
| 2686 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 2687 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2688 |
|
$self->{s_kwd} = ''; |
| 2689 |
## reconsume |
## reconsume |
| 2690 |
|
|
| 2691 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 2729 |
} elsif ($self->{nc} == 0x003E) { # > |
} elsif ($self->{nc} == 0x003E) { # > |
| 2730 |
|
|
| 2731 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2732 |
|
$self->{s_kwd} = ''; |
| 2733 |
|
|
| 2734 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2735 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2749 |
|
|
| 2750 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 2751 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2752 |
|
$self->{s_kwd} = ''; |
| 2753 |
## reconsume |
## reconsume |
| 2754 |
|
|
| 2755 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 2978 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no PUBLIC literal'); |
| 2979 |
|
|
| 2980 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2981 |
|
$self->{s_kwd} = ''; |
| 2982 |
|
|
| 2983 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2984 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3000 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 3001 |
|
|
| 3002 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3003 |
|
$self->{s_kwd} = ''; |
| 3004 |
## reconsume |
## reconsume |
| 3005 |
|
|
| 3006 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3047 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
| 3048 |
|
|
| 3049 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3050 |
|
$self->{s_kwd} = ''; |
| 3051 |
|
|
| 3052 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3053 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3069 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
| 3070 |
|
|
| 3071 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3072 |
|
$self->{s_kwd} = ''; |
| 3073 |
## reconsume |
## reconsume |
| 3074 |
|
|
| 3075 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3118 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
| 3119 |
|
|
| 3120 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3121 |
|
$self->{s_kwd} = ''; |
| 3122 |
|
|
| 3123 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3124 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3140 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
| 3141 |
|
|
| 3142 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3143 |
|
$self->{s_kwd} = ''; |
| 3144 |
## reconsume |
## reconsume |
| 3145 |
|
|
| 3146 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3219 |
} elsif ($self->{nc} == 0x003E) { # > |
} elsif ($self->{nc} == 0x003E) { # > |
| 3220 |
|
|
| 3221 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3222 |
|
$self->{s_kwd} = ''; |
| 3223 |
|
|
| 3224 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3225 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3240 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 3241 |
|
|
| 3242 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3243 |
|
$self->{s_kwd} = ''; |
| 3244 |
## reconsume |
## reconsume |
| 3245 |
|
|
| 3246 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3318 |
|
|
| 3319 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no SYSTEM literal'); |
| 3320 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3321 |
|
$self->{s_kwd} = ''; |
| 3322 |
|
|
| 3323 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3324 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3340 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 3341 |
|
|
| 3342 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3343 |
|
$self->{s_kwd} = ''; |
| 3344 |
## reconsume |
## reconsume |
| 3345 |
|
|
| 3346 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3387 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
| 3388 |
|
|
| 3389 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3390 |
|
$self->{s_kwd} = ''; |
| 3391 |
|
|
| 3392 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3393 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3409 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
| 3410 |
|
|
| 3411 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3412 |
|
$self->{s_kwd} = ''; |
| 3413 |
## reconsume |
## reconsume |
| 3414 |
|
|
| 3415 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3458 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
| 3459 |
|
|
| 3460 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3461 |
|
$self->{s_kwd} = ''; |
| 3462 |
|
|
| 3463 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3464 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3480 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
| 3481 |
|
|
| 3482 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3483 |
|
$self->{s_kwd} = ''; |
| 3484 |
## reconsume |
## reconsume |
| 3485 |
|
|
| 3486 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3527 |
} elsif ($self->{nc} == 0x003E) { # > |
} elsif ($self->{nc} == 0x003E) { # > |
| 3528 |
|
|
| 3529 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3530 |
|
$self->{s_kwd} = ''; |
| 3531 |
|
|
| 3532 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3533 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3547 |
|
|
| 3548 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 3549 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3550 |
|
$self->{s_kwd} = ''; |
| 3551 |
## reconsume |
## reconsume |
| 3552 |
|
|
| 3553 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3577 |
if ($self->{nc} == 0x003E) { # > |
if ($self->{nc} == 0x003E) { # > |
| 3578 |
|
|
| 3579 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3580 |
|
$self->{s_kwd} = ''; |
| 3581 |
|
|
| 3582 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3583 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3596 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 3597 |
|
|
| 3598 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3599 |
|
$self->{s_kwd} = ''; |
| 3600 |
## reconsume |
## reconsume |
| 3601 |
|
|
| 3602 |
return ($self->{ct}); # DOCTYPE |
return ($self->{ct}); # DOCTYPE |
| 3642 |
|
|
| 3643 |
redo A; |
redo A; |
| 3644 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 3645 |
|
if ($self->{is_xml}) { |
| 3646 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no mse'); ## TODO: type |
| 3647 |
|
} |
| 3648 |
|
|
| 3649 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3650 |
|
$self->{s_kwd} = ''; |
| 3651 |
|
|
| 3652 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3653 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3716 |
} elsif ($self->{state} == CDATA_SECTION_MSE2_STATE) { |
} elsif ($self->{state} == CDATA_SECTION_MSE2_STATE) { |
| 3717 |
if ($self->{nc} == 0x003E) { # > |
if ($self->{nc} == 0x003E) { # > |
| 3718 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3719 |
|
$self->{s_kwd} = ''; |
| 3720 |
|
|
| 3721 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3722 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3824 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 3825 |
|
|
| 3826 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3827 |
|
$self->{s_kwd} = ''; |
| 3828 |
## Reconsume. |
## Reconsume. |
| 3829 |
return ({type => CHARACTER_TOKEN, data => '&', |
return ({type => CHARACTER_TOKEN, data => '&', |
| 3830 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 3835 |
|
|
| 3836 |
$self->{ca}->{value} .= '&'; |
$self->{ca}->{value} .= '&'; |
| 3837 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3838 |
|
$self->{s_kwd} = ''; |
| 3839 |
## Reconsume. |
## Reconsume. |
| 3840 |
redo A; |
redo A; |
| 3841 |
} |
} |
| 3886 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 3887 |
|
|
| 3888 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3889 |
|
$self->{s_kwd} = ''; |
| 3890 |
## Reconsume. |
## Reconsume. |
| 3891 |
return ({type => CHARACTER_TOKEN, |
return ({type => CHARACTER_TOKEN, |
| 3892 |
data => '&#', |
data => '&#', |
| 3898 |
|
|
| 3899 |
$self->{ca}->{value} .= '&#'; |
$self->{ca}->{value} .= '&#'; |
| 3900 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3901 |
|
$self->{s_kwd} = ''; |
| 3902 |
## Reconsume. |
## Reconsume. |
| 3903 |
redo A; |
redo A; |
| 3904 |
} |
} |
| 3964 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 3965 |
|
|
| 3966 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3967 |
|
$self->{s_kwd} = ''; |
| 3968 |
## Reconsume. |
## Reconsume. |
| 3969 |
return ({type => CHARACTER_TOKEN, data => chr $code, |
return ({type => CHARACTER_TOKEN, data => chr $code, |
| 3970 |
|
has_reference => 1, |
| 3971 |
line => $l, column => $c, |
line => $l, column => $c, |
| 3972 |
}); |
}); |
| 3973 |
redo A; |
redo A; |
| 3976 |
$self->{ca}->{value} .= chr $code; |
$self->{ca}->{value} .= chr $code; |
| 3977 |
$self->{ca}->{has_reference} = 1; |
$self->{ca}->{has_reference} = 1; |
| 3978 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3979 |
|
$self->{s_kwd} = ''; |
| 3980 |
## Reconsume. |
## Reconsume. |
| 3981 |
redo A; |
redo A; |
| 3982 |
} |
} |
| 4002 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 4003 |
|
|
| 4004 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4005 |
|
$self->{s_kwd} = ''; |
| 4006 |
## Reconsume. |
## Reconsume. |
| 4007 |
return ({type => CHARACTER_TOKEN, |
return ({type => CHARACTER_TOKEN, |
| 4008 |
data => '&' . $self->{s_kwd}, |
data => '&' . $self->{s_kwd}, |
| 4014 |
|
|
| 4015 |
$self->{ca}->{value} .= '&' . $self->{s_kwd}; |
$self->{ca}->{value} .= '&' . $self->{s_kwd}; |
| 4016 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4017 |
|
$self->{s_kwd} = ''; |
| 4018 |
## Reconsume. |
## Reconsume. |
| 4019 |
redo A; |
redo A; |
| 4020 |
} |
} |
| 4117 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 4118 |
|
|
| 4119 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4120 |
|
$self->{s_kwd} = ''; |
| 4121 |
## Reconsume. |
## Reconsume. |
| 4122 |
return ({type => CHARACTER_TOKEN, data => chr $code, |
return ({type => CHARACTER_TOKEN, data => chr $code, |
| 4123 |
|
has_reference => 1, |
| 4124 |
line => $l, column => $c, |
line => $l, column => $c, |
| 4125 |
}); |
}); |
| 4126 |
redo A; |
redo A; |
| 4129 |
$self->{ca}->{value} .= chr $code; |
$self->{ca}->{value} .= chr $code; |
| 4130 |
$self->{ca}->{has_reference} = 1; |
$self->{ca}->{has_reference} = 1; |
| 4131 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4132 |
|
$self->{s_kwd} = ''; |
| 4133 |
## Reconsume. |
## Reconsume. |
| 4134 |
redo A; |
redo A; |
| 4135 |
} |
} |
| 4242 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 4243 |
|
|
| 4244 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4245 |
|
$self->{s_kwd} = ''; |
| 4246 |
## Reconsume. |
## Reconsume. |
| 4247 |
return ({type => CHARACTER_TOKEN, |
return ({type => CHARACTER_TOKEN, |
| 4248 |
data => $data, |
data => $data, |
| 4249 |
|
has_reference => $has_ref, |
| 4250 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 4251 |
column => $self->{column_prev} + 1 - length $self->{s_kwd}, |
column => $self->{column_prev} + 1 - length $self->{s_kwd}, |
| 4252 |
}); |
}); |
| 4256 |
$self->{ca}->{value} .= $data; |
$self->{ca}->{value} .= $data; |
| 4257 |
$self->{ca}->{has_reference} = 1 if $has_ref; |
$self->{ca}->{has_reference} = 1 if $has_ref; |
| 4258 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4259 |
|
$self->{s_kwd} = ''; |
| 4260 |
## Reconsume. |
## Reconsume. |
| 4261 |
redo A; |
redo A; |
| 4262 |
} |
} |