metanorma-iso 2.5.2 → 2.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.devel +3 -0
- data/lib/isodoc/iso/base_convert.rb +2 -1
- data/lib/isodoc/iso/html/html_iso_titlepage.html +4 -0
- data/lib/isodoc/iso/html/word_iso_titlepage-dis.html +3 -0
- data/lib/isodoc/iso/html/word_iso_titlepage-prf.html +3 -0
- data/lib/isodoc/iso/html/word_iso_titlepage.html +4 -0
- data/lib/isodoc/iso/i18n-en.yaml +1 -0
- data/lib/isodoc/iso/i18n-fr.yaml +1 -0
- data/lib/isodoc/iso/i18n-ru.yaml +1 -0
- data/lib/isodoc/iso/i18n-zh-Hans.yaml +1 -0
- data/lib/isodoc/iso/index.rb +2 -2
- data/lib/isodoc/iso/init.rb +2 -2
- data/lib/isodoc/iso/iso.amendment.xsl +23 -2
- data/lib/isodoc/iso/iso.international-standard.xsl +23 -2
- data/lib/isodoc/iso/word_dis_cleanup.rb +20 -211
- data/lib/isodoc/iso/word_dis_styles.rb +233 -0
- data/lib/isodoc/iso/xref_section.rb +10 -15
- data/lib/metanorma/iso/base.rb +4 -1
- data/lib/metanorma/iso/basicdoc.rng +56 -37
- data/lib/metanorma/iso/biblio.rng +10 -1
- data/lib/metanorma/iso/cleanup.rb +15 -13
- data/lib/metanorma/iso/front_id.rb +2 -1
- data/lib/metanorma/iso/isodoc.rng +52 -1
- data/lib/metanorma/iso/isostandard.rng +3 -0
- data/lib/metanorma/iso/processor.rb +1 -0
- data/lib/metanorma/iso/version.rb +1 -1
- data/metanorma-iso.gemspec +1 -1
- metadata +6 -4
@@ -0,0 +1,233 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module Iso
|
3
|
+
class WordDISConvert < WordConvert
|
4
|
+
STYLESMAP = {
|
5
|
+
AltTerms: "AdmittedTerm",
|
6
|
+
TableFootnote: "Tablefootnote",
|
7
|
+
formula: "Formula",
|
8
|
+
note: "Note",
|
9
|
+
example: "Example",
|
10
|
+
admonition: "Admonition",
|
11
|
+
admonitiontitle: "AdmonitionTitle",
|
12
|
+
sourcetitle: "SourceTitle",
|
13
|
+
TableTitle: "Tabletitle",
|
14
|
+
titlepagesbhead: "TablePageSubhead",
|
15
|
+
NormRef: "RefNorm",
|
16
|
+
Biblio: "BiblioEntry",
|
17
|
+
MsoNormal: "MsoBodyText",
|
18
|
+
FigureTitle: "Figuretitle",
|
19
|
+
zzwarning: "zzWarning",
|
20
|
+
zzwarninghdr: "zzWarningHdr",
|
21
|
+
quoteattribution: "QuoteAttribution",
|
22
|
+
Sourcecode: "Code",
|
23
|
+
zzSTDTitle1: "zzSTDTitle",
|
24
|
+
zzSTDTitle2: "zzSTDTitle",
|
25
|
+
zzCopyright1: "zzCopyright",
|
26
|
+
}.freeze
|
27
|
+
|
28
|
+
def new_styles(docxml)
|
29
|
+
STYLESMAP.each do |k, v|
|
30
|
+
docxml.xpath("//*[@class = '#{k}']").each { |s| s["class"] = v }
|
31
|
+
end
|
32
|
+
docxml.xpath("//h1[@class = 'ForewordTitle' or @class = 'IntroTitle']")
|
33
|
+
.each { |h| h.name = "p" }
|
34
|
+
dis_styles1(docxml)
|
35
|
+
docxml.xpath("//p[not(@class)]").each { |p| p["class"] = "MsoBodyText" }
|
36
|
+
stripbgcolor(docxml)
|
37
|
+
end
|
38
|
+
|
39
|
+
def sourcecode_style
|
40
|
+
"Code"
|
41
|
+
end
|
42
|
+
|
43
|
+
def dis_styles1(docxml)
|
44
|
+
amd_style(docxml)
|
45
|
+
middle_title_style(docxml)
|
46
|
+
code_style(docxml)
|
47
|
+
figure_style(docxml)
|
48
|
+
formula_style(docxml)
|
49
|
+
note_style(docxml)
|
50
|
+
example_style(docxml)
|
51
|
+
dis_style_interactions(docxml)
|
52
|
+
quote_style(docxml)
|
53
|
+
smaller_code_style(docxml)
|
54
|
+
end
|
55
|
+
|
56
|
+
def middle_title_style(docxml)
|
57
|
+
docxml.xpath("//p[@class = 'zzSTDTitle2']").each do |p|
|
58
|
+
p1 = p.previous_element && p1.name == p &&
|
59
|
+
p1["class"] = "zzSTDTitle2" or next
|
60
|
+
p1 << " #{p.remove.children.to_xml}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def dis_style_interactions(docxml)
|
65
|
+
docxml.xpath("//p[@class = 'Code' or @class = 'Code-' or " \
|
66
|
+
"@class = 'Code--']" \
|
67
|
+
"[following::p[@class = 'Examplecontinued']]").each do |p|
|
68
|
+
p["style"] ||= ""
|
69
|
+
p["style"] = "margin-bottom:12pt;#{p['style']}"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def amd_style(docxml)
|
74
|
+
@meta.get[:doctype] == "Amendment" or return
|
75
|
+
docxml.xpath("//div[@class = 'WordSection3']//h1").each do |h|
|
76
|
+
h.name = "p"
|
77
|
+
h["style"] = "font-style:italic;page-break-after:avoid;"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def para_style_change(div, class1, class2)
|
82
|
+
s = class1 ? "@class = '#{class1}'" : "not(@class)"
|
83
|
+
div.xpath(".//p[#{s}]").each do |p|
|
84
|
+
p["class"] = class2
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def quote_style1(div)
|
89
|
+
para_style_change(div, nil, "BodyTextindent1")
|
90
|
+
para_style_change(div, "Code-", "Code--")
|
91
|
+
para_style_change(div, "Code", "Code-")
|
92
|
+
if div["class"] != "Example"
|
93
|
+
para_style_change(div, "Example", "Exampleindent")
|
94
|
+
para_style_change(div, "Examplecontinued", "Exampleindentcontinued")
|
95
|
+
end
|
96
|
+
if div["class"] != "Note"
|
97
|
+
para_style_change(div, "Note", "Noteindent")
|
98
|
+
para_style_change(div, "Notecontinued", "Noteindentcontinued")
|
99
|
+
end
|
100
|
+
div.xpath(".//table[@class = 'dl']").each do |t|
|
101
|
+
t["style"] = "margin-left: 1cm;"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def note_style(docxml)
|
106
|
+
remove_note_label(docxml)
|
107
|
+
note_continued_style(docxml)
|
108
|
+
end
|
109
|
+
|
110
|
+
def example_style(docxml)
|
111
|
+
example_continued_style(docxml)
|
112
|
+
end
|
113
|
+
|
114
|
+
def example_continued_style(docxml)
|
115
|
+
docxml.xpath("//div[@class = 'Example']").each do |d|
|
116
|
+
d.xpath("./p").each_with_index do |p, i|
|
117
|
+
p["class"] && p["class"] != "Example" and next
|
118
|
+
p["class"] = (i.zero? ? "Example" : "Examplecontinued")
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def note_continued_style(docxml)
|
124
|
+
docxml.xpath("//div[@class = 'Note']").each do |d|
|
125
|
+
d.xpath("./p").each_with_index do |p, i|
|
126
|
+
p["class"] && p["class"] != "Note" and next
|
127
|
+
p["class"] = (i.zero? ? "Note" : "Notecontinued")
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
FIGURE_NESTED_STYLES =
|
133
|
+
{ Note: "Figurenote", example: "Figureexample" }.freeze
|
134
|
+
|
135
|
+
def figure_style(docxml)
|
136
|
+
docxml.xpath("//div[@class = 'figure']").each do |f|
|
137
|
+
FIGURE_NESTED_STYLES.each do |k, v|
|
138
|
+
f.xpath(".//*[@class = '#{k}']").each { |n| n["class"] = v }
|
139
|
+
end
|
140
|
+
f.xpath("./img").each do |i|
|
141
|
+
i.replace("<p class='FigureGraphic'>#{i.to_xml}</p>")
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def formula_style(docxml)
|
147
|
+
docxml.xpath("//div[@class = 'Formula']").each do |f|
|
148
|
+
f.xpath(".//p[not(@class)]").each do |p|
|
149
|
+
p["class"] = "Formula"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def code_style(doc)
|
155
|
+
span_style((doc.xpath("//tt//b") - doc.xpath("//tt//i//b")),
|
156
|
+
"ISOCodebold")
|
157
|
+
span_style((doc.xpath("//tt//i") - doc.xpath("//tt//b//i")),
|
158
|
+
"ISOCodeitalic")
|
159
|
+
span_style((doc.xpath("//b//tt") - doc.xpath("//b//i//tt")),
|
160
|
+
"ISOCodebold")
|
161
|
+
span_style((doc.xpath("//i//tt") - doc.xpath("//i//b//tt")),
|
162
|
+
"ISOCodeitalic")
|
163
|
+
span_style(doc.xpath("//tt"), "ISOCode")
|
164
|
+
end
|
165
|
+
|
166
|
+
def span_style(xpath, style)
|
167
|
+
xpath.each do |elem|
|
168
|
+
elem.name = "span"
|
169
|
+
elem["class"] = style
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def smaller_code_style(doc)
|
174
|
+
smaller_code_style_names(doc)
|
175
|
+
smaller_code_style_names2spans(doc)
|
176
|
+
end
|
177
|
+
|
178
|
+
# TODO read $smallerfonsize from CSS definitions
|
179
|
+
SMALL_FONT_CLASSES =
|
180
|
+
%w(pseudocode Note tablefootnote figdl MsoISOTable MsoTableGrid
|
181
|
+
TableISO Example Notecontinued Noteindent Noteindentcontinued
|
182
|
+
ListNumber5- ListContinue5- BodyTextIndent22 BodyTextIndent32
|
183
|
+
Exampleindent2 Exampleindent2continued Noteindent2continued
|
184
|
+
Noteindent2 example_label note_label Tablebody MsoNormalTable).freeze
|
185
|
+
|
186
|
+
INLINE_CODE_CLASSES = %w(ISOCodebold ISOCodeitalic ISOCode).freeze
|
187
|
+
|
188
|
+
def smaller_code_style_names(doc)
|
189
|
+
klass = SMALL_FONT_CLASSES.map { |x| "@class = '#{x}'" }.join(" or ")
|
190
|
+
doc.xpath("//*[#{klass}]") - doc.xpath("//*[#{klass}]//*[#{klass}]")
|
191
|
+
.each do |d|
|
192
|
+
INLINE_CODE_CLASSES.each do |n|
|
193
|
+
d.xpath(".//span[@class = '#{n}']").each do |s|
|
194
|
+
s["class"] += "-"
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def smaller_code_style_names2spans(doc)
|
201
|
+
INLINE_CODE_CLASSES.each do |n|
|
202
|
+
doc.xpath("//span[@class = '#{n}-']").each do |s|
|
203
|
+
s["class"] = n
|
204
|
+
s.children =
|
205
|
+
"<span style='font-size: 9pt;'>#{s.children.to_xml}</span>"
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def word_annex_cleanup1(docxml, lvl)
|
211
|
+
docxml.xpath("//h#{lvl}[ancestor::*[@class = 'Section3']]").each do |h2|
|
212
|
+
h2.name = "p"
|
213
|
+
h2["class"] = "a#{lvl}"
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
def word_table_cell_para_style(cell)
|
218
|
+
ret = cell["header"] == "true" ? "Tableheader" : "Tablebody"
|
219
|
+
cell["class"] == "rouge-code" and ret = "Code"
|
220
|
+
ret
|
221
|
+
end
|
222
|
+
|
223
|
+
def table_toc_class
|
224
|
+
["Table title", "Tabletitle", "Annex Table Title", "AnnexTableTitle"] +
|
225
|
+
super
|
226
|
+
end
|
227
|
+
|
228
|
+
def figure_toc_class
|
229
|
+
["Figure Title", "Annex Figure Title", "AnnexFigureTitle"] + super
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
@@ -7,10 +7,9 @@ module IsoDoc
|
|
7
7
|
clause.at(ns("./clause")) and
|
8
8
|
@anchors[clause["id"]] = { label: nil, level: 1, type: "clause",
|
9
9
|
xref: clause.at(ns("./title"))&.text }
|
10
|
-
i = Counter.new
|
10
|
+
i = Counter.new(0, prefix: "0.")
|
11
11
|
clause.xpath(ns("./clause")).each do |c|
|
12
|
-
i.increment(c)
|
13
|
-
section_names1(c, "0.#{i.print}", 2)
|
12
|
+
section_names1(c, i.increment(c).print, 2)
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
@@ -27,10 +26,9 @@ module IsoDoc
|
|
27
26
|
anchor_struct(i.print, nil, @labels["appendix"],
|
28
27
|
"clause").merge(level: 2, subtype: "annex",
|
29
28
|
container: clause["id"])
|
30
|
-
j = Counter.new
|
29
|
+
j = Counter.new(0, prefix: "#{i.print}.")
|
31
30
|
c.xpath(ns("./clause | ./references")).each do |c1|
|
32
|
-
j.increment(c1)
|
33
|
-
lbl = "#{@labels['appendix']} #{i.print}.#{j.print}"
|
31
|
+
lbl = "#{@labels['appendix']} #{j.increment(c1).print}"
|
34
32
|
appendix_names1(c1, l10n(lbl), 3, clause["id"])
|
35
33
|
end
|
36
34
|
end
|
@@ -41,32 +39,29 @@ module IsoDoc
|
|
41
39
|
def section_names1(clause, num, level)
|
42
40
|
@anchors[clause["id"]] =
|
43
41
|
{ label: num, level: level, xref: num, subtype: "clause" }
|
44
|
-
i = Counter.new
|
42
|
+
i = Counter.new(0, prefix: "#{num}.")
|
45
43
|
clause.xpath(ns("./clause | ./terms | ./term | ./definitions | " \
|
46
44
|
"./references"))
|
47
45
|
.each do |c|
|
48
|
-
i.increment(c)
|
49
|
-
section_names1(c, "#{num}.#{i.print}", level + 1)
|
46
|
+
section_names1(c, i.increment(c).print, level + 1)
|
50
47
|
end
|
51
48
|
end
|
52
49
|
|
53
50
|
def annex_names1(clause, num, level)
|
54
51
|
@anchors[clause["id"]] = { label: num, xref: num, level: level,
|
55
52
|
subtype: "annex" }
|
56
|
-
i = Counter.new
|
53
|
+
i = Counter.new(0, prefix: "#{num}.")
|
57
54
|
clause.xpath(ns("./clause | ./references")).each do |c|
|
58
|
-
i.increment(c)
|
59
|
-
annex_names1(c, "#{num}.#{i.print}", level + 1)
|
55
|
+
annex_names1(c, i.increment(c).print, level + 1)
|
60
56
|
end
|
61
57
|
end
|
62
58
|
|
63
59
|
def appendix_names1(clause, num, level, container)
|
64
60
|
@anchors[clause["id"]] = { label: num, xref: num, level: level,
|
65
61
|
container: container }
|
66
|
-
i = Counter.new
|
62
|
+
i = Counter.new(0, prefix: "#{num}.")
|
67
63
|
clause.xpath(ns("./clause | ./references")).each do |c|
|
68
|
-
i.increment(c)
|
69
|
-
appendix_names1(c, "#{num}.#{i.print}", level + 1, container)
|
64
|
+
appendix_names1(c, i.increment(c).print, level + 1, container)
|
70
65
|
end
|
71
66
|
end
|
72
67
|
|
data/lib/metanorma/iso/base.rb
CHANGED
@@ -5,6 +5,7 @@ require "pathname"
|
|
5
5
|
require "open-uri"
|
6
6
|
require "isodoc"
|
7
7
|
require "fileutils"
|
8
|
+
require_relative "processor"
|
8
9
|
|
9
10
|
module Metanorma
|
10
11
|
module ISO
|
@@ -47,7 +48,9 @@ module Metanorma
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def presentation_xml_converter(node)
|
50
|
-
IsoDoc::Iso::PresentationXMLConvert
|
51
|
+
IsoDoc::Iso::PresentationXMLConvert
|
52
|
+
.new(html_extract_attributes(node)
|
53
|
+
.merge(output_formats: ::Metanorma::Iso::Processor.new.output_formats))
|
51
54
|
end
|
52
55
|
|
53
56
|
def init(node)
|
@@ -346,6 +346,8 @@
|
|
346
346
|
<ref name="keyword"/>
|
347
347
|
<ref name="xref"/>
|
348
348
|
<ref name="hyperlink"/>
|
349
|
+
<ref name="index"/>
|
350
|
+
<ref name="index-xref"/>
|
349
351
|
</choice>
|
350
352
|
</oneOrMore>
|
351
353
|
</element>
|
@@ -623,6 +625,8 @@
|
|
623
625
|
<ref name="eref"/>
|
624
626
|
<ref name="xref"/>
|
625
627
|
<ref name="hyperlink"/>
|
628
|
+
<ref name="index"/>
|
629
|
+
<ref name="index-xref"/>
|
626
630
|
</choice>
|
627
631
|
</zeroOrMore>
|
628
632
|
</element>
|
@@ -636,6 +640,8 @@
|
|
636
640
|
<ref name="eref"/>
|
637
641
|
<ref name="xref"/>
|
638
642
|
<ref name="hyperlink"/>
|
643
|
+
<ref name="index"/>
|
644
|
+
<ref name="index-xref"/>
|
639
645
|
</choice>
|
640
646
|
</zeroOrMore>
|
641
647
|
</element>
|
@@ -648,6 +654,8 @@
|
|
648
654
|
<ref name="eref"/>
|
649
655
|
<ref name="xref"/>
|
650
656
|
<ref name="hyperlink"/>
|
657
|
+
<ref name="index"/>
|
658
|
+
<ref name="index-xref"/>
|
651
659
|
</choice>
|
652
660
|
</zeroOrMore>
|
653
661
|
</element>
|
@@ -655,7 +663,11 @@
|
|
655
663
|
<define name="keyword">
|
656
664
|
<element name="keyword">
|
657
665
|
<zeroOrMore>
|
658
|
-
<
|
666
|
+
<choice>
|
667
|
+
<ref name="PureTextElement"/>
|
668
|
+
<ref name="index"/>
|
669
|
+
<ref name="index-xref"/>
|
670
|
+
</choice>
|
659
671
|
</zeroOrMore>
|
660
672
|
</element>
|
661
673
|
</define>
|
@@ -676,7 +688,11 @@
|
|
676
688
|
<define name="strike">
|
677
689
|
<element name="strike">
|
678
690
|
<zeroOrMore>
|
679
|
-
<
|
691
|
+
<choice>
|
692
|
+
<ref name="PureTextElement"/>
|
693
|
+
<ref name="index"/>
|
694
|
+
<ref name="index-xref"/>
|
695
|
+
</choice>
|
680
696
|
</zeroOrMore>
|
681
697
|
</element>
|
682
698
|
</define>
|
@@ -898,44 +914,47 @@
|
|
898
914
|
-->
|
899
915
|
<define name="image">
|
900
916
|
<element name="image">
|
901
|
-
<
|
902
|
-
|
917
|
+
<ref name="Image"/>
|
918
|
+
</element>
|
919
|
+
</define>
|
920
|
+
<define name="Image">
|
921
|
+
<attribute name="id">
|
922
|
+
<data type="ID"/>
|
923
|
+
</attribute>
|
924
|
+
<attribute name="src">
|
925
|
+
<data type="anyURI"/>
|
926
|
+
</attribute>
|
927
|
+
<attribute name="mimetype"/>
|
928
|
+
<optional>
|
929
|
+
<attribute name="filename"/>
|
930
|
+
</optional>
|
931
|
+
<optional>
|
932
|
+
<attribute name="width">
|
933
|
+
<choice>
|
934
|
+
<data type="int"/>
|
935
|
+
<value>auto</value>
|
936
|
+
</choice>
|
903
937
|
</attribute>
|
904
|
-
|
938
|
+
</optional>
|
939
|
+
<optional>
|
940
|
+
<attribute name="height">
|
941
|
+
<choice>
|
942
|
+
<data type="int"/>
|
943
|
+
<value>auto</value>
|
944
|
+
</choice>
|
945
|
+
</attribute>
|
946
|
+
</optional>
|
947
|
+
<optional>
|
948
|
+
<attribute name="alt"/>
|
949
|
+
</optional>
|
950
|
+
<optional>
|
951
|
+
<attribute name="title"/>
|
952
|
+
</optional>
|
953
|
+
<optional>
|
954
|
+
<attribute name="longdesc">
|
905
955
|
<data type="anyURI"/>
|
906
956
|
</attribute>
|
907
|
-
|
908
|
-
<optional>
|
909
|
-
<attribute name="filename"/>
|
910
|
-
</optional>
|
911
|
-
<optional>
|
912
|
-
<attribute name="width">
|
913
|
-
<choice>
|
914
|
-
<data type="int"/>
|
915
|
-
<value>auto</value>
|
916
|
-
</choice>
|
917
|
-
</attribute>
|
918
|
-
</optional>
|
919
|
-
<optional>
|
920
|
-
<attribute name="height">
|
921
|
-
<choice>
|
922
|
-
<data type="int"/>
|
923
|
-
<value>auto</value>
|
924
|
-
</choice>
|
925
|
-
</attribute>
|
926
|
-
</optional>
|
927
|
-
<optional>
|
928
|
-
<attribute name="alt"/>
|
929
|
-
</optional>
|
930
|
-
<optional>
|
931
|
-
<attribute name="title"/>
|
932
|
-
</optional>
|
933
|
-
<optional>
|
934
|
-
<attribute name="longdesc">
|
935
|
-
<data type="anyURI"/>
|
936
|
-
</attribute>
|
937
|
-
</optional>
|
938
|
-
</element>
|
957
|
+
</optional>
|
939
958
|
</define>
|
940
959
|
<define name="video">
|
941
960
|
<element name="video">
|
@@ -348,6 +348,9 @@
|
|
348
348
|
<zeroOrMore>
|
349
349
|
<ref name="contact"/>
|
350
350
|
</zeroOrMore>
|
351
|
+
<optional>
|
352
|
+
<ref name="logo"/>
|
353
|
+
</optional>
|
351
354
|
</element>
|
352
355
|
</define>
|
353
356
|
<define name="orgname">
|
@@ -366,6 +369,11 @@
|
|
366
369
|
</choice>
|
367
370
|
</element>
|
368
371
|
</define>
|
372
|
+
<define name="logo">
|
373
|
+
<element name="logo">
|
374
|
+
<ref name="image"/>
|
375
|
+
</element>
|
376
|
+
</define>
|
369
377
|
<define name="NameWithVariants">
|
370
378
|
<element name="primary">
|
371
379
|
<ref name="LocalizedString"/>
|
@@ -942,6 +950,7 @@
|
|
942
950
|
<value>obsoleted</value>
|
943
951
|
<value>confirmed</value>
|
944
952
|
<value>updated</value>
|
953
|
+
<value>corrected</value>
|
945
954
|
<value>issued</value>
|
946
955
|
<value>transmitted</value>
|
947
956
|
<value>copied</value>
|
@@ -1283,7 +1292,7 @@
|
|
1283
1292
|
<value>mergedInto</value>
|
1284
1293
|
<value>splits</value>
|
1285
1294
|
<value>splitInto</value>
|
1286
|
-
<value>
|
1295
|
+
<value>instanceOf</value>
|
1287
1296
|
<value>hasInstance</value>
|
1288
1297
|
<value>exemplarOf</value>
|
1289
1298
|
<value>hasExemplar</value>
|
@@ -1,6 +1,3 @@
|
|
1
|
-
require "date"
|
2
|
-
require "htmlentities"
|
3
|
-
|
4
1
|
module Metanorma
|
5
2
|
module ISO
|
6
3
|
class Converter < Standoc::Converter
|
@@ -37,7 +34,6 @@ module Metanorma
|
|
37
34
|
xmldoc.xpath("//bibdata/contributor[role/@type = 'publisher']" \
|
38
35
|
"/organization").each_with_object([]) do |x, prefix|
|
39
36
|
x1 = x.at("abbreviation")&.text || x.at("name")&.text
|
40
|
-
# (x1 == "ISO" and prefix.unshift("ISO")) or prefix << x1
|
41
37
|
prefix << x1
|
42
38
|
end
|
43
39
|
end
|
@@ -76,9 +72,7 @@ module Metanorma
|
|
76
72
|
end
|
77
73
|
|
78
74
|
def sort_biblio(bib)
|
79
|
-
bib.sort
|
80
|
-
sort_biblio_key(a) <=> sort_biblio_key(b)
|
81
|
-
end
|
75
|
+
bib.sort { |a, b| sort_biblio_key(a) <=> sort_biblio_key(b) }
|
82
76
|
end
|
83
77
|
|
84
78
|
# sort by: doc class (ISO, IEC, other standard (not DOI &c), other
|
@@ -90,15 +84,15 @@ module Metanorma
|
|
90
84
|
# then title
|
91
85
|
def sort_biblio_key(bib)
|
92
86
|
pubclass = pub_class(bib)
|
93
|
-
num = bib
|
94
|
-
id = bib
|
95
|
-
bib
|
96
|
-
metaid = bib
|
87
|
+
num = bib.at("./docnumber")&.text
|
88
|
+
id = bib.at("./docidentifier[@primary]") ||
|
89
|
+
bib.at("./docidentifier[not(#{skip_docid} or @type = 'metanorma')]")
|
90
|
+
metaid = bib.at("./docidentifier[@type = 'metanorma']")&.text
|
97
91
|
abbrid = metaid unless /^\[\d+\]$/.match?(metaid)
|
98
92
|
/\d-(?<partid>\d+)/ =~ id&.text
|
99
93
|
type = id["type"] if id
|
100
|
-
title = bib
|
101
|
-
bib
|
94
|
+
title = bib.at("./title[@type = 'main']")&.text ||
|
95
|
+
bib.at("./title")&.text || bib&.at("./formattedref")&.text
|
102
96
|
"#{pubclass} :: #{type} :: " \
|
103
97
|
"#{num.nil? ? abbrid : sprintf('%09d', num.to_i)} :: " \
|
104
98
|
"#{sprintf('%09d', partid.to_i)} :: #{id&.text} :: #{title}"
|
@@ -241,6 +235,14 @@ module Metanorma
|
|
241
235
|
end
|
242
236
|
end
|
243
237
|
end
|
238
|
+
|
239
|
+
def termdef_boilerplate_insert_location(xmldoc)
|
240
|
+
f = xmldoc.at(self.class::TERM_CLAUSE)
|
241
|
+
root = xmldoc.at("//sections/terms | //sections/clause[.//terms]")
|
242
|
+
!f || !root and return f || root
|
243
|
+
f.at("./preceding-sibling::clause") and return root
|
244
|
+
f
|
245
|
+
end
|
244
246
|
end
|
245
247
|
end
|
246
248
|
end
|