Class PrototypicalNodeFactory
- All Implemented Interfaces:
Serializable
,NodeFactory
Text
, Remark
and
Tag
nodes.
Text and remark nodes are generated from prototypes accessed
via the textPrototype
and
remarkPrototype
properties respectively.
Tag nodes are generated as follows:
Prototype tags, in the form of undifferentiated tags, are held in a hash
table. On a request for a tag, the attributes are examined for the name
of the tag to be created. If a prototype of that name has been registered
(exists in the hash table), it is cloned and the clone is given the
characteristics (Attributes
, start and end position)
of the requested tag.
In the case that no tag has been registered under that name,
a generic tag is created from the prototype acessed via the
tagPrototype
property.
The hash table of registered tags can be automatically populated with
all the known tags from the org.htmlparser.tags
package when
the factory is constructed, or it can start out empty and be populated
explicitly.
Here is an example of how to override all text issued from
Text.toPlainTextString()
,
in this case decoding (converting character references),
which illustrates the use of setting the text prototype:
PrototypicalNodeFactory factory = new PrototypicalNodeFactory (); factory.setTextPrototype ( // create a inner class that is a subclass of TextNode new TextNode () { public String toPlainTextString() { String original = super.toPlainTextString (); return (org.htmlparser.util.Translate.decode (original)); } }); Parser parser = new Parser (); parser.setNodeFactory (factory);
Here is an example of using a custom link tag, in this case just printing the URL, which illustrates registering a tag:
class PrintingLinkTag extends LinkTag { public void doSemanticAction () throws ParserException { System.out.println (getLink ()); } } PrototypicalNodeFactory factory = new PrototypicalNodeFactory (); factory.registerTag (new PrintingLinkTag ()); Parser parser = new Parser (); parser.setNodeFactory (factory);
- See Also:
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionCreate a new factory with all tags registered.PrototypicalNodeFactory
(boolean empty) Create a new factory.Create a new factory with the given tag as the only registered tag.PrototypicalNodeFactory
(Tag[] tags) Create a new factory with the given tags registered. -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Clean out the registry.createRemarkNode
(Page page, int start, int end) Create a new remark node.createStringNode
(Page page, int start, int end) Create a new string node.createTagNode
(Page page, int start, int end, Vector attributes) Create a new tag node.Gets a tag from the registry.Get the object that is cloned to generate remark nodes.Get the list of tag names.Get the object that is cloned to generate tag nodes.Get the object that is cloned to generate text nodes.Adds a tag to the registry.void
registerTag
(Tag tag) Register a tag.Register all known tags in the tag package.Remove a tag from the registry.void
setRemarkPrototype
(Remark remark) Set the object to be used to generate remark nodes.void
setTagPrototype
(Tag tag) Set the object to be used to generate tag nodes.void
setTextPrototype
(Text text) Set the object to be used to generate text nodes.void
unregisterTag
(Tag tag) Unregister a tag.
-
Field Details
-
mText
The prototypical text node. -
mRemark
The prototypical remark node. -
mTag
The prototypical tag node. -
mBlastocyst
The list of tags to return. The list is keyed by tag name.
-
-
Constructor Details
-
PrototypicalNodeFactory
public PrototypicalNodeFactory()Create a new factory with all tags registered. Equivalent toPrototypicalNodeFactory(false)
. -
PrototypicalNodeFactory
public PrototypicalNodeFactory(boolean empty) Create a new factory.- Parameters:
empty
- Iftrue
, creates an empty factory, otherwise create a new factory with all tags registered.
-
PrototypicalNodeFactory
Create a new factory with the given tag as the only registered tag.- Parameters:
tag
- The single tag to register in the otherwise empty factory.
-
PrototypicalNodeFactory
Create a new factory with the given tags registered.- Parameters:
tags
- The tags to register in the otherwise empty factory.
-
-
Method Details
-
put
Adds a tag to the registry.- Parameters:
id
- The name under which to register the tag. For proper operation, the id should be uppercase so it will be matched by a Map lookup.tag
- The tag to be returned from acreateTagNode(org.htmlparser.lexer.Page, int, int, java.util.Vector)
call.- Returns:
- The tag previously registered with that id if any,
or
null
if none.
-
get
Gets a tag from the registry.- Parameters:
id
- The name of the tag to return.- Returns:
- The tag registered under the
id
name, ornull
if none.
-
remove
Remove a tag from the registry.- Parameters:
id
- The name of the tag to remove.- Returns:
- The tag that was registered with that
id
, ornull
if none.
-
clear
public void clear()Clean out the registry. -
getTagNames
Get the list of tag names.- Returns:
- The names of the tags currently registered.
-
registerTag
Register a tag. Registers the given tag under everyid
that the tag has (i.e. all names returned bytag.getIds()
.For proper operation, the ids are converted to uppercase so they will be matched by a Map lookup.
- Parameters:
tag
- The tag to register.
-
unregisterTag
Unregister a tag. Unregisters the given tag from everyid
the tag has.The ids are converted to uppercase to undo the operation of registerTag.
- Parameters:
tag
- The tag to unregister.
-
registerTags
Register all known tags in the tag package. Registers tags from thetag package
by callingregisterTag()
.- Returns:
- 'this' nodefactory as a convenience.
-
getTextPrototype
Get the object that is cloned to generate text nodes.- Returns:
- The prototype for
Text
nodes. - See Also:
-
setTextPrototype
Set the object to be used to generate text nodes. -
getRemarkPrototype
Get the object that is cloned to generate remark nodes.- Returns:
- The prototype for
Remark
nodes. - See Also:
-
setRemarkPrototype
Set the object to be used to generate remark nodes.- Parameters:
remark
- The prototype forRemark
nodes. Ifnull
the prototype is set to the default (RemarkNode
).- See Also:
-
getTagPrototype
Get the object that is cloned to generate tag nodes. Clones of this object are returned fromcreateTagNode(org.htmlparser.lexer.Page, int, int, java.util.Vector)
when no specific tag is found in the list of registered tags.- Returns:
- The prototype for
Tag
nodes. - See Also:
-
setTagPrototype
Set the object to be used to generate tag nodes. Clones of this object are returned fromcreateTagNode(org.htmlparser.lexer.Page, int, int, java.util.Vector)
when no specific tag is found in the list of registered tags. -
createStringNode
Create a new string node.- Specified by:
createStringNode
in interfaceNodeFactory
- Parameters:
page
- The page the node is on.start
- The beginning position of the string.end
- The ending position of the string.- Returns:
- A text node comprising the indicated characters from the page.
-
createRemarkNode
Create a new remark node.- Specified by:
createRemarkNode
in interfaceNodeFactory
- Parameters:
page
- The page the node is on.start
- The beginning position of the remark.end
- The ending positiong of the remark.- Returns:
- A remark node comprising the indicated characters from the page.
-
createTagNode
Create a new tag node. Note that the attributes vector contains at least one element, which is the tag name (standalone attribute) at position zero. This can be used to decide which type of node to create, or gate other processing that may be appropriate.- Specified by:
createTagNode
in interfaceNodeFactory
- Parameters:
page
- The page the node is on.start
- The beginning position of the tag.end
- The ending positiong of the tag.attributes
- The attributes contained in this tag.- Returns:
- A tag node comprising the indicated characters from the page.
-