| 251 |
} else { |
} else { |
| 252 |
# stay in the state. |
# stay in the state. |
| 253 |
# reprocess |
# reprocess |
| 254 |
return {type => DELIM_STATE, value => '/'}; |
return {type => DELIM_TOKEN, value => '/'}; |
| 255 |
#redo A; |
#redo A; |
| 256 |
} |
} |
| 257 |
} elsif ($self->{c} == 0x003C) { # < |
} elsif ($self->{c} == 0x003C) { # < |
| 259 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 260 |
if ($self->{c} == 0x0021) { # ! |
if ($self->{c} == 0x0021) { # ! |
| 261 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 262 |
if ($self->{c} == 0x002C) { # - |
if ($self->{c} == 0x002D) { # - |
| 263 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 264 |
if ($self->{c} == 0x002C) { # - |
if ($self->{c} == 0x002D) { # - |
| 265 |
$self->{state} = BEFORE_TOKEN_STATE; |
$self->{state} = BEFORE_TOKEN_STATE; |
| 266 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 267 |
return {type => CDO_TOKEN}; |
return {type => CDO_TOKEN}; |
| 556 |
redo A; |
redo A; |
| 557 |
} else { |
} else { |
| 558 |
$self->{state} = BEFORE_TOKEN_STATE; |
$self->{state} = BEFORE_TOKEN_STATE; |
| 559 |
$self->{c} = $self->{get_char}->(); |
# reprocess |
| 560 |
return {type => DELIM_TOKEN, value => '#'}; |
return {type => DELIM_TOKEN, value => '#'}; |
| 561 |
#redo A; |
#redo A; |
| 562 |
} |
} |
| 803 |
URI_PREFIX_TOKEN, URI_PREFIX_INVALID_TOKEN, |
URI_PREFIX_TOKEN, URI_PREFIX_INVALID_TOKEN, |
| 804 |
URI_PREFIX_INVALID_TOKEN, URI_PREFIX_INVALID_TOKEN, |
URI_PREFIX_INVALID_TOKEN, URI_PREFIX_INVALID_TOKEN, |
| 805 |
}->{$self->{t}->{type}}; |
}->{$self->{t}->{type}}; |
| 806 |
$self->{t}->{value} .= "\x0D\x0A"; |
$self->{t}->{value} .= "\x0D"; |
| 807 |
$self->{state} = URI_UNQUOTED_STATE; |
$self->{state} = ESCAPE_BEFORE_LF_STATE; |
| 808 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 809 |
redo A; |
redo A; |
| 810 |
} else { |
} else { |
| 811 |
## Note: In |nl| in ... in |string| or |ident|. |
## Note: In |nl| in ... in |string| or |ident|. |
| 812 |
$self->{t}->{value} .= "\x0D\x0A"; |
$self->{t}->{value} .= "\x0D"; |
| 813 |
$self->{state} = ESCAPE_BEFORE_LF_STATE; |
$self->{state} = ESCAPE_BEFORE_LF_STATE; |
| 814 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 815 |
redo A; |
redo A; |
| 840 |
return {type => DELIM_TOKEN, value => '\\'}; |
return {type => DELIM_TOKEN, value => '\\'}; |
| 841 |
#redo A; |
#redo A; |
| 842 |
} |
} |
| 843 |
} else { |
} elsif ($q == 1) { |
| 844 |
$self->{state} = $q == 1 ? URI_UNQUOTED_STATE : STRING_STATE; |
$self->{state} = URI_UNQUOTED_STATE; |
| 845 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 846 |
redo A; |
redo A; |
| 847 |
|
} else { |
| 848 |
|
unshift @{$self->{token}}, {type => DELIM_TOKEN, value => '\\'}; |
| 849 |
|
$self->{t}->{type} = { |
| 850 |
|
STRING_TOKEN, INVALID_TOKEN, |
| 851 |
|
URI_TOKEN, URI_INVALID_TOKEN, |
| 852 |
|
URI_PREFIX_TOKEN, URI_PREFIX_INVALID_TOKEN, |
| 853 |
|
}->{$self->{t}->{type}} || $self->{t}->{type}; |
| 854 |
|
$self->{state} = BEFORE_TOKEN_STATE; |
| 855 |
|
# reprocess |
| 856 |
|
return $self->{t}; |
| 857 |
|
#redo A; |
| 858 |
} |
} |
| 859 |
} elsif ($self->{state} == ESCAPE_STATE) { |
} elsif ($self->{state} == ESCAPE_STATE) { |
| 860 |
## NOTE: third..seventh character of |unicode| in |escape|. |
## NOTE: third..seventh character of |unicode| in |escape|. |
| 918 |
} elsif ($self->{state} == ESCAPE_BEFORE_LF_STATE) { |
} elsif ($self->{state} == ESCAPE_BEFORE_LF_STATE) { |
| 919 |
## NOTE: |\n| in |\r\n| in |unicode| in |escape|. |
## NOTE: |\n| in |\r\n| in |unicode| in |escape|. |
| 920 |
if ($self->{c} == 0x000A) { # \n |
if ($self->{c} == 0x000A) { # \n |
| 921 |
$self->{t}->{value} .= chr $char; |
$self->{t}->{value} .= chr $self->{c}; |
| 922 |
$self->{state} = $q == 0 ? NAME_STATE : |
$self->{state} = $q == 0 ? NAME_STATE : |
| 923 |
$q == 1 ? URI_UNQUOTED_STATE : STRING_STATE; |
$q == 1 ? URI_UNQUOTED_STATE : STRING_STATE; |
| 924 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 925 |
redo A; |
redo A; |
| 926 |
} else { |
} else { |
|
$self->{t}->{value} .= chr $char; |
|
| 927 |
$self->{state} = $q == 0 ? NAME_STATE : |
$self->{state} = $q == 0 ? NAME_STATE : |
| 928 |
$q == 1 ? URI_UNQUOTED_STATE : STRING_STATE; |
$q == 1 ? URI_UNQUOTED_STATE : STRING_STATE; |
| 929 |
# reconsume |
# reprocess |
| 930 |
redo A; |
redo A; |
| 931 |
} |
} |
| 932 |
} elsif ($self->{state} == STRING_STATE) { |
} elsif ($self->{state} == STRING_STATE) { |
| 990 |
$self->{c} = $self->{get_char}->(); |
$self->{c} = $self->{get_char}->(); |
| 991 |
redo A; |
redo A; |
| 992 |
} else { |
} else { |
| 993 |
unshift @{$self->{token}}, {type => DELIM_STATE, value => '.'}; |
unshift @{$self->{token}}, {type => DELIM_TOKEN, value => '.'}; |
| 994 |
$self->{t}->{number} = $self->{t}->{value}; |
$self->{t}->{number} = $self->{t}->{value}; |
| 995 |
$self->{t}->{value} = ''; |
$self->{t}->{value} = ''; |
| 996 |
$self->{state} = BEFORE_TOKEN_STATE; |
$self->{state} = BEFORE_TOKEN_STATE; |
| 1007 |
redo A; |
redo A; |
| 1008 |
} else { |
} else { |
| 1009 |
$self->{state} = BEFORE_TOKEN_STATE; |
$self->{state} = BEFORE_TOKEN_STATE; |
| 1010 |
$self->{c} = $self->{get_char}->(); |
# reprocess |
| 1011 |
return {type => DELIM_TOKEN, value => '.'}; |
return {type => DELIM_TOKEN, value => '.'}; |
| 1012 |
#redo A; |
#redo A; |
| 1013 |
} |
} |