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