metanorma-iso 1.7.4 → 1.8.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/.github/workflows/rake.yml +3 -13
- data/.hound.yml +3 -1
- data/.rubocop.yml +3 -7
- data/lib/asciidoctor/iso/base.rb +14 -11
- data/lib/asciidoctor/iso/biblio.rng +1 -0
- data/lib/asciidoctor/iso/cleanup.rb +40 -24
- data/lib/asciidoctor/iso/front.rb +28 -16
- data/lib/asciidoctor/iso/front_id.rb +66 -50
- data/lib/asciidoctor/iso/isodoc.rng +321 -4
- data/lib/asciidoctor/iso/isostandard-amd.rng +3 -0
- data/lib/asciidoctor/iso/isostandard.rng +12 -0
- data/lib/asciidoctor/iso/section.rb +2 -1
- data/lib/asciidoctor/iso/validate.rb +22 -110
- data/lib/asciidoctor/iso/validate_image.rb +97 -0
- data/lib/asciidoctor/iso/validate_requirements.rb +26 -20
- data/lib/asciidoctor/iso/validate_section.rb +55 -29
- data/lib/asciidoctor/iso/validate_style.rb +36 -24
- data/lib/asciidoctor/iso/validate_title.rb +2 -4
- data/lib/isodoc/iso/base_convert.rb +8 -2
- data/lib/isodoc/iso/html/style-human.css +7 -0
- data/lib/isodoc/iso/html/style-iso.css +7 -0
- data/lib/isodoc/iso/html_convert.rb +0 -1
- data/lib/isodoc/iso/iso.amendment.xsl +680 -198
- data/lib/isodoc/iso/iso.international-standard.xsl +680 -198
- data/lib/isodoc/iso/metadata.rb +1 -0
- data/lib/isodoc/iso/presentation_xml_convert.rb +44 -33
- data/lib/isodoc/iso/sts_convert.rb +10 -13
- data/lib/isodoc/iso/word_convert.rb +0 -1
- data/lib/isodoc/iso/xref.rb +52 -34
- data/lib/metanorma/iso/processor.rb +1 -0
- data/lib/metanorma/iso/version.rb +1 -1
- data/metanorma-iso.gemspec +7 -7
- data/spec/asciidoctor/base_spec.rb +426 -305
- data/spec/asciidoctor/blocks_spec.rb +96 -34
- data/spec/asciidoctor/cleanup_spec.rb +383 -25
- data/spec/asciidoctor/section_spec.rb +0 -14
- data/spec/asciidoctor/validate_spec.rb +218 -83
- data/spec/isodoc/postproc_spec.rb +481 -438
- data/spec/spec_helper.rb +16 -15
- metadata +46 -46
- data/lib/isodoc/iso/html/scripts.html +0 -178
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40c9fc0bf08ed5cca2885426c54c0b1970511fbdd14a7e982197bb57f95fc55b
|
4
|
+
data.tar.gz: 4695506d2644d2b01090cd4bfa7cd123672dd99de111a6c09f50fea1c84ed3c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b8317d64f94cee315afeb98045ff026c0b5df38ea7c141c4fa1d839d758dce919382ff5ae72c76893d296b74d69bae965a50096b7fdfb159b0085c122783a19
|
7
|
+
data.tar.gz: 2f6a2bdb6e5b33adbe3970838f4d4c2ca0f97fe8b40cbe66b828e5fec18fc5cd7932cc42a2880c0765d5b6621a26502d3ae0fa38533488e0cfebb2a1e96917ea
|
data/.github/workflows/rake.yml
CHANGED
@@ -4,7 +4,7 @@ name: rake
|
|
4
4
|
|
5
5
|
on:
|
6
6
|
push:
|
7
|
-
branches: [ master, main
|
7
|
+
branches: [ master, main ]
|
8
8
|
tags: [ v* ]
|
9
9
|
pull_request:
|
10
10
|
|
@@ -16,19 +16,9 @@ jobs:
|
|
16
16
|
strategy:
|
17
17
|
fail-fast: false
|
18
18
|
matrix:
|
19
|
-
ruby: [ '2.7', '2.6', '2.5', '2.4' ]
|
19
|
+
ruby: [ '3.0', '2.7', '2.6', '2.5', '2.4' ]
|
20
20
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
21
21
|
experimental: [ false ]
|
22
|
-
include:
|
23
|
-
- ruby: '3.0'
|
24
|
-
os: 'ubuntu-latest'
|
25
|
-
experimental: true
|
26
|
-
- ruby: '3.0'
|
27
|
-
os: 'windows-latest'
|
28
|
-
experimental: true
|
29
|
-
- ruby: '3.0'
|
30
|
-
os: 'macos-latest'
|
31
|
-
experimental: true
|
32
22
|
steps:
|
33
23
|
- uses: actions/checkout@master
|
34
24
|
|
@@ -49,5 +39,5 @@ jobs:
|
|
49
39
|
with:
|
50
40
|
token: ${{ secrets.METANORMA_CI_PAT_TOKEN || secrets.GITHUB_TOKEN }}
|
51
41
|
repository: ${{ github.repository }}
|
52
|
-
event-type:
|
42
|
+
event-type: tests-passed
|
53
43
|
client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}'
|
data/.hound.yml
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,14 +1,10 @@
|
|
1
|
-
#
|
2
|
-
# https://github.com/
|
3
|
-
# All project-specific additions and overrides should be specified in this file.
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
4
3
|
inherit_from:
|
5
4
|
- https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
|
6
5
|
|
7
6
|
# local repo-specific modifications
|
7
|
+
# ...
|
8
8
|
|
9
9
|
AllCops:
|
10
|
-
DisplayCopNames: false
|
11
|
-
StyleGuideCopsOnly: false
|
12
10
|
TargetRubyVersion: 2.4
|
13
|
-
Rails:
|
14
|
-
Enabled: true
|
data/lib/asciidoctor/iso/base.rb
CHANGED
@@ -17,8 +17,8 @@ module Asciidoctor
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def html_converter_alt(node)
|
20
|
-
IsoDoc::Iso::HtmlConvert.new(html_extract_attributes(node)
|
21
|
-
merge(alt: true))
|
20
|
+
IsoDoc::Iso::HtmlConvert.new(html_extract_attributes(node)
|
21
|
+
.merge(alt: true))
|
22
22
|
end
|
23
23
|
|
24
24
|
def doc_converter(node)
|
@@ -27,11 +27,13 @@ module Asciidoctor
|
|
27
27
|
|
28
28
|
def pdf_converter(node)
|
29
29
|
return nil if node.attr("no-pdf")
|
30
|
+
|
30
31
|
IsoDoc::Iso::PdfConvert.new(doc_extract_attributes(node))
|
31
32
|
end
|
32
33
|
|
33
34
|
def sts_converter(node)
|
34
35
|
return nil if node.attr("no-pdf")
|
36
|
+
|
35
37
|
IsoDoc::Iso::StsConvert.new(html_extract_attributes(node))
|
36
38
|
end
|
37
39
|
|
@@ -42,25 +44,26 @@ module Asciidoctor
|
|
42
44
|
def init(node)
|
43
45
|
super
|
44
46
|
@amd = %w(amendment technical-corrigendum).include? doctype(node)
|
47
|
+
@vocab = node.attr("docsubtype") == "vocabulary"
|
45
48
|
end
|
46
49
|
|
47
50
|
def ol_attrs(node)
|
48
|
-
attr_code(keep_attrs(node)
|
49
|
-
merge(id: ::Metanorma::Utils::anchor_or_uuid(node)))
|
51
|
+
attr_code(keep_attrs(node)
|
52
|
+
.merge(id: ::Metanorma::Utils::anchor_or_uuid(node)))
|
50
53
|
end
|
51
54
|
|
52
55
|
def outputs(node, ret)
|
53
|
-
File.open(@filename
|
54
|
-
presentation_xml_converter(node).convert(@filename
|
55
|
-
html_converter_alt(node).convert(@filename
|
56
|
+
File.open("#{@filename}.xml", "w:UTF-8") { |f| f.write(ret) }
|
57
|
+
presentation_xml_converter(node).convert("#{@filename}.xml")
|
58
|
+
html_converter_alt(node).convert("#{@filename}.presentation.xml",
|
56
59
|
nil, false, "#{@filename}_alt.html")
|
57
|
-
html_converter(node).convert(@filename
|
60
|
+
html_converter(node).convert("#{@filename}.presentation.xml",
|
58
61
|
nil, false, "#{@filename}.html")
|
59
|
-
doc_converter(node).convert(@filename
|
62
|
+
doc_converter(node).convert("#{@filename}.presentation.xml",
|
60
63
|
nil, false, "#{@filename}.doc")
|
61
|
-
pdf_converter(node)&.convert(@filename
|
64
|
+
pdf_converter(node)&.convert("#{@filename}.presentation.xml",
|
62
65
|
nil, false, "#{@filename}.pdf")
|
63
|
-
#sts_converter(node)&.convert(@filename + ".xml")
|
66
|
+
# sts_converter(node)&.convert(@filename + ".xml")
|
64
67
|
end
|
65
68
|
end
|
66
69
|
end
|
@@ -22,20 +22,19 @@ module Asciidoctor
|
|
22
22
|
def other_footnote_renumber(xmldoc)
|
23
23
|
seen = {}
|
24
24
|
i = 0
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
xmldoc.xpath(POST_NORMREF_FOOTNOTES).each do |fn|
|
32
|
-
i, seen = other_footnote_renumber1(fn, i, seen)
|
25
|
+
[PRE_NORMREF_FOOTNOTES, NORMREF_FOOTNOTES,
|
26
|
+
POST_NORMREF_FOOTNOTES].each do |xpath|
|
27
|
+
xmldoc.xpath(xpath).each do |fn|
|
28
|
+
i, seen = other_footnote_renumber1(fn, i, seen)
|
29
|
+
end
|
33
30
|
end
|
34
31
|
end
|
35
32
|
|
36
33
|
def id_prefix(prefix, id)
|
37
|
-
|
38
|
-
|
34
|
+
# we're just inheriting the prefixes from parent doc
|
35
|
+
return id.text if @amd
|
36
|
+
|
37
|
+
prefix.join("/") + (id.text.match?(%{^/}) ? "" : " ") + id.text
|
39
38
|
end
|
40
39
|
|
41
40
|
def get_id_prefix(xmldoc)
|
@@ -66,8 +65,12 @@ module Asciidoctor
|
|
66
65
|
super
|
67
66
|
end
|
68
67
|
|
69
|
-
TERM_CLAUSE = "//sections//terms"
|
68
|
+
TERM_CLAUSE = "//sections//terms | "\
|
69
|
+
"//sections//clause[descendant::terms][not(descendant::definitions)]"
|
70
|
+
.freeze
|
71
|
+
|
70
72
|
PUBLISHER = "./contributor[role/@type = 'publisher']/organization".freeze
|
73
|
+
|
71
74
|
OTHERIDS = "@type = 'DOI' or @type = 'metanorma' or @type = 'ISSN' or "\
|
72
75
|
"@type = 'ISBN'".freeze
|
73
76
|
|
@@ -79,6 +82,7 @@ module Asciidoctor
|
|
79
82
|
return 2 if bib.at("#{PUBLISHER}[name = 'International "\
|
80
83
|
"Electrotechnical Commission']")
|
81
84
|
return 3 if bib.at("./docidentifier[@type][not(#{OTHERIDS})]")
|
85
|
+
|
82
86
|
4
|
83
87
|
end
|
84
88
|
|
@@ -101,25 +105,26 @@ module Asciidoctor
|
|
101
105
|
num = bib&.at("./docnumber")&.text
|
102
106
|
id = bib&.at("./docidentifier[not(#{OTHERIDS})]")
|
103
107
|
metaid = bib&.at("./docidentifier[@type = 'metanorma']")&.text
|
104
|
-
abbrid = metaid unless /^\[\d+\]$/.match(metaid)
|
108
|
+
abbrid = metaid unless /^\[\d+\]$/.match?(metaid)
|
105
109
|
/\d-(?<partid>\d+)/ =~ id&.text
|
106
|
-
type = id[
|
110
|
+
type = id["type"] if id
|
107
111
|
title = bib&.at("./title[@type = 'main']")&.text ||
|
108
112
|
bib&.at("./title")&.text || bib&.at("./formattedref")&.text
|
109
113
|
"#{pubclass} :: #{type} :: "\
|
110
|
-
"#{num.nil? ? abbrid : sprintf(
|
114
|
+
"#{num.nil? ? abbrid : sprintf('%09d', num.to_i)} :: "\
|
111
115
|
"#{partid} :: #{id&.text} :: #{title}"
|
112
116
|
end
|
113
117
|
|
114
|
-
def sections_cleanup(
|
118
|
+
def sections_cleanup(xml)
|
115
119
|
super
|
116
120
|
return unless @amd
|
117
|
-
|
118
|
-
|
121
|
+
|
122
|
+
xml.xpath("//*[@inline-header]").each do |h|
|
123
|
+
h.delete("inline-header")
|
119
124
|
end
|
120
125
|
end
|
121
126
|
|
122
|
-
def boilerplate_file(
|
127
|
+
def boilerplate_file(_xmldoc)
|
123
128
|
file = @lang == "fr" ? "boilerplate-fr.xml" : "boilerplate.xml"
|
124
129
|
File.join(@libdir, file)
|
125
130
|
end
|
@@ -146,16 +151,27 @@ module Asciidoctor
|
|
146
151
|
end
|
147
152
|
|
148
153
|
def unpublished_note(xmldoc)
|
149
|
-
xmldoc.xpath("//bibitem[not(note[@type = 'Unpublished-Status'])]")
|
154
|
+
xmldoc.xpath("//bibitem[not(note[@type = 'Unpublished-Status'])]")
|
155
|
+
.each do |b|
|
150
156
|
next if pub_class(b) > 2
|
151
|
-
next unless s = b.at("./status/stage")
|
157
|
+
next unless (s = b.at("./status/stage")) && (s.text.to_i < 60)
|
158
|
+
|
152
159
|
id = b.at("docidentifier").text
|
153
|
-
b.at("./language | ./script | ./abstract | ./status")
|
154
|
-
|
155
|
-
|
156
|
-
NOTE
|
160
|
+
b.at("./language | ./script | ./abstract | ./status")
|
161
|
+
.previous = %(<note type="Unpublished-Status">
|
162
|
+
<p>#{@i18n.under_preparation.sub(/%/, id)}</p></note>)
|
157
163
|
end
|
158
164
|
end
|
165
|
+
|
166
|
+
def termdef_boilerplate_insert(xmldoc, isodoc, once = false)
|
167
|
+
once = true
|
168
|
+
super
|
169
|
+
end
|
170
|
+
|
171
|
+
def term_defs_boilerplate_cont(src, term, isodoc)
|
172
|
+
@vocab and src.empty? and return
|
173
|
+
super
|
174
|
+
end
|
159
175
|
end
|
160
176
|
end
|
161
177
|
end
|
@@ -33,7 +33,9 @@ module Asciidoctor
|
|
33
33
|
csv_split(publishers).each do |p|
|
34
34
|
xml.contributor do |c|
|
35
35
|
c.role **{ type: "author" }
|
36
|
-
c.organization
|
36
|
+
c.organization do |a|
|
37
|
+
organization(a, p, false, node, !node.attr("publisher"))
|
38
|
+
end
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
@@ -43,20 +45,25 @@ module Asciidoctor
|
|
43
45
|
csv_split(publishers).each do |p|
|
44
46
|
xml.contributor do |c|
|
45
47
|
c.role **{ type: "publisher" }
|
46
|
-
c.organization
|
48
|
+
c.organization do |a|
|
49
|
+
organization(a, p, true, node, !node.attr("publisher"))
|
50
|
+
end
|
47
51
|
end
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
51
55
|
def metadata_copyright(node, xml)
|
52
|
-
publishers = node.attr("copyright-holder") || node.attr("publisher") ||
|
56
|
+
publishers = node.attr("copyright-holder") || node.attr("publisher") ||
|
57
|
+
"ISO"
|
53
58
|
csv_split(publishers).each do |p|
|
54
59
|
xml.copyright do |c|
|
55
60
|
c.from (node.attr("copyright-year") || Date.today.year)
|
56
61
|
c.owner do |owner|
|
57
62
|
owner.organization do |o|
|
58
|
-
organization(
|
59
|
-
|
63
|
+
organization(
|
64
|
+
o, p, true, node,
|
65
|
+
!(node.attr("copyright-holder") || node.attr("publisher"))
|
66
|
+
)
|
60
67
|
end
|
61
68
|
end
|
62
69
|
end
|
@@ -82,34 +89,39 @@ module Asciidoctor
|
|
82
89
|
end
|
83
90
|
end
|
84
91
|
|
85
|
-
def title_intro(node,
|
92
|
+
def title_intro(node, xml, lang, at)
|
86
93
|
return unless node.attr("title-intro-#{lang}")
|
87
|
-
|
94
|
+
|
95
|
+
xml.title(**attr_code(at.merge(type: "title-intro"))) do |t1|
|
88
96
|
t1 << Metanorma::Utils::asciidoc_sub(node.attr("title-intro-#{lang}"))
|
89
97
|
end
|
90
98
|
end
|
91
99
|
|
92
|
-
def title_main(node,
|
93
|
-
|
100
|
+
def title_main(node, xml, lang, at)
|
101
|
+
xml.title **attr_code(at.merge(type: "title-main")) do |t1|
|
94
102
|
t1 << Metanorma::Utils::asciidoc_sub(node.attr("title-main-#{lang}"))
|
95
103
|
end
|
96
104
|
end
|
97
105
|
|
98
|
-
def title_part(node,
|
106
|
+
def title_part(node, xml, lang, at)
|
99
107
|
return unless node.attr("title-part-#{lang}")
|
100
|
-
|
108
|
+
|
109
|
+
xml.title(**attr_code(at.merge(type: "title-part"))) do |t1|
|
101
110
|
t1 << Metanorma::Utils::asciidoc_sub(node.attr("title-part-#{lang}"))
|
102
111
|
end
|
103
112
|
end
|
104
113
|
|
105
|
-
def title_amd(node,
|
114
|
+
def title_amd(node, xml, lang, at)
|
106
115
|
return unless node.attr("title-amendment-#{lang}")
|
107
|
-
|
108
|
-
|
116
|
+
|
117
|
+
xml.title(**attr_code(at.merge(type: "title-amd"))) do |t1|
|
118
|
+
t1 << Metanorma::Utils::asciidoc_sub(
|
119
|
+
node.attr("title-amendment-#{lang}")
|
120
|
+
)
|
109
121
|
end
|
110
122
|
end
|
111
123
|
|
112
|
-
def title_full(node,
|
124
|
+
def title_full(node, xml, lang, at)
|
113
125
|
title = node.attr("title-main-#{lang}")
|
114
126
|
intro = node.attr("title-intro-#{lang}")
|
115
127
|
part = node.attr("title-part-#{lang}")
|
@@ -117,7 +129,7 @@ module Asciidoctor
|
|
117
129
|
title = "#{intro} -- #{title}" if intro
|
118
130
|
title = "#{title} -- #{part}" if part
|
119
131
|
title = "#{title} -- #{amd}" if amd && @amd
|
120
|
-
|
132
|
+
xml.title **attr_code(at.merge(type: "main")) do |t1|
|
121
133
|
t1 << Metanorma::Utils::asciidoc_sub(title)
|
122
134
|
end
|
123
135
|
end
|
@@ -35,22 +35,26 @@ module Asciidoctor
|
|
35
35
|
|
36
36
|
def stage_abbr(stage, substage, doctype)
|
37
37
|
return nil if stage.to_i > 60
|
38
|
+
|
38
39
|
ret = STAGE_ABBRS[stage.to_sym]
|
39
40
|
ret = "PRF" if stage == "60" && substage == "00"
|
40
41
|
ret = "AWI" if stage == "10" && substage == "99"
|
41
|
-
if %w(amendment technical-corrigendum technical-report
|
42
|
-
|
42
|
+
if %w(amendment technical-corrigendum technical-report
|
43
|
+
technical-specification).include?(doctype)
|
43
44
|
ret = "D" if stage == "40" && doctype == "amendment"
|
44
|
-
ret = "FD" if stage == "50" && %w(amendment technical-corrigendum)
|
45
|
+
ret = "FD" if stage == "50" && %w(amendment technical-corrigendum)
|
46
|
+
.include?(doctype)
|
45
47
|
end
|
46
48
|
ret
|
47
49
|
end
|
48
50
|
|
49
51
|
def stage_name(stage, substage, doctype, iteration = nil)
|
50
52
|
return "Proof" if stage == "60" && substage == "00"
|
53
|
+
|
51
54
|
ret = STAGE_NAMES[stage.to_sym]
|
52
55
|
if iteration && %w(20 30).include?(stage)
|
53
|
-
prefix = iteration.to_i.localize(@lang.to_sym)
|
56
|
+
prefix = iteration.to_i.localize(@lang.to_sym)
|
57
|
+
.to_rbnf_s("SpelloutRules", "spellout-ordinal")
|
54
58
|
ret = "#{prefix.capitalize} #{ret.downcase}"
|
55
59
|
end
|
56
60
|
ret
|
@@ -65,37 +69,39 @@ module Asciidoctor
|
|
65
69
|
end
|
66
70
|
|
67
71
|
def iso_id(node, xml)
|
68
|
-
|
72
|
+
!@amd && node.attr("docnumber") || @amd && node.attr("updates") or
|
73
|
+
return
|
74
|
+
|
69
75
|
dn = iso_id1(node)
|
70
76
|
dn1 = id_stage_prefix(dn, node, false)
|
71
77
|
dn2 = id_stage_prefix(dn, node, true)
|
72
78
|
xml.docidentifier dn1, **attr_code(type: "ISO")
|
73
|
-
xml.docidentifier
|
74
|
-
|
79
|
+
xml.docidentifier(id_langsuffix(dn1, node),
|
80
|
+
**attr_code(type: "iso-with-lang"))
|
81
|
+
xml.docidentifier(id_langsuffix(dn2, node),
|
82
|
+
**attr_code(type: "iso-reference"))
|
75
83
|
end
|
76
84
|
|
77
85
|
def iso_id1(node)
|
78
86
|
if @amd
|
79
87
|
dn = node.attr("updates")
|
80
|
-
|
88
|
+
add_amd_parts(dn, node)
|
81
89
|
else
|
82
90
|
part, subpart = node&.attr("partnumber")&.split(/-/)
|
83
|
-
|
91
|
+
add_id_parts(node.attr("docnumber"), part, subpart)
|
84
92
|
end
|
85
93
|
end
|
86
94
|
|
87
|
-
def add_amd_parts(
|
88
|
-
a = node.attr("amendment-number")
|
89
|
-
c = node.attr("corrigendum-number")
|
95
|
+
def add_amd_parts(docnum, node)
|
90
96
|
case doctype(node)
|
91
97
|
when "amendment"
|
92
|
-
"#{
|
98
|
+
"#{docnum}/Amd #{node.attr('amendment-number')}"
|
93
99
|
when "technical-corrigendum"
|
94
|
-
"#{
|
100
|
+
"#{docnum}/Cor.#{node.attr('corrigendum-number')}"
|
95
101
|
end
|
96
102
|
end
|
97
103
|
|
98
|
-
def id_langsuffix(
|
104
|
+
def id_langsuffix(docnum, node)
|
99
105
|
lang = node.attr("language") || "en"
|
100
106
|
suffix = case lang
|
101
107
|
when "en" then "(E)"
|
@@ -103,38 +109,43 @@ module Asciidoctor
|
|
103
109
|
else
|
104
110
|
"(X)"
|
105
111
|
end
|
106
|
-
"#{
|
112
|
+
"#{docnum}#{suffix}"
|
107
113
|
end
|
108
114
|
|
109
115
|
def structured_id(node, xml)
|
110
116
|
return unless node.attr("docnumber")
|
117
|
+
|
111
118
|
part, subpart = node&.attr("partnumber")&.split(/-/)
|
112
119
|
xml.structuredidentifier do |i|
|
113
|
-
i.project_number
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
120
|
+
i.project_number(node.attr("docnumber"), **attr_code(
|
121
|
+
part: part, subpart: subpart,
|
122
|
+
amendment: node.attr("amendment-number"),
|
123
|
+
corrigendum: node.attr("corrigendum-number"),
|
124
|
+
origyr: node.attr("created-date")
|
125
|
+
))
|
118
126
|
end
|
119
127
|
end
|
120
128
|
|
121
|
-
def add_id_parts(
|
122
|
-
|
123
|
-
|
124
|
-
|
129
|
+
def add_id_parts(docnum, part, subpart)
|
130
|
+
docnum += "-#{part}" if part
|
131
|
+
docnum += "-#{subpart}" if subpart
|
132
|
+
docnum
|
125
133
|
end
|
126
134
|
|
127
135
|
def id_stage_abbr(stage, substage, node, bare = false)
|
128
|
-
ret = bare
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
136
|
+
ret = if bare
|
137
|
+
IsoDoc::Iso::Metadata.new("en", "Latn", @i18n)
|
138
|
+
.status_abbrev(stage_abbr(stage, substage, doctype(node)),
|
139
|
+
substage, nil, nil, doctype(node))
|
140
|
+
else
|
141
|
+
IsoDoc::Iso::Metadata.new("en", "Latn", @i18n)
|
142
|
+
.status_abbrev(stage_abbr(stage, substage, doctype(node)),
|
143
|
+
substage, node.attr("iteration"),
|
144
|
+
node.attr("draft"), doctype(node))
|
145
|
+
end
|
146
|
+
if %w(amendment technical-corrigendum technical-report
|
147
|
+
technical-specification).include?(doctype(node))
|
148
|
+
ret = "#{ret} " unless %w(D FD).include?(ret)
|
138
149
|
end
|
139
150
|
ret
|
140
151
|
end
|
@@ -143,51 +154,56 @@ module Asciidoctor
|
|
143
154
|
stage = get_stage(node)
|
144
155
|
abbr = id_stage_abbr(get_stage(node), get_substage(node), node, true)
|
145
156
|
typeabbr = get_typeabbr(node, true)
|
146
|
-
|
157
|
+
if stage.to_i > 50 || stage.to_i == 60 && get_substage(node).to_i < 60
|
158
|
+
typeabbr = ""
|
159
|
+
end
|
147
160
|
"#{abbr}#{typeabbr}".strip
|
148
161
|
end
|
149
162
|
|
150
|
-
def id_stage_prefix(
|
163
|
+
def id_stage_prefix(docnum, node, force_year)
|
151
164
|
stage = get_stage(node)
|
152
165
|
typeabbr = get_typeabbr(node)
|
153
166
|
if stage && (stage.to_i < 60)
|
154
|
-
|
155
|
-
elsif typeabbr
|
167
|
+
docnum = unpub_stage_prefix(docnum, stage, typeabbr, node)
|
168
|
+
elsif typeabbr == "DIR " then docnum = "#{typeabbr}#{docnum}"
|
169
|
+
elsif typeabbr && !@amd then docnum = "/#{typeabbr}#{docnum}"
|
156
170
|
end
|
157
171
|
(force_year || !(stage && (stage.to_i < 60))) and
|
158
|
-
|
159
|
-
|
172
|
+
docnum = id_add_year(docnum, node)
|
173
|
+
docnum
|
160
174
|
end
|
161
175
|
|
162
|
-
def unpub_stage_prefix(
|
176
|
+
def unpub_stage_prefix(docnum, stage, typeabbr, node)
|
163
177
|
abbr = id_stage_abbr(stage, get_substage(node), node)
|
164
178
|
%w(40 50).include?(stage) && i = node.attr("iteration") and
|
165
179
|
itersuffix = ".#{i}"
|
166
|
-
return
|
167
|
-
return "/#{abbr}#{typeabbr} #{
|
168
|
-
|
180
|
+
return docnum if abbr.nil? || abbr.empty? # prefixes added in cleanup
|
181
|
+
return "/#{abbr}#{typeabbr} #{docnum}#{itersuffix}" unless @amd
|
182
|
+
|
183
|
+
a = docnum.split(%r{/})
|
169
184
|
a[-1] = "#{abbr}#{a[-1]}#{itersuffix}"
|
170
185
|
a.join("/")
|
171
186
|
end
|
172
187
|
|
173
|
-
def id_add_year(
|
188
|
+
def id_add_year(docnum, node)
|
174
189
|
year = node.attr("copyright-year")
|
175
190
|
@amd and year ||= node.attr("updated-date")&.sub(/-.*$/, "")
|
176
|
-
|
177
|
-
|
191
|
+
docnum += ":#{year}" if year
|
192
|
+
docnum
|
178
193
|
end
|
179
194
|
|
180
195
|
def get_stage(node)
|
181
|
-
|
196
|
+
node.attr("status") || node.attr("docstage") || "60"
|
182
197
|
end
|
183
198
|
|
184
199
|
def get_substage(node)
|
185
200
|
stage = get_stage(node)
|
186
|
-
node.attr("docsubstage") || (
|
201
|
+
node.attr("docsubstage") || (stage == "60" ? "60" : "00")
|
187
202
|
end
|
188
203
|
|
189
204
|
def get_typeabbr(node, amd = false)
|
190
205
|
case doctype(node)
|
206
|
+
when "directive" then "DIR "
|
191
207
|
when "technical-report" then "TR "
|
192
208
|
when "technical-specification" then "TS "
|
193
209
|
when "amendment" then (amd ? "Amd " : "")
|