1 |
=head1 NAME |
2 |
|
3 |
Whatpm::WebIDL - A WebIDL Parser and Conformance Checker |
4 |
|
5 |
=head1 SYNOPSIS |
6 |
|
7 |
use Whatpm::WebIDL; |
8 |
|
9 |
my $parser = Whatpm::WebIDL::Parser->new; |
10 |
my $onerror = sub { |
11 |
my %arg = @_; |
12 |
warn join "\t", |
13 |
$arg{line}, $arg{column}, $arg{level}, |
14 |
$arg{type}, $arg{text} // '', $arg{value} // ''; |
15 |
}; |
16 |
|
17 |
my $webidl_doc = $parser->parse_char_string ($webidl_string, $onerror); |
18 |
$webidl_doc->check ($onerror); |
19 |
|
20 |
=head1 DESCRIPTION |
21 |
|
22 |
The C<Whatpm::WebIDL> module provides a WebIDL parser, as well as a |
23 |
conformance checker that can be invoked once an IDL fragment has been |
24 |
parsed. |
25 |
|
26 |
This is an implementation of W3C Web IDL specification. |
27 |
|
28 |
=head1 METHODS |
29 |
|
30 |
The C<Whatpm::WebIDL> package itself provides no functionality. It |
31 |
contains various packages including C<Whatpm::WebIDL::Parser>. |
32 |
|
33 |
=head2 C<Whatpm::WebIDL::Parser> |
34 |
|
35 |
The C<Whatpm::WebIDL::Parser> package, which is contained in the |
36 |
C<Whatpm::WebIDL> module, defines a class method and an instance |
37 |
method: |
38 |
|
39 |
=over 4 |
40 |
|
41 |
=item I<$parser> = Whatpm::WebIDL::Parser->new; |
42 |
|
43 |
This class method creates a new instance of the WebIDL parser. |
44 |
|
45 |
=item I<$webidl_doc> = I<$parser>->parse_char_string (I<$webidl_fragment>, [I<$onerror>]); |
46 |
|
47 |
This instance method of the I<$parser> method parses a WebIDL fragment |
48 |
and returns its in-memory representation. |
49 |
|
50 |
The first argument, I<$webidl_fragment>, is the IDL fragment to be |
51 |
parsed. It must be a string of characters (not bytes). |
52 |
|
53 |
As the second argument, I<$onerror>, a C<CODE> reference may be |
54 |
specified. If specified, whenever a parse error is found, or a |
55 |
warning message is raised, the C<CODE> is invoked with arguments |
56 |
describing the error. @@ TODO: ref to degtailed description |
57 |
|
58 |
Note that the W3C WebIDL specification does not define how invalid |
59 |
WebIDL fragments are parsed. This parse implements a foward |
60 |
compatible parsing rule that is similar to the CSS parsing rule; once |
61 |
a parse error is found, everything until the next C<;> character (or |
62 |
the end-of-file, if there is no C<;> character) is ignored, taking |
63 |
pairs of C<{> and C<}> characters into account. If a fragment |
64 |
prematurely ends inside a block, then a C<};> sequence that closes the |
65 |
block is implied. Any error that does not violate the grammer, e.g. |
66 |
any reference to an undefined interface, does not stop the parser; to |
67 |
detect such errors, the C<checker> has to be invoked later. |
68 |
|
69 |
The returned object, C<$webidl_doc>, is an in-memory representation of |
70 |
the prased IDL fragment. It is an instance of the |
71 |
C<Whatpm::WebIDL::Definitions> class. |
72 |
|
73 |
=back |
74 |
|
75 |
=head2 C<Whatpm::WebIDL::Definitions> |
76 |
|
77 |
An object of the C<Whatpm::WebIDL::Definitions> class represents a |
78 |
WebIDL fragment (or C<Definitions> production in the WebIDL |
79 |
specification). |
80 |
|
81 |
=over 4 |
82 |
|
83 |
=item I<$webidl_doc>->check (I<$onerror>, [I<$levels>]); |
84 |
|
85 |
This method checks the conformance of the WebIDL objects, |
86 |
I<$webidl_docs>. |
87 |
|
88 |
@@ TODO: documentation for I<$onerror> and I<$levels>. |
89 |
|
90 |
=back |
91 |
|
92 |
=head1 SEE ALSO |
93 |
|
94 |
WebIDL Editor's Draft |
95 |
<http://dev.w3.org/cvsweb/~checkout~/2006/webapi/WebIDL/Overview.html?content-type=text/html;%20charset=utf-8> |
96 |
|
97 |
C<WebHACC::Language::WebIDL> module, as an example of the usage of |
98 |
this module |
99 |
<http://suika.fam.cx/gate/cvs/webroot/gate/2007/html/WebHACC/Language/WebIDL.pm> |
100 |
|
101 |
=head1 AUTHOR |
102 |
|
103 |
Wakaba <w@suika.fam.cx> |
104 |
|
105 |
=head1 LICENSE |
106 |
|
107 |
Copyright 2008 Wakaba <w@suika.fam.cx> |
108 |
|
109 |
This library is free software; you can redistribute it |
110 |
and/or modify it under the same terms as Perl itself. |
111 |
|
112 |
=cut |
113 |
|
114 |
# $Date:$ |