isodoc 2.5.4 → 2.5.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3cbf57138d05cbc6fb861e09c867a3f4f3a58d349be341676e3a4ff2ef3b3477
4
- data.tar.gz: e201871207c3d77a4be10a66624cd40859baf0a09bf309382f4fb43b2154e0eb
3
+ metadata.gz: d6ca47f20afd4ccef8c44ce28bfca11c4803f9aa8988e950cf1842dc251dc855
4
+ data.tar.gz: 9f2ca8a82bb0528e05f8a6cc631cfad987c0fe8d819937af79580a119955a921
5
5
  SHA512:
6
- metadata.gz: 4b543165a879e7e1a4992c6a6bf58baa5b606af5ea83773194666daf4605ac4fb2142a95817b9259c825e9aa1abfcb750e1a0b6d4663ff29225ff6b547958b92
7
- data.tar.gz: df54828f56b89b01dea07da527868a7f6fd7cf775b7133d4877856b97d838cbe48d21dbbde53263f61e51d937b6cf278a8e897f00d726ebccf3802e254999e97
6
+ metadata.gz: 10170334bf2d0bbf492237695054a1a164c8c7f056a8cec5d782cd468f4a367524fc9dc841fccf4c3f7c90038af32d83e962d5cf224d66e5f7d05323b1b65083
7
+ data.tar.gz: 9fc62b5c28d0baff4b369f15f8811a6be8b0bd85e1b63db6a9b36017e9a84a276c9df3034c679c0bd11ecbca0d5f7056bd2aa1627873a561be29b67f5619db9a
@@ -85,7 +85,6 @@ module IsoDoc
85
85
 
86
86
  def convert1(docxml, filename, dir)
87
87
  @xrefs.parse docxml
88
- bibitem_lookup(docxml)
89
88
  noko do |xml|
90
89
  xml.html lang: @lang.to_s do |html|
91
90
  html.parent.add_namespace("epub", "http://www.idpf.org/2007/ops")
@@ -97,13 +96,6 @@ module IsoDoc
97
96
  end.join("\n")
98
97
  end
99
98
 
100
- def bibitem_lookup(docxml)
101
- @bibitems = docxml.xpath(ns("//references/bibitem"))
102
- .each_with_object({}) do |b, m|
103
- m[b["id"]] = b
104
- end
105
- end
106
-
107
99
  def convert_init(file, input_filename, debug)
108
100
  docxml = Nokogiri::XML(file) { |config| config.huge }
109
101
  filename, dir = init_file(input_filename, debug)
