metanorma-iso 2.9.2 → 2.9.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/isodoc/iso/i18n-de.yaml +0 -3
- data/lib/isodoc/iso/i18n-en.yaml +0 -3
- data/lib/isodoc/iso/i18n-fr.yaml +0 -3
- data/lib/isodoc/iso/i18n-ru.yaml +0 -3
- data/lib/isodoc/iso/i18n-zh-Hans.yaml +0 -3
- data/lib/isodoc/iso/iso.amendment.xsl +193 -94
- data/lib/isodoc/iso/iso.international-standard.xsl +193 -94
- data/lib/isodoc/iso/presentation_terms.rb +0 -1
- data/lib/isodoc/iso/presentation_xml_convert.rb +4 -1
- data/lib/metanorma/iso/version.rb +1 -1
- metadata +2 -3
- data/lib/isodoc/iso/index.rb +0 -173
data/lib/isodoc/iso/index.rb
DELETED
@@ -1,173 +0,0 @@
|
|
1
|
-
module IsoDoc
|
2
|
-
module Iso
|
3
|
-
class PresentationXMLConvert < IsoDoc::PresentationXMLConvert
|
4
|
-
def add_id
|
5
|
-
%(id="_#{UUIDTools::UUID.random_create}")
|
6
|
-
end
|
7
|
-
|
8
|
-
def index(xml)
|
9
|
-
if xml.at(ns("//index"))
|
10
|
-
i = xml.at(ns("//indexsect")) ||
|
11
|
-
xml.root.add_child("<indexsect #{add_id}><title>#{@i18n.index}" \
|
12
|
-
"</title></indexsect>").first
|
13
|
-
index = sort_indexterms(xml.xpath(ns("//index")),
|
14
|
-
xml.xpath(ns("//index-xref[@also = 'false']")),
|
15
|
-
xml.xpath(ns("//index-xref[@also = 'true']")))
|
16
|
-
index1(xml, i, index)
|
17
|
-
else xml.xpath(ns("//indexsect")).each(&:remove)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def index1(docxml, indexsect, index)
|
22
|
-
c = indexsect.add_child("<ul></ul>").first
|
23
|
-
index.keys.sort.each do |k|
|
24
|
-
words = index[k].keys.each_with_object({}) do |w, v|
|
25
|
-
v[sortable(w).downcase] = w
|
26
|
-
end
|
27
|
-
words.keys.localize(@lang.to_sym).sort.to_a.each do |w|
|
28
|
-
c.add_child index_entries(words, index[k], w)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
index1_cleanup(docxml)
|
32
|
-
end
|
33
|
-
|
34
|
-
def index1_cleanup(docxml)
|
35
|
-
docxml.xpath(ns("//indexsect//xref")).each do |x|
|
36
|
-
x.children.remove
|
37
|
-
end
|
38
|
-
@xrefs.bookmark_anchor_names(docxml)
|
39
|
-
end
|
40
|
-
|
41
|
-
def sortable(str)
|
42
|
-
HTMLEntities.new.decode(Nokogiri::XML.fragment(str).text)
|
43
|
-
end
|
44
|
-
|
45
|
-
def index_entries_opt
|
46
|
-
{ xref_lbl: ", ", see_lbl: ", #{see_lbl}", also_lbl: ", #{also_lbl}" }
|
47
|
-
end
|
48
|
-
|
49
|
-
def index_entries(words, index, primary)
|
50
|
-
ret = index_entries_head(words[primary],
|
51
|
-
index.dig(words[primary], nil, nil),
|
52
|
-
index_entries_opt)
|
53
|
-
words2 = index[words[primary]]&.keys&.compact
|
54
|
-
&.each_with_object({}) { |w, v| v[w.downcase] = w }
|
55
|
-
unless words2.empty?
|
56
|
-
ret += "<ul>"
|
57
|
-
words2.keys.localize(@lang.to_sym).sort.to_a.each do |w|
|
58
|
-
ret += index_entries2(words2, index[words[primary]], w)
|
59
|
-
end
|
60
|
-
ret += "</ul>"
|
61
|
-
end
|
62
|
-
"#{ret}</li>"
|
63
|
-
end
|
64
|
-
|
65
|
-
def index_entries2(words, index, secondary)
|
66
|
-
ret = index_entries_head(words[secondary],
|
67
|
-
index.dig(words[secondary], nil),
|
68
|
-
index_entries_opt)
|
69
|
-
words3 = index[words[secondary]]&.keys&.compact
|
70
|
-
&.each_with_object({}) { |w, v| v[w.downcase] = w }
|
71
|
-
unless words3.empty?
|
72
|
-
ret += "<ul>"
|
73
|
-
words3.keys.localize(@lang.to_sym).sort.to_a.each do |w|
|
74
|
-
ret += (index_entries_head(words3[w],
|
75
|
-
index[words[secondary]][words3[w]],
|
76
|
-
index_entries_opt) + "</li>")
|
77
|
-
end
|
78
|
-
ret += "</ul>"
|
79
|
-
end
|
80
|
-
"#{ret}</li>"
|
81
|
-
end
|
82
|
-
|
83
|
-
def index_entries_head(head, entries, opt)
|
84
|
-
ret = "<li>#{head}"
|
85
|
-
xref = entries&.dig(:xref)&.join(", ")
|
86
|
-
see = index_entries_see(entries, :see)
|
87
|
-
also = index_entries_see(entries, :also)
|
88
|
-
ret += "#{opt[:xref_lbl]} #{xref}" if xref
|
89
|
-
ret += "#{opt[:see_lbl]} #{see}" if see
|
90
|
-
ret += "#{opt[:also_lbl]} #{also}" if also
|
91
|
-
ret
|
92
|
-
end
|
93
|
-
|
94
|
-
def index_entries_see(entries, label)
|
95
|
-
see_sort = entries&.dig(label) or return nil
|
96
|
-
|
97
|
-
x = see_sort.each_with_object({}) do |w, v|
|
98
|
-
v[sortable(w).downcase] = w
|
99
|
-
end
|
100
|
-
x.keys.localize(@lang.to_sym).sort.to_a.map do |k|
|
101
|
-
# see_sort[k]
|
102
|
-
x[k]
|
103
|
-
end.join(", ")
|
104
|
-
end
|
105
|
-
|
106
|
-
def see_lbl
|
107
|
-
@lang == "en" ? @i18n.see : "<em>#{@i18n.see}</em>"
|
108
|
-
end
|
109
|
-
|
110
|
-
def also_lbl
|
111
|
-
@lang == "en" ? @i18n.see_also : "<em>#{@i18n.see_also}</em>"
|
112
|
-
end
|
113
|
-
|
114
|
-
def sort_indexterms(terms, see, also)
|
115
|
-
index = extract_indexterms(terms)
|
116
|
-
index = extract_indexsee(index, see, :see)
|
117
|
-
index = extract_indexsee(index, also, :also)
|
118
|
-
index.keys.sort.each_with_object({}) do |k, v|
|
119
|
-
v[sortable(k)[0].upcase.transliterate] ||= {}
|
120
|
-
v[sortable(k)[0].upcase.transliterate][k] = index[k]
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def extract_indexsee(val, terms, label)
|
125
|
-
terms.each_with_object(val) do |t, v|
|
126
|
-
term, term2, term3 = extract_indexterms_init(t)
|
127
|
-
term_hash_init(v, term, term2, term3, label)
|
128
|
-
v[term][term2][term3][label] << to_xml(t.at(ns("./target"))&.children)
|
129
|
-
t.remove
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def xml_encode_attr(str)
|
134
|
-
HTMLEntities.new.encode(str, :basic, :hexadecimal)
|
135
|
-
.gsub(/&#x([^;]+);/) do |_x|
|
136
|
-
"&#x#{$1.upcase};"
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
# attributes are decoded into UTF-8,
|
141
|
-
# elements in extract_indexsee are still in entities
|
142
|
-
def extract_indexterms(terms)
|
143
|
-
terms.each_with_object({}) do |t, v|
|
144
|
-
term, term2, term3 = extract_indexterms_init(t)
|
145
|
-
index2bookmark(t)
|
146
|
-
term_hash_init(v, term, term2, term3, :xref)
|
147
|
-
to = t["to"] ? "to='#{t['to']}' " : ""
|
148
|
-
v[term][term2][term3][:xref] << "<xref target='#{t['id']}' " \
|
149
|
-
"#{to}pagenumber='true'/>"
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
def extract_indexterms_init(term)
|
154
|
-
%w(primary secondary tertiary).each_with_object([]) do |x, m|
|
155
|
-
m << to_xml(term.at(ns("./#{x}"))&.children)
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def term_hash_init(hash, term, term2, term3, label)
|
160
|
-
hash[term] ||= {}
|
161
|
-
hash[term][term2] ||= {}
|
162
|
-
hash[term][term2][term3] ||= {}
|
163
|
-
hash[term][term2][term3][label] ||= []
|
164
|
-
end
|
165
|
-
|
166
|
-
def index2bookmark(node)
|
167
|
-
node.name = "bookmark"
|
168
|
-
node.children.each(&:remove)
|
169
|
-
node["id"] = "_#{UUIDTools::UUID.random_create}"
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|