| 105 |
sub COMMENT_START_DASH_STATE () { 15 } |
sub COMMENT_START_DASH_STATE () { 15 } |
| 106 |
sub COMMENT_STATE () { 16 } |
sub COMMENT_STATE () { 16 } |
| 107 |
sub COMMENT_END_STATE () { 17 } |
sub COMMENT_END_STATE () { 17 } |
| 108 |
sub COMMENT_END_BANG_STATE () { 102 } ## LAST |
sub COMMENT_END_BANG_STATE () { 102 } |
| 109 |
|
sub COMMENT_END_SPACE_STATE () { 103 } ## LAST |
| 110 |
sub COMMENT_END_DASH_STATE () { 18 } |
sub COMMENT_END_DASH_STATE () { 18 } |
| 111 |
sub BOGUS_COMMENT_STATE () { 19 } |
sub BOGUS_COMMENT_STATE () { 19 } |
| 112 |
sub DOCTYPE_STATE () { 20 } |
sub DOCTYPE_STATE () { 20 } |
| 2999 |
} |
} |
| 3000 |
|
|
| 3001 |
redo A; |
redo A; |
| 3002 |
} elsif ($self->{nc} == 0x0021 and # ! |
} elsif ($self->{state} != COMMENT_END_BANG_STATE and |
| 3003 |
$self->{state} != COMMENT_END_BANG_STATE) { |
$is_space->{$self->{nc}}) { |
| 3004 |
|
|
| 3005 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'comment end space'); # XXX error type |
| 3006 |
|
$self->{ct}->{data} .= '--' . chr ($self->{nc}); # comment |
| 3007 |
|
$self->{state} = COMMENT_END_SPACE_STATE; |
| 3008 |
|
|
| 3009 |
|
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3010 |
|
$self->{line_prev} = $self->{line}; |
| 3011 |
|
$self->{column_prev} = $self->{column}; |
| 3012 |
|
$self->{column}++; |
| 3013 |
|
$self->{nc} |
| 3014 |
|
= ord substr ($self->{char_buffer}, $self->{char_buffer_pos}++, 1); |
| 3015 |
|
} else { |
| 3016 |
|
$self->{set_nc}->($self); |
| 3017 |
|
} |
| 3018 |
|
|
| 3019 |
|
redo A; |
| 3020 |
|
} elsif ($self->{state} != COMMENT_END_BANG_STATE and |
| 3021 |
|
$self->{nc} == 0x0021) { # ! |
| 3022 |
|
|
| 3023 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'comment end bang'); # XXX error type |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'comment end bang'); # XXX error type |
| 3024 |
$self->{state} = COMMENT_END_BANG_STATE; |
$self->{state} = COMMENT_END_BANG_STATE; |
| 3025 |
|
|
| 3070 |
|
|
| 3071 |
redo A; |
redo A; |
| 3072 |
} |
} |
| 3073 |
|
} elsif ($self->{state} == COMMENT_END_SPACE_STATE) { |
| 3074 |
|
## XML5: Not exist. |
| 3075 |
|
|
| 3076 |
|
if ($self->{nc} == 0x003E) { # > |
| 3077 |
|
if ($self->{in_subset}) { |
| 3078 |
|
|
| 3079 |
|
$self->{state} = DOCTYPE_INTERNAL_SUBSET_STATE; |
| 3080 |
|
} else { |
| 3081 |
|
|
| 3082 |
|
$self->{state} = DATA_STATE; |
| 3083 |
|
$self->{s_kwd} = ''; |
| 3084 |
|
} |
| 3085 |
|
|
| 3086 |
|
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3087 |
|
$self->{line_prev} = $self->{line}; |
| 3088 |
|
$self->{column_prev} = $self->{column}; |
| 3089 |
|
$self->{column}++; |
| 3090 |
|
$self->{nc} |
| 3091 |
|
= ord substr ($self->{char_buffer}, $self->{char_buffer_pos}++, 1); |
| 3092 |
|
} else { |
| 3093 |
|
$self->{set_nc}->($self); |
| 3094 |
|
} |
| 3095 |
|
|
| 3096 |
|
|
| 3097 |
|
return ($self->{ct}); # comment |
| 3098 |
|
|
| 3099 |
|
redo A; |
| 3100 |
|
} elsif ($is_space->{$self->{nc}}) { |
| 3101 |
|
|
| 3102 |
|
$self->{ct}->{data} .= chr ($self->{nc}); # comment |
| 3103 |
|
## Stay in the state. |
| 3104 |
|
|
| 3105 |
|
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3106 |
|
$self->{line_prev} = $self->{line}; |
| 3107 |
|
$self->{column_prev} = $self->{column}; |
| 3108 |
|
$self->{column}++; |
| 3109 |
|
$self->{nc} |
| 3110 |
|
= ord substr ($self->{char_buffer}, $self->{char_buffer_pos}++, 1); |
| 3111 |
|
} else { |
| 3112 |
|
$self->{set_nc}->($self); |
| 3113 |
|
} |
| 3114 |
|
|
| 3115 |
|
redo A; |
| 3116 |
|
} elsif ($self->{nc} == -1) { |
| 3117 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'unclosed comment'); |
| 3118 |
|
if ($self->{in_subset}) { |
| 3119 |
|
|
| 3120 |
|
$self->{state} = DOCTYPE_INTERNAL_SUBSET_STATE; |
| 3121 |
|
} else { |
| 3122 |
|
|
| 3123 |
|
$self->{state} = DATA_STATE; |
| 3124 |
|
$self->{s_kwd} = ''; |
| 3125 |
|
} |
| 3126 |
|
## Reconsume. |
| 3127 |
|
|
| 3128 |
|
return ($self->{ct}); # comment |
| 3129 |
|
|
| 3130 |
|
redo A; |
| 3131 |
|
} else { |
| 3132 |
|
|
| 3133 |
|
$self->{ct}->{data} .= chr ($self->{nc}); # comment |
| 3134 |
|
$self->{state} = COMMENT_STATE; |
| 3135 |
|
|
| 3136 |
|
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3137 |
|
$self->{line_prev} = $self->{line}; |
| 3138 |
|
$self->{column_prev} = $self->{column}; |
| 3139 |
|
$self->{column}++; |
| 3140 |
|
$self->{nc} |
| 3141 |
|
= ord substr ($self->{char_buffer}, $self->{char_buffer_pos}++, 1); |
| 3142 |
|
} else { |
| 3143 |
|
$self->{set_nc}->($self); |
| 3144 |
|
} |
| 3145 |
|
|
| 3146 |
|
redo A; |
| 3147 |
|
} |
| 3148 |
} elsif ($self->{state} == DOCTYPE_STATE) { |
} elsif ($self->{state} == DOCTYPE_STATE) { |
| 3149 |
if ($is_space->{$self->{nc}}) { |
if ($is_space->{$self->{nc}}) { |
| 3150 |
|
|