metanorma-bipm 2.1.0 → 2.1.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/lib/isodoc/bipm/base_convert.rb +7 -0
- data/lib/isodoc/bipm/bipm.brochure.xsl +1043 -115
- data/lib/isodoc/bipm/bipm.guide.xsl +1043 -115
- data/lib/isodoc/bipm/bipm.mise-en-pratique.xsl +1043 -115
- data/lib/isodoc/bipm/bipm.rapport.xsl +1043 -115
- data/lib/isodoc/bipm/jcgm.standard.xsl +1042 -114
- data/lib/isodoc/bipm/presentation_xml_convert.rb +17 -0
- data/lib/metanorma/bipm/converter.rb +38 -108
- data/lib/metanorma/bipm/front.rb +113 -0
- data/lib/metanorma/bipm/version.rb +1 -1
- metadata +3 -2
| @@ -169,6 +169,23 @@ module IsoDoc | |
| 169 169 | 
             
                    super || @xrefs.klass.standard?(bibitem)
         | 
| 170 170 | 
             
                  end
         | 
| 171 171 |  | 
| 172 | 
            +
                  def expand_citeas(text)
         | 
| 173 | 
            +
                    ret = super
         | 
| 174 | 
            +
                    if @lang == "fr" && /^(CGPM|CIPM) /.match?(ret)
         | 
| 175 | 
            +
                      ret.sub!(/^(CGPM|CIPM) (\S+)/) do |_m|
         | 
| 176 | 
            +
                        "#{$1} – #{FR_OUTCOME_TYPE[$2.to_sym] || $2}"
         | 
| 177 | 
            +
                      end
         | 
| 178 | 
            +
                    end
         | 
| 179 | 
            +
                    ret
         | 
| 180 | 
            +
                  end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  FR_OUTCOME_TYPE = {
         | 
| 183 | 
            +
                    Resolution: "Résolution",
         | 
| 184 | 
            +
                    Decision: "Décision",
         | 
| 185 | 
            +
                    Recommendation: "Recommandation",
         | 
| 186 | 
            +
                    Declaration: "Déclaration",
         | 
| 187 | 
            +
                  }.freeze
         | 
| 188 | 
            +
             | 
| 172 189 | 
             
                  include Init
         | 
| 173 190 | 
             
                end
         | 
| 174 191 | 
             
              end
         | 
| @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            require "metanorma/standoc/converter"
         | 
| 2 2 | 
             
            require "metanorma/generic/converter"
         | 
| 3 | 
            +
            require_relative "front"
         | 
| 3 4 |  | 
| 4 5 | 
             
            module Metanorma
         | 
| 5 6 | 
             
              module BIPM
         | 
| @@ -22,114 +23,6 @@ module Metanorma | |
| 22 23 | 
             
                    { org_name_long => configuration.organization_name_short }
         | 
| 23 24 | 
             
                  end
         | 
| 24 25 |  | 
| 25 | 
            -
                  def metadata_committee(node, xml)
         | 
| 26 | 
            -
                    return unless node.attr("committee-en") || node.attr("committee-fr")
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                    xml.editorialgroup do |a|
         | 
| 29 | 
            -
                      metadata_committee1(node, a)
         | 
| 30 | 
            -
                      i = 2
         | 
| 31 | 
            -
                      while node.attr("committee-en_#{i}") || node.attr("committee-fr_#{i}")
         | 
| 32 | 
            -
                        metadata_committee2(node, a, i)
         | 
| 33 | 
            -
                        i += 1
         | 
| 34 | 
            -
                      end
         | 
| 35 | 
            -
                      metadata_workgroup(node, a)
         | 
| 36 | 
            -
                    end
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  def metadata_committee1(node, xml)
         | 
| 40 | 
            -
                    xml.committee **attr_code(acronym:
         | 
| 41 | 
            -
                                              node.attr("committee-acronym")) do |c|
         | 
| 42 | 
            -
                      e = node.attr("committee-en") and
         | 
| 43 | 
            -
                        c.variant e, language: "en", script: "Latn"
         | 
| 44 | 
            -
                      e = node.attr("committee-fr") and
         | 
| 45 | 
            -
                        c.variant e, language: "fr", script: "Latn"
         | 
| 46 | 
            -
                    end
         | 
| 47 | 
            -
                  end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                  def metadata_committee2(node, xml, num)
         | 
| 50 | 
            -
                    xml.committee **attr_code(acronym:
         | 
| 51 | 
            -
                                              node.attr("committee-acronym_#{num}")) do |c|
         | 
| 52 | 
            -
                      %w(en fr).each do |lg|
         | 
| 53 | 
            -
                        e = node.attr("committee-#{lg}_#{num}") and
         | 
| 54 | 
            -
                          c.variant e, language: lg, script: "Latn"
         | 
| 55 | 
            -
                      end
         | 
