/[suikacvs]/markup/html/whatpm/Whatpm/HTML.pm.src
Suika

Diff of /markup/html/whatpm/Whatpm/HTML.pm.src

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by wakaba, Wed May 2 13:44:34 2007 UTC revision 1.13 by wakaba, Sat Jun 23 05:29:48 2007 UTC
# Line 278  my $entity_char = { Line 278  my $entity_char = {
278    zeta => "\x{03B6}",    zeta => "\x{03B6}",
279    zwj => "\x{200D}",    zwj => "\x{200D}",
280    zwnj => "\x{200C}",    zwnj => "\x{200C}",
281  };  }; # $entity_char
282    
283    my $c1_entity_char = {
284      0x80 => 0x20AC,
285      0x81 => 0xFFFD,
286      0x82 => 0x201A,
287      0x83 => 0x0192,
288      0x84 => 0x201E,
289      0x85 => 0x2026,
290      0x86 => 0x2020,
291      0x87 => 0x2021,
292      0x88 => 0x02C6,
293      0x89 => 0x2030,
294      0x8A => 0x0160,
295      0x8B => 0x2039,
296      0x8C => 0x0152,
297      0x8D => 0xFFFD,
298      0x8E => 0x017D,
299      0x8F => 0xFFFD,
300      0x90 => 0xFFFD,
301      0x91 => 0x2018,
302      0x92 => 0x2019,
303      0x93 => 0x201C,
304      0x94 => 0x201D,
305      0x95 => 0x2022,
306      0x96 => 0x2013,
307      0x97 => 0x2014,
308      0x98 => 0x02DC,
309      0x99 => 0x2122,
310      0x9A => 0x0161,
311      0x9B => 0x203A,
312      0x9C => 0x0153,
313      0x9D => 0xFFFD,
314      0x9E => 0x017E,
315      0x9F => 0x0178,
316    }; # $c1_entity_char
317    
318  my $special_category = {  my $special_category = {
319    address => 1, area => 1, base => 1, basefont => 1, bgsound => 1,    address => 1, area => 1, base => 1, basefont => 1, bgsound => 1,
# Line 314  sub parse_string ($$$;$) { Line 349  sub parse_string ($$$;$) {
349    my $column = 0;    my $column = 0;
350    $self->{set_next_input_character} = sub {    $self->{set_next_input_character} = sub {
351      my $self = shift;      my $self = shift;
352    
353        pop @{$self->{prev_input_character}};
354        unshift @{$self->{prev_input_character}}, $self->{next_input_character};
355    
356      $self->{next_input_character} = -1 and return if $i >= length $$s;      $self->{next_input_character} = -1 and return if $i >= length $$s;
357      $self->{next_input_character} = ord substr $$s, $i++, 1;      $self->{next_input_character} = ord substr $$s, $i++, 1;
358      $column++;      $column++;
359            
360      if ($self->{next_input_character} == 0x000D) { # CR      if ($self->{next_input_character} == 0x000A) { # LF
361          $line++;
362          $column = 0;
363        } elsif ($self->{next_input_character} == 0x000D) { # CR
364        if ($i >= length $$s) {        if ($i >= length $$s) {
365          #          #
366        } else {        } else {
# Line 331  sub parse_string ($$$;$) { Line 373  sub parse_string ($$$;$) {
373        }        }
374        $self->{next_input_character} = 0x000A; # LF # MUST        $self->{next_input_character} = 0x000A; # LF # MUST
375        $line++;        $line++;
376        $column = -1;        $column = 0;
377      } elsif ($self->{next_input_character} > 0x10FFFF) {      } elsif ($self->{next_input_character} > 0x10FFFF) {
378        $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST        $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST
379      } elsif ($self->{next_input_character} == 0x0000) { # NULL      } elsif ($self->{next_input_character} == 0x0000) { # NULL
380          !!!parse-error (type => 'NULL');
381        $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST        $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST
382      }      }
383    };    };
384      $self->{prev_input_character} = [-1, -1, -1];
385      $self->{next_input_character} = -1;
386    
387    my $onerror = $_[2] || sub {    my $onerror = $_[2] || sub {
388      my (%opt) = @_;      my (%opt) = @_;
# Line 422  sub _get_next_token ($) { Line 467  sub _get_next_token ($) {
467          } else {          } else {
468            #            #
469          }          }
470          } elsif ($self->{next_input_character} == 0x002D) { # -
471            if ($self->{content_model_flag} eq 'RCDATA' or
472                $self->{content_model_flag} eq 'CDATA') {
473              unless ($self->{escape}) {
474                if ($self->{prev_input_character}->[0] == 0x002D and # -
475                    $self->{prev_input_character}->[1] == 0x0021 and # !
476                    $self->{prev_input_character}->[2] == 0x003C) { # <
477                  $self->{escape} = 1;
478                }
479              }
480            }
481            
482            #
483        } elsif ($self->{next_input_character} == 0x003C) { # <        } elsif ($self->{next_input_character} == 0x003C) { # <
484          if ($self->{content_model_flag} ne 'PLAINTEXT') {          if ($self->{content_model_flag} eq 'PCDATA' or
485                (($self->{content_model_flag} eq 'CDATA' or
486                  $self->{content_model_flag} eq 'RCDATA') and
487                 not $self->{escape})) {
488            $self->{state} = 'tag open';            $self->{state} = 'tag open';
489            !!!next-input-character;            !!!next-input-character;
490            redo A;            redo A;
491          } else {          } else {
492            #            #
493          }          }
494          } elsif ($self->{next_input_character} == 0x003E) { # >
495            if ($self->{escape} and
496                ($self->{content_model_flag} eq 'RCDATA' or
497                 $self->{content_model_flag} eq 'CDATA')) {
498              if ($self->{prev_input_character}->[0] == 0x002D and # -
499                  $self->{prev_input_character}->[1] == 0x002D) { # -
500                delete $self->{escape};
501              }
502            }
503            
504            #
505        } elsif ($self->{next_input_character} == -1) {        } elsif ($self->{next_input_character} == -1) {
506          !!!emit ({type => 'end-of-file'});          !!!emit ({type => 'end-of-file'});
507          last A; ## TODO: ok?          last A; ## TODO: ok?
# Line 1311  sub _get_next_token ($) { Line 1383  sub _get_next_token ($) {
1383          redo A;          redo A;
1384        } elsif (0x0061 <= $self->{next_input_character} and        } elsif (0x0061 <= $self->{next_input_character} and
1385                 $self->{next_input_character} <= 0x007A) { # a..z                 $self->{next_input_character} <= 0x007A) { # a..z
1386    ## ISSUE: "Set the token's name name to the" in the spec
1387          $self->{current_token} = {type => 'DOCTYPE',          $self->{current_token} = {type => 'DOCTYPE',
1388                            name => chr ($self->{next_input_character} - 0x0020),                            name => chr ($self->{next_input_character} - 0x0020),
1389                            error => 1};                            error => 1};
# Line 1337  sub _get_next_token ($) { Line 1410  sub _get_next_token ($) {
1410          $self->{current_token} = {type => 'DOCTYPE',          $self->{current_token} = {type => 'DOCTYPE',
1411                            name => chr ($self->{next_input_character}),                            name => chr ($self->{next_input_character}),
1412                            error => 1};                            error => 1};
1413    ## ISSUE: "Set the token's name name to the" in the spec
1414          $self->{state} = 'DOCTYPE name';          $self->{state} = 'DOCTYPE name';
1415          !!!next-input-character;          !!!next-input-character;
1416          redo A;          redo A;
# Line 1454  sub _tokenize_attempt_to_consume_an_enti Line 1528  sub _tokenize_attempt_to_consume_an_enti
1528        
1529    if ($self->{next_input_character} == 0x0023) { # #    if ($self->{next_input_character} == 0x0023) { # #
1530      !!!next-input-character;      !!!next-input-character;
     my $num;  
1531      if ($self->{next_input_character} == 0x0078 or # x      if ($self->{next_input_character} == 0x0078 or # x
1532          $self->{next_input_character} == 0x0058) { # X          $self->{next_input_character} == 0x0058) { # X
1533          my $num;
1534        X: {        X: {
1535          my $x_char = $self->{next_input_character};          my $x_char = $self->{next_input_character};
1536          !!!next-input-character;          !!!next-input-character;
# Line 1492  sub _tokenize_attempt_to_consume_an_enti Line 1566  sub _tokenize_attempt_to_consume_an_enti
1566          }          }
1567    
1568          ## TODO: check the definition for |a valid Unicode character|.          ## TODO: check the definition for |a valid Unicode character|.
1569            ## <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2006-December/thread.html#8189>
1570          if ($num > 1114111 or $num == 0) {          if ($num > 1114111 or $num == 0) {
1571            $num = 0xFFFD; # REPLACEMENT CHARACTER            $num = 0xFFFD; # REPLACEMENT CHARACTER
1572            ## ISSUE: Why this is not an error?            ## ISSUE: Why this is not an error?
1573            } elsif (0x80 <= $num and $num <= 0x9F) {
1574              !!!parse-error (type => sprintf 'c1 entity:U+%04X', $num);
1575              $num = $c1_entity_char->{$num};
1576          }          }
1577    
1578          return {type => 'character', data => chr $num};          return {type => 'character', data => chr $num};
# Line 1522  sub _tokenize_attempt_to_consume_an_enti Line 1600  sub _tokenize_attempt_to_consume_an_enti
1600        if ($code > 1114111 or $code == 0) {        if ($code > 1114111 or $code == 0) {
1601          $code = 0xFFFD; # REPLACEMENT CHARACTER          $code = 0xFFFD; # REPLACEMENT CHARACTER
1602          ## ISSUE: Why this is not an error?          ## ISSUE: Why this is not an error?
1603          } elsif (0x80 <= $code and $code <= 0x9F) {
1604            !!!parse-error (type => sprintf 'c1 entity:U+%04X', $code);
1605            $code = $c1_entity_char->{$code};
1606        }        }
1607                
1608        return {type => 'character', data => chr $code};        return {type => 'character', data => chr $code};
# Line 1870  sub _tree_construction_main ($) { Line 1951  sub _tree_construction_main ($) {
1951    }; # $clear_up_to_marker    }; # $clear_up_to_marker
1952    
1953    my $style_start_tag = sub {    my $style_start_tag = sub {
1954      my $style_el; !!!create-element ($style_el, 'style');      my $style_el; !!!create-element ($style_el, 'style', $token->{attributes});
1955      ## $self->{insertion_mode} eq 'in head' and ... (always true)      ## $self->{insertion_mode} eq 'in head' and ... (always true)
1956      (($self->{insertion_mode} eq 'in head' and defined $self->{head_element})      (($self->{insertion_mode} eq 'in head' and defined $self->{head_element})
1957       ? $self->{head_element} : $self->{open_elements}->[-1]->[0])       ? $self->{head_element} : $self->{open_elements}->[-1]->[0])
1958        ->append_child ($style_el);        ->append_child ($style_el);
1959      $self->{content_model_flag} = 'CDATA';      $self->{content_model_flag} = 'CDATA';
1960        delete $self->{escape}; # MUST
1961                                
1962      my $text = '';      my $text = '';
1963      !!!next-token;      !!!next-token;
# Line 1904  sub _tree_construction_main ($) { Line 1986  sub _tree_construction_main ($) {
1986      ## TODO: mark as "parser-inserted"      ## TODO: mark as "parser-inserted"
1987    
1988      $self->{content_model_flag} = 'CDATA';      $self->{content_model_flag} = 'CDATA';
1989        delete $self->{escape}; # MUST
1990            
1991      my $text = '';      my $text = '';
1992      !!!next-token;      !!!next-token;
# Line 1975  sub _tree_construction_main ($) { Line 2058  sub _tree_construction_main ($) {
2058              $formatting_element_i_in_open = $_;              $formatting_element_i_in_open = $_;
2059              last INSCOPE;              last INSCOPE;
2060            } else { # in open elements but not in scope            } else { # in open elements but not in scope
2061              !!!parse-error;              !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});
2062              ## Ignore the token              ## Ignore the token
2063              !!!next-token;              !!!next-token;
2064              return;              return;
# Line 1988  sub _tree_construction_main ($) { Line 2071  sub _tree_construction_main ($) {
2071          }          }
2072        } # INSCOPE        } # INSCOPE
2073        unless (defined $formatting_element_i_in_open) {        unless (defined $formatting_element_i_in_open) {
2074          !!!parse-error;          !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});
2075          pop @$active_formatting_elements; # $formatting_element          pop @$active_formatting_elements; # $formatting_element
2076          !!!next-token; ## TODO: ok?          !!!next-token; ## TODO: ok?
2077          return;          return;
2078        }        }
2079        if (not $self->{open_elements}->[-1]->[0] eq $formatting_element->[0]) {        if (not $self->{open_elements}->[-1]->[0] eq $formatting_element->[0]) {
2080          !!!parse-error;          !!!parse-error (type => 'not closed:'.$self->{open_elements}->[-1]->[1]);
2081        }        }
2082                
2083        ## Step 2        ## Step 2
# Line 2193  sub _tree_construction_main ($) { Line 2276  sub _tree_construction_main ($) {
2276          (defined $self->{head_element} ? $self->{head_element} : $self->{open_elements}->[-1]->[0])          (defined $self->{head_element} ? $self->{head_element} : $self->{open_elements}->[-1]->[0])
2277            ->append_child ($title_el);            ->append_child ($title_el);
2278          $self->{content_model_flag} = 'RCDATA';          $self->{content_model_flag} = 'RCDATA';
2279            delete $self->{escape}; # MUST
2280                    
2281          my $text = '';          my $text = '';
2282          !!!next-token;          !!!next-token;
# Line 2270  sub _tree_construction_main ($) { Line 2354  sub _tree_construction_main ($) {
2354          if (defined $self->{form_element}) {          if (defined $self->{form_element}) {
2355            !!!parse-error (type => 'in form:form');            !!!parse-error (type => 'in form:form');
2356            ## Ignore the token            ## Ignore the token
2357              !!!next-token;
2358              return;
2359          } else {          } else {
2360            ## has a p element in scope            ## has a p element in scope
2361            INSCOPE: for (reverse @{$self->{open_elements}}) {            INSCOPE: for (reverse @{$self->{open_elements}}) {
# Line 2311  sub _tree_construction_main ($) { Line 2397  sub _tree_construction_main ($) {
2397          LI: {          LI: {
2398            ## Step 2            ## Step 2
2399            if ($node->[1] eq 'li') {            if ($node->[1] eq 'li') {
2400                if ($i != -1) {
2401                  !!!parse-error (type => 'end tag missing:'.
2402                                  $self->{open_elements}->[-1]->[1]);
2403                  ## TODO: test
2404                }
2405              splice @{$self->{open_elements}}, $i;              splice @{$self->{open_elements}}, $i;
2406              last LI;              last LI;
2407            }            }
# Line 2354  sub _tree_construction_main ($) { Line 2445  sub _tree_construction_main ($) {
2445          LI: {          LI: {
2446            ## Step 2            ## Step 2
2447            if ($node->[1] eq 'dt' or $node->[1] eq 'dd') {            if ($node->[1] eq 'dt' or $node->[1] eq 'dd') {
2448                if ($i != -1) {
2449                  !!!parse-error (type => 'end tag missing:'.
2450                                  $self->{open_elements}->[-1]->[1]);
2451                  ## TODO: test
2452                }
2453              splice @{$self->{open_elements}}, $i;              splice @{$self->{open_elements}}, $i;
2454              last LI;              last LI;
2455            }            }
# Line 2527  sub _tree_construction_main ($) { Line 2623  sub _tree_construction_main ($) {
2623          !!!insert-element-t ($token->{tag_name}, $token->{attributes});          !!!insert-element-t ($token->{tag_name}, $token->{attributes});
2624                    
2625          $self->{content_model_flag} = 'CDATA';          $self->{content_model_flag} = 'CDATA';
2626            delete $self->{escape}; # MUST
2627                    
2628          !!!next-token;          !!!next-token;
2629          return;          return;
# Line 2628  sub _tree_construction_main ($) { Line 2725  sub _tree_construction_main ($) {
2725          }          }
2726        } elsif ({        } elsif ({
2727                  textarea => 1,                  textarea => 1,
2728                    iframe => 1,
2729                  noembed => 1,                  noembed => 1,
2730                  noframes => 1,                  noframes => 1,
2731                  noscript => 0, ## TODO: 1 if scripting is enabled                  noscript => 0, ## TODO: 1 if scripting is enabled
# Line 2642  sub _tree_construction_main ($) { Line 2740  sub _tree_construction_main ($) {
2740          } else {          } else {
2741            $self->{content_model_flag} = 'CDATA';            $self->{content_model_flag} = 'CDATA';
2742          }          }
2743            delete $self->{escape}; # MUST
2744                    
2745          $insert->($el);          $insert->($el);
2746                    
2747          my $text = '';          my $text = '';
2748          !!!next-token;          if ($token->{tag_name} eq 'textarea') {
2749              !!!next-token;
2750              if ($token->{type} eq 'character') {
2751                $token->{data} =~ s/^\x0A//;
2752                unless (length $token->{data}) {
2753                  !!!next-token;
2754                }
2755              }
2756            } else {
2757              !!!next-token;
2758            }
2759          while ($token->{type} eq 'character') {          while ($token->{type} eq 'character') {
2760            $text .= $token->{data};            $text .= $token->{data};
2761            !!!next-token;            !!!next-token;
# Line 2662  sub _tree_construction_main ($) { Line 2771  sub _tree_construction_main ($) {
2771            ## Ignore the token            ## Ignore the token
2772          } else {          } else {
2773            if ($token->{tag_name} eq 'textarea') {            if ($token->{tag_name} eq 'textarea') {
             !!!parse-error (type => 'in CDATA:#'.$token->{type});  
           } else {  
2774              !!!parse-error (type => 'in RCDATA:#'.$token->{type});              !!!parse-error (type => 'in RCDATA:#'.$token->{type});
2775              } else {
2776                !!!parse-error (type => 'in CDATA:#'.$token->{type});
2777            }            }
2778            ## ISSUE: And ignore?            ## ISSUE: And ignore?
2779          }          }
# Line 2733  sub _tree_construction_main ($) { Line 2842  sub _tree_construction_main ($) {
2842                  address => 1, blockquote => 1, center => 1, dir => 1,                  address => 1, blockquote => 1, center => 1, dir => 1,
2843                  div => 1, dl => 1, fieldset => 1, listing => 1,                  div => 1, dl => 1, fieldset => 1, listing => 1,
2844                  menu => 1, ol => 1, pre => 1, ul => 1,                  menu => 1, ol => 1, pre => 1, ul => 1,
                 form => 1,  
2845                  p => 1,                  p => 1,
2846                  dd => 1, dt => 1, li => 1,                  dd => 1, dt => 1, li => 1,
2847                  button => 1, marquee => 1, object => 1,                  button => 1, marquee => 1, object => 1,
# Line 2771  sub _tree_construction_main ($) { Line 2879  sub _tree_construction_main ($) {
2879          }          }
2880                    
2881          splice @{$self->{open_elements}}, $i if defined $i;          splice @{$self->{open_elements}}, $i if defined $i;
         undef $self->{form_element} if $token->{tag_name} eq 'form';  
2882          $clear_up_to_marker->()          $clear_up_to_marker->()
2883            if {            if {
2884              button => 1, marquee => 1, object => 1,              button => 1, marquee => 1, object => 1,
2885            }->{$token->{tag_name}};            }->{$token->{tag_name}};
2886          !!!next-token;          !!!next-token;
2887          return;          return;
2888          } elsif ($token->{tag_name} eq 'form') {
2889            ## has an element in scope
2890            INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {
2891              my $node = $self->{open_elements}->[$_];
2892              if ($node->[1] eq $token->{tag_name}) {
2893                ## generate implied end tags
2894                if ({
2895                     dd => 1, dt => 1, li => 1, p => 1,
2896                     td => 1, th => 1, tr => 1,
2897                    }->{$self->{open_elements}->[-1]->[1]}) {
2898                  !!!back-token;
2899                  $token = {type => 'end tag',
2900                            tag_name => $self->{open_elements}->[-1]->[1]}; # MUST
2901                  return;
2902                }
2903                last INSCOPE;
2904              } elsif ({
2905                        table => 1, caption => 1, td => 1, th => 1,
2906                        button => 1, marquee => 1, object => 1, html => 1,
2907                       }->{$node->[1]}) {
2908                last INSCOPE;
2909              }
2910            } # INSCOPE
2911            
2912            if ($self->{open_elements}->[-1]->[1] eq $token->{tag_name}) {
2913              pop @{$self->{open_elements}};
2914            } else {
2915              !!!parse-error (type => 'not closed:'.$self->{open_elements}->[-1]->[1]);
2916            }
2917    
2918            undef $self->{form_element};
2919            !!!next-token;
2920            return;
2921        } elsif ({        } elsif ({
2922                  h1 => 1, h2 => 1, h3 => 1, h4 => 1, h5 => 1, h6 => 1,                  h1 => 1, h2 => 1, h3 => 1, h4 => 1, h5 => 1, h6 => 1,
2923                 }->{$token->{tag_name}}) {                 }->{$token->{tag_name}}) {
# Line 2822  sub _tree_construction_main ($) { Line 2962  sub _tree_construction_main ($) {
2962                  strong => 1, tt => 1, u => 1,                  strong => 1, tt => 1, u => 1,
2963                 }->{$token->{tag_name}}) {                 }->{$token->{tag_name}}) {
2964          $formatting_end_tag->($token->{tag_name});          $formatting_end_tag->($token->{tag_name});
2965    ## TODO: <http://html5.org/tools/web-apps-tracker?from=883&to=884>
2966          return;          return;
2967        } elsif ({        } elsif ({
2968                  caption => 1, col => 1, colgroup => 1, frame => 1,                  caption => 1, col => 1, colgroup => 1, frame => 1,
# Line 2830  sub _tree_construction_main ($) { Line 2971  sub _tree_construction_main ($) {
2971                  thead => 1, tr => 1,                  thead => 1, tr => 1,
2972                  area => 1, basefont => 1, bgsound => 1, br => 1,                  area => 1, basefont => 1, bgsound => 1, br => 1,
2973                  embed => 1, hr => 1, iframe => 1, image => 1,                  embed => 1, hr => 1, iframe => 1, image => 1,
2974                  img => 1, input => 1, isindex=> 1, noembed => 1,                  img => 1, input => 1, isindex => 1, noembed => 1,
2975                  noframes => 1, param => 1, select => 1, spacer => 1,                  noframes => 1, param => 1, select => 1, spacer => 1,
2976                  table => 1, textarea => 1, wbr => 1,                  table => 1, textarea => 1, wbr => 1,
2977                  noscript => 0, ## TODO: if scripting is enabled                  noscript => 0, ## TODO: if scripting is enabled
# Line 3022  sub _tree_construction_main ($) { Line 3163  sub _tree_construction_main ($) {
3163                (defined $self->{head_element} ? $self->{head_element} : $self->{open_elements}->[-1]->[0])                (defined $self->{head_element} ? $self->{head_element} : $self->{open_elements}->[-1]->[0])
3164                  ->append_child ($title_el);                  ->append_child ($title_el);
3165                $self->{content_model_flag} = 'RCDATA';                $self->{content_model_flag} = 'RCDATA';
3166                  delete $self->{escape}; # MUST
3167    
3168                my $text = '';                my $text = '';
3169                !!!next-token;                !!!next-token;
# Line 4807  sub set_inner_html ($$$) { Line 4949  sub set_inner_html ($$$) {
4949        $self->{next_input_character} = -1 and return if $i >= length $$s;        $self->{next_input_character} = -1 and return if $i >= length $$s;
4950        $self->{next_input_character} = ord substr $$s, $i++, 1;        $self->{next_input_character} = ord substr $$s, $i++, 1;
4951        $column++;        $column++;
4952          
4953        if ($self->{next_input_character} == 0x000D) { # CR        if ($self->{next_input_character} == 0x000A) { # LF
4954            $line++;
4955            $column = 0;
4956          } elsif ($self->{next_input_character} == 0x000D) { # CR
4957          if ($i >= length $$s) {          if ($i >= length $$s) {
4958            #            #
4959          } else {          } else {
# Line 4821  sub set_inner_html ($$$) { Line 4966  sub set_inner_html ($$$) {
4966          }          }
4967          $self->{next_input_character} = 0x000A; # LF # MUST          $self->{next_input_character} = 0x000A; # LF # MUST
4968          $line++;          $line++;
4969          $column = -1;          $column = 0;
4970        } elsif ($self->{next_input_character} > 0x10FFFF) {        } elsif ($self->{next_input_character} > 0x10FFFF) {
4971          $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST          $self->{next_input_character} = 0xFFFD; # REPLACEMENT CHARACTER # MUST
4972        } elsif ($self->{next_input_character} == 0x0000) { # NULL        } elsif ($self->{next_input_character} == 0x0000) { # NULL

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.13

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24