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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Sun Jul 20 14:58:24 2008 UTC (16 years, 11 months ago) by wakaba
Branch: MAIN
++ ChangeLog	20 Jul 2008 14:58:20 -0000
2008-07-20  Wakaba  <wakaba@suika.fam.cx>

	* cc.cgi: Modularized.

	* WebHACC/: New directory.

1 wakaba 1.1 package WebHACC::Language::HTML;
2     use strict;
3     require WebHACC::Language::DOM;
4     push our @ISA, 'WebHACC::Language::DOM';
5    
6     require Message::DOM::DOMImplementation;
7    
8     sub new ($) {
9     return bless {}, shift;
10     } # new
11    
12     sub generate_syntax_error_section ($) {
13     my $self = shift;
14    
15     require Encode;
16     require Whatpm::HTML;
17    
18     my $out = $self->output;
19     $out->start_section (id => 'parse-errors', title => 'Parse Errors');
20     $out->start_tag (id => 'parse-errors-list');
21    
22     my $input = $self->input;
23     my $result = $self->result;
24    
25     my $onerror = sub {
26     my (%opt) = @_;
27     my ($type, $cls, $msg) = main::get_text ($opt{type}, $opt{level});
28     $out->html (qq[<dt class="$cls">] . $result->get_error_label ($input, \%opt));
29     $type =~ tr/ /-/;
30     $type =~ s/\|/%7C/g;
31     $out->html (qq[<dd class="$cls">] . $result->get_error_level_label (\%opt) , $msg);
32     $out->text (' [');
33     $out->link ('Description',
34     url => '../error-description#' . $type);
35     $out->text (']');
36    
37     main::add_error ('syntax', \%opt => $result);
38     };
39    
40     my $dom = Message::DOM::DOMImplementation->new;
41     my $doc = $dom->create_document;
42     my $el;
43     my $inner_html_element = $input->{inner_html_element};
44     if (defined $inner_html_element and length $inner_html_element) {
45     $input->{charset} ||= 'windows-1252'; ## TODO: for now.
46     my $t = \($input->{s});
47     unless ($input->{is_char_string}) {
48     $t = \(Encode::decode ($input->{charset}, $$t));
49     }
50    
51     $el = $doc->create_element_ns
52     ('http://www.w3.org/1999/xhtml', [undef, $inner_html_element]);
53     Whatpm::HTML->set_inner_html ($el, $$t, $onerror);
54    
55     $self->{structure} = $el;
56     } else {
57     if ($input->{is_char_string}) {
58     Whatpm::HTML->parse_char_string ($input->{s} => $doc, $onerror);
59     } else {
60     Whatpm::HTML->parse_byte_string
61     ($input->{charset}, $input->{s} => $doc, $onerror);
62     }
63    
64     $self->{structure} = $doc;
65     }
66     $doc->manakai_charset ($input->{official_charset})
67     if defined $input->{official_charset};
68    
69     $doc->document_uri ($input->{uri});
70     $doc->manakai_entity_base_uri ($input->{base_uri});
71    
72     $out->end_tag ('dl');
73     $out->end_section;
74     } # generate_syntax_error_section
75    
76     sub source_charset ($) {
77     my $self = shift;
78     return $self->input->{charset} || ($self->{structure}->owner_document || $self->{structure})->input_encoding;
79     ## TODO: Can we always use input_encoding?
80     } # source_charset
81    
82     1;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24