NAME
SGMLS - class for postprocessing the output from the sgmls and nsgmls parsers.
SYNOPSIS
use SGMLS;
my $parse = new SGMLS(STDIN);
my $event = $parse->next_event;
while ($event) {
SWITCH: {
($event->type eq 'start_element') && do {
my $element = $event->data; # An object of class SGMLS_Element
[[your code for the beginning of an element]]
last SWITCH;
};
($event->type eq 'end_element') && do {
my $element = $event->data; # An object of class SGMLS_Element
[[your code for the end of an element]]
last SWITCH;
};
($event->type eq 'cdata') && do {
my $cdata = $event->data; # A string
[[your code for character data]]
last SWITCH;
};
($event->type eq 'sdata') && do {
my $sdata = $event->data; # A string
[[your code for system data]]
last SWITCH;
};
($event->type eq 're') && do {
[[your code for a record end]]
last SWITCH;
};
($event->type eq 'pi') && do {
my $pi = $event->data; # A string
[[your code for a processing instruction]]
last SWITCH;
};
($event->type eq 'entity') && do {
my $entity = $event->data; # An object of class SGMLS_Entity
[[your code for an external entity]]
last SWITCH;
};
($event->type eq 'start_subdoc') && do {
my $entity = $event->data; # An object of class SGMLS_Entity
[[your code for the beginning of a subdoc entity]]
last SWITCH;
};
($event->type eq 'end_subdoc') && do {
my $entity = $event->data; # An object of class SGMLS_Entity
[[your code for the end of a subdoc entity]]
last SWITCH;
};
($event->type eq 'conforming') && do {
[[your code for a conforming document]]
last SWITCH;
};
die "Internal error: unknown event type " . $event->type . "\n";
}
$event = $parse->next_event;
}
DESCRIPTION
The SGMLS package consists of several related classes: see "SGMLS", "SGMLS_Event", "SGMLS_Element", "SGMLS_Attribute", "SGMLS_Notation", and "SGMLS_Entity". All of these classes are available when you specify
use SGMLS;
Generally, the only object which you will create explicitly will belong to the SGMLS
class; all of the others will then be created automatically for you over the course of the parse. Much fuller documentation is available in the .sgml
files in the DOC/
directory of the SGMLS.pm
distribution.
The SGMLS
class
This class holds a single parse. When you create an instance of it, you specify a file handle as an argument (if you are reading the output of sgmls or nsgmls from a pipe, the file handle will ordinarily be STDIN
):
my $parse = new SGMLS(STDIN);
The most important method for this class is next_event
, which reads and returns the next major event from the input stream. It is important to note that the SGMLS
class deals with most ESIS events itself: attributes and entity definitions, for example, are collected and stored automatically and invisibly to the user. The following list contains all of the methods for the SGMLS
class:
next_event()
: Return anSGMLS_Event
object containing the next major event from the SGML parse.element()
: Return anSGMLS_Element
object containing the current element in the document.file()
: Return a string containing the name of the current SGML source file (this will work only if the-l
option was given to sgmls or nsgmls).line()
: Return a string containing the current line number from the source file (this will work only if the-l
option was given to sgmls or nsgmls).appinfo()
: Return a string containing theAPPINFO
parameter (if any) from the SGML declaration.notation(NNAME)
: Return anSGMLS_Notation
object representing the notation namedNNAME
. With newer versions of nsgmls, all notations are available; otherwise, only the notations which are actually used will be available.entity(ENAME)
: Return anSGMLS_Entity
object representing the entity namedENAME
. With newer versions of nsgmls, all entities are available; otherwise, only external data entities and internal entities used as attribute values will be available.ext()
: Return a reference to an associative array for user-defined extensions.
The SGMLS_Event
class
This class holds a single major event, as generated by the next_event
method in the SGMLS
class. It uses the following methods:
type()
: Return a string describing the type of event: "start_element", "end_element", "cdata", "sdata", "re", "pi", "entity", "start_subdoc", "end_subdoc", and "conforming". See "SYNOPSIS", above, for the values associated with each of these.data()
: Return the data associated with the current event (if any). For "start_element" and "end_element", returns anSGMLS_ELement
object; for "entity", "start_subdoc", and "end_subdoc", returns anSGMLS_Entity
object; for "cdata", "sdata", and "pi", returns a string; and for "re" and "conforming", returns the empty string. See "SYNOPSIS", above, for an example of this method's use.key()
: Return a string key to the event, such as an element or entity name (otherwise, the same asdata()
).file()
: Return the current file name, as in theSGMLS
class.line()
: Return the current line number, as in theSGMLS
class.element()
: Return the current element, as in theSGMLS
class.parse()
: Return theSGMLS
object which generated the event.entity(ENAME)
: Look up an entity, as in theSGMLS
class.notation(ENAME)
: Look up a notation, as in theSGMLS
class.ext()
: Return a reference to an associative array for user-defined extensions.
The SGMLS_Element
class
This class is used for elements, and contains all associated information (such as the element's attributes). It recognises the following methods:
name()
: Return a string containing the name, or Generic Identifier, of the element, in upper case.parent()
: Return theSGMLS_Element
object for the element's parent (if any).parse()
: Return theSGMLS
object for the current parse.attributes()
: Return a reference to an associative array of attribute names andSGMLS_Attribute
structures. Attribute names will be all in upper case.attribute_names()
: Return an array of strings containing the names of all attributes defined for the current element, in upper case.attribute(ANAME)
: Return theSGMLS_Attribute
structure for the attributeANAME
.set_attribute(ATTRIB)
: Add theSGMLS_Attribute
objectATTRIB
to the current element, replacing any other attribute structure with the same name.in(GI)
: Returntrue
(ie. 1) if the stringGI
is the name of the current element's parent, orfalse
(ie. 0) if it is not.within(GI)
: Returntrue
(ie. 1) if the stringGI
is the name of any of the ancestors of the current element, orfalse
(ie. 0) if it is not.ext()
: Return a reference to an associative array for user-defined extensions.
The SGMLS_Attribute
class
Each instance of an attribute for each SGMLS_Element
is an object belonging to this class, which recognises the following methods:
name()
: Return a string containing the name of the current attribute, all in upper case.type()
: Return a string containing the type of the current attribute, all in upper case. Available types are "IMPLIED", "CDATA", "NOTATION", "ENTITY", and "TOKEN".value()
: Return the value of the current attribute, if any. This will be an empty string if the type is "IMPLIED", a string of some sort if the type is "CDATA" or "TOKEN" (if it is "TOKEN", you may want to split the string into a series of separate tokens), anSGMLS_Notation
object if the type is "NOTATION", or anSGMLS_Entity
object if the type is "ENTITY". Note that if the value is "CDATA", it will not have escape sequences for 8-bit characters, record ends, or SDATA processed -- that will be your responsibility.is_implied()
: Returntrue
(ie. 1) if the value of the attribute is implied, orfalse
(ie. 0) if it is specified in the document.set_type(TYPE)
: Change the type of the attribute to the stringTYPE
(which should be all in upper case). Available types are "IMPLIED", "CDATA", "NOTATION", "ENTITY", and "TOKEN".set_value(VALUE)
: Change the value of the attribute toVALUE
, which may be a string, anSGMLS_Entity
object, or anSGMLS_Notation
subject, depending on the attribute's type.ext()
: Return a reference to an associative array available for user-defined extensions.
The SGMLS_Notation
class
All declared notations appear as objects belonging to this class, which recognises the following methods:
name()
: Return a string containing the name of the notation.sysid()
: Return a string containing the system identifier of the notation, if any.pubid()
: Return a string containing the public identifier of the notation, if any.ext()
: Return a reference to an associative array available for user-defined extensions.
The SGMLS_Entity
class
All declared entities appear as objects belonging to this class, which recognises the following methods:
name()
: Return a string containing the name of the entity, in mixed case.type()
: Return a string containing the type of the entity, in upper case. Available types are "CDATA", "SDATA", "NDATA" (external entities only), "SUBDOC", "PI" (newer versions of nsgmls only), or "TEXT" (newer versions of nsgmls only).value()
: Return a string containing the value of the entity, if it is internal.sysid()
: Return a string containing the system identifier of the entity (if any), if it is external.pubid()
: Return a string containing the public identifier of the entity (if any), if it is external.filenames()
: Return an array of strings containing any file names generated from the identifiers, if the entity is external.notation()
: Return theSGMLS_Notation
object associated with the entity, if it is external.data_attributes()
: Return a reference to an associative array of data attribute names (in upper case) and the associatedSGMLS_Attribute
objects for the current entity.data_attribute_names()
: Return an array of data attribute names (in upper case) for the current entity.data_attribute(ANAME)
: Return theSGMLS_Attribute
object for the data attribute namedANAME
for the current entity.set_data_attribute(ATTRIB)
: Add theSGMLS_Attribute
objectATTRIB
to the current entity, replacing any other data attribute with the same name.ext()
: Return a reference to an associative array for user-defined extensions.
AUTHOR AND COPYRIGHT
Copyright 1994 and 1995 by David Megginson, dmeggins@aix1.uottawa.ca
. Distributed under the terms of the Gnu General Public License (version 2, 1991) -- see the file COPYING
which is included in the SGMLS.pm distribution.
SEE ALSO:
SGMLS::Output and SGMLS::Refs.
12 POD Errors
The following errors were encountered while parsing the POD:
- Around line 117:
'=item' outside of any '=over'
- Around line 148:
You forgot a '=back' before '=head2'
- Around line 154:
'=item' outside of any '=over'
- Around line 191:
You forgot a '=back' before '=head2'
- Around line 197:
'=item' outside of any '=over'
- Around line 232:
You forgot a '=back' before '=head2'
- Around line 237:
'=item' outside of any '=over'
- Around line 270:
You forgot a '=back' before '=head2'
- Around line 275:
'=item' outside of any '=over'
- Around line 287:
You forgot a '=back' before '=head2'
- Around line 292:
'=item' outside of any '=over'
- Around line 333:
You forgot a '=back' before '=head1'