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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (show annotations) (download)
Sat Aug 16 07:42:20 2008 UTC (17 years, 10 months ago) by wakaba
Branch: MAIN
Changes since 1.7: +1 -1 lines
++ ChangeLog	16 Aug 2008 07:38:01 -0000
	* cc-script.js: Support for #index- fragment identifiers.

	* cc-style.css: Prety styling for reformatted sources.
	Support for new version of manifest dump sections.

	* error-description-source.xml: Support for Whatpm::CacheManifest,
	Whatpm::CSS::SelectorsParser, Whatpm::CSS::MediaQueryParser,
	and Whatpm::CSS::Parser errors.  Support for l10n of cache
	manifest dump sections.

2008-08-16  Wakaba  <wakaba@suika.fam.cx>

++ html/WebHACC/Language/ChangeLog	16 Aug 2008 07:42:17 -0000
	* CSS.pm, CacheManifest.pm, HTML.pm, XML.pm: Use ->url attribute to
	obtain the URL of the document.

	* CacheManifest.pm (generate_structure_dump_section): It is
	now i18n'ed.  In addition, since URLs are tend to be long,
	tables for fallback entries are replaced by |dd| entries and
	paragraphs.  "No entry" message is now handled by catalog,
	rather than CSS.

2008-08-16  Wakaba  <wakaba@suika.fam.cx>

++ html/WebHACC/ChangeLog	16 Aug 2008 07:39:54 -0000
	* Input.pm (Subdocument new): Invoke superclass's new method
	such that |urls| attribute is initialized.

	* Result.pm (add_error): Use ->url attribute to obtain
	the URL of the document.  No longer output |text| argument,
	since all error types except for those used in the WebIDL module
	are now defined in the catalog.

2008-08-16  Wakaba  <wakaba@suika.fam.cx>