| 56 | 
            -
                    end
         | 
| 57 | 
            -
                  end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                  def metadata_workgroup(node, xml)
         | 
| 60 | 
            -
                    xml.workgroup(node.attr("workgroup"),
         | 
| 61 | 
            -
                                  **attr_code(acronym: node.attr("workgroup-acronym")))
         | 
| 62 | 
            -
                    i = 2
         | 
| 63 | 
            -
                    while node.attr("workgroup_#{i}")
         | 
| 64 | 
            -
                      xml.workgroup(
         | 
| 65 | 
            -
                        node.attr("workgroup_#{i}"),
         | 
| 66 | 
            -
                        **attr_code(acronym: node.attr("workgroup-acronym_#{i}"))
         | 
| 67 | 
            -
                      )
         | 
| 68 | 
            -
                      i += 1
         | 
| 69 | 
            -
                    end
         | 
| 70 | 
            -
                  end
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                  def metadata_relations(node, xml)
         | 
| 73 | 
            -
                    super
         | 
| 74 | 
            -
                    relation_supersedes_self(node, xml, "")
         | 
| 75 | 
            -
                    i = 2
         | 
| 76 | 
            -
                    while relation_supersedes_self(node, xml, "_#{i}")
         | 
| 77 | 
            -
                      i += 1
         | 
| 78 | 
            -
                    end
         | 
| 79 | 
            -
                  end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                  def relation_supersedes_self(node, xml, suffix)
         | 
| 82 | 
            -
                    d = node.attr("supersedes-date#{suffix}")
         | 
| 83 | 
            -
                    draft = node.attr("supersedes-draft#{suffix}")
         | 
| 84 | 
            -
                    edition = node.attr("supersedes-edition#{suffix}")
         | 
| 85 | 
            -
                    return false unless d || draft || edition
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                    relation_supersedes_self1(xml, d, edition, draft)
         | 
| 88 | 
            -
                  end
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                  def relation_supersedes_self1(xml, date, edition, draft)
         | 
| 91 | 
            -
                    xml.relation **{ type: "supersedes" } do |r|
         | 
| 92 | 
            -
                      r.bibitem do |b|
         | 
| 93 | 
            -
                        date and b.date(date,
         | 
| 94 | 
            -
                                        **{ type: edition ? "published" : "circulated" })
         | 
| 95 | 
            -
                        edition and b.edition edition
         | 
| 96 | 
            -
                        draft and b.version do |v|
         | 
| 97 | 
            -
                          v.draft draft
         | 
| 98 | 
            -
                        end
         | 
| 99 | 
            -
                      end
         | 
| 100 | 
            -
                    end
         | 
| 101 | 
            -
                  end
         | 
| 102 | 
            -
             | 
| 103 | 
            -
                  def personal_role(node, xml, suffix)
         | 
| 104 | 
            -
                    role = node.attr("role#{suffix}") || "author"
         | 
| 105 | 
            -
                    unless %w(author editor).include?(role.downcase)
         | 
| 106 | 
            -
                      desc = role
         | 
| 107 | 
            -
                      role = "editor"
         | 
| 108 | 
            -
                    end
         | 
| 109 | 
            -
                    xml.role desc, **{ type: role.downcase }
         | 
| 110 | 
            -
                  end
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                  def title(node, xml)
         | 
| 113 | 
            -
                    ["en", "fr"].each do |lang|
         | 
| 114 | 
            -
                      at = { language: lang, format: "text/plain" }
         | 
| 115 | 
            -
                      xml.title **attr_code(at.merge(type: "main")) do |t1|
         | 
| 116 | 
            -
                        t1 << Metanorma::Utils::asciidoc_sub(node.attr("title-#{lang}"))
         | 
| 117 | 
            -
                      end
         | 
| 118 | 
            -
                      %w(cover appendix annex part subpart provenance).each do |w|
         | 
| 119 | 
            -
                        typed_title(node, xml, lang, w)
         | 
| 120 | 
            -
                      end
         | 
| 121 | 
            -
                    end
         | 
| 122 | 
            -
                  end
         | 
| 123 | 
            -
             | 
| 124 | 
            -
                  def typed_title(node, xml, lang, type)
         | 
| 125 | 
            -
                    at = { language: lang, format: "text/plain" }
         | 
| 126 | 
            -
                    return unless title = node.attr("title-#{type}-#{lang}")
         | 
| 127 | 
            -
             | 
| 128 | 
            -
                    xml.title **attr_code(at.merge(type: type)) do |t1|
         | 
| 129 | 
            -
                      t1 << Metanorma::Utils::asciidoc_sub(title)
         | 
| 130 | 
            -
                    end
         | 
| 131 | 
            -
                  end
         | 
| 132 | 
            -
             | 
| 133 26 | 
             
                  def sectiontype_streamline(ret)
         | 
