Module: IsoDoc::Function::Blocks
- Included in:
- Common
- Defined in:
- lib/isodoc/function/reqt.rb,
lib/isodoc/function/blocks.rb,
lib/isodoc/function/blocks_example_note.rb
Constant Summary collapse
- EXAMPLE_TBL_ATTR =
{ class: "example_label", style: "width:82.8pt;padding:0 0 0 0;\ margin-left:0pt;vertical-align:top;" }.freeze
- EXAMPLE_TD_ATTR =
{ style: "vertical-align:top;padding:0;", class: "example" }.freeze
Instance Method Summary collapse
- #admonition_attrs(node) ⇒ Object
- #admonition_class(_node) ⇒ Object
- #admonition_name(node, _type) ⇒ Object
-
#admonition_name_in_first_para(node, div) ⇒ Object
code to allow name and first paragraph to be rendered in same block.
- #admonition_name_para_delim(para) ⇒ Object
- #admonition_name_parse(_node, div, name) ⇒ Object
-
#admonition_p_parse(node, div) ⇒ Object
code to allow name and first paragraph to be rendered in same block.
- #admonition_parse(node, out) ⇒ Object
- #admonition_parse1(node, div) ⇒ Object
- #annotation_parse(node, out) ⇒ Object
- #attribution_parse(node, out) ⇒ Object
- #block_body_first_elem(node) ⇒ Object
- #columnbreak_parse(node, out) ⇒ Object
- #cross_align_parse(node, out) ⇒ Object
- #div_parse(node, out) ⇒ Object
- #example_div_attr(node) ⇒ Object
-
#example_div_parse(node, out) ⇒ Object
used if we are boxing examples.
- #example_label(_node, div, name) ⇒ Object
- #example_parse(node, out) ⇒ Object
- #example_table_attr(node) ⇒ Object
- #example_table_parse(node, out) ⇒ Object
- #figure_attrs(node) ⇒ Object
- #figure_name_parse(_node, div, name) ⇒ Object
- #figure_parse(node, out) ⇒ Object
- #figure_parse1(node, out) ⇒ Object
- #formula_attrs(node) ⇒ Object
- #formula_parse(node, out) ⇒ Object
- #formula_parse1(node, out) ⇒ Object
- #keep_style(node) ⇒ Object
- #note_attrs(node) ⇒ Object
- #note_p_class ⇒ Object
- #note_p_parse(node, div) ⇒ Object
- #note_parse(node, out) ⇒ Object
- #note_parse1(node, div) ⇒ Object
- #para_attrs(node) ⇒ Object
- #para_class(node) ⇒ Object
- #para_parse(node, out) ⇒ Object
- #passthrough_parse(node, out) ⇒ Object
- #permission_parse(node, out) ⇒ Object
- #pre_parse(node, out) ⇒ Object
- #pseudocode_attrs(node) ⇒ Object
- #pseudocode_parse(node, out) ⇒ Object
- #quote_parse(node, out) ⇒ Object
- #recommendation_name(name, out) ⇒ Object
- #recommendation_parse(node, out) ⇒ Object
- #recommendation_parse1(node, out) ⇒ Object
- #reqt_attrs(node, klass) ⇒ Object
- #requirement_parse(node, out) ⇒ Object
- #source_parse(node, out) ⇒ Object
- #sourcecode_attrs(node) ⇒ Object
- #sourcecode_name_parse(_node, div, name) ⇒ Object
- #sourcecode_parse(node, out) ⇒ Object
- #sourcecode_parse1(node, div) ⇒ Object
- #starts_with_para?(node) ⇒ Boolean
- #svg_parse(node, out) ⇒ Object
- #toc_parse(node, out) ⇒ Object
Instance Method Details
#admonition_attrs(node) ⇒ Object
141 142 143 144 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 141 def admonition_attrs(node) attr_code(id: node["id"], class: admonition_class(node), style: keep_style(node), coverpage: node["coverpage"]) end |
#admonition_class(_node) ⇒ Object
133 134 135 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 133 def admonition_class(_node) "Admonition" end |
#admonition_name(node, _type) ⇒ Object
137 138 139 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 137 def admonition_name(node, _type) node&.at(ns("./fmt-name")) end |
#admonition_name_in_first_para(node, div) ⇒ Object
code to allow name and first paragraph to be rendered in same block
162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 162 def admonition_name_in_first_para(node, div) name = node.at(ns("./fmt-name")) para = node.at(ns("./p")) div.p do |p| if name = admonition_name(node, node["type"])&.remove name.children.each { |n| parse(n, p) } admonition_name_para_delim(p) # TODO to Presentation XML end para.children.each { |n| parse(n, p) } end para.xpath("./following-sibling::*").each { |n| parse(n, div) } end |
#admonition_name_para_delim(para) ⇒ Object
175 176 177 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 175 def admonition_name_para_delim(para) insert_tab(para, 1) end |
#admonition_name_parse(_node, div, name) ⇒ Object
127 128 129 130 131 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 127 def admonition_name_parse(_node, div, name) div.p class: "AdmonitionTitle", style: "text-align:center;" do |p| children_parse(name, p) end end |
#admonition_p_parse(node, div) ⇒ Object
code to allow name and first paragraph to be rendered in same block
157 158 159 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 157 def admonition_p_parse(node, div) admonition_parse1(node, div) end |
#admonition_parse(node, out) ⇒ Object
146 147 148 149 150 151 152 153 154 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 146 def admonition_parse(node, out) out.div **admonition_attrs(node) do |div| if starts_with_para?(node) admonition_p_parse(node, div) else admonition_parse1(node, div) end end end |
#admonition_parse1(node, div) ⇒ Object
179 180 181 182 183 184 185 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 179 def admonition_parse1(node, div) name = admonition_name(node, node["type"]) if name admonition_name_parse(node, div, name) end node.children.each { |n| parse(n, div) unless n.name == "fmt-name" } end |
#annotation_parse(node, out) ⇒ Object
84 85 86 87 88 89 90 |
# File 'lib/isodoc/function/blocks.rb', line 84 def annotation_parse(node, out) dl = node.at(ns("./dl")) or return @sourcecode = false out.div class: "annotation" do |div| parse(dl, div) end end |
#attribution_parse(node, out) ⇒ Object
141 142 143 144 145 |
# File 'lib/isodoc/function/blocks.rb', line 141 def attribution_parse(node, out) out.div class: "QuoteAttribution" do |d| node.children.each { |n| parse(n, d) } end end |
#block_body_first_elem(node) ⇒ Object
57 58 59 60 61 62 63 64 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 57 def block_body_first_elem(node) node.elements.each do |n| %w(title fmt-title fmt-xref-label fmt-name name) .include?(n.name) and next return n end nil end |
#columnbreak_parse(node, out) ⇒ Object
191 |
# File 'lib/isodoc/function/blocks.rb', line 191 def columnbreak_parse(node, out); end |
#cross_align_parse(node, out) ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/isodoc/function/blocks.rb', line 179 def cross_align_parse(node, out) out.table do |t| t.tbody do |b| node.xpath(ns("./align-cell")).each do |c| b.td do |td| c.children.each { |n| parse(n, td) } end end end end end |
#div_parse(node, out) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/isodoc/function/reqt.rb', line 41 def div_parse(node, out) out.div **reqt_attrs(node, node["type"]) do |t| node.children.each do |n| parse(n, t) end end end |
#example_div_attr(node) ⇒ Object
15 16 17 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 15 def example_div_attr(node) attr_code(id: node["id"], class: "example", style: keep_style(node)) end |
#example_div_parse(node, out) ⇒ Object
used if we are boxing examples
20 21 22 23 24 25 26 27 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 20 def example_div_parse(node, out) out.div **example_div_attr(node) do |div| example_label(node, div, node.at(ns("./fmt-name"))) node.children.each do |n| parse(n, div) unless n.name == "fmt-name" end end end |
#example_label(_node, div, name) ⇒ Object
4 5 6 7 8 9 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 4 def example_label(_node, div, name) name.nil? and return div.p class: "example-title" do |_p| name.children.each { |n| parse(n, div) } end end |
#example_parse(node, out) ⇒ Object
53 54 55 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 53 def example_parse(node, out) example_div_parse(node, out) end |
#example_table_attr(node) ⇒ Object
29 30 31 32 33 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 29 def example_table_attr(node) attr_code(id: node["id"], class: "example", style: "border-collapse:collapse;border-spacing:0;" \ "#{keep_style(node)}") end |
#example_table_parse(node, out) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 38 def example_table_parse(node, out) out.table **example_table_attr(node) do |t| t.tr do |tr| tr.td **EXAMPLE_TBL_ATTR do |td| example_label(node, td, node.at(ns("./fmt-name"))) end tr.td **EXAMPLE_TD_ATTR do |td| node.children.each do |n| parse(n, td) unless n.name == "fmt-name" end end end end end |
#figure_attrs(node) ⇒ Object
13 14 15 |
# File 'lib/isodoc/function/blocks.rb', line 13 def figure_attrs(node) attr_code(id: node["id"], class: "figure", style: keep_style(node)) end |
#figure_name_parse(_node, div, name) ⇒ Object
6 7 8 9 10 11 |
# File 'lib/isodoc/function/blocks.rb', line 6 def figure_name_parse(_node, div, name) name.nil? and return div.p class: "FigureTitle", style: "text-align:center;" do |p| name.children.each { |n| parse(n, p) } end end |
#figure_parse(node, out) ⇒ Object
17 18 19 20 21 22 23 |
# File 'lib/isodoc/function/blocks.rb', line 17 def figure_parse(node, out) node["class"] == "pseudocode" || node["type"] == "pseudocode" and return pseudocode_parse(node, out) @in_figure = true figure_parse1(node, out) @in_figure = false end |
#figure_parse1(node, out) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/isodoc/function/blocks.rb', line 25 def figure_parse1(node, out) out.div **figure_attrs(node) do |div| node.children.each do |n| parse(n, div) unless n.name == "fmt-name" end figure_name_parse(node, div, node.at(ns("./fmt-name"))) end end |
#formula_attrs(node) ⇒ Object
104 105 106 |
# File 'lib/isodoc/function/blocks.rb', line 104 def formula_attrs(node) attr_code(id: node["id"], style: keep_style(node)) end |
#formula_parse(node, out) ⇒ Object
108 109 110 111 112 113 114 115 116 |
# File 'lib/isodoc/function/blocks.rb', line 108 def formula_parse(node, out) out.div **formula_attrs(node) do |div| formula_parse1(node, div) node.children.each do |n| %w(stem fmt-name).include? n.name and next parse(n, div) end end end |
#formula_parse1(node, out) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/isodoc/function/blocks.rb', line 92 def formula_parse1(node, out) out.div **attr_code(class: "formula") do |div| div.p do |_p| parse(node.at(ns("./stem")), div) if lbl = node&.at(ns("./fmt-name"))&.text insert_tab(div, 1) div << lbl end end end end |
#keep_style(node) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 98 def keep_style(node) ret = "" node["style"] and ret += "#{node['style']};" node["keep-with-next"] == "true" and ret += "page-break-after: avoid;" node["keep-lines-together"] == "true" and ret += "page-break-inside: avoid;" return nil if ret.empty? ret end |
#note_attrs(node) ⇒ Object
110 111 112 113 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 110 def note_attrs(node) attr_code(id: node["id"], class: "Note", style: keep_style(node), coverpage: node["coverpage"]) end |
#note_p_class ⇒ Object
70 71 72 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 70 def note_p_class nil end |
#note_p_parse(node, div) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 74 def note_p_parse(node, div) name = node.at(ns("./fmt-name")) para = node.at(ns("./p")) div.p **attr_code(class: note_p_class) do |p| name and p.span class: "note_label" do |s| name.children.each { |n| parse(n, s) } end #insert_tab(p, 1) # TODO to Presentation XML children_parse(para, p) end para.xpath("./following-sibling::*").each { |n| parse(n, div) } end |
#note_parse(node, out) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 115 def note_parse(node, out) @note = true out.div **note_attrs(node) do |div| if starts_with_para?(node) note_p_parse(node, div) else note_parse1(node, div) end end @note = false end |
#note_parse1(node, div) ⇒ Object
87 88 89 90 91 92 93 94 95 96 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 87 def note_parse1(node, div) name = node.at(ns("./fmt-name")) and div.p **attr_code(class: note_p_class) do |p| p.span class: "note_label" do |s| name.remove.children.each { |n| parse(n, s) } end #insert_tab(p, 1) # TODO to Presentation XML end children_parse(node, div) end |
#para_attrs(node) ⇒ Object
127 128 129 130 131 132 133 |
# File 'lib/isodoc/function/blocks.rb', line 127 def para_attrs(node) attrs = { class: para_class(node), id: node["id"] } s = node["align"].nil? ? "" : "text-align:#{node['align']};" s = "#{s}#{keep_style(node)}" attrs[:style] = s unless s.empty? attrs end |
#para_class(node) ⇒ Object
118 119 120 121 122 123 124 125 |
# File 'lib/isodoc/function/blocks.rb', line 118 def para_class(node) classtype = nil classtype = "MsoCommentText" if in_comment node["type"] == "floating-title" and classtype = "h#{node['depth']}" classtype ||= node["class"] classtype end |
#para_parse(node, out) ⇒ Object
135 136 137 138 139 |
# File 'lib/isodoc/function/blocks.rb', line 135 def para_parse(node, out) out.p **attr_code(para_attrs(node)) do |p| node.children.each { |n| parse(n, p) } end end |
#passthrough_parse(node, out) ⇒ Object
155 156 157 158 159 |
# File 'lib/isodoc/function/blocks.rb', line 155 def passthrough_parse(node, out) node["formats"] && !(node["formats"].split(" ").include? @format.to_s) and return out.passthrough node.text end |
#permission_parse(node, out) ⇒ Object
35 36 37 38 39 |
# File 'lib/isodoc/function/reqt.rb', line 35 def (node, out) out.div **reqt_attrs(node, "permission") do |t| recommendation_parse1(node, t) end end |
#pre_parse(node, out) ⇒ Object
80 81 82 |
# File 'lib/isodoc/function/blocks.rb', line 80 def pre_parse(node, out) out.pre node.text, **attr_code(id: node["id"]) end |
#pseudocode_attrs(node) ⇒ Object
34 35 36 |
# File 'lib/isodoc/function/blocks.rb', line 34 def pseudocode_attrs(node) attr_code(id: node["id"], class: "pseudocode", style: keep_style(node)) end |
#pseudocode_parse(node, out) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/isodoc/function/blocks.rb', line 38 def pseudocode_parse(node, out) @in_figure = true name = node.at(ns("./fmt-name")) out.div **pseudocode_attrs(node) do |div| node.children.each { |n| parse(n, div) unless n.name == "fmt-name" } sourcecode_name_parse(node, div, name) end @in_figure = false end |
#quote_parse(node, out) ⇒ Object
147 148 149 150 151 152 153 |
# File 'lib/isodoc/function/blocks.rb', line 147 def quote_parse(node, out) attrs = para_attrs(node) attrs[:class] = "Quote" out.div **attr_code(attrs) do |p| node.children.each { |n| parse(n, p) } end end |
#recommendation_name(name, out) ⇒ Object
4 5 6 7 8 9 10 |
# File 'lib/isodoc/function/reqt.rb', line 4 def recommendation_name(name, out) return if name.nil? out.p class: "RecommendationTitle" do |p| name.children.each { |n| parse(n, p) } end end |
#recommendation_parse(node, out) ⇒ Object
16 17 18 19 20 |
# File 'lib/isodoc/function/reqt.rb', line 16 def recommendation_parse(node, out) out.div **reqt_attrs(node, "recommend") do |t| recommendation_parse1(node, t) end end |
#recommendation_parse1(node, out) ⇒ Object
22 23 24 25 26 27 |
# File 'lib/isodoc/function/reqt.rb', line 22 def recommendation_parse1(node, out) recommendation_name(node.at(ns("./fmt-name")), out) node.children.each do |n| parse(n, out) unless n.name == "fmt-name" end end |
#reqt_attrs(node, klass) ⇒ Object
12 13 14 |
# File 'lib/isodoc/function/reqt.rb', line 12 def reqt_attrs(node, klass) attr_code(class: klass, id: node["id"], style: keep_style(node)) end |
#requirement_parse(node, out) ⇒ Object
29 30 31 32 33 |
# File 'lib/isodoc/function/reqt.rb', line 29 def requirement_parse(node, out) out.div **reqt_attrs(node, "require") do |t| recommendation_parse1(node, t) end end |
#source_parse(node, out) ⇒ Object
171 172 173 174 175 176 177 |
# File 'lib/isodoc/function/blocks.rb', line 171 def source_parse(node, out) out.div class: "BlockSource" do |d| d.p do |p| node.children.each { |n| parse(n, p) } end end end |
#sourcecode_attrs(node) ⇒ Object
55 56 57 |
# File 'lib/isodoc/function/blocks.rb', line 55 def sourcecode_attrs(node) attr_code(id: node["id"], class: "Sourcecode", style: keep_style(node)) end |
#sourcecode_name_parse(_node, div, name) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/isodoc/function/blocks.rb', line 48 def sourcecode_name_parse(_node, div, name) name.nil? and return div.p class: "SourceTitle", style: "text-align:center;" do |p| name.children.each { |n| parse(n, p) } end end |
#sourcecode_parse(node, out) ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/isodoc/function/blocks.rb', line 59 def sourcecode_parse(node, out) name = node.at(ns("./fmt-name")) out.p **sourcecode_attrs(node) do |div| sourcecode_parse1(node, div) end annotation_parse(node, out) sourcecode_name_parse(node, out, name) end |
#sourcecode_parse1(node, div) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/isodoc/function/blocks.rb', line 68 def sourcecode_parse1(node, div) @sourcecode = "pre" node.at(ns(".//table[@class = 'rouge-line-table']")) || node.at("./ancestor::xmlns:table[@class = 'rouge-line-table']") and @sourcecode = "table" node.children.each do |n| %w(fmt-name dl).include?(n.name) and next parse(n, div) end @sourcecode = false end |
#starts_with_para?(node) ⇒ Boolean
66 67 68 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 66 def starts_with_para?(node) block_body_first_elem(node)&.name == "p" end |
#svg_parse(node, out) ⇒ Object
161 162 163 |
# File 'lib/isodoc/function/blocks.rb', line 161 def svg_parse(node, out) out.parent.add_child(node) end |
#toc_parse(node, out) ⇒ Object
165 166 167 168 169 |
# File 'lib/isodoc/function/blocks.rb', line 165 def toc_parse(node, out) out.div class: "toc" do |div| node.children.each { |n| parse(n, div) } end end |