metanorma-jis 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/html2doc/lists.rb +22 -66
- data/lib/isodoc/jis/base_convert.rb +78 -11
- data/lib/isodoc/jis/figure.rb +99 -0
- data/lib/isodoc/jis/html/header.html +210 -818
- data/lib/isodoc/jis/html/isodoc.css +8 -37
- data/lib/isodoc/jis/html/isodoc.scss +8 -36
- data/lib/isodoc/jis/html/wordstyle.css +54 -0
- data/lib/isodoc/jis/html/wordstyle.scss +51 -0
- data/lib/isodoc/jis/i18n-en.yaml +6 -0
- data/lib/isodoc/jis/i18n-ja.yaml +8 -1
- data/lib/isodoc/jis/jis.international-standard.xsl +230 -35
- data/lib/isodoc/jis/metadata.rb +7 -0
- data/lib/isodoc/jis/presentation_xml_convert.rb +105 -24
- data/lib/isodoc/jis/table.rb +58 -0
- data/lib/isodoc/jis/word_cleanup.rb +6 -6
- data/lib/isodoc/jis/word_convert.rb +27 -147
- data/lib/isodoc/jis/xref.rb +45 -0
- data/lib/metanorma/jis/cleanup.rb +2 -1
- data/lib/metanorma/jis/converter.rb +10 -0
- data/lib/metanorma/jis/front.rb +57 -15
- data/lib/metanorma/jis/isodoc.rng +29 -7
- data/lib/metanorma/jis/jis.rng +10 -0
- data/lib/metanorma/jis/processor.rb +2 -2
- data/lib/metanorma/jis/version.rb +1 -1
- data/metanorma-jis.gemspec +2 -2
- metadata +7 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6bf51e10fbc568a6c14c9e8b4192e16f90b5dd093aff54cdc0fbdb9ef11566bb
         | 
| 4 | 
            +
              data.tar.gz: 060bddc60dd35141b7143e36a1cd66bc4ef89b9db9fc0b5d385ea9171d3baa8b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: fa5e35fcdff0101c14bd5f3d713560aa8e5236e055288e328b4024268bc9e62b1fbd399d75a388b337a7779be50939fc96438cedf691106f6ef77aca56921dd6
         | 
| 7 | 
            +
              data.tar.gz: 55665ed144401a91526a924d27a8b2134b818581627663e371fec91fe1ccf60afb384838364dfd3986798f093e03818cd9e0e9983f6371227d9b427f9b1aab5d
         | 
    
        data/lib/html2doc/lists.rb
    CHANGED
    
    | @@ -9,7 +9,7 @@ class Html2Doc | |
| 9 9 | 
             
                end
         | 
| 10 10 |  | 
| 11 11 | 
             
                def style_list(elem, level, liststyle, listnumber)
         | 
| 12 | 
            -
                   | 
| 12 | 
            +
                  liststyle or return
         | 
| 13 13 | 
             
                  elem["level"] = level
         | 
| 14 14 | 
             
                  super
         | 
| 15 15 | 
             
                end
         | 
| @@ -32,14 +32,6 @@ class Html2Doc | |
| 32 32 | 
             
                  end
         | 
| 33 33 | 
             
                  item.at("./p") or return
         | 
| 34 34 | 
             
                  item.replace(item.children)
         | 
| 35 | 
            -
            =begin
         | 
| 36 | 
            -
                  prev = p1.xpath("./preceding-sibling::* | ./preceding-sibling::text()")
         | 
| 37 | 
            -
                  if prev[-1].name == "span" && prev[-1]["style"] == "mso-tab-count:1" &&
         | 
| 38 | 
            -
                      prev.size == 2
         | 
| 39 | 
            -
                    p1.children.first.previous = prev[1]
         | 
| 40 | 
            -
                    p1.children.first.previous = prev[0]
         | 
| 41 | 
            -
                  end
         | 
| 42 | 
            -
            =end
         | 
