/[pub]/test/html-webhacc/WebHACC/Language/DOM.pm
Suika

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10 - (hide annotations) (download)
Thu Dec 11 05:11:11 2008 UTC (17 years, 7 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.9: +2 -1 lines
++ ChangeLog	11 Dec 2008 05:09:03 -0000
	* cc-about.en.html: Added links to Regexp modules.

	* cc-script.js: Adds a class name to |iframe| element used instead
	of XHR such that non-Ajax |iframe| element can be distinguished by
	style sheets.

	* cc-style.css: Displays non-Ajax |iframe| element.

	* error-description-source.en.xml: Added catalog entries for
	regexp graph sections.

	* standards.en.html: s/WDCC/WebHACC/g.  Added a subsection on
	regular expressions.

2008-12-11  Wakaba  <wakaba@suika.fam.cx>

++ html/WebHACC/Language/ChangeLog	11 Dec 2008 05:11:06 -0000
	* Table.pm: Bug fix: Subsections are no longer associated with tabs.

	* RegExpJS.pm: Implemented graphization of regular expressions.

2008-12-11  Wakaba  <wakaba@suika.fam.cx>

++ html/WebHACC/ChangeLog	11 Dec 2008 05:10:00 -0000
	* Output.pm (start_section): Don't output |script| element for tab
	control if not desired.

2008-12-11  Wakaba  <wakaba@suika.fam.cx>

1 wakaba 1.1 package WebHACC::Language::DOM;
2     use strict;
3     require WebHACC::Language::Base;
4     push our @ISA, 'WebHACC::Language::Base';
5    
6     use Scalar::Util qw[refaddr];
7    
8     sub generate_structure_dump_section ($) {
9     my $self = shift;
10    
11     my $out = $self->output;
12    
13 wakaba 1.3 $out->start_section (role => 'tree');
14 wakaba 1.1
15     $out->start_tag ('ol', class => 'xoxo');
16    
17     my @node = ($self->{structure});
18     while (@node) {
19     my $child = shift @node;
20     unless (ref $child) {
21     $out->html ($child);
22     next;
23     }
24    
25     my $node_id = 'node-'.refaddr $child;
26     my $nt = $child->node_type;
27     if ($nt == $child->ELEMENT_NODE) {
28     my $child_nsuri = $child->namespace_uri;
29     $out->start_tag ('li', id => $node_id, class => 'tree-element');
30     $out->start_tag ('code',
31     title => defined $child_nsuri ? $child_nsuri : '');
32     $out->text ($child->tag_name); ## TODO: case
33     $out->end_tag ('code');
34    
35     if ($child->has_attributes) {
36     $out->start_tag ('ul', class => 'attributes');
37     for my $attr (sort {$a->[0] cmp $b->[0]} map { [$_->name, $_->value, $_->namespace_uri, 'node-'.refaddr $_] }
38     @{$child->attributes}) {
39     $out->start_tag ('li', id => $attr->[3], class => 'tree-attribute');
40     $out->start_tag ('code',
41     title => defined $attr->[2] ? $attr->[2] : '');
42     $out->html ($attr->[0]); ## ISSUE: case
43     $out->end_tag ('code');
44     $out->text (' = ');
45     $out->start_tag ('q');
46     $out->text ($attr->[1]); ## TODO: children
47     $out->end_tag ('q');
48     }
49     $out->end_tag ('ul');
50     }
51    
52     if ($child->has_child_nodes) {
53     $out->start_tag ('ol', class => 'children');
54     unshift @node, @{$child->child_nodes}, '</ol></li>';
55     }
56     } elsif ($nt == $child->TEXT_NODE) {
57     $out->start_tag ('li', id => $node_id, class => 'tree-text');
58     $out->start_tag ('q', lang => '');
59     $out->text ($child->data);
60     $out->end_tag ('q');
61     } elsif ($nt == $child->CDATA_SECTION_NODE) {
62     $out->start_tag ('li', id => $node_id, class => 'tree-cdata');
63     $out->start_tag ('code');
64     $out->text ('<![CDATA[');
65     $out->end_tag ('code');
66     $out->start_tag ('q', lang => '');
67     $out->text ($child->data);
68     $out->end_tag ('q');
69     $out->start_tag ('code');
70     $out->text (']]>');
71     $out->end_tag ('code');
72     } elsif ($nt == $child->COMMENT_NODE) {
73     $out->start_tag ('li', id => $node_id, class => 'tree-cdata');
74     $out->start_tag ('code');
75     $out->text ('<!--');
76     $out->end_tag ('code');
77     $out->start_tag ('q', lang => '');
78     $out->text ($child->data);
79     $out->end_tag ('q');
80     $out->start_tag ('code');
81     $out->text ('-->');
82     $out->end_tag ('code');
83     } elsif ($nt == $child->DOCUMENT_NODE) {
84     $out->start_tag ('li', id => $node_id, class => 'tree-document');
85 wakaba 1.6 $out->nl_text ('Document');
86    
87 wakaba 1.1 $out->start_tag ('ul', class => 'attributes');
88 wakaba 1.6
89 wakaba 1.1 my $cp = $child->manakai_charset;
90     if (defined $cp) {
91 wakaba 1.6 $out->start_tag ('li');
92     $out->nl_text ('manakaiCharset');
93     $out->text (' = ');
94     $out->code ($cp);
95 wakaba 1.1 }
96 wakaba 1.6
97     $out->start_tag ('li');
98     $out->nl_text ('inputEncoding');
99     $out->text (' = ');
100 wakaba 1.1 my $ie = $child->input_encoding;
101     if (defined $ie) {
102     $out->code ($ie);
103     if ($child->manakai_has_bom) {
104 wakaba 1.6 $out->nl_text ('... with BOM');
105 wakaba 1.1 }
106     } else {
107     $out->html (qq[(<code>null</code>)]);
108     }
109 wakaba 1.6
110     $out->start_tag ('li');
111     $out->nl_text ('manakaiIsHTML:'.($child->manakai_is_html?1:0));
112    
113     $out->start_tag ('li');
114     $out->nl_text ('manakaiCompatMode:'.$child->manakai_compat_mode);
115    
116 wakaba 1.1 unless ($child->manakai_is_html) {
117 wakaba 1.6 $out->start_tag ('li');
118     $out->nl_text ('xmlVersion');
119     $out->text (' = ');
120 wakaba 1.1 $out->code ($child->xml_version);
121 wakaba 1.6
122     $out->start_tag ('li');
123     $out->nl_text ('xmlEncoding');
124     $out->text (' = ');
125 wakaba 1.1 if (defined $child->xml_encoding) {
126     $out->code ($child->xml_encoding);
127     } else {
128 wakaba 1.6 $out->html ('(<code>null</code>)');
129 wakaba 1.1 }
130 wakaba 1.6
131     $out->start_tag ('li');
132     $out->nl_text ('xmlStandalone');
133     $out->text (' = ');
134     $out->code ($child->xml_standalone ? 'true' : 'false');
135 wakaba 1.1 }
136 wakaba 1.6
137 wakaba 1.1 $out->end_tag ('ul');
138 wakaba 1.6
139 wakaba 1.1 if ($child->has_child_nodes) {
140     $out->start_tag ('ol', class => 'children');
141     unshift @node, @{$child->child_nodes}, '</ol></li>';
142     }
143     } elsif ($nt == $child->DOCUMENT_TYPE_NODE) {
144     $out->start_tag ('li', id => $node_id, class => 'tree-doctype');
145     $out->code ('<!DOCTYPE>');
146     $out->start_tag ('ul', class => 'attributes');
147    
148     $out->start_tag ('li', class => 'tree-doctype-name');
149     $out->text ('Name = ');
150     $out->code ($child->name);
151    
152     $out->start_tag ('li', class => 'tree-doctype-publicid');
153     $out->text ('Public identifier = ');
154     $out->code ($child->public_id);
155    
156     $out->start_tag ('li', class => 'tree-doctype-systemid');
157     $out->text ('System identifier = ');
158     $out->code ($child->system_id);
159    
160     $out->end_tag ('ul');
161     } elsif ($nt == $child->PROCESSING_INSTRUCTION_NODE) {
162     $out->start_tag ('li', id => $node_id, class => 'tree-id');
163     $out->code ('<?');
164     $out->code ($child->target);
165     $out->text (' ');
166     $out->code ($child->data);
167     $out->code ('?>');
168     } else { # error
169     $out->start_tag ('li', id => $node_id, class => 'tree-unknown');
170     $out->text ($child->node_type . ' ' . $child->node_name);
171     }
172     }
173     $out->end_tag ('ol');
174    
175     $out->end_section;
176     } # generate_structure_dump_section
177    
178     sub generate_structure_error_section ($) {
179     my $self = shift;
180    
181     my $out = $self->output;
182 wakaba 1.3 $out->start_section (role => 'structure-errors');
183     $out->start_error_list (role => 'structure-errors');
184 wakaba 1.7 $self->result->layer_applicable ('structure');
185 wakaba 1.1
186     my $input = $self->input;
187     my $result = $self->result;
188    
189     require Whatpm::ContentChecker;
190     my $onerror = sub {
191 wakaba 1.8 $result->add_error (layer => 'structure', @_);
192 wakaba 1.1 };
193    
194     my $onsubdoc = $self->onsubdoc;
195     if ($self->{structure}->node_type == $self->{structure}->ELEMENT_NODE) {
196     $self->{add_info} = Whatpm::ContentChecker->check_element
197     ($self->{structure}, $onerror, $onsubdoc);
198     } else {
199     $self->{add_info} = Whatpm::ContentChecker->check_document
200     ($self->{structure}, $onerror, $onsubdoc);
201     }
202    
203 wakaba 1.3 $out->end_error_list (role => 'structure-errors');
204 wakaba 1.1 $out->end_section;
205 wakaba 1.7
206     $self->result->layer_uncertain ('semantics');
207 wakaba 1.1 } # generate_structure_error_section
208 wakaba 1.3
209     sub generate_additional_sections ($) {
210     my $self = shift;
211     $self->SUPER::generate_additional_sections;
212 wakaba 1.4
213 wakaba