metanorma-iso 2.0.7 → 2.1.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/asciidoctor/iso/base.rb +0 -1
- data/lib/asciidoctor/iso/cleanup.rb +0 -1
- data/lib/asciidoctor/iso/converter.rb +0 -1
- data/lib/asciidoctor/iso/deprecated.rb +4 -2
- data/lib/asciidoctor/iso/front.rb +0 -1
- data/lib/asciidoctor/iso/front_id.rb +0 -1
- data/lib/asciidoctor/iso/section.rb +0 -1
- data/lib/asciidoctor/iso/validate.rb +0 -1
- data/lib/asciidoctor/iso/validate_image.rb +0 -1
- data/lib/asciidoctor/iso/validate_requirements.rb +0 -1
- data/lib/asciidoctor/iso/validate_section.rb +0 -1
- data/lib/asciidoctor/iso/validate_style.rb +0 -1
- data/lib/asciidoctor/iso/validate_title.rb +0 -1
- data/lib/html2doc/lists.rb +37 -0
- data/lib/isodoc/iso/html/html_iso_titlepage.html +7 -2
- data/lib/isodoc/iso/html/isodoc-dis.css +196 -156
- data/lib/isodoc/iso/html/isodoc-dis.scss +193 -156
- data/lib/isodoc/iso/html/word_iso_intro-dis.html +7 -0
- data/lib/isodoc/iso/html/word_iso_titlepage-dis.html +3 -2
- data/lib/isodoc/iso/html/word_iso_titlepage.html +8 -2
- data/lib/isodoc/iso/html/wordstyle-dis.css +204 -34
- data/lib/isodoc/iso/html/wordstyle-dis.scss +198 -34
- data/lib/isodoc/iso/i18n-en.yaml +2 -1
- 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 +1 -1
- data/lib/isodoc/iso/init.rb +17 -1
- data/lib/isodoc/iso/iso.amendment.xsl +726 -299
- data/lib/isodoc/iso/iso.international-standard.xsl +726 -299
- data/lib/isodoc/iso/metadata.rb +75 -63
- data/lib/isodoc/iso/presentation_inline.rb +90 -0
- data/lib/isodoc/iso/presentation_xml_convert.rb +39 -100
- data/lib/isodoc/iso/presentation_xref.rb +126 -0
- data/lib/isodoc/iso/word_cleanup.rb +16 -2
- data/lib/isodoc/iso/word_convert.rb +27 -10
- data/lib/isodoc/iso/word_dis_convert.rb +174 -0
- data/lib/isodoc/iso/xref.rb +50 -30
- data/lib/metanorma/iso/biblio.rng +62 -10
- data/lib/metanorma/iso/boilerplate-fr.xml +1 -1
- data/lib/metanorma/iso/boilerplate-ru.xml +1 -3
- data/lib/metanorma/iso/boilerplate.xml +1 -3
- data/lib/metanorma/iso/cleanup.rb +7 -6
- data/lib/metanorma/iso/front_id.rb +28 -11
- data/lib/metanorma/iso/isodoc.rng +56 -0
- data/lib/metanorma/iso/version.rb +1 -1
- data/lib/metanorma-iso.rb +1 -0
- data/lib/relaton/render/config.yml +4 -0
- data/lib/relaton/render/general.rb +13 -0
- data/metanorma-iso.gemspec +1 -1
- data/spec/isodoc/amd_spec.rb +15 -14
- data/spec/isodoc/blocks_spec.rb +286 -179
- data/spec/isodoc/i18n_spec.rb +296 -133
- data/spec/isodoc/inline_spec.rb +35 -42
- data/spec/isodoc/iso_spec.rb +43 -27
- data/spec/isodoc/postproc_spec.rb +25 -0
- data/spec/isodoc/ref_spec.rb +66 -69
- data/spec/isodoc/section_spec.rb +78 -76
- data/spec/isodoc/table_spec.rb +2 -2
- data/spec/isodoc/terms_spec.rb +2 -2
- data/spec/isodoc/word_dis_spec.rb +760 -0
- data/spec/isodoc/xref_spec.rb +51 -51
- data/spec/metanorma/amd_spec.rb +39 -16
- data/spec/metanorma/base_spec.rb +17 -9
- data/spec/metanorma/blocks_spec.rb +4 -4
- data/spec/metanorma/cleanup_spec.rb +11 -11
- data/spec/metanorma/section_spec.rb +3 -3
- data/spec/spec_helper.rb +5 -2
- data/spec/vcr_cassettes/withdrawn_iso.yml +26 -26
- metadata +11 -5
- data/spec/vcr_cassettes/docrels.yml +0 -385
@@ -2,6 +2,7 @@ require_relative "base_convert"
|
|
2
2
|
require "isodoc"
|
3
3
|
require_relative "init"
|
4
4
|
require_relative "word_cleanup"
|
5
|
+
require_relative "word_dis_convert"
|
5
6
|
|
6
7
|
module IsoDoc
|
7
8
|
module Iso
|
@@ -13,6 +14,11 @@ module IsoDoc
|
|
13
14
|
@wordToClevels = 3 if @wordToClevels.zero?
|
14
15
|
@htmlToClevels = options[:htmltoclevels].to_i
|
15
16
|
@htmlToClevels = 3 if @htmlToClevels.zero?
|
17
|
+
init_dis
|
18
|
+
end
|
19
|
+
|
20
|
+
def init_dis
|
21
|
+
@dis = ::IsoDoc::Iso::WordDISConvert.new(options)
|
16
22
|
end
|
17
23
|
|
18
24
|
def font_choice(options)
|
@@ -45,16 +51,16 @@ module IsoDoc
|
|
45
51
|
olstyle: "l2" }
|
46
52
|
end
|
47
53
|
|
48
|
-
def
|
49
|
-
|
50
|
-
if
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
@
|
55
|
-
|
54
|
+
def convert(input_filename, file = nil, debug = false,
|
55
|
+
output_filename = nil)
|
56
|
+
file = File.read(input_filename, encoding: "utf-8") if file.nil?
|
57
|
+
docxml = Nokogiri::XML(file) { |config| config.huge }
|
58
|
+
if @dis &&
|
59
|
+
/^[45].$/.match?(docxml&.at(ns("//bibdata/status/stage"))&.text)
|
60
|
+
@dis.convert(input_filename, file, debug, output_filename)
|
61
|
+
else
|
62
|
+
super
|
56
63
|
end
|
57
|
-
super
|
58
64
|
end
|
59
65
|
|
60
66
|
def make_body(xml, docxml)
|
@@ -171,11 +177,22 @@ module IsoDoc
|
|
171
177
|
|
172
178
|
name&.at(ns("./strong"))&.remove # supplied by CSS list numbering
|
173
179
|
div.h1 **{ class: "Annex" } do |t|
|
174
|
-
name
|
180
|
+
annex_name1(name, t)
|
175
181
|
clause_parse_subtitle(name, t)
|
176
182
|
end
|
177
183
|
end
|
178
184
|
|
185
|
+
def annex_name1(name, out)
|
186
|
+
name.children.each do |c2|
|
187
|
+
if c2.name == "span" && c2["class"] == "obligation"
|
188
|
+
out.span **{ style: "font-weight:normal;" } do |s|
|
189
|
+
c2.children.each { |c3| parse(c3, s) }
|
190
|
+
end
|
191
|
+
else parse(c2, out)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
179
196
|
include BaseConvert
|
180
197
|
include Init
|
181
198
|
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module Iso
|
3
|
+
class WordDISConvert < WordConvert
|
4
|
+
def default_file_locations(_options)
|
5
|
+
{
|
6
|
+
wordstylesheet: html_doc_path("wordstyle-dis.scss"),
|
7
|
+
standardstylesheet: html_doc_path("isodoc-dis.scss"),
|
8
|
+
header: html_doc_path("header-dis.html"),
|
9
|
+
wordcoverpage: html_doc_path("word_iso_titlepage-dis.html"),
|
10
|
+
wordintropage: html_doc_path("word_iso_intro-dis.html"),
|
11
|
+
ulstyle: "l3",
|
12
|
+
olstyle: "l2",
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(options)
|
17
|
+
@libdir ||= File.dirname(__FILE__) # rubocop:disable Lint/DisjunctiveAssignmentInConstructor
|
18
|
+
options.merge!(default_file_locations(options))
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def init_dis; end
|
23
|
+
|
24
|
+
def style_cleanup(docxml)
|
25
|
+
super
|
26
|
+
dis_styles(docxml)
|
27
|
+
end
|
28
|
+
|
29
|
+
STYLESMAP = {
|
30
|
+
AltTerms: "AdmittedTerm",
|
31
|
+
TableFootnote: "Tablefootnote",
|
32
|
+
formula: "Formula",
|
33
|
+
note: "Note",
|
34
|
+
NormRef: "RefNorm",
|
35
|
+
biblio: "BiblioEntry",
|
36
|
+
MsoNormal: "MsoBodyText",
|
37
|
+
FigureTitle: "Figuretitle",
|
38
|
+
}.freeze
|
39
|
+
|
40
|
+
def dis_styles(docxml)
|
41
|
+
STYLESMAP.each do |k, v|
|
42
|
+
docxml.xpath("//*[@class = '#{k}']").each { |s| s["class"] = v }
|
43
|
+
end
|
44
|
+
docxml.xpath("//h1[@class = 'ForewordTitle' or @class = 'IntroTitle']")
|
45
|
+
.each { |h| h.name = "p" }
|
46
|
+
dis_styles1(docxml)
|
47
|
+
docxml.xpath("//p[not(@class)]").each { |p| p["class"] = "MsoBodyText" }
|
48
|
+
end
|
49
|
+
|
50
|
+
def dis_styles1(docxml)
|
51
|
+
code_style(docxml)
|
52
|
+
figure_style(docxml)
|
53
|
+
example_style(docxml)
|
54
|
+
end
|
55
|
+
|
56
|
+
def example_style(docxml)
|
57
|
+
docxml.xpath("//div[@class = 'Example']").each do |d|
|
58
|
+
d.xpath("./p").each_with_index do |p, i|
|
59
|
+
next if p["class"] && p["class"] != "Example"
|
60
|
+
|
61
|
+
p["class"] = (i.zero? ? "Example" : "Examplecontinued")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def figure_name_attrs(_node)
|
67
|
+
{ class: "FigureTitle", style: "text-align:center;" }
|
68
|
+
end
|
69
|
+
|
70
|
+
def table_title_attrs(_node)
|
71
|
+
{ class: "Tabletitle", style: "text-align:center;" }
|
72
|
+
end
|
73
|
+
|
74
|
+
def word_annex_cleanup1(docxml, lvl)
|
75
|
+
docxml.xpath("//h#{lvl}[ancestor::*[@class = 'Section3']]").each do |h2|
|
76
|
+
h2.name = "p"
|
77
|
+
h2["class"] = "a#{lvl}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def span_parse(node, out)
|
82
|
+
out.span **{ class: node["class"] } do |x|
|
83
|
+
node.children.each { |n| parse(n, x) }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def word_toc_preface(level)
|
88
|
+
<<~TOC.freeze
|
89
|
+
<span lang="EN-GB"><span
|
90
|
+
style='mso-element:field-begin'></span><span
|
91
|
+
style='mso-spacerun:yes'> </span>TOC \\o "2-#{level}" \\h \\z \\t
|
92
|
+
"Heading 1;1;ANNEX;1;Biblio Title;1;Foreword Title;1;Intro Title;1;ANNEXN;1;ANNEXZ;1;na2;1;na3;1;na4;1;na5;1;na6;1;Title;1;Base_Heading;1;Box-title;1;Front Head;1;Index Head;1;AMEND Terms Heading;1;AMEND Heading 1 Unnumbered;1"
|
93
|
+
<span style='mso-element:field-separator'></span></span>
|
94
|
+
TOC
|
95
|
+
end
|
96
|
+
|
97
|
+
def render_identifier(ident)
|
98
|
+
ret = super
|
99
|
+
ret[:sdo] = std_docid_semantic(ret[:sdo])
|
100
|
+
ret
|
101
|
+
end
|
102
|
+
|
103
|
+
FIGURE_NESTED_STYLES =
|
104
|
+
{ Note: "Figurenote", example: "Figureexample" }.freeze
|
105
|
+
|
106
|
+
def figure_style(docxml)
|
107
|
+
docxml.xpath("//div[@class = 'figure']").each do |f|
|
108
|
+
FIGURE_NESTED_STYLES.each do |k, v|
|
109
|
+
f.xpath(".//*[@class = '#{k}']").each { |n| n["class"] = v }
|
110
|
+
end
|
111
|
+
f.xpath("./img").each do |i|
|
112
|
+
i.replace("<p class='FigureGraphic'>#{i.to_xml}</p>")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def code_style(doc)
|
118
|
+
span_style((doc.xpath("//tt//b") - doc.xpath("//tt//i//b")),
|
119
|
+
"ISOCodebold")
|
120
|
+
span_style((doc.xpath("//tt//i") - doc.xpath("//tt//b//i")),
|
121
|
+
"ISOCodeitalic")
|
122
|
+
span_style((doc.xpath("//b//tt") - doc.xpath("//b//i//tt")),
|
123
|
+
"ISOCodebold")
|
124
|
+
span_style((doc.xpath("//i//tt") - doc.xpath("//i//b//tt")),
|
125
|
+
"ISOCodeitalic")
|
126
|
+
span_style(doc.xpath("//tt"), "ISOCode")
|
127
|
+
end
|
128
|
+
|
129
|
+
def span_style(xpath, style)
|
130
|
+
xpath.each do |elem|
|
131
|
+
elem.name = "span"
|
132
|
+
elem["class"] = style
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def make_tr_attr(cell, row, totalrows, header)
|
137
|
+
super.merge(header: header)
|
138
|
+
end
|
139
|
+
|
140
|
+
def word_cleanup(docxml)
|
141
|
+
word_table_cell_para(docxml)
|
142
|
+
super
|
143
|
+
end
|
144
|
+
|
145
|
+
def word_table_cell_para(docxml)
|
146
|
+
docxml.xpath("//td | //th").each do |t|
|
147
|
+
s = t["header"] == "true" ? "Tableheader" : "Tablebody"
|
148
|
+
t.delete("header")
|
149
|
+
if t.at("./p |./div")
|
150
|
+
t.xpath("./p | ./div").each { |p| p["class"] = s }
|
151
|
+
else
|
152
|
+
t.children = "<div class='#{s}'>#{t.children.to_xml}</div>"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def toWord(result, filename, dir, header)
|
158
|
+
result = from_xhtml(word_cleanup(to_xhtml(result)))
|
159
|
+
.gsub(/-DOUBLE_HYPHEN_ESCAPE-/, "--")
|
160
|
+
@wordstylesheet = wordstylesheet_update
|
161
|
+
::Html2Doc::IsoDIS.new(
|
162
|
+
filename: filename,
|
163
|
+
imagedir: @localdir,
|
164
|
+
stylesheet: @wordstylesheet&.path,
|
165
|
+
header_file: header&.path, dir: dir,
|
166
|
+
asciimathdelims: [@openmathdelim, @closemathdelim],
|
167
|
+
liststyles: { ul: @ulstyle, ol: @olstyle }
|
168
|
+
).process(result)
|
169
|
+
header&.unlink
|
170
|
+
@wordstylesheet.unlink if @wordstylesheet.is_a?(Tempfile)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
data/lib/isodoc/iso/xref.rb
CHANGED
@@ -10,36 +10,48 @@ module IsoDoc
|
|
10
10
|
else
|
11
11
|
initial_anchor_names1(doc)
|
12
12
|
end
|
13
|
-
|
13
|
+
if @parse_settings.empty? || @parse_settings[:clauses]
|
14
|
+
introduction_names(doc.at(ns("//introduction")))
|
15
|
+
end
|
14
16
|
end
|
15
17
|
|
16
18
|
def initial_anchor_names_amd(doc)
|
17
|
-
|
18
|
-
|
19
|
+
if @parse_settings.empty? || @parse_settings[:clauses]
|
20
|
+
doc.xpath(ns("//preface/*")).each do |c|
|
21
|
+
c.element? and preface_names(c)
|
22
|
+
end
|
23
|
+
doc.xpath(ns("//sections/clause")).each do |c|
|
24
|
+
c.element? and preface_names(c)
|
25
|
+
end
|
19
26
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
27
|
+
if @parse_settings.empty?
|
28
|
+
sequential_asset_names(doc.xpath(ns("//preface/*")))
|
29
|
+
middle_section_asset_names(doc)
|
30
|
+
termnote_anchor_names(doc)
|
31
|
+
termexample_anchor_names(doc)
|
23
32
|
end
|
24
|
-
middle_section_asset_names(doc)
|
25
|
-
termnote_anchor_names(doc)
|
26
|
-
termexample_anchor_names(doc)
|
27
33
|
end
|
28
34
|
|
29
35
|
def initial_anchor_names1(doc)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
n = section_names(
|
36
|
+
if @parse_settings.empty? || @parse_settings[:clauses]
|
37
|
+
doc.xpath(ns("//preface/*")).each do |c|
|
38
|
+
c.element? and preface_names(c)
|
39
|
+
end
|
40
|
+
# potentially overridden in middle_section_asset_names()
|
41
|
+
sequential_asset_names(doc.xpath(ns("//preface/*")))
|
42
|
+
n = Counter.new
|
43
|
+
n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1)
|
44
|
+
n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1)
|
45
|
+
doc.xpath(ns("//sections/clause[not(@type = 'scope')] | "\
|
46
|
+
"//sections/terms | //sections/definitions")).each do |c|
|
47
|
+
n = section_names(c, n, 1)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
if @parse_settings.empty?
|
51
|
+
middle_section_asset_names(doc)
|
52
|
+
termnote_anchor_names(doc)
|
53
|
+
termexample_anchor_names(doc)
|
39
54
|
end
|
40
|
-
middle_section_asset_names(doc)
|
41
|
-
termnote_anchor_names(doc)
|
42
|
-
termexample_anchor_names(doc)
|
43
55
|
end
|
44
56
|
|
45
57
|
# we can reference 0-number clauses in introduction
|
@@ -68,6 +80,7 @@ module IsoDoc
|
|
68
80
|
@anchors[c["id"]] = anchor_struct(i.print, nil, @labels["appendix"],
|
69
81
|
"clause")
|
70
82
|
@anchors[c["id"]][:level] = 2
|
83
|
+
@anchors[c["id"]][:subtype] = "annex"
|
71
84
|
@anchors[c["id"]][:container] = clause["id"]
|
72
85
|
j = Counter.new
|
73
86
|
c.xpath(ns("./clause | ./references")).each do |c1|
|
@@ -78,10 +91,11 @@ module IsoDoc
|
|
78
91
|
end
|
79
92
|
end
|
80
93
|
|
94
|
+
# subclauses are not prefixed with "Clause"
|
95
|
+
# retaining sybtupe for the semantics
|
81
96
|
def section_names1(clause, num, level)
|
82
97
|
@anchors[clause["id"]] =
|
83
|
-
{ label: num, level: level, xref: num }
|
84
|
-
# subclauses are not prefixed with "Clause"
|
98
|
+
{ label: num, level: level, xref: num, subtype: "clause" }
|
85
99
|
i = Counter.new
|
86
100
|
clause.xpath(ns("./clause | ./terms | ./term | ./definitions | "\
|
87
101
|
"./references"))
|
@@ -92,7 +106,8 @@ module IsoDoc
|
|
92
106
|
end
|
93
107
|
|
94
108
|
def annex_names1(clause, num, level)
|
95
|
-
@anchors[clause["id"]] = { label: num, xref: num, level: level
|
109
|
+
@anchors[clause["id"]] = { label: num, xref: num, level: level,
|
110
|
+
subtype: "annex" }
|
96
111
|
i = Counter.new
|
97
112
|
clause.xpath(ns("./clause | ./references")).each do |c|
|
98
113
|
i.increment(c)
|
@@ -113,7 +128,7 @@ module IsoDoc
|
|
113
128
|
def hierarchical_formula_names(clause, num)
|
114
129
|
c = IsoDoc::XrefGen::Counter.new
|
115
130
|
clause.xpath(ns(".//formula")).each do |t|
|
116
|
-
next if
|
131
|
+
next if blank?(t["id"])
|
117
132
|
|
118
133
|
@anchors[t["id"]] = anchor_struct(
|
119
134
|
"#{num}#{hiersep}#{c.increment(t).print}", t,
|
@@ -133,13 +148,12 @@ module IsoDoc
|
|
133
148
|
end
|
134
149
|
|
135
150
|
def sequential_figure_names(clause)
|
136
|
-
c = IsoDoc::XrefGen::Counter.new
|
137
151
|
j = 0
|
138
152
|
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
|
139
|
-
.
|
153
|
+
.each_with_object(IsoDoc::XrefGen::Counter.new) do |t, c|
|
140
154
|
j = subfigure_increment(j, c, t)
|
141
155
|
sublabel = j.zero? ? nil : "#{(j + 96).chr})"
|
142
|
-
next if
|
156
|
+
next if blank?(t["id"])
|
143
157
|
|
144
158
|
figure_anchor(t, sublabel, c.print)
|
145
159
|
end
|
@@ -153,7 +167,7 @@ module IsoDoc
|
|
153
167
|
j = subfigure_increment(j, c, t)
|
154
168
|
label = "#{num}#{hiersep}#{c.print}"
|
155
169
|
sublabel = j.zero? ? nil : "#{(j + 96).chr})"
|
156
|
-
next if
|
170
|
+
next if blank?(t["id"])
|
157
171
|
|
158
172
|
figure_anchor(t, sublabel, label)
|
159
173
|
end
|
@@ -167,7 +181,13 @@ module IsoDoc
|
|
167
181
|
|
168
182
|
def back_anchor_names(docxml)
|
169
183
|
super
|
170
|
-
|
184
|
+
if @parse_settings.empty? || @parse_settings[:clauses]
|
185
|
+
docxml.xpath(ns("//indexsect")).each { |b| preface_names(b) }
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def annex_name_lbl(clause, num)
|
190
|
+
super.sub(%r{<br/>(.*)$}, "<br/><span class='obligation'>\\1</span>")
|
171
191
|
end
|
172
192
|
end
|
173
193
|
end
|
@@ -527,7 +527,7 @@
|
|
527
527
|
</define>
|
528
528
|
<define name="LocalityType">
|
529
529
|
<data type="string">
|
530
|
-
<param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
|
530
|
+
<param name="pattern">section|clause|part|paragraph|chapter|page|title|line|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
|
531
531
|
</data>
|
532
532
|
</define>
|
533
533
|
<define name="referenceFrom">
|
@@ -677,6 +677,9 @@
|
|
677
677
|
<zeroOrMore>
|
678
678
|
<ref name="extent"/>
|
679
679
|
</zeroOrMore>
|
680
|
+
<optional>
|
681
|
+
<ref name="bibliographic_size"/>
|
682
|
+
</optional>
|
680
683
|
<zeroOrMore>
|
681
684
|
<ref name="accesslocation"/>
|
682
685
|
</zeroOrMore>
|
@@ -848,17 +851,46 @@
|
|
848
851
|
</define>
|
849
852
|
<define name="bplace">
|
850
853
|
<element name="place">
|
851
|
-
<
|
852
|
-
<
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
854
|
+
<choice>
|
855
|
+
<text/>
|
856
|
+
<group>
|
857
|
+
<ref name="bibliocity"/>
|
858
|
+
<zeroOrMore>
|
859
|
+
<ref name="biblioregion"/>
|
860
|
+
</zeroOrMore>
|
861
|
+
<zeroOrMore>
|
862
|
+
<ref name="bibliocountry"/>
|
863
|
+
</zeroOrMore>
|
864
|
+
</group>
|
865
|
+
</choice>
|
866
|
+
</element>
|
867
|
+
</define>
|
868
|
+
<define name="bibliocity">
|
869
|
+
<element name="city">
|
859
870
|
<text/>
|
860
871
|
</element>
|
861
872
|
</define>
|
873
|
+
<define name="biblioregion">
|
874
|
+
<element name="region">
|
875
|
+
<ref name="RegionType"/>
|
876
|
+
</element>
|
877
|
+
</define>
|
878
|
+
<define name="bibliocountry">
|
879
|
+
<element name="country">
|
880
|
+
<ref name="RegionType"/>
|
881
|
+
</element>
|
882
|
+
</define>
|
883
|
+
<define name="RegionType">
|
884
|
+
<optional>
|
885
|
+
<attribute name="iso"/>
|
886
|
+
</optional>
|
887
|
+
<optional>
|
888
|
+
<attribute name="recommended">
|
889
|
+
<data type="boolean"/>
|
890
|
+
</attribute>
|
891
|
+
</optional>
|
892
|
+
<text/>
|
893
|
+
</define>
|
862
894
|
<define name="bprice">
|
863
895
|
<element name="price">
|
864
896
|
<attribute name="currency"/>
|
@@ -922,9 +954,29 @@
|
|
922
954
|
<text/>
|
923
955
|
</element>
|
924
956
|
</define>
|
957
|
+
<define name="sizevalue">
|
958
|
+
<element name="value">
|
959
|
+
<attribute name="type"/>
|
960
|
+
<text/>
|
961
|
+
</element>
|
962
|
+
</define>
|
963
|
+
<define name="bibliographic_size">
|
964
|
+
<element name="size">
|
965
|
+
<oneOrMore>
|
966
|
+
<ref name="sizevalue"/>
|
967
|
+
</oneOrMore>
|
968
|
+
</element>
|
969
|
+
</define>
|
925
970
|
<define name="extent">
|
926
971
|
<element name="extent">
|
927
|
-
<
|
972
|
+
<choice>
|
973
|
+
<zeroOrMore>
|
974
|
+
<ref name="locality"/>
|
975
|
+
</zeroOrMore>
|
976
|
+
<zeroOrMore>
|
977
|
+
<ref name="localityStack"/>
|
978
|
+
</zeroOrMore>
|
979
|
+
</choice>
|
928
980
|
</element>
|
929
981
|
</define>
|
930
982
|
<define name="series">
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<boilerplate>
|
2
2
|
<copyright-statement>
|
3
3
|
<clause>
|
4
|
-
|
4
|
+
<p id="boilerplate-year">© <span class="std_publisher">{{ agency }}</span> <span class="std_docNumber">{{ docyear }}</span></p>
|
5
5
|
|
6
6
|
<p id="boilerplate-message">
|
7
7
|
Droits de reproduction réservés. Sauf indication contraire, ou requise dans le cadre de sa mise en œuvre,
|
@@ -1,9 +1,7 @@
|
|
1
1
|
<boilerplate>
|
2
2
|
<copyright-statement>
|
3
3
|
<clause>
|
4
|
-
|
5
|
-
© {{ agency }} {{ docyear }}
|
6
|
-
</p>
|
4
|
+
<p id="boilerplate-year">© <span class="std_publisher">{{ agency }}</span> <span class="std_docNumber">{{ docyear }}</span></p>
|
7
5
|
|
8
6
|
<p id="boilerplate-message">
|
9
7
|
Все права защищены. Если иначе не определено или не требуется в контексте его реализации, никакая часть этой публикации не может быть воспроизведена или использована иначе в любой форме или каким-либо образом, электронным или механическим, включая фотокопирование, или публикацию в Интернете или интранете, без предварительного письменного разрешения. Разрешение может быть запрошено ISO по адресу, указанному ниже, или у органа — члена ISO страны запрашивающего.
|
@@ -1,9 +1,7 @@
|
|
1
1
|
<boilerplate>
|
2
2
|
<copyright-statement>
|
3
3
|
<clause>
|
4
|
-
|
5
|
-
© {{ agency }} {{ docyear }}
|
6
|
-
</p>
|
4
|
+
<p id="boilerplate-year">© <span class="std_publisher">{{ agency }}</span> <span class="std_docNumber">{{ docyear }}</span></p>
|
7
5
|
|
8
6
|
<p id="boilerplate-message">
|
9
7
|
All rights
|
@@ -40,7 +40,8 @@ module Metanorma
|
|
40
40
|
xmldoc.xpath("//bibdata/contributor[role/@type = 'publisher']"\
|
41
41
|
"/organization").each_with_object([]) do |x, prefix|
|
42
42
|
x1 = x.at("abbreviation")&.text || x.at("name")&.text
|
43
|
-
(x1 == "ISO" and prefix.unshift("ISO")) or prefix << x1
|
43
|
+
#(x1 == "ISO" and prefix.unshift("ISO")) or prefix << x1
|
44
|
+
prefix << x1
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
@@ -51,10 +52,10 @@ module Metanorma
|
|
51
52
|
id.content = id_prefix(prefix, id)
|
52
53
|
id = xmldoc.at("//bibdata/ext/structuredidentifier/project-number") and
|
53
54
|
id.content = id_prefix(prefix, id)
|
54
|
-
|
55
|
-
id
|
56
|
-
|
57
|
-
|
55
|
+
%w(iso-with-lang iso-reference iso-undated).each do |t|
|
56
|
+
id = xmldoc.at("//bibdata/docidentifier[@type = '#{t}']") and
|
57
|
+
id.content = id_prefix(prefix, id)
|
58
|
+
end
|
58
59
|
end
|
59
60
|
|
60
61
|
def format_ref(ref, type)
|
@@ -140,7 +141,7 @@ module Metanorma
|
|
140
141
|
xmldoc.xpath("//bibitem/note[@type = 'Unpublished-Status']").each do |n|
|
141
142
|
e = xmldoc.at("//eref[@bibitemid = '#{n.parent['id']}']") or next
|
142
143
|
fn = n.children.to_xml
|
143
|
-
n
|
144
|
+
n.elements&.first&.name == "p" or fn = "<p>#{fn}</p>"
|
144
145
|
e.next = "<fn>#{fn}</fn>"
|
145
146
|
end
|
146
147
|
end
|
@@ -73,13 +73,19 @@ module Metanorma
|
|
73
73
|
(!@amd && node.attr("docnumber")) || (@amd && node.attr("updates")) or
|
74
74
|
return
|
75
75
|
|
76
|
-
dn = iso_id1(node)
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
76
|
+
dn = id_stage_prefix(iso_id1(node), node)
|
77
|
+
dns = [id_year(dn, node, mode: :default),
|
78
|
+
id_year(dn, node, mode: :force),
|
79
|
+
id_year(dn, node, mode: :strip)]
|
80
|
+
iso_id_out(node, xml, dns)
|
81
|
+
end
|
82
|
+
|
83
|
+
def iso_id_out(node, xml, dns)
|
84
|
+
xml.docidentifier dns[0], **attr_code(type: "ISO")
|
85
|
+
xml.docidentifier dns[2], **attr_code(type: "iso-undated")
|
86
|
+
xml.docidentifier(id_langsuffix(dns[0], node),
|
81
87
|
**attr_code(type: "iso-with-lang"))
|
82
|
-
xml.docidentifier(id_langsuffix(
|
88
|
+
xml.docidentifier(id_langsuffix(dns[1], node),
|
83
89
|
**attr_code(type: "iso-reference"))
|
84
90
|
end
|
85
91
|
|
@@ -160,14 +166,14 @@ module Metanorma
|
|
160
166
|
def cover_stage_abbr(node)
|
161
167
|
stage = get_stage(node)
|
162
168
|
abbr = id_stage_abbr(get_stage(node), get_substage(node), node, true)
|
163
|
-
typeabbr = get_typeabbr(node, true)
|
169
|
+
typeabbr = get_typeabbr(node, amd: true)
|
164
170
|
if stage.to_i > 50 || (stage.to_i == 60 && get_substage(node).to_i < 60)
|
165
171
|
typeabbr = ""
|
166
172
|
end
|
167
173
|
"#{abbr}#{typeabbr}".strip
|
168
174
|
end
|
169
175
|
|
170
|
-
def id_stage_prefix(docnum, node
|
176
|
+
def id_stage_prefix(docnum, node)
|
171
177
|
stage = get_stage(node)
|
172
178
|
typeabbr = get_typeabbr(node)
|
173
179
|
if stage && (stage.to_i < 60)
|
@@ -175,11 +181,22 @@ module Metanorma
|
|
175
181
|
elsif typeabbr == "DIR " then docnum = "#{typeabbr}#{docnum}"
|
176
182
|
elsif typeabbr && !@amd then docnum = "/#{typeabbr}#{docnum}"
|
177
183
|
end
|
178
|
-
(force_year || !(stage && (stage.to_i < 60))) and
|
179
|
-
docnum = id_add_year(docnum, node)
|
180
184
|
docnum
|
181
185
|
end
|
182
186
|
|
187
|
+
def id_year(docnum, node, mode: :default)
|
188
|
+
case mode
|
189
|
+
when :strip then docnum.sub(/:(19|20)\d\d(?!\d)/, "")
|
190
|
+
when :force then id_add_year(docnum, node)
|
191
|
+
else
|
192
|
+
stage = get_stage(node)
|
193
|
+
if stage && (stage.to_i < 60)
|
194
|
+
docnum
|
195
|
+
else id_add_year(docnum, node)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
183
200
|
def unpub_stage_prefix(docnum, stage, typeabbr, node)
|
184
201
|
abbr = id_stage_abbr(stage, get_substage(node), node)
|
185
202
|
%w(40 50).include?(stage) && i = node.attr("iteration") and
|
@@ -213,7 +230,7 @@ module Metanorma
|
|
213
230
|
ret
|
214
231
|
end
|
215
232
|
|
216
|
-
def get_typeabbr(node, amd
|
233
|
+
def get_typeabbr(node, amd: false)
|
217
234
|
case doctype(node)
|
218
235
|
when "directive" then "DIR "
|
219
236
|
when "technical-report" then "TR "
|