NAME
CommonMark::Node - Node of the CommonMark parse tree
SYNOPSIS
my $html = $node->render(format => 'html');
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
render
my $result = $node->render(
format => $string,
sourcepos => $bool, # Optional
hardbreaks => $bool, # Optional
nobreaks => $bool, # Optional
unsafe => $bool, # Optional
width => $int, # Optional
);
Convenience function to render documents. Supported format
s are 'html'
, 'xml'
, 'man'
, 'commonmark'
, and 'latex'
.
The width
specifies the number of characters at which lines are broken, and is passed to renderers that support it. A value of 0 disables line wrapping. The default is 0.
The remaining options enable the respective render options:
sourcepos
hardbreaks
unsafe
nobreaks
safe
(no-op as of libcmark 0.29)
render_*
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 render options. It may be omitted and defaults to OPT_DEFAULT
.
$width
specifies the number of characters at which lines are broken. A value of 0 disables line wrapping. The default is 0.
Render options
Render options can be imported from CommonMark with tag opt
.
use CommonMark qw(:opt);
OPT_SOURCEPOS
-
Adds information about line numbers in the source file to the XML and HTML formats.
OPT_HARDBREAKS
-
Translates "softbreak" nodes (typically corresponding to newlines in the input) to hard line breaks. This is only supported by some renderers. The HTML renderer, for example, generates a
<br />
instead of a newline character. OPT_NOBREAKS
-
Translates "softbreak" nodes to spaces. Requires libcmark 0.26 or higher.
OPT_UNSAFE
-
Only affects the HTML renderer. It allows raw HTML blocks and some dangerous links.
OPT_OPT_SAFE
-
Replaces raw HTML with a placeholder HTML comment. This option has no effect with libcmark 0.29 or higher, where "Safe" mode is the default.
See the documentation of libcmark for a more detailed explanation of the render options.
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 moved to its new position.
These methods may die on failure, for example if the document structure is violated.
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.