metanorma-iso 2.1.8 → 2.2.0
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/iso/html/htmlstyle.css +47 -0
- data/lib/isodoc/iso/html/isodoc-dis.css +4493 -0
- data/lib/isodoc/iso/html/isodoc.css +1346 -0
- data/lib/isodoc/iso/html/style-human.css +1062 -0
- data/lib/isodoc/iso/html/style-iso.css +1088 -0
- data/lib/isodoc/iso/html/wordstyle-dis.css +2280 -0
- data/lib/isodoc/iso/html/wordstyle.css +1728 -0
- data/lib/isodoc/iso/i18n-fr.yaml +0 -1
- data/lib/isodoc/iso/i18n-zh-Hans.yaml +0 -1
- data/lib/isodoc/iso/init.rb +15 -10
- data/lib/isodoc/iso/iso.amendment.xsl +77 -14
- data/lib/isodoc/iso/iso.international-standard.xsl +77 -14
- data/lib/isodoc/iso/metadata.rb +1 -1
- data/lib/isodoc/iso/presentation_xref.rb +1 -0
- data/lib/isodoc/iso/word_convert.rb +6 -0
- data/lib/isodoc/iso/xref.rb +6 -11
- data/lib/metanorma/iso/biblio.rng +32 -1
- data/lib/metanorma/iso/front_id.rb +2 -2
- data/lib/metanorma/iso/version.rb +1 -1
- data/lib/metanorma/iso.rb +0 -1
- data/lib/metanorma/requirements/modspec.rb +67 -4
- data/lib/metanorma-iso.rb +1 -0
- data/lib/relaton/render/config.yml +53 -1
- data/metanorma-iso.gemspec +1 -1
- data/spec/isodoc/i18n_spec.rb +2 -2
- data/spec/isodoc/ref_spec.rb +4 -4
- data/spec/relaton/render_spec.rb +568 -0
- data/spec/requirements/requirement_components_spec.rb +622 -0
- data/spec/requirements/requirements_spec.rb +434 -52
- data/spec/requirements/xref_spec.rb +6 -0
- data/spec/vcr_cassettes/docrels.yml +34 -34
- data/spec/vcr_cassettes/withdrawn_iso.yml +29 -29
- metadata +13 -4
| @@ -3,12 +3,20 @@ module Metanorma | |
| 3 3 | 
             
                class Modspec
         | 
| 4 4 | 
             
                  # Don't want to inherit from Metanorma::Requirements::Modspec
         | 
| 5 5 | 
             
                  class Iso < ::Metanorma::Requirements::Modspec
         | 
| 6 | 
            +
                    def recommendation_label_xref(elem, label, xrefs, _type)
         | 
| 7 | 
            +
                      id = @reqtlabels[label]
         | 
| 8 | 
            +
                      number = xrefs.anchor(id, :xref_reqt2reqt, false)
         | 
| 9 | 
            +
                      number.nil? and return type
         | 
| 10 | 
            +
                      elem.ancestors("requirement, recommendation, permission").empty? and
         | 
| 11 | 
            +
                        return number
         | 
| 12 | 
            +
                      "<xref target='#{id}'>#{number}</xref>"
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
             | 
| 6 15 | 
             
                    def recommendation_label(elem, type, xrefs)
         | 
| 7 16 | 
             
                      lbl = super
         | 
| 8 17 | 
             
                      title = elem.at(ns("./title"))
         | 
| 9 | 
            -
                      return lbl unless title  | 
| 10 | 
            -
             | 
| 11 | 
            -
                      #  elem.ancestors("requirement, recommendation, permission").empty?
         | 
| 18 | 
            +
                      return lbl unless title &&
         | 
| 19 | 
            +
                        elem.ancestors("requirement, recommendation, permission").empty?
         | 
| 12 20 |  | 
| 13 21 | 
             
                      lbl += l10n(": ") if lbl
         | 
| 14 22 | 
             
                      lbl += title.children.to_xml
         | 
| @@ -30,7 +38,7 @@ module Metanorma | |
| 30 38 | 
             
                    def requirement_component_parse(node, out)
         | 
