chg: replaced ant with gradle

This commit is contained in:
Tobi Schäfer 2020-03-16 16:53:52 +01:00
parent cee0be52e0
commit 5cbeb9f01d
609 changed files with 87626 additions and 638 deletions

View file

@ -0,0 +1,47 @@
#
# Configuration file for JSDoc
#
# The following hashes are used for supplying user-defined @attribute tags
# that will be parsed. Non-standard attributes (such as @subclass) can be
# added into these hashes, along with a code reference. The return value
# from the code reference will be included in the documentation. All
# non-standard tags that are not in the below hashes will be ignored.
# The code reference will receive a reference to an array of
# values that were supplied with the @... tag
#
# Class attributes
#eval {
# $CLASS_ATTRS_MAP{subclass} =
# # subclass is the name of the @... tag
# sub {
# # Body from which a string is returned
# '<DT><B>Subclasses:</B><DD>-' .
# join('<DD>-',
# map ({"<A HREF=\"$_.html\">$_</A>"}
# map ( { s/\s*(\w+)\s*/$1/; $_} @{@_->[0]})
# )
# ) . '<P>'
# };
#
# $CLASS_ATTRS_MAP{with} =
# sub {
# 'This class has a \'@with\' attribute'
# };
#};
# Method attributes
# eval {
#
# Uncomment this to allow the filename to be displayed for
# each function
#
# $METHOD_ATTRS_MAP{filename} =
# sub {
# '<DT><B>Filename:</B> ' . $_[0] . '<P>'
# };
# $CLASS_ATTRS_MAP{filename} = $METHOD_ATTRS_MAP{filename};
#
# };
#

View file

