Module: IsoDoc::HtmlFunction::Footnotes
- Included in:
- IsoDoc::HeadlessHtmlConvert, IsoDoc::HtmlConvert, PdfConvert
- Defined in:
- lib/isodoc/html_function/footnotes.rb
Instance Method Summary collapse
- #footnote_parse(node, out) ⇒ Object
- #footnotes(div) ⇒ Object
- #get_table_ancestor_id(node) ⇒ Object
- #make_footnote(node, fnote) ⇒ 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
Move to Presentation XML, as <fmt-footnote>: it’s a footnote body.
-
#table_footnote_parse(node, out) ⇒ Object
@seen_footnote: do not output footnote text if we have already seen it for this table.
Instance Method Details
#footnote_parse(node, out) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/isodoc/html_function/footnotes.rb', line 70 def footnote_parse(node, out) return table_footnote_parse(node, out) if (@in_table || @in_figure) && !node.ancestors.map(&:name).include?("fmt-name") fn = node["reference"] || UUIDTools::UUID.random_create.to_s attrs = { class: "FootnoteRef", href: "#fn:#{fn}" } out.a **attrs do |a| a.sup { |sup| sup << fn } end make_footnote(node, fn) end |
#footnotes(div) ⇒ Object
4 5 6 7 8 |
# File 'lib/isodoc/html_function/footnotes.rb', line 4 def footnotes(div) return if @footnotes.empty? @footnotes.each { |fn| div.parent << fn } end |
#get_table_ancestor_id(node) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/isodoc/html_function/footnotes.rb', line 46 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, fnote) ⇒ Object
82 83 84 85 86 87 88 89 |
# File 'lib/isodoc/html_function/footnotes.rb', line 82 def make_footnote(node, fnote) return if @seen_footnote.include?(fnote) @in_footnote = true @footnotes << make_generic_footnote_text(node, fnote) @in_footnote = false @seen_footnote << fnote end |
#make_generic_footnote_text(node, fnid) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/isodoc/html_function/footnotes.rb', line 38 def make_generic_footnote_text(node, fnid) noko do |xml| xml.aside id: "fn:#{fnid}", class: "footnote" do |div| node.children.each { |n| parse(n, div) } end end.join("\n") end |
#make_table_footnote_link(out, fnid, fnref) ⇒ Object
10 11 12 13 14 15 |
# File 'lib/isodoc/html_function/footnotes.rb', line 10 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
17 18 19 20 21 22 23 24 25 |
# File 'lib/isodoc/html_function/footnotes.rb', line 17 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
Move to Presentation XML, as <fmt-footnote>: it’s a footnote body
28 29 30 31 32 33 34 35 36 |
# File 'lib/isodoc/html_function/footnotes.rb', line 28 def make_table_footnote_text(node, fnid, fnref) attrs = { id: "fn:#{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 |
#table_footnote_parse(node, out) ⇒ Object
@seen_footnote: do not output footnote text if we have already seen it for this table
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/isodoc/html_function/footnotes.rb', line 56 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) return if @seen_footnote.include?(tid + fn) @in_footnote = true out.aside class: "footnote" do |a| a << make_table_footnote_text(node, tid + fn, fn) end @in_footnote = false @seen_footnote << (tid + fn) end |