metanorma-standoc 2.5.2 → 2.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/metanorma/standoc/cleanup_boilerplate.rb +5 -5
- data/lib/metanorma/standoc/cleanup_maths.rb +1 -1
- data/lib/metanorma/standoc/cleanup_ref.rb +6 -9
- data/lib/metanorma/standoc/inline.rb +6 -14
- data/lib/metanorma/standoc/isodoc.rng +4 -1
- data/lib/metanorma/standoc/macros_embed.rb +78 -22
- data/lib/metanorma/standoc/ref.rb +11 -14
- data/lib/metanorma/standoc/section.rb +1 -1
- data/lib/metanorma/standoc/term_lookup_cleanup.rb +31 -29
- data/lib/metanorma/standoc/terms.rb +1 -1
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e909b2a76be142e305b420f79f8d6da87ab4b6106b391c666bb9f61c3b65a3e
|
4
|
+
data.tar.gz: 300b7c8578c9da40fa9241b714041c0cf320b7351a73f536b4df26bd3861f9f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a93b92c8da197cb4adccb1111b6da0d45199f707c62574a9000f7bbc0b7a01c81105fa5db81e85c3db91b26899efd60a59aa8e31e0d7b6357726a2b11eabf1d
|
7
|
+
data.tar.gz: 37d9cd30e6ecf8bc5e6e98bf27c23843554a538e9691511e2020979d9652ed2e1a242d754a2cafadac45c737ac9cda3fa94fabae805c827dd026ea0490a969b0
|
@@ -3,14 +3,14 @@ module Metanorma
|
|
3
3
|
module Cleanup
|
4
4
|
def external_terms_boilerplate(sources)
|
5
5
|
@i18n.l10n(
|
6
|
-
@i18n.external_terms_boilerplate.gsub(
|
6
|
+
@i18n.external_terms_boilerplate.gsub("%", sources || "???"),
|
7
7
|
@lang, @script, @locale
|
8
8
|
)
|
9
9
|
end
|
10
10
|
|
11
11
|
def internal_external_terms_boilerplate(sources)
|
12
12
|
@i18n.l10n(
|
13
|
-
@i18n.internal_external_terms_boilerplate.gsub(
|
13
|
+
@i18n.internal_external_terms_boilerplate.gsub("%", sources || "??"),
|
14
14
|
@lang, @script
|
15
15
|
)
|
16
16
|
end
|
@@ -107,8 +107,8 @@ module Metanorma
|
|
107
107
|
|
108
108
|
def initial_boilerplate(xml, isodoc)
|
109
109
|
xml.at("//boilerplate") and return
|
110
|
-
preface = xml.at("//preface
|
111
|
-
|
110
|
+
preface = xml.at("//preface | //sections | //annex | //references") or
|
111
|
+
return
|
112
112
|
b = boilerplate(xml, isodoc) or return
|
113
113
|
preface.previous = b
|
114
114
|
end
|
@@ -151,7 +151,7 @@ module Metanorma
|
|
151
151
|
ret
|
152
152
|
end
|
153
153
|
|
154
|
-
# remove Metanorma namespace, so generated doc containing boilerplate
|
154
|
+
# remove Metanorma namespace, so generated doc containing boilerplate
|
155
155
|
# can be queried consistently
|
156
156
|
# _\d+ anchor is assigned to titleless clauses, will clash with main doc
|
157
157
|
# instances of same
|
@@ -106,7 +106,7 @@ module Metanorma
|
|
106
106
|
|
107
107
|
def add_misc_container(xmldoc)
|
108
108
|
unless ins = xmldoc.at("//metanorma-extension")
|
109
|
-
a = xmldoc.
|
109
|
+
a = xmldoc.xpath("//termdocsource")&.last || xmldoc.at("//bibdata")
|
110
110
|
a.next = "<metanorma-extension/>"
|
111
111
|
ins = xmldoc.at("//metanorma-extension")
|
112
112
|
end
|
@@ -170,17 +170,14 @@ module Metanorma
|
|
170
170
|
ref
|
171
171
|
end
|
172
172
|
|
173
|
-
ISO_PUBLISHER_XPATH =
|
174
|
-
"./contributor[role/@type = 'publisher']/" \
|
175
|
-
"organization[abbreviation = 'ISO' or abbreviation = 'IEC' or " \
|
176
|
-
"name = 'International Organization for Standardization' or " \
|
177
|
-
"name = 'International Electrotechnical Commission']".freeze
|
178
|
-
|
179
173
|
def reference_names(xmldoc)
|
180
174
|
xmldoc.xpath("//bibitem[not(ancestor::bibitem)]").each do |ref|
|
181
|
-
docid = select_docid(ref)
|
182
|
-
|
183
|
-
|
175
|
+
@anchors[ref["id"]] = if docid = select_docid(ref)
|
176
|
+
reference = format_ref(docid.children.to_xml,
|
177
|
+
docid["type"])
|
178
|
+
{ xref: reference, id: idtype2cit(ref) }
|
179
|
+
else { xref: ref["id"], id: ref["id"] }
|
180
|
+
end
|
184
181
|
end
|
185
182
|
end
|
186
183
|
|
@@ -54,13 +54,12 @@ module Metanorma
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def inline_anchor_xref_attrs1(match, target, text)
|
57
|
-
{ target: target,
|
57
|
+
{ target: target, hidden: match[:hidden],
|
58
58
|
type: match[:fn].nil? ? "inline" : "footnote",
|
59
59
|
case: match[:case]&.sub(/%$/, ""),
|
60
60
|
style: match[:style]&.sub(/^style=/, "")&.sub(/%$/, "") || @xrefstyle,
|
61
61
|
droploc: match[:drop].nil? && match[:drop2].nil? ? nil : true,
|
62
|
-
text: inline_anchor_xref_text(match, text)
|
63
|
-
hidden: match[:hidden] }
|
62
|
+
text: inline_anchor_xref_text(match, text) }
|
64
63
|
end
|
65
64
|
|
66
65
|
def inline_anchor_xref_match(text)
|
@@ -71,9 +70,7 @@ module Metanorma
|
|
71
70
|
end
|
72
71
|
|
73
72
|
def inline_anchor_xref_text(match, text)
|
74
|
-
if %i[case fn drop drop2 hidden style].any?
|
75
|
-
!match[x].nil?
|
76
|
-
end
|
73
|
+
if %i[case fn drop drop2 hidden style].any? { |x| !match[x].nil? }
|
77
74
|
match[:text]
|
78
75
|
else text
|
79
76
|
end
|
@@ -199,12 +196,8 @@ module Metanorma
|
|
199
196
|
term_designation(xml, node, "admitted", node.text)
|
200
197
|
when "deprecated"
|
201
198
|
term_designation(xml, node, "deprecates", node.text)
|
202
|
-
when "domain"
|
203
|
-
|
204
|
-
when "strike" then xml.strike { |s| s << node.text }
|
205
|
-
when "underline" then xml.underline { |s| s << node.text }
|
206
|
-
when "smallcap" then xml.smallcap { |s| s << node.text }
|
207
|
-
when "keyword" then xml.keyword { |s| s << node.text }
|
199
|
+
when "domain", "strike", "underline", "smallcap", "keyword"
|
200
|
+
xml.send(node.role) { |s| s << node.text }
|
208
201
|
when /^css /
|
209
202
|
xml.span style: node.role.sub(/^css /, "") do |s|
|
210
203
|
s << node.text
|
@@ -234,9 +227,8 @@ module Metanorma
|
|
234
227
|
end
|
235
228
|
|
236
229
|
def image_attributes1(node, uri, type)
|
237
|
-
attr_code(src: uri,
|
230
|
+
attr_code(src: uri, mimetype: type,
|
238
231
|
id: Metanorma::Utils::anchor_or_uuid,
|
239
|
-
mimetype: type,
|
240
232
|
height: node.attr("height") || "auto",
|
241
233
|
width: node.attr("width") || "auto",
|
242
234
|
filename: node.attr("filename"),
|
@@ -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"/>
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "pathname"
|
2
|
+
|
1
3
|
module Metanorma
|
2
4
|
module Standoc
|
3
5
|
class EmbedIncludeProcessor < Asciidoctor::Extensions::Preprocessor
|
@@ -13,19 +15,58 @@ module Metanorma
|
|
13
15
|
|
14
16
|
def embed_acc(doc, reader)
|
15
17
|
{ lines: [], hdr: [], id: [],
|
16
|
-
doc: doc,
|
18
|
+
orig: doc, doc: doc, file: nil, path: nil,
|
19
|
+
reader: reader, prev: nil }
|
17
20
|
end
|
18
21
|
|
19
22
|
# presupposes single embed
|
20
|
-
def return_to_document(doc,
|
21
|
-
doc.attributes["embed_hdr"] =
|
22
|
-
doc.attributes["embed_id"] =
|
23
|
-
|
23
|
+
def return_to_document(doc, embed)
|
24
|
+
doc.attributes["embed_hdr"] = embed[:hdr]
|
25
|
+
doc.attributes["embed_id"] = embed[:id]
|
26
|
+
read_flattened_embeds(flatten_embeds(embed), doc)
|
27
|
+
end
|
28
|
+
|
29
|
+
# lines can contain recursive embed structs, containing the lines to read
|
30
|
+
# and the file they are in; read these into the (new) reader.
|
31
|
+
# This is intended to resolve any file crossreferences, with
|
32
|
+
# file paths resolved relative to current file directory
|
33
|
+
# -- but it won't: https://github.com/metanorma/metanorma-standoc/issues/802
|
34
|
+
def read_flattened_embeds(ret, doc)
|
35
|
+
reader = ::Asciidoctor::PreprocessorReader.new doc
|
36
|
+
b = Pathname.new doc.base_dir
|
37
|
+
ret.reverse.each do |l|
|
38
|
+
if l[:file]
|
39
|
+
new = Pathname.new(l[:path]).relative_path_from(b).to_s
|
40
|
+
reader.push_include l[:lines], new, l[:path]
|
41
|
+
else reader.unshift_lines l[:lines]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
reader
|
45
|
+
end
|
46
|
+
|
47
|
+
# lines can contain recursive embed structs, which are resolved into a
|
48
|
+
# flat listing of included line chunks (top level doc has { file: nil } )
|
49
|
+
def flatten_embeds(emb)
|
50
|
+
acc = []
|
51
|
+
ret = emb[:lines].each_with_object([]) do |l, m|
|
52
|
+
if l.is_a?(Hash)
|
53
|
+
acc, m = update_embeds(acc, m, emb)
|
54
|
+
flatten_embeds(l).each { |x| m << x }
|
55
|
+
else acc << l end
|
56
|
+
end
|
57
|
+
acc, ret = update_embeds(acc, ret, emb)
|
58
|
+
ret
|
59
|
+
end
|
60
|
+
|
61
|
+
def update_embeds(lines, acc, emb)
|
62
|
+
lines.empty? or
|
63
|
+
acc << { file: emb[:file], path: emb[:path], lines: lines }
|
64
|
+
[[], acc]
|
24
65
|
end
|
25
66
|
|
26
67
|
def process_line(line, acc, headings)
|
27
68
|
if /^embed::/.match?(line)
|
28
|
-
e = embed(line, acc
|
69
|
+
e = embed(line, acc, headings)
|
29
70
|
acc = process_embed(acc, e, acc[:prev])
|
30
71
|
else
|
31
72
|
acc[:lines] << line
|
@@ -35,22 +76,31 @@ module Metanorma
|
|
35
76
|
end
|
36
77
|
|
37
78
|
def process_embed(acc, embed, prev)
|
79
|
+
acc, embed = process_embed_anchor(acc, embed, prev)
|
80
|
+
acc[:lines] << embed
|
81
|
+
acc[:hdr] << embed[:hdr]
|
82
|
+
acc[:id] += embed[:id]
|
83
|
+
acc
|
84
|
+
end
|
85
|
+
|
86
|
+
def process_embed_anchor(acc, embed, prev)
|
38
87
|
if /^\[\[.+\]\]/.match?(prev) # anchor
|
39
88
|
acc[:id] << prev.sub(/^\[\[/, "").sub(/\]\]$/, "")
|
40
89
|
i = embed[:lines].index { |x| /^== /.match?(x) } and
|
41
90
|
embed[:lines][i] += " #{prev}" # => bookmark
|
42
91
|
end
|
43
|
-
acc
|
44
|
-
acc[:hdr] << embed[:hdr]
|
45
|
-
acc[:id] += embed[:id]
|
46
|
-
acc
|
92
|
+
[acc, embed]
|
47
93
|
end
|
48
94
|
|
49
|
-
def filename(line,
|
95
|
+
def filename(line, acc)
|
50
96
|
m = /^embed::([^\[]+)\[/.match(line)
|
51
|
-
f = doc.normalize_system_path m[1], reader.dir, nil,
|
52
|
-
|
53
|
-
File.exist?(f)
|
97
|
+
f = acc[:doc].normalize_system_path m[1], acc[:reader].dir, nil,
|
98
|
+
target_name: "include file"
|
99
|
+
unless File.exist?(f)
|
100
|
+
err = "Missing embed file: #{line}"
|
101
|
+
raise err
|
102
|
+
end
|
103
|
+
[m[1], f]
|
54
104
|
end
|
55
105
|
|
56
106
|
def readlines_safe(file)
|
@@ -65,21 +115,27 @@ module Metanorma
|
|
65
115
|
end
|
66
116
|
end
|
67
117
|
|
68
|
-
def embed(line,
|
69
|
-
inc_path = filename(line,
|
118
|
+
def embed(line, acc, headings)
|
119
|
+
fname, inc_path = filename(line, acc)
|
70
120
|
lines = filter_sections(read(inc_path), headings)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
121
|
+
n = Asciidoctor::Document
|
122
|
+
.new [], { safe: :safe, base_dir: File.dirname(inc_path) }
|
123
|
+
r = ::Asciidoctor::PreprocessorReader.new n, lines
|
124
|
+
ret = embed_acc(n, r).merge(strip_header(r.read_lines))
|
125
|
+
.merge(file: fname, path: inc_path, orig: acc[:orig])
|
126
|
+
ret[:hdr] or
|
127
|
+
raise "Embedding an incomplete document with no header: #{ret[:path]}"
|
128
|
+
embed_recurse(ret, n, r, headings)
|
75
129
|
end
|
76
130
|
|
77
131
|
def embed_recurse(ret, doc, reader, headings)
|
78
132
|
ret1 = ret[:lines].each_with_object(embed_acc(doc, reader)) do |line, m|
|
79
133
|
process_line(line, m, headings)
|
80
134
|
end
|
81
|
-
|
82
|
-
|
135
|
+
ret.merge(
|
136
|
+
{ lines: ret1[:lines], id: ret[:id] + ret1[:id],
|
137
|
+
hdr: { text: ret[:hdr].join("\n"), child: ret1[:hdr] } },
|
138
|
+
)
|
83
139
|
end
|
84
140
|
|
85
141
|
def strip_header(lines)
|
@@ -47,8 +47,7 @@ module Metanorma
|
|
47
47
|
def isorefmatches2code(match, _item)
|
48
48
|
code = analyse_ref_code(match[:code])
|
49
49
|
{ code: match[:code], no_year: true, lang: (@lang || :all),
|
50
|
-
note: match[:fn], year: nil, match: match,
|
51
|
-
analyse_code: code,
|
50
|
+
note: match[:fn], year: nil, match: match, analyse_code: code,
|
52
51
|
title: match[:text], usrlbl: match[:usrlbl] || code[:usrlabel] }
|
53
52
|
end
|
54
53
|
|
@@ -79,19 +78,17 @@ module Metanorma
|
|
79
78
|
yr = norm_year(match[:year])
|
80
79
|
hasyr = !yr.nil? && yr != "--"
|
81
80
|
{ code: match[:code], match: match, yr: yr, hasyr: hasyr,
|
82
|
-
year: hasyr ? yr : nil,
|
81
|
+
year: hasyr ? yr : nil, lang: (@lang || :all),
|
83
82
|
all_parts: true, no_year: yr == "--",
|
84
|
-
title: match[:text], usrlbl: match[:usrlbl] || code[:usrlabel]
|
85
|
-
lang: (@lang || :all) }
|
83
|
+
title: match[:text], usrlbl: match[:usrlbl] || code[:usrlabel] }
|
86
84
|
end
|
87
85
|
|
88
86
|
def isorefmatches3out(item, xml)
|
89
87
|
if item[:doc] then use_retrieved_relaton(item, xml)
|
90
|
-
else
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
item[:ref][:hasyr], item[:doc])
|
88
|
+
else isorefmatches3_1(
|
89
|
+
xml, item[:ref][:match], item[:ref][:analyse_code],
|
90
|
+
item[:ref][:yr], item[:ref][:hasyr], item[:doc]
|
91
|
+
)
|
95
92
|
end
|
96
93
|
end
|
97
94
|
|
@@ -126,9 +123,9 @@ module Metanorma
|
|
126
123
|
end
|
127
124
|
|
128
125
|
def refitem_render(xml, match, code)
|
129
|
-
xml.bibitem **attr_code(
|
130
|
-
|
131
|
-
|
126
|
+
xml.bibitem **attr_code(
|
127
|
+
id: match[:anchor], suppress_identifier: code[:dropid], hidden: code[:hidden],
|
128
|
+
) do |t|
|
132
129
|
t.formattedref format: "application/x-isodoc+xml" do |i|
|
133
130
|
i << ref_normalise_no_format(match[:text])
|
134
131
|
end
|
@@ -240,7 +237,7 @@ module Metanorma
|
|
240
237
|
def reference_normalise(refs)
|
241
238
|
refs.each do |r|
|
242
239
|
r[:code] = @c.decode(r[:code])
|
243
|
-
.gsub(
|
240
|
+
.gsub("\u2009\u2014\u2009", " -- ").strip
|
244
241
|
end
|
245
242
|
end
|
246
243
|
|
@@ -8,12 +8,12 @@ module Metanorma
|
|
8
8
|
EXISTING_TERM_REGEXP = /\Aterm-/.freeze
|
9
9
|
EXISTING_SYMBOL_REGEXP = /\Asymbol-/.freeze
|
10
10
|
|
11
|
-
attr_reader :xmldoc, :
|
11
|
+
attr_reader :xmldoc, :lookup, :log
|
12
12
|
|
13
13
|
def initialize(xmldoc, log)
|
14
14
|
@xmldoc = xmldoc
|
15
15
|
@log = log
|
16
|
-
@
|
16
|
+
@lookup = { term: {}, symbol: {}, sec2prim: {} }
|
17
17
|
@idhash = {}
|
18
18
|
@unique_designs = {}
|
19
19
|
@c = HTMLEntities.new
|
@@ -25,7 +25,7 @@ module Metanorma
|
|
25
25
|
def call
|
26
26
|
@idhash = populate_idhash
|
27
27
|
@unique_designs = unique_designators
|
28
|
-
@
|
28
|
+
@lookup = replace_automatic_generated_ids_terms
|
29
29
|
set_termxref_tags_target
|
30
30
|
concept_cleanup
|
31
31
|
related_cleanup
|
@@ -49,9 +49,8 @@ module Metanorma
|
|
49
49
|
def concept_cleanup
|
50
50
|
xmldoc.xpath("//concept").each do |n|
|
51
51
|
refterm = n.at("./refterm") or next
|
52
|
-
lookup =
|
53
|
-
p = @
|
54
|
-
refterm.children = @c.encode(p)
|
52
|
+
lookup = norm_ref_id_text(refterm.text.strip)
|
53
|
+
p = @lookup[:sec2prim][lookup] and refterm.children = @c.encode(p)
|
55
54
|
end
|
56
55
|
end
|
57
56
|
|
@@ -62,10 +61,9 @@ module Metanorma
|
|
62
61
|
def related_cleanup
|
63
62
|
xmldoc.xpath("//related").each do |n|
|
64
63
|
refterm = n.at("./refterm") or next
|
65
|
-
lookup =
|
66
|
-
p = @
|
67
|
-
|
68
|
-
p || @termlookup[:term][lookup] and
|
64
|
+
lookup = norm_ref_id_text(refterm.text.strip)
|
65
|
+
p = @lookup[:sec2prim][lookup] and refterm.children = @c.encode(p)
|
66
|
+
p || @lookup[:term][lookup] and
|
69
67
|
refterm.replace("<preferred><expression>" \
|
70
68
|
"<name>#{refterm.children.to_xml}" \
|
71
69
|
"</name></expression></preferred>")
|
@@ -81,7 +79,7 @@ module Metanorma
|
|
81
79
|
|
82
80
|
def set_termxref_tags_target
|
83
81
|
xmldoc.xpath("//termxref").each do |node|
|
84
|
-
target =
|
82
|
+
target = norm_ref_id1(node)
|
85
83
|
x = node.at("../xrefrender") and modify_ref_node(x, target)
|
86
84
|
node.name = "refterm"
|
87
85
|
end
|
@@ -103,8 +101,8 @@ module Metanorma
|
|
103
101
|
end
|
104
102
|
|
105
103
|
def lookup_refterm(node)
|
106
|
-
target =
|
107
|
-
if
|
104
|
+
target = norm_ref_id1(node)
|
105
|
+
if @lookup[:term][target].nil? && @lookup[:symbol][target].nil?
|
108
106
|
remove_missing_ref(node, target)
|
109
107
|
else
|
110
108
|
x = node.at("../xrefrender") and x.name = "xref"
|
@@ -154,8 +152,9 @@ module Metanorma
|
|
154
152
|
|
155
153
|
def modify_ref_node(node, target)
|
156
154
|
node.name = "xref"
|
157
|
-
s =
|
158
|
-
|
155
|
+
s = @lookup[:symbol][target]
|
156
|
+
t1 = @lookup[:sec2prim][target] and target = norm_ref_id1(t1)
|
157
|
+
t = @lookup[:term][target]
|
159
158
|
type = node.parent["type"]
|
160
159
|
if type == "term" || ((!type || node.parent.name == "related") && t)
|
161
160
|
node["target"] = t
|
@@ -173,7 +172,7 @@ module Metanorma
|
|
173
172
|
s = xmldoc.xpath("//definitions//dt").each.with_object({}) do |n, res|
|
174
173
|
norm_id_memorize(n, res, ".", "symbol", false)
|
175
174
|
end
|
176
|
-
{ term: r, symbol: s,
|
175
|
+
{ term: r, symbol: s, sec2prim: pref_secondary2primary }
|
177
176
|
end
|
178
177
|
|
179
178
|
def pref_secondary2primary
|
@@ -188,18 +187,18 @@ module Metanorma
|
|
188
187
|
term.xpath("./preferred//name").each_with_index do |p, i|
|
189
188
|
t = p.text.strip
|
190
189
|
i.positive? and
|
191
|
-
res[
|
190
|
+
res[norm_ref_id_text(domain_prefix(term, t))] = primary
|
192
191
|
@unique_designs[t] && term.at(".//domain") and
|
193
|
-
res[
|
192
|
+
res[norm_ref_id_text(t)] = primary
|
194
193
|
end
|
195
194
|
end
|
196
195
|
|
197
196
|
def pref_secondary2primary_admitted(term, res, primary)
|
198
197
|
term.xpath("./admitted//name").each do |p|
|
199
198
|
t = p.text.strip
|
200
|
-
res[
|
199
|
+
res[norm_ref_id_text(domain_prefix(term, t))] = primary
|
201
200
|
@unique_designs[t] && term.at(".//domain") and
|
202
|
-
res[
|
201
|
+
res[norm_ref_id_text(t)] = primary
|
203
202
|
end
|
204
203
|
end
|
205
204
|
|
@@ -209,7 +208,7 @@ module Metanorma
|
|
209
208
|
end
|
210
209
|
|
211
210
|
def norm_id_memorize_init(node, res_table, selector, prefix, use_domain)
|
212
|
-
term_text =
|
211
|
+
term_text = norm_ref_id(node, selector, use_domain) or return
|
213
212
|
unless AUTO_GEN_ID_REGEXP.match(node["id"]).nil? && !node["id"].nil?
|
214
213
|
id = unique_text_id(term_text, prefix)
|
215
214
|
node["id"] = id
|
@@ -221,7 +220,7 @@ module Metanorma
|
|
221
220
|
def memorize_other_pref_terms(node, res_table, text_selector, use_domain)
|
222
221
|
node.xpath(text_selector).each_with_index do |p, i|
|
223
222
|
i.positive? or next
|
224
|
-
res_table[
|
223
|
+
res_table[norm_ref_id1(p, use_domain ? node : nil)] = node["id"]
|
225
224
|
end
|
226
225
|
end
|
227
226
|
|
@@ -230,20 +229,23 @@ module Metanorma
|
|
230
229
|
"<#{d.text}> #{term}"
|
231
230
|
end
|
232
231
|
|
233
|
-
def
|
232
|
+
def norm_ref_id(node, selector, use_domain)
|
234
233
|
term = node.at(selector) or return nil
|
235
|
-
|
234
|
+
norm_ref_id1(term, use_domain ? node : nil)
|
236
235
|
end
|
237
236
|
|
238
|
-
def
|
237
|
+
def norm_ref_id1(term, node = nil)
|
239
238
|
t = term.dup
|
240
|
-
t.
|
241
|
-
|
239
|
+
if t.is_a?(String) then ret = t
|
240
|
+
else
|
241
|
+
t.xpath(".//index").map(&:remove)
|
242
|
+
ret = asciimath_key(t).text.strip
|
243
|
+
end
|
242
244
|
node and ret = domain_prefix(node, ret)
|
243
|
-
|
245
|
+
norm_ref_id_text(ret)
|
244
246
|
end
|
245
247
|
|
246
|
-
def
|
248
|
+
def norm_ref_id_text(text)
|
247
249
|
Metanorma::Utils::to_ncname(text.gsub(/[[:space:]]+/, "-"))
|
248
250
|
end
|
249
251
|
|
data/metanorma-standoc.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_dependency "addressable", "~> 2.8.0"
|
32
32
|
spec.add_dependency "asciidoctor", "~> 2.0.0"
|
33
33
|
spec.add_dependency "iev", "~> 0.3.0"
|
34
|
-
spec.add_dependency "isodoc", "~> 2.6.
|
34
|
+
spec.add_dependency "isodoc", "~> 2.6.1"
|
35
35
|
spec.add_dependency "metanorma", ">= 1.6.0"
|
36
36
|
spec.add_dependency "metanorma-plugin-datastruct", "~> 0.2.0"
|
37
37
|
spec.add_dependency "metanorma-plugin-glossarist", "~> 0.1.1"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-standoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.3
|
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: addressable
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.6.
|
61
|
+
version: 2.6.1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 2.6.
|
68
|
+
version: 2.6.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: metanorma
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|