| 43 35 | 
             
                end
         | 
| 44 36 |  | 
| 45 37 | 
             
                def list2para_unnest_para(para, first_p, last_p)
         | 
| @@ -74,29 +66,29 @@ class Html2Doc | |
| 74 66 | 
             
                  case listtype
         | 
| 75 67 | 
             
                  when "ol"
         | 
| 76 68 | 
             
                    ret = case depth
         | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 69 | 
            +
                          when "1" then "margin-left: 36.0pt;"
         | 
| 70 | 
            +
                          when "2" then "margin-left: 54.0pt;"
         | 
| 71 | 
            +
                          when "3" then "margin-left: 72.0pt;"
         | 
| 72 | 
            +
                          when "4" then "margin-left: 90.0pt;"
         | 
| 73 | 
            +
                          when "5" then "margin-left: 108.0pt;"
         | 
| 74 | 
            +
                          when "6" then "margin-left: 126.0pt;"
         | 
| 75 | 
            +
                          when "7" then "margin-left: 144.0pt;"
         | 
| 76 | 
            +
                          when "8" then "margin-left: 162.0pt;"
         | 
| 77 | 
            +
                          else "margin-left: 180.0pt;"
         | 
| 78 | 
            +
                          end
         | 
| 87 79 | 
             
                    "#{ret}text-indent:-18.0pt;"
         | 
| 88 80 | 
             
                  when "ul"
         | 
| 89 81 | 
             
                    ret = case depth
         | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 82 | 
            +
                          when "1" then "margin-left: 36.0pt;"
         | 
| 83 | 
            +
                          when "2" then "margin-left: 45.95pt;"
         | 
| 84 | 
            +
                          when "3" then "margin-left: 72.0pt;"
         | 
| 85 | 
            +
                          when "4" then "margin-left: 90.0pt;"
         | 
| 86 | 
            +
                          when "5" then "margin-left: 108.0pt;"
         | 
| 87 | 
            +
                          when "6" then "margin-left: 126.0pt;"
         | 
| 88 | 
            +
                          when "7" then "margin-left: 144.0pt;"
         | 
| 89 | 
            +
                          when "8" then "margin-left: 162.0pt;"
         | 
| 90 | 
            +
                          else "margin-left: 180.0pt;"
         | 
| 91 | 
            +
                          end
         | 
| 100 92 | 
             
                    "#{ret}text-indent:-18.0pt;"
         | 
| 101 93 |  | 
| 102 94 | 
             
                  end
         | 
| @@ -112,11 +104,10 @@ class Html2Doc | |
| 112 104 | 
             
                    u.replace(u.children)
         | 
| 113 105 | 
             
                  end
         | 
| 114 106 | 
             
                  unnest_list_paras(docxml)
         | 
| 115 | 
            -
                  indent_lists(docxml)
         | 
| 116 107 | 
             
                end
         | 
| 117 108 |  | 
| 118 109 | 
             
                def unnest_list_paras(docxml)
         | 