@@ -52,45 +52,15 @@ module IsoDoc
52
52
  url.sub(/#{File.extname(url)}$/, ".html")
53
53
  end
54
54
 
55
- def eref_target(node)
56
- url = suffix_url(eref_url(node["bibitemid"]))
57
- anchor = node&.at(ns(".//locality[@type = 'anchor']"))
58
- return url if url.nil? || /^#/.match?(url) || !anchor
59
-
60
- "#{url}##{anchor.text.strip}"
61
- end
62
-
63
- def eref_url(id)
64
- @bibitems.nil? and return nil
65
-
66
- b = @bibitems[id]
67
- b.nil? and return nil
68
-
69
- url = b.at(ns("./uri[@type = 'citation'][@language = '#{@lang}']")) and
70
- return url.text
71
- url = b.at(ns("./uri[@type = 'citation']")) and return url.text
72
- b["hidden"] == "true" and return b.at(ns("./uri"))&.text
73
- "##{id}"
74
- end
75
-
76
55
  def eref_parse(node, out)
77
- if href = eref_target(node)
78
- if node["type"] == "footnote"
79
- out.sup do |s|
80
- s.a(href: href) { |l| no_locality_parse(node, l) }
81
- end
82
- else
83
- out.a(href: href) { |l| no_locality_parse(node, l) }
84
- end
85
- else no_locality_parse(node, out)
86
- end
56
+ no_locality_parse(node, out)
87
57
  end
88
58
 
89
59
  def origin_parse(node, out)
90
60
  if t = node.at(ns("./termref"))
91
61
  termrefelem_parse(t, out)
92
62
  else
93
- eref_parse(node, out)
63
+ no_locality_parse(node, out)
94
64
  end
95
65
  end
96
66
 
@@ -5,7 +5,6 @@ module IsoDoc
5
5
  module HtmlFunction
6
6
  module Html
7
7
  def convert1(docxml, filename, dir)
8
- bibitem_lookup(docxml)
9
8
  noko do |xml|
10
9
  xml.html lang: @lang.to_s do |html|
11
10
  info docxml, nil
@@ -203,7 +203,7 @@ module IsoDoc
203
203
  end
204
204
 
205
205
  def source_modification(mod)
206
- termsource_modification(mod)
206
+ termsource_modification(mod.parent)
207
207
  end
208
208
  end
209
209
  end
@@ -0,0 +1,90 @@
1
+ module IsoDoc
2
+ class PresentationXMLConvert < ::IsoDoc::Convert
3
+ def concept(docxml)
4
+ @definition_ids = docxml.xpath(ns("//definitions//dt"))
5
+ .each_with_object({}) { |x, m| m[x["id"]] = true }
6
+ docxml.xpath(ns("//concept")).each { |f| concept1(f) }
7
+ end
8
+
9
+ def concept1(node)
10
+ xref = node&.at(ns("./xref/@target"))&.text or
11
+ return concept_render(node, ital: "true", ref: "true", bold: "false",
12
+ linkref: "true", linkmention: "false")
13
+ if @definition_ids[xref]
14
+ concept_render(node, ital: "false", ref: "false", bold: "false",
15
+ linkref: "true", linkmention: "false")
16
+ else concept_render(node, ital: "true", ref: "true", bold: "false",
17
+ linkref: "true", linkmention: "false")
18
+ end
19
+ end
20
+
21
+ def concept_render(node, defaults)
22
+ opts, render, ref = concept_render_init(node, defaults)
23
+ node&.at(ns("./refterm"))&.remove
24
+ ref && opts[:ref] != "false" and render&.next = " "
25
+ concept1_linkmention(ref, render, opts)
26
+ concept1_ref(node, ref, opts)
27
+ concept1_style(node, opts)
28
+ node.replace(node.children)
29
+ end
30
+
31
+ def concept1_style(node, opts)
32
+ r = node.at(ns(".//renderterm")) or return
33
+ opts[:ital] == "true" and r.children = "<em>#{to_xml(r.children)}</em>"
34
+ opts[:bold] == "true" and
35
+ r.children = "<strong>#{to_xml(r.children)}</strong>"
36
+ r.replace(r.children)
37
+ end
38
+
39
+ def concept_render_init(node, defaults)
40
+ opts = %i(bold ital ref linkref linkmention)
41
+ .each_with_object({}) { |x, m| m[x] = node[x.to_s] || defaults[x] }
42
+ [opts, node.at(ns("./renderterm")),
43
+ node.at(ns("./xref | ./eref | ./termref"))]
44
+ end
45
+
46
+ def concept1_linkmention(ref, renderterm, opts)
47
+ (opts[:linkmention] == "true" && !renderterm.nil? && !ref.nil?) or return
48
+ ref2 = ref.clone
49
+ r2 = renderterm.clone
50
+ renderterm.replace(ref2).children = r2
51
+ end
52
+
53
+ def concept1_ref(_node, ref, opts)
54
+ ref.nil? and return
55
+ opts[:ref] == "false" and return ref.remove
56
+ concept1_ref_content(ref)
57
+ %w(xref eref).include? ref.name and get_linkend(ref)
58
+ opts[:linkref] == "false" && %w(xref eref).include?(ref.name) and
59
+ ref.replace(ref.children)
60
+ end
61
+
62
+ def concept1_ref_content(ref)
63
+ prev = "["
64
+ foll = "]"
65
+ non_locality_elems(ref).select do |c|
66
+ !c.text? || /\S/.match(c)
67
+ end.empty? and
68
+ (prev, foll = @i18n.term_defined_in.split("%"))
69
+ ref.previous = prev
70
+ ref.next = foll
71
+ end
72
+
73
+ def related(docxml)
74
+ docxml.xpath(ns("//related")).each { |f| related1(f) }
75
+ end
76
+
77
+ def related1(node)
78
+ p = node.at(ns("./preferred"))
79
+ ref = node.at(ns("./xref | ./eref | ./termref"))
80
+ label = @i18n.relatedterms[node["type"]].upcase
81
+ if p && ref
82
+ node.replace(l10n("<p><strong>#{label}:</strong> " \
83
+ "<em>#{to_xml(p)}</em> (#{Common::to_xml(ref)})</p>"))
84
+ else
85
+ node.replace(l10n("<p><strong>#{label}:</strong> " \
86
+ "<strong>**RELATED TERM NOT FOUND**</strong></p>"))
87
+ end
88
+ end
89
+ end
90
+ end
@@ -179,5 +179,54 @@ module IsoDoc
179
179
  end
180
180
  " #{ret}"
181
181
  end
182
+
183
+ def eref2link(docxml)
184
+ docxml.xpath(ns("//eref | //origin[not(termref)] | //quote/source"))
185
+ .each do |e|
186
+ href = eref_target(e) or next
187
+ e.xpath(ns("./locality | ./localityStack")).each(&:remove)
188
+ if /^#/.match?(href) then eref2xref(e)
189
+ else eref2link1(e, href)
190
+ end
191
+ end
192
+ end
193
+
194
+ def eref2xref(node)
195
+ node.name = "xref"
196
+ node["target"] = node["bibitemid"]
197
+ node.delete("bibitemid")
198
+ node.delete("citeas")
199
+ node["type"] == "footnote" and node.wrap("<sup></sup>")
200
+ end
201
+
202
+ def eref2link1(node, href)
203
+ repl = "<link target='#{href}'>#{node.children}</link>"
204
+ node["type"] == "footnote" and repl = "<sup>#{repl}</sup>"
205
+ node.replace(repl)
206
+ end
207
+
208
+ def suffix_url(url)
209
+ return url if url.nil? || %r{^https?://|^#}.match?(url)
210
+ return url unless File.extname(url).empty?
211
+
212
+ url.sub(/#{File.extname(url)}$/, ".html")
213
+ end
214
+
215
+ def eref_target(node)
216
+ url = suffix_url(eref_url(node["bibitemid"]))
217
+ anchor = node.at(ns(".//locality[@type = 'anchor']"))
218
+ return url if url.nil? || /^#/.match?(url) || !anchor
219
+
220
+ "#{url}##{anchor.text.strip}"
221
+ end
222
+
223
+ def eref_url(id)
224
+ @bibitems.nil? and return nil
225
+ b = @bibitems[id] or return nil
226
+ url = (b.at(ns("./uri[@type = 'citation'][@language = '#{@lang}']")) ||
227
+ b.at(ns("./uri[@type = 'citation']"))) and return url.text
228
+ b["hidden"] == "true" and return b.at(ns("./uri"))&.text
229
+ "##{id}"
230
+ end
182
231
  end
183
232
  end
@@ -1,92 +1,5 @@
1
1
  module IsoDoc
2
2
  class PresentationXMLConvert < ::IsoDoc::Convert
3
- def concept(docxml)
4
- @definition_ids = docxml.xpath(ns("//definitions//dt"))
5
- .each_with_object({}) { |x, m| m[x["id"]] = true }
6
- docxml.xpath(ns("//concept")).each { |f| concept1(f) }
7
- end
8
-
9
- def concept1(node)
10
- xref = node&.at(ns("./xref/@target"))&.text or
11
- return concept_render(node, ital: "true", ref: "true", bold: "false",
12
- linkref: "true", linkmention: "false")
13
- if @definition_ids[xref]
14
- concept_render(node, ital: "false", ref: "false", bold: "false",
15
- linkref: "true", linkmention: "false")
16
- else concept_render(node, ital: "true", ref: "true", bold: "false",
17
- linkref: "true", linkmention: "false")
18
- end
19
- end
20
-
21
- def concept_render(node, defaults)
22
- opts, render, ref = concept_render_init(node, defaults)
23
- node&.at(ns("./refterm"))&.remove
24
- ref && opts[:ref] != "false" and render&.next = " "
25
- concept1_linkmention(ref, render, opts)
26
- concept1_ref(node, ref, opts)
27
- concept1_style(node, opts)
28
- node.replace(node.children)
29
- end
30
-
31
- def concept1_style(node, opts)
32
- r = node.at(ns(".//renderterm")) or return
33
- opts[:ital] == "true" and r.children = "<em>#{to_xml(r.children)}</em>"
34
- opts[:bold] == "true" and
35
- r.children = "<strong>#{to_xml(r.children)}</strong>"
36
- r.replace(r.children)
37
- end
38
-
39
- def concept_render_init(node, defaults)
40
- opts = %i(bold ital ref linkref linkmention)
41
- .each_with_object({}) { |x, m| m[x] = node[x.to_s] || defaults[x] }
42
- [opts, node.at(ns("./renderterm")),
43
- node.at(ns("./xref | ./eref | ./termref"))]
44
- end
45
-
46
- def concept1_linkmention(ref, renderterm, opts)
47
- (opts[:linkmention] == "true" && !renderterm.nil? && !ref.nil?) or return
48
- ref2 = ref.clone
49
- r2 = renderterm.clone
50
- renderterm.replace(ref2).children = r2
51
- end
52
-
53
- def concept1_ref(_node, ref, opts)
54
- ref.nil? and return
55
- opts[:ref] == "false" and return ref.remove
56
- concept1_ref_content(ref)
57
- %w(xref eref).include? ref.name and get_linkend(ref)
58
- opts[:linkref] == "false" && %w(xref eref).include?(ref.name) and
59
- ref.replace(ref.children)
60
- end
61
-
62
- def concept1_ref_content(ref)
63
- prev = "["
64
- foll = "]"
65
- non_locality_elems(ref).select do |c|
66
- !c.text? || /\S/.match(c)
67
- end.empty? and
68
- (prev, foll = @i18n.term_defined_in.split("%"))
69
- ref.previous = prev
70
- ref.next = foll
71
- end
72
-
73
- def related(docxml)
74
- docxml.xpath(ns("//related")).each { |f| related1(f) }
75
- end
76
-
77
- def related1(node)
78
- p = node.at(ns("./preferred"))
79
- ref = node.at(ns("./xref | ./eref | ./termref"))
80
- label = @i18n.relatedterms[node["type"]].upcase
81
- if p && ref
82
- node.replace(l10n("<p><strong>#{label}:</strong> " \
83
- "<em>#{to_xml(p)}</em> (#{Common::to_xml(ref)})</p>"))
84
- else
85
- node.replace(l10n("<p><strong>#{label}:</strong> " \
86
- "<strong>**RELATED TERM NOT FOUND**</strong></p>"))
87
- end
88
- end
89
-
90
3
  def designation(docxml)
91
4
  docxml.xpath(ns("//term")).each { |t| merge_second_preferred(t) }
92
5
  docxml.xpath(ns("//preferred | //admitted | //deprecates"))
@@ -225,9 +138,7 @@ module IsoDoc
225
138
  end
226
139
 
227
140
  def termsource(docxml)
228
- docxml.xpath(ns("//termsource/modification")).each do |f|
229
- termsource_modification(f)
230
- end
141
+ docxml.xpath(ns("//termsource")).each { |f| termsource_modification(f) }
231
142
  docxml.xpath(ns("//termsource")).each { |f| termsource1(f) }
232
143
  end
233
144
 
@@ -238,12 +149,25 @@ module IsoDoc
238
149
  elem.children = l10n("[#{@i18n.source}: #{to_xml(elem.children).strip}]")
239
150
  end
240
151
 
241
- def termsource_modification(mod)
242
- mod.previous_element.next = l10n(", #{@i18n.modified}")
152
+ def termsource_modification(elem)
153
+ origin = elem.at(ns("./origin"))
154
+ s = termsource_status(elem["status"]) and origin.next = l10n(", #{s}")
155
+ termsource_add_modification_text(elem.at(ns("./modification")))
156
+ end
157
+
158
+ def termsource_add_modification_text(mod)
159
+ mod or return
243
160
  mod.text.strip.empty? or mod.previous = " &#x2013; "
244
161
  mod.elements.size == 1 and
245
162
  mod.elements[0].replace(mod.elements[0].children)
246
163
  mod.replace(mod.children)
247
164
  end
165
+
166
+ def termsource_status(status)
167
+ case status
168
+ when "modified" then @i18n.modified
169
+ when "adapted" then @i18n.adapted
170
+ end
171
+ end
248
172
  end
249
173
  end
@@ -1,4 +1,5 @@
1
1
  require_relative "presentation_function/block"
2
+ require_relative "presentation_function/concepts"
2
3
  require_relative "presentation_function/terms"
3
4
  require_relative "presentation_function/xrefs"
4
5
  require_relative "presentation_function/erefs"
@@ -17,12 +18,20 @@ module IsoDoc
17
18
 
18
19
  def convert1(docxml, _filename, _dir)
19
20
  @xrefs.parse docxml
21
+ bibitem_lookup(docxml)
20
22
  info docxml, nil
21
23
  conversions(docxml)
22
24
  docxml.root["type"] = "presentation"
23
25
  docxml.to_xml.gsub(/&lt;/, "&#x3c;").gsub(/&gt;/, "&#x3e;")
24
26
  end
25
27
 
28
+ def bibitem_lookup(docxml)
29
+ @bibitems = docxml.xpath(ns("//references/bibitem"))
30
+ .each_with_object({}) do |b, m|
31
+ m[b["id"]] = b
32
+ end
33
+ end
34
+
26
35
  def conversions(docxml)
27
36
  semantic_xml_insert(docxml)
28
37
  bibdata docxml
@@ -69,9 +78,10 @@ module IsoDoc
69
78
 
70
79
  def inline(docxml)
71
80
  xref docxml
72
- eref docxml
73
- origin docxml
74
- quotesource docxml
81
+ eref docxml # feeds docxml
82
+ origin docxml # feeds docxml
83
+ quotesource docxml # feeds docxml
84
+ eref2link docxml
75
85
  mathml docxml
76
86
  variant docxml
77
87
  identifier docxml
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "2.5.4".freeze
2
+ VERSION = "2.5.5".freeze
3
3
  end
@@ -68,6 +68,7 @@ draft_label: مسودة
68
68
  inform_annex: إخباري
69
69
  norm_annex: مقياسي
70
70
  modified: معدلة
71
+ adapted: تكيف
71
72
  deprecated: مهمل
72
73
  source: مصدر
73
74
  and: و
@@ -74,7 +74,8 @@ draft_label: Entwurf
74
74
  inform_annex: informativ
75
75
  norm_annex: normativ
76
76
  modified: geändert
77
- deprecated: DEPRECATED
77
+ adapted: angepasst
78
+ deprecated: VERALTET
78
79
  source: QUELLE
79
80
  and: und
80
81
  all_parts: Alle Teile
@@ -83,6 +83,7 @@ draft_label: draft
83
83
  inform_annex: informative
84
84
  norm_annex: normative
85
85
  modified: modified
86
+ adapted: adapted
86
87
  deprecated: DEPRECATED
87
88
  source: SOURCE
88
89
  and: and
@@ -74,6 +74,7 @@ draft_label: borrador
74
74
  inform_annex: informativo
75
75
  norm_annex: normativo
76
76
  modified: modificado
77
+ adapted: adaptado
77
78
  deprecated: OBSOLETO
78
79
  source: FUENTE
79
80
  and: y
@@ -71,6 +71,7 @@ draft_label: brouillon
71
71
  inform_annex: informative
72
72
  norm_annex: normative
73
73
  modified: modifié
74
+ adapted: adapté
74
75
  deprecated: DÉCONSEILLÉ
75
76
  source: SOURCE
76
77
  edition: édition
@@ -79,7 +79,8 @@ wholeoftext: Whole of text
79
79
  draft_label: draft
80
80
  inform_annex: 参考
81
81
  norm_annex: 規定
82
- modified: modified
82
+ modified: 修正された
83
+ adapted: 適合しました
83
84
  deprecated: 推奨しない用語
84
85
  source: 出典
85
86
  and: and
@@ -79,6 +79,7 @@ draft_label: проект
79
79
  inform_annex: информативное
80
80
  norm_annex: нормативное
81
81
  modified: изменен
82
+ adapted: адаптированный
82
83
  deprecated: НЕ РЕКОМЕНДУЕТСЯ
83
84
  source: ИСТОЧНИК
84
85
  and: и
@@ -69,6 +69,7 @@ draft_label: 稿
69
69
  inform_annex: 资料性附录
70
70
  norm_annex: 规范性附录
71
71
  modified: 改写
72
+ adapted: 改编
72
73
  deprecated: 被取代
73
74
  source: 定义
74
75
  and: 和
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.4
4
+ version: 2.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-25 00:00:00.000000000 Z
11
+ date: 2023-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: html2doc
@@ -433,6 +433,7 @@ files:
433
433
  - lib/isodoc/pdf_convert.rb
434
434
  - lib/isodoc/presentation_function/bibdata.rb
435
435
  - lib/isodoc/presentation_function/block.rb
436
+ - lib/isodoc/presentation_function/concepts.rb
436
437
  - lib/isodoc/presentation_function/erefs.rb
437
438
  - lib/isodoc/presentation_function/image.rb
438
439
  - lib/isodoc/presentation_function/inline.rb
@@ -473,7 +474,7 @@ homepage: https://github.com/metanorma/isodoc
473
474
  licenses:
474
475
  - BSD-2-Clause
475
476
  metadata: {}
476
- post_install_message:
477
+ post_install_message:
477
478
  rdoc_options: []
478
479
  require_paths:
479
480
  - lib
@@ -488,8 +489,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
488
489
  - !ruby/object:Gem::Version
489
490
  version: '0'
490
491
  requirements: []
491
- rubygems_version: 3.4.12
492
- signing_key:
492
+ rubygems_version: 3.3.26
493
+ signing_key:
493
494
  specification_version: 4
494
495
  summary: Convert documents in IsoDoc into Word and HTML in AsciiDoc.
495
496
  test_files: []