isodoc 1.7.3.1 → 1.7.6.1
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/isodoc.gemspec +7 -4
 - data/lib/isodoc/class_utils.rb +2 -2
 - data/lib/isodoc/convert.rb +2 -0
 - data/lib/isodoc/function/blocks_example_note.rb +85 -79
 - data/lib/isodoc/function/cleanup.rb +181 -175
 - data/lib/isodoc/function/inline.rb +110 -108
 - data/lib/isodoc/function/inline_simple.rb +55 -55
 - data/lib/isodoc/function/lists.rb +75 -71
 - data/lib/isodoc/function/references.rb +165 -160
 - data/lib/isodoc/function/section.rb +140 -190
 - data/lib/isodoc/function/section_titles.rb +82 -0
 - data/lib/isodoc/function/table.rb +90 -87
 - data/lib/isodoc/function/terms.rb +58 -56
 - data/lib/isodoc/function/to_word_html.rb +3 -1
 - data/lib/isodoc/function/utils.rb +34 -14
 - data/lib/isodoc/html_function/comments.rb +107 -111
 - data/lib/isodoc/html_function/footnotes.rb +68 -67
 - data/lib/isodoc/html_function/html.rb +113 -103
 - data/lib/isodoc/html_function/mathvariant_to_plain.rb +5 -3
 - data/lib/isodoc/presentation_function/block.rb +73 -78
 - data/lib/isodoc/presentation_function/concept.rb +68 -0
 - data/lib/isodoc/presentation_function/image.rb +112 -0
 - data/lib/isodoc/presentation_function/inline.rb +6 -39
 - data/lib/isodoc/presentation_function/math.rb +9 -0
 - data/lib/isodoc/presentation_function/section.rb +12 -1
 - data/lib/isodoc/presentation_xml_convert.rb +3 -0
 - data/lib/isodoc/version.rb +1 -1
 - data/lib/isodoc/word_function/body.rb +176 -174
 - data/lib/isodoc/word_function/comments.rb +117 -112
 - data/lib/isodoc/word_function/footnotes.rb +88 -86
 - data/lib/isodoc/word_function/inline.rb +42 -67
 - data/lib/isodoc/word_function/postprocess_cover.rb +121 -110
 - data/lib/isodoc/xref/xref_gen.rb +153 -150
 - data/lib/isodoc/xslfo_convert.rb +2 -2
 - data/spec/assets/odf.svg +1 -4
 - data/spec/isodoc/blocks_spec.rb +187 -32
 - data/spec/isodoc/inline_spec.rb +300 -116
 - data/spec/isodoc/postproc_spec.rb +38 -0
 - data/spec/isodoc/presentation_xml_spec.rb +144 -0
 - data/spec/isodoc/section_spec.rb +764 -0
 - data/spec/isodoc/terms_spec.rb +116 -0
 - metadata +63 -18
 
| 
         @@ -1,231 +1,233 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require_relative "./table"
         
     | 
| 
       2 
2 
     | 
    
         
             
            require_relative "./inline"
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            module IsoDoc 
     | 
| 
       5 
     | 
    
         
            -
              module  
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
       7 
     | 
    
         
            -
                  head 
     | 
| 
       8 
     | 
    
         
            -
                     
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                def body_attr
         
     | 
| 
       17 
     | 
    
         
            -
                  { lang: "EN-US", link: "blue", vlink: "#954F72" }
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
      
 4 
     | 
    
         
            +
            module IsoDoc
         
     | 
| 
      
 5 
     | 
    
         
            +
              module WordFunction
         
     | 
| 
      
 6 
     | 
    
         
            +
                module Body
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def define_head(head, filename, _dir)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    head.style do |style|
         
     | 
| 
      
 9 
     | 
    
         
            +
                      loc = File.join(File.dirname(__FILE__), "..", "base_style",
         
     | 
| 
      
 10 
     | 
    
         
            +
                                      "metanorma_word.scss")
         
     | 
| 
      
 11 
     | 
    
         
            +
                      stylesheet = File.read(loc, encoding: "utf-8")
         
     | 
