| 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 |
| 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 |
} |
} |
| 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} = ''; |
| 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 { |
| 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}, |
| 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; |
| 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}; |
| 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 => '<', |
| 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, |
| 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 |
|
|
| 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}; |
| 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 |
|
|
| 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}, |
| 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}, |
| 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}; |
| 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 |
|
|
| 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 |
| 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}; |
| 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; |
| 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 |
| 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}; |
| 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}) { |
| 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 |
| 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}; |
| 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; |
| 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 |
|
|
| 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}; |
| 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 |
| 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 |
| 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 |
| 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}; |
| 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 |
| 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}; |
| 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; |
| 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}; |
| 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; |
| 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}; |
| 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 |
| 2228 |
} elsif ($self->{s_kwd} eq '[CDATA' and |
} elsif ($self->{s_kwd} eq '[CDATA' and |
| 2229 |
$self->{nc} == 0x005B) { # [ |
$self->{nc} == 0x005B) { # [ |
| 2230 |
|
|
| 2231 |
|
|
| 2232 |
|
if ($self->{is_xml} and |
| 2233 |
|
not $self->{tainted} and |
| 2234 |
|
@{$self->{open_elements} or []} == 0) { |
| 2235 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'cdata outside of root element', |
| 2236 |
|
line => $self->{line_prev}, |
| 2237 |
|
column => $self->{column_prev} - 7); |
| 2238 |
|
$self->{tainted} = 1; |
| 2239 |
|
} |
| 2240 |
|
|
| 2241 |
$self->{ct} = {type => CHARACTER_TOKEN, |
$self->{ct} = {type => CHARACTER_TOKEN, |
| 2242 |
data => '', |
data => '', |
| 2243 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 2289 |
|
|
| 2290 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment'); |
| 2291 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2292 |
|
$self->{s_kwd} = ''; |
| 2293 |
|
|
| 2294 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2295 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2309 |
|
|
| 2310 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2311 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2312 |
|
$self->{s_kwd} = ''; |
| 2313 |
## reconsume |
## reconsume |
| 2314 |
|
|
| 2315 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2353 |
|
|
| 2354 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bogus comment'); |
| 2355 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2356 |
|
$self->{s_kwd} = ''; |
| 2357 |
|
|
| 2358 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2359 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2373 |
|
|
| 2374 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2375 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2376 |
|
$self->{s_kwd} = ''; |
| 2377 |
## reconsume |
## reconsume |
| 2378 |
|
|
| 2379 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2417 |
|
|
| 2418 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2419 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2420 |
|
$self->{s_kwd} = ''; |
| 2421 |
## reconsume |
## reconsume |
| 2422 |
|
|
| 2423 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2463 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 2464 |
|
|
| 2465 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2466 |
|
$self->{s_kwd} = ''; |
| 2467 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2468 |
|
$self->{s_kwd} = ''; |
| 2469 |
## reconsume |
## reconsume |
| 2470 |
|
|
| 2471 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2492 |
if ($self->{nc} == 0x003E) { # > |
if ($self->{nc} == 0x003E) { # > |
| 2493 |
|
|
| 2494 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2495 |
|
$self->{s_kwd} = ''; |
| 2496 |
|
|
| 2497 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2498 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2531 |
|
|
| 2532 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 2533 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2534 |
|
$self->{s_kwd} = ''; |
| 2535 |
## reconsume |
## reconsume |
| 2536 |
|
|
| 2537 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 2600 |
|
|
| 2601 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name'); |
| 2602 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2603 |
|
$self->{s_kwd} = ''; |
| 2604 |
|
|
| 2605 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2606 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2620 |
|
|
| 2621 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no DOCTYPE name'); |
| 2622 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2623 |
|
$self->{s_kwd} = ''; |
| 2624 |
## reconsume |
## reconsume |
| 2625 |
|
|
| 2626 |
return ($self->{ct}); # DOCTYPE (quirks) |
return ($self->{ct}); # DOCTYPE (quirks) |
| 2664 |
} elsif ($self->{nc} == 0x003E) { # > |
} elsif ($self->{nc} == 0x003E) { # > |
| 2665 |
|
|
| 2666 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2667 |
|
$self->{s_kwd} = ''; |
| 2668 |
|
|
| 2669 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2670 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2684 |
|
|
| 2685 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 2686 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2687 |
|
$self->{s_kwd} = ''; |
| 2688 |
## reconsume |
## reconsume |
| 2689 |
|
|
| 2690 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 2728 |
} elsif ($self->{nc} == 0x003E) { # > |
} elsif ($self->{nc} == 0x003E) { # > |
| 2729 |
|
|
| 2730 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2731 |
|
$self->{s_kwd} = ''; |
| 2732 |
|
|
| 2733 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2734 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2748 |
|
|
| 2749 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 2750 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2751 |
|
$self->{s_kwd} = ''; |
| 2752 |
## reconsume |
## reconsume |
| 2753 |
|
|
| 2754 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 2977 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no PUBLIC literal'); |
| 2978 |
|
|
| 2979 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 2980 |
|
$self->{s_kwd} = ''; |
| 2981 |
|
|
| 2982 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2983 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 2999 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 3000 |
|
|
| 3001 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3002 |
|
$self->{s_kwd} = ''; |
| 3003 |
## reconsume |
## reconsume |
| 3004 |
|
|
| 3005 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3046 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
| 3047 |
|
|
| 3048 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3049 |
|
$self->{s_kwd} = ''; |
| 3050 |
|
|
| 3051 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3052 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3068 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
| 3069 |
|
|
| 3070 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3071 |
|
$self->{s_kwd} = ''; |
| 3072 |
## reconsume |
## reconsume |
| 3073 |
|
|
| 3074 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3117 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
| 3118 |
|
|
| 3119 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3120 |
|
$self->{s_kwd} = ''; |
| 3121 |
|
|
| 3122 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3123 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3139 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed PUBLIC literal'); |
| 3140 |
|
|
| 3141 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3142 |
|
$self->{s_kwd} = ''; |
| 3143 |
## reconsume |
## reconsume |
| 3144 |
|
|
| 3145 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3218 |
} elsif ($self->{nc} == 0x003E) { # > |
} elsif ($self->{nc} == 0x003E) { # > |
| 3219 |
|
|
| 3220 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3221 |
|
$self->{s_kwd} = ''; |
| 3222 |
|
|
| 3223 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3224 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3239 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 3240 |
|
|
| 3241 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3242 |
|
$self->{s_kwd} = ''; |
| 3243 |
## reconsume |
## reconsume |
| 3244 |
|
|
| 3245 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3317 |
|
|
| 3318 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no SYSTEM literal'); |
| 3319 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3320 |
|
$self->{s_kwd} = ''; |
| 3321 |
|
|
| 3322 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3323 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3339 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 3340 |
|
|
| 3341 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3342 |
|
$self->{s_kwd} = ''; |
| 3343 |
## reconsume |
## reconsume |
| 3344 |
|
|
| 3345 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3386 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
| 3387 |
|
|
| 3388 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3389 |
|
$self->{s_kwd} = ''; |
| 3390 |
|
|
| 3391 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3392 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3408 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
| 3409 |
|
|
| 3410 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3411 |
|
$self->{s_kwd} = ''; |
| 3412 |
## reconsume |
## reconsume |
| 3413 |
|
|
| 3414 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3457 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
| 3458 |
|
|
| 3459 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3460 |
|
$self->{s_kwd} = ''; |
| 3461 |
|
|
| 3462 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3463 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3479 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed SYSTEM literal'); |
| 3480 |
|
|
| 3481 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3482 |
|
$self->{s_kwd} = ''; |
| 3483 |
## reconsume |
## reconsume |
| 3484 |
|
|
| 3485 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3526 |
} elsif ($self->{nc} == 0x003E) { # > |
} elsif ($self->{nc} == 0x003E) { # > |
| 3527 |
|
|
| 3528 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3529 |
|
$self->{s_kwd} = ''; |
| 3530 |
|
|
| 3531 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3532 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3546 |
|
|
| 3547 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed DOCTYPE'); |
| 3548 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3549 |
|
$self->{s_kwd} = ''; |
| 3550 |
## reconsume |
## reconsume |
| 3551 |
|
|
| 3552 |
$self->{ct}->{quirks} = 1; |
$self->{ct}->{quirks} = 1; |
| 3576 |
if ($self->{nc} == 0x003E) { # > |
if ($self->{nc} == 0x003E) { # > |
| 3577 |
|
|
| 3578 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3579 |
|
$self->{s_kwd} = ''; |
| 3580 |
|
|
| 3581 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3582 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3595 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 3596 |
|
|
| 3597 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3598 |
|
$self->{s_kwd} = ''; |
| 3599 |
## reconsume |
## reconsume |
| 3600 |
|
|
| 3601 |
return ($self->{ct}); # DOCTYPE |
return ($self->{ct}); # DOCTYPE |
| 3641 |
|
|
| 3642 |
redo A; |
redo A; |
| 3643 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 3644 |
|
if ($self->{is_xml}) { |
| 3645 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'no mse'); ## TODO: type |
| 3646 |
|
} |
| 3647 |
|
|
| 3648 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3649 |
|
$self->{s_kwd} = ''; |
| 3650 |
|
|
| 3651 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3652 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3715 |
} elsif ($self->{state} == CDATA_SECTION_MSE2_STATE) { |
} elsif ($self->{state} == CDATA_SECTION_MSE2_STATE) { |
| 3716 |
if ($self->{nc} == 0x003E) { # > |
if ($self->{nc} == 0x003E) { # > |
| 3717 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3718 |
|
$self->{s_kwd} = ''; |
| 3719 |
|
|
| 3720 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3721 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3823 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 3824 |
|
|
| 3825 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3826 |
|
$self->{s_kwd} = ''; |
| 3827 |
## Reconsume. |
## Reconsume. |
| 3828 |
return ({type => CHARACTER_TOKEN, data => '&', |
return ({type => CHARACTER_TOKEN, data => '&', |
| 3829 |
line => $self->{line_prev}, |
line => $self->{line_prev}, |
| 3834 |
|
|
| 3835 |
$self->{ca}->{value} .= '&'; |
$self->{ca}->{value} .= '&'; |
| 3836 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3837 |
|
$self->{s_kwd} = ''; |
| 3838 |
## Reconsume. |
## Reconsume. |
| 3839 |
redo A; |
redo A; |
| 3840 |
} |
} |
| 3885 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 3886 |
|
|
| 3887 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3888 |
|
$self->{s_kwd} = ''; |
| 3889 |
## Reconsume. |
## Reconsume. |
| 3890 |
return ({type => CHARACTER_TOKEN, |
return ({type => CHARACTER_TOKEN, |
| 3891 |
data => '&#', |
data => '&#', |
| 3897 |
|
|
| 3898 |
$self->{ca}->{value} .= '&#'; |
$self->{ca}->{value} .= '&#'; |
| 3899 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3900 |
|
$self->{s_kwd} = ''; |
| 3901 |
## Reconsume. |
## Reconsume. |
| 3902 |
redo A; |
redo A; |
| 3903 |
} |
} |
| 3963 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 3964 |
|
|
| 3965 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3966 |
|
$self->{s_kwd} = ''; |
| 3967 |
## Reconsume. |
## Reconsume. |
| 3968 |
return ({type => CHARACTER_TOKEN, data => chr $code, |
return ({type => CHARACTER_TOKEN, data => chr $code, |
| 3969 |
line => $l, column => $c, |
line => $l, column => $c, |
| 3974 |
$self->{ca}->{value} .= chr $code; |
$self->{ca}->{value} .= chr $code; |
| 3975 |
$self->{ca}->{has_reference} = 1; |
$self->{ca}->{has_reference} = 1; |
| 3976 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 3977 |
|
$self->{s_kwd} = ''; |
| 3978 |
## Reconsume. |
## Reconsume. |
| 3979 |
redo A; |
redo A; |
| 3980 |
} |
} |
| 4000 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 4001 |
|
|
| 4002 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4003 |
|
$self->{s_kwd} = ''; |
| 4004 |
## Reconsume. |
## Reconsume. |
| 4005 |
return ({type => CHARACTER_TOKEN, |
return ({type => CHARACTER_TOKEN, |
| 4006 |
data => '&' . $self->{s_kwd}, |
data => '&' . $self->{s_kwd}, |
| 4012 |
|
|
| 4013 |
$self->{ca}->{value} .= '&' . $self->{s_kwd}; |
$self->{ca}->{value} .= '&' . $self->{s_kwd}; |
| 4014 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4015 |
|
$self->{s_kwd} = ''; |
| 4016 |
## Reconsume. |
## Reconsume. |
| 4017 |
redo A; |
redo A; |
| 4018 |
} |
} |
| 4115 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 4116 |
|
|
| 4117 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4118 |
|
$self->{s_kwd} = ''; |
| 4119 |
## Reconsume. |
## Reconsume. |
| 4120 |
return ({type => CHARACTER_TOKEN, data => chr $code, |
return ({type => CHARACTER_TOKEN, data => chr $code, |
| 4121 |
line => $l, column => $c, |
line => $l, column => $c, |
| 4126 |
$self->{ca}->{value} .= chr $code; |
$self->{ca}->{value} .= chr $code; |
| 4127 |
$self->{ca}->{has_reference} = 1; |
$self->{ca}->{has_reference} = 1; |
| 4128 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4129 |
|
$self->{s_kwd} = ''; |
| 4130 |
## Reconsume. |
## Reconsume. |
| 4131 |
redo A; |
redo A; |
| 4132 |
} |
} |
| 4239 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 4240 |
|
|
| 4241 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4242 |
|
$self->{s_kwd} = ''; |
| 4243 |
## Reconsume. |
## Reconsume. |
| 4244 |
return ({type => CHARACTER_TOKEN, |
return ({type => CHARACTER_TOKEN, |
| 4245 |
data => $data, |
data => $data, |
| 4252 |
$self->{ca}->{value} .= $data; |
$self->{ca}->{value} .= $data; |
| 4253 |
$self->{ca}->{has_reference} = 1 if $has_ref; |
$self->{ca}->{has_reference} = 1 if $has_ref; |
| 4254 |
$self->{state} = $self->{prev_state}; |
$self->{state} = $self->{prev_state}; |
| 4255 |
|
$self->{s_kwd} = ''; |
| 4256 |
## Reconsume. |
## Reconsume. |
| 4257 |
redo A; |
redo A; |
| 4258 |
} |
} |