| 134 27 | 
             
                    case ret
         | 
| 135 28 | 
             
                    when "introduction" then @jcgm ? "introduction" : "clause"
         | 
| @@ -157,6 +50,43 @@ module Metanorma | |
| 157 50 | 
             
                    ret
         | 
| 158 51 | 
             
                  end
         | 
| 159 52 |  | 
| 53 | 
            +
                  def reference_names(xmldoc)
         | 
| 54 | 
            +
                    xmldoc.xpath("//bibitem[not(ancestor::bibitem)]").each do |ref|
         | 
| 55 | 
            +
                      docid = ref.at("./docidentifier[@type = 'metanorma']") ||
         | 
| 56 | 
            +
                        ref.at("./docidentifier[not(@type = 'DOI')]") or next
         | 
| 57 | 
            +
                      date = ref.at("./date[@type = 'published']")
         | 
| 58 | 
            +
                      reference = format_ref(reference_names1(docid, date, docid["type"]),
         | 
| 59 | 
            +
                                             docid["type"])
         | 
| 60 | 
            +
                      @anchors[ref["id"]] = { xref: reference }
         | 
| 61 | 
            +
                    end
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  def reference_names1(docid, date, type)
         | 
| 65 | 
            +
                    ret = docid.children.to_xml
         | 
| 66 | 
            +
                    if type == "BIPM" && date &&
         | 
| 67 | 
            +
                        /(CIPM|CGPM) (Decision|Resolution)/.match?(docid)
         | 
| 68 | 
            +
                      ret += " (#{date_range(date)})"
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
                    ret
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  def date_range(date)
         | 
| 74 | 
            +
                    from = date.at(("./from"))
         | 
| 75 | 
            +
                    to = date.at(("./to"))
         | 
| 76 | 
            +
                    on = date.at(("./on"))
         | 
| 77 | 
            +
                    return date.text unless from || on || to
         | 
| 78 | 
            +
                    return on.text.sub(/-.*$/, "") if on
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                    ret = "#{from.text.sub(/-.*$/, '')}–"
         | 
| 81 | 
            +
                    ret += to.text.sub(/-.*$/, "") if to
         | 
| 82 | 
            +
                    ret
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  def format_ref(ref, type)
         | 
| 86 | 
            +
                    ref = ref.sub(/^BIPM /, "") if type == "BIPM"
         | 
| 87 | 
            +
                    super
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
             | 
| 160 90 | 
             
                  def clause_parse(attrs, xml, node)
         | 
| 161 91 | 
             
                    node.option?("unnumbered") and attrs[:unnumbered] = true
         | 
| 162 92 | 
             
                    super
         | 
| @@ -0,0 +1,113 @@ | |
| 1 | 
            +
            module Metanorma
         | 
| 2 | 
            +
              module BIPM
         | 
| 3 | 
            +
                class Converter < Metanorma::Generic::Converter
         | 
| 4 | 
            +
                  def metadata_committee(node, xml)
         | 
| 5 | 
            +
                    return unless node.attr("committee-en") || node.attr("committee-fr")
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    xml.editorialgroup do |a|
         | 
| 8 | 
            +
                      metadata_committee1(node, a)
         | 
| 9 | 
            +
                      i = 2
         | 
| 10 | 
            +
                      while node.attr("committee-en_#{i}") || node.attr("committee-fr_#{i}")
         | 
| 11 | 
            +
                        metadata_committee2(node, a, i)
         | 
| 12 | 
            +
                        i += 1
         | 
| 13 | 
            +
                      end
         | 
| 14 | 
            +
                      metadata_workgroup(node, a)
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def metadata_committee1(node, xml)
         | 
| 19 | 
            +
                    xml.committee **attr_code(acronym:
         | 
| 20 | 
            +
                                              node.attr("committee-acronym")) do |c|
         | 
| 21 | 
            +
                      e = node.attr("committee-en") and
         | 
| 22 | 
            +
                        c.variant e, language: "en", script: "Latn"
         | 
| 23 | 
            +
                      e = node.attr("committee-fr") and
         | 
| 24 | 
            +
                        c.variant e, language: "fr", script: "Latn"
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def metadata_committee2(node, xml, num)
         | 
| 29 | 
            +
                    xml.committee **attr_code(acronym:
         | 
| 30 | 
            +
                                              node.attr("committee-acronym_#{num}")) do |c|
         | 
| 31 | 
            +
                      %w(en fr).each do |lg|
         | 
| 32 | 
            +
                        e = node.attr("committee-#{lg}_#{num}") and
         | 
| 33 | 
            +
                          c.variant e, language: lg, script: "Latn"
         | 
| 34 | 
            +
                      end
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  def metadata_workgroup(node, xml)
         | 