| 
      
 12 
     | 
    
         
            +
                      style.comment "\n#{stylesheet}\n"
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                    super
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
       19 
16 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                    div1.p { |p| p << " " } # placeholder
         
     | 
| 
      
 17 
     | 
    
         
            +
                  def body_attr
         
     | 
| 
      
 18 
     | 
    
         
            +
                    { lang: "EN-US", link: "blue", vlink: "#954F72" }
         
     | 
| 
       23 
19 
     | 
    
         
             
                  end
         
     | 
| 
       24 
     | 
    
         
            -
                  section_break(body)
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
20 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                     
     | 
| 
       31 
     | 
    
         
            -
                     
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                     
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def make_body1(body, _docxml)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    body.div **{ class: "WordSection1" } do |div1|
         
     | 
| 
      
 23 
     | 
    
         
            +
                      div1.p { |p| p << " " } # placeholder
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
                    section_break(body)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def make_body2(body, docxml)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    body.div **{ class: "WordSection2" } do |div2|
         
     | 
| 
      
 30 
     | 
    
         
            +
                      boilerplate docxml, div2
         
     | 
| 
      
 31 
     | 
    
         
            +
                      preface_block docxml, div2
         
     | 
| 
      
 32 
     | 
    
         
            +
                      abstract docxml, div2
         
     | 
| 
      
 33 
     | 
    
         
            +
                      foreword docxml, div2
         
     | 
| 
      
 34 
     | 
    
         
            +
                      introduction docxml, div2
         
     | 
| 
      
 35 
     | 
    
         
            +
                      preface docxml, div2
         
     | 
| 
      
 36 
     | 
    
         
            +
                      acknowledgements docxml, div2
         
     | 
| 
      
 37 
     | 
    
         
            +
                      div2.p { |p| p << " " } # placeholder
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end
         
     | 
| 
      
 39 
     | 
    
         
            +
                    section_break(body)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
       40 
41 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 42 
     | 
    
         
            +
                  def make_body3(body, docxml)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    body.div **{ class: "WordSection3" } do |div3|
         
     | 
| 
      
 44 
     | 
    
         
            +
                      middle docxml, div3
         
     | 
| 
      
 45 
     | 
    
         
            +
                      footnotes div3
         
     | 
| 
      
 46 
     | 
    
         
            +
                      comments div3
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
       46 
48 
     | 
    
         
             
                  end
         
     | 
| 
       47 
     | 
    
         
            -
                end
         
     | 
| 
       48 
49 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
      
 50 
     | 
    
         
            +
                  def insert_tab(out, count)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    out.span **attr_code(style: "mso-tab-count:#{count}") do |span|
         
     | 
| 
      
 52 
     | 
    
         
            +
                      [1..count].each { span << "  " }
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
       52 
54 
     | 
    
         
             
                  end
         
     | 
| 
       53 
     | 
    
         
            -
                end
         
     | 
| 
       54 
55 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
      
 56 
     | 
    
         
            +
                  def para_class(_node)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    classtype = nil
         
     | 
| 
      
 58 
     | 
    
         
            +
                    classtype = "Note" if @note
         
     | 
| 
      
 59 
     | 
    
         
            +
                    classtype = "MsoCommentText" if in_comment
         
     | 
| 
      
 60 
     | 
    
         
            +
                    classtype = "Sourcecode" if @annotation
         
     | 
| 
      
 61 
     | 
    
         
            +
                    classtype
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
       62 
63 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
      
 64 
     | 
    
         
            +
                  def para_parse(node, out)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    out.p **attr_code(para_attrs(node)) do |p|
         
     | 
| 
      
 66 
     | 
    
         
            +
                      unless @termdomain.empty?
         
     | 
| 
      
 67 
     | 
    
         
            +
                        p << "<#{@termdomain}> "
         
     | 
| 
      
 68 
     | 
    
         
            +
                        @termdomain = ""
         
     | 
| 
      
 69 
     | 
    
         
            +
                      end
         
     | 
