manakai

Whatpm::WebIDL

A WebIDL Parser and Conformance Checker

SYNOPSIS

  use Whatpm::WebIDL;
  
  my $parser = Whatpm::WebIDL::Parser->new;
  my $onerror = sub {
    my %arg = @_;
    warn join "\t",
        $arg{line}, $arg{column}, $arg{level},
        $arg{type}, $arg{text} // '', $arg{value} // '';
  };
  
  my $webidl_doc = $parser->parse_char_string ($webidl_string, $onerror);
  $webidl_doc->check ($onerror);

DESCRIPTION

The Whatpm::WebIDL module provides a WebIDL parser, as well as a conformance checker that can be invoked once an IDL fragment has been parsed.

This is an implementation of W3C Web IDL specification.

METHODS

The Whatpm::WebIDL package itself provides no functionality. It contains various packages including Whatpm::WebIDL::Parser.

Whatpm::WebIDL::Parser

The Whatpm::WebIDL::Parser package, which is contained in the Whatpm::WebIDL module, defines a class method and an instance method:

$parser = Whatpm::WebIDL::Parser->new;

This class method creates a new instance of the WebIDL parser.

$webidl_doc = $parser->parse_char_string ($webidl_fragment, [$onerror]);

This instance method of the $parser method parses a WebIDL fragment and returns its in-memory representation.

The first argument, $webidl_fragment, is the IDL fragment to be parsed. It must be a string of characters (not bytes).

As the second argument, $onerror, a CODE reference may be specified. If specified, whenever a parse error is found, or a warning message is raised, the CODE is invoked with arguments describing the error. @@ TODO: ref to degtailed description

Note that the W3C WebIDL specification does not define how invalid WebIDL fragments are parsed. This parse implements a foward compatible parsing rule that is similar to the CSS parsing rule; once a parse error is found, everything until the next ; character (or the end-of-file, if there is no ; character) is ignored, taking pairs of { and } characters into account. If a fragment prematurely ends inside a block, then a }; sequence that closes the block is implied. Any error that does not violate the grammer, e.g. any reference to an undefined interface, does not stop the parser; to detect such errors, the checker has to be invoked later.

The returned object, $webidl_doc, is an in-memory representation of the prased IDL fragment. It is an instance of the Whatpm::WebIDL::Definitions class.

Whatpm::WebIDL::Definitions

An object of the Whatpm::WebIDL::Definitions class represents a WebIDL fragment (or Definitions production in the WebIDL specification).

$webidl_doc->check ($onerror, [$levels]);

This method checks the conformance of the WebIDL objects, $webidl_docs.

@@ TODO: documentation for $onerror and $levels.

SEE ALSO

WebIDL Editor's Draft <http://dev.w3.org/cvsweb/~checkout~/2006/webapi/WebIDL/Overview.html?content-type=text/html;%20charset=utf-8>

WebHACC::Language::WebIDL module, as an example of the usage of this module <https://suika.suikawiki.org/gate/cvs/webroot/gate/2007/html/WebHACC/Language/WebIDL.pm>

AUTHOR

Wakaba <wakaba@suikawiki.org>

LICENSE

Copyright 2008 Wakaba <wakaba@suikawiki.org>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.