| 39 | 
            +
                    xml.workgroup(node.attr("workgroup"),
         | 
| 40 | 
            +
                                  **attr_code(acronym: node.attr("workgroup-acronym")))
         | 
| 41 | 
            +
                    i = 2
         | 
| 42 | 
            +
                    while node.attr("workgroup_#{i}")
         | 
| 43 | 
            +
                      xml.workgroup(
         | 
| 44 | 
            +
                        node.attr("workgroup_#{i}"),
         | 
| 45 | 
            +
                        **attr_code(acronym: node.attr("workgroup-acronym_#{i}")),
         | 
| 46 | 
            +
                      )
         | 
| 47 | 
            +
                      i += 1
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def metadata_relations(node, xml)
         | 
| 52 | 
            +
                    super
         | 
| 53 | 
            +
                    relation_supersedes_self(node, xml, "")
         | 
| 54 | 
            +
                    i = 2
         | 
| 55 | 
            +
                    while relation_supersedes_self(node, xml, "_#{i}")
         | 
| 56 | 
            +
                      i += 1
         | 
| 57 | 
            +
                    end
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  def relation_supersedes_self(node, xml, suffix)
         | 
| 61 | 
            +
                    d = node.attr("supersedes-date#{suffix}")
         | 
| 62 | 
            +
                    draft = node.attr("supersedes-draft#{suffix}")
         | 
| 63 | 
            +
                    edition = node.attr("supersedes-edition#{suffix}")
         | 
| 64 | 
            +
                    return false unless d || draft || edition
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    relation_supersedes_self1(xml, d, edition, draft)
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  def relation_supersedes_self1(xml, date, edition, draft)
         | 
| 70 | 
            +
                    xml.relation **{ type: "supersedes" } do |r|
         | 
| 71 | 
            +
                      r.bibitem do |b|
         | 
| 72 | 
            +
                        date and b.date(date,
         | 
| 73 | 
            +
                                        **{ type: edition ? "published" : "circulated" })
         | 
| 74 | 
            +
                        edition and b.edition edition
         | 
| 75 | 
            +
                        draft and b.version do |v|
         | 
| 76 | 
            +
                          v.draft draft
         | 
| 77 | 
            +
                        end
         | 
| 78 | 
            +
                      end
         | 
| 79 | 
            +
                    end
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  def personal_role(node, xml, suffix)
         | 
| 83 | 
            +
                    role = node.attr("role#{suffix}") || "author"
         | 
| 84 | 
            +
                    unless %w(author editor).include?(role.downcase)
         | 
| 85 | 
            +
                      desc = role
         | 
| 86 | 
            +
                      role = "editor"
         | 
| 87 | 
            +
                    end
         | 
| 88 | 
            +
                    xml.role desc, **{ type: role.downcase }
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                  def title(node, xml)
         | 
| 92 | 
            +
                    ["en", "fr"].each do |lang|
         | 
| 93 | 
            +
                      at = { language: lang, format: "text/plain" }
         | 
| 94 | 
            +
                      xml.title **attr_code(at.merge(type: "main")) do |t1|
         | 
| 95 | 
            +
                        t1 << Metanorma::Utils::asciidoc_sub(node.attr("title-#{lang}"))
         | 
| 96 | 
            +
                      end
         | 
| 97 | 
            +
                      %w(cover appendix annex part subpart provenance).each do |w|
         | 
| 98 | 
            +
                        typed_title(node, xml, lang, w)
         | 
| 99 | 
            +
                      end
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
                  end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                  def typed_title(node, xml, lang, type)
         | 
| 104 | 
            +
                    at = { language: lang, format: "text/plain" }
         | 
| 105 | 
            +
                    return unless title = node.attr("title-#{type}-#{lang}")
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                    xml.title **attr_code(at.merge(type: type)) do |t1|
         | 
| 108 | 
            +
                      t1 << Metanorma::Utils::asciidoc_sub(title)
         | 
| 109 | 
            +
                    end
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: metanorma-bipm
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.1. | 
| 4 | 
            +
              version: 2.1.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ribose Inc.
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-05- | 
| 11 | 
            +
            date: 2022-05-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: metanorma-generic
         | 
| @@ -274,6 +274,7 @@ files: | |
| 274 274 | 
             
            - lib/metanorma/bipm/boilerplate-fr.xml
         | 
| 275 275 | 
             
            - lib/metanorma/bipm/boilerplate-jcgm-en.xml
         | 
| 276 276 | 
             
            - lib/metanorma/bipm/converter.rb
         | 
| 277 | 
            +
            - lib/metanorma/bipm/front.rb
         | 
| 277 278 | 
             
            - lib/metanorma/bipm/isodoc.rng
         | 
| 278 279 | 
             
            - lib/metanorma/bipm/processor.rb
         | 
| 279 280 | 
             
            - lib/metanorma/bipm/reqt.rng
         |