| 
      
 70 
     | 
    
         
            +
                      node.children.each { |n| parse(n, p) unless n.name == "note" }
         
     | 
| 
       68 
71 
     | 
    
         
             
                    end
         
     | 
| 
       69 
     | 
    
         
            -
                    node. 
     | 
| 
      
 72 
     | 
    
         
            +
                    node.xpath(ns("./note")).each { |n| parse(n, out) }
         
     | 
| 
       70 
73 
     | 
    
         
             
                  end
         
     | 
| 
       71 
     | 
    
         
            -
                  node.xpath(ns("./note")).each { |n| parse(n, out) }
         
     | 
| 
       72 
     | 
    
         
            -
                end
         
     | 
| 
       73 
74 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
      
 75 
     | 
    
         
            +
                  WORD_DT_ATTRS = { class: @note ? "Note" : nil, align: "left",
         
     | 
| 
      
 76 
     | 
    
         
            +
                                    style: "margin-left:0pt;text-align:left;" }.freeze
         
     | 
| 
       76 
77 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
      
 78 
     | 
    
         
            +
                  def dt_parse(dterm, term)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    term.p **attr_code(WORD_DT_ATTRS) do |p|
         
     | 
| 
      
 80 
     | 
    
         
            +
                      if dterm.elements.empty?
         
     | 
| 
      
 81 
     | 
    
         
            +
                        p << dterm.text
         
     | 
| 
      
 82 
     | 
    
         
            +
                      else
         
     | 
| 
      
 83 
     | 
    
         
            +
                        dterm.children.each { |n| parse(n, p) }
         
     | 
| 
      
 84 
     | 
    
         
            +
                      end
         
     | 
| 
       83 
85 
     | 
    
         
             
                    end
         
     | 
| 
       84 
86 
     | 
    
         
             
                  end
         
     | 
| 
       85 
     | 
    
         
            -
                end
         
     | 
| 
       86 
87 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
      
 88 
     | 
    
         
            +
                  def dl_parse(node, out)
         
     | 
| 
      
 89 
     | 
    
         
            +
                    out.table **{ class: "dl" } do |v|
         
     | 
| 
      
 90 
     | 
    
         
            +
                      node.elements.select { |n| dt_dd? n }.each_slice(2) do |dt, dd|
         
     | 
| 
      
 91 
     | 
    
         
            +
                        v.tr do |tr|
         
     | 
| 
      
 92 
     | 
    
         
            +
                          tr.td **{ valign: "top", align: "left" } do |term|
         
     | 
| 
      
 93 
     | 
    
         
            +
                            dt_parse(dt, term)
         
     | 
| 
      
 94 
     | 
    
         
            +
                          end
         
     | 
| 
      
 95 
     | 
    
         
            +
                          tr.td **{ valign: "top" } do |listitem|
         
     | 
| 
      
 96 
     | 
    
         
            +
                            dd.children.each { |n| parse(n, listitem) }
         
     | 
| 
      
 97 
     | 
    
         
            +
                          end
         
     | 
| 
       96 
98 
     | 
    
         
             
                        end
         
     | 
| 
       97 
99 
     | 
    
         
             
                      end
         
     | 
| 
      
 100 
     | 
    
         
            +
                      dl_parse_notes(node, v)
         
     | 
| 
       98 
101 
     | 
    
         
             
                    end
         
     | 
| 
       99 
     | 
    
         
            -
                    dl_parse_notes(node, v)
         
     | 
| 
       100 
102 
     | 
    
         
             
                  end
         
     | 
| 
       101 
     | 
    
         
            -
                end
         
     | 
| 
       102 
103 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
      
 104 
     | 
    
         
            +
                  def dl_parse_notes(node, out)
         
     | 
| 
      
 105 
     | 
    
         
            +
                    return if node.elements.reject { |n| dt_dd? n }.empty?
         
     | 
| 
       105 
106 
     | 
    
         | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
      
 107 
     | 
    
         
            +
                    out.tr do |tr|
         
     | 