| 31 39 | 
             
                      if node["exclude"] != "true" && node.name == "description"
         | 
| 32 40 | 
             
                        lbl = "statement"
         | 
| 33 | 
            -
                        lbl = " | 
| 41 | 
            +
                        lbl = "description" if recommend_class(node.parent) == "recommendclass"
         | 
| 34 42 | 
             
                        out << "<tr><td>#{@labels['modspec'][lbl]}</td>"\
         | 
| 35 43 | 
             
                               "<td>#{node.children.to_xml}</td></tr>"
         | 
| 36 44 | 
             
                      else
         | 
| @@ -54,6 +62,61 @@ module Metanorma | |
| 54 62 | 
             
                          m << t.at(ns("./name")).children.to_xml
         | 
| 55 63 | 
             
                        end.join("<br/>")
         | 
| 56 64 | 
             
                    end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    def postprocess_anchor_struct(block, anchor)
         | 
| 67 | 
            +
                      super
         | 
| 68 | 
            +
                      anchor[:xref_reqt2reqt] = anchor[:xref_bare]
         | 
| 69 | 
            +
                      if l = block.at(ns("./title"))
         | 
| 70 | 
            +
                        anchor[:xref_reqt2reqt] +=
         | 
| 71 | 
            +
                          l10n(": ") + l.children.to_xml.strip
         | 
| 72 | 
            +
                      end
         | 
| 73 | 
            +
                      anchor
         | 
| 74 | 
            +
                    end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                    def reqt_ids(docxml)
         | 
| 77 | 
            +
                      docxml.xpath(ns("//requirement | //recommendation | //permission"))
         | 
| 78 | 
            +
                        .each_with_object({}) do |r, m|
         | 
| 79 | 
            +
                          id = r.at(ns("./identifier")) or next
         | 
| 80 | 
            +
                          m[id.text] =
         | 
| 81 | 
            +
                            { id: r["id"],
         | 
| 82 | 
            +
                              lbl: @xrefs.anchor(r["id"], :xref_reqt2reqt, false) }
         | 
| 83 | 
            +
                        end
         | 
| 84 | 
            +
                    end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    def reqt_links_test(docxml)
         | 
| 87 | 
            +
                      docxml.xpath(ns("//requirement | //recommendation | //permission"))
         | 
| 88 | 
            +
                        .each_with_object({}) do |r, m|
         | 
| 89 | 
            +
                          next unless %w(conformanceclass
         | 
| 90 | 
            +
                                         verification).include?(r["type"])
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                          subj = r.at(ns("./classification[tag = 'target']/value"))
         | 
| 93 | 
            +
                          id = r.at(ns("./identifier")) or next
         | 
| 94 | 
            +
                          lbl = @xrefs.anchor(@reqt_ids[id.text.strip][:id], :xref_reqt2reqt,
         | 
| 95 | 
            +
                                              false)
         | 
| 96 | 
            +
                          next unless subj
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                          m[subj.text] = { lbl: lbl, id: r["id"] }
         | 
| 99 | 
            +
                        end
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                    def reqt_links_class(docxml)
         | 
| 103 | 
            +
                      docxml.xpath(ns("//requirement | //recommendation | //permission"))
         | 
| 104 | 
            +
                        .each_with_object({}) do |r, m|
         | 
| 105 | 
            +
                          next unless %w(class
         | 
| 106 | 
            +
                                         conformanceclass).include?(r["type"])
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                          id = r.at(ns("./identifier")) or next
         | 
| 109 | 
            +
                          r.xpath(ns("./requirement | ./recommendation | ./permission"))
         | 
| 110 | 
            +
                            .each do |r1|
         | 
| 111 | 
            +
                            id1 = r1.at(ns("./identifier")) or next
         | 
| 112 | 
            +
                            lbl = @xrefs.anchor(@reqt_ids[id.text.strip][:id],
         | 
| 113 | 
            +
                                                :xref_reqt2reqt, false)
         | 
| 114 | 
            +
                            next unless lbl
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                            m[id1.text] = { lbl: lbl, id: r["id"] }
         | 
| 117 | 
            +
                          end
         | 
