| 1740 |
|
|
| 1741 |
redo A; |
redo A; |
| 1742 |
} else { |
} else { |
| 1743 |
if ($self->{nc} == 0x003D) { # = |
if ($self->{nc} == 0x003D or $self->{nc} == 0x003C) { # =, < |
| 1744 |
|
|
| 1745 |
## XML5: Not a parse error. |
## XML5: Not a parse error. |
| 1746 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bad attribute value'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'bad attribute value'); |
| 1816 |
} |
} |
| 1817 |
|
|
| 1818 |
redo A; |
redo A; |
| 1819 |
|
} elsif ($self->{is_xml} and |
| 1820 |
|
$is_space->{$self->{nc}}) { |
| 1821 |
|
|
| 1822 |
|
$self->{ca}->{value} .= ' '; |
| 1823 |
|
## Stay in the state. |
| 1824 |
|
|
| 1825 |
|
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1826 |
|
$self->{line_prev} = $self->{line}; |
| 1827 |
|
$self->{column_prev} = $self->{column}; |
| 1828 |
|
$self->{column}++; |
| 1829 |
|
$self->{nc} |
| 1830 |
|
= ord substr ($self->{char_buffer}, $self->{char_buffer_pos}++, 1); |
| 1831 |
|
} else { |
| 1832 |
|
$self->{set_nc}->($self); |
| 1833 |
|
} |
| 1834 |
|
|
| 1835 |
|
redo A; |
| 1836 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 1837 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed attribute value'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed attribute value'); |
| 1838 |
if ($self->{ct}->{type} == START_TAG_TOKEN) { |
if ($self->{ct}->{type} == START_TAG_TOKEN) { |
| 1880 |
} |
} |
| 1881 |
$self->{ca}->{value} .= chr ($self->{nc}); |
$self->{ca}->{value} .= chr ($self->{nc}); |
| 1882 |
$self->{read_until}->($self->{ca}->{value}, |
$self->{read_until}->($self->{ca}->{value}, |
| 1883 |
q["&<], |
qq["&<\x09\x0C\x20], |
| 1884 |
length $self->{ca}->{value}); |
length $self->{ca}->{value}); |
| 1885 |
|
|
| 1886 |
## Stay in the state |
## Stay in the state |
| 1947 |
} |
} |
| 1948 |
|
|
| 1949 |
redo A; |
redo A; |
| 1950 |
|
} elsif ($self->{is_xml} and |
| 1951 |
|
$is_space->{$self->{nc}}) { |
| 1952 |
|
|
| 1953 |
|
$self->{ca}->{value} .= ' '; |
| 1954 |
|
## Stay in the state. |
| 1955 |
|
|
| 1956 |
|
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 1957 |
|
$self->{line_prev} = $self->{line}; |
| 1958 |
|
$self->{column_prev} = $self->{column}; |
| 1959 |
|
$self->{column}++; |
| 1960 |
|
$self->{nc} |
| 1961 |
|
= ord substr ($self->{char_buffer}, $self->{char_buffer_pos}++, 1); |
| 1962 |
|
} else { |
| 1963 |
|
$self->{set_nc}->($self); |
| 1964 |
|
} |
| 1965 |
|
|
| 1966 |
|
redo A; |
| 1967 |
} elsif ($self->{nc} == -1) { |
} elsif ($self->{nc} == -1) { |
| 1968 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed attribute value'); |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed attribute value'); |
| 1969 |
if ($self->{ct}->{type} == START_TAG_TOKEN) { |
if ($self->{ct}->{type} == START_TAG_TOKEN) { |
| 2011 |
} |
} |
| 2012 |
$self->{ca}->{value} .= chr ($self->{nc}); |
$self->{ca}->{value} .= chr ($self->{nc}); |
| 2013 |
$self->{read_until}->($self->{ca}->{value}, |
$self->{read_until}->($self->{ca}->{value}, |
| 2014 |
q['&<], |
qq['&<\x09\x0C\x20], |
| 2015 |
length $self->{ca}->{value}); |
length $self->{ca}->{value}); |
| 2016 |
|
|
| 2017 |
## Stay in the state |
## Stay in the state |
| 2183 |
0x0022 => 1, # " |
0x0022 => 1, # " |
| 2184 |
0x0027 => 1, # ' |
0x0027 => 1, # ' |
| 2185 |
0x003D => 1, # = |
0x003D => 1, # = |
| 2186 |
|
0x003C => 1, # < |
| 2187 |
}->{$self->{nc}}) { |
}->{$self->{nc}}) { |
| 2188 |
|
|
| 2189 |
## XML5: Not a parse error. |
## XML5: Not a parse error. |
| 2193 |
} |
} |
| 2194 |
$self->{ca}->{value} .= chr ($self->{nc}); |
$self->{ca}->{value} .= chr ($self->{nc}); |
| 2195 |
$self->{read_until}->($self->{ca}->{value}, |
$self->{read_until}->($self->{ca}->{value}, |
| 2196 |
q["'=& >], |
qq["'=& \x09\x0C>], |
| 2197 |
length $self->{ca}->{value}); |
length $self->{ca}->{value}); |
| 2198 |
|
|
| 2199 |
## Stay in the state |
## Stay in the state |
| 2999 |
redo A; |
redo A; |
| 3000 |
} else { |
} else { |
| 3001 |
|
|
|
## XML5: Not a parse error. |
|
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'dash in comment', |
|
|
line => $self->{line_prev}, |
|
|
column => $self->{column_prev}); |
|
| 3002 |
$self->{ct}->{data} .= '--' . chr ($self->{nc}); # comment |
$self->{ct}->{data} .= '--' . chr ($self->{nc}); # comment |
| 3003 |
$self->{state} = COMMENT_STATE; |
$self->{state} = COMMENT_STATE; |
| 3004 |
|
|
| 4868 |
my $code = $self->{kwd}; |
my $code = $self->{kwd}; |
| 4869 |
my $l = $self->{line_prev}; |
my $l = $self->{line_prev}; |
| 4870 |
my $c = $self->{column_prev}; |
my $c = $self->{column_prev}; |
| 4871 |
if ($charref_map->{$code}) { |
if ((not $self->{is_xml} and $charref_map->{$code}) or |
| 4872 |
|
($self->{is_xml} and 0xD800 <= $code and $code <= 0xDFFF) or |
| 4873 |
|
($self->{is_xml} and $code == 0x0000)) { |
| 4874 |
|
|
| 4875 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'invalid character reference', |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'invalid character reference', |
| 4876 |
text => (sprintf 'U+%04X', $code), |
text => (sprintf 'U+%04X', $code), |
| 5023 |
my $code = $self->{kwd}; |
my $code = $self->{kwd}; |
| 5024 |
my $l = $self->{line_prev}; |
my $l = $self->{line_prev}; |
| 5025 |
my $c = $self->{column_prev}; |
my $c = $self->{column_prev}; |
| 5026 |
if ($charref_map->{$code}) { |
if ((not $self->{is_xml} and $charref_map->{$code}) or |
| 5027 |
|
($self->{is_xml} and 0xD800 <= $code and $code <= 0xDFFF) or |
| 5028 |
|
($self->{is_xml} and $code == 0x0000)) { |
| 5029 |
|
|
| 5030 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'invalid character reference', |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'invalid character reference', |
| 5031 |
text => (sprintf 'U+%04X', $code), |
text => (sprintf 'U+%04X', $code), |