| 
      
 108 
     | 
    
         
            +
                      tr.td **{ colspan: 2 } do |td|
         
     | 
| 
      
 109 
     | 
    
         
            +
                        node.elements.reject { |n| dt_dd? n }.each { |n| parse(n, td) }
         
     | 
| 
      
 110 
     | 
    
         
            +
                      end
         
     | 
| 
       109 
111 
     | 
    
         
             
                    end
         
     | 
| 
       110 
112 
     | 
    
         
             
                  end
         
     | 
| 
       111 
     | 
    
         
            -
                end
         
     | 
| 
       112 
113 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                  dl = node.at(".//table[@class = 'dl']")
         
     | 
| 
       115 
     | 
    
         
            -
                  if dl.nil?
         
     | 
| 
       116 
     | 
    
         
            -
                    node.add_child("<p><b>#{@i18n.key}</b></p><table class='dl'></table>")
         
     | 
| 
      
 114 
     | 
    
         
            +
                  def figure_get_or_make_dl(node)
         
     | 
| 
       117 
115 
     | 
    
         
             
                    dl = node.at(".//table[@class = 'dl']")
         
     | 
| 
      
 116 
     | 
    
         
            +
                    if dl.nil?
         
     | 
| 
      
 117 
     | 
    
         
            +
                      node.add_child("<p><b>#{@i18n.key}</b></p><table class='dl'></table>")
         
     | 
| 
      
 118 
     | 
    
         
            +
                      dl = node.at(".//table[@class = 'dl']")
         
     | 
| 
      
 119 
     | 
    
         
            +
                    end
         
     | 
| 
      
 120 
     | 
    
         
            +
                    dl
         
     | 
| 
      
 121 
     | 
    
         
            +
                  end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                  def figure_aside_process(fig, aside, key)
         
     | 
| 
      
 124 
     | 
    
         
            +
                    # get rid of footnote link, it is in diagram
         
     | 
| 
      
 125 
     | 
    
         
            +
                    fig&.at("./a[@class='TableFootnoteRef']")&.remove
         
     | 
| 
      
 126 
     | 
    
         
            +
                    fnref = fig.at(".//span[@class='TableFootnoteRef']/..")
         
     | 
| 
      
 127 
     | 
    
         
            +
                    tr = key.add_child("<tr></tr>").first
         
     | 
| 
      
 128 
     | 
    
         
            +
                    dt = tr.add_child("<td valign='top' align='left'></td>").first
         
     | 
| 
      
 129 
     | 
    
         
            +
                    dd = tr.add_child("<td valign='top'></td>").first
         
     | 
| 
      
 130 
     | 
    
         
            +
                    fnref.parent = dt
         
     | 
| 
      
 131 
     | 
    
         
            +
                    aside.xpath(".//p").each do |a|
         
     | 
| 
      
 132 
     | 
    
         
            +
                      a.delete("class")
         
     | 
| 
      
 133 
     | 
    
         
            +
                      a.parent = dd
         
     | 
| 
      
 134 
     | 
    
         
            +
                    end
         
     | 
| 
       118 
135 
     | 
    
         
             
                  end
         
     | 
| 
       119 
     | 
    
         
            -
                  dl
         
     | 
| 
       120 
     | 
    
         
            -
                end
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                def figure_aside_process(fig, aside, key)
         
     | 
| 
       123 
     | 
    
         
            -
                  # get rid of footnote link, it is in diagram
         
     | 
| 
       124 
     | 
    
         
            -
                  fig&.at("./a[@class='TableFootnoteRef']")&.remove
         
     | 
| 
       125 
     | 
    
         
            -
                  fnref = fig.at(".//span[@class='TableFootnoteRef']/..")
         
     | 
| 
       126 
     | 
    
         
            -
                  tr = key.add_child("<tr></tr>").first
         
     | 
| 
       127 
     | 
    
         
            -
                  dt = tr.add_child("<td valign='top' align='left'></td>").first
         
     | 
| 
       128 
     | 
    
         
            -
                  dd = tr.add_child("<td valign='top'></td>").first
         
     | 
