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
- #admonition_subclass(node) ⇒ 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
-
#fmt_fn_body_parse(node, out) ⇒ Object
we dont’t want figure dl/dd/fmt-fn-body to be processed as actual footnotes.
- #formula_attrs(node) ⇒ Object
- #formula_parse(node, out) ⇒ Object
- #formula_parse1(node, out) ⇒ Object
- #keep_style(node) ⇒ Object
- #key_name_parse(node, div) ⇒ Object
- #key_parse(node, out) ⇒ 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
- #para_prefix(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
- #pseudocode_tag ⇒ Object
- #quote_attrs(node) ⇒ 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
159 160 161 162 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 159 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
135 136 137 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 135 def admonition_class(node) "Admonition #{admonition_subclass(node)}".strip end |
#admonition_name(node, _type) ⇒ Object
155 156 157 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 155 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
180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 180 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
193 194 195 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 193 def admonition_name_para_delim(para) insert_tab(para, 1) end |
#admonition_name_parse(node, div, name) ⇒ Object
128 129 130 131 132 133 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 128 def admonition_name_parse(node, div, name) div.p class: "AdmonitionTitle #{admonition_subclass(node)}".strip, 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
175 176 177 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 175 def admonition_p_parse(node, div) admonition_parse1(node, div) end |
#admonition_parse(node, out) ⇒ Object
164 165 166 167 168 169 170 171 172 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 164 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
197 198 199 200 201 202 203 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 197 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 |
#admonition_subclass(node) ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 139 def admonition_subclass(node) case node["type"] when "important" then "AdmonitionImportant" when "warning" then "AdmonitionWarning" when "caution" then "AdmonitionCaution" when "todo" then "AdmonitionTodo" when "editor" then "AdmonitionEditor" when "editorial" then "AdmonitionEditorial" when "tip" then "AdmonitionTip" when "statement" then "AdmonitionStatement" when "box" then "AdmonitionBox" when "safety-precaution" then "AdmonitionSafetyPrecaution" else "AdmonitionOther" end end |
#annotation_parse(node, out) ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/isodoc/function/blocks.rb', line 91 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
176 177 178 179 180 |
# File 'lib/isodoc/function/blocks.rb', line 176 def attribution_parse(node, out) out.div class: "QuoteAttribution" do |div| children_parse(node, div) 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
232 |
# File 'lib/isodoc/function/blocks.rb', line 232 def columnbreak_parse(node, out); end |
#cross_align_parse(node, out) ⇒ Object
220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/isodoc/function/blocks.rb', line 220 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
42 43 44 45 46 |
# File 'lib/isodoc/function/reqt.rb', line 42 def div_parse(node, out) out.div(**reqt_attrs(node, node["type"])) do |div| children_parse(node, div) 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| children_parse(name, 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.figcaption do |p| children_parse(name, 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.figure(**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 |
#fmt_fn_body_parse(node, out) ⇒ Object
we dont’t want figure dl/dd/fmt-fn-body to be processed as actual footnotes
236 237 238 239 240 241 242 243 244 |
# File 'lib/isodoc/function/blocks.rb', line 236 def fmt_fn_body_parse(node, out) node.ancestors("table, figure").empty? and node.at(ns(".//fmt-fn-label"))&.remove tag = node.parent.name == "fmt-footnote-container" ? "aside" : "div" id = node["is_table"] ? node["reference"] : node["id"] out.send tag, id: "fn:#{id}", class: "footnote" do |div| children_parse(node, div) end end |
#formula_attrs(node) ⇒ Object
111 112 113 |
# File 'lib/isodoc/function/blocks.rb', line 111 def formula_attrs(node) attr_code(id: node["id"], style: keep_style(node)) end |
#formula_parse(node, out) ⇒ Object
115 116 117 118 119 120 121 122 123 |
# File 'lib/isodoc/function/blocks.rb', line 115 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 fmt-stem).include? n.name and next parse(n, div) end end end |
#formula_parse1(node, out) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/isodoc/function/blocks.rb', line 99 def formula_parse1(node, out) out.div(**attr_code(class: "formula")) do |div| div.p do |_p| parse(node.at(ns("./fmt-stem")), div) if lbl = node&.at(ns("./fmt-name"))&.text insert_tab(div, 1) div << lbl end end end end |
#keep_style(node) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 99 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 |
#key_name_parse(node, div) ⇒ Object
138 139 140 141 142 143 144 145 146 147 |
# File 'lib/isodoc/function/blocks.rb', line 138 def key_name_parse(node, div) a = keep_style(node) a&.include?("page-break-after:") or a = "page-break-after: avoid;#{a}" div.p style: a do |p| p.b do |s| children_parse(node, s) end end end |
#key_parse(node, out) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/isodoc/function/blocks.rb', line 125 def key_parse(node, out) klass = "key #{node['class']}".strip out.div(**attr_code(class: klass)) do |div| node.children.each do |n| if n.name == "name" key_name_parse(n, div) "<p keep-with-next='true'><strong>#{@i18n.key}</strong></p>" else parse(n, div) end end end end |
#note_attrs(node) ⇒ Object
111 112 113 114 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 111 def note_attrs(node) attr_code(id: node["id"], class: "Note", style: keep_style(node), coverpage: node["coverpage"]) end |
#note_p_class ⇒ Object
73 74 75 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 73 def note_p_class nil end |
#note_p_parse(node, div) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 77 def note_p_parse(node, div) name = node.at(ns("./fmt-name")) para = node.at(ns("./p")) || node.at(ns("./semx/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 children_parse(para, p) end para.xpath("./following-sibling::*").each { |n| parse(n, div) } end |
#note_parse(node, out) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 116 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
89 90 91 92 93 94 95 96 97 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 89 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 end children_parse(node, div) end |
#para_attrs(node) ⇒ Object
158 159 160 161 162 163 164 |
# File 'lib/isodoc/function/blocks.rb', line 158 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
149 150 151 152 153 154 155 156 |
# File 'lib/isodoc/function/blocks.rb', line 149 def para_class(node) classtype = nil classtype = "MsoCommentText" if in_comment node["type"] == "floating-title" and classtype = "h#{node['depth'] || '1'}" classtype ||= node["class"] classtype end |
#para_parse(node, out) ⇒ Object
166 167 168 169 170 171 172 |
# File 'lib/isodoc/function/blocks.rb', line 166 def para_parse(node, out) out.p(**attr_code(para_attrs(node))) do |p| para_prefix(node, p) node.children.each { |n| parse(n, p) unless n.name == "note" } end node.xpath(ns("./note")).each { |n| parse(n, out) } end |
#para_prefix(node, out) ⇒ Object
174 |
# File 'lib/isodoc/function/blocks.rb', line 174 def para_prefix(node, out); end |
#passthrough_parse(node, out) ⇒ Object
196 197 198 199 200 |
# File 'lib/isodoc/function/blocks.rb', line 196 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
36 37 38 39 40 |
# File 'lib/isodoc/function/reqt.rb', line 36 def (node, out) out.div(**reqt_attrs(node, "permission")) do |t| recommendation_parse1(node, t) end end |
#pre_parse(node, out) ⇒ Object
87 88 89 |
# File 'lib/isodoc/function/blocks.rb', line 87 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
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/isodoc/function/blocks.rb', line 42 def pseudocode_parse(node, out) @in_figure = true name = node.at(ns("./fmt-name")) s = node.at(ns("./fmt-figure")) || node out.send pseudocode_tag, **pseudocode_attrs(node) do |div| s.children.each { |n| parse(n, div) unless n.name == "fmt-name" } sourcecode_name_parse(node, div, name) end @in_figure = false end |
#pseudocode_tag ⇒ Object
38 39 40 |
# File 'lib/isodoc/function/blocks.rb', line 38 def pseudocode_tag "div" end |
#quote_attrs(node) ⇒ Object
189 190 191 192 193 194 |
# File 'lib/isodoc/function/blocks.rb', line 189 def quote_attrs(node) ret = para_attrs(node).merge(class: "Quote") node["type"] == "newcontent" and ret[:class] += " AmendNewcontent" ret end |
#quote_parse(node, out) ⇒ Object
182 183 184 185 186 187 |
# File 'lib/isodoc/function/blocks.rb', line 182 def quote_parse(node, out) attrs = quote_attrs(node) out.div(**attr_code(attrs)) do |p| node.children.each { |n| parse(n, p) unless n.name == "source" } 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 28 |
# File 'lib/isodoc/function/reqt.rb', line 22 def recommendation_parse1(node, out) p = node.at(ns("./fmt-provision")) or return recommendation_name(node.at(ns("./fmt-name")), out) p.children.each do |n| parse(n, out) 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
30 31 32 33 34 |
# File 'lib/isodoc/function/reqt.rb', line 30 def requirement_parse(node, out) out.div(**reqt_attrs(node, "require")) do |t| recommendation_parse1(node, t) end end |
#source_parse(node, out) ⇒ Object
212 213 214 215 216 217 218 |
# File 'lib/isodoc/function/blocks.rb', line 212 def source_parse(node, out) out.div class: "BlockSource" do |d| d.p do |p| children_parse(node, p) end end end |
#sourcecode_attrs(node) ⇒ Object
60 61 62 |
# File 'lib/isodoc/function/blocks.rb', line 60 def sourcecode_attrs(node) attr_code(id: node["id"], class: "Sourcecode", style: keep_style(node)) end |
#sourcecode_name_parse(_node, div, name) ⇒ Object
53 54 55 56 57 58 |
# File 'lib/isodoc/function/blocks.rb', line 53 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
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/isodoc/function/blocks.rb', line 64 def sourcecode_parse(node, out) name = node.at(ns("./fmt-name")) n = node.at(ns("./fmt-sourcecode")) s = n || node out.p(**sourcecode_attrs(node)) do |div| sourcecode_parse1(s, div) end annotation_parse(s, out) sourcecode_name_parse(node, out, name) end |
#sourcecode_parse1(node, div) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/isodoc/function/blocks.rb', line 75 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 69 70 71 |
# File 'lib/isodoc/function/blocks_example_note.rb', line 66 def starts_with_para?(node) elem = block_body_first_elem(node) or return false elem.name == "p" || block_body_first_elem(elem)&.name == "p" || (elem.elements.first&.name == "semx" && block_body_first_elem(elem.elements.first)&.name == "p") end |
#svg_parse(node, out) ⇒ Object
202 203 204 |
# File 'lib/isodoc/function/blocks.rb', line 202 def svg_parse(node, out) out.parent.add_child(node) end |
#toc_parse(node, out) ⇒ Object
206 207 208 209 210 |
# File 'lib/isodoc/function/blocks.rb', line 206 def toc_parse(node, out) out.div class: "toc" do |div| children_parse(node, div) end end |