Module: IsoDoc::WordFunction::Footnotes
- Included in:
- IsoDoc::WordConvert
- Defined in:
- lib/isodoc/word_function/footnotes.rb
Instance Method Summary collapse
- #bookmarkid ⇒ Object
- #footnote_parse(node, out) ⇒ Object
- #footnotes(div) ⇒ Object
- #get_table_ancestor_id(node) ⇒ Object
- #make_footnote(node, footnote) ⇒ Object
- #make_generic_footnote_text(node, fnid) ⇒ Object
- #make_table_footnote_link(out, fnid, fnref) ⇒ Object
- #make_table_footnote_target(out, fnid, fnref) ⇒ Object
- #make_table_footnote_text(node, fnid, fnref) ⇒ Object
- #seen_footnote_parse(_node, out, footnote) ⇒ Object
- #table_footnote_parse(node, out) ⇒ Object
Instance Method Details
#bookmarkid ⇒ Object
| 4 5 6 7 8 9 10 11 | # File 'lib/isodoc/word_function/footnotes.rb', line 4 def bookmarkid ret = "X" until !@bookmarks_allocated[ret] ret = Random.rand(1000000000) end @bookmarks_allocated[ret] = true sprintf "%09d", ret end | 
#footnote_parse(node, out) ⇒ Object
| 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | # File 'lib/isodoc/word_function/footnotes.rb', line 84 def footnote_parse(node, out) return table_footnote_parse(node, out) if (@in_table || @in_figure) && !node.ancestors.map(&:name).include?("name") fn = node["reference"] || UUIDTools::UUID.random_create.to_s return seen_footnote_parse(node, out, fn) if @seen_footnote.include?(fn) @fn_bookmarks[fn] = bookmarkid out.span style: "mso-bookmark:_Ref#{@fn_bookmarks[fn]}" do |s| s.a class: "FootnoteRef", "epub:type": "footnote", href: "#ftn#{fn}" do |a| a.sup { |sup| sup << fn } end end @in_footnote = true @footnotes << make_generic_footnote_text(node, fn) @in_footnote = false @seen_footnote << fn end | 
#footnotes(div) ⇒ Object
| 13 14 15 16 17 | # File 'lib/isodoc/word_function/footnotes.rb', line 13 def footnotes(div) return if @footnotes.empty? @footnotes.each { |fn| div.parent << fn } end | 
#get_table_ancestor_id(node) ⇒ Object
| 54 55 56 57 58 59 | # File 'lib/isodoc/word_function/footnotes.rb', line 54 def get_table_ancestor_id(node) table = node.ancestors("table") || node.ancestors("figure") return UUIDTools::UUID.random_create.to_s if table.empty? table.last["id"] end | 
#make_footnote(node, footnote) ⇒ Object
| 104 105 106 107 108 109 110 111 | # File 'lib/isodoc/word_function/footnotes.rb', line 104 def make_footnote(node, footnote) return if @seen_footnote.include?(footnote) @in_footnote = true @footnotes << make_generic_footnote_text(node, footnote) @in_footnote = false @seen_footnote << footnote end | 
#make_generic_footnote_text(node, fnid) ⇒ Object
| 46 47 48 49 50 51 52 | # File 'lib/isodoc/word_function/footnotes.rb', line 46 def make_generic_footnote_text(node, fnid) noko do |xml| xml.aside id: "ftn#{fnid}" do |div| node.children.each { |n| parse(n, div) } end end.join("\n") end | 
#make_table_footnote_link(out, fnid, fnref) ⇒ Object
| 19 20 21 22 23 24 | # File 'lib/isodoc/word_function/footnotes.rb', line 19 def make_table_footnote_link(out, fnid, fnref) attrs = { href: "##{fnid}", class: "TableFootnoteRef" } out.a **attrs do |a| a << fnref end end | 
#make_table_footnote_target(out, fnid, fnref) ⇒ Object
| 26 27 28 29 30 31 32 33 34 | # File 'lib/isodoc/word_function/footnotes.rb', line 26 def make_table_footnote_target(out, fnid, fnref) attrs = { id: fnid, class: "TableFootnoteRef" } out.span do |s| out.span **attrs do |a| a << fnref end insert_tab(s, 1) end end | 
#make_table_footnote_text(node, fnid, fnref) ⇒ Object
| 36 37 38 39 40 41 42 43 44 | # File 'lib/isodoc/word_function/footnotes.rb', line 36 def make_table_footnote_text(node, fnid, fnref) attrs = { id: "ftn#{fnid}" } noko do |xml| xml.div **attr_code(attrs) do |div| make_table_footnote_target(div, fnid, fnref) node.children.each { |n| parse(n, div) } end end.join("\n") end | 
#seen_footnote_parse(_node, out, footnote) ⇒ Object
| 74 75 76 77 78 79 80 81 82 | # File 'lib/isodoc/word_function/footnotes.rb', line 74 def seen_footnote_parse(_node, out, footnote) out.span style: "mso-element:field-begin" out << " NOTEREF _Ref#{@fn_bookmarks[footnote]} \\f \\h" out.span style: "mso-element:field-separator" out.span class: "MsoFootnoteReference" do |s| s << footnote end out.span style: "mso-element:field-end" end | 
#table_footnote_parse(node, out) ⇒ Object
| 61 62 63 64 65 66 67 68 69 70 71 72 | # File 'lib/isodoc/word_function/footnotes.rb', line 61 def table_footnote_parse(node, out) fn = node["reference"] || UUIDTools::UUID.random_create.to_s tid = get_table_ancestor_id(node) make_table_footnote_link(out, tid + fn, fn) # do not output footnote text if we have already seen it for this table return if @seen_footnote.include?(tid + fn) @in_footnote = true out.aside { |a| a << make_table_footnote_text(node, tid + fn, fn) } @in_footnote = false @seen_footnote << (tid + fn) end |