| 
       129 
     | 
    
         
            -
                  fnref.parent = dt
         
     | 
| 
       130 
     | 
    
         
            -
                  aside.xpath(".//p").each do |a|
         
     | 
| 
       131 
     | 
    
         
            -
                    a.delete("class")
         
     | 
| 
       132 
     | 
    
         
            -
                    a.parent = dd
         
     | 
| 
       133 
     | 
    
         
            -
                  end
         
     | 
| 
       134 
     | 
    
         
            -
                end
         
     | 
| 
       135 
136 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
      
 137 
     | 
    
         
            +
                  def note_p_parse(node, div)
         
     | 
| 
      
 138 
     | 
    
         
            +
                    name = node&.at(ns("./name"))&.remove
         
     | 
| 
      
 139 
     | 
    
         
            +
                    div.p **{ class: "Note" } do |p|
         
     | 
| 
      
 140 
     | 
    
         
            +
                      p.span **{ class: "note_label" } do |s|
         
     | 
| 
      
 141 
     | 
    
         
            +
                        name&.children&.each { |n| parse(n, s) }
         
     | 
| 
      
 142 
     | 
    
         
            +
                      end
         
     | 
| 
      
 143 
     | 
    
         
            +
                      insert_tab(p, 1)
         
     | 
| 
      
 144 
     | 
    
         
            +
                      node.first_element_child.children.each { |n| parse(n, p) }
         
     | 
| 
       141 
145 
     | 
    
         
             
                    end
         
     | 
| 
       142 
     | 
    
         
            -
                     
     | 
| 
       143 
     | 
    
         
            -
                    node.first_element_child.children.each { |n| parse(n, p) }
         
     | 
| 
      
 146 
     | 
    
         
            +
                    node.element_children[1..-1].each { |n| parse(n, div) }
         
     | 
| 
       144 
147 
     | 
    
         
             
                  end
         
     | 
| 
       145 
     | 
    
         
            -
                  node.element_children[1..-1].each { |n| parse(n, div) }
         
     | 
| 
       146 
     | 
    
         
            -
                end
         
     | 
| 
       147 
148 
     | 
    
         | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
      
 149 
     | 
    
         
            +
                  def note_parse1(node, div)
         
     | 
| 
      
 150 
     | 
    
         
            +
                    name = node&.at(ns("./name"))&.remove
         
     | 
| 
      
 151 
     | 
    
         
            +
                    div.p **{ class: "Note" } do |p|
         
     | 
| 
      
 152 
     | 
    
         
            +
                      p.span **{ class: "note_label" } do |s|
         
     | 
| 
      
 153 
     | 
    
         
            +
                        name&.children&.each { |n| parse(n, s) }
         
     | 
| 
      
 154 
     | 
    
         
            +
                      end
         
     | 
| 
      
 155 
     | 
    
         
            +
                      insert_tab(p, 1)
         
     | 
| 
       153 
156 
     | 
    
         
             
                    end
         
     | 
| 
       154 
     | 
    
         
            -
                     
     | 
| 
      
 157 
     | 
    
         
            +
                    node.children.each { |n| parse(n, div) }
         
     | 
| 
       155 
158 
     | 
    
         
             
                  end
         
     | 
| 
       156 
     | 
    
         
            -
                  node.children.each { |n| parse(n, div) }
         
     | 
| 
       157 
     | 
    
         
            -
                end
         
     | 
| 
       158 
159 
     | 
    
         | 
| 
       159 
     | 
    
         
            -
             
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
     | 
    
         
            -
             
     | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
      
 160 
     | 
    
         
            +
                  def termnote_parse(node, out)
         
     | 
| 
      
 161 
     | 
    
         
            +
                    name = node&.at(ns("./name"))&.remove
         
     | 
| 
      
 162 
     | 
    
         
            +
                    out.div **note_attrs(node) do |div|
         
     | 
| 
      
 163 
     | 
    
         
            +
                      div.p **{ class: "Note" } do |p|
         
     | 
| 
      
 164 
     | 
    
         
            +
                        if name
         
     | 