| 118 | 
            +
                        end
         | 
| 119 | 
            +
                    end
         | 
| 57 120 | 
             
                  end
         | 
| 58 121 | 
             
                end
         | 
| 59 122 | 
             
              end
         | 
    
        data/lib/metanorma-iso.rb
    CHANGED
    
    | @@ -10,6 +10,7 @@ require_relative "isodoc/iso/isosts_convert" | |
| 10 10 | 
             
            require_relative "isodoc/iso/presentation_xml_convert"
         | 
| 11 11 | 
             
            require_relative "html2doc/lists"
         | 
| 12 12 | 
             
            require "asciidoctor/extensions"
         | 
| 13 | 
            +
            require "metanorma"
         | 
| 13 14 |  | 
| 14 15 | 
             
            if defined? Metanorma::Registry
         | 
| 15 16 | 
             
              require_relative "metanorma/iso"
         | 
| @@ -1,4 +1,56 @@ | |
| 1 | 
            +
            extenttemplate:
         | 
| 2 | 
            +
              book: "{{ volume }} {{ page }}"
         | 
| 3 | 
            +
              booklet: book
         | 
| 4 | 
            +
              proceedings: book
         | 
| 5 | 
            +
              journal: book
         | 
| 6 | 
            +
              standard: book
         | 
| 7 | 
            +
              techreport: book
         | 
| 8 | 
            +
              inbook: "{{ volume }} {{ page }}"
         | 
| 9 | 
            +
              misc: "{{ volume }} {{issue}} {{ page }}, {{ duration }}"
         | 
| 10 | 
            +
            nametemplate:
         | 
| 11 | 
            +
              one: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %}"
         | 
| 12 | 
            +
              two: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %} , & {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{{surname[1]}} {{initials[1] | join: ''}}.{% endif %}"
         | 
| 13 | 
            +
              more: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %} , {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{{surname[1]}} {{initials[1] | join: ''}}. {% endif %} , & {% if nonpersonal[2] %}{{ nonpersonal[2] }}{% else %}{{surname[2]}} {{initials[2] | join: ''}}.{% endif %}"
         | 
| 14 | 
            +
            # disabled the following: they should be provided in inheriting calls
         | 
| 15 | 
            +
            # etal: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0] | upcase}} ,_{%if given[0]%}{{given[0]}} {{middle[0]}}{%else%}{{initials[0] | join: ' '}}.{%endif%}{% endif %}, {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{%if given[1]%}{{given[1]}} {{middle[1]}}{%else%}{{initials[1] | join: ' '}}.{%endif%} {{surname[1] | upcase}}{% endif %} <em>et al.</em>"
         | 
| 16 | 
            +
            # etal_count: 5
         | 
| 17 | 
            +
            seriestemplate: "{% if series_formatted %}{{ series_formatted }}{%else%}{% if series_abbr %}{{series_abbr}}{% else %}{{series_title}}{% endif %} ({{series_run}}) {{series_num}}|({{series_partnumber}}){%endif%}"
         | 
| 18 | 
            +
            journaltemplate: "<em>{% if series_abbr %}{{series_abbr}}{% else %}{{series_title}}{% endif %}</em> ({{series_run}}) {{ labels['volume'] }}_{{series_num}} {{ labels['part'] }}_{{series_partnumber}}"
         | 
| 1 19 | 
             
            template:
         | 
| 2 20 | 
             
              # skip standardidentifier, it is inserted in front of formattedref within metanorma
         | 
| 3 21 | 
             
              standard: "<em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }}." 
         | 
| 4 | 
            -
              website: "{{ creatornames }} ({{ role }}) . <em><span_class='stddocTitle'>{{ title }}</span></em> [website]. {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{ | 
| 22 | 
            +
              website: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em><span_class='stddocTitle'>{{ title }}</span></em> [website]. {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{place}}: {{ publisher }}. {{date}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
         | 
| 23 | 
            +
              book: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . <em>{{ title }}</em> . {{ edition | capitalize_first }}. ({{ series }}). {% if place %}{{place}}{%else%}{{ labels['no_place']}}{%endif%}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
         | 
| 24 | 
            +
              booklet: book
         | 
| 25 | 
            +
              manual: book
         | 
| 26 | 
            +
              proceedings: book
         | 
| 27 | 
            +
              inbook: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . {{ title }} . <em>{{host_title}}</em> ({{host_role}} {{ host_creatornames}}). {{ edition | capitalize_first }}. ({{ series }}). {% if place %}{{place}}{%else%}{{ labels['no_place']}}{%endif%}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
         | 
| 28 | 
            +
              inproceedings: inbook
         | 
| 29 | 
            +
              incollection: inbook
         | 
| 30 | 
            +
              journal: "<em>{{ title}}</em> . {{ edition | capitalize_first }}. {{place}}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
         | 
| 31 | 
            +
              article: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . {{ title }}. {{ series }} . {{date}}, {{ extent }}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
         | 
| 32 | 
            +
              software: "<smallcap>{{ creatornames }}</smallcap> ({{ role}}) . <em>{{ title }}</em> . {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{medium | capitalize}}. {{place}}: {{publisher}}. {{date}}. {{size}}. {{extent}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
         | 
| 33 | 
            +
              electronic resource:  software
         | 
| 34 | 
            +
              dataset: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{medium | capitalize }}. {{ labels['in'] | capitalize }}:_{{series}}. {{date}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. {{ authoritative_identifier | join '. ' }}. {{ other_identifier | join '. ' }}.  ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ size }}. {{ extent}}. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
         | 
