class ODFWriter::Bookmark
Bookmark: replace bookmarks with given name
Public Instance Methods
replace!(doc, item = nil)
click to toggle source
replace!
# File lib/odf_writer/bookmark.rb, line 36 def replace!(doc, item = nil) nodes = find_bookmark_nodes(doc) return if nodes.blank? text = value(item) text = text.encode(universal_newline: true) text_node_array = text.split(/\n/).map{|a| Nokogiri::XML::Text.new(a, doc) } unless text_node_array.length == 1 text_node_array = text_node_array.inject([]) do |collector, node| collector << Nokogiri::XML::Node.new("line-break", doc) unless collector.empty? collector << node end end nodes.each do |node| case node.name when "bookmark" text_node_array.each {|tn| node.before(tn)} # # find bookmark # bm = "text:bookmark[@text:name='#{@name}']" bmn = doc.xpath(".//.//*[self::#{bm}]") # # delete bookmark # bmn.each {|b| b.remove } when "bookmark-start" text_node_array.each {|tn| node.before(tn)} # # find bookmark-start # bms = "text:bookmark-start[@text:name='#{@name}']" bmsn = doc.xpath(".//.//*[self::#{bms}]") # # find bookmark text # bme = "text:bookmark-end[@text:name='#{@name}']" bmen = doc.xpath(".//.//*[self::#{bme}]") # # find bookmark-end # bmn = doc.xpath(".//text()[preceding-sibling::#{bms} and following-sibling::#{bme}]") # # delete bookmark -start, text and -end # bmn.each {|b| b.remove } bmsn.each {|b| b.remove } bmen.each {|b| b.remove } end #case end #each end
Private Instance Methods
find_bookmark_nodes(doc)
click to toggle source
private
# File lib/odf_writer/bookmark.rb, line 105 def find_bookmark_nodes(doc) doc.xpath(".//*[self::text:bookmark[@text:name='#{@name}'] or self::text:bookmark-start[@text:name='#{@name}']]") end