| 
      
 165 
     | 
    
         
            +
                          name.children.each { |n| parse(n, p) }
         
     | 
| 
      
 166 
     | 
    
         
            +
                          p << l10n(": ")
         
     | 
| 
      
 167 
     | 
    
         
            +
                        end
         
     | 
| 
      
 168 
     | 
    
         
            +
                        para_then_remainder(node.first_element_child, node, p, div)
         
     | 
| 
       166 
169 
     | 
    
         
             
                      end
         
     | 
| 
       167 
     | 
    
         
            -
                      para_then_remainder(node.first_element_child, node, p, div)
         
     | 
| 
       168 
170 
     | 
    
         
             
                    end
         
     | 
| 
       169 
171 
     | 
    
         
             
                  end
         
     | 
| 
       170 
     | 
    
         
            -
                end
         
     | 
| 
       171 
172 
     | 
    
         | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
      
 173 
     | 
    
         
            +
                  def para_attrs(node)
         
     | 
| 
      
 174 
     | 
    
         
            +
                    attrs = { class: para_class(node), id: node["id"], style: "" }
         
     | 
| 
      
 175 
     | 
    
         
            +
                    unless node["align"].nil?
         
     | 
| 
      
 176 
     | 
    
         
            +
                      attrs[:align] = node["align"] unless node["align"] == "justify"
         
     | 
| 
      
 177 
     | 
    
         
            +
                      attrs[:style] += "text-align:#{node['align']};"
         
     | 
| 
      
 178 
     | 
    
         
            +
                    end
         
     | 
| 
      
 179 
     | 
    
         
            +
                    attrs[:style] += keep_style(node).to_s
         
     | 
| 
      
 180 
     | 
    
         
            +
                    attrs[:style] = nil if attrs[:style].empty?
         
     | 
| 
      
 181 
     | 
    
         
            +
                    attrs
         
     | 
| 
       177 
182 
     | 
    
         
             
                  end
         
     | 
| 
       178 
     | 
    
         
            -
                  attrs[:style] += keep_style(node).to_s
         
     | 
| 
       179 
     | 
    
         
            -
                  attrs[:style] = nil if attrs[:style].empty?
         
     | 
| 
       180 
     | 
    
         
            -
                  attrs
         
     | 
| 
       181 
     | 
    
         
            -
                end
         
     | 
| 
       182 
183 
     | 
    
         | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
       187 
     | 
    
         
            -
             
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
      
 184 
     | 
    
         
            +
                  def example_table_attr(node)
         
     | 
| 
      
 185 
     | 
    
         
            +
                    super.merge(
         
     | 
| 
      
 186 
     | 
    
         
            +
                      style: "mso-table-lspace:15.0cm;margin-left:423.0pt;"\
         
     | 
| 
      
 187 
     | 
    
         
            +
                             "mso-table-rspace:15.0cm;margin-right:423.0pt;"\
         
     | 
| 
      
 188 
     | 
    
         
            +
                             "mso-table-anchor-horizontal:column;"\
         
     | 
| 
      
 189 
     | 
    
         
            +
                             "mso-table-overlap:never;border-collapse:collapse;"\
         
     | 
| 
      
 190 
     | 
    
         
            +
                             "#{keep_style(node)}",
         
     | 
| 
      
 191 
     | 
    
         
            +
                    )
         
     | 
| 
      
 192 
     | 
    
         
            +
                  end
         
     | 
| 
       192 
193 
     | 
    
         | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
             
     | 
| 
      
 194 
     | 
    
         
            +
                  def formula_where(deflist, out)
         
     | 
| 
      
 195 
     | 
    
         
            +
                    return unless deflist
         
     | 
| 
       195 
196 
     | 
    
         | 
| 
       196 
     | 
    
         
            -
             
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
             
     | 
| 
       199 
     | 
    
         
            -
             
     | 
| 
      
 197 
     | 
    
         
            +
                    out.p { |p| p << @i18n.where }
         
     | 
