NAME

PurpleWiki::StructuralNode - Structural node object

SYNOPSIS

use PurpleWiki::InlineNode;
use PurpleWiki::StructuralNode;

# Create a 'section' node
my $node = PurpleWiki::StructuralNode->new(type=>'section');

# Insert a child node, and assign it to $currentNode
my $currentNode = $node->insertChild;

# Set current node's type to 'h'
$currentNode->type('h');

# Set node content to a new inline node of type 'text' and of
# content 'Hello, world!'
$currentNode->content(
    [PurpleWiki::InlineNode->new(type=>'text',
                                 content=>'Hello, world!')] );

# The resulting tree is:
# 
# SECTION
#    |
#    +--- H: [TEXT: Hello, world!]
#
# where "[TEXT: Hello, world!]" refers to an inline node of type
# 'text' and content 'Hello, world!'.

DESCRIPTION

Structural nodes are the main structural component of PurpleWiki trees, representing document constructs such as sections, paragraphs, and list items. The basic data structure is:

PurpleWiki::StructuralNode = {
  type     => document|section|h|p|pre|indent|ul|ol|li|dl|dt|dd
  id       => int
  content  => [PurpleWiki::InlineNode, ...]
  parent   => PurpleWiki::StructuralNode
  children => [PurpleWiki::StructuralNode, ...]
}

The document, section, indent, ul, ol, and dl nodes types are structural-only; their content field will always be undefined. Only the root node of a tree should be of type document. The content field is a reference to a list of inline nodes, and represents the content of the structural node.

BNF CONSTRAINTS

PurpleWiki does not currently enforce constraints for structural node types. For example, you can create a section node with content, or a p node with children, even though neither of those are technically legal.

The BNF constraints for structural nodes are:

document ::= section
section ::= h|p|indent|ul|ol|dl|pre
indent ::= p|indent
ul ::= li|ul|ol|dl
ol ::= li|ol|ul|dl
dl ::= dt dd|dl|ul|ol

METHODS

new(%options)

Constructor. Blesses hash with fields type, id, and content. Values for these fields may be passed as parameters via %options.

insertChild(%options)

Creates a new structural node and pushes it onto the current node's list of children. Returns the value of the new child node. You can set the child node's fields via the %options parameter, which will be passed onto the constructor.

parent()

Returns the parent node.

children()

Returns the reference to the list of children.

Accessors/Mutators

type()
id()
content()

AUTHORS

Chris Dent, <cdent@blueoxen.org>

Eugene Eric Kim, <eekim@blueoxen.org>

SEE ALSO

PurpleWiki::Tree, PurpleWiki::InlineNode.