class Docx::NewlineReplacer

Attributes

doc[R]

Public Class Methods

new(doc) click to toggle source
# File lib/docx/newline_replacer.rb, line 3
def initialize(doc)
  @doc = doc
end

Public Instance Methods

replace() click to toggle source
# File lib/docx/newline_replacer.rb, line 7
def replace
  walk(doc.root)
end

Private Instance Methods

line_break_node() click to toggle source
# File lib/docx/newline_replacer.rb, line 35
def line_break_node
  br = REXML::Element.new('w:br')
end
list_of_new_nodes(node) click to toggle source
# File lib/docx/newline_replacer.rb, line 39
def list_of_new_nodes(node)
   node.to_s.split("\n")
    .map{|str| str_to_text_node(str)}
    .flat_map{ |txt| [txt, line_break_node] }[0..-2]
end
replace_text_node(parent, node) click to toggle source
# File lib/docx/newline_replacer.rb, line 28
def replace_text_node(parent, node)
  list_of_new_nodes(node).reverse.each do |new_node|
    parent.insert_after(node, new_node)
  end
  node.remove
end
replace_text_node_or_continue_walking(node, child) click to toggle source
# File lib/docx/newline_replacer.rb, line 20
def replace_text_node_or_continue_walking(node, child)
  if child.node_type == :text
    replace_text_node(node, child)
  else
    walk(child)
  end
end
str_to_text_node(str) click to toggle source
# File lib/docx/newline_replacer.rb, line 45
def str_to_text_node(str)
  respect_whitespace = true
  parent = nil
  raw_text = true
  REXML::Text.new(str, respect_whitespace, parent, raw_text)
end
walk(node) click to toggle source
# File lib/docx/newline_replacer.rb, line 14
def walk(node)
  node.children.each do |child|
    replace_text_node_or_continue_walking(node, child)
  end
end