| 
      
 198 
     | 
    
         
            +
                    parse(deflist, out)
         
     | 
| 
      
 199 
     | 
    
         
            +
                    out.parent.at("./table")["class"] = "formula_dl"
         
     | 
| 
      
 200 
     | 
    
         
            +
                  end
         
     | 
| 
       200 
201 
     | 
    
         | 
| 
       201 
     | 
    
         
            -
             
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
       203 
     | 
    
         
            -
             
     | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
      
 202 
     | 
    
         
            +
                  def formula_parse1(node, out)
         
     | 
| 
      
 203 
     | 
    
         
            +
                    out.div **attr_code(class: "formula") do |div|
         
     | 
| 
      
 204 
     | 
    
         
            +
                      div.p do |_p|
         
     | 
| 
      
 205 
     | 
    
         
            +
                        parse(node.at(ns("./stem")), div)
         
     | 
| 
      
 206 
     | 
    
         
            +
                        insert_tab(div, 1)
         
     | 
| 
      
 207 
     | 
    
         
            +
                        if lbl = node&.at(ns("./name"))&.text
         
     | 
| 
      
 208 
     | 
    
         
            +
                          div << "(#{lbl})"
         
     | 
| 
      
 209 
     | 
    
         
            +
                        end
         
     | 
| 
       208 
210 
     | 
    
         
             
                      end
         
     | 
| 
       209 
211 
     | 
    
         
             
                    end
         
     | 
| 
       210 
212 
     | 
    
         
             
                  end
         
     | 
| 
       211 
     | 
    
         
            -
                end
         
     | 
| 
       212 
213 
     | 
    
         | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
             
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
             
     | 
| 
       218 
     | 
    
         
            -
             
     | 
| 
      
 214 
     | 
    
         
            +
                  def li_parse(node, out)
         
     | 
| 
      
 215 
     | 
    
         
            +
                    out.li **attr_code(id: node["id"]) do |li|
         
     | 
| 
      
 216 
     | 
    
         
            +
                      if node["uncheckedcheckbox"] == "true"
         
     | 
| 
      
 217 
     | 
    
         
            +
                        li << '<span class="zzMoveToFollowing">☐ </span>'
         
     | 
| 
      
 218 
     | 
    
         
            +
                      elsif node["checkedcheckbox"] == "true"
         
     | 
| 
      
 219 
     | 
    
         
            +
                        li << '<span class="zzMoveToFollowing">☑ </span>'
         
     | 
| 
      
 220 
     | 
    
         
            +
                      end
         
     | 
| 
      
 221 
     | 
    
         
            +
                      node.children.each { |n| parse(n, li) }
         
     | 
| 
       219 
222 
     | 
    
         
             
                    end
         
     | 
| 
       220 
     | 
    
         
            -
                    node.children.each { |n| parse(n, li) }
         
     | 
| 
       221 
223 
     | 
    
         
             
                  end
         
     | 
| 
       222 
     | 
    
         
            -
                end
         
     | 
| 
       223 
224 
     | 
    
         | 
| 
       224 
     | 
    
         
            -
             
     | 
| 
       225 
     | 
    
         
            -
             
     | 
| 
       226 
     | 
    
         
            -
             
     | 
| 
      
 225 
     | 
    
         
            +
                  def suffix_url(url)
         
     | 
| 
      
 226 
     | 
    
         
            +
                    return url if %r{^https?://}.match?(url)
         
     | 
| 
      
 227 
     | 
    
         
            +
                    return url unless File.extname(url).empty?
         
     | 
| 
       227 
228 
     | 
    
         | 
| 
       228 
     | 
    
         
            -
             
     | 
| 
      
 229 
     | 
    
         
            +
                    url.sub(/#{File.extname(url)}$/, ".doc")
         
     | 
| 
      
 230 
     | 
    
         
            +
                  end
         
     | 
| 
       229 
231 
     | 
    
         
             
                end
         
     | 
| 
       230 
232 
     | 
    
         
             
              end
         
     | 
| 
       231 
233 
     | 
    
         
             
            end
         
     |