| 35 | 
            +
              webresource: website
         | 
| 36 | 
            +
              unpublished: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ medium | capitalize }}. {{ date }}. {{ labels['at'] | capitalize}}:_{{ access_location }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]."
         | 
| 37 | 
            +
              presentation: unpublished
         | 
| 38 | 
            +
              thesis: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ medium | capitalize }}. {{place}}: {{ publisher }}. {{ date }}. {{ labels['at'] | capitalize}}:_{{ access_location }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]."
         | 
| 39 | 
            +
              misc:  "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ date }}."
         | 
| 40 | 
            +
              # following are # unsupported types:
         | 
| 41 | 
            +
              map: misc
         | 
| 42 | 
            +
              audiovisual: misc
         | 
| 43 | 
            +
              film: misc
         | 
| 44 | 
            +
              video: misc
         | 
| 45 | 
            +
              broadcast: misc
         | 
| 46 | 
            +
              graphic_work: misc
         | 
| 47 | 
            +
              music: misc
         | 
| 48 | 
            +
              performance: misc
         | 
| 49 | 
            +
              patent: misc
         | 
| 50 | 
            +
              archival: misc
         | 
| 51 | 
            +
              social_media: misc
         | 
| 52 | 
            +
              alert: misc
         | 
| 53 | 
            +
              message: misc
         | 
| 54 | 
            +
              conversation: misc
         | 
| 55 | 
            +
              internal: misc
         | 
| 56 | 
            +
             | 
    
        data/metanorma-iso.gemspec
    CHANGED
    
    | @@ -29,7 +29,7 @@ Gem::Specification.new do |spec| | |
| 29 29 | 
             
              spec.test_files    = `git ls-files -- {spec}/*`.split("\n")
         | 
| 30 30 | 
             
              spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
         | 
| 31 31 |  | 
| 32 | 
            -
              spec.add_dependency "metanorma-standoc", "~> 2.2. | 
| 32 | 
            +
              spec.add_dependency "metanorma-standoc", "~> 2.2.4"
         | 
| 33 33 | 
             
              spec.add_dependency "mnconvert", "~> 1.14"
         | 
| 34 34 | 
             
              spec.add_dependency "pubid-iso"
         | 
| 35 35 | 
             
              spec.add_dependency "ruby-jing"
         | 
    
        data/spec/isodoc/i18n_spec.rb
    CHANGED
    
    | @@ -1332,7 +1332,7 @@ RSpec.describe IsoDoc do | |
| 1332 1332 | 
             
                      <clause id="D" obligation="normative" type="scope" displayorder='3'>
         | 
| 1333 1333 | 
             
                        <title depth="1">1<tab/>Scope</title>
         | 
