Module: Metanorma::Standoc::Review
- Included in:
- Cleanup
- Defined in:
- lib/metanorma/cleanup/review.rb
Instance Method Summary collapse
-
#available_bookmark_destination(node) ⇒ Object
we know node is a block: dig for a place bookmark can go.
- #find_review_sibling(children, index, direction = :previous) ⇒ Object
- #first_non_stem_text(ret) ⇒ Object
- #review_cleanup(xmldoc) ⇒ Object
- #review_insert_bookmark(review) ⇒ Object
- #review_set_location(review) ⇒ Object
Instance Method Details
#available_bookmark_destination(node) ⇒ Object
we know node is a block: dig for a place bookmark can go
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/metanorma/cleanup/review.rb', line 26 def available_bookmark_destination(node) ret = case node.name when "title", "name", "p" then node when "sourcecode" then node.at(".//name") when "admonition", "note", "example", "li", "quote", "dt", "dd", "permission", "requirement", "recommendation" node.at(".//p | .//name") || node when "formula" node.at(".//p | .//name | .//dt") when "ol", "ul" then node.at(".//p | .//name") || node.at("./li") when "dl" then node.at(".//p | .//name") || node.at("./dt | ./dd") when "table" then node.at(".//td[text()] | .//th[text()]") end or return nil first_non_stem_text(ret) end |
#find_review_sibling(children, index, direction = :previous) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/metanorma/cleanup/review.rb', line 53 def find_review_sibling(children, index, direction = :previous) range = if direction == :previous then (index - 1).downto(0) else (index + 1).upto(children.size - 1) end range.each do |i| node = children[i] if node.element? && !node.text.empty? && node.text.strip != "" && ret = available_bookmark_destination(node) return ret end end nil end |
#first_non_stem_text(ret) ⇒ Object
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/metanorma/cleanup/review.rb', line 42 def first_non_stem_text(ret) first_non_stem_text = nil ret.traverse do |n| if n.text? && n.ancestors("stem").empty? && !n.text.strip.empty? first_non_stem_text = n break end end first_non_stem_text end |
#review_cleanup(xmldoc) ⇒ Object
4 5 6 7 8 9 10 11 12 |
# File 'lib/metanorma/cleanup/review.rb', line 4 def review_cleanup(xmldoc) reviews = xmldoc.xpath("//annotation") reviews.empty? and return ctr = xmldoc.root.add_child("<annotation-container/>").first reviews.each do |r| review_set_location(r) ctr << r end end |
#review_insert_bookmark(review) ⇒ Object
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/metanorma/cleanup/review.rb', line 14 def review_insert_bookmark(review) parent = review.parent children = parent.children index = children.index(review) x = find_review_sibling(children, index, :previous) || find_review_sibling(children, index, :following) ins = x || review.before("<p> </p>").previous.at(".//text()") ins.previous = "<bookmark/>" ins.previous end |
#review_set_location(review) ⇒ Object
67 68 69 70 71 72 73 74 75 |
# File 'lib/metanorma/cleanup/review.rb', line 67 def review_set_location(review) unless review["from"] bookmark = review_insert_bookmark(review) add_id(bookmark) bookmark["anchor"] = bookmark["id"] review["from"] = bookmark["id"] end review["to"] ||= review["from"] end |