| 18 |
input => 1, |
input => 1, |
| 19 |
}; |
}; |
| 20 |
|
|
| 21 |
|
my $entity_char = { |
| 22 |
|
AElig => "\x{00C6}", |
| 23 |
|
Aacute => "\x{00C1}", |
| 24 |
|
Acirc => "\x{00C2}", |
| 25 |
|
Agrave => "\x{00C0}", |
| 26 |
|
Alpha => "\x{0391}", |
| 27 |
|
Aring => "\x{00C5}", |
| 28 |
|
Atilde => "\x{00C3}", |
| 29 |
|
Auml => "\x{00C4}", |
| 30 |
|
Beta => "\x{0392}", |
| 31 |
|
Ccedil => "\x{00C7}", |
| 32 |
|
Chi => "\x{03A7}", |
| 33 |
|
Dagger => "\x{2021}", |
| 34 |
|
Delta => "\x{0394}", |
| 35 |
|
ETH => "\x{00D0}", |
| 36 |
|
Eacute => "\x{00C9}", |
| 37 |
|
Ecirc => "\x{00CA}", |
| 38 |
|
Egrave => "\x{00C8}", |
| 39 |
|
Epsilon => "\x{0395}", |
| 40 |
|
Eta => "\x{0397}", |
| 41 |
|
Euml => "\x{00CB}", |
| 42 |
|
Gamma => "\x{0393}", |
| 43 |
|
Iacute => "\x{00CD}", |
| 44 |
|
Icirc => "\x{00CE}", |
| 45 |
|
Igrave => "\x{00CC}", |
| 46 |
|
Iota => "\x{0399}", |
| 47 |
|
Iuml => "\x{00CF}", |
| 48 |
|
Kappa => "\x{039A}", |
| 49 |
|
Lambda => "\x{039B}", |
| 50 |
|
Mu => "\x{039C}", |
| 51 |
|
Ntilde => "\x{00D1}", |
| 52 |
|
Nu => "\x{039D}", |
| 53 |
|
OElig => "\x{0152}", |
| 54 |
|
Oacute => "\x{00D3}", |
| 55 |
|
Ocirc => "\x{00D4}", |
| 56 |
|
Ograve => "\x{00D2}", |
| 57 |
|
Omega => "\x{03A9}", |
| 58 |
|
Omicron => "\x{039F}", |
| 59 |
|
Oslash => "\x{00D8}", |
| 60 |
|
Otilde => "\x{00D5}", |
| 61 |
|
Ouml => "\x{00D6}", |
| 62 |
|
Phi => "\x{03A6}", |
| 63 |
|
Pi => "\x{03A0}", |
| 64 |
|
Prime => "\x{2033}", |
| 65 |
|
Psi => "\x{03A8}", |
| 66 |
|
Rho => "\x{03A1}", |
| 67 |
|
Scaron => "\x{0160}", |
| 68 |
|
Sigma => "\x{03A3}", |
| 69 |
|
THORN => "\x{00DE}", |
| 70 |
|
Tau => "\x{03A4}", |
| 71 |
|
Theta => "\x{0398}", |
| 72 |
|
Uacute => "\x{00DA}", |
| 73 |
|
Ucirc => "\x{00DB}", |
| 74 |
|
Ugrave => "\x{00D9}", |
| 75 |
|
Upsilon => "\x{03A5}", |
| 76 |
|
Uuml => "\x{00DC}", |
| 77 |
|
Xi => "\x{039E}", |
| 78 |
|
Yacute => "\x{00DD}", |
| 79 |
|
Yuml => "\x{0178}", |
| 80 |
|
Zeta => "\x{0396}", |
| 81 |
|
aacute => "\x{00E1}", |
| 82 |
|
acirc => "\x{00E2}", |
| 83 |
|
acute => "\x{00B4}", |
| 84 |
|
aelig => "\x{00E6}", |
| 85 |
|
agrave => "\x{00E0}", |
| 86 |
|
alefsym => "\x{2135}", |
| 87 |
|
alpha => "\x{03B1}", |
| 88 |
|
amp => "\x{0026}", |
| 89 |
|
AMP => "\x{0026}", |
| 90 |
|
and => "\x{2227}", |
| 91 |
|
ang => "\x{2220}", |
| 92 |
|
apos => "\x{0027}", |
| 93 |
|
aring => "\x{00E5}", |
| 94 |
|
asymp => "\x{2248}", |
| 95 |
|
atilde => "\x{00E3}", |
| 96 |
|
auml => "\x{00E4}", |
| 97 |
|
bdquo => "\x{201E}", |
| 98 |
|
beta => "\x{03B2}", |
| 99 |
|
brvbar => "\x{00A6}", |
| 100 |
|
bull => "\x{2022}", |
| 101 |
|
cap => "\x{2229}", |
| 102 |
|
ccedil => "\x{00E7}", |
| 103 |
|
cedil => "\x{00B8}", |
| 104 |
|
cent => "\x{00A2}", |
| 105 |
|
chi => "\x{03C7}", |
| 106 |
|
circ => "\x{02C6}", |
| 107 |
|
clubs => "\x{2663}", |
| 108 |
|
cong => "\x{2245}", |
| 109 |
|
copy => "\x{00A9}", |
| 110 |
|
COPY => "\x{00A9}", |
| 111 |
|
crarr => "\x{21B5}", |
| 112 |
|
cup => "\x{222A}", |
| 113 |
|
curren => "\x{00A4}", |
| 114 |
|
dArr => "\x{21D3}", |
| 115 |
|
dagger => "\x{2020}", |
| 116 |
|
darr => "\x{2193}", |
| 117 |
|
deg => "\x{00B0}", |
| 118 |
|
delta => "\x{03B4}", |
| 119 |
|
diams => "\x{2666}", |
| 120 |
|
divide => "\x{00F7}", |
| 121 |
|
eacute => "\x{00E9}", |
| 122 |
|
ecirc => "\x{00EA}", |
| 123 |
|
egrave => "\x{00E8}", |
| 124 |
|
empty => "\x{2205}", |
| 125 |
|
emsp => "\x{2003}", |
| 126 |
|
ensp => "\x{2002}", |
| 127 |
|
epsilon => "\x{03B5}", |
| 128 |
|
equiv => "\x{2261}", |
| 129 |
|
eta => "\x{03B7}", |
| 130 |
|
eth => "\x{00F0}", |
| 131 |
|
euml => "\x{00EB}", |
| 132 |
|
euro => "\x{20AC}", |
| 133 |
|
exist => "\x{2203}", |
| 134 |
|
fnof => "\x{0192}", |
| 135 |
|
forall => "\x{2200}", |
| 136 |
|
frac12 => "\x{00BD}", |
| 137 |
|
frac14 => "\x{00BC}", |
| 138 |
|
frac34 => "\x{00BE}", |
| 139 |
|
frasl => "\x{2044}", |
| 140 |
|
gamma => "\x{03B3}", |
| 141 |
|
ge => "\x{2265}", |
| 142 |
|
gt => "\x{003E}", |
| 143 |
|
GT => "\x{003E}", |
| 144 |
|
hArr => "\x{21D4}", |
| 145 |
|
harr => "\x{2194}", |
| 146 |
|
hearts => "\x{2665}", |
| 147 |
|
hellip => "\x{2026}", |
| 148 |
|
iacute => "\x{00ED}", |
| 149 |
|
icirc => "\x{00EE}", |
| 150 |
|
iexcl => "\x{00A1}", |
| 151 |
|
igrave => "\x{00EC}", |
| 152 |
|
image => "\x{2111}", |
| 153 |
|
infin => "\x{221E}", |
| 154 |
|
int => "\x{222B}", |
| 155 |
|
iota => "\x{03B9}", |
| 156 |
|
iquest => "\x{00BF}", |
| 157 |
|
isin => "\x{2208}", |
| 158 |
|
iuml => "\x{00EF}", |
| 159 |
|
kappa => "\x{03BA}", |
| 160 |
|
lArr => "\x{21D0}", |
| 161 |
|
lambda => "\x{03BB}", |
| 162 |
|
lang => "\x{2329}", |
| 163 |
|
laquo => "\x{00AB}", |
| 164 |
|
larr => "\x{2190}", |
| 165 |
|
lceil => "\x{2308}", |
| 166 |
|
ldquo => "\x{201C}", |
| 167 |
|
le => "\x{2264}", |
| 168 |
|
lfloor => "\x{230A}", |
| 169 |
|
lowast => "\x{2217}", |
| 170 |
|
loz => "\x{25CA}", |
| 171 |
|
lrm => "\x{200E}", |
| 172 |
|
lsaquo => "\x{2039}", |
| 173 |
|
lsquo => "\x{2018}", |
| 174 |
|
lt => "\x{003C}", |
| 175 |
|
LT => "\x{003C}", |
| 176 |
|
macr => "\x{00AF}", |
| 177 |
|
mdash => "\x{2014}", |
| 178 |
|
micro => "\x{00B5}", |
| 179 |
|
middot => "\x{00B7}", |
| 180 |
|
minus => "\x{2212}", |
| 181 |
|
mu => "\x{03BC}", |
| 182 |
|
nabla => "\x{2207}", |
| 183 |
|
nbsp => "\x{00A0}", |
| 184 |
|
ndash => "\x{2013}", |
| 185 |
|
ne => "\x{2260}", |
| 186 |
|
ni => "\x{220B}", |
| 187 |
|
not => "\x{00AC}", |
| 188 |
|
notin => "\x{2209}", |
| 189 |
|
nsub => "\x{2284}", |
| 190 |
|
ntilde => "\x{00F1}", |
| 191 |
|
nu => "\x{03BD}", |
| 192 |
|
oacute => "\x{00F3}", |
| 193 |
|
ocirc => "\x{00F4}", |
| 194 |
|
oelig => "\x{0153}", |
| 195 |
|
ograve => "\x{00F2}", |
| 196 |
|
oline => "\x{203E}", |
| 197 |
|
omega => "\x{03C9}", |
| 198 |
|
omicron => "\x{03BF}", |
| 199 |
|
oplus => "\x{2295}", |
| 200 |
|
or => "\x{2228}", |
| 201 |
|
ordf => "\x{00AA}", |
| 202 |
|
ordm => "\x{00BA}", |
| 203 |
|
oslash => "\x{00F8}", |
| 204 |
|
otilde => "\x{00F5}", |
| 205 |
|
otimes => "\x{2297}", |
| 206 |
|
ouml => "\x{00F6}", |
| 207 |
|
para => "\x{00B6}", |
| 208 |
|
part => "\x{2202}", |
| 209 |
|
permil => "\x{2030}", |
| 210 |
|
perp => "\x{22A5}", |
| 211 |
|
phi => "\x{03C6}", |
| 212 |
|
pi => "\x{03C0}", |
| 213 |
|
piv => "\x{03D6}", |
| 214 |
|
plusmn => "\x{00B1}", |
| 215 |
|
pound => "\x{00A3}", |
| 216 |
|
prime => "\x{2032}", |
| 217 |
|
prod => "\x{220F}", |
| 218 |
|
prop => "\x{221D}", |
| 219 |
|
psi => "\x{03C8}", |
| 220 |
|
quot => "\x{0022}", |
| 221 |
|
QUOT => "\x{0022}", |
| 222 |
|
rArr => "\x{21D2}", |
| 223 |
|
radic => "\x{221A}", |
| 224 |
|
rang => "\x{232A}", |
| 225 |
|
raquo => "\x{00BB}", |
| 226 |
|
rarr => "\x{2192}", |
| 227 |
|
rceil => "\x{2309}", |
| 228 |
|
rdquo => "\x{201D}", |
| 229 |
|
real => "\x{211C}", |
| 230 |
|
reg => "\x{00AE}", |
| 231 |
|
REG => "\x{00AE}", |
| 232 |
|
rfloor => "\x{230B}", |
| 233 |
|
rho => "\x{03C1}", |
| 234 |
|
rlm => "\x{200F}", |
| 235 |
|
rsaquo => "\x{203A}", |
| 236 |
|
rsquo => "\x{2019}", |
| 237 |
|
sbquo => "\x{201A}", |
| 238 |
|
scaron => "\x{0161}", |
| 239 |
|
sdot => "\x{22C5}", |
| 240 |
|
sect => "\x{00A7}", |
| 241 |
|
shy => "\x{00AD}", |
| 242 |
|
sigma => "\x{03C3}", |
| 243 |
|
sigmaf => "\x{03C2}", |
| 244 |
|
sim => "\x{223C}", |
| 245 |
|
spades => "\x{2660}", |
| 246 |
|
sub => "\x{2282}", |
| 247 |
|
sube => "\x{2286}", |
| 248 |
|
sum => "\x{2211}", |
| 249 |
|
sup => "\x{2283}", |
| 250 |
|
sup1 => "\x{00B9}", |
| 251 |
|
sup2 => "\x{00B2}", |
| 252 |
|
sup3 => "\x{00B3}", |
| 253 |
|
supe => "\x{2287}", |
| 254 |
|
szlig => "\x{00DF}", |
| 255 |
|
tau => "\x{03C4}", |
| 256 |
|
there4 => "\x{2234}", |
| 257 |
|
theta => "\x{03B8}", |
| 258 |
|
thetasym => "\x{03D1}", |
| 259 |
|
thinsp => "\x{2009}", |
| 260 |
|
thorn => "\x{00FE}", |
| 261 |
|
tilde => "\x{02DC}", |
| 262 |
|
times => "\x{00D7}", |
| 263 |
|
trade => "\x{2122}", |
| 264 |
|
uArr => "\x{21D1}", |
| 265 |
|
uacute => "\x{00FA}", |
| 266 |
|
uarr => "\x{2191}", |
| 267 |
|
ucirc => "\x{00FB}", |
| 268 |
|
ugrave => "\x{00F9}", |
| 269 |
|
uml => "\x{00A8}", |
| 270 |
|
upsih => "\x{03D2}", |
| 271 |
|
upsilon => "\x{03C5}", |
| 272 |
|
uuml => "\x{00FC}", |
| 273 |
|
weierp => "\x{2118}", |
| 274 |
|
xi => "\x{03BE}", |
| 275 |
|
yacute => "\x{00FD}", |
| 276 |
|
yen => "\x{00A5}", |
| 277 |
|
yuml => "\x{00FF}", |
| 278 |
|
zeta => "\x{03B6}", |
| 279 |
|
zwj => "\x{200D}", |
| 280 |
|
zwnj => "\x{200C}", |
| 281 |
|
}; |
| 282 |
|
|
| 283 |
my $special_category = { |
my $special_category = { |
| 284 |
address => 1, area => 1, base => 1, basefont => 1, bgsound => 1, |
address => 1, area => 1, base => 1, basefont => 1, bgsound => 1, |
| 285 |
blockquote => 1, body => 1, br => 1, center => 1, col => 1, colgroup => 1, |
blockquote => 1, body => 1, br => 1, center => 1, col => 1, colgroup => 1, |
| 1896 |
|
|
| 1897 |
sub _tokenize_attempt_to_consume_an_entity ($) { |
sub _tokenize_attempt_to_consume_an_entity ($) { |
| 1898 |
my $self = shift; |
my $self = shift; |
|
my $r; |
|
| 1899 |
|
|
| 1900 |
if ($self->{next_input_character} == 0x0023) { # # |
if ($self->{next_input_character} == 0x0023) { # # |
| 1901 |
|
|
| 1941 |
$self->{parse_error}->(); |
$self->{parse_error}->(); |
| 1942 |
$self->{next_input_character} = 0x0023; # # |
$self->{next_input_character} = 0x0023; # # |
| 1943 |
unshift @{$self->{char}}, ($x_char); |
unshift @{$self->{char}}, ($x_char); |
| 1944 |
last X; ## nothing is returned |
return undef; |
| 1945 |
} elsif ($self->{next_input_character} == 0x003B) { # ; |
} elsif ($self->{next_input_character} == 0x003B) { # ; |
| 1946 |
|
|
| 1947 |
if (@{$self->{char}}) { |
if (@{$self->{char}}) { |
| 1960 |
## ISSUE: Why this is not an error? |
## ISSUE: Why this is not an error? |
| 1961 |
} |
} |
| 1962 |
|
|
| 1963 |
$r = {type => 'character', data => chr $num}; |
return {type => 'character', data => chr $num}; |
| 1964 |
} # X |
} # X |
| 1965 |
} elsif (0x0030 <= $self->{next_input_character} and |
} elsif (0x0030 <= $self->{next_input_character} and |
| 1966 |
$self->{next_input_character} <= 0x0039) { # 0..9 |
$self->{next_input_character} <= 0x0039) { # 0..9 |
| 2005 |
## ISSUE: Why this is not an error? |
## ISSUE: Why this is not an error? |
| 2006 |
} |
} |
| 2007 |
|
|
| 2008 |
$r = {type => 'character', data => chr $code}; |
return {type => 'character', data => chr $code}; |
| 2009 |
} else { |
} else { |
| 2010 |
$self->{parse_error}->(); |
$self->{parse_error}->(); |
| 2011 |
unshift @{$self->{char}}, ($self->{next_input_character}); |
unshift @{$self->{char}}, ($self->{next_input_character}); |
| 2012 |
$self->{next_input_character} = 0x0023; # # |
$self->{next_input_character} = 0x0023; # # |
| 2013 |
|
return undef; |
| 2014 |
} |
} |
| 2015 |
} elsif ($self->{next_input_character} == 65) { # A |
} elsif ((0x0041 <= $self->{next_input_character} and |
| 2016 |
|
$self->{next_input_character} <= 0x005A) or |
| 2017 |
if (@{$self->{char}}) { |
(0x0061 <= $self->{next_input_character} and |
| 2018 |
$self->{next_input_character} = shift @{$self->{char}}; |
$self->{next_input_character} <= 0x007A)) { |
| 2019 |
} else { |
my $entity_name = chr $self->{next_input_character}; |
| 2020 |
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 69) { # E |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C6}>}; # AElig |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (69, 108, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (69, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (69, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C1}>}; # Aacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C2}>}; # Acirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C0}>}; # Agrave |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0391}>}; # Alpha |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 112, 104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C5}>}; # Aring |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 105, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C3}>}; # Atilde |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C4}>}; # Auml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 77) { # M |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 80) { # P |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0026}>}; # AMP |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (77, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 65; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 66) { # B |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0392}>}; # Beta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 66; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 66; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 66; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 67) { # C |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C7}>}; # Ccedil |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, 100, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 67; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 67; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 67; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 67; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A7}>}; # Chi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 67; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 79) { # O |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 80) { # P |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 89) { # Y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A9}>}; # COPY |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (79, 80, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 67; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (79, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 67; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 67; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 68) { # D |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2021}>}; # Dagger |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 103, 103, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 68; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 103, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 68; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 68; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 68; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0394}>}; # Delta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 68; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 68; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 68; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 68; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 69) { # E |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 84) { # T |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 72) { # H |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D0}>}; # ETH |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (84, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C9}>}; # Eacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00CA}>}; # Ecirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00C8}>}; # Egrave |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0395}>}; # Epsilon |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, 108, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0397}>}; # Eta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00CB}>}; # Euml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 69; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 71) { # G |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0393}>}; # Gamma |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 71; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 71; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 71; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 84) { # T |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{003E}>}; # GT |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 71; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 73) { # I |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00CD}>}; # Iacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00CE}>}; # Icirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00CC}>}; # Igrave |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0399}>}; # Iota |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00CF}>}; # Iuml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 73; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 75) { # K |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{039A}>}; # Kappa |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 112, 112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 75; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 75; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 75; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 75; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 76) { # L |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{039B}>}; # Lambda |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, 98, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 76; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, 98, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 76; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 76; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 76; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 84) { # T |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{003C}>}; # LT |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 76; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 77) { # M |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{039C}>}; # Mu |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 77; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 78) { # N |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D1}>}; # Ntilde |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 78; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 78; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 78; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 78; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{039D}>}; # Nu |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 78; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 79) { # O |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 69) { # E |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0152}>}; # OElig |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (69, 108, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (69, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (69, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D3}>}; # Oacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D4}>}; # Ocirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D2}>}; # Ograve |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A9}>}; # Omega |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 101, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{039F}>}; # Omicron |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 105, 99, 114, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 105, 99, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 105, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D8}>}; # Oslash |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 108, 97, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 108, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D5}>}; # Otilde |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D6}>}; # Ouml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 79; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 80) { # P |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A6}>}; # Phi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 80; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A0}>}; # Pi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2033}>}; # Prime |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 105, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 80; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 80; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 80; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A8}>}; # Psi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 80; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 80; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 82) { # R |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A1}>}; # Rho |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 82; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 69) { # E |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 71) { # G |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00AE}>}; # REG |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (69, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 82; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 82; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 83) { # S |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0160}>}; # Scaron |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 97, 114, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 83; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 83; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 83; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 83; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A3}>}; # Sigma |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 103, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 83; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 83; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 83; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 83; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 84) { # T |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 72) { # H |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 79) { # O |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 82) { # R |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 78) { # N |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00DE}>}; # THORN |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (72, 79, 82, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 84; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (72, 79, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 84; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (72, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 84; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A4}>}; # Tau |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 84; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0398}>}; # Theta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 101, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 84; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 84; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 84; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 84; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 85) { # U |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00DA}>}; # Uacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00DB}>}; # Ucirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D9}>}; # Ugrave |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03A5}>}; # Upsilon |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, 108, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00DC}>}; # Uuml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 85; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 88) { # X |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{039E}>}; # Xi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 88; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 89) { # Y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00DD}>}; # Yacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 89; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 89; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 89; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 89; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0178}>}; # Yuml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 89; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 89; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 89; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 90) { # Z |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0396}>}; # Zeta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 90; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 90; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 90; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E1}>}; # aacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E2}>}; # acirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B4}>}; # acute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E6}>}; # aelig |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E0}>}; # agrave |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 102) { # f |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 121) { # y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2135}>}; # alefsym |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 101, 102, 115, 121, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 101, 102, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 101, 102, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03B1}>}; # alpha |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 112, 104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0026}>}; # amp |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2227}>}; # and |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2220}>}; # ang |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0027}>}; # apos |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E5}>}; # aring |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 105, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 121) { # y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2248}>}; # asymp |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 121, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 121, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E3}>}; # atilde |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E4}>}; # auml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 97; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{201E}>}; # bdquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03B2}>}; # beta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A6}>}; # brvbar |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 118, 98, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 118, 98, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2022}>}; # bull |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
| 2021 |
if (@{$self->{char}}) { |
if (@{$self->{char}}) { |
| 2022 |
$self->{next_input_character} = shift @{$self->{char}}; |
$self->{next_input_character} = shift @{$self->{char}}; |
| 2023 |
} else { |
} else { |
| 2024 |
$self->{set_next_input_character}->($self); |
$self->{set_next_input_character}->($self); |
| 2025 |
} |
} |
| 2026 |
|
|
| 2027 |
} else { |
|
| 2028 |
$self->{parse_error}->(); |
my $value = $entity_name; |
| 2029 |
## reconsume |
my $match; |
| 2030 |
} |
|
| 2031 |
} |
while (length $entity_name < 10 and |
| 2032 |
} else { |
## NOTE: Some number greater than the maximum length of entity name |
| 2033 |
$self->{parse_error}->(); |
((0x0041 <= $self->{next_input_character} and |
| 2034 |
unshift @{$self->{char}}, (117, 108, $self->{next_input_character}); |
$self->{next_input_character} <= 0x005A) or |
| 2035 |
$self->{next_input_character} = 98; |
(0x0061 <= $self->{next_input_character} and |
| 2036 |
} |
$self->{next_input_character} <= 0x007A) or |
| 2037 |
} else { |
(0x0030 <= $self->{next_input_character} and |
| 2038 |
$self->{parse_error}->(); |
$self->{next_input_character} <= 0x0039))) { |
| 2039 |
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
$entity_name .= chr $self->{next_input_character}; |
| 2040 |
$self->{next_input_character} = 98; |
if (defined $entity_char->{$entity_name}) { |
| 2041 |
} |
$value = $entity_char->{$entity_name}; |
| 2042 |
|
$match = 1; |
| 2043 |
} else { |
} else { |
| 2044 |
$self->{parse_error}->(); |
$value .= chr $self->{next_input_character}; |
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 98; |
|
| 2045 |
} |
} |
|
} elsif ($self->{next_input_character} == 99) { # c |
|
| 2046 |
|
|
| 2047 |
if (@{$self->{char}}) { |
if (@{$self->{char}}) { |
| 2048 |
$self->{next_input_character} = shift @{$self->{char}}; |
$self->{next_input_character} = shift @{$self->{char}}; |
| 2050 |
$self->{set_next_input_character}->($self); |
$self->{set_next_input_character}->($self); |
| 2051 |
} |
} |
| 2052 |
|
|
| 2053 |
if ($self->{next_input_character} == 97) { # a |
} |
| 2054 |
|
|
| 2055 |
if (@{$self->{char}}) { |
if ($match) { |
| 2056 |
$self->{next_input_character} = shift @{$self->{char}}; |
if ($self->{next_input_character} == 0x003B) { # ; |
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2229}>}; # cap |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E7}>}; # ccedil |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, 100, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B8}>}; # cedil |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 100, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A2}>}; # cent |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03C7}>}; # chi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{02C6}>}; # circ |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2663}>}; # clubs |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 117, 98, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2245}>}; # cong |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 121) { # y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A9}>}; # copy |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{21B5}>}; # crarr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
| 2057 |
|
|
| 2058 |
if (@{$self->{char}}) { |
if (@{$self->{char}}) { |
| 2059 |
$self->{next_input_character} = shift @{$self->{char}}; |
$self->{next_input_character} = shift @{$self->{char}}; |
| 2061 |
$self->{set_next_input_character}->($self); |
$self->{set_next_input_character}->($self); |
| 2062 |
} |
} |
| 2063 |
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{222A}>}; # cup |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A4}>}; # curren |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 114, 114, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 114, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
| 2064 |
} else { |
} else { |
| 2065 |
$self->{parse_error}->(); |
$self->{parse_error}->(); |
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 99; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 65) { # A |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{21D3}>}; # dArr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2020}>}; # dagger |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 103, 103, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 103, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2193}>}; # darr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B0}>}; # deg |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03B4}>}; # delta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2666}>}; # diams |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 97, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F7}>}; # divide |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 118, 105, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 118, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 100; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E9}>}; # eacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00EA}>}; # ecirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00E8}>}; # egrave |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 121) { # y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2205}>}; # empty |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 112, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2003}>}; # emsp |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2002}>}; # ensp |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (110, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03B5}>}; # epsilon |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, 108, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2261}>}; # equiv |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (113, 117, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03B7}>}; # eta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F0}>}; # eth |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00EB}>}; # euml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{20AC}>}; # euro |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 120) { # x |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2203}>}; # exist |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (120, 105, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (120, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (120, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 101; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 102) { # f |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 102) { # f |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0192}>}; # fnof |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (110, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2200}>}; # forall |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 114, 97, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 49) { # 1 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 50) { # 2 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00BD}>}; # frac12 |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 52) { # 4 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00BC}>}; # frac14 |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, 99, 49, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 51) { # 3 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 52) { # 4 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00BE}>}; # frac34 |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, 99, 51, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2044}>}; # frasl |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 102; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03B3}>}; # gamma |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 103; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 103; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 103; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2265}>}; # ge |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{003E}>}; # gt |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 103; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 65) { # A |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{21D4}>}; # hArr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2194}>}; # harr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2665}>}; # hearts |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 97, 114, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2026}>}; # hellip |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, 108, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 104; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00ED}>}; # iacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00EE}>}; # icirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 120) { # x |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A1}>}; # iexcl |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 120, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 120, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00EC}>}; # igrave |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2111}>}; # image |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 97, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 102) { # f |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{221E}>}; # infin |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (110, 102, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (110, 102, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{222B}>}; # int |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03B9}>}; # iota |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00BF}>}; # iquest |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (113, 117, 101, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (113, 117, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2208}>}; # isin |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00EF}>}; # iuml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 105; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 107) { # k |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03BA}>}; # kappa |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 112, 112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 107; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 107; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 107; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 107; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 65) { # A |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{21D0}>}; # lArr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03BB}>}; # lambda |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, 98, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, 98, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2329}>}; # lang |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00AB}>}; # laquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2190}>}; # larr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2308}>}; # lceil |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{201C}>}; # ldquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2264}>}; # le |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 102) { # f |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{230A}>}; # lfloor |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (102, 108, 111, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (102, 108, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (102, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (102, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 119) { # w |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2217}>}; # lowast |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 119, 97, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 119, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 119, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 122) { # z |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{25CA}>}; # loz |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{200E}>}; # lrm |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2039}>}; # lsaquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 97, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 97, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2018}>}; # lsquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{003C}>}; # lt |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 108; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00AF}>}; # macr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2014}>}; # mdash |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 97, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B5}>}; # micro |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 99, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B7}>}; # middot |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 100, 100, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 100, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2212}>}; # minus |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 110, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03BC}>}; # mu |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 109; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2207}>}; # nabla |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 98, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 98, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A0}>}; # nbsp |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (98, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (98, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2013}>}; # ndash |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 97, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2260}>}; # ne |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{220B}>}; # ni |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2209}>}; # notin |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 116, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$r = {type => 'character', data => qq<\x{00AC}>}; # not |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2284}>}; # nsub |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F1}>}; # ntilde |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03BD}>}; # nu |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 110; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F3}>}; # oacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F4}>}; # ocirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0153}>}; # oelig |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F2}>}; # ograve |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{203E}>}; # oline |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 105, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03C9}>}; # omega |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 101, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03BF}>}; # omicron |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 105, 99, 114, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 105, 99, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 105, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2295}>}; # oplus |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 108, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 102) { # f |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00AA}>}; # ordf |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00BA}>}; # ordm |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$r = {type => 'character', data => qq<\x{2228}>}; # or |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F8}>}; # oslash |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 108, 97, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 108, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F5}>}; # otilde |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2297}>}; # otimes |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 109, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F6}>}; # ouml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 111; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B6}>}; # para |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2202}>}; # part |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2030}>}; # permil |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 114, 109, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 114, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{22A5}>}; # perp |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03C6}>}; # phi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03D6}>}; # piv |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$r = {type => 'character', data => qq<\x{03C0}>}; # pi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B1}>}; # plusmn |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 117, 115, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 117, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A3}>}; # pound |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 117, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2032}>}; # prime |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 105, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{220F}>}; # prod |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{221D}>}; # prop |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03C8}>}; # psi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 112; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0022}>}; # quot |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 113; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 113; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 113; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 81) { # Q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 85) { # U |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 79) { # O |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 84) { # T |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0022}>}; # QUOT |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (85, 79, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 81; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (85, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 81; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 81; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 65) { # A |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{21D2}>}; # rArr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{221A}>}; # radic |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 100, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{232A}>}; # rang |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00BB}>}; # raquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2192}>}; # rarr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2309}>}; # rceil |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{201D}>}; # rdquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{211C}>}; # real |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00AE}>}; # reg |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 102) { # f |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{230B}>}; # rfloor |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (102, 108, 111, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (102, 108, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (102, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (102, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03C1}>}; # rho |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{200F}>}; # rlm |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{203A}>}; # rsaquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 97, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 97, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2019}>}; # rsquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 114; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 113) { # q |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{201A}>}; # sbquo |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (98, 113, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (98, 113, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (98, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{0161}>}; # scaron |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 97, 114, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{22C5}>}; # sdot |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A7}>}; # sect |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 121) { # y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00AD}>}; # shy |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 102) { # f |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03C2}>}; # sigmaf |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$r = {type => 'character', data => qq<\x{03C3}>}; # sigma |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 103, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{223C}>}; # sim |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2660}>}; # spades |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 97, 100, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 97, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 98) { # b |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2286}>}; # sube |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$r = {type => 'character', data => qq<\x{2282}>}; # sub |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2211}>}; # sum |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 49) { # 1 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B9}>}; # sup1 |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 50) { # 2 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B2}>}; # sup2 |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 51) { # 3 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00B3}>}; # sup3 |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2287}>}; # supe |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$r = {type => 'character', data => qq<\x{2283}>}; # sup |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 122) { # z |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00DF}>}; # szlig |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (122, 108, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (122, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (122, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 115; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03C4}>}; # tau |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 52) { # 4 |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2234}>}; # there4 |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 101, 114, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 101, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 121) { # y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03D1}>}; # thetasym |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 101, 116, 97, 115, 121, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 101, 116, 97, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$r = {type => 'character', data => qq<\x{03B8}>}; # theta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 101, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2009}>}; # thinsp |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 105, 110, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 105, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00FE}>}; # thorn |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 111, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (104, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{02DC}>}; # tilde |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 108, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00D7}>}; # times |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 109, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 100) { # d |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2122}>}; # trade |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, 100, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 116; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 65) { # A |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{21D1}>}; # uArr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (65, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00FA}>}; # uacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2191}>}; # uarr |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00FB}>}; # ucirc |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 103) { # g |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 118) { # v |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00F9}>}; # ugrave |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, 118, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, 97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (103, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A8}>}; # uml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 115) { # s |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 104) { # h |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03D2}>}; # upsih |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 111) { # o |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03C5}>}; # upsilon |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, 108, 111, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, 108, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, 115, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (112, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00FC}>}; # uuml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 117; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 119) { # w |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 114) { # r |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 112) { # p |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{2118}>}; # weierp |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 105, 101, 114, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 119; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 105, 101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 119; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 105, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 119; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 119; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 119; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 120) { # x |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 105) { # i |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03BE}>}; # xi |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 120; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 121) { # y |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 99) { # c |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00FD}>}; # yacute |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 121; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, 117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 121; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, 99, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 121; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (97, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 121; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00A5}>}; # yen |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 121; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 117) { # u |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 109) { # m |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 108) { # l |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{00FF}>}; # yuml |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, 109, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 121; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (117, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 121; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 121; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 122) { # z |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 101) { # e |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 116) { # t |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 97) { # a |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{03B6}>}; # zeta |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, 116, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 122; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (101, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 122; |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 119) { # w |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 106) { # j |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{200D}>}; # zwj |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} elsif ($self->{next_input_character} == 110) { # n |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
if ($self->{next_input_character} == 106) { # j |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
{ |
|
|
$r = {type => 'character', data => qq<\x{200C}>}; # zwnj |
|
|
if ($self->{next_input_character} == 0x003B) { # ; |
|
|
|
|
|
if (@{$self->{char}}) { |
|
|
$self->{next_input_character} = shift @{$self->{char}}; |
|
|
} else { |
|
|
$self->{set_next_input_character}->($self); |
|
|
} |
|
|
|
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
## reconsume |
|
|
} |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (119, 110, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 122; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, (119, $self->{next_input_character}); |
|
|
$self->{next_input_character} = 122; |
|
|
} |
|
|
} else { |
|
|
$self->{parse_error}->(); |
|
|
unshift @{$self->{char}}, ($self->{next_input_character}); |
|
|
$self->{next_input_character} = 122; |
|
| 2066 |
} |
} |
| 2067 |
|
|
| 2068 |
|
return {type => 'character', data => $value}; |
| 2069 |
} else { |
} else { |
| 2070 |
$self->{parse_error}->(); |
$self->{parse_error}->(); |
| 2071 |
|
## NOTE: No characters are consumed in the spec. |
| 2072 |
|
unshift @{$self->{token}}, ({type => 'character', data => $value}); |
| 2073 |
|
return undef; |
| 2074 |
} |
} |
| 2075 |
|
} else { |
| 2076 |
|
## no characters are consumed |
| 2077 |
return $r; |
$self->{parse_error}->(); |
| 2078 |
|
return undef; |
| 2079 |
|
} |
| 2080 |
} # _tokenize_attempt_to_consume_an_entity |
} # _tokenize_attempt_to_consume_an_entity |
| 2081 |
|
|
| 2082 |
sub _initialize_tree_constructor ($) { |
sub _initialize_tree_constructor ($) { |