@ -0,0 +1,605 @@
JSDoc 1.9.9.2
=============
- Fixed disappearing argument list for package-style class constructors
JSDoc 1.9.9.1
=============
- Fixed bug in template dir designation that caused JSDoc to crash if
run from an absolute path
JSDoc 1.9.9
===========
- Added a commandline parameter for supplying a template directory
- Adding sorting of class names on overview-summary-$filename.js
(sf.net bug #1416564)
- Fix for broken anchors from the overview-summary-$filename page to static
methods (SF.net bug #1416543)
JSDoc 1.9.8.1
=============
- Don't touch the file source (src) when processing the file overview data
- Pick up functions as constructors of the @class tag is used
JSDoc 1.9.8
===========
- Allow the @base tag to accept the form: @base ClassName URL (RFE 1114510)
- Be more lenient with @param and @return types (RFE 1104728)
- Corrected CSS error, changed "pts" to "pt"
JSDoc 1.9.7
===========
- Added "--no-lexical-privates" option to ignore locally-defined values
from within constructors
- Fixed linking to static fields/methods
JSDoc 1.9.6.2
=============
- Set correct permissions on files in packaging script
- Fixed compile error on some versions of perl
- Create distinct anchors for static methods and fields in HTML so that
if there is a static and instance method of the same name, the links work
correctly
JSDoc 1.9.6.1
=============
- Updated unit tests for clearing of function contents
- Removed collapsing of string literals; this was originally added for version
1.9.5.1 to avoid segfaults, but the decision has been made that it is up
to the user to use a version of perl that doesn't segfault instead of
trying to work around it in perl code.
- Added (experimental) @exec tag for initialization blocks that should be 'run'
JSDoc 1.9.6
===========
- Fix for incorrect return type and parameter types for static method
listing in file overview
- Clear out unused nested functions with the preprocessor to avoid problems
JSDoc 1.9.5.8
=============
- Yet another fix for __defineGetter__ and __defineSetter__
JSDoc 1.9.5.7
=============
- Fixed bug in syntax highlighting for single-line inline comments
- Fixed bug in preprocessing of __defineGetter__ and __defineSetter__
JSDoc 1.9.5.6
=============
- Fixed incorrect listing of private classes when --private not enabled
JSDoc 1.9.5.4
=============
- Corrected bug with function assignment inside constructor
JSDoc 1.9.5.3
=============
- Added ability to specify different file extensions on commandline
JSDoc 1.9.5.2
=============
- Fixed formatted text munging for @class description
- Added support for @package tag to be used with XMI export
JSDoc 1.9.5.1
=============
- Added collapsing of string literals during preprocessing
JSDoc 1.9.5
===========
- Added listing of global (static) methods to file overview summary, code
submitted by Jeremy Gillick
- Allow a global variable to be defined as a class from an anonymous
function declaration
JSDoc 1.9.4.2.1
===============
- Further fix for typed parameter names starting with a dollar sign
JSDoc 1.9.4.2
=============
- Added ability to handle parameter names starting with a dollar sign
JSDoc 1.9.4.1
=============
- Only use the first sentence for file and class summary on the
overview pages
- Add a non-breaking space in the overview summary tables when there is no
appropriate value to display
JSDoc 1.9.4
===========
- If there are multiple source files documented, the index page defaults
to the overview summary for the main frame
- Made JSDoc site link open in parent frame
- Added overview and file summary tables (similar to package overview table
in JavaDoc)
JSDoc 1.9.3.1
=============
- Fixed duplicate class-tree output
JSDoc 1.9.3
===========
- Added alpha release of XML and XMI output formats
- Upgrade a function to a class if the @base tag is used
- Fixed issue with sub-package nested classes requiring the @addon tag
- Added the implicit "Object" class to the inheritance tree, as well as
other classes that are referenced but not defined
JSDoc 1.9.2.1
=============
- Added @addon tag, which is used when adding static methods to core classes
or classes not defined within the files being documented
- Fix for the base class of nested classes not being properly set
- Fix for infinite recursion when all classes are private
JSDoc 1.9.2
===========
- Removed unecessary table from overview-summary.tmpl
- Added the @ignore tag to allow total hiding of functions
- Fix for incorrect marking of methods as void when the return value is
enclosed in parentheses
- Fix so that methods with a @return tag but without a return statement
are not marked as void
- Fixed issue with not all files being listed in the file listing
JSDoc 1.9.1.3
=============
- Fixed issue with backslashes in path
- Fixed issue with <pre> tags and JavaScript code within fileoverview sections
- Made documented versions of a method take precedence over a
non-documented version
- Added support for prototype assignment without parentheses
- Added new @return label {type typeLink} Description... syntax
JSDoc 1.9.1.2
=============
- Further improvements to mark_void_method
- Improved handling of dynamically-bound methods within functions
- Improved handling of erroneous documenting of 'this'
- Fixed quoting on error message
- Added a few new unit tests for testing general behaviour
JSDoc 1.9.1.1
=============
- Fix for embarrassing bug in mark_void_method
JSDoc 1.9.1
===========
- Fix for the incorrect void marking of methods that return a string literal
- Fix to stop dynamic prototyping from adding non-dynamic classes
- Added ability to add a link to parameter-type data, as follows:
@param {TypeName http://my.link.com/} myParam Description of parameter
JSDoc 1.9
=========
- Added support for a Constant Values page like in Javadoc
- Added support for private classes (by marking the constructor with
the @private attribute)
- Added a "File" page with links to it in the navbar. The "File" page includes
the file overview if one has been supplied, as well as the source view
(unless jsdoc has been invoked with the --no-sources flag)
- Added a --no-sources commandline option to not show the sourcecode for
the JavaScript files
- Added --package-naming commandline option, which specifies that the path
leading to each source file will be preserved. This allows for the same
filename to be used in different directories. Using the same class name
in different packages is _not_ supported (yet)
- Added JSDoc link and creation time in the footer of each page
- Added support for @member tag to explicitly mark a method as a member of
a class
JSDoc 1.8.4
===========
- Added step in prepocessing to attempt to add missing @constructor tags where
the 'new' operator is used in combination with a function name elsewhere
in the source.
- Only the first @extends marking (or assignment of an instance to a sub-
class's prototype) will be used in determining the base class of a class.
- Updated test.js to show off more features of JSDoc, as well as a general
clean-up.
- Changed the parser to consider a method to be a class declaration if its
documentation contains a @class tag (in addition to the @constructor tag)
JSDoc 1.8.3.1
=============
- Some general code cleanup and refactoring.
- Properly fixed marking of void/non-void methods, and at the same time
re-introduced recursive regexes (this time non-dynamic, as dynamic seem
to be much too unstable)
JSDoc 1.8.3
===========
- Changed the handling for __defineGetter__ and __defineSetter__
to define a property instead of a method in the documentation
- Fixed bug in parse_jsdoc_comment that didn't allow for email addresses
to be entered verbatim (instead, the domain of the address was parsed
as a tag)
- Re-did the @fileoverview parsing, now other tags and inner {@link...}
tags are included. Additionally, if only one file is processed and there
is no project overview file included, the file's overview (if it exists)
is used as the project overview. Thanks to Robert Flaherty for input
and bug reports on this issue.
JSDoc 1.8.2.1
=============
- Got rid of extra '*' with @fileoverview
JSDoc 1.8.2
=============
- Fixed bug where other @tags were included as part of the @fileoverview
- Added support for @version in method documentation
- Partial fix for incorrect marking of void methods
- Made field and return @type handling more robust and flexible
JSDoc 1.8.1
===========
- Added @extends as a synonym for @base
- Fixed doubled-up <UL> tags in hierarchy tree code (thanks to Robert Flaherty)
- Fixed bug where a class's base class would not get recorded if
there was a forward assignment of a static value to the class
(thanks to Robert Flaherty)
JSDoc 1.8
=========
- Remove the GLOBALS class if it is empty
- Fixed case-sensitive sort in index
- Added support for comments with long blocks of '*'s in the opening and
closing of the doc string
- Added sourcecode view
- Fixed bug where named anonymous functions were not recognized as methods
when assigned to prototypes
- Allow for singletons to be declared with var
- Allow for binding static properties to classes before they are defined
- Added @overviewfile attribute for class documentation, inlines html or
textfiles into the documentation
- Added beginnings of unit testing
- Don't add 'constructor' as an instance or class property
- Added an @overviewfile tag which can be put in an independent
jsdoc-comment block at the top of each file. This results in a project
overview page for each file with an overview, similar to JavaDoc's
package pages.
- Added support for Mozilla's __defineGetter__ and __defineSetter__
- Return type for methods is now Object, and is displayed instead of the
'function' declaration. The 'void' type is shown if no return can be
found in the function and no other type is defined. The defaulting to
Object also goes for fields, and is shown instead of the 'var' declaration
- Allow usage of the {@link url label} construct for the @type tag
JSDoc 1.7.2.1
=============
- Fixed segfault problem in huge constructors with deconstruct_constructor
selection regex
JSDoc 1.7.2
===========
- Added a @class tag to constructors, for providing class-specific information
- Added handling for Singleton classes
- Added handler for @base tag to denote inheritance
JSDoc 1.7.1.4
=============
- Fixed bug introduced by refactoring of &format_link
JSDoc 1.7.1.3
=============
- Added workaround in &format_link for apparent bug in some builds of
perl 5.8.0
- Fixed bug in handling of --recursive (was always recursive)
JSDoc 1.7.1.2
=============
- Fixed problems with new preprocessor when confronted with nested classes
JSDoc 1.7.1.1
=============
- Fixed bug where {@link}s inside of @params weren't processed
JSDoc 1.7.1
===========
- Added --quiet switch and message to signify ending of successful execution
- Fixed problem with perl segfaulting on big class prototype block definitions
- Fixed incorrectly formatted {@link}s nested in other @attributes
- Added preprocessor for handling private methods to replace bulky
and buggy evaluate_constructor method
JSDoc 1.7
=========
- Added usage of strict and warnings in JSDoc.pm
- Added ability to set type information for method parameters
(e.g. /** @param {String} userName The name of the current user */ )
- Added support for class prototype initialization blocks (finally!)
JSDoc 1.6.3.1
=============
- Fixed bug where static fields initialized to 0 are not picked up
JSDoc 1.6.3
===========
- Removed the constraint that a nested class constructor must be marked
with the @constructor attribute
- Allow @constructor attribute to mark nested class constructors which would
otherwise be considered static methods
- Allow newlines as well as semi-colon for line-endings
- Allow a leading '$' for field names
JSDoc 1.6.2.1
=============
- Fixed splicing error for nested classes, thanks again to jdber
JSDoc 1.6.2
===========
- Carry over overridden method description attributes even if there is
no text description to carry over
- Improved HTML in main.tmpl
- Fixed infinite loop and recognition for when static inner class construct is
used (thanks to jdber for the patch)
- Added a Nested Class Summary section to the output documentation to display
inner classes
JSDoc 1.6.1.1
=============
- Fixed bug in carrying over description of overridden methods
JSDoc 1.6.1
===========
- Improved the format_link function in jsdoc.pl so that {@links} will
not be made to non-existent resources, and parentheses are not placed
after a field name (as opposed to a method name)
- Carry over method documentation for overridden methods if no new
documentation has been supplied for the method. This is in following with
javadoc functionality
- Fixed /* functionality(whatever) bug
- Fixed remaining problems with comments inside of parameter lists
JSDoc 1.6
=========
- Big cleanup in jsdoc.pl in terms of writing templates to file
- Fixed bug where multi-line @params don't work
- Added filename-scoped frame, as well as the name of the filename for
each class
- Improved the linking implementation for @link and @see to do a better job
in terms of not building broken links
JSDoc 1.5.2
===========
- Changed the name '[default context]' for non-class functions to be
GLOBALS, also made this name configurable with command-line parameters
- Made jsdoc easily runnable from anywhere on the filesystem, without
requiring installing JSDoc.pm in the @INC
JSDoc 1.5.1
===========
- Added support for @requires in methods
- Generic '@' attributes now work for constructors, such as @see and @throws.
Also added support for @return and @returns for constructors
- Fixed the @link construct to allow custom labels
- Added standard support for @author in methods as well as classes
(Thanks for Rainer Eschen for bringing me to my senses)
- Fixed spacing for @author attributes
JSDoc 1.5
===========
- Fixed bug that would break HTML links within documentation
- Fixed bug in path to logo in IMG tags
- Added support for type information for both methods and fields
- Added suppport for @private in instance fields
- Fixed bug where private methods would show up in the inherited methods list
in subclasses
- Private class methods are now also supported
- Method parameters details are displayed in the same order as the parameter
list for a method
- Moved more info into the 'vars' member of methods, and away from the parser
- Added @final (with synonym @const) for class and instance properties
- Fix in parser where string literals bound to classes in a constructor were
not caught by the parser
JSDoc 1.4
=========
- Added @attributes: @author, @deprecated, @see, @version, @requires, @throws
- Updated pod (removed documentation for non-existant parse_jsdoc_source,
added a small example)
- Added function to reset the parser (reset_parser)
- Fixed bug where the same property could be bound to a class's prototype
more than once
- Fixed bug where embedded // comments would break the parser
- Added ability to set project name, page footer, logo and project summary
(thanks to Jeff Conrad for code and suggestions)
- Added overview summary (thanks to Jeff Conrad for code)
- Split up loading/parsing of sources file to prevent crashes that were caused
by overloading the regex engine
- Added overview-tree (thanks to Jeff Conrad for the code contribution)
- Fixed bug where some assignments of methods to instances in a constructor
would get lost
- Fix in doc-parsing where a line with only a star and a newline would get
passed over
- Added ability to 'hide' methods with @private
JSDoc 1.3
=========
- When a function is marked with @constructor, it will always be dealt
with as a class
- Improved doc regex
- Added recursive directory handling

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,291 @@
package JSDoc::XMI;
use strict;
use warnings;
use HTML::Template;
use Data::Dumper;
=head1 DESCRIPTION
@packages
@classes
$classname
$classid
$classuuid
$classvisibility (public|protected|private)
@specializationids
$specializationid
$generalizationid
@attributes
$attributeid
$attributeuuid
$attributename
$attributevisibility (public|protected|private)
$ownerscope (instance|classifier)
$classid
$typeid
@methods
$methodid
$methoduuid
$methodname
$methodvisibility (public|protected|private)
$ownerscope (instance|classifier)
$returnid
$returnuuid
$returntypeid
@datatypes
$datatypeid
$datatypeuuid
$datatypename
@generalizations
$generalizationid
$generalizationuuid
$generalizationchild
$generalizationparent
=cut
sub new {
my ($package, $location) = @_;
bless {
location => "${location}JSDoc/",
idcounter => 2,
types => {},
classes => {},
generalizations => {}
}, $package;
}
sub output {
my ($self, $classes) = @_;
my $template = HTML::Template->new(
filename => $self->{location} . 'xmi.tmpl',
die_on_bad_params => 1);
my @packages = $self->get_packages($classes);
my @datatypes = $self->get_datatypes;
my @generalizations = $self->get_generalizations;
$template->param(
packages => \@packages,
datatypes => \@datatypes,
generalizations => \@generalizations );
return $template->output;
}
sub get_id {
'xmi.' . shift->{idcounter}++;
}
sub get_uuid {
my @chars = ('A'..'Z', 'a'..'z', 0..9);
my @uuid;
for (1..32){
push @uuid, $chars[rand(@chars)];
}
join("", @uuid);
}
sub get_packages {
my ($self, $classes) = @_;
my %packages;
push(@{$packages{$_->{package}}}, $_)
for $self->get_classes($classes);
map {
name => $_,
classes => $packages{$_},
packageid => $self->get_id,
packageuuid => $self->get_uuid
}, keys %packages;
}
sub get_classes {
my ($self, $classes) = @_;
my @classes;
# Store all the class-ids before we start on anything else
$self->add_class($_) for keys %$classes;
for my $cname (keys %$classes){
my $class = {
classname => $cname,
classid => $self->add_class($cname),
classuuid => $self->get_uuid,
classvisibility =>
defined($classes->{$cname}->{constructor_vars}->{private})
? 'private' : 'public'
};
$class->{attributes} = $self->get_attributes(
$class->{classid},
$classes->{$cname});
$class->{methods} = $self->get_methods(
$class->{classid},
$classes->{$cname});
$class->{generalizationid} =
$self->get_generalizationid($classes->{$cname});
$class->{package} =
defined($classes->{$cname}->{constructor_vars}->{package})
? $classes->{$cname}->{constructor_vars}->{package}->[0] : '';
push @classes, $class;
}
for my $class (@classes){
$class->{specializationids} = $self->get_specializationids($class);
}
@classes;
}
sub get_methods {
my ($self, $classid, $class) = @_;
my @methods;
for my $k (qw(instance class)){
for my $method (@{$class->{"${k}_methods"}}){
my $type = defined($method->{vars}->{type})
? $method->{vars}->{type}->[0] : 'Object';
my $meth = {
methodid => $self->get_id,
methoduuid => $self->get_uuid,
methodname => $method->{mapped_name},
methodvisibility =>
defined($method->{vars}->{private})
? 'private' : 'public',
ownerscope =>
$k eq 'class' ? 'classifier' : 'instance',
returnid => $self->get_id,
returnuuid => $self->get_uuid,
returntypeid => $self->add_type($type)
};
push @methods, $meth;
}
}
return \@methods;
}
sub get_attributes {
my ($self, $classid, $class) = @_;
my @attributes;
for my $k (qw(instance class)){
for my $field (@{$class->{"${k}_fields"}}){
my $type = defined($field->{field_vars}->{type})
? $field->{field_vars}->{type}->[0] : 'Object';
my $attr = {
attributeid => $self->get_id,
attributeuuid => $self->get_uuid,
attributename => $field->{field_name},
attributevisibility =>
defined($field->{field_vars}->{private})
? 'private' : 'public',
ownerscope =>
$k eq 'class' ? 'classifier' : 'instance',
classid => $classid,
typeid => $self->add_type($type)
};
push @attributes, $attr;
}
}
\@attributes;
}
sub get_generalizationid {
my ($self, $class) = @_;
if ($class->{extends}){
return $self->add_generalization(
$class->{classname},
$class->{extends});
}
'';
}
sub get_specializationids {
my ($self, $class) = @_;
my $cname = $class->{classname};
my $cid = $self->add_class($cname);
my @specializationids;
for my $id (keys %{$self->{generalizations}}){
my $generalization = $self->{generalizations}->{$id};
if ($generalization->{parent} eq $cid){
push @specializationids, { specializationid => $id };
}
}
\@specializationids;
}
sub get_datatypes {
my ($self) = @_;
my @datatypes;
while (my ($type, $id) = each(%{$self->{types}})){
push @datatypes, {
datatypeid => $id,
datatypeuuid => $self->get_uuid,
datatypename => $type };
}
@datatypes;
}
sub get_generalizations {
my ($self) = @_;
my @generalizations;
while (my ($id, $generalization) = each(%{$self->{generalizations}})){
push @generalizations, {
generalizationid => $id,
generalizationuuid => $self->get_uuid,
generalizationchild => $generalization->{parent},
generalizationparent => $generalization->{child}};
}
@generalizations;
}
sub add_type {
my ($self, $type) = @_;
$type =~ s/^\s*(\S+)\s*$/$1/;
if (defined($self->{classes}->{$type})){
return $self->add_class($type);
} elsif (defined($self->{types}->{$type})){
return $self->{types}->{$type};
}
$self->{types}->{$type} = $self->get_id;
}
sub add_class {
my ($self, $class) = @_;
$class =~ s/^\s*(\S+)\s*$/$1/;
if (defined($self->{classes}->{$class})){
return $self->{classes}->{$class};
}
$self->{classes}->{$class} = $self->get_id;
}
sub add_generalization {
my ($self, $subclassname, $superclassname) = @_;
my $subclassid = $self->add_class($subclassname);
my $superclassid = $self->add_class($superclassname);
my $generalization = {
child => $subclassid,
parent => $superclassid };
my $generalizationid = $self->get_id;
$self->{generalizations}->{$generalizationid} = $generalization;
$generalizationid;
}
1;

View file

@ -0,0 +1,72 @@
package JSDoc::XML;
use strict;
use warnings;
use HTML::Template;
sub new {
my ($package, $location) = @_;
bless { location => "${location}JSDoc/" }, $package;
}
sub output {
my ($self, $classes) = @_;
my @classes = _preprocess(
grep {defined($_->{classname})} values %$classes);
my $template = HTML::Template->new(
filename => $self->{location} . 'xml.tmpl',
die_on_bad_params => 1);
$template->param(classes => \@classes);
return $template->output;
}
sub _preprocess {
my @classes = @_;
for (@classes){
$_->{inherits} = _preprocess_inherits($_->{inherits});
$_->{constructor_vars} = _preprocess_vars($_->{constructor_vars});
for my $method (@{$_->{instance_methods}}, @{$_->{class_methods}}){
$method->{vars} = _preprocess_vars($method->{vars});
}
for my $field (@{$_->{instance_fields}}, @{$_->{class_fields}}){
$field->{field_vars} = _preprocess_vars($field->{field_vars});
}
}
@classes;
}
sub _preprocess_inherits {
my ($inherits) = @_;
my @inherits;
for my $class (keys %$inherits){
my $inherit = {
class => $class,
methods => [map { name => $_ },
@{$inherits->{$class}->{instance_methods}}]};
push @inherits, $inherit;
}
\@inherits;
}
sub _preprocess_vars {
my ($vars) = @_;
return $vars if ref($vars) eq 'ARRAY';
my @vars;
for my $key (keys %$vars){
my $var;
if (ref($vars->{$key}) eq 'ARRAY'){
$var = {
'@name' => $key,
values => [map { val => $_ }, @{$vars->{$key}}] };
} else {
$var = {
'@name' => $key,
values => [ { val => $vars->{$key} } ] };
}
push @vars, $var;
}
\@vars;
}
1;

View file

@ -0,0 +1,250 @@
<?xml version="1.0" encoding="UTF-8"?>
<XMI xmi.version="1.0">
<XMI.header>
<XMI.documentation>
<XMI.exporter>JSDoc XMI Export</XMI.exporter>
<XMI.exporterVersion>0.1</XMI.exporterVersion>
</XMI.documentation>
<XMI.metamodel xmi.name="UML" xmi.version="1.3"/>
</XMI.header>
<XMI.content>
<Model_Management.Model xmi.id="xmi.1" xmi.uuid="10-0-0-5-3605f878:101c2e18bff:-8000">
<Foundation.Core.ModelElement.name>JSDoc</Foundation.Core.ModelElement.name>
<Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
<Foundation.Core.Namespace.ownedElement>
<!-- BEGIN PACKAGES -->
<TMPL_LOOP NAME="packages">
<TMPL_IF NAME="name">
<Model_Management.Package
xmi.id="<TMPL_VAR NAME="packageid">"
xmi.uuid="<TMPL_VAR NAME="packageuuid">">
<Foundation.Core.ModelElement.name><TMPL_VAR NAME="name"></Foundation.Core.ModelElement.name>
<Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
<Foundation.Core.ModelElement.namespace>
<Foundation.Core.Namespace xmi.idref="xmi.1"/>
</Foundation.Core.ModelElement.namespace>
</TMPL_IF>
<!-- BEGIN CLASS DESCRIPTIONS -->
<TMPL_LOOP NAME="classes">
<TMPL_IF NAME="package">
<Foundation.Core.Namespace.ownedElement>
</TMPL_IF>
<!-- BEGIN CLASS -->
<Foundation.Core.Class
xmi.id="<TMPL_VAR NAME=classid>"
xmi.uuid="<TMPL_VAR NAME=classuuid>">
<!-- CLASS NAME -->
<Foundation.Core.ModelElement.name><!-- TMPL_VAR NAME="classname" --></Foundation.Core.ModelElement.name>
<Foundation.Core.ModelElement.visibility
xmi.value="<TMPL_VAR NAME=classvisibility>"/>
<Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
<Foundation.Core.Class.isActive xmi.value="false"/>
<Foundation.Core.ModelElement.namespace>
<Foundation.Core.Namespace xmi.idref="xmi.1"/>
</Foundation.Core.ModelElement.namespace>
<!-- BEGIN REFERENCE TO INHERITANCE -->
<TMPL_IF NAME="generalizationid">
<Foundation.Core.GeneralizableElement.generalization>
<Foundation.Core.Generalization
xmi.idref="<TMPL_VAR NAME=generalizationid >"/>
</Foundation.Core.GeneralizableElement.generalization>
</TMPL_IF>
<TMPL_LOOP NAME="specializationids">
<Foundation.Core.GeneralizableElement.specialization>
<Foundation.Core.Generalization
xmi.idref="<TMPL_VAR NAME=specializationid >"/>
</Foundation.Core.GeneralizableElement.specialization>
</TMPL_LOOP>
<!-- END REFERENCE TO INHERITANCE -->
<Foundation.Core.Classifier.feature>
<!-- BEGIN ATTRIBUTES -->
<TMPL_LOOP NAME="attributes">
<!-- BEGIN ATTRIBUTE -->
<Foundation.Core.Attribute
xmi.id="<TMPL_VAR NAME=attributeid>"
xmi.uuid="<TMPL_VAR NAME=attributeuuid>">
<Foundation.Core.ModelElement.name><!-- TMPL_VAR NAME="attributename" --></Foundation.Core.ModelElement.name>
<Foundation.Core.ModelElement.visibility xmi.value="<TMPL_VAR NAME=attributevisibility>"/>
<Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
<Foundation.Core.Feature.ownerScope
xmi.value="<TMPL_VAR NAME=ownerscope>"/>
<!--Foundation.Core.StructuralFeature.multiplicity>
<Foundation.Data_Types.Multiplicity xmi.id="xmi.5">
<Foundation.Data_Types.Multiplicity.range>
<Foundation.Data_Types.MultiplicityRange xmi.id="xmi.6">
<Foundation.Data_Types.MultiplicityRange.lower>1</Foundation.Data_Types.MultiplicityRange.lower>
<Foundation.Data_Types.MultiplicityRange.upper>1</Foundation.Data_Types.MultiplicityRange.upper>
</Foundation.Data_Types.MultiplicityRange>
</Foundation.Data_Types.Multiplicity.range>
</Foundation.Data_Types.Multiplicity>
</Foundation.Core.StructuralFeature.multiplicity-->
<Foundation.Core.StructuralFeature.changeability xmi.value="changeable"/>
<Foundation.Core.StructuralFeature.targetScope xmi.value="instance"/>
<Foundation.Core.Feature.owner>
<Foundation.Core.Classifier
xmi.idref="<TMPL_VAR NAME=classid>"/>
</Foundation.Core.Feature.owner>
<Foundation.Core.StructuralFeature.type>
<Foundation.Core.Classifier
xmi.idref="<TMPL_VAR NAME=typeid>"/>
</Foundation.Core.StructuralFeature.type>
<!--Foundation.Core.ModelElement.taggedValue>
<Foundation.Extension_Mechanisms.TaggedValue xmi.id="xmi.8">
<Foundation.Extension_Mechanisms.TaggedValue.tag>transient</Foundation.Extension_Mechanisms.TaggedValue.tag>
<Foundation.Extension_Mechanisms.TaggedValue.value>false</Foundation.Extension_Mechanisms.TaggedValue.value>
<Foundation.Extension_Mechanisms.TaggedValue.modelElement>
<Foundation.Core.ModelElement xmi.idref="xmi.4"/>
</Foundation.Extension_Mechanisms.TaggedValue.modelElement>
</Foundation.Extension_Mechanisms.TaggedValue>
<Foundation.Extension_Mechanisms.TaggedValue xmi.id="xmi.9">
<Foundation.Extension_Mechanisms.TaggedValue.tag>volatile</Foundation.Extension_Mechanisms.TaggedValue.tag>
<Foundation.Extension_Mechanisms.TaggedValue.value>false</Foundation.Extension_Mechanisms.TaggedValue.value>
<Foundation.Extension_Mechanisms.TaggedValue.modelElement>
<Foundation.Core.ModelElement xmi.idref="xmi.4"/>
</Foundation.Extension_Mechanisms.TaggedValue.modelElement>
</Foundation.Extension_Mechanisms.TaggedValue>
</Foundation.Core.ModelElement.taggedValue-->
</Foundation.Core.Attribute>
<!-- END ATTRIBUTE -->
</TMPL_LOOP>
<!-- END ATTRIBUTES -->
<!-- BEGIN METHODS -->
<TMPL_LOOP NAME="methods">
<!-- BEGIN METHOD -->
<Foundation.Core.Operation
xmi.id="<TMPL_VAR NAME=methodid>"
xmi.uuid="<TMPL_VAR NAME=methoduuid>">
<Foundation.Core.ModelElement.name><!-- TMPL_VAR NAME="methodname" --></Foundation.Core.ModelElement.name>
<Foundation.Core.ModelElement.visibility
xmi.value="<TMPL_VAR NAME=methodvisibility>"/>
<Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
<Foundation.Core.Feature.ownerScope
xmi.value="<TMPL_VAR NAME=ownerscope>"/>
<Foundation.Core.BehavioralFeature.isQuery xmi.value="false"/>
<Foundation.Core.Operation.concurrency xmi.value="sequential"/>
<Foundation.Core.Operation.isRoot xmi.value="false"/>
<Foundation.Core.Operation.isLeaf xmi.value="false"/>
<Foundation.Core.Operation.isAbstract xmi.value="false"/>
<Foundation.Core.Feature.owner>
<Foundation.Core.Classifier
xmi.idref="<TMPL_VAR NAME=classid>"/>
</Foundation.Core.Feature.owner>
<Foundation.Core.BehavioralFeature.parameter>
<!-- BEGIN RETURN TYPE -->
<Foundation.Core.Parameter
xmi.id="<TMPL_VAR NAME=returnid>"
xmi.uuid="<TMPL_VAR NAME=returnuuid>">
<Foundation.Core.ModelElement.name>return</Foundation.Core.ModelElement.name>
<Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
<Foundation.Core.Parameter.kind xmi.value="return"/>
<!--Foundation.Core.Parameter.behavioralFeature>
<Foundation.Core.BehavioralFeature xmi.idref="xmi.10"/>
</Foundation.Core.Parameter.behavioralFeature-->
<Foundation.Core.Parameter.type>
<Foundation.Core.Classifier
xmi.idref="<TMPL_VAR NAME=returntypeid>"/>
</Foundation.Core.Parameter.type>
</Foundation.Core.Parameter>
<!-- END RETURN TYPE -->
</Foundation.Core.BehavioralFeature.parameter>
</Foundation.Core.Operation>
<!-- END METHOD -->
</TMPL_LOOP>
<!-- END METHODS -->
</Foundation.Core.Classifier.feature>
</Foundation.Core.Class>
<!-- END CLASS -->
<TMPL_IF NAME="package">
</Foundation.Core.Namespace.ownedElement>
</TMPL_IF>
</TMPL_LOOP>
<!-- END CLASS DESCRIPTIONS -->
<TMPL_IF name="name">
</Model_Management.Package>
</TMPL_IF>
</TMPL_LOOP>
<!-- END PACKAGES -->
<!-- BEGIN DATATYPE DESCRIPTIONS -->
<TMPL_LOOP name="datatypes">
<!-- BEGIN DATATYPE -->
<Foundation.Core.DataType
xmi.id="<TMPL_VAR NAME=datatypeid>"
xmi.uuid="<TMPL_VAR NAME=datatypeuuid>">
<Foundation.Core.ModelElement.name><!-- TMPL_VAR NAME="datatypename" --></Foundation.Core.ModelElement.name>
<Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isRoot xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isLeaf xmi.value="false"/>
<Foundation.Core.GeneralizableElement.isAbstract xmi.value="false"/>
<Foundation.Core.ModelElement.namespace>
<Foundation.Core.Namespace xmi.idref="xmi.1"/>
</Foundation.Core.ModelElement.namespace>
</Foundation.Core.DataType>
<!-- END DATATYPE -->
</TMPL_LOOP>
<!-- END DATATYPE DESCRIPTIONS -->
<!-- BEGIN GENERALIZATIONS -->
<TMPL_LOOP NAME="generalizations">
<!-- BEGIN GENERALIZATION -->
<Foundation.Core.Generalization
xmi.id="<TMPL_VAR NAME=generalizationid >"
xmi.uuid="<TMPL_VAR NAME=generalizationuuid >" >
<Foundation.Core.ModelElement.isSpecification xmi.value="false"/>
<Foundation.Core.ModelElement.namespace>
<Foundation.Core.Namespace xmi.idref="xmi.1"/>
</Foundation.Core.ModelElement.namespace>
<Foundation.Core.Generalization.child>
<Foundation.Core.GeneralizableElement
xmi.idref="<TMPL_VAR NAME=generalizationchild >"/>
</Foundation.Core.Generalization.child>
<Foundation.Core.Generalization.parent>
<Foundation.Core.GeneralizableElement
xmi.idref="<TMPL_VAR NAME=generalizationparent >"/>
</Foundation.Core.Generalization.parent>
</Foundation.Core.Generalization>
<!-- END GENERALIZATION -->
</TMPL_LOOP>
<!-- END GENERALIZATIONS -->
</Foundation.Core.Namespace.ownedElement>
</Model_Management.Model>
</XMI.content>
</XMI>

View file

@ -0,0 +1,128 @@
<?xml version="1.0"?>
<javascript>
<classes>
<TMPL_LOOP NAME="classes">
<class
name="<TMPL_VAR NAME="classname">"
<TMPL_IF NAME="extends">extends="<TMPL_VAR NAME='extends'>"</TMPL_IF> >
<constructor_args><!-- TMPL_VAR NAME="constructor_args" --></constructor_args>
<constructor_vars>
<TMPL_LOOP NAME="constructor_vars">
<var name="<TMPL_VAR NAME='@name'>">
<TMPL_LOOP NAME="values">
<value><![CDATA[<TMPL_VAR NAME="val">]]></value>
</TMPL_LOOP>
</var>
</TMPL_LOOP>
</constructor_vars>
<constructor_detail><![CDATA[<TMPL_VAR NAME="constructor_detail">]]></constructor_detail>
<instance-methods>
<TMPL_LOOP NAME="instance_methods">
<method mapped_name="<TMPL_VAR NAME='mapped_name'>">
<description><![CDATA[<TMPL_VAR NAME="description">]]></description>
<argument_list><!--
TMPL_VAR NAME="argument_list"
--></argument_list>
<vars>
<TMPL_LOOP NAME="vars">
<var name="<TMPL_VAR NAME='@name'>">
<TMPL_LOOP NAME="values">
<value><![CDATA[<TMPL_VAR NAME="val">]]></value>
</TMPL_LOOP>
</var>
</TMPL_LOOP>
</vars>
</method>
</TMPL_LOOP>
</instance-methods>
<instance-fields>
<TMPL_LOOP NAME="instance_fields">
<field name="<TMPL_VAR NAME='field_name'>">
<field-value><![CDATA[<TMPL_VAR NAME="field_value">]]></field-value>
<field-description><![CDATA[<TMPL_VAR NAME="field_description">]]></field-description>
<vars>
<TMPL_LOOP NAME="field_vars">
<var name="<TMPL_VAR NAME='@name'>">
<TMPL_LOOP NAME="values">
<value><![CDATA[<TMPL_VAR NAME="val">]]></value>
</TMPL_LOOP>
</var>
</TMPL_LOOP>
</vars>
</field>
</TMPL_LOOP>
</instance-fields>
<class-methods>
<TMPL_LOOP NAME="class_methods">
<method mapped_name="<TMPL_VAR NAME='mapped_name'>">
<description><![CDATA[<TMPL_VAR NAME="description">]]></description>
<argument_list><!--
TMPL_VAR NAME="argument_list"
--></argument_list>
<vars>
<TMPL_LOOP NAME="vars">
<var name="<TMPL_VAR NAME='@name'>">
<TMPL_LOOP NAME="values">
<value><![CDATA[<TMPL_VAR NAME="val">]]></value>
</TMPL_LOOP>
</var>
</TMPL_LOOP>
</vars>
</method>
</TMPL_LOOP>
</class-methods>
<class-fields>
<TMPL_LOOP NAME="class_fields">
<field name="<TMPL_VAR NAME='field_name'>">
<field-value><![CDATA[<TMPL_VAR NAME="field_value">]]></field-value>
<field-description><![CDATA[<TMPL_VAR NAME="field_description">]]></field-description>
<vars>
<TMPL_LOOP NAME="field_vars">
<var name="<TMPL_VAR NAME='@name'>">
<TMPL_LOOP NAME="values">
<value><![CDATA[<TMPL_VAR NAME="val">]]></value>
</TMPL_LOOP>
</var>
</TMPL_LOOP>
</vars>
</field>
</TMPL_LOOP>
</class-fields>
<inner-classes>
<TMPL_LOOP NAME="inner_classes">
<class name="<TMPL_VAR NAME='class_name'>"/>
</TMPL_LOOP>
</inner-classes>
<TMPL_LOOP NAME="inherits">
<inherits from="<TMPL_VAR NAME='class'>">
<TMPL_IF NAME="methods">
<methods>
<TMPL_LOOP NAME="methods">
<method><!-- TMPL_VAR NAME="name" --></method>
</TMPL_LOOP>
</methods>
</TMPL_IF>
<TMPL_IF NAME="fields">
<fields>
</fields>
</TMPL_IF>
</inherits>
</TMPL_LOOP>
</class>
</TMPL_LOOP>
</classes>
</javascript>

View file

@ -0,0 +1,95 @@
package JavaScript::Syntax::HTML;
=head1 NAME
JavaScript::Syntax::HTML - Convert JavaScript sourcecode to HTML
=head1 SYNOPSIS
use JavaScript::Syntax::HTML qw(to_html to_html_document);
my $html_fragment = to_html($js_src);
my $html_doc = output_html_document($js_src);
=head1 DESCRIPTION
JavaScript::Syntax::HTML processes JavaScript code and outputs HTML with
all reserved words marked up.
The to_html method only outputs an HTML fragment (no <body> or <html> tags),
and only marks up the reserved words with CSS styles.
The to_html_document method outputs a full HTML document, and does include
style information for the reserved words markup.
The style classes that can be defined for use with to_html are C<comment>,
C<literal>, and C<reserved>.
=head1 AUTHOR
Gabriel Reid gab_reid@users.sourceforge.net
=cut
use warnings;
use strict;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(to_html to_html_document);
sub to_html {
local $_ = shift;
s/\&/&amp;/g;
s/</&lt;/g;
s/>/&gt;/g;
s/
((?:\/\*.*?\*\/)
|
(?:\/\/[^\n]*$))
|
('[^']*'|"[^"]*")
|
\b(function|for|if|while|return|else|prototype|this)\b
/ get_substitution($1, $2, $3) /egsxm;
$_;
}
sub get_substitution {
my ($comment, $stringliteral, $resword) = @_;
my $content;
if ($comment){
$comment =~ s/(\@\w+)\b/get_span('attrib', $1)/eg;
return get_span('comment', $comment);
} elsif ($stringliteral){
return get_span('literal', $stringliteral);
} elsif ($resword){
return get_span('reserved', $resword);
}
}
sub get_span {
my ($class, $inner) = @_;
qq(<span class="$class">$inner</span>);
}
sub to_html_document {
my ($src) = @_;
$src = &to_html($src);
qq(
<html>
<head>
<style>
body { background: #FFFFFF }
.reserved { color: #DD3333 }
.comment { color: #339933 }
.attrib { color: #FF0000 }
.literal { color: #5555FF }
</style>
</head>
<body>
<pre>
$src
</pre>
</body>
</html>);
}

View file

@ -0,0 +1,30 @@
README for jsdoc.pl
jsdoc.pl is a script that produces javadoc-style documentation from well-formed
JavaScript sourcefiles. At the moment, this means it supports sourcefiles where
all functions are mapped to a class using prototype-based inheritance.
Anonymous function definitions
(e.g. Circle.prototype.getRadius = function(){ ...} ) are supported.
This application requires Perl5, as well as one non-standard addon module:
- HTML::Template, which is available from CPAN (cpan.org)
Invocation is simple: Just run the application, giving one or more well-formed
OO JavaScript sourcefilename(s) as arguments. A sample JS sourcefile, test.js,
is given along with this application. An example of running the application is
shown below:
$ ./jsdoc.pl test.js
OR
perl jsdoc.pl test.js
Further information about using JsDoc can be found at
http://jsdoc.sourceforge.net
If there are any questions, comments, problems or anything else, please mail
the jsdoc-user mailing list; more information can be found at
http://sourceforge.net/mail/?group_id=30801. This application has been
successfully tested on Linux (Debian and Redhat), and Windows 2000 with
ActivePerl.

View file

@ -0,0 +1,46 @@
TODO for JSDoc
- XML / XMI export
- Improve the --package-naming option so that there are separate namespaces
for each package (so that you can have the same class name defined in
different packages)
- Fix some spacing/table issues in the navbar in the templates (use a td
border in the stylesheet to debug)
- Introduce a more generalized system for generating the navbar
- Handle additional information (such as @see) for fields
- Uncallable methods/functions should be marked as private, or show the scope
from which they can be called
- Dynamic handling of assignment of prototype to a temp variable (preprocessor)
- Add support for interfaces, but first this has to be better defined
- Top-level var documenting (maybe add a '@global' tag to force toplevel vars
to be documented
- Add an FAQ, more and better documentation
- Java port (someday...)
- Make a more polished API for using other doclets, like javadoc
- Add a deprecated page, make deprecated support more like javadoc
- Add support for js files without .js extension
- Support for a time stamp
- Some of the ->{vars} are set to undef, should always be an empty map
- Add command line params --dump-tree, --dump-xml
- Add command line param --stylesheet
- Make navbar links selective so they are never broken
- Update the help doc

View file

@ -0,0 +1,679 @@
#!/usr/bin/perl
package JSDoc;
#
# Unit testing of JSDoc
#
# Run with 'perl TestJSDoc.pl' or './TestJSDoc.pl'
#
use strict;
use warnings;
use JSDoc;
use Data::Dumper;
use Test::More qw(no_plan);
$|++;
# parse_jsdoc_comment
diag("Testing parse_jsdoc_comment");
is_deeply(parse_jsdoc_comment(''), {summary => ''},
"Ensure only summary is filled in");
is(parse_jsdoc_comment('')->{summary}, '', 'Empty comment value');
is(parse_jsdoc_comment(
'************************* test *************')->{summary},
'test', 'long leading and trailing stars');
# annotate_comment
diag("Testing annotate_comment");
is(annotate_comment, "\n/** \@private */", 'annotate_comment w/o arg');
like(annotate_comment("/** This is a test */"),
qr#^/\s*\*\*\s*This is a test\s+\@private\s*\*/\s*$#,
'annotate_comment w/ arg');
like(annotate_comment("/** This is a test */", '@testtag value'),
qr#^/\s*\*\*\s*This is a test\s+\@testtag\svalue\s*\*/\s*$#,
'annotate_comment w/ tag argument');
# find_balanced_block
diag("Testing find_balanced_block");
my @blocks = (
# basic simple input
['{', '}', '{ this is in the braces } {this is after}{{',
['{ this is in the braces }', ' {this is after}{{'] ,
'basic input'],
# discard leading chars before opening char
['{', '}', 'discard {inner} after',
['{inner}', ' after'], 'discard leading chars'],
# empty input string
['{', '}', '',
['', ''], 'empty input string'],
# nothing to match at all
['{', '}', 'there is nothing to match',
['', 'there is nothing to match'], 'nothing to match'],
);
for my $test (@blocks){
my @args = @{$test}[0..2];
my ($expect, $explain) = @{$test}[3,4];
is_deeply([find_balanced_block(@args)], $expect, $explain);
}
#
# Test the @member tag
#
diag('Testing the @member tag');
reset_parser();
my $src = q#
/** @constructor */
function Foo(){
this.x = function(){return null;};
}
/** Unrelated */
function myfunc(){return null;}
#;
my $classes = parse_code_tree(\$src);
my %method_names = map { $_->{mapped_name} => 1 }
@{$classes->{Foo}->{instance_methods}};
ok(not(defined($method_names{myfunc})),
'Unrelated method is not added to class without @member tag');
reset_parser();
$src = q#
/** @constructor */
function Foo(){
this.x = function(){return null;};
}
/**
* @member Foo
*/
function myfunc(){return null;}
#;
$classes = parse_code_tree(\$src);
%method_names = map { $_->{mapped_name} => 1 }
@{$classes->{Foo}->{instance_methods}};
ok(defined($method_names{myfunc}),
'Add method marked with @member to class');
reset_parser();
#
# preprocess_source
#
diag("Testing preprocess_source");
# Make sure that:
#
# Foo.prototype = {
# bar: function(){ return "Eep!"; },
# baz: "Ha!"
# }
#
# becomes:
#
# Foo.prototype.bar = function(){ return "Eep!"; };
# Foo.prototype.baz = "Ha!";
my $before = q/
Foo.prototype = {
bar: function(){ return "Eep!"; },
baz: "Ha!"
} /;
my $after_re = qr/^\s*(?:$JSDOC_COMMENT)?\s*Foo.prototype.bar
\s*=\s*
function\(\s*\)\s*\{[^\}]*}\s*;\s*
Foo\.prototype\.baz\s*=\s*"[^"]+"\s*;\s*$/x;
like(preprocess_source($before), $after_re,
'Unpack prototype block assignment');
#
# Make sure that:
#
# /** @constructor */
# Foo.Bar = function(){this.x = 2;var y = 3;}
# becomes:
# /** @constructor */
# Foo.Bar = function(){};
#
# /** @constructor */
# function Foo.Bar(){}
#
# Foo.Bar.prototype.x = 2;
#
# /** @private */
# Foo.Bar.prototype.y = 3;
#
$before = q#
/** @constructor */
Foo.Bar = function(){this.x = 2; var y = 3; }#;
$after_re = qr{
^\s*/\*\*\s*\@constructor\s*\*/\s*
Foo\.Bar\s*=\s*function\s*\(\s*\)\s*\{\s*\}\s*;\s*
/\*\*\s*\@constructor\s*\*/\s*
function\s+Foo\.Bar\s*\(\s*\)\s*\{\s*\}
\s*
Foo\.Bar\.prototype\.x\s*=\s*2\s*;\s*
/\*\*\s*\@private\s*\*/\s*
Foo\.Bar\.prototype\.y\s*=\s*3\s*;\s*$
}x;
like(preprocess_source($before), $after_re,
'Unpack nested class');
#
# Make sure that:
# MySingleton = new function(){this.x=function(){}}
# and
# var MySingleton = new function(){this.x=function(){}}
# become:
# function MySingleton(){}
# MySingleton.prototype.x = function(){};
#
$before = q# MySingleton = new function(){this.x=function(){}} #;
$after_re = qr{
^\s*(?:$JSDOC_COMMENT)?
\s*function\s*MySingleton\s*\(\)\s*\{\s*\}\s*
(?:$JSDOC_COMMENT)?\s*
MySingleton\.prototype\.x\s*=\s*function\s*\(\s*\)\s*\{\s*\}\s*;\s*$}x;
like(preprocess_source($before), $after_re,
'Unpack singleton');
# Same thing, but with var before the declaration
$before = q#var MySingleton = new function(){this.x=function(){}} #;
like(preprocess_source($before), $after_re,
"Unpack var'd singleton");
#
# Test unpacking a constructor into a bunch of
# prototype-based declarations
#
$before = q#
/**
* @constructor
*/
function MyClass(){
/** Private variable 'x' */
var x = 3;
/**
* This is my function
*/
this.myFunction = function(){ return null; };
/**
* This is a private function
*/
function myPrivateFunction(x){
return null;
}
}
#;
$after_re = qr{
/\*\*\s*
\*\s*\@constructor\s*
\*/\s*
function\s+MyClass\s*\(\s*\)\s*\{\s*\}\s*
/\*\*\s*Private\svariable\s'x'\s*
\@private\s*\*/\s*
MyClass\.prototype\.x\s*=\s*3\s*;\s*
/\*\*\s*
\*\s*This\sis\smy\sfunction\s*\*/\s*
MyClass\.prototype\.myFunction\s*=\s*function\s*\(\s*\)\s*\{
[^\}]*\}\s*;\s*
/\*\*\s*
\*\s*This\sis\sa\sprivate\sfunction\s*
\@private\s*\*/\s*
MyClass\.prototype\.myPrivateFunction\s*=\s*function\(\s*x\s*\)\s*
\{[^\}]*\}\s*$
}x;
like(preprocess_source($before), $after_re,
'Testing unpacking a constructor into prototype-based assignments');
#
# Test the marking of void methods
#
$before = q'function MyFunc(){}';
$after_re = qr{/\*\*\s*\@type\s+void\s*\*/\s*function\s+MyFunc\s*\(\)\{\}};
like(preprocess_source($before), $after_re,
"Testing basic marking of void method without a docstring");
$before = q'
/** Method */
function MyFunc(){}
';
$after_re = qr{/\*\*\s*Method\s+\@type\s+void\s*\*/\s*
function\s+MyFunc\(\)\{\}}x;
like(preprocess_source($before), $after_re,
"Testing basic marking of void methods");
$before = '/** Method */
Shape.prototype.MyFunc = function(){}';
$after_re = qr{
/\*\*\s*
Method\s+
\@type\s+void\s*
\*/\s*Shape\.prototype\.MyFunc\s*=\s*function\(\)\{\}}x;
like(preprocess_source($before), $after_re,
"Testing marking of void anonymous method");
$before = 'Shape.prototype.MyFunc = function(){return null;}';
$after_re = qr{^\s*Shape\.prototype\.MyFunc\s*=
\s*function\(\)\{[^\}]*\}}x;
like(preprocess_source($before), $after_re,
"Testing marking of void anonymous method");
$before = "function x(){return null;}";
$after_re = qr{\s*function\sx\(\)\s*\{[^\}]*\}\s*$};
like(preprocess_source($before), $after_re,
"Leave non-void methods without docstrings alone");
$before = "/** My test function */\nfunction x(){return null;}";
$after_re = qr{\s*/\*\*\s*My\stest\sfunction\s*\*/\s*
function\sx\(\)\s*\{[^\}]*\}\s*$}x;
like(preprocess_source($before), $after_re,
"Leave non-void methods with docstrings alone");
reset_parser();
$src = q#
/**
* @constructor
*/
function MyClass(){
this.af = afunc;
this.bf = bfunc;
this.cf = cfunc;
function afunc(){}
function bfunc(){}
function cfunc(){}
}
#;
$classes = parse_code_tree(\$src);
ok(eq_set(
[ map { $_->{mapped_name} }
@{$classes->{MyClass}->{instance_methods}}],
['af', 'bf', 'cf', 'afunc', 'bfunc', 'cfunc']),
"Ensure instance methods in constructor are correctly assigned");
reset_parser();
$src = 'function MyFunction(){ return ""; }';
$classes = parse_code_tree(\$src);
ok(!defined($classes->{GLOBALS}->{class_methods}->[0]->{vars}->{type}),
"Ensure a function returning an empty string is not marked as void");
reset_parser();
$src = 'function A(){ var x = "x"; }';
$classes = parse_code_tree(\$src);
ok($classes->{GLOBALS}->{class_methods}->[0]->{vars}->{type}->[0] eq 'void',
"Ensure a global void is void");
reset_parser();
$src = 'function A(c){ c.someFunc = function(){ return 2; }; }';
$classes = parse_code_tree(\$src);
ok($classes->{GLOBALS}->{class_methods}->[0]->{vars}->{type}->[0] eq 'void',
"Ensure inner function definitions don't affect the return type");
reset_parser();
$src = 'function A(c){ c.someFunc = function(){ return 2; }; return ""; }';
$classes = parse_code_tree(\$src);
ok(!defined($classes->{GLOBALS}->{class_methods}->[0]->{vars}->{type}->[0]),
"Ensure inner-function measures don't affect non-void functions");
reset_parser();
$src = '/** @return {int} Description */function f(){}';
$classes = parse_code_tree(\$src);
ok(!defined($classes->{GLOBALS}->{class_methods}->[0]->{vars}->{type}->[0]),
'Methods with a @return tag but no return statement are not marked void');
reset_parser();
$src = 'function f(){ return (true ? "t" : "f");}';
$classes = parse_code_tree(\$src);
ok(!defined($classes->{GLOBALS}->{class_methods}->[0]->{vars}->{type}->[0]),
"Non-void with non-trivial return statement is not marked as void");
#
# Try huge constructor input
#
my @testsrc = (q#
/**
* @class This is class information
* @constructor
*/
function MyClass(){
#);
for (1..30){
push @testsrc, "
/** This is a private method */
function f$_(){ return null; }
/**
* THis is function number $_
* \@return Nothing
*/
this.func$_ = function(){if(true){if(false){return null;}}} ;\n";
}
push @testsrc, "\n}\n";
my $testsrc = join("\n", @testsrc);
# This could crash everything
preprocess_source($testsrc);
pass("Process huge constructor with preprocess_source");
#
# Huge constructor with unbalanced input
#
@testsrc = (q#
/**
* @class This is class information
* @constructor
*/
function MyClass(){
#);
for (1..100){
push @testsrc, "
/**
* THis is function number $_
* \@return Nothing
*/
this.func$_ = function(){if(true){if(false){return null;}};\n";
}
push @testsrc, "\n}\n";
$testsrc = join("\n", @testsrc);
# This could crash everything
preprocess_source($testsrc);
pass("Process huge unbalanced constructor with preprocess_source");
#
# deconstruct_mozilla_getset
#
$before = 'MyClass.prototype.__defineGetter__("myProp", function(){return null;});';
$after_re = qr{
^\s*MyClass\.prototype\.myProp\s*=\s*null\s*;\s*$}x;
#\s*function\s*\(\s*\)\s*\{\s*return\s+null\s*;\s*\}\s*;\s*$}x;
like(deconstruct_getset($before), $after_re,
"Testing behaviour of __defineGetter__");
like(preprocess_source($before), $after_re,
"Testing behaviour of __defineGetter__ in preprocess_source");
$before = 'MyClass.prototype.__defineSetter__("myProp", function(){return null;});';
$after_re = qr{
^\s*MyClass\.prototype\.myProp\s*=\s*null\s*;\s*$}x;
like(deconstruct_getset($before), $after_re,
"Testing behaviour of __defineSetter__");
like(preprocess_source($before), $after_re,
"Testing behaviour of __defineSetter__ in preprocess_source");
reset_parser();
$src = "
function MyFunc(theclass){
var x = 2;
theclass.prototype.f = function(){};
return x;
}
MyClass.prototype.f = function(){};
";
$classes = parse_code_tree(\$src);
ok(not(defined($classes->{theclass})),
"Ensure that dynamic prototyping doesn't add classes");
ok(defined($classes->{MyClass}),
"Ensure that normal classes are added with static prototyping");
#
# miscellaneous tests
#
diag("Miscellaneous tests");
reset_parser();
$src = "
/** \@constructor */
function A(){}
/** \@constructor */
function C(){}
/** \@constructor
\@extends A
*/
function B(){}
B.prototype = new C();";
$classes = parse_code_tree(\$src);
is($classes->{B}->{extends}, 'A',
"Test that the first extends marking is the good one, others are ignored");
reset_parser();
$src = "function A(){ this.n = function(){return 2};}
var a = new A(); ";
$classes = parse_code_tree(\$src);
ok(defined($classes->{A}),
"Functions are later used with 'new' must be treated as a constructor");
ok(!defined($classes->{this}), "'this' cannot be added as a class");
#
# Ensure using the @base tag automatically qualifies a function as a class,
# even if the base class isn't defined
#
reset_parser();
$src = '/** @base SomeOtherClass */
function MyClass(){}';
$classes = parse_code_tree(\$src);
ok(defined($classes->{MyClass}),
'A function must be upgraded to a class if the @base tag is used');
#
# Allow an anonymous function to be assigned to a global variable,
# resulting in a new class
#
reset_parser();
$src = '
/**
* Some function
* @constructor
*/
var SomeClass = function(){ this.x = 2; }
';
$classes = parse_code_tree(\$src);
ok(defined($classes->{SomeClass}),
"Allow anonymous function to be assigned to a global variable");
#
# Make sure that dynamically binding methods to a object at a later time
# do not affect the documentation
#
reset_parser();
$src = '
function AddCallback(obj){
obj.callback = function(){ return null; };
}';
$classes = parse_code_tree(\$src);
ok(!defined($classes->{obj}),
"Don't add passed-in objects as classes when doing dynamic binding");
reset_parser();
$src = '
/** @constructor */
function A(){}
A.prototype.setup = A_Setup;
A.prototype.tearDown = A_TearDown;
function A_Setup(){
this.callback = function(){ return null; };
}
function A_TearDown(){
this.tornDown = true;
}';
$classes = parse_code_tree(\$src);
ok(!defined($classes->{this}),
"Don't add 'this' as a class when dynamically adding methods in a method");
#
# Test block prototype assignment
#
diag("Test block prototype assignment");
reset_parser();
$src = '
SomeClass.prototype = {
funcA: function(){ return null; },
valA: 3,
funcB: function(){ return null; },
valB: "just testing",
funcC: function(){}
};';
$classes = parse_code_tree(\$src);
ok(eq_set(
[ map { $_->{mapped_name} }
@{$classes->{SomeClass}->{instance_methods}}],
['funcA', 'funcB', 'funcC']),
"Ensure instance methods are assigned in prototype definition block");
ok(eq_set(
[ map { $_->{field_name} }
@{$classes->{SomeClass}->{instance_fields}}],
['valA', 'valB']),
"Ensure instance fields are assigned in prototype definition block");
#
# Test prototype assignment
#
diag("Test prototype assignment");
reset_parser();
$src = '
function Base(){}
function Sub(){}
Sub.prototype = new Base();
';
$classes = parse_code_tree(\$src);
ok($classes->{Sub}->{extends} eq 'Base',
"Prototype assignment results in inheritance");
reset_parser();
$src = '
function Base(){}
function Sub(){}
Sub.prototype = new Base;
';
$classes = parse_code_tree(\$src);
ok($classes->{Sub}->{extends} eq 'Base',
"Prototype assignment results in inheritance (2)");
#
# Test the handling of methods defined more than once
#
reset_parser();
$src = '
function f(){}
/** doc */
function f(){}
';
$classes = parse_code_tree(\$src);
ok($classes->{GLOBALS}->{class_methods}->[0]->{description} eq 'doc',
"In case of double function definition, the one with most info wins");
reset_parser();
$src = '
/** doc */
function f(){}
function f(){}
';
$classes = parse_code_tree(\$src);
ok($classes->{GLOBALS}->{class_methods}->[0]->{description} eq 'doc',
"In case of double function definition, the one with most info wins (2)");
#
# Make sure that extra JSDoc-style comment blocks are not viewed as source
#
reset_parser();
$src = '
/** @constructor */
function x(){}
/** more doc
function y(){}
*/
/** @constructor */
function z(){}
';
$classes = parse_code_tree(\$src);
ok(!defined($classes->{GLOBALS}->{class_methods}->[0]),
"Ignore JSDoc in extra JSDoc-comment blocks");
#
# Test the behaviour of the @ignore tag
#
reset_parser();
$src = '
/** This method is normal */
function Normal(){}
/** @ignore */
function Hidden(){}
';
$classes = parse_code_tree(\$src);
my %fnames = map { $_->{mapped_name} => 1 }
@{$classes->{GLOBALS}->{class_methods}};
ok(defined $fnames{Normal}, "A normal method is picked up and documented");
ok(!defined $fnames{Hidden}, 'An @ignored method is not picked up');
#
# Test the behaviour of the @addon tag
#
reset_parser();
$src = '
/**
* Should be ignored
*/
ClassOne.funcOne = function(){};
/**
* Should not be ignored
* @addon
*/
ClassTwo.funcOne = function(){};
ClassThree.prototype = new Object();
ClassThree.funcThree = function(){}';
$classes = parse_code_tree(\$src);
ok(!defined($classes->{ClassOne}),
'Extensions to undefined classes/objects without @addon are ignored');
ok(defined($classes->{ClassTwo}),
'Extensions to undefined classes/objects with @addon are not ignored');
ok($classes->{ClassThree}->{class_methods}->[0]->{mapped_name} eq 'funcThree',
'Class methods without @addon work on pre-defined classes');
#
# Ensure enclosing package-classes are still recognized without using @addon
#
reset_parser();
$src = '
/**
* @constructor
*/
package.MyClass = function MyClass(){}
package.MyClass.prototype.foo = function foo(){}
';
$classes = parse_code_tree(\$src);
ok(defined($classes->{package}),
'Super-package-classes must be recognized without the @addon tag');
ok(defined($classes->{'package.MyClass'}),
'Sub-package-classes must be recognized without the @addon tag');

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,37 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
<TMPL_VAR NAME="project_name"> <TMPL_VAR NAME="filename">
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="<TMPL_VAR NAME="project_name"> <TMPL_VAR NAME="filename">";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">
<TMPL_IF NAME="logo">
<IMG SRC="<TMPL_VAR NAME="logo">"/>
</TMPL_IF>
<H3 class="FrameHeadingFont"><B><TMPL_VAR NAME="project_name"></B></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><TMPL_VAR NAME="fname_link"></B></FONT>
<BR>
<TABLE BORDER="0" WIDTH="100%">
<TMPL_LOOP name="classnames">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="<TMPL_VAR name="classname">.html" TARGET="classFrame"><TMPL_VAR name="classname"></A>
<BR>
</FONT></TD>
</TR>
</TMPL_LOOP>
</TABLE>
</BODY>
</HTML>

View file

@ -0,0 +1,36 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
<TMPL_VAR NAME="project_name"> All Classes
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="<TMPL_VAR NAME="project_name"> All Classes";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">
<TMPL_IF NAME="logo">
<IMG SRC="<TMPL_VAR NAME="logo">"/>
</TMPL_IF>
<H3 CLASS="FrameHeadingFont"><TMPL_VAR NAME="project_name"></H3>
<FONT size="+1" CLASS="FrameHeadingFont">
<B><a href="overview-summary.html">All Classes</a></B></FONT>
<BR>
<TABLE BORDER="0" WIDTH="100%">
<TMPL_LOOP name="classnames">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="<TMPL_VAR name="classname">.html" ><TMPL_VAR name="classname"></A>
<BR>
</FONT></TD>
</TR>
</TMPL_LOOP>
</TABLE>
</BODY>
</HTML>

View file

@ -0,0 +1,151 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
<TMPL_VAR NAME="project_name"> Constant Values
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="<TMPL_VAR NAME="project_help"> Constant Values";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B><TMPL_VAR NAME="project_name"></B>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>
<CENTER> <H1>Constant Field Values</H1> </CENTER>
<HR>
<UL>
<TMPL_LOOP NAME="classnames">
<LI><A HREF="#<TMPL_VAR NAME="name">"><TMPL_VAR NAME="name"></A></LI>
</TMPL_LOOP>
</UL>
<HR>
<TMPL_LOOP NAME="static_finals">
<A NAME="<TMPL_VAR NAME="classname">"></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD colspan="2">
<B><A HREF="<TMPL_VAR NAME="classname">.html"><TMPL_VAR NAME="classname"></A></B>
</TD>
</TR>
<TMPL_LOOP NAME="static_values">
<TR>
<TD><CODE><A HREF="<TMPL_VAR NAME="classname">.html#<TMPL_VAR NAME="name">"><TMPL_VAR NAME="name"></A></CODE></TD>
<TD ALIGN="right"><CODE><TMPL_VAR NAME="value"></CODE></TD>
</TR>
</TMPL_LOOP>
</TABLE>
<P>
<P>
</TMPL_LOOP>
<HR>
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
<!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B><TMPL_VAR NAME="project_name"></B>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>
<FONT SIZE="-1">
<TMPL_VAR NAME="page_footer">
</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on <TMPL_VAR NAME="ctime"></div>
</BODY>
</HTML>

View file

@ -0,0 +1,160 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
<TMPL_VAR NAME="project_name"> API Help
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="<TMPL_VAR NAME="project_help"> API Help";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B><TMPL_VAR NAME="project_name"></B>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>
<CENTER>
<H1>
How This API Document Is Organized</H1>
</CENTER>
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
Class</H3>
<BLOCKQUOTE>
<P>
Each class has its own separate page. Each of these pages has three sections consisting of a class description, summary tables, and detailed member descriptions:<UL>
<LI>Class inheritance diagram<LI>Direct Subclasses<LI>Class declaration<LI>Class description
<P>
<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
<P>
<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
Each summary entry contains the first sentence from the detailed description for that item. </BLOCKQUOTE>
<!--H3>
Tree (Class Hierarchy)</H3>
<BLOCKQUOTE>
There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all classes. The hierarchy page contains a list of classes. The classes are organized by inheritance structure starting with <code>Object</code>.<UL>
</BLOCKQUOTE-->
<!-- H3>
Deprecated API</H3>
<BLOCKQUOTE>
The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE-->
<H3>
Index</H3>
<BLOCKQUOTE>
The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, constructors, methods, and fields.</BLOCKQUOTE>
<H3>
Prev/Next</H3>
These links take you to the next or previous class, interface, package, or related page.<H3>
Frames/No Frames</H3>
These links show and hide the HTML frames. All pages are available with or without frames.
<P>
<FONT SIZE="-1">
<EM>
This help file applies to API documentation generated using the standard doclet.</EM>
</FONT>
<BR>
<HR>
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
<!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B><TMPL_VAR NAME="project_name"></B>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>
<FONT SIZE="-1">
<TMPL_VAR NAME="page_footer">
</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on <TMPL_VAR NAME="ctime"></div>
</BODY>
</HTML>

View file

@ -0,0 +1,142 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
Index ()
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="Index ()";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B><TMPL_VAR NAME="project_name"></B>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<TMPL_IF NAME="letters">
<!--
Listing of letters
-->
<TMPL_LOOP NAME="letters">&nbsp;<A HREF="index-all.html#__<TMPL_VAR NAME="letter_name">__"><TMPL_VAR NAME="letter_name"></A></TMPL_LOOP>
<HR>
<!-- End letter listing -->
<TMPL_LOOP NAME="index_list">
<A NAME="__<TMPL_VAR NAME="letter">__"><!-- --></A><H2>
<B><TMPL_VAR NAME="letter"></B></H2>
<TMPL_LOOP NAME="value">
<DL>
<DT><A HREF="<TMPL_VAR NAME="class">.html#<TMPL_VAR NAME="linkname">"><B><TMPL_VAR NAME="name"></B></A> -
<TMPL_VAR NAME="type"> class <A HREF="<TMPL_VAR NAME="class">.html"><TMPL_VAR NAME="class"></A>
<DD>&nbsp;
</DL>
</TMPL_LOOP>
<HR>
</TMPL_LOOP>
<!--
Listing of letters
-->
<TMPL_LOOP NAME="letters">&nbsp;<A HREF="index-all.html#__<TMPL_VAR NAME="letter_name">__"><TMPL_VAR NAME="letter_name"></A></TMPL_LOOP>
</TMPL_IF>
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
<!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD-->
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B><TMPL_VAR NAME="project_name"></B>
</EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>
<FONT SIZE="-1">
<TMPL_VAR NAME="page_footer">
</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/">JSDoc</a> on <TMPL_VAR NAME="ctime"></div>
</BODY>
</HTML>

View file

@ -0,0 +1,27 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
Generated Javascript Documentation
</TITLE>
</HEAD>
<FRAMESET cols="20%,80%">
<TMPL_IF NAME="multifile">
<FRAMESET rows="40%,50%">
<FRAME src="overview-frame.html" name="overviewFrame">
</TMPL_IF>
<FRAME src="allclasses-frame.html" name="packageFrame">
<TMPL_IF NAME="multifile">
</FRAMESET>
</TMPL_IF>
<FRAME src="<TMPL_VAR name="default_classname">.html" name="classFrame">
</FRAMESET>
<NOFRAMES>
<H2>
Frame Alert</H2>
<P>
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
<BR>
Link to <A HREF="allclasses-frame.html">Non-frame version.</A></NOFRAMES>
</HTML>

View file

@ -0,0 +1,448 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
<TMPL_VAR name="classname">
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="<TMPL_VAR name="classname">";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <TMPL_IF NAME="file_overview"> <A HREF="<TMPL_VAR NAME="file_overview">"></TMPL_IF><FONT CLASS="NavBarFont1"><TMPL_IF NAME="file_overview"><B></TMPL_IF>File<TMPL_IF NAME="file_overview"></B></TMPL_IF></FONT><TMPL_IF NAME="file_overview"></A></TMPL_IF>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">&nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
<!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"--> <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B><TMPL_VAR NAME="project_name"></B>
</EM>
</TD
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<TMPL_IF NAME="prev_class"><A HREF="<TMPL_VAR NAME="prev_class">.html"></TMPL_IF><B>PREV CLASS</B><TMPL_IF NAME="prev_class"></A></TMPL_IF><!--
NEXT CLASS
-->
&nbsp;<TMPL_IF NAME="next_class"><A HREF="<TMPL_VAR NAME="next_class">.html"></TMPL_IF><B>NEXT CLASS</B><TMPL_IF NAME="next_class"></A></TMPL_IF></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="<TMPL_VAR NAME="classname">.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>Class <TMPL_VAR NAME="classname"></H2>
<PRE><TMPL_VAR name="class_tree"></PRE>
<TMPL_IF NAME="subclasses">
<DL>
<DT>
<B>Direct Known Subclasses:</B>
<DD>
<TMPL_VAR NAME="subclasses">
</DD>
</DL>
</TMPL_IF>
<HR>
<DL>
<!-- Class definition -->
<DT><TMPL_IF NAME="class_attribs"><TMPL_VAR NAME="class_attribs">&nbsp;</TMPL_IF>class
<B><TMPL_VAR NAME="classname"></B>
<TMPL_IF NAME="superclass">
<DT>extends <TMPL_VAR NAME="superclass">
</TMPL_IF>
</DL>
<TMPL_IF NAME="class_summary">
<P>
<TMPL_VAR name="class_summary">
</P>
</TMPL_IF>
<HR>
<!-- ======== NESTED CLASS SUMMARY ======== -->
<TMPL_IF NAME="inner_classes">
<A NAME="inner_classes"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Nested Class Summary</B></FONT></TD>
</TR>
<TMPL_LOOP name="inner_classes">
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&lt;static&nbsp;class&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="<TMPL_VAR name="class_name">.html"><TMPL_VAR name="class_name"></A></B></CODE></TD>
</TR>
</TMPL_LOOP>
</TABLE>
&nbsp;
</TMPL_IF>
<!-- ======== END NESTED CLASS SUMMARY ======== -->
<!-- =========== FIELD SUMMARY =========== -->
<TMPL_IF NAME="fields">
<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Field Summary</B></FONT></TD>
</TR>
<!-- This is one instance field summary -->
<TMPL_LOOP name="fields">
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE><TMPL_IF NAME="is_private">&lt;private&gt;&nbsp;</TMPL_IF><TMPL_IF NAME="is_class_field">&lt;static&gt; </TMPL_IF><TMPL_IF NAME="is_final">&nbsp;&lt;final&gt;</TMPL_IF>&nbsp;<TMPL_VAR NAME="type"></CODE></FONT></TD>
<TD><CODE><B><A HREF="#<TMPL_IF NAME="is_class_field">!s!</TMPL_IF><TMPL_VAR name="field_name">"><TMPL_VAR name="field_name"></A></B></CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<TMPL_VAR name="field_summary"></TD>
</TR>
</TMPL_LOOP>
</TABLE>
&nbsp;
</TMPL_IF>
<TMPL_LOOP name="field_inheritance">
<TMPL_IF NAME="inherited_fields">
&nbsp;<A NAME=""><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Fields inherited from class <A HREF="<TMPL_VAR name="superclass_name">.html"><TMPL_VAR name="superclass_name"></A></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<TMPL_VAR NAME="inherited_fields">
</CODE></TD>
</TR>
</TABLE>
&nbsp;
</TMPL_IF>
</TMPL_LOOP>
<!-- =========== END FIELD SUMMARY =========== -->
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<TMPL_IF NAME="constructor_args">
<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD>
<CODE>
<B>
<A HREF="<TMPL_VAR name="classname">.html#<TMPL_VAR name="classname">()"><TMPL_VAR name="classname"></A>
</B>
<TMPL_VAR name="constructor_args">
</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<TMPL_VAR name="constructor_summary">
</TD>
</TR>
</TABLE>
</TMPL_IF>
<!-- ======== END CONSTRUCTOR SUMMARY ======== -->
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<TMPL_IF NAME="methods">
<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>
<TMPL_LOOP name="methods">
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%">
<FONT SIZE="-1">
<CODE><TMPL_IF NAME="is_class_method">&lt;static&gt;</TMPL_IF><TMPL_IF NAME="is_private">&nbsp;&lt;private&gt; </TMPL_IF>&nbsp;<TMPL_VAR NAME="type"></CODE>
</FONT>
</TD>
<TD>
<CODE>
<B>
<A HREF="#<TMPL_IF NAME="is_class_method">!s!</TMPL_IF><TMPL_VAR name="method_name">"><TMPL_VAR name="method_name"></A></B><TMPL_VAR name="method_arguments">
</CODE>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<TMPL_VAR name="method_summary">
</TD>
</TR>
</TMPL_LOOP>
</TABLE>
</TMPL_IF>
<TMPL_LOOP name="method_inheritance">
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class <a href="<TMPL_VAR name="superclass_name">.html"><TMPL_VAR name="superclass_name"></a></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>
<!-- Inherited methods -->
<TMPL_VAR NAME="inherited_methods">
</CODE></TD>
</TR>
</TABLE>
&nbsp;
</TMPL_LOOP>
<P>
<!-- ========== END METHOD SUMMARY =========== -->
<!-- ============ FIELD DETAIL START =========== -->
<TMPL_IF NAME="fields">
<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=1><FONT SIZE="+2"><B>Field Detail</B></FONT></TD>
</TR>
</TABLE>
<TMPL_LOOP NAME="fields">
<A NAME="<TMPL_IF NAME="is_class_field">!s!</TMPL_IF><TMPL_VAR NAME="field_name">"><!-- --></A>
<H3><TMPL_VAR NAME="field_name"></H3>
<PRE><TMPL_IF NAME="is_private">&lt;private&gt;&nbsp;</TMPL_IF><TMPL_IF NAME="is_class_field">&lt;static&gt;&nbsp;</TMPL_IF><TMPL_IF NAME="is_final">&lt;final&gt;&nbsp;</TMPL_IF><TMPL_VAR NAME="type">&nbsp;<B><TMPL_VAR NAME="field_name"></B></PRE>
<UL>
<TMPL_VAR NAME="field_description">
<TMPL_IF NAME="const_link">
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="constant-values.html#java.awt.AWTEvent.COMPONENT_EVENT_MASK">Constant Field Values</A></DL>
</DL>
</TMPL_IF>
</UL>
<HR>
</TMPL_LOOP>
</TMPL_IF>
<!-- ============ FIELD DETAIL END =========== -->
<!-- ========= CONSTRUCTOR DETAIL START ======== -->
<TMPL_IF NAME="constructor_args">
<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=1>
<FONT SIZE="+2"><B>Constructor Detail</B></FONT>
</TD>
</TR>
</TABLE>
<A NAME="<TMPL_VAR name="classname">()"><!-- --></A><H3>
<TMPL_VAR name="classname"></H3>
<PRE><B><TMPL_VAR name="classname"></B><TMPL_VAR name="constructor_args"></PRE>
<TMPL_IF NAME="constructor_detail">
<UL>
<TMPL_VAR name="constructor_detail">
</UL>
</TMPL_IF>
<TMPL_IF name="constructor_params">
<UL>
<B>Parameters:</B>
<TMPL_LOOP name="constructor_params">
<UL><CODE><TMPL_VAR name="varname"></CODE> - <TMPL_VAR name="vardescrip">
</UL>
</TMPL_LOOP>
</TMPL_IF>
</UL>
</TMPL_IF>
<!-- Constructor return value(s) -->
<TMPL_IF name="constructor_returns">
<UL>
<B>Returns:</B>
<UL>
<TMPL_VAR name="constructor_returns">
</UL>
</UL>
</TMPL_IF>
<!-- End constructor return value(s) -->
<!-- ADDITIONAL ATTRIBUTES -->
<TMPL_IF name="constructor_attrs">
<UL>
<TMPL_VAR name="constructor_attrs">
</UL>
</TMPL_IF>
<HR/>
<!-- END ADDITIONAL ATTRIBUTES -->
<!-- ========= CONSTRUCTOR DETAIL END ======== -->
<!-- ============ METHOD DETAIL START ========== -->
<TMPL_IF NAME="methods">
<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=1><FONT SIZE="+2">
<B>Method Detail</B></FONT>
</TD>
</TR>
</TABLE>
<!-- One single method detail entry -->
<TMPL_LOOP name="methods">
<A NAME="<TMPL_IF NAME="is_class_method">!s!</TMPL_IF><TMPL_VAR name="method_name">"><!-- --></A>
<H3><TMPL_VAR name="method_name"></H3>
<PRE><TMPL_IF NAME="is_class_method">&lt;static&gt; </TMPL_IF><TMPL_IF NAME="is_private">&nbsp;&lt;private&gt; </TMPL_IF><TMPL_VAR NAME="type"> <B><TMPL_VAR name="method_name"></B><TMPL_VAR name="method_arguments"></PRE>
<TMPL_IF name="method_description">
<UL><TMPL_VAR name="method_description"></UL>
</TMPL_IF>
<!-- METHOD PARAMETERS START -->
<TMPL_IF name="method_params">
<UL>
<B>Parameters:</B>
<TMPL_LOOP name="method_params">
<UL><CODE><TMPL_VAR name="varname"></CODE> - <TMPL_VAR name="vardescrip">
</UL>
</TMPL_LOOP>
</UL>
</TMPL_IF>
<!-- METHOD PARAMETERS END -->
<TMPL_IF name="method_returns">
<UL>
<B>Returns:</B>
<UL>
<TMPL_VAR name="method_returns">
</UL>
</UL>
</TMPL_IF>
<!-- ADDITIONAL ATTRIBUTES START -->
<TMPL_IF name="attributes">
<UL>
<TMPL_VAR name="attributes">
</UL>
</TMPL_IF>
<!-- ADDITIONAL ATTRIBUTES END -->
<HR>
</TMPL_LOOP>
</TMPL_IF>
<!-- ============ METHOD DETAIL END ========== -->
<!-- ========= END OF CLASS DATA ========= -->
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_bottom"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <TMPL_IF NAME="file_overview"> <A HREF="<TMPL_VAR NAME="file_overview">"></TMPL_IF><FONT CLASS="NavBarFont1"><TMPL_IF NAME="file_overview"><B></TMPL_IF>File<TMPL_IF NAME="file_overview"></B></TMPL_IF></FONT><TMPL_IF NAME="file_overview"></A></TMPL_IF>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><b>Tree</b></FONT></A>&nbsp;</TD>
<!--TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"--> <!--A HREF="deprecated-list.html"--><!--FONT CLASS="NavBarFont1">Deprecated</FONT--><!--/A--><!--&nbsp;</TD-->
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
<B><TMPL_VAR NAME="project_name"></B>
</EM>
</TD
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<TMPL_IF NAME="prev_class"><A HREF="<TMPL_VAR NAME="prev_class">.html"></TMPL_IF><B>PREV CLASS</B><TMPL_IF NAME="prev_class"></A></TMPL_IF><!--
NEXT CLASS
-->
&nbsp;<TMPL_IF NAME="next_class"><A HREF="<TMPL_VAR NAME="next_class">.html"></TMPL_IF><B>NEXT CLASS</B><TMPL_IF NAME="next_class"></A></TMPL_IF></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="<TMPL_VAR NAME="classname">.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
SUMMARY:&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>
<FONT SIZE="-1">
<TMPL_VAR NAME="page_footer">
</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on <TMPL_VAR NAME="ctime"></div>
</BODY>
</HTML>

View file

@ -0,0 +1,43 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>
Overview ()
</TITLE>
<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
</HEAD>
<SCRIPT>
function asd()
{
parent.document.title="Overview ()";
}
</SCRIPT>
<BODY BGCOLOR="white" onload="asd();">
<TMPL_IF NAME="logo">
<IMG SRC="<TMPL_VAR NAME="logo">"/>
</TMPL_IF>
<H3 class="FrameHeadingFont"><B><TMPL_VAR NAME="project_name"></B></H3>
<TABLE BORDER="0" WIDTH="100%">
<TR>
<B></B></FONT></TD>
</TR>
</TABLE>
<TABLE BORDER="0" WIDTH="100%">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" TARGET="packageFrame">All Classes</A></FONT>
<P>
<FONT size="+1" CLASS="FrameHeadingFont">
Files</FONT>
<BR>
<TMPL_LOOP name="filenames">
<FONT CLASS="FrameItemFont"><A HREF="overview-<TMPL_VAR NAME="mangledfilename">.html" TARGET="packageFrame"><TMPL_VAR NAME="filename"></A></FONT><BR>
</TMPL_LOOP>
</TD>
</TR>
</TABLE>
<P>
&nbsp;
</BODY>
</HTML>

View file

@ -0,0 +1,222 @@
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<html>
<head>
<title>
<tmpl_var name="project_name"> Overview
</title>
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script>
function asd() {
<tmpl_if name="is_file_summary">
parent.document.title="<tmpl_var name="project_title"> Overview";
<tmpl_else>
parent.document.title="<tmpl_var name="project_name"> Overview";
</tmpl_if>
}
</script>
</head>
<body bgcolor="white" onload="asd();">
<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
<tr align="center" valign="top">
<tmpl_unless name="is_file_summary">
<td bgcolor="#FFFFFF" class="NavBarCell1Rev"> &nbsp;<font class="NavBarFont1Rev"><b>Overview</b></font>&nbsp;</td>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <font class="NavBarFont1">File</font>&nbsp;</td>
<tmpl_else>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
<td bgcolor="#FFFFFF" class="NavBarCell1Rev"> &nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
</tmpl_unless>
<td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
</tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top">
<em>
<b><tmpl_var name="project_name"></b></em>
</td>
</tr>
<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
<a href="index.html" target="_top"><b>FRAMES</b></a> &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->
<hr>
<center>
<tmpl_if name="project_title">
<h2><tmpl_var name="project_title"></h2>
<tmpl_else>
<h2>JSDoc Documentation</h2>
</tmpl_if>
</center>
<tmpl_if name="project_title">
<tmpl_if name="generic">
<p>
This document is the API Specification for
<tmpl_var name="project_title">.
</p>
</tmpl_if>
</tmpl_if>
<h4>Summary</h4>
<p>
<tmpl_if name="project_summary">
<tmpl_var name="project_summary">
<tmpl_else>
No summary generated for these documents.
</tmpl_if>
</p>
<hr>
<tmpl_if name="overviews">
<table border="1" cellpadding="3" cellspacing="0" width="100%">
<tr bgcolor="#CCCCFF" class="TableHeadingColor">
<td colspan=2><font size="+2">
<tmpl_if name="is_file_summary">
<b>Class Summary</b>
<tmpl_else>
<b>File Summary</b>
</tmpl_if>
</font></td>
</tr>
<tmpl_loop name="overviews">
<tr bgcolor="white" class="TableRowColor">
<td width="15%"><b><a href="<TMPL_VAR NAME="link">"><tmpl_var name="name"></a></b></td>
<td><tmpl_var name="overview"></td>
</tr>
</tmpl_loop>
</table>
<hr/>
</tmpl_if>
<!-- ========== METHOD SUMMARY =========== -->
<tmpl_if name="methods">
<a name="method_summary"><!-- --></a>
<table border="1" cellpadding="3" cellspacing="0" width="100%">
<tr bgcolor="#CCCCFF" class="TableHeadingColor">
<td colspan=2>
<font size="+2">
<b>Method Summary</b>
</font>
</td>
</tr>
<tmpl_loop name="methods">
<tr bgcolor="white" class="TableRowColor">
<td align="right" valign="top" width="1%">
<font size="-1">
<code><tmpl_if name="is_class_method">static</tmpl_if><tmpl_if name="is_private">&nbsp;private </tmpl_if>&nbsp;<tmpl_var name="type"></code>
</font>
</td>
<td>
<code>
<b>
<a href="<TMPL_VAR NAME="file_link">#<TMPL_VAR name="method_anchor">"><tmpl_var name="method_name"></a></b><tmpl_var name="method_arguments">
</code>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<tmpl_var name="method_summary">
</td>
</tr>
</tmpl_loop>
</table>
<p>
</tmpl_if>
<!-- ========== END METHOD SUMMARY =========== -->
<tmpl_if name="sourcecode">
<pre class="sourceview"><tmpl_var name="sourcecode"></pre>
<hr>
</tmpl_if>
<!-- ========== START OF NAVBAR ========== -->
<a name="navbar_top"><!-- --></a>
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr>
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
<a name="navbar_top_firstrow"><!-- --></a>
<table border="0" cellpadding="0" cellspacing="3">
<tr align="center" valign="top">
<tmpl_unless name="is_file_summary">
<td bgcolor="#FFFFFF" class="NavBarCell1Rev"> &nbsp;<font class="NavBarFont1Rev"><b>Overview</b></font>&nbsp;</td>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <font class="NavBarFont1">File</font>&nbsp;</td>
<tmpl_else>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a>&nbsp;</td>
<td bgcolor="#FFFFFF" class="NavBarCell1Rev"> &nbsp;<font class="NavBarFont1Rev"><b>File</b></font>&nbsp;</td>
</tmpl_unless>
<td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font>&nbsp;</td>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a>&nbsp;</td>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a>&nbsp;</td>
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a>&nbsp;</td>
</tr>
</table>
</td>
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
<b><tmpl_var name="project_name"></b></em>
</td>
</tr>
<tr>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</font></td>
<td bgcolor="white" class="NavBarCell2"><font size="-2">
<a href="index.html" target="_top"><b>FRAMES</b></a> &nbsp;
&nbsp;<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
&nbsp;&nbsp;
<script>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</script>
<noscript>
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
</noscript>
</font></td>
</tr>
</table>
<!-- =========== END OF NAVBAR =========== -->
<hr>
<font size="-1">
<tmpl_var name="page_footer">
</font>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on <tmpl_var name="ctime"></div>
</body>
</html>

View file

@ -0,0 +1,121 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
<TMPL_VAR name="project_name"> Class Hierarchy
</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
<SCRIPT>
function asd()
{
parent.document.title="<TMPL_VAR NAME="project_name"> Class Hierarchy";
}
</SCRIPT>
</HEAD>
<BODY BGCOLOR="white" onload="asd();">
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"><A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><b>Overview</b></A></FONT>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><b>Tree</b></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><b>Index</b></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><b>Help</b></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN="right" VALIGN="top"><EM>
<B><TMPL_VAR NAME="project_name"></B></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A>
&nbsp;&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<HR>
<H2>Class Hierarchy</H2>
<TMPL_VAR name="classtrees">
<HR>
<!-- ========== START OF NAVBAR ========== -->
<A NAME="navbar_top"><!-- --></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
<TR ALIGN="center" VALIGN="top">
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"><A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><b>Overview</b></A></FONT>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">File</FONT>&nbsp;</TD>
<TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><b>Tree</b></FONT>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"--><FONT CLASS="NavBarFont1"><b>Index</b></FONT></A>&nbsp;</TD>
<TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><b>Help</b></FONT></A>&nbsp;</TD>
</TR>
</TABLE>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN="right" VALIGN="top"><EM>
<B><TMPL_VAR NAME="project_name"></B></EM>
</TD>
</TR>
<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
<A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
&nbsp;<A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A>
&nbsp;&nbsp;
<SCRIPT>
<!--
if(window==top) {
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
}
//-->
</SCRIPT>
<NOSCRIPT>
<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
</NOSCRIPT>
</FONT></TD>
</TR>
</TABLE>
<!-- =========== END OF NAVBAR =========== -->
<hr>
<FONT SIZE="-1">
<TMPL_VAR NAME="page_footer">
</FONT>
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" parent="_parent">JSDoc</a> on <TMPL_VAR NAME="ctime"></div>
</BODY>
</HTML>

View file

@ -0,0 +1,39 @@
/* JSDoc style sheet */
/* Define colors, fonts and other style attributes here to override the defaults */
/* Page background color */
body { background-color: #FFFFFF }
/* Table colors */
.TableHeadingColor { background: #CCCCFF } /* Dark mauve */
.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */
.TableRowColor { background: #FFFFFF } /* White */
/* Font used in left-hand frame lists */
.FrameTitleFont { font-size: 10pt; font-family: Helvetica, Arial, san-serif }
.FrameHeadingFont { font-size: 10pt; font-family: Helvetica, Arial, san-serif }
.FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, san-serif }
/* Example of smaller, sans-serif font in frames */
/* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
/* Navigation bar fonts and colors */
.NavBarCell1 { background-color:#EEEEFF;}/* Light mauve */
.NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */
.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;}
.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
.jsdoc_ctime { font-family: Arial, Helvetica, sans-serif; font-size: 9pt;
text-align: right }
/* Sourcecode view */
.sourceview { background: #FFFFFF }
.attrib { color: #DD7777 }
.comment { color: #55AA55 }
.reserved { color: #FF5555 }
.literal { color: #5555FF }

View file

@ -0,0 +1,505 @@
/**
* @fileoverview This file is to be used for testing the JSDoc parser
* It is not intended to be an example of good JavaScript OO-programming,
* nor is it intended to fulfill any specific purpose apart from
* demonstrating the functionality of the
* {@link http://sourceforge.net/projects/jsdoc JSDoc} parser
*
* @author Gabriel Reid gab_reid@users.sourceforge.net
* @version 0.1
*/
/**
* Construct a new Shape object.
* @class This is the basic Shape class.
* It can be considered an abstract class, even though no such thing
* really existing in JavaScript
* @constructor
* @throws MemoryException if there is no more memory
* @throws GeneralShapeException rarely (if ever)
* @return A new shape
*/
function Shape(){
/**
* This is an example of a function that is not given as a property
* of a prototype, but instead it is assigned within a constructor.
* For inner functions like this to be picked up by the parser, the
* function that acts as a constructor <b>must</b> be denoted with
* the <b>&#64;constructor</b> tag in its comment.
* @type String
*/
this.getClassName = function(){
return "Shape";
}
/**
* This is a private method, just used here as an example
*/
function addReference(){
// Do nothing...
}
}
/**
* Create a new Hexagon instance.
* @extends Shape
* @class Hexagon is a class that is a <i>logical</i> sublcass of
* {@link Shape} (thanks to the <code>&#64;extends</code> tag), but in
* reality it is completely unrelated to Shape.
* @param {int} sideLength The length of one side for the new Hexagon
*/
function Hexagon(sideLength) {
}
/**
* This is an unattached (static) function that adds two integers together.
* @param {int} One The first number to add
* @param {int http://jsdoc.sourceforge.net/} Two The second number to add
* @author Gabriel Reid
* @deprecated So you shouldn't use it anymore!
*/
function Add(One, Two){
return One + Two;
}
/**
* The color of this shape
* @type Color
*/
Shape.prototype.color = null;
/**
* The border of this shape.
* @type int
*/
Shape.prototype.border = null;
/*
* The assignment of function implementations for Shape, documentation will
* be taken over from the method declaration.
*/
Shape.prototype.getCoords = Shape_GetCoords;
Shape.prototype.getColor = Shape_GetColor;
Shape.prototype.setCoords = Shape_SetCoords;
Shape.prototype.setColor = Shape_SetColor;
/*
* These are all the instance method implementations for Shape
*/
/**
* Get the coordinates of this shape. It is assumed that we're always talking
* about shapes in a 2D location here.
* @requires Shape The shape class
* @returns A Coordinate object representing the location of this Shape
* @type Coordinate
*/
function Shape_GetCoords(){
return this.coords;
}
/**
* Get the color of this shape.
* @see #setColor
* @type Color
*/
function Shape_GetColor(){
return this.color;
}
/**
* Set the coordinates for this Shape
* @param {Coordinate} coordinates The coordinates to set for this Shape
*/
function Shape_SetCoords(coordinates){
this.coords = coordinates;
}
/**
* Set the color for this Shape
* @param {Color} color The color to set for this Shape
* @param other There is no other param, but it can still be documented if
* optional parameters are used
* @throws NonExistantColorException (no, not really!)
* @see #getColor
*/
function Shape_SetColor(color){
this.color = color;
}
/**
* Clone this shape
* @returns A copy of this shape
* @type Shape
* @author Gabriel Reid
*/
Shape.prototype.clone = function(){
return new Shape();
}
/**
* Create a new Rectangle instance.
* @class A basic rectangle class, inherits from Shape.
* This class could be considered a concrete implementation class
* @constructor
* @param {int} width The optional width for this Rectangle
* @param {int} height Thie optional height for this Rectangle
* @author Gabriel Reid
* @see Shape Shape is the base class for this
*/
function Rectangle(width, // This is the width
height // This is the height
){
if (width){
this.width = width;
if (height){
this.height = height;
}
}
}
/* Inherit from Shape */
Rectangle.prototype = new Shape();
/**
* Value to represent the width of the Rectangle.
* <br>Text in <b>bold</b> and <i>italic</i> and a
* link to <a href="http://sf.net">SourceForge</a>
* @private
* @type int
*/
Rectangle.prototype.width = 0;
/**
* Value to represent the height of the Rectangle
* @private
* @type int
*/
Rectangle.prototype.height = 0;
/**
* Get the type of this object.
* @type String
*/
Rectangle.prototype.getClassName= function(){
return "Rectangle";
}
/*
* These are all the instance method implementations for Rectangle
*/
Rectangle.prototype.getWidth = Rectangle_GetWidth;
Rectangle.prototype.getHeight = Rectangle_GetHeight;
Rectangle.prototype.setWidth = Rectangle_SetWidth;
Rectangle.prototype.setHeight = Rectangle_SetHeight;
Rectangle.prototype.getArea = Rectangle_GetArea;
/**
* Get the value of the width for the Rectangle
* @type int
* @see #setWidth
*/
function Rectangle_GetWidth(){
return this.width;
}
/**
* Get the value of the height for the Rectangle.
* Another getter is the {@link Shape#getColor} method in the
* {@link Shape base Shape class}.
* @return The height of this Rectangle
* @type int
* @see #setHeight
*/
function Rectangle_GetHeight(){
return this.height;
}
/**
* Set the width value for this Rectangle.
* @param {int} width The width value to be set
* @see #getWidth
*/
function Rectangle_SetWidth(width){
this.width = width;
}
/**
* Set the height value for this Rectangle.
* @param {int} height The height value to be set
* @see #getHeight
*/
function Rectangle_SetHeight(height){
this.height = height;
}
/**
* Get the value for the total area of this Rectangle
* @return total area of this Rectangle
* @type int
*/
function Rectangle_GetArea(){
return width * height;
}
/**
* Create a new Square instance.
* @class A Square is a subclass of {@link Rectangle}
* @param {int} width The optional width for this Rectangle
* @param {int} height The optional height for this Rectangle
*/
function Square(width, height){
if (width){
this.width = width;
if (height){
this.height = height;
}
}
}
/* Square is a subclass of Rectangle */
Square.prototype = new Rectangle();
/*
* The assignment of function implementation for Shape.
*/
Square.prototype.setWidth = Square_SetWidth;
Square.prototype.setHeight = Square_SetHeight;
/**
* Set the width value for this Square.
* @param {int} width The width value to be set
* @see #getWidth
*/
function Square_SetWidth(width){
this.width = this.height = width;
}
/**
* Set the height value for this Square
* Sets the {@link Rectangle#height height} attribute in the Rectangle.
* @param {int} height The height value to be set
*/
function Square_SetHeight(height){
this.height = this.width = height;
}
/**
* Create a new Circle instance based on a radius.
* @class Circle class is another subclass of Shape
* @param {int} radius The optional radius of this Circle
*/
function Circle(radius){
if (radius){
this.radius = radius;
}
}
/* Circle inherits from Shape */
Circle.prototype = new Shape();
/**
* The radius value for this Circle
* @private
* @type int
*/
Circle.prototype.radius = 0;
/**
* A very simple class (static) field that is also a constant
* @final
* @type float
*/
Circle.PI = 3.14;
Circle.createCircle = Circle_CreateCircle;
Circle.prototype.getRadius = Circle_GetRadius;
Circle.prototype.setRadius = Circle_SetRadius;
/**
* Get the radius value for this Circle
* @type int
* @see #setRadius
*/
function Circle_GetRadius(){
return this.radius;
}
/**
* Set the radius value for this Circle
* @param {int} radius The radius value to set
* @see #getRadius
*/
function Circle_SetRadius(radius){
this.radius = radius;
}
/**
* An example of a class (static) method that acts as a factory for Circle
* objects. Given a radius value, this method creates a new Circle.
* @param {int} radius The radius value to use for the new Circle.
* @type Circle
*/
function Circle_CreateCircle(radius){
return new Circle(radius);
}
/**
* Create a new Coordinate instance based on x and y grid data.
* @class Coordinate is a class that can encapsulate location information.
* @param {int} x The optional x portion of the Coordinate
* @param {int} y The optinal y portion of the Coordinate
*/
function Coordinate(x, y){
if (x){
this.x = x;
if (y){
this.y = y;
}
}
}
/**
* The x portion of the Coordinate
* @type int
* @see #getX
* @see #setX
*/
Coordinate.prototype.x = 0;
/**
* The y portion of the Coordinate
* @type int
* @see #getY
* @see #setY
*/
Coordinate.prototype.y = 0;
Coordinate.prototype.getX = Coordinate_GetX;
Coordinate.prototype.getY = Coordinate_GetY;
Coordinate.prototype.setX = Coordinate_SetX;
Coordinate.prototype.setY = Coordinate_SetY;
/**
* Gets the x portion of the Coordinate.
* @type int
* @see #setX
*/
function Coordinate_GetX(){
return this.x;
}
/**
* Get the y portion of the Coordinate.
* @type int
* @see #setY
*/
function Coordinate_GetY(){
return this.y;
}
/**
* Sets the x portion of the Coordinate.
* @param {int} x The x value to set
* @see #getX
*/
function Coordinate_SetX(x){
this.x = x;
}
/**
* Sets the y portion of the Coordinate.
* @param {int} y The y value to set
* @see #getY
*/
function Coordinate_SetY(y){
this.y = y;
}
/**
* @class This class exists to demonstrate the assignment of a class prototype
* as an anonymous block.
*/
function ShapeFactory(){
}
ShapeFactory.prototype = {
/**
* Creates a new {@link Shape} instance.
* @return A new {@link Shape}
* @type Shape
*/
createShape: function(){
return new Shape();
}
}
/**
* An example of a singleton class
*/
MySingletonShapeFactory = new function(){
/**
* Get the next {@link Shape}
* @type Shape
* @return A new {@link Shape}
*/
this.getShape = function(){
return null;
}
}
/**
* Create a new Foo instance.
* @class This is the Foo class. It exists to demonstrate 'nested' classes.
* @constructor
* @see Foo.Bar
*/
function Foo(){}
/**
* Creates a new instance of Bar.
* @class This class exists to demonstrate 'nested' classes.
* @constructor
* @see Foo.Bar
*/
function Bar(){}
/**
* Nested class
* @constructor
*/
Foo.Bar = function(){this.x = 2;}
Foo.Bar.prototype = new Bar();
Foo.Bar.prototype.y = '3';