metanorma-standoc 2.5.2 → 2.5.3
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/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
|