/[suikacvs]/test/html-webhacc/WebHACC/Language/HTML.pm
Suika

Diff of /test/html-webhacc/WebHACC/Language/HTML.pm

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

revision 1.3 by wakaba, Mon Jul 21 08:39:12 2008 UTC revision 1.9 by wakaba, Sat Aug 16 07:42:20 2008 UTC
# Line 3  use strict; Line 3  use strict;
3  require WebHACC::Language::DOM;  require WebHACC::Language::DOM;
4  push our @ISA, 'WebHACC::Language::DOM';  push our @ISA, 'WebHACC::Language::DOM';
5    
 require Message::DOM::DOMImplementation;  
   
6  sub new ($) {  sub new ($) {
7    return bless {}, shift;    return bless {}, shift;
8  } # new  } # new
# Line 12  sub new ($) { Line 10  sub new ($) {
10  sub generate_syntax_error_section ($) {  sub generate_syntax_error_section ($) {
11    my $self = shift;    my $self = shift;
12        
13      require Message::DOM::DOMImplementation;
14    require Encode;    require Encode;
15    require Whatpm::HTML;    require Whatpm::HTML;
16        
17      $self->result->layer_uncertain ('charset');
18    
19    my $out = $self->output;    my $out = $self->output;
20    $out->start_section (role => 'parse-errors');    $out->start_section (role => 'parse-errors');
21    $out->start_error_list (role => 'parse-errors');    $out->start_error_list (role => 'parse-errors');
22      $self->result->layer_applicable ('syntax');
23    
24    my $input = $self->input;    my $input = $self->input;
25    my $result = $self->result;    my $result = $self->result;
26    
27    my $onerror = sub {    my $onerror = sub {
28      $result->add_error (@_, layer => 'syntax');      my %opt = @_;
29        $result->add_error (layer => 'syntax', %opt);
30    
31        if ($opt{type} eq 'chardecode:no error') {
32          $self->result->layer_uncertain ('encode');
33        } elsif ($opt{type} eq 'chardecode:fallback') {
34          $self->result->layer_uncertain ('charset');
35          $self->result->layer_uncertain ('syntax');
36          $self->result->layer_uncertain ('structure');
37          $self->result->layer_uncertain ('semantics');
38        }
39    };    };
40    
41    my $dom = Message::DOM::DOMImplementation->new;    my $dom = Message::DOM::DOMImplementation->new;
# Line 31  sub generate_syntax_error_section ($) { Line 43  sub generate_syntax_error_section ($) {
43    my $el;    my $el;
44    my $inner_html_element = $input->{inner_html_element};    my $inner_html_element = $input->{inner_html_element};
45    if (defined $inner_html_element and length $inner_html_element) {    if (defined $inner_html_element and length $inner_html_element) {
46      $input->{charset} ||= 'windows-1252'; ## TODO: for now.      $input->{charset} ||= 'utf-8';
47      my $t = \($input->{s});      my $t = \($input->{s});
48      unless ($input->{is_char_string}) {      unless ($input->{is_char_string}) {
49        $t = \(Encode::decode ($input->{charset}, $$t));        $t = \(Encode::decode ($input->{charset}, $$t));
50          $self->result->layer_applicable ('encode');
51      }      }
52            
53      $el = $doc->create_element_ns      $el = $doc->create_element_ns
# Line 42  sub generate_syntax_error_section ($) { Line 55  sub generate_syntax_error_section ($) {
55      Whatpm::HTML->set_inner_html ($el, $$t, $onerror);      Whatpm::HTML->set_inner_html ($el, $$t, $onerror);
56    
57      $self->{structure} = $el;      $self->{structure} = $el;
58        $self->{_structure_root} = $doc;
59            ## NOTE: This is necessary, otherwise it would be garbage collected
60            ## before $el is useless, since $el->owner_document is only a weak
61            ## reference.
62    } else {    } else {
63      if ($input->{is_char_string}) {      if ($input->{is_char_string}) {
64        Whatpm::HTML->parse_char_string ($input->{s} => $doc, $onerror);        Whatpm::HTML->parse_char_string ($input->{s} => $doc, $onerror);
65      } else {      } else {
66          $self->result->layer_applicable ('encode');
67        Whatpm::HTML->parse_byte_string        Whatpm::HTML->parse_byte_string
68            ($input->{charset}, $input->{s} => $doc, $onerror);            ($input->{charset}, $input->{s} => $doc, $onerror);
69      }      }
# Line 55  sub generate_syntax_error_section ($) { Line 73  sub generate_syntax_error_section ($) {
73    $doc->manakai_charset ($input->{official_charset})    $doc->manakai_charset ($input->{official_charset})
74        if defined $input->{official_charset};        if defined $input->{official_charset};
75    
76    $doc->document_uri ($input->{uri});    $doc->document_uri ($input->url);
77    $doc->manakai_entity_base_uri ($input->{base_uri});    $doc->manakai_entity_base_uri ($input->{base_uri});
78    
79      $doc->input_encoding (undef) if $input->isa ('WebHACC::Input::Text');
80    
81    $out->end_error_list (role => 'parse-errors');    $out->end_error_list (role => 'parse-errors');
82    $out->end_section;    $out->end_section;
83  } # generate_syntax_error_section  } # generate_syntax_error_section

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24