Parent Directory
|
Revision Log
|
Patch
| revision 1.73 by wakaba, Sun Mar 2 23:38:37 2008 UTC | revision 1.76 by wakaba, Mon Mar 3 09:17:10 2008 UTC | |
|---|---|---|
| # | Line 179 sub parse_string ($$$;$) { | Line 179 sub parse_string ($$$;$) { |
| 179 | my $i = 0; | my $i = 0; |
| 180 | my $line = 1; | my $line = 1; |
| 181 | my $column = 0; | my $column = 0; |
| 182 | $self->{set_next_input_character} = sub { | $self->{set_next_char} = sub { |
| 183 | my $self = shift; | my $self = shift; |
| 184 | ||
| 185 | pop @{$self->{prev_input_character}}; | pop @{$self->{prev_char}}; |
| 186 | unshift @{$self->{prev_input_character}}, $self->{next_input_character}; | unshift @{$self->{prev_char}}, $self->{next_char}; |
| 187 | ||
| 188 | $self->{next_input_character} = -1 and return if $i >= length $$s; | $self->{next_char} = -1 and return if $i >= length $$s; |
| 189 | $self->{next_input_character} = ord substr $$s, $i++, 1; | $self->{next_char} = ord substr $$s, $i++, 1; |
| 190 | $column++; | $column++; |
| 191 | ||
| 192 | if ($self->{next_input_character} == 0x000A) { # LF | if ($self->{next_char} == 0x000A) { # LF |
| 193 | $line++; | $line++; |
| 194 | $column = 0; | $column = 0; |
| 195 | } elsif ($self->{next_input_character} == 0x000D) { # CR | } elsif ($self->{next_char} == 0x000D) { # CR |
| 196 | $i++ if substr ($$s, $i, 1) eq "\x0A"; | $i++ if substr ($$s, $i, 1) eq "\x0A"; |
| 197 | $self->{next_input_character} = 0x000A; # LF # MUST | $self->{next_char} = 0x000A; # LF # MUST |
| 198 | $line++; | $line++; |
| 199 | $column = 0; | $column = 0; |
| 200 | } elsif ($self->{next_input_character} > 0x10FFFF) { | } elsif ($self->{next_char} > 0x10FFFF) { |
| 201 | $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST | $self->{next_char} = 0xFFFD; # REPLACEMENT CHARACTER # MUST |
| 202 | } elsif ($self->{next_input_character} == 0x0000) { # NULL | } elsif ($self->{next_char} == 0x0000) { # NULL |
| 203 | !!!parse-error (type => 'NULL'); | !!!parse-error (type => 'NULL'); |
| 204 | $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST | $self->{next_char} = 0xFFFD; # REPLACEMENT CHARACTER # MUST |
| 205 | } | } |
| 206 | }; | }; |
| 207 | $self->{prev_input_character} = [-1, -1, -1]; | $self->{prev_char} = [-1, -1, -1]; |
| 208 | $self->{next_input_character} = -1; | $self->{next_char} = -1; |
| 209 | ||
| 210 | my $onerror = $_[2] || sub { | my $onerror = $_[2] || sub { |
| 211 | my (%opt) = @_; | my (%opt) = @_; |
| # | Line 226 sub parse_string ($$$;$) { | Line 226 sub parse_string ($$$;$) { |
| 226 | sub new ($) { | sub new ($) { |
| 227 | my $class = shift; | my $class = shift; |
| 228 | my $self = bless {}, $class; | my $self = bless {}, $class; |
| 229 | $self->{set_next_input_character} = sub { | $self->{set_next_char} = sub { |
| 230 | $self->{next_input_character} = -1; | $self->{next_char} = -1; |
| 231 | }; | }; |
| 232 | $self->{parse_error} = sub { | $self->{parse_error} = sub { |
| 233 | # | # |
| # | Line 333 sub _initialize_tokenizer ($) { | Line 333 sub _initialize_tokenizer ($) { |
| 333 | undef $self->{last_emitted_start_tag_name}; | undef $self->{last_emitted_start_tag_name}; |
| 334 | undef $self->{last_attribute_value_state}; | undef $self->{last_attribute_value_state}; |
| 335 | $self->{char} = []; | $self->{char} = []; |
| 336 | # $self->{next_input_character} | # $self->{next_char} |
| 337 | !!!next-input-character; | !!!next-input-character; |
| 338 | $self->{token} = []; | $self->{token} = []; |
| 339 | # $self->{escape} | # $self->{escape} |
| # | Line 346 sub _initialize_tokenizer ($) { | Line 346 sub _initialize_tokenizer ($) { |
| 346 | ## ->{tag_name} (START_TAG_TOKEN, END_TAG_TOKEN) | ## ->{tag_name} (START_TAG_TOKEN, END_TAG_TOKEN) |