| 346 |
## ->{tag_name} (START_TAG_TOKEN, END_TAG_TOKEN) |
## ->{tag_name} (START_TAG_TOKEN, END_TAG_TOKEN) |
| 347 |
## ->{public_identifier} (DOCTYPE_TOKEN) |
## ->{public_identifier} (DOCTYPE_TOKEN) |
| 348 |
## ->{system_identifier} (DOCTYPE_TOKEN) |
## ->{system_identifier} (DOCTYPE_TOKEN) |
| 349 |
## ->{correct} == 1 or 0 (DOCTYPE_TOKEN) |
## ->{quirks} == 1 or 0 (DOCTYPE_TOKEN): "force-quirks" flag |
| 350 |
## ->{attributes} isa HASH (START_TAG_TOKEN, END_TAG_TOKEN) |
## ->{attributes} isa HASH (START_TAG_TOKEN, END_TAG_TOKEN) |
| 351 |
## ->{name} |
## ->{name} |
| 352 |
## ->{value} |
## ->{value} |
| 1447 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1448 |
!!!next-input-character; |
!!!next-input-character; |
| 1449 |
|
|
| 1450 |
!!!emit ({type => DOCTYPE_TOKEN}); # incorrect |
!!!emit ({type => DOCTYPE_TOKEN, quirks => 1}); |
| 1451 |
|
|
| 1452 |
redo A; |
redo A; |
| 1453 |
} elsif ($self->{next_input_character} == -1) { |
} elsif ($self->{next_input_character} == -1) { |
| 1455 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1456 |
## reconsume |
## reconsume |
| 1457 |
|
|
| 1458 |
!!!emit ({type => DOCTYPE_TOKEN}); # incorrect |
!!!emit ({type => DOCTYPE_TOKEN, quirks => 1}); |
| 1459 |
|
|
| 1460 |
redo A; |
redo A; |
| 1461 |
} else { |
} else { |
| 1462 |
$self->{current_token} |
$self->{current_token} |
| 1463 |
= {type => DOCTYPE_TOKEN, |
= {type => DOCTYPE_TOKEN, |
| 1464 |
name => chr ($self->{next_input_character}), |
name => chr ($self->{next_input_character}), |
| 1465 |
correct => 1}; |
#quirks => 0, |
| 1466 |
|
}; |
| 1467 |
## ISSUE: "Set the token's name name to the" in the spec |
## ISSUE: "Set the token's name name to the" in the spec |
| 1468 |
$self->{state} = DOCTYPE_NAME_STATE; |
$self->{state} = DOCTYPE_NAME_STATE; |
| 1469 |
!!!next-input-character; |
!!!next-input-character; |
| 1491 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1492 |
## reconsume |
## reconsume |
| 1493 |
|
|
| 1494 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1495 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1496 |
|
|
| 1497 |
redo A; |
redo A; |
| 1523 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1524 |
## reconsume |
## reconsume |
| 1525 |
|
|
| 1526 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1527 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1528 |
|
|
| 1529 |
redo A; |
redo A; |
| 1587 |
} |
} |
| 1588 |
|
|
| 1589 |
!!!parse-error (type => 'string after DOCTYPE name'); |
!!!parse-error (type => 'string after DOCTYPE name'); |
| 1590 |
|
$self->{current_token}->{quirks} = 1; |
| 1591 |
|
|
| 1592 |
$self->{state} = BOGUS_DOCTYPE_STATE; |
$self->{state} = BOGUS_DOCTYPE_STATE; |
| 1593 |
# next-input-character is already done |
# next-input-character is already done |
| 1594 |
redo A; |
redo A; |
| 1616 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1617 |
!!!next-input-character; |
!!!next-input-character; |
| 1618 |
|
|
| 1619 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1620 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1621 |
|
|
| 1622 |
redo A; |
redo A; |
| 1626 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1627 |
## reconsume |
## reconsume |
| 1628 |
|
|
| 1629 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1630 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1631 |
|
|
| 1632 |
redo A; |
redo A; |
| 1633 |
} else { |
} else { |
| 1634 |
!!!parse-error (type => 'string after PUBLIC'); |
!!!parse-error (type => 'string after PUBLIC'); |
| 1635 |
|
$self->{current_token}->{quirks} = 1; |
| 1636 |
|
|
| 1637 |
$self->{state} = BOGUS_DOCTYPE_STATE; |
$self->{state} = BOGUS_DOCTYPE_STATE; |
| 1638 |
!!!next-input-character; |
!!!next-input-character; |
| 1639 |
redo A; |
redo A; |
| 1649 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1650 |
!!!next-input-character; |
!!!next-input-character; |
| 1651 |
|
|
| 1652 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1653 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1654 |
|
|
| 1655 |
redo A; |
redo A; |
| 1659 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1660 |
## reconsume |
## reconsume |
| 1661 |
|
|
| 1662 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1663 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1664 |
|
|
| 1665 |
redo A; |
redo A; |
| 1681 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1682 |
!!!next-input-character; |
!!!next-input-character; |
| 1683 |
|
|
| 1684 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1685 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1686 |
|
|
| 1687 |
redo A; |
redo A; |
| 1691 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1692 |
## reconsume |
## reconsume |
| 1693 |
|
|
| 1694 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1695 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1696 |
|
|
| 1697 |
redo A; |
redo A; |
| 1733 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1734 |
## reconsume |
## reconsume |
| 1735 |
|
|
| 1736 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1737 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1738 |
|
|
| 1739 |
redo A; |
redo A; |
| 1740 |
} else { |
} else { |
| 1741 |
!!!parse-error (type => 'string after PUBLIC literal'); |
!!!parse-error (type => 'string after PUBLIC literal'); |
| 1742 |
|
$self->{current_token}->{quirks} = 1; |
| 1743 |
|
|
| 1744 |
$self->{state} = BOGUS_DOCTYPE_STATE; |
$self->{state} = BOGUS_DOCTYPE_STATE; |
| 1745 |
!!!next-input-character; |
!!!next-input-character; |
| 1746 |
redo A; |
redo A; |
| 1768 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1769 |
!!!next-input-character; |
!!!next-input-character; |
| 1770 |
|
|
| 1771 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1772 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1773 |
|
|
| 1774 |
redo A; |
redo A; |
| 1778 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1779 |
## reconsume |
## reconsume |
| 1780 |
|
|
| 1781 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1782 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1783 |
|
|
| 1784 |
redo A; |
redo A; |
| 1785 |
} else { |
} else { |
| 1786 |
!!!parse-error (type => 'string after SYSTEM'); |
!!!parse-error (type => 'string after SYSTEM'); |
| 1787 |
|
$self->{current_token}->{quirks} = 1; |
| 1788 |
|
|
| 1789 |
$self->{state} = BOGUS_DOCTYPE_STATE; |
$self->{state} = BOGUS_DOCTYPE_STATE; |
| 1790 |
!!!next-input-character; |
!!!next-input-character; |
| 1791 |
redo A; |
redo A; |
| 1801 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1802 |
!!!next-input-character; |
!!!next-input-character; |
| 1803 |
|
|
| 1804 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1805 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1806 |
|
|
| 1807 |
redo A; |
redo A; |
| 1811 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1812 |
## reconsume |
## reconsume |
| 1813 |
|
|
| 1814 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1815 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1816 |
|
|
| 1817 |
redo A; |
redo A; |
| 1833 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1834 |
!!!next-input-character; |
!!!next-input-character; |
| 1835 |
|
|
| 1836 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1837 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1838 |
|
|
| 1839 |
redo A; |
redo A; |
| 1843 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1844 |
## reconsume |
## reconsume |
| 1845 |
|
|
| 1846 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1847 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1848 |
|
|
| 1849 |
redo A; |
redo A; |
| 1875 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1876 |
## reconsume |
## reconsume |
| 1877 |
|
|
| 1878 |
delete $self->{current_token}->{correct}; |
$self->{current_token}->{quirks} = 1; |
| 1879 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1880 |
|
|
| 1881 |
redo A; |
redo A; |
| 1882 |
} else { |
} else { |
| 1883 |
!!!parse-error (type => 'string after SYSTEM literal'); |
!!!parse-error (type => 'string after SYSTEM literal'); |
| 1884 |
|
#$self->{current_token}->{quirks} = 1; |
| 1885 |
|
|
| 1886 |
$self->{state} = BOGUS_DOCTYPE_STATE; |
$self->{state} = BOGUS_DOCTYPE_STATE; |
| 1887 |
!!!next-input-character; |
!!!next-input-character; |
| 1888 |
redo A; |
redo A; |
| 1892 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1893 |
!!!next-input-character; |
!!!next-input-character; |
| 1894 |
|
|
|
delete $self->{current_token}->{correct}; |
|
| 1895 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1896 |
|
|
| 1897 |
redo A; |
redo A; |
| 1900 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 1901 |
## reconsume |
## reconsume |
| 1902 |
|
|
|
delete $self->{current_token}->{correct}; |
|
| 1903 |
!!!emit ($self->{current_token}); # DOCTYPE |
!!!emit ($self->{current_token}); # DOCTYPE |
| 1904 |
|
|
| 1905 |
redo A; |
redo A; |
| 2155 |
## ISSUE: internalSubset = null?? |
## ISSUE: internalSubset = null?? |
| 2156 |
$self->{document}->append_child ($doctype); |
$self->{document}->append_child ($doctype); |
| 2157 |
|
|
| 2158 |
if (not $token->{correct} or $doctype_name ne 'HTML') { |
if ($token->{quirks} or $doctype_name ne 'HTML') { |
| 2159 |
$self->{document}->manakai_compat_mode ('quirks'); |
$self->{document}->manakai_compat_mode ('quirks'); |
| 2160 |
} elsif (defined $token->{public_identifier}) { |
} elsif (defined $token->{public_identifier}) { |
| 2161 |
my $pubid = $token->{public_identifier}; |
my $pubid = $token->{public_identifier}; |