class Node
Nested
Definitions
def walk(&block)
Public: An iterator that "walks the tree," descending into children recursively.
blk - A Proc
representing the action to take for each child
Implementation
def walk(&block)
return enum_for(:walk) unless block_given?
yield self
each do |child|
child.walk(&block)
end
end
def to_html(flags: DEFAULT, extensions: [])
Public: Convert the node to an HTML string.
options - A Symbol
or Array of Symbol
s indicating the render options
extensions - An Array of Symbol
s indicating the extensions to use
Returns a String
.
Implementation
def to_html(flags: DEFAULT, extensions: [])
_render_html(flags, extensions).force_encoding('utf-8')
end
def to_commonmark(flags: DEFAULT, width: 0)
Public: Convert the node to a CommonMark string.
options - A Symbol
or Array of Symbol
s indicating the render options
width - Column to wrap the output at
Returns a String
.
Implementation
def to_commonmark(flags: DEFAULT, width: 0)
_render_commonmark(flags, width).force_encoding('utf-8')
end
def to_plaintext(flags: DEFAULT, width: 0)
Public: Convert the node to a plain text string.
options - A Symbol
or Array of Symbol
s indicating the render options
width - Column to wrap the output at
Returns a String
.
Implementation
def to_plaintext(flags: DEFAULT, width: 0)
_render_plaintext(flags, width).force_encoding('utf-8')
end
def each
Public: Iterate over the children (if any) of the current pointer.
Implementation
def each
return enum_for(:each) unless block_given?
child = first_child
while child
next_child = child.next
yield child
child = next_child
end
end
def delete_until
Delete all nodes until the block returns true.
Signature
-
returns
Markly::Node
the node that returned true.
Implementation
def delete_until
current = self
while current
return current if yield(current)
next_node = current.next
current.delete
current = next_node
end
end
def replace_section(new_node, replace_header: true, remove_subsections: true)
Replace a section (header + content) with a new node.
Signature
-
parameter
title
String
the title of the section to replace.
-
parameter
new_node
Markly::Node
the node to replace the section with.
-
parameter
replace_header
Boolean
whether to replace the header itself or not.
-
parameter
remove_subsections
Boolean
whether to remove subsections or not.
Implementation
def replace_section(new_node, replace_header: true, remove_subsections: true)
# Delete until the next heading:
self.next&.delete_until do |node|
node.type == :header && (!remove_subsections || node.header_level <= self.header_level)
end
self.append_after(new_node) if new_node
self.delete if replace_header
end
def append_after(node)
Append the given node after the current node.
It's okay to provide a document node, it's children will be appended.
Signature
-
parameter
node
Markly::Node
the node to append.
Implementation
def append_after(node)
if node.type == :document
node = node.first_child
end
current = self
while node
next_node = node.next
current.insert_after(node)
current = node
node = next_node
end
end
def extract_children
Extract the children as a fragment.
Signature
-
returns
Markly::Node
the fragment.
Implementation
def extract_children
fragment = Markly::Node.new(:custom)
while child = self.first_child
fragment.append_child(child)
end
fragment
end