| 1 |
wakaba |
1.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 <[email protected]> |
| 104 |
|
|
|
| 105 |
|
|
=head1 LICENSE |
| 106 |
|
|
|
| 107 |
|
|
Copyright 2008 Wakaba <[email protected]> |
| 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:$ |