NAME
CommonMark::Node - Node of the CommonMark parse tree
SYNOPSIS
my $html = $node->render(
format => 'html',
safe => 1,
);
my $header = $doc->first_child;
my $level = $header->get_header_level;
my $paragraph = $header->next;
my $link = CommonMark::Node->new(CommonMark::NODE_LINK);
$link->set_url('http://example.com/');
my $text = CommonMark::Node->new(CommonMark::NODE_TEXT);
$text->set_literal('link text');
$link->append_child($link_text);
$paragraph->append_child($link);
$doc->render_html;
DESCRIPTION
CommonMark::Node
represents a node of the parse tree.
new
my $node = CommonMark::Node->new($type);
Creates a new node of type $type
. See "Node types" for a list of types. Note that the node creation functions provide a more powerful interface.
Rendering
my $result = $node->render(
format => $string,
sourcepos => $bool, # Optional
hardbreaks => $bool, # Optional
nobreaks => $bool, # Optional
safe => $bool, # Optional
width => $int, # Optional
);
Convenience function to render documents. Supported formats are 'html'
, 'xml'
, 'man'
, 'commonmark'
, and 'latex'
.
sourcepos
, hardbreaks
, nobreaks
, and safe
enable the respective render options.
width
is passed to renderers that support it.
my $html = $node->render_html( [$options] )
my $xml = $node->render_xml( [$options] )
my $man = $node->render_man( [$options], [$width] )
my $md = $node->render_commonmark( [$options], [$width] )
my $latex = $node->render_latex( [$options], [$width] )
These methods render the contents of the node in the respective format.
$options
is a bit field created by ORing the following constants:
CommonMark::OPT_DEFAULT => 0
CommonMark::OPT_SOURCEPOS
CommonMark::OPT_HARDBREAKS
CommonMark::OPT_SAFE
CommonMark::OPT_NOBREAKS
Render options can be imported from CommonMark with tag opt
.
use CommonMark qw(:opt);
$options
may be omitted and defaults to OPT_DEFAULT
. See the documentation of libcmark for more details.
SOURCEPOS
adds information about line numbers in the source file to the XML and HTML formats.
HARDBREAKS
translates newlines in the input to line breaks in the output. This is only supported by some renderers. The HTML renderer, for example, generates a <br>
.
NOBREAKS
translates newlines in the input to spaces. Requires libcmark 0.25 or higher.
SAFE
only affects the HTML renderer. It suppresses raw HTML blocks and some dangerous links.
$width
specifies the number of characters at which lines are broken. A value of 0 disables line wrapping. The default is 0.
Accessors
# Integer values
my $int = $node->get_type;
my $int = $node->get_header_level;
my $int = $node->get_list_type;
my $int = $node->get_list_delim;
my $int = $node->get_list_start;
my $int = $node->get_list_tight;
my $int = $node->get_start_line;
my $int = $node->get_start_column;
my $int = $node->get_end_line;
my $int = $node->get_end_column;
$node->set_header_level($int);
$node->set_list_type($int);
$node->set_list_delim($int);
$node->set_list_start($int);
$node->set_list_tight($int);
# String values
my $string = $node->get_type_string;
my $string = $node->get_literal;
my $string = $node->get_title;
my $string = $node->get_url;
my $string = $node->get_fence_info;
my $string = $node->get_on_enter;
my $string = $node->get_on_exit;
$node->set_literal($string);
$node->set_title($string);
$node->set_url($string);
$node->set_fence_info($string);
$node->set_on_enter($string);
$node->set_on_exit($string);
Various accessors to get and set integer and string values of a node. Not all values are supported by every type of node. Getters return 0
or undef
for unsupported values. Setters die on failure.
See "Constants" for a list of constants used for node types, list types, and list delimiters.
Tree traversal
my $iterator = $node->iterator;
Creates a new CommonMark::Iterator to walk through the descendants of the node.
my $next = $node->next;
my $prev = $node->previous;
my $parent = $node->parent;
my $child = $node->first_child;
my $child = $node->last_child;
These methods return the respective node in the tree structure.
Tree manipulation
$node->unlink;
$node->replace($other);
$node->insert_before($other);
$node->insert_after($other);
$node->prepend_child($other);
$node->append_child($other);
unlink
removes a node and all its descendants from the tree.
replace
replaces $node
with $other
, unlinking $node
.
insert_before
and insert_after
insert the $other
node before or after $node
. append_child
and prepend_child
append or prepend $other
to the children of $node
.
$other
is unlinked before it is inserted into its new position.
These methods may die on failure.
Constants
Node types
CommonMark::NODE_NONE => 0
CommonMark::NODE_DOCUMENT
CommonMark::NODE_BLOCK_QUOTE
CommonMark::NODE_LIST
CommonMark::NODE_ITEM
CommonMark::NODE_CODE_BLOCK
CommonMark::NODE_HTML_BLOCK
CommonMark::NODE_CUSTOM_BLOCK
CommonMark::NODE_PARAGRAPH
CommonMark::NODE_HEADING
CommonMark::NODE_THEMATIC_BREAK
CommonMark::NODE_TEXT
CommonMark::NODE_SOFTBREAK
CommonMark::NODE_LINEBREAK
CommonMark::NODE_CODE
CommonMark::NODE_HTML_INLINE
CommonMark::NODE_CUSTOM_INLINE
CommonMark::NODE_EMPH
CommonMark::NODE_STRONG
CommonMark::NODE_LINK
CommonMark::NODE_IMAGE
Node types can be imported from CommonMark with tag node
.
use CommonMark qw(:node);
List types
CommonMark::NO_LIST => 0
CommonMark::BULLET_LIST
CommonMark::ORDERED_LIST
List types can be imported from CommonMark with tag list
.
use CommonMark qw(:list);
Delimiter types for ordered lists
CommonMark::NO_DELIM => 0
CommonMark::PERIOD_DELIM
CommonMark::PAREN_DELIM
Delimiter types can be imported from CommonMark with tag delim
.
use CommonMark qw(:delim);
COPYRIGHT
This software is copyright (C) by Nick Wellnhofer.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.