| 1334 1334 | 
             
                        <p id="E">
         | 
| 1335 | 
            -
                          <eref bibitemid="ISO712" type="inline"><locality type="table"><referenceFrom>1</referenceFrom><referenceTo>1</referenceTo></locality>ISO 712 | 
| 1335 | 
            +
                          <eref bibitemid="ISO712" type="inline"><locality type="table"><referenceFrom>1</referenceFrom><referenceTo>1</referenceTo></locality>ISO 712, <span class='citetbl'>第1–1表</span></eref>
         | 
| 1336 1336 | 
             
                        </p>
         | 
| 1337 1337 | 
             
                      </clause>
         | 
| 1338 1338 | 
             
                      <clause id="H" obligation="normative" displayorder='5'>
         | 
| @@ -1423,7 +1423,7 @@ RSpec.describe IsoDoc do | |
| 1423 1423 | 
             
                         <div id='D'>
         | 
| 1424 1424 | 
             
                           <h1>1 Scope</h1>
         | 
| 1425 1425 | 
             
                           <p id='E'>
         | 
| 1426 | 
            -
                             <a href='#ISO712'>ISO 712 | 
| 1426 | 
            +
                             <a href='#ISO712'>ISO 712, 第1–1表</a>
         | 
| 1427 1427 | 
             
                           </p>
         | 
| 1428 1428 | 
             
                         </div>
         | 
| 1429 1429 | 
             
                         <div>
         | 
    
        data/spec/isodoc/ref_spec.rb
    CHANGED
    
    | @@ -209,12 +209,12 @@ RSpec.describe IsoDoc do | |
| 209 209 | 
             
                      <references id="_bibliography" normative="false" obligation="informative" displayorder="3">
         | 
| 210 210 | 
             
                        <title depth="1">Bibliography</title>
         | 
| 211 211 | 
             
                        <bibitem id="ISBN" type="book">
         | 
| 212 | 
            -
                          <formattedref><em>Chemicals for analytical laboratory use</em>. n.p.: n.d.  | 
| 212 | 
            +
                          <formattedref><em>Chemicals for analytical laboratory use</em>. n.p.: n.d. </formattedref>
         | 
| 213 213 | 
             
                          <docidentifier type="metanorma-ordinal">[1]</docidentifier>
         | 
| 214 214 | 
             
                          <docidentifier type="ISBN">ISBN</docidentifier>
         | 
| 215 215 | 
             
                        </bibitem>
         | 
| 216 216 | 
             
                        <bibitem id="ISSN" type="journal">
         | 
| 217 | 
            -
                          <formattedref><em>Instruments for analytical laboratory use</em>. n.d | 
| 217 | 
            +
                          <formattedref><em>Instruments for analytical laboratory use</em>. n.d.</formattedref>
         | 
| 218 218 | 
             
                          <docidentifier type="metanorma-ordinal">[2]</docidentifier>
         | 
| 219 219 | 
             
                          <docidentifier type="ISSN">ISSN</docidentifier>
         | 
| 220 220 | 
             
                        </bibitem>
         | 
| @@ -326,12 +326,12 @@ RSpec.describe IsoDoc do | |
| 326 326 | 
             
                           <p id='ISBN' class='Biblio'>
         | 
| 327 327 | 
             
                             [1]  
         | 
| 328 328 | 
             
                             <i>Chemicals for analytical laboratory use</i>
         | 
| 329 | 
            -
                             . n.p.: n.d.  | 
| 329 | 
            +
                             . n.p.: n.d. 
         | 
| 330 330 | 
             
                           </p>
         | 
| 331 331 | 
             
                           <p id='ISSN' class='Biblio'>
         | 
| 332 332 | 
             
                             [2]  
         | 
| 333 333 | 
             
                             <i>Instruments for analytical laboratory use</i>
         | 
| 334 | 
            -
                             . n.d.  | 
| 334 | 
            +
                             . n.d. 
         | 
| 335 335 | 
             
                           </p>
         | 
| 336 336 | 
             
                           <div class='Note'>
         | 
| 337 337 | 
             
                             <p>
         |