| 119 | 
            -
                  docxml.xpath("//p[@class = ' | 
| 110 | 
            +
                  docxml.xpath("//p[@class = 'MsoList' or @class = 'MsoListBullet']" \
         | 
| 120 111 | 
             
                               "[.//p]").each do |p|
         | 
| 121 112 | 
             
                                 p.at("./p") and
         | 
| 122 113 | 
             
                                   list2para_unnest_para(p, p.at("./p"),
         | 
| @@ -128,24 +119,6 @@ class Html2Doc | |
| 128 119 | 
             
                               end
         | 
| 129 120 | 
             
                end
         | 
| 130 121 |  | 
| 131 | 
            -
                def indent_lists(docxml)
         | 
| 132 | 
            -
                  docxml.xpath("//div[@class = 'Note' or @class = 'Example' or " \
         | 
| 133 | 
            -
                               "@class = 'Quote']").each do |d|
         | 
| 134 | 
            -
                    d.xpath(".//p").each do |p|
         | 
| 135 | 
            -
                      indent_lists1(p)
         | 
| 136 | 
            -
                    end
         | 
| 137 | 
            -
                  end
         | 
| 138 | 
            -
                end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
                def indent_lists1(para)
         | 
| 141 | 
            -
                  m = /^(ListContinue|ListNumber|MsoListContinue|MsoListNumber)(\d)$/
         | 
| 142 | 
            -
                    .match(para["class"]) or return
         | 
| 143 | 
            -
                  base = m[1].sub(/^Mso/, "")
         | 
| 144 | 
            -
                  level = m[2].to_i + 1
         | 
| 145 | 
            -
                  level = 5 if level > 5
         | 
| 146 | 
            -
                  para["class"] = "#{base}#{level}-"
         | 
| 147 | 
            -
                end
         | 
| 148 | 
            -
             | 
| 149 122 | 
             
                def list_add(xpath, liststyles, listtype, level)
         | 
| 150 123 | 
             
                  xpath.each do |l|
         | 
| 151 124 | 
             
                    level == 1 and l["seen"] = true and @listnumber += 1
         | 
| @@ -172,23 +145,6 @@ class Html2Doc | |
| 172 145 | 
             
                  end
         | 
| 173 146 | 
             
                end
         | 
| 174 147 |  | 
| 175 | 
            -
                def listlabel(listtype, idx, level)
         | 
| 176 | 
            -
                  case listtype
         | 
| 177 | 
            -
                  when :ul then "—"
         | 
| 178 | 
            -
                  when :ol then "#{listidx(idx, level)})"
         | 
| 179 | 
            -
                  end
         | 
| 180 | 
            -
                end
         | 
| 181 | 
            -
             | 
| 182 | 
            -
                def listidx(idx, level)
         | 
| 183 | 
            -
                  case level
         | 
| 184 | 
            -
                  when "a" then (96 + idx).chr.to_s
         | 
| 185 | 
            -
                  when "1" then idx.to_s
         | 
| 186 | 
            -
                  when "i" then RomanNumerals.to_roman(idx).downcase
         | 
| 187 | 
            -
                  when "A" then (64 + idx).chr.to_s
         | 
| 188 | 
            -
                  when "I" then RomanNumerals.to_roman(idx).upcase
         | 
| 189 | 
            -
                  end
         | 
| 190 | 
            -
                end
         | 
| 191 | 
            -
             | 
| 192 148 | 
             
                def cleanup(docxml)
         | 
| 193 149 | 
             
                  super
         | 
| 194 150 | 
             
                  docxml.xpath("//div[@class = 'Quote' or @class = 'Example' or " \
         | 
| @@ -5,13 +5,32 @@ module IsoDoc | |
| 5 5 | 
             
              module JIS
         | 
| 6 6 | 
             
                module BaseConvert
         | 
| 7 7 | 
             
                  def middle_title(_isoxml, out)
         | 
| 8 | 
            -
                     | 
| 8 | 
            +
                    middle_title_hdr(out)
         | 
| 9 | 
            +
                    middle_title_main(out, "zzSTDTitle1")
         | 
| 9 10 | 
             
                    middle_subtitle_main(out)
         | 
| 10 11 | 
             
                    # middle_title_amd(out)
         | 
| 11 12 | 
             
                  end
         | 
| 12 13 |  | 
| 13 | 
            -
                  def  | 
| 14 | 
            -
                    out.p(class: " | 
| 14 | 
            +
                  def middle_title_hdr(out)
         | 
| 15 | 
            +
                    out.p(class: "JapaneseIndustrialStandard") do |p|
         | 
| 16 | 
            +
                      p << @i18n.jis
         | 
| 17 | 
            +
                      @meta.get[:unpublished] and p << @i18n.l10n("(#{@i18n.draft_label})")
         | 
| 18 | 
            +
                      insert_tab(p, 7)
         | 
| 19 | 
            +
                      p << "<span class='JIS'>JIS</span>"
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                    out.p(class: "StandardNumber") do |p|
         | 
| 22 | 
            +
                      insert_tab(p, 1)
         | 
| 23 | 
            +
                      p << @meta.get[:docnumber_undated]
         | 
| 24 | 
            +
                      if yr = @meta.get[:docyear]
         | 
| 25 | 
            +
                        p << ": "
         | 
| 26 | 
            +
                        p << "<span class='EffectiveYear'>#{yr}</span>"
         | 
| 27 | 
            +
                      end
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                    out.p(class: "IDT")
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def middle_title_main(out, style)
         | 
| 33 | 
            +
                    out.p(class: style) do |p|
         | 
| 15 34 | 
             
                      p << @meta.get[:doctitleintro]
         | 
| 16 35 | 
             
                      p << " — " if @meta.get[:doctitleintro] && @meta.get[:doctitlemain]
         | 
| 17 36 | 
             
                      p << @meta.get[:doctitlemain]
         | 
| @@ -37,8 +56,23 @@ module IsoDoc | |
| 37 56 | 
             
                    end
         | 
| 38 57 | 
             
                  end
         | 
| 39 58 |  | 
| 59 | 
            +
                  def commentary_title(_isoxml, out)
         | 
| 60 | 
            +
                    commentary_title_hdr(out)
         | 
| 61 | 
            +
                    middle_title_main(out, "CommentaryStandardName")
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  def commentary_title_hdr(out)
         | 
| 65 | 
            +
                    out.p(class: "CommentaryStandardNumber") do |p|
         | 
| 66 | 
            +
                      p << "JIS #{@meta.get[:docnumber_undated]}"
         | 
| 67 | 
            +
                      if yr = @meta.get[:docyear]
         | 
| 68 | 
            +
                        p << ": "
         | 
| 69 | 
            +
                        p << "<span class='CommentaryEffectiveYear'>#{yr}</span>"
         | 
| 70 | 
            +
                      end
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 40 74 | 
             
                  def termnote_parse(node, out)
         | 
| 41 | 
            -
                    name = node | 
| 75 | 
            +
                    name = node.at(ns("./name"))&.remove
         | 
| 42 76 | 
             
                    out.div **note_attrs(node) do |div|
         | 
| 43 77 | 
             
                      div.p do |p|
         | 
| 44 78 | 
             
                        if name
         | 
| @@ -59,13 +93,6 @@ module IsoDoc | |
| 59 93 | 
             
                    end
         | 
| 60 94 | 
             
                  end
         | 
| 61 95 |  | 
| 62 | 
            -
                  def admitted_term_parse(node, out)
         | 
| 63 | 
            -
                    out.p class: "Terms", style: "text-align:left;" do |p|
         | 
| 64 | 
            -
                      p << l10n("#{@i18n.alternative}: ")
         | 
| 65 | 
            -
                      node.children.each { |c| parse(c, p) }
         | 
| 66 | 
            -
                    end
         | 
| 67 | 
            -
                  end
         | 
| 68 | 
            -
             | 
| 69 96 | 
             
                  def para_class(node)
         | 
| 70 97 | 
             
                    super || node["class"]
         | 
| 71 98 | 
             
                  end
         | 
| @@ -74,6 +101,46 @@ module IsoDoc | |
| 74 101 | 
             
                    cell["border"] == "0" and bordered = false
         | 
| 75 102 | 
             
                    super
         | 
| 76 103 | 
             
                  end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  def middle(isoxml, out)
         | 
| 106 | 
            +
                    middle_title(isoxml, out)
         | 
| 107 | 
            +
                    middle_admonitions(isoxml, out)
         | 
| 108 | 
            +
                    scope isoxml, out, 0
         | 
| 109 | 
            +
                    norm_ref isoxml, out, 0
         | 
| 110 | 
            +
                    clause_etc isoxml, out, 0
         | 
| 111 | 
            +
                    annex isoxml, out
         | 
| 112 | 
            +
                    bibliography isoxml, out
         | 
| 113 | 
            +
                    commentary isoxml, out
         | 
| 114 | 
            +
                    indexsect isoxml, out
         | 
| 115 | 
            +
                  end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                  def annex(isoxml, out)
         | 
| 118 | 
            +
                    amd(isoxml) and @suppressheadingnumbers = @oldsuppressheadingnumbers
         | 
| 119 | 
            +
                    isoxml.xpath(ns("//annex[not(@commentary = 'true')]")).each do |c|
         | 
| 120 | 
            +
                      page_break(out)
         | 
| 121 | 
            +
                      out.div **attr_code(annex_attrs(c)) do |s|
         | 
| 122 | 
            +
                        c.elements.each do |c1|
         | 
| 123 | 
            +
                          if c1.name == "title" then annex_name(c, c1, s)
         | 
| 124 | 
            +
                          else parse(c1, s)
         | 
| 125 | 
            +
                          end
         | 
| 126 | 
            +
                        end
         | 
| 127 | 
            +
                      end
         | 
| 128 | 
            +
                    end
         | 
| 129 | 
            +
                    amd(isoxml) and @suppressheadingnumbers = true
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                  def commentary(isoxml, out)
         | 
| 133 | 
            +
                    isoxml.xpath(ns("//annex[@commentary = 'true']")).each do |c|
         | 
| 134 | 
            +
                      page_break(out)
         | 
| 135 | 
            +
                      out.div **attr_code(annex_attrs(c)) do |s|
         | 
| 136 | 
            +
                        c.elements.each do |c1|
         | 
| 137 | 
            +
                          if c1.name == "title" then annex_name(c, c1, s)
         | 
| 138 | 
            +
                          else parse(c1, s)
         | 
| 139 | 
            +
                          end
         | 
| 140 | 
            +
                        end
         | 
| 141 | 
            +
                      end
         | 
| 142 | 
            +
                    end
         | 
| 143 | 
            +
                  end
         | 
| 77 144 | 
             
                end
         | 
| 78 145 | 
             
              end
         | 
| 79 146 | 
             
            end
         | 
| @@ -0,0 +1,99 @@ | |
| 1 | 
            +
            module IsoDoc
         | 
| 2 | 
            +
              module JIS
         | 
| 3 | 
            +
                class WordConvert < IsoDoc::Iso::WordConvert
         | 
| 4 | 
            +
                  def figure_attrs(node)
         | 
| 5 | 
            +
                    attr_code(id: node["id"], class: "MsoTableGrid",
         | 
| 6 | 
            +
                              style: "border-collapse:collapse;" \
         | 
| 7 | 
            +
                                     "border:none;mso-padding-alt: " \
         | 
| 8 | 
            +
                                     "0cm 5.4pt 0cm 5.4pt;mso-border-insideh:none;" \
         | 
| 9 | 
            +
                                     "mso-border-insidev:none;#{keep_style(node)}",
         | 
| 10 | 
            +
                              border: 0, cellspacing: 0, cellpadding: 0)
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def figure_components(node)
         | 
| 14 | 
            +
                    { units: node.at(ns("./note[@type = 'units']")),
         | 
| 15 | 
            +
                      notes_etc: figure_notes_examples_paras(node
         | 
| 16 | 
            +
                      .xpath(ns("./note[not(@type = 'units')] | ./example | ./p"))),
         | 
| 17 | 
            +
                      name: node.at(ns("./name")),
         | 
| 18 | 
            +
                      key: node.xpath(ns("./p[@class = 'ListTitle' or @class = 'dl']")),
         | 
| 19 | 
            +
                      img: node.at(ns("./image")),
         | 
| 20 | 
            +
                      aside: node.at(ns("./aside")),
         | 
| 21 | 
            +
                      source: node.at(ns("./source")),
         | 
| 22 | 
            +
                      subfigs: node.xpath(ns("./figure")).map { |n| figure_components(n) } }
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def figure_notes_examples_paras(xpath)
         | 
| 26 | 
            +
                    xpath.empty? and return nil
         | 
| 27 | 
            +
                    curr = ""
         | 
| 28 | 
            +
                    xpath.each_with_object([]) do |e, m|
         | 
| 29 | 
            +
                      e.name == curr or m << []
         | 
| 30 | 
            +
                      curr = e.name
         | 
| 31 | 
            +
                      m[-1] << e
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  def figure_parse1(node, out)
         | 
| 36 | 
            +
                    c = figure_components(node)
         | 
| 37 | 
            +
                    out.table **figure_attrs(node) do |div|
         | 
| 38 | 
            +
                      %i(units img subfigs key notes_etc aside source name).each do |key|
         | 
| 39 | 
            +
                        case key
         | 
| 40 | 
            +
                        when :subfigs then figure_subfigs(node, div, c[key])
         | 
| 41 | 
            +
                        when :notes_etc, :key
         | 
| 42 | 
            +
                          c[key]&.each { |n| figure_row(node, div, n, key) }
         | 
| 43 | 
            +
                        else figure_row(node, div, c, key) end
         | 
| 44 | 
            +
                      end
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  def figure_subfigs(node, div, elem)
         | 
| 49 | 
            +
                    elem.each do |n|
         | 
| 50 | 
            +
                      n[:subname] = n[:name]
         | 
| 51 | 
            +
                      figure_row(node, div, n, :img)
         | 
| 52 | 
            +
                      figure_row(node, div, n, :subname)
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  def figure_name_parse(_node, div, name)
         | 
| 57 | 
            +
                    name.nil? and return
         | 
| 58 | 
            +
                    div.p class: "Tabletitle", style: "text-align:center;" do |p|
         | 
| 59 | 
            +
                      name.children.each { |n| parse(n, p) }
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  def figure_row(node, table, hash, key)
         | 
| 64 | 
            +
                    key != :notes_etc && (
         | 
| 65 | 
            +
                    hash[key].nil? || (hash[key].is_a?(Array) && hash[key].empty?)) and
         | 
| 66 | 
            +
                      return
         | 
| 67 | 
            +
                    table.tr do |r|
         | 
| 68 | 
            +
                      r.td valign: "top", style: "padding:0cm 5.4pt 0cm 5.4pt" do |d|
         | 
| 69 | 
            +
                        figure_row1(node, d, hash, key)
         | 
| 70 | 
            +
                      end
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  def figure_row1(node, cell, hash, key)
         | 
| 75 | 
            +
                    case key
         | 
| 76 | 
            +
                    when :units then units_render(hash[key], cell)
         | 
| 77 | 
            +
                    when :notes_etc, :aside, :key then hash.each { |n| parse(n, cell) }
         | 
| 78 | 
            +
                    when :source then parse(hash[key], cell)
         | 
| 79 | 
            +
                    when :name then figure_name_parse(node, cell, hash[key])
         | 
| 80 | 
            +
                    when :img
         | 
| 81 | 
            +
                      cell.p class: "Figure" do |p|
         | 
| 82 | 
            +
                        parse(hash[key], p)
         | 
| 83 | 
            +
                      end
         | 
| 84 | 
            +
                    when :subname
         | 
| 85 | 
            +
                      cell.p class: "SubfigureCaption" do |p|
         | 
| 86 | 
            +
                        hash[key].children.each { |n| parse(n, p) }
         | 
| 87 | 
            +
                      end
         | 
| 88 | 
            +
                    end
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                  def units_render(note, cell)
         | 
| 92 | 
            +
                    para = note.at(ns("./p")) and note = para
         | 
| 93 | 
            +
                    cell.p class: "UnitStatement" do |p|
         | 
| 94 | 
            +
                      note.children.each { |n| parse(n, p) }
         | 
| 95 | 
            +
                    end
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
            end
         |