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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Thu Dec 11 03:22:57 2008 UTC (16 years, 6 months ago) by wakaba
Branch: MAIN
++ ChangeLog	11 Dec 2008 03:20:10 -0000
2008-12-11  Wakaba  <wakaba@suika.fam.cx>

	* error-description-source.en.xml: Added descriptions for errors
	from Regexp::Parser and Regexp::Parser::JavaScript modules.

	* cc.cgi: Added support for JavaScript regular expressions.

++ html/WebHACC/Language/ChangeLog	11 Dec 2008 03:18:54 -0000
2008-12-11  Wakaba  <wakaba@suika.fam.cx>

	* RegExpJS.pm: New module.

++ html/WebHACC/ChangeLog	11 Dec 2008 03:22:42 -0000
2008-12-11  Wakaba  <wakaba@suika.fam.cx>

	* Output.pm (generate_input_section): Added support for JavaScript
	regular expressions.

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

	* Result.pm: Added support for |valueref| parameter of an error.
	|pos_end| should point the (intercharacter) position where the
	highlighted substring ends, not the character before the position,
	otherwise empty substring cannot be represented well.

1 wakaba 1.1 package WebHACC::Language::RegExpJS;
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     require Regexp::Parser::JavaScript;
15    
16     $self->result->layer_uncertain ('charset');
17    
18     my $out = $self->output;
19     $out->start_section (role => 'parse-errors');
20     $out->start_error_list (role => 'parse-errors');
21     $self->result->layer_applicable ('syntax');
22    
23     my $input = $self->input;
24     my $result = $self->result;
25    
26     $self->result->layer_uncertain ('encode') unless $input->{is_char_string};
27    
28     require Encode;
29     my $s = $input->{is_char_string} ? $input->{s} : Encode::decode ($input->{charset} || 'utf-8', $input->{s}); ## TODO: charset
30     my $parser = Regexp::Parser::JavaScript->new;
31    
32     $parser->onerror (sub {
33     my %opt = @_;
34    
35     if ($opt{code} == [$parser->RPe_BADESC]->[0]) {
36     $opt{type} =~ s{%s%s}{
37     '%s' . (defined $opt{args}->[1] ? $opt{args}->[1] : '')
38     }e;
39     } elsif ($opt{code} == [$parser->RPe_FRANGE]->[0] or
40     $opt{code} == [$parser->RPe_IRANGE]->[0]) {
41     $opt{text} = $opt{args}->[0] . '-';
42     $opt{text} .= $opt{args}->[1] if defined $opt{args}->[1];
43     } elsif ($opt{code} == [$parser->RPe_BADFLG]->[0]) {
44     ## NOTE: Not used by JavaScript regexp parser in fact.
45     $opt{text} = $opt{args}->[0] . $opt{args}->[1];
46     } else {
47     $opt{text} = $opt{args}->[0];
48     }
49    
50     $result->add_error (%opt, layer => 'syntax');
51     });
52    
53     eval {
54     $parser->parse ($s);
55     };
56    
57     $self->{structure} = $parser;
58    
59     $out->end_error_list (role => 'parse-errors');
60     $out->end_section;
61     } # generate_parse_error_section
62    
63     sub generate_structure_dump_section ($) { }
64    
65     sub generate_structure_error_section ($) { }
66    
67     1;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24