metanorma-iso 2.5.0 → 2.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/isodoc/iso/base_convert.rb +1 -1
- data/lib/isodoc/iso/init.rb +5 -6
- data/lib/isodoc/iso/iso.amendment.xsl +34 -15
- data/lib/isodoc/iso/iso.international-standard.xsl +34 -15
- data/lib/isodoc/iso/presentation_xml_convert.rb +26 -18
- data/lib/isodoc/iso/sections.rb +2 -2
- data/lib/isodoc/iso/word_dis_convert.rb +6 -3
- data/lib/isodoc/iso/xref.rb +22 -35
- data/lib/metanorma/iso/boilerplate-fr.adoc +1 -1
- data/lib/metanorma/iso/cleanup.rb +9 -11
- data/lib/metanorma/iso/front.rb +7 -91
- data/lib/metanorma/iso/front_contributor.rb +144 -0
- data/lib/metanorma/iso/isodoc.rng +4 -1
- data/lib/metanorma/iso/validate.rb +2 -2
- data/lib/metanorma/iso/validate_requirements.rb +5 -5
- data/lib/metanorma/iso/validate_section.rb +6 -2
- data/lib/metanorma/iso/validate_style.rb +6 -6
- data/lib/metanorma/iso/version.rb +1 -1
- data/metanorma-iso.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ab1010b198fb64456b71a06834ab3c1207417c16c765f6c5905cd18ff5a0dc8
|
4
|
+
data.tar.gz: c92bdd8228ce983eed939cb2b38b60b7ec631d37b64ea390e26e870700f7065b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de58d8b4fa0e039e153cd5a9d9637adaedf45e674cb59c113e2feb4eaa1444ca7d98badd5ac080687ec66ee19305e8b8677ea855c24b1df91ddae0c12464180a
|
7
|
+
data.tar.gz: 48d297855239fec0dd80dbb6db404bf4b8c2a79ba49051d275f56f3dff579bda479f30ba71ba1931170088c7e3c0014878b92af7d91177151f625cdf359e7ef9
|
data/lib/isodoc/iso/init.rb
CHANGED
@@ -20,7 +20,7 @@ module IsoDoc
|
|
20
20
|
i18nyaml: i18nyaml || @i18nyaml)
|
21
21
|
end
|
22
22
|
|
23
|
-
def amd(docxml)
|
23
|
+
def amd?(docxml)
|
24
24
|
doctype = docxml.at(ns("//bibdata/ext/doctype"))&.text
|
25
25
|
%w(amendment technical-corrigendum).include? doctype
|
26
26
|
end
|
@@ -44,16 +44,15 @@ module IsoDoc
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def std_docid_semantic1(id)
|
47
|
-
ids = id.split(/
|
48
|
-
|
49
|
-
.include?(ids[0].sub(/\/.*$/, "")) or
|
50
|
-
return id
|
47
|
+
ids = id.split(/(\p{Zs})/)
|
48
|
+
agency?(ids[0].sub(/\/.*$/, "")) or return id
|
51
49
|
ids.map! do |i|
|
52
50
|
if %w(GUIDE TR TS DIR).include?(i)
|
53
51
|
"<span class='stddocNumber'>#{i}</span>"
|
52
|
+
elsif /\p{Zs}/.match?(i) then i
|
54
53
|
else std_docid_semantic_full(i)
|
55
54
|
end
|
56
|
-
end.join
|
55
|
+
end.join
|
57
56
|
end
|
58
57
|
|
59
58
|
def std_docid_semantic_full(ident)
|
@@ -2674,11 +2674,26 @@
|
|
2674
2674
|
<xsl:value-of select="$font_extended"/><xsl:text>, </xsl:text>
|
2675
2675
|
</xsl:if>
|
2676
2676
|
|
2677
|
-
<xsl:
|
2677
|
+
<xsl:variable name="font_family" select="."/>
|
2678
2678
|
|
2679
|
-
<xsl:
|
2680
|
-
<xsl:
|
2681
|
-
|
2679
|
+
<xsl:choose>
|
2680
|
+
<xsl:when test="$additional_fonts = ''">
|
2681
|
+
<xsl:value-of select="$font_family"/>
|
2682
|
+
</xsl:when>
|
2683
|
+
<xsl:otherwise> <!-- $additional_fonts != '' -->
|
2684
|
+
<xsl:choose>
|
2685
|
+
<xsl:when test="contains($font_family, ',')">
|
2686
|
+
<xsl:value-of select="substring-before($font_family, ',')"/>
|
2687
|
+
<xsl:text>, </xsl:text><xsl:value-of select="$additional_fonts"/>
|
2688
|
+
<xsl:text>, </xsl:text><xsl:value-of select="substring-after($font_family, ',')"/>
|
2689
|
+
</xsl:when>
|
2690
|
+
<xsl:otherwise>
|
2691
|
+
<xsl:value-of select="$font_family"/>
|
2692
|
+
<xsl:text>, </xsl:text><xsl:value-of select="$additional_fonts"/>
|
2693
|
+
</xsl:otherwise>
|
2694
|
+
</xsl:choose>
|
2695
|
+
</xsl:otherwise>
|
2696
|
+
</xsl:choose>
|
2682
2697
|
</xsl:attribute>
|
2683
2698
|
</xsl:when>
|
2684
2699
|
<xsl:otherwise>
|
@@ -5352,21 +5367,21 @@
|
|
5352
5367
|
|
5353
5368
|
<xsl:template match="*[local-name()='table']/*[local-name()='note' or local-name() = 'example']" priority="2">
|
5354
5369
|
|
5355
|
-
|
5370
|
+
<fo:block xsl:use-attribute-sets="table-note-style">
|
5356
5371
|
|
5357
|
-
|
5372
|
+
<xsl:call-template name="refine_table-note-style"/>
|
5358
5373
|
|
5359
|
-
|
5360
|
-
|
5374
|
+
<!-- Table's note/example name (NOTE, for example) -->
|
5375
|
+
<fo:inline xsl:use-attribute-sets="table-note-name-style">
|
5361
5376
|
|
5362
|
-
|
5377
|
+
<xsl:call-template name="refine_table-note-name-style"/>
|
5363
5378
|
|
5364
|
-
|
5379
|
+
<xsl:apply-templates select="*[local-name() = 'name']"/>
|
5365
5380
|
|
5366
|
-
|
5381
|
+
</fo:inline>
|
5367
5382
|
|
5368
|
-
|
5369
|
-
|
5383
|
+
<xsl:apply-templates select="node()[not(local-name() = 'name')]"/>
|
5384
|
+
</fo:block>
|
5370
5385
|
|
5371
5386
|
</xsl:template> <!-- table/note -->
|
5372
5387
|
|
@@ -8588,8 +8603,12 @@
|
|
8588
8603
|
<xsl:variable name="isAdded" select="../@added"/>
|
8589
8604
|
<xsl:variable name="isDeleted" select="../@deleted"/>
|
8590
8605
|
<xsl:choose>
|
8591
|
-
<xsl:when test="ancestor::*[local-name() = 'title']">
|
8606
|
+
<xsl:when test="ancestor::*[local-name() = 'title'] or not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']">
|
8592
8607
|
<fo:inline padding-left="1mm" padding-right="1mm">
|
8608
|
+
<xsl:if test="not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']">
|
8609
|
+
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
8610
|
+
<xsl:attribute name="padding-right">0mm</xsl:attribute>
|
8611
|
+
</xsl:if>
|
8593
8612
|
<xsl:variable name="src">
|
8594
8613
|
<xsl:call-template name="image_src"/>
|
8595
8614
|
</xsl:variable>
|
@@ -8622,7 +8641,7 @@
|
|
8622
8641
|
<fo:external-graphic src="{$src}" fox:alt-text="Image {@alt}" xsl:use-attribute-sets="image-graphic-style">
|
8623
8642
|
<xsl:if test="not(@mimetype = 'image/svg+xml') and ../*[local-name() = 'name'] and not(ancestor::*[local-name() = 'table'])">
|
8624
8643
|
|
8625
|
-
<xsl:if test="@width != '' and @width != 'auto'">
|
8644
|
+
<xsl:if test="@width != '' and @width != 'auto' and @width != 'text-width' and @width != 'full-page-width' and @width != 'narrow'">
|
8626
8645
|
<xsl:attribute name="width">
|
8627
8646
|
<xsl:value-of select="@width"/>
|
8628
8647
|
</xsl:attribute>
|
@@ -2674,11 +2674,26 @@
|
|
2674
2674
|
<xsl:value-of select="$font_extended"/><xsl:text>, </xsl:text>
|
2675
2675
|
</xsl:if>
|
2676
2676
|
|
2677
|
-
<xsl:
|
2677
|
+
<xsl:variable name="font_family" select="."/>
|
2678
2678
|
|
2679
|
-
<xsl:
|
2680
|
-
<xsl:
|
2681
|
-
|
2679
|
+
<xsl:choose>
|
2680
|
+
<xsl:when test="$additional_fonts = ''">
|
2681
|
+
<xsl:value-of select="$font_family"/>
|
2682
|
+
</xsl:when>
|
2683
|
+
<xsl:otherwise> <!-- $additional_fonts != '' -->
|
2684
|
+
<xsl:choose>
|
2685
|
+
<xsl:when test="contains($font_family, ',')">
|
2686
|
+
<xsl:value-of select="substring-before($font_family, ',')"/>
|
2687
|
+
<xsl:text>, </xsl:text><xsl:value-of select="$additional_fonts"/>
|
2688
|
+
<xsl:text>, </xsl:text><xsl:value-of select="substring-after($font_family, ',')"/>
|
2689
|
+
</xsl:when>
|
2690
|
+
<xsl:otherwise>
|
2691
|
+
<xsl:value-of select="$font_family"/>
|
2692
|
+
<xsl:text>, </xsl:text><xsl:value-of select="$additional_fonts"/>
|
2693
|
+
</xsl:otherwise>
|
2694
|
+
</xsl:choose>
|
2695
|
+
</xsl:otherwise>
|
2696
|
+
</xsl:choose>
|
2682
2697
|
</xsl:attribute>
|
2683
2698
|
</xsl:when>
|
2684
2699
|
<xsl:otherwise>
|
@@ -5352,21 +5367,21 @@
|
|
5352
5367
|
|
5353
5368
|
<xsl:template match="*[local-name()='table']/*[local-name()='note' or local-name() = 'example']" priority="2">
|
5354
5369
|
|
5355
|
-
|
5370
|
+
<fo:block xsl:use-attribute-sets="table-note-style">
|
5356
5371
|
|
5357
|
-
|
5372
|
+
<xsl:call-template name="refine_table-note-style"/>
|
5358
5373
|
|
5359
|
-
|
5360
|
-
|
5374
|
+
<!-- Table's note/example name (NOTE, for example) -->
|
5375
|
+
<fo:inline xsl:use-attribute-sets="table-note-name-style">
|
5361
5376
|
|
5362
|
-
|
5377
|
+
<xsl:call-template name="refine_table-note-name-style"/>
|
5363
5378
|
|
5364
|
-
|
5379
|
+
<xsl:apply-templates select="*[local-name() = 'name']"/>
|
5365
5380
|
|
5366
|
-
|
5381
|
+
</fo:inline>
|
5367
5382
|
|
5368
|
-
|
5369
|
-
|
5383
|
+
<xsl:apply-templates select="node()[not(local-name() = 'name')]"/>
|
5384
|
+
</fo:block>
|
5370
5385
|
|
5371
5386
|
</xsl:template> <!-- table/note -->
|
5372
5387
|
|
@@ -8588,8 +8603,12 @@
|
|
8588
8603
|
<xsl:variable name="isAdded" select="../@added"/>
|
8589
8604
|
<xsl:variable name="isDeleted" select="../@deleted"/>
|
8590
8605
|
<xsl:choose>
|
8591
|
-
<xsl:when test="ancestor::*[local-name() = 'title']">
|
8606
|
+
<xsl:when test="ancestor::*[local-name() = 'title'] or not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']">
|
8592
8607
|
<fo:inline padding-left="1mm" padding-right="1mm">
|
8608
|
+
<xsl:if test="not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']">
|
8609
|
+
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
8610
|
+
<xsl:attribute name="padding-right">0mm</xsl:attribute>
|
8611
|
+
</xsl:if>
|
8593
8612
|
<xsl:variable name="src">
|
8594
8613
|
<xsl:call-template name="image_src"/>
|
8595
8614
|
</xsl:variable>
|
@@ -8622,7 +8641,7 @@
|
|
8622
8641
|
<fo:external-graphic src="{$src}" fox:alt-text="Image {@alt}" xsl:use-attribute-sets="image-graphic-style">
|
8623
8642
|
<xsl:if test="not(@mimetype = 'image/svg+xml') and ../*[local-name() = 'name'] and not(ancestor::*[local-name() = 'table'])">
|
8624
8643
|
|
8625
|
-
<xsl:if test="@width != '' and @width != 'auto'">
|
8644
|
+
<xsl:if test="@width != '' and @width != 'auto' and @width != 'text-width' and @width != 'full-page-width' and @width != 'narrow'">
|
8626
8645
|
<xsl:attribute name="width">
|
8627
8646
|
<xsl:value-of select="@width"/>
|
8628
8647
|
</xsl:attribute>
|
@@ -11,7 +11,7 @@ module IsoDoc
|
|
11
11
|
class PresentationXMLConvert < IsoDoc::PresentationXMLConvert
|
12
12
|
def convert1(docxml, filename, dir)
|
13
13
|
@iso_class = instance_of?(IsoDoc::Iso::PresentationXMLConvert)
|
14
|
-
if amd(docxml)
|
14
|
+
if amd?(docxml)
|
15
15
|
@oldsuppressheadingnumbers = @suppressheadingnumbers
|
16
16
|
@suppressheadingnumbers = true
|
17
17
|
end
|
@@ -38,12 +38,12 @@ module IsoDoc
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def annex(isoxml)
|
41
|
-
amd(isoxml) and @suppressheadingnumbers = @oldsuppressheadingnumbers
|
41
|
+
amd?(isoxml) and @suppressheadingnumbers = @oldsuppressheadingnumbers
|
42
42
|
super
|
43
43
|
isoxml.xpath(ns("//annex//clause | //annex//appendix")).each do |f|
|
44
44
|
clause1(f)
|
45
45
|
end
|
46
|
-
amd(isoxml) and @suppressheadingnumbers = true
|
46
|
+
amd?(isoxml) and @suppressheadingnumbers = true
|
47
47
|
end
|
48
48
|
|
49
49
|
def figure1(node)
|
@@ -87,23 +87,25 @@ module IsoDoc
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
# we're assuming terms and clauses in the right place for display,
|
91
|
-
# to cope with multiple terms sections
|
92
|
-
def display_order(docxml)
|
93
|
-
i = 0
|
94
|
-
i = display_order_xpath(docxml, "//preface/*", i)
|
95
|
-
i = display_order_at(docxml, "//clause[@type = 'scope']", i)
|
96
|
-
i = display_order_at(docxml, @xrefs.klass.norm_ref_xpath, i)
|
97
|
-
i = display_order_xpath(docxml,
|
98
|
-
"//sections/clause[not(@type = 'scope')][not(.//references)] | " \
|
99
|
-
"//sections/terms | //sections/definitions", i)
|
100
|
-
i = display_order_xpath(docxml, "//annex", i)
|
101
|
-
i = display_order_xpath(docxml, @xrefs.klass.bibliography_xpath, i)
|
102
|
-
display_order_xpath(docxml, "//indexsect", i)
|
103
|
-
end
|
104
|
-
|
105
90
|
def admonition1(elem)
|
106
91
|
super
|
92
|
+
admonition_inline_name(elem)
|
93
|
+
admonition_outside_clauses(elem)
|
94
|
+
end
|
95
|
+
|
96
|
+
def admonition_outside_clauses(elem)
|
97
|
+
elem.parent.name == "sections" or return
|
98
|
+
wrap_in_bold(elem)
|
99
|
+
end
|
100
|
+
|
101
|
+
def wrap_in_bold(cell)
|
102
|
+
cell.text? && cell.text.strip.empty? and return
|
103
|
+
cell.text? and cell.swap("<strong>#{cell.to_xml}</strong>")
|
104
|
+
%w(strong fn).include?(cell.name) and return
|
105
|
+
cell.children.each { |p| wrap_in_bold(p) }
|
106
|
+
end
|
107
|
+
|
108
|
+
def admonition_inline_name(elem)
|
107
109
|
n = elem.at(ns("./name")) or return
|
108
110
|
if (p = n.next_element) && p&.name == "p"
|
109
111
|
p.children.first.previous = admonition_name(to_xml(n.remove.children))
|
@@ -194,6 +196,12 @@ module IsoDoc
|
|
194
196
|
ret
|
195
197
|
end
|
196
198
|
|
199
|
+
def move_norm_ref_to_sections(docxml)
|
200
|
+
if amd?(docxml)
|
201
|
+
else super
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
197
205
|
include Init
|
198
206
|
end
|
199
207
|
end
|
data/lib/isodoc/iso/sections.rb
CHANGED
@@ -2,10 +2,10 @@ module IsoDoc
|
|
2
2
|
module Iso
|
3
3
|
module BaseConvert
|
4
4
|
def annex(node, out)
|
5
|
-
amd(node.document) and
|
5
|
+
amd?(node.document) and
|
6
6
|
@suppressheadingnumbers = @oldsuppressheadingnumbers
|
7
7
|
super
|
8
|
-
amd(node.document) and @suppressheadingnumbers = true
|
8
|
+
amd?(node.document) and @suppressheadingnumbers = true
|
9
9
|
end
|
10
10
|
|
11
11
|
def foreword(clause, out)
|
@@ -103,15 +103,18 @@ module IsoDoc
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def span_parse(node, out)
|
106
|
+
st = node["style"]
|
106
107
|
case node["class"]
|
107
108
|
when "nonboldtitle"
|
108
|
-
out.span(style: "font-weight:normal") do |s|
|
109
|
+
out.span **attr_code(style: "#{st};font-weight:normal") do |s|
|
109
110
|
node.children.each { |n| parse(n, s) }
|
110
111
|
end
|
111
112
|
when "boldtitle"
|
112
|
-
|
113
|
+
out.span **attr_code(style: st) do |s|
|
114
|
+
node.children.each { |n| parse(n, s) }
|
115
|
+
end
|
113
116
|
else
|
114
|
-
out.span class: node["class"] do |x|
|
117
|
+
out.span **attr_code(class: node["class"], style: st) do |x|
|
115
118
|
node.children.each { |n| parse(n, x) }
|
116
119
|
end
|
117
120
|
end
|
data/lib/isodoc/iso/xref.rb
CHANGED
@@ -8,22 +8,33 @@ module IsoDoc
|
|
8
8
|
class Xref < IsoDoc::Xref
|
9
9
|
attr_accessor :anchors_previous, :anchors
|
10
10
|
|
11
|
-
def
|
12
|
-
if @klass.amd(
|
13
|
-
|
11
|
+
def clause_order_main(docxml)
|
12
|
+
if @klass.amd?(docxml)
|
13
|
+
[{ path: "//sections/clause", multi: true }]
|
14
|
+
else
|
15
|
+
[{ path: "//clause[@type = 'scope']" },
|
16
|
+
{ path: @klass.norm_ref_xpath },
|
17
|
+
{ path:
|
18
|
+
"#{@klass.middle_clause(docxml)} | //sections/terms | " \
|
19
|
+
"//sections/clause[descendant::terms or descendant::definitions] " \
|
20
|
+
"| //sections/definitions", multi: true }]
|
14
21
|
end
|
15
|
-
|
16
|
-
|
22
|
+
end
|
23
|
+
|
24
|
+
def clause_order_back(docxml)
|
25
|
+
if @klass.amd?(docxml)
|
26
|
+
[{ path: @klass.norm_ref_xpath },
|
27
|
+
{ path: @klass.bibliography_xpath },
|
28
|
+
{ path: "//indexsect", multi: true },
|
29
|
+
{ path: "//colophon/*", multi: true }]
|
30
|
+
else super
|
17
31
|
end
|
18
32
|
end
|
19
33
|
|
20
|
-
def
|
34
|
+
def initial_anchor_names(doc)
|
35
|
+
super
|
21
36
|
if @parse_settings.empty? || @parse_settings[:clauses]
|
22
|
-
|
23
|
-
doc.xpath(ns(xpath)).each do |c|
|
24
|
-
c.element? and preface_names(c)
|
25
|
-
end
|
26
|
-
end
|
37
|
+
introduction_names(doc.at(ns("//introduction")))
|
27
38
|
end
|
28
39
|
end
|
29
40
|
|
@@ -33,23 +44,6 @@ module IsoDoc
|
|
33
44
|
sequential_asset_names(doc.xpath(ns("//preface/*")))
|
34
45
|
end
|
35
46
|
|
36
|
-
def initial_anchor_names1(doc)
|
37
|
-
if @parse_settings.empty? || @parse_settings[:clauses]
|
38
|
-
doc.xpath(ns("//preface/*")).each do |c|
|
39
|
-
c.element? and preface_names(c)
|
40
|
-
end
|
41
|
-
# potentially overridden in middle_section_asset_names()
|
42
|
-
sequential_asset_names(doc.xpath(ns("//preface/*")))
|
43
|
-
n = Counter.new
|
44
|
-
n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1)
|
45
|
-
n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1)
|
46
|
-
doc.xpath(ns("//sections/clause[not(@type = 'scope')][not(.//references)] | " \
|
47
|
-
"//sections/terms | //sections/definitions")).each do |c|
|
48
|
-
n = section_names(c, n, 1)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
47
|
def hierarchical_formula_names(clause, num)
|
54
48
|
c = IsoDoc::XrefGen::Counter.new
|
55
49
|
clause.xpath(ns(".//formula")).each do |t|
|
@@ -131,13 +125,6 @@ module IsoDoc
|
|
131
125
|
.sub(/ \(All Parts\)/i, "") }
|
132
126
|
end
|
133
127
|
|
134
|
-
def back_anchor_names(docxml)
|
135
|
-
super
|
136
|
-
if @parse_settings.empty? || @parse_settings[:clauses]
|
137
|
-
docxml.xpath(ns("//indexsect")).each { |b| preface_names(b) }
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
128
|
def list_anchor_names(sections)
|
142
129
|
sections.each do |s|
|
143
130
|
notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) -
|
@@ -1,5 +1,5 @@
|
|
1
1
|
== copyright-statement
|
2
|
-
=== {% if stage_int >= 40 %}DOCUMENT PROTÉGÉ PAR COPYRIGHT{%else%}{blank}
|
2
|
+
=== {% if stage_int >= 40 %}DOCUMENT PROTÉGÉ PAR COPYRIGHT{%else%}{blank}{%endif%}
|
3
3
|
|
4
4
|
[[boilerplate-year]]
|
5
5
|
© span:std_publisher:[{{ agency }}] span:std_docNumber[{{ docyear }}]
|
@@ -110,10 +110,10 @@ module Metanorma
|
|
110
110
|
xml.xpath("//*[@inline-header]").each { |h| h.delete("inline-header") }
|
111
111
|
end
|
112
112
|
|
113
|
-
def boilerplate_file(
|
113
|
+
def boilerplate_file(_xmldoc)
|
114
114
|
file = case @lang
|
115
|
-
when "fr" then "boilerplate-fr.
|
116
|
-
when "ru" then "boilerplate-ru.
|
115
|
+
when "fr" then "boilerplate-fr.adoc"
|
116
|
+
when "ru" then "boilerplate-ru.adoc"
|
117
117
|
else "boilerplate.adoc"
|
118
118
|
end
|
119
119
|
File.join(@libdir, file)
|
@@ -142,11 +142,10 @@ module Metanorma
|
|
142
142
|
def unpublished_note(xmldoc)
|
143
143
|
xmldoc.xpath("//bibitem[not(./ancestor::bibitem)]" \
|
144
144
|
"[not(note[@type = 'Unpublished-Status'])]").each do |b|
|
145
|
-
|
146
|
-
|
147
|
-
|
145
|
+
pub_class(b) > 2 and next
|
146
|
+
((s = b.at("./status/stage")) && (s.text.to_i < 60)) or next
|
148
147
|
id = b.at("docidentifier").text
|
149
|
-
insert_unpub_note(b, @i18n.under_preparation.sub(
|
148
|
+
insert_unpub_note(b, @i18n.under_preparation.sub("%", id))
|
150
149
|
end
|
151
150
|
end
|
152
151
|
|
@@ -155,7 +154,7 @@ module Metanorma
|
|
155
154
|
.each do |b|
|
156
155
|
withdrawn_ref?(b) or next
|
157
156
|
if id = replacement_standard(b)
|
158
|
-
insert_unpub_note(b, @i18n.cancelled_and_replaced.sub(
|
157
|
+
insert_unpub_note(b, @i18n.cancelled_and_replaced.sub("%", id))
|
159
158
|
else insert_unpub_note(b, @i18n.withdrawn)
|
160
159
|
end
|
161
160
|
end
|
@@ -227,7 +226,7 @@ module Metanorma
|
|
227
226
|
xmldoc.xpath("//bibdata/contributor[role/@type = 'publisher']/" \
|
228
227
|
"organization").each_with_object([]) do |p, m|
|
229
228
|
x = p.at("./abbreviation") || p.at("./name") or next
|
230
|
-
m << x.
|
229
|
+
m << x.children.to_xml
|
231
230
|
end
|
232
231
|
end
|
233
232
|
|
@@ -237,8 +236,7 @@ module Metanorma
|
|
237
236
|
def editorial_group_types(xmldoc)
|
238
237
|
%w(technical-committee subcommittee workgroup).each do |v|
|
239
238
|
xmldoc.xpath("//bibdata//#{v} | //bibdata//approval-#{v}").each do |g|
|
240
|
-
|
241
|
-
|
239
|
+
g["type"] and next
|
242
240
|
g["type"] = DEFAULT_EDGROUP_TYPE[v.to_sym]
|
243
241
|
end
|
244
242
|
end
|
data/lib/metanorma/iso/front.rb
CHANGED
@@ -5,6 +5,7 @@ require "json"
|
|
5
5
|
require "pathname"
|
6
6
|
require "open-uri"
|
7
7
|
require_relative "front_id"
|
8
|
+
require_relative "front_contributor"
|
8
9
|
|
9
10
|
module Metanorma
|
10
11
|
module ISO
|
@@ -17,13 +18,16 @@ module Metanorma
|
|
17
18
|
xml.updates_document_type a
|
18
19
|
end
|
19
20
|
|
21
|
+
STAGE_ERROR = [Pubid::Core::Errors::HarmonizedStageCodeInvalidError,
|
22
|
+
Pubid::Core::Errors::TypeStageParseError,
|
23
|
+
Pubid::Core::Errors::StageInvalidError].freeze
|
24
|
+
|
20
25
|
def metadata_stage(node, xml)
|
21
26
|
id = iso_id_default(iso_id_params(node))
|
22
27
|
id.stage and
|
23
28
|
xml.stagename metadata_stagename(id)&.strip,
|
24
29
|
**attr_code(abbreviation: id.typed_stage_abbrev&.strip)
|
25
|
-
rescue
|
26
|
-
Pubid::Core::Errors::TypeStageParseError
|
30
|
+
rescue *STAGE_ERROR
|
27
31
|
end
|
28
32
|
|
29
33
|
def metadata_stagename(id)
|
@@ -44,53 +48,6 @@ module Metanorma
|
|
44
48
|
a = node.attr("horizontal") and xml.horizontal a
|
45
49
|
end
|
46
50
|
|
47
|
-
def org_abbrev
|
48
|
-
{ "International Organization for Standardization" => "ISO",
|
49
|
-
"International Electrotechnical Commission" => "IEC" }
|
50
|
-
end
|
51
|
-
|
52
|
-
def metadata_author(node, xml)
|
53
|
-
publishers = node.attr("publisher") || "ISO"
|
54
|
-
csv_split(publishers).each do |p|
|
55
|
-
xml.contributor do |c|
|
56
|
-
c.role type: "author"
|
57
|
-
c.organization do |a|
|
58
|
-
organization(a, p, false, node, !node.attr("publisher"))
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def metadata_publisher(node, xml)
|
65
|
-
publishers = node.attr("publisher") || "ISO"
|
66
|
-
csv_split(publishers).each do |p|
|
67
|
-
xml.contributor do |c|
|
68
|
-
c.role type: "publisher"
|
69
|
-
c.organization do |a|
|
70
|
-
organization(a, p, true, node, !node.attr("publisher"))
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def metadata_copyright(node, xml)
|
77
|
-
publishers = node.attr("copyright-holder") || node.attr("publisher") ||
|
78
|
-
"ISO"
|
79
|
-
csv_split(publishers).each do |p|
|
80
|
-
xml.copyright do |c|
|
81
|
-
c.from (node.attr("copyright-year") || Date.today.year)
|
82
|
-
c.owner do |owner|
|
83
|
-
owner.organization do |o|
|
84
|
-
organization(
|
85
|
-
o, p, true, node,
|
86
|
-
!(node.attr("copyright-holder") || node.attr("publisher"))
|
87
|
-
)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
51
|
def metadata_status(node, xml)
|
95
52
|
stage = get_stage(node)
|
96
53
|
substage = get_substage(node)
|
@@ -100,8 +57,7 @@ module Metanorma
|
|
100
57
|
s.substage substage
|
101
58
|
i = node.attr("iteration") and s.iteration i
|
102
59
|
end
|
103
|
-
rescue
|
104
|
-
Pubid::Core::Errors::TypeStageParseError
|
60
|
+
rescue *STAGE_ERROR
|
105
61
|
report_illegal_stage(stage, substage)
|
106
62
|
end
|
107
63
|
|
@@ -111,46 +67,6 @@ module Metanorma
|
|
111
67
|
warn err
|
112
68
|
end
|
113
69
|
|
114
|
-
def metadata_committee(node, xml)
|
115
|
-
metadata_editorial_committee(node, xml)
|
116
|
-
metadata_approval_committee(node, xml)
|
117
|
-
end
|
118
|
-
|
119
|
-
def metadata_editorial_committee(node, xml)
|
120
|
-
xml.editorialgroup do |a|
|
121
|
-
%w(technical-committee subcommittee workgroup).each do |v|
|
122
|
-
node.attr("#{v}-number") and committee_component(v, node, a)
|
123
|
-
end
|
124
|
-
node.attr("secretariat") and a.secretariat(node.attr("secretariat"))
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def metadata_approval_committee(node, xml)
|
129
|
-
types = metadata_approval_committee_types(node)
|
130
|
-
xml.approvalgroup do |a|
|
131
|
-
metadata_approval_agency(a, node.attr("approval-agency")
|
132
|
-
&.split(%r{[/,;]}))
|
133
|
-
types.each do |v|
|
134
|
-
node.attr("#{v}-number") and committee_component(v, node, a)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def metadata_approval_committee_types(node)
|
140
|
-
types = %w(technical-committee subcommittee workgroup)
|
141
|
-
node.attr("approval-technical-committee-number") and
|
142
|
-
types = %w(approval-technical-committee approval-subcommittee
|
143
|
-
approval-workgroup)
|
144
|
-
types
|
145
|
-
end
|
146
|
-
|
147
|
-
def metadata_approval_agency(xml, list)
|
148
|
-
list = ["ISO"] if list.nil? || list.empty?
|
149
|
-
list.each do |v|
|
150
|
-
xml.agency v
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
70
|
def title_intro(node, xml, lang, at)
|
155
71
|
return unless node.attr("title-intro-#{lang}")
|
156
72
|
|
@@ -0,0 +1,144 @@
|
|
1
|
+
module Metanorma
|
2
|
+
module ISO
|
3
|
+
class Converter < Standoc::Converter
|
4
|
+
def home_agency
|
5
|
+
"ISO"
|
6
|
+
end
|
7
|
+
|
8
|
+
def org_abbrev
|
9
|
+
{ "International Organization for Standardization" => "ISO",
|
10
|
+
"International Electrotechnical Commission" => "IEC" }
|
11
|
+
end
|
12
|
+
|
13
|
+
def metadata_author(node, xml)
|
14
|
+
publishers = node.attr("publisher") || home_agency
|
15
|
+
metadata_contrib_sdo(node, xml, publishers,
|
16
|
+
{ role: "author",
|
17
|
+
default_org: !node.attr("publisher") })
|
18
|
+
committee_contributors(node, xml, false, home_agency)
|
19
|
+
end
|
20
|
+
|
21
|
+
def metadata_contrib_sdo(node, xml, publishers, opt)
|
22
|
+
publishers.nil? and return
|
23
|
+
csv_split(publishers).each do |p|
|
24
|
+
xml.contributor do |c|
|
25
|
+
c.role type: opt[:role] do |r|
|
26
|
+
opt[:desc] and r << opt[:desc]
|
27
|
+
end
|
28
|
+
c.organization do |a|
|
29
|
+
(opt[:committee] and
|
30
|
+
contrib_committee_build(a, opt[:agency],
|
31
|
+
{ name: p, id: opt[:ident] })) or
|
32
|
+
organization(a, p, opt[:role] == "publisher", node,
|
33
|
+
opt[:default_org])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def committee_contributors(node, xml, approval, agency)
|
40
|
+
types = metadata_approval_committee_types(approval ? node : nil)
|
41
|
+
types.each do |v|
|
42
|
+
n = node.attr("#{v}-number") or next
|
43
|
+
t = committee_abbrev(node.attr("#{v}-type"), n, v)
|
44
|
+
metadata_contrib_sdo(
|
45
|
+
node, xml, node.attr(v),
|
46
|
+
{ role: approval ? "authorizer" : "author", ident: t,
|
47
|
+
default_org: false, committee: true, agency: agency,
|
48
|
+
desc: v.sub(/^approval-/, "").gsub("-", " ").capitalize }
|
49
|
+
)
|
50
|
+
end
|
51
|
+
approval and
|
52
|
+
metadata_contrib_sdo(node, xml, agency,
|
53
|
+
{ role: "authorizer", default_org: false,
|
54
|
+
desc: "Agency", committee: false })
|
55
|
+
end
|
56
|
+
|
57
|
+
def contrib_committee_build(xml, agency, committee)
|
58
|
+
n = org_abbrev.invert[agency] and agency = n
|
59
|
+
xml.name agency
|
60
|
+
xml.subdivision committee[:name]
|
61
|
+
committee[:abbr] and xml.abbreviation committee[:abbr]
|
62
|
+
committee[:id] and xml.identifier committee[:id]
|
63
|
+
end
|
64
|
+
|
65
|
+
COMMITTEE_ABBREVS =
|
66
|
+
{ "technical-committee" => "TC", "subcommittee" => "SC",
|
67
|
+
"workgroup" => "WG" }.freeze
|
68
|
+
|
69
|
+
def committee_abbrev(type, number, level)
|
70
|
+
type ||= COMMITTEE_ABBREVS[level.sub(/^approval-/, "")]
|
71
|
+
type == "Other" and type = ""
|
72
|
+
"#{type} #{number}".strip
|
73
|
+
end
|
74
|
+
|
75
|
+
def metadata_publisher(node, xml)
|
76
|
+
publishers = node.attr("publisher") || home_agency
|
77
|
+
metadata_contrib_sdo(node, xml, publishers,
|
78
|
+
{ role: "publisher",
|
79
|
+
default_org: !node.attr("publisher") })
|
80
|
+
# approvals
|
81
|
+
committee_contributors(node, xml, true,
|
82
|
+
node.attr("approval-agency") || home_agency)
|
83
|
+
end
|
84
|
+
|
85
|
+
def metadata_copyright(node, xml)
|
86
|
+
publishers = node.attr("copyright-holder") || node.attr("publisher") ||
|
87
|
+
home_agency
|
88
|
+
csv_split(publishers).each do |p|
|
89
|
+
xml.copyright do |c|
|
90
|
+
c.from (node.attr("copyright-year") || Date.today.year)
|
91
|
+
c.owner do |owner|
|
92
|
+
owner.organization do |o|
|
93
|
+
organization(
|
94
|
+
o, p, true, node,
|
95
|
+
!(node.attr("copyright-holder") || node.attr("publisher"))
|
96
|
+
)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def metadata_committee(node, xml)
|
104
|
+
metadata_editorial_committee(node, xml)
|
105
|
+
metadata_approval_committee(node, xml)
|
106
|
+
end
|
107
|
+
|
108
|
+
def metadata_editorial_committee(node, xml)
|
109
|
+
xml.editorialgroup do |a|
|
110
|
+
%w(technical-committee subcommittee workgroup).each do |v|
|
111
|
+
node.attr("#{v}-number") and committee_component(v, node, a)
|
112
|
+
end
|
113
|
+
node.attr("secretariat") and a.secretariat(node.attr("secretariat"))
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def metadata_approval_committee(node, xml)
|
118
|
+
types = metadata_approval_committee_types(node)
|
119
|
+
xml.approvalgroup do |a|
|
120
|
+
metadata_approval_agency(a, node.attr("approval-agency")
|
121
|
+
&.split(%r{[/,;]}))
|
122
|
+
types.each do |v|
|
123
|
+
node.attr("#{v}-number") and committee_component(v, node, a)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def metadata_approval_committee_types(node)
|
129
|
+
types = %w(technical-committee subcommittee workgroup)
|
130
|
+
!node.nil? && node.attr("approval-technical-committee-number") and
|
131
|
+
types = %w(approval-technical-committee approval-subcommittee
|
132
|
+
approval-workgroup)
|
133
|
+
types
|
134
|
+
end
|
135
|
+
|
136
|
+
def metadata_approval_agency(xml, list)
|
137
|
+
list = [home_agency] if list.nil? || list.empty?
|
138
|
+
list.each do |v|
|
139
|
+
xml.agency v
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -17,7 +17,7 @@
|
|
17
17
|
these elements; we just want one namespace for any child grammars
|
18
18
|
of this.
|
19
19
|
-->
|
20
|
-
<!-- VERSION v1.2.
|
20
|
+
<!-- VERSION v1.2.4 -->
|
21
21
|
<grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
22
22
|
<include href="reqt.rng"/>
|
23
23
|
<include href="basicdoc.rng">
|
@@ -2068,6 +2068,9 @@
|
|
2068
2068
|
</define>
|
2069
2069
|
<define name="termdefinition">
|
2070
2070
|
<element name="definition">
|
2071
|
+
<optional>
|
2072
|
+
<attribute name="type"/>
|
2073
|
+
</optional>
|
2071
2074
|
<choice>
|
2072
2075
|
<ref name="verbaldefinition"/>
|
2073
2076
|
<ref name="nonverbalrep"/>
|
@@ -34,7 +34,7 @@ module Metanorma
|
|
34
34
|
root.xpath("//xref").each do |t|
|
35
35
|
preceding = t.at("./preceding-sibling::text()[last()]")
|
36
36
|
next unless !preceding.nil? &&
|
37
|
-
/\b(see| refer to)\
|
37
|
+
/\b(see| refer to)\p{Zs}*\Z/mi.match(preceding)
|
38
38
|
|
39
39
|
(target = root.at("//*[@id = '#{t['target']}']")) || next
|
40
40
|
target.at("./ancestor-or-self::*[@obligation = 'normative']") &&
|
@@ -49,7 +49,7 @@ module Metanorma
|
|
49
49
|
@lang == "en" or return
|
50
50
|
root.xpath("//eref").each do |t|
|
51
51
|
prec = t.at("./preceding-sibling::text()[last()]")
|
52
|
-
next unless !prec.nil? && /\b(see|refer to)\
|
52
|
+
next unless !prec.nil? && /\b(see|refer to)\p{Zs}*\Z/mi.match(prec)
|
53
53
|
|
54
54
|
unless target = root.at("//*[@id = '#{t['bibitemid']}']")
|
55
55
|
@log.add("Bibliography", t,
|
@@ -20,7 +20,7 @@ module Metanorma
|
|
20
20
|
|
21
21
|
def requirement_re
|
22
22
|
Regexp.new(self.class::REQUIREMENT_RE_STR.gsub(/\s/, "")
|
23
|
-
.gsub(
|
23
|
+
.gsub("_", "\\s"), Regexp::IGNORECASE)
|
24
24
|
end
|
25
25
|
|
26
26
|
def requirement_check(text)
|
@@ -41,7 +41,7 @@ module Metanorma
|
|
41
41
|
|
42
42
|
def recommendation_re
|
43
43
|
Regexp.new(self.class::RECOMMENDATION_RE_STR.gsub(/\s/, "")
|
44
|
-
.gsub(
|
44
|
+
.gsub("_", "\\s"), Regexp::IGNORECASE)
|
45
45
|
end
|
46
46
|
|
47
47
|
def recommendation_check(text)
|
@@ -64,7 +64,7 @@ module Metanorma
|
|
64
64
|
def permission_re
|
65
65
|
@lang == "en" or return
|
66
66
|
Regexp.new(self.class::PERMISSION_RE_STR.gsub(/\s/, "")
|
67
|
-
.gsub(
|
67
|
+
.gsub("_", "\\s"), Regexp::IGNORECASE)
|
68
68
|
end
|
69
69
|
|
70
70
|
def permission_check(text)
|
@@ -87,7 +87,7 @@ module Metanorma
|
|
87
87
|
def possibility_re
|
88
88
|
@lang == "en" or return
|
89
89
|
Regexp.new(self.class::POSSIBILITY_RE_STR.gsub(/\s/, "")
|
90
|
-
.gsub(
|
90
|
+
.gsub("_", "\\s"), Regexp::IGNORECASE)
|
91
91
|
end
|
92
92
|
|
93
93
|
def possibility_check(text)
|
@@ -111,7 +111,7 @@ module Metanorma
|
|
111
111
|
def ambig_words_re
|
112
112
|
@lang == "en" or return
|
113
113
|
Regexp.new(self.class::AMBIG_WORDS_RE_STR.gsub(/\s/, "")
|
114
|
-
.gsub(
|
114
|
+
.gsub("_", "\\s"), Regexp::IGNORECASE)
|
115
115
|
end
|
116
116
|
|
117
117
|
def ambig_words_check(text)
|
@@ -4,7 +4,7 @@ module Metanorma
|
|
4
4
|
module ISO
|
5
5
|
class Converter < Standoc::Converter
|
6
6
|
def section_validate(doc)
|
7
|
-
doctype = doc
|
7
|
+
doctype = doc.at("//bibdata/ext/doctype")&.text
|
8
8
|
unless %w(amendment technical-corrigendum).include? doctype
|
9
9
|
foreword_validate(doc.root)
|
10
10
|
normref_validate(doc.root)
|
@@ -193,10 +193,14 @@ module Metanorma
|
|
193
193
|
NORM_BIBITEMS =
|
194
194
|
"//references[@normative = 'true']/bibitem".freeze
|
195
195
|
|
196
|
+
ISO_PUBLISHER_XPATH = <<~XPATH.freeze
|
197
|
+
./contributor[role/@type = 'publisher']/organization[abbreviation = 'ISO' or abbreviation = 'IEC' or name = 'International Organization for Standardization' or name = 'International Electrotechnical Commission']
|
198
|
+
XPATH
|
199
|
+
|
196
200
|
# ISO/IEC DIR 2, 10.2
|
197
201
|
def norm_bibitem_style(root)
|
198
202
|
root.xpath(NORM_BIBITEMS).each do |b|
|
199
|
-
if b.at(
|
203
|
+
if b.at(ISO_PUBLISHER_XPATH).nil?
|
200
204
|
@log.add("Style", b, "#{NORM_ISO_WARN}: #{b.text}")
|
201
205
|
end
|
202
206
|
end
|
@@ -127,7 +127,7 @@ module Metanorma
|
|
127
127
|
"possible decimal point", node, text)
|
128
128
|
@lang == "en" and style_regex(/\b(?<num>billions?)\b/i,
|
129
129
|
"ambiguous number", node, text)
|
130
|
-
style_regex(/(?:^|\
|
130
|
+
style_regex(/(?:^|\P{Zs})(?<num>-[0-9][0-9,.]*)/i,
|
131
131
|
"hyphen instead of minus sign U+2212", node, text)
|
132
132
|
end
|
133
133
|
|
@@ -158,8 +158,8 @@ module Metanorma
|
|
158
158
|
# ISO/IEC DIR 2, 8.4
|
159
159
|
# ISO/IEC DIR 2, 9.3
|
160
160
|
def style_abbrev(node, text)
|
161
|
-
style_regex(/(
|
162
|
-
(?<num>[a-z]{1,2}\.([a-z]{1,2}|\.))\b/ix,
|
161
|
+
style_regex(/(?:\A|\p{Zs})(?!e\.g\.|i\.e\.)
|
162
|
+
(?<num>[a-z]{1,2}\.(?:[a-z]{1,2}|\.))\b/ix,
|
163
163
|
"no dots in abbreviations", node, text)
|
164
164
|
style_regex(/\b(?<num>ppm)\b/i,
|
165
165
|
"language-specific abbreviation", node, text)
|
@@ -172,7 +172,7 @@ module Metanorma
|
|
172
172
|
|
173
173
|
# ISO/IEC DIR 2, 9.3
|
174
174
|
def style_units(node, text)
|
175
|
-
style_regex(/\b(?<num>[0-9][0-9,]*\
|
175
|
+
style_regex(/\b(?<num>[0-9][0-9,]*\p{Zs}+[\u00b0\u2032\u2033])/,
|
176
176
|
"space between number and degrees/minutes/seconds",
|
177
177
|
node, text)
|
178
178
|
style_regex(/\b(?<num>[0-9][0-9,]*#{SI_UNIT})\b/o,
|
@@ -188,7 +188,7 @@ module Metanorma
|
|
188
188
|
# ISO/IEC DIR 2, 9.3
|
189
189
|
def style_non_std_units(node, text)
|
190
190
|
NONSTD_UNITS.each do |k, v|
|
191
|
-
style_regex(/\b(?<num>[0-9][0-9,]*\
|
191
|
+
style_regex(/\b(?<num>[0-9][0-9,]*\p{Zs}+#{k})\b/,
|
192
192
|
"non-standard unit (should be #{v})", node, text)
|
193
193
|
end
|
194
194
|
end
|
@@ -198,7 +198,7 @@ module Metanorma
|
|
198
198
|
def style_punct(node, text)
|
199
199
|
@lang == "en" and style_regex(/\b(?<num>and\/?or)\b/i,
|
200
200
|
"Use 'either x or y, or both'", node, text)
|
201
|
-
style_regex(/\
|
201
|
+
style_regex(/\p{Zs}(?<num>&)\p{Zs}/i,
|
202
202
|
"Avoid ampersand in ordinary text'", node, text)
|
203
203
|
eref_style_punct(node)
|
204
204
|
end
|
data/metanorma-iso.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
33
33
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
34
34
|
|
35
|
-
spec.add_dependency "metanorma-standoc", "~> 2.5.
|
35
|
+
spec.add_dependency "metanorma-standoc", "~> 2.5.1"
|
36
36
|
spec.add_dependency "mnconvert", "~> 1.14"
|
37
37
|
spec.add_dependency "pubid-iso", "~> 0.5.0"
|
38
38
|
spec.add_dependency "ruby-jing"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-iso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metanorma-standoc
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.5.
|
19
|
+
version: 2.5.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.5.
|
26
|
+
version: 2.5.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mnconvert
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -375,6 +375,7 @@ files:
|
|
375
375
|
- lib/metanorma/iso/cleanup.rb
|
376
376
|
- lib/metanorma/iso/converter.rb
|
377
377
|
- lib/metanorma/iso/front.rb
|
378
|
+
- lib/metanorma/iso/front_contributor.rb
|
378
379
|
- lib/metanorma/iso/front_id.rb
|
379
380
|
- lib/metanorma/iso/isodoc.rng
|
380
381
|
- lib/metanorma/iso/isostandard-amd.rng
|