1 package WebHACC::Language::CSS;
2 use strict;
3 require WebHACC::Language::Base;
4 push our @ISA, 'WebHACC::Language::Base';
5
6 sub new ($) {
7 my $self = bless {}, shift;
8 return $self;
9 } # new
10
11 sub generate_syntax_error_section ($) {
12 my $self = shift;
13
14 my $out = $self->output;
15
16 $self->result->layer_uncertain ('charset');
17
18 $out->start_section (role => 'parse-errors');
19 $out->start_error_list (role => 'parse-errors');
20 $self->result->layer_applicable ('syntax');
21
22 my $input = $self->input;
23 my $result = $self->result;
24
25 my $p = $self->get_css_parser ();
26 $p->init;
27 $p->{onerror} = sub {
28 my (%opt) = @_;
29 if (not defined $opt{value} and defined $opt{token}) {
30 $opt{value} = Whatpm::CSS::Tokenizer->serialize_token ($opt{token});
31 }
32 $result->add_error (%opt, layer => 'syntax');
33 };
34 $p->{href} = $input->url;
35 $p->{base_uri} = $input->{base_uri};
36
37 # if ($parse_mode eq 'q') {
38 # $p->{unitless_px} = 1;
39 # $p->{hashless_color} = 1;
40 # }
41
42 ## TODO: Make $input->{s} a ref.
43
44 my $s = \$input->{s};
45 my $charset;
46 unless ($input->{is_char_string}) {
47 $self->result->layer_uncertain ('encode');
48 require Encode;
49 if (defined $input->{charset}) {## TODO: IANA->Perl
50 $charset = $input->{charset};
51 $s = \(Encode::decode ($input->{charset}, $$s));
52 } else {
53 ## TODO: charset detection
54 $s = \(Encode::decode ($charset = 'utf-8', $$s));
55 }
56 }
57
58 $self->{structure} = $p->parse_char_string ($$s);
59 $self->{structure}->manakai_input_encoding ($charset) if defined $charset;
60
61 $out->end_error_list (role => 'parse-errors');
62 $out->end_section;
63 } # generate_syntax_error_section
64
65 sub source_charset ($) {
66 return shift->{structure}->manakai_input_encoding;
67 } # source_charset
68
69 sub generate_structure_dump_section ($) {
70 my $self = shift;
71
72 my $out = $self->output;
73
74 $out->start_section (role => 'reformatted');
75
76 $out->start_code_block;
77 $out->text ($self->{structure}->css_text);
78 $out->end_code_block;
79
80 $out->end_section;
81 } # generate_structure_dump_section
82
83 sub generate_structure_error_section ($) {
84 my $self = shift;
85
86 my $out = $self->output;
87
88 $out->start_section (role => 'structure-errors');
89 $out->start_error_list (role => 'structure-errors');
90 $self->result->layer_applicable ('structure');
91
92 $self->result->add_error (level => 'u',
93 layer => 'structure',
94 input => $self->input,
95 type => 'CSSOM validation not supported');
96
97 $out->end_error_list (role => 'structure-errors');
98 $out->end_section;
99 } # generate_structure_error_section
100
101 sub get_css_parser () {
102 our $CSSParser;
103 return $CSSParser if $CSSParser;
104
105 require Whatpm::CSS::Parser;
106 my $p = Whatpm::CSS::Parser->new;
107
108 $p->{prop}->{$_} = 1 for qw/
109 alignment-baseline
110 background background-attachment background-color background-image
111 background-position background-position-x background-position-y
112 background-repeat border border-bottom border-bottom-color
113 border-bottom-style border-bottom-width border-collapse border-color
114 border-left border-left-color
115 border-left-style border-left-width border-right border-right-color
116 border-right-style border-right-width
117 border-spacing -manakai-border-spacing-x -manakai-border-spacing-y
118 border-style border-top border-top-color border-top-style border-top-width
119 border-width bottom
120 caption-side clear clip color content counter-increment counter-reset
121 cursor direction display dominant-baseline empty-cells float font
122 font-family font-size font-size-adjust font-stretch
123 font-style font-variant font-weight height left
124 letter-spacing line-height
125 list-style list-style-image list-style-position list-style-type
126 margin margin-bottom margin-left margin-right margin-top marker-offset
127 marks max-height max-width min-height min-width opacity -moz-opacity
128 orphans outline outline-color outline-style outline-width overflow
129 overflow-x overflow-y
130 padding padding-bottom padding-left padding-right padding-top
131 page page-break-after page-break-before page-break-inside
132 position quotes right size table-layout
133 text-align text-anchor text-decoration text-indent text-transform
134 top unicode-bidi vertical-align visibility white-space width widows
135 word-spacing writing-mode z-index
136 /;
137 $p->{prop_value}->{display}->{$_} = 1 for qw/
138 block clip inline inline-block inline-table list-item none
139 table table-caption table-cell table-column table-column-group
140 table-header-group table-footer-group table-row table-row-group
141 compact marker
142 /;
143 $p->{prop_value}->{position}->{$_} = 1 for qw/
144 absolute fixed relative static
145 /;
146 $p->{prop_value}->{float}->{$_} = 1 for qw/
147 left right none
148 /;
149 $p->{prop_value}->{clear}->{$_} = 1 for qw/
150 left right none both
151 /;
152 $p->{prop_value}->{direction}->{ltr} = 1;
153 $p->{prop_value}->{direction}->{rtl} = 1;
154 $p->{prop_value}->{marks}->{crop} = 1;
155 $p->{prop_value}->{marks}->{cross} = 1;
156 $p->{prop_value}->{'unicode-bidi'}->{$_} = 1 for qw/
157 normal bidi-override embed
158 /;
159 for my $prop_name (qw/overflow overflow-x overflow-y/) {
160 $p->{prop_value}->{$prop_name}->{$_} = 1 for qw/
161 visible hidden scroll auto -webkit-marquee -moz-hidden-unscrollable
162 /;
163 }
164 $p->{prop_value}->{visibility}->{$_} = 1 for qw/
165 visible hidden collapse
166 /;
167 $p->{prop_value}->{'list-style-type'}->{$_} = 1 for qw/
168 disc circle square decimal decimal-leading-zero
169 lower-roman upper-roman lower-greek lower-latin
170 upper-latin armenian georgian lower-alpha upper-alpha none
171 hebrew cjk-ideographic hiragana katakana hiragana-iroha
172 katakana-iroha
173 /;
174 $p->{prop_value}->{'list-style-position'}->{outside} = 1;
175 $p->{prop_value}->{'list-style-position'}->{inside} = 1;
176 $p->{prop_value}->{'page-break-before'}->{$_} = 1 for qw/
177 auto always avoid left right
178 /;
179 $p->{prop_value}->{'page-break-after'}->{$_} = 1 for qw/
180 auto always avoid left right
181 /;
182 $p->{prop_value}->{'page-break-inside'}->{auto} = 1;
183 $p->{prop_value}->{'page-break-inside'}->{avoid} = 1;
184 $p->{prop_value}->{'background-repeat'}->{$_} = 1 for qw/
185 repeat repeat-x repeat-y no-repeat
186 /;
187 $p->{prop_value}->{'background-attachment'}->{scroll} = 1;
188 $p->{prop_value}->{'background-attachment'}->{fixed} = 1;
189 $p->{prop_value}->{'font-size'}->{$_} = 1 for qw/
190 xx-small x-small small medium large x-large xx-large
191 -manakai-xxx-large -webkit-xxx-large
192 larger smaller
193 /;
194 $p->{prop_value}->{'font-style'}->{normal} = 1;
195 $p->{prop_value}->{'font-style'}->{italic} = 1;
196 $p->{prop_value}->{'font-style'}->{oblique} = 1;
197 $p->{prop_value}->{'font-variant'}->{normal} = 1;
198 $p->{prop_value}->{'font-variant'}->{'small-caps'} = 1;
199 $p->{prop_value}->{'font-stretch'}->{$_} = 1 for
200 qw/normal wider narrower ultra-condensed extra-condensed
201 condensed semi-condensed semi-expanded expanded
202 extra-expanded ultra-expanded/;
203 $p->{prop_value}->{'text-align'}->{$_} = 1 for qw/
204 left right center justify begin end
205 /;
206 $p->{prop_value}->{'text-transform'}->{$_} = 1 for qw/
207 capitalize uppercase lowercase none
208 /;
209 $p->{prop_value}->{'white-space'}->{$_} = 1 for qw/
210 normal pre nowrap pre-line pre-wrap -moz-pre-wrap
211 /;
212 $p->{prop_value}->{'writing-mode'}->{$_} = 1 for qw/
213 lr rl tb lr-tb rl-tb tb-rl
214 /;
215 $p->{prop_value}->{'text-anchor'}->{$_} = 1 for qw/
216 start middle end
217 /;
218 $p->{prop_value}->{'dominant-baseline'}->{$_} = 1 for qw/
219 auto use-script no-change reset-size ideographic alphabetic
220 hanging mathematical central middle text-after-edge text-before-edge
221 /;
222 $p->{prop_value}->{'alignment-baseline'}->{$_} = 1 for qw/
223 auto baseline before-edge text-before-edge middle central
224 after-edge text-after-edge ideographic alphabetic hanging
225 mathematical
226 /;
227 $p->{prop_value}->{'text-decoration'}->{$_} = 1 for qw/
228 none blink underline overline line-through
229 /;
230 $p->{prop_value}->{'caption-side'}->{$_} = 1 for qw/
231 top bottom left right
232 /;
233 $p->{prop_value}->{'table-layout'}->{auto} = 1;
234 $p->{prop_value}->{'table-layout'}->{fixed} = 1;
235 $p->{prop_value}->{'border-collapse'}->{collapse} = 1;
236 $p->{prop_value}->{'border-collapse'}->{separate} = 1;
237 $p->{prop_value}->{'empty-cells'}->{show} = 1;
238 $p->{prop_value}->{'empty-cells'}->{hide} = 1;
239 $p->{prop_value}->{cursor}->{$_} = 1 for qw/
240 auto crosshair default pointer move e-resize ne-resize nw-resize n-resize
241 se-resize sw-resize s-resize w-resize text wait help progress
242 /;
243 for my $prop (qw/border-top-style border-left-style
244 border-bottom-style border-right-style outline-style/) {
245 $p->{prop_value}->{$prop}->{$_} = 1 for qw/
246 none hidden dotted dashed solid double groove ridge inset outset
247 /;
248 }
249 for my $prop (qw/color background-color
250 border-bottom-color border-left-color border-right-color
251 border-top-color border-color/) {
252 $p->{prop_value}->{$prop}->{transparent} = 1;
253 $p->{prop_value}->{$prop}->{flavor} = 1;
254 $p->{prop_value}->{$prop}->{'-manakai-default'} = 1;
255 }
256 $p->{prop_value}->{'outline-color'}->{invert} = 1;
257 $p->{prop_value}->{'outline-color'}->{'-manakai-invert-or-currentcolor'} = 1;
258 $p->{pseudo_class}->{$_} = 1 for qw/
259 active checked disabled empty enabled first-child first-of-type
260 focus hover indeterminate last-child last-of-type link only-child
261 only-of-type root target visited
262 lang nth-child nth-last-child nth-of-type nth-last-of-type not
263 -manakai-contains -manakai-current
264 /;
265 $p->{pseudo_element}->{$_} = 1 for qw/
266 after before first-letter first-line
267 /;
268
269 return $CSSParser = $p;
270 } # get_css_parser
271
272 1;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24