module Kenma::Iteration

Constants

KENMA_ITERATION_MACRO_EMPTY_NODE

Public Instance Methods

convert_node(node, parent = nil, &block) click to toggle source
# File lib/kenma/iteration.rb, line 28
def convert_node(node, parent = nil, &block)
  return node unless node.node?

  children = node.children
  converted_children = children
    .map { |child| convert_node(child, node) { |node, parent| block.call(node, parent) || KENMA_ITERATION_MACRO_EMPTY_NODE } }
    .reject { |it| KENMA_ITERATION_MACRO_EMPTY_NODE == it }

  if converted_children == children
    node
  else
    [node.type, converted_children]
  end.then { |node| block.call(node, parent) }
end
each_node(node, &block) click to toggle source
# File lib/kenma/iteration.rb, line 14
def each_node(node, &block)
  return Enumerator.new { |y|
    each_node(node) { |node|
      y << node
    }
  } unless block
  return node unless node.node?

  node.children.map { |node|
    each_node(node) { |child| block.call(child, node) }
  }
  block.call(node) if block
end
find_convert_node(node, pat, &block) click to toggle source
# File lib/kenma/iteration.rb, line 43
def find_convert_node(node, pat, &block)
  convert_node(node) { |node|
    if result = pat === node
      block.call(node, **result)
    else
      node
    end
  }
end