| 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 |
| 109 |
sub COMMENT_END_DASH_STATE () { 18 } |
sub COMMENT_END_DASH_STATE () { 18 } |
| 110 |
sub BOGUS_COMMENT_STATE () { 19 } |
sub BOGUS_COMMENT_STATE () { 19 } |
| 111 |
sub DOCTYPE_STATE () { 20 } |
sub DOCTYPE_STATE () { 20 } |
| 2943 |
|
|
| 2944 |
redo A; |
redo A; |
| 2945 |
} |
} |
| 2946 |
} elsif ($self->{state} == COMMENT_END_STATE) { |
} elsif ($self->{state} == COMMENT_END_STATE or |
| 2947 |
|
$self->{state} == COMMENT_END_BANG_STATE) { |
| 2948 |
## XML5: "Comment end state" and "DOCTYPE comment end state". |
## XML5: "Comment end state" and "DOCTYPE comment end state". |
| 2949 |
|
## (No comment end bang state.) |
| 2950 |
|
|
| 2951 |
if ($self->{nc} == 0x003E) { # > |
if ($self->{nc} == 0x003E) { # > |
| 2952 |
if ($self->{in_subset}) { |
if ($self->{in_subset}) { |
| 2973 |
|
|
| 2974 |
redo A; |
redo A; |
| 2975 |
} elsif ($self->{nc} == 0x002D) { # - |
} elsif ($self->{nc} == 0x002D) { # - |
| 2976 |
|
if ($self->{state} == COMMENT_END_BANG_STATE) { |
| 2977 |
|
|
| 2978 |
|
$self->{ct}->{data} .= '--!'; # comment |
| 2979 |
|
$self->{state} = COMMENT_END_DASH_STATE; |
| 2980 |
|
} else { |
| 2981 |
|
|
| 2982 |
|
## XML5: Not a parse error. |
| 2983 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'dash in comment', |
| 2984 |
|
line => $self->{line_prev}, |
| 2985 |
|
column => $self->{column_prev}); |
| 2986 |
|
$self->{ct}->{data} .= '-'; # comment |
| 2987 |
|
## Stay in the state |
| 2988 |
|
} |
| 2989 |
|
|
| 2990 |
## XML5: Not a parse error. |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 2991 |
$self->{parse_error}->(level => $self->{level}->{must}, type => 'dash in comment', |
$self->{line_prev} = $self->{line}; |
| 2992 |
line => $self->{line_prev}, |
$self->{column_prev} = $self->{column}; |
| 2993 |
column => $self->{column_prev}); |
$self->{column}++; |
| 2994 |
$self->{ct}->{data} .= '-'; # comment |
$self->{nc} |
| 2995 |
## Stay in the state |
= ord substr ($self->{char_buffer}, $self->{char_buffer_pos}++, 1); |
| 2996 |
|
} else { |
| 2997 |
|
$self->{set_nc}->($self); |
| 2998 |
|
} |
| 2999 |
|
|
| 3000 |
|
redo A; |
| 3001 |
|
} elsif ($self->{nc} == 0x0021 and # ! |
| 3002 |
|
$self->{state} != COMMENT_END_BANG_STATE) { |
| 3003 |
|
$self->{parse_error}->(level => $self->{level}->{must}, type => 'comment end bang'); # XXX error type |
| 3004 |
|
$self->{state} = COMMENT_END_BANG_STATE; |
| 3005 |
|
|
| 3006 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
| 3007 |
$self->{line_prev} = $self->{line}; |
$self->{line_prev} = $self->{line}; |
| 3024 |
$self->{state} = DATA_STATE; |
$self->{state} = DATA_STATE; |
| 3025 |
$self->{s_kwd} = ''; |
$self->{s_kwd} = ''; |
| 3026 |
} |
} |
| 3027 |
## reconsume |
## Reconsume. |
| 3028 |
|
|
| 3029 |
return ($self->{ct}); # comment |
return ($self->{ct}); # comment |
| 3030 |
|
|
| 3031 |
redo A; |
redo A; |
| 3032 |
} else { |
} else { |
| 3033 |
|
|
| 3034 |
$self->{ct}->{data} .= '--' . chr ($self->{nc}); # comment |
if ($self->{state} == COMMENT_END_BANG_STATE) { |
| 3035 |
|
$self->{ct}->{data} .= '--!' . chr ($self->{nc}); # comment |
| 3036 |
|
} else { |
| 3037 |
|
$self->{ct}->{data} .= '--' . chr ($self->{nc}); # comment |
| 3038 |
|
} |
| 3039 |
$self->{state} = COMMENT_STATE; |
$self->{state} = COMMENT_STATE; |
| 3040 |
|
|
| 3041 |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |
if ($self->{char_buffer_pos} < length $self->{char_buffer}) { |