isodoc 1.7.7 → 1.8.0

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: 5df030f2a89267d4acde57361f2c6338b29bf5928b5bb3c7b24a18903adf1531
4
- data.tar.gz: 7e1923d7293b6b0703a15799e9bc3334637145adf8219c4230c63809267770cf
3
+ metadata.gz: e798df14fbf858fd0540d3fb2837774ec6a1924d5590ad4a628699888eff8425
4
+ data.tar.gz: 8f3e143a4c3cbcba0c4c349c315c6bf7b067164cd4cc22bd06a85dce71268e73
5
5
  SHA512:
6
- metadata.gz: 24e8cf7a71167da62d5bdea85b009f982996e1513db82b42d6c01edf031b045dac7f9992a10e29946368df70dc32301e5edfa5937fad11e49e661edf8311058c
7
- data.tar.gz: f61bb6a9b3833c0c4080c0804ae12869f15051ebec0f3fa6b3cc7d925b44de41559d472dde0ad737f54b02b040532a0a944e90a563fd1fcec4566965bda26fa4
6
+ metadata.gz: 6a0fbbabc25df62e19eeefecbf3369188194e28348ac6758f59024b58c0e4e23695440e41263c049455a12b1ce210e602c58e6142e9b8b95ac79d2fa8a64d341
7
+ data.tar.gz: 888429742fbf4ee0ab902b1a34d5edb8d7657b2fb561ecf3fe872fe48de14267e0e7edcae1e27c86ed5b36dc8d0becccd0ca6f96f6f1239936fb1bd287dc0130
data/isodoc.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
30
30
 
31
31
  spec.add_dependency "asciimath"
32
- spec.add_dependency "html2doc", "~> 1.1.1"
32
+ spec.add_dependency "html2doc", "~> 1.2.0"
33
33
  spec.add_dependency "htmlentities", "~> 4.3.4"
34
34
  spec.add_dependency "liquid", "~> 4"
35
35
  # spec.add_dependency "metanorma", ">= 1.2.0"
@@ -165,6 +165,10 @@ module IsoDoc
165
165
  t << a.remove
166
166
  end
167
167
  end
168
+ table_footnote_cleanup_propagate(docxml)
169
+ end
170
+
171
+ def table_footnote_cleanup_propagate(docxml)
168
172
  docxml.xpath("//p[not(self::*[@class])]"\
169
173
  "[ancestor::*[@class = 'TableFootnote']]").each do |p|
170
174
  p["class"] = "TableFootnote"
@@ -54,12 +54,6 @@ module IsoDoc
54
54
  end
55
55
  end
56
56
 
57
- def termexample(docxml)
58
- docxml.xpath(ns("//termexample")).each do |f|
59
- example1(f)
60
- end
61
- end
62
-
63
57
  def example1(elem)
64
58
  n = @xrefs.get[elem["id"]]
65
59
  lbl = if n.nil? || n[:label].nil? || n[:label].empty?
@@ -89,36 +83,6 @@ module IsoDoc
89
83
  prefix_name(elem, "", lbl, "name")
90
84
  end
91
85
 
92
- def termnote(docxml)
93
- docxml.xpath(ns("//termnote")).each do |f|
94
- termnote1(f)
95
- end
96
- end
97
-
98
- # introduce name element
99
- def termnote1(elem)
100
- lbl = l10n(@xrefs.anchor(elem["id"], :label) || "???")
101
- prefix_name(elem, "", lower2cap(lbl), "name")
102
- end
103
-
104
- def termdefinition(docxml)
105
- docxml.xpath(ns("//term[definition]")).each do |f|
106
- termdefinition1(f)
107
- end
108
- end
109
-
110
- def termdefinition1(elem)
111
- return unless elem.xpath(ns("./definition")).size > 1
112
-
113
- d = elem.at(ns("./definition"))
114
- d = d.replace("<ol><li>#{d.children.to_xml}</li></ol>").first
115
- elem.xpath(ns("./definition")).each do |f|
116
- f = f.replace("<li>#{f.children.to_xml}</li>").first
117
- d << f
118
- end
119
- d.wrap("<definition></definition>")
120
- end
121
-
122
86
  def recommendation(docxml)
123
87
  docxml.xpath(ns("//recommendation")).each do |f|
124
88
  recommendation1(f, lower2cap(@i18n.recommendation))
@@ -1,5 +1,4 @@
1
1
  require "metanorma-utils"
2
- require_relative "./concept"
3
2
 
4
3
  module IsoDoc
5
4
  class PresentationXMLConvert < ::IsoDoc::Convert
@@ -35,8 +34,8 @@ module IsoDoc
35
34
 
36
35
  def capitalise_xref(node, linkend, label)
37
36
  linktext = linkend.gsub(/<[^>]+>/, "")
38
- (label && !label.empty? && /^#{Regexp.escape(label)}/.match?(linktext) ||
39
- linktext[0, 1].match?(/\p{Upper}/)) and return linkend
37
+ (label && !label.empty? && /^#{Regexp.escape(label)}/.match?(linktext)) ||
38
+ linktext[0, 1].match?(/\p{Upper}/) and return linkend
40
39
  node["case"] and
41
40
  return Common::case_with_markup(linkend, node["case"], @script)
42
41
 
@@ -0,0 +1,179 @@
1
+ module IsoDoc
2
+ class PresentationXMLConvert < ::IsoDoc::Convert
3
+ def concept(docxml)
4
+ docxml.xpath(ns("//concept")).each { |f| concept1(f) }
5
+ end
6
+
7
+ def concept1(node)
8
+ xref = node&.at(ns("./xref/@target"))&.text or
9
+ return concept_render(node, ital: node["ital"] || "true",
10
+ ref: node["ref"] || "true",
11
+ linkref: node["linkref"] || "true",
12
+ linkmention: node["linkmention"] || "false")
13
+ if node.at(ns("//definitions//dt[@id = '#{xref}']"))
14
+ concept_render(node, ital: node["ital"] || "false",
15
+ ref: node["ref"] || "false",
16
+ linkref: node["linkref"] || "true",
17
+ linkmention: node["linkmention"] || "false")
18
+ else concept_render(node, ital: node["ital"] || "true",
19
+ ref: node["ref"] || "true",
20
+ linkref: node["linkref"] || "true",
21
+ linkmention: node["linkmention"] || "false")
22
+ end
23
+ end
24
+
25
+ def concept_render(node, opts)
26
+ node&.at(ns("./refterm"))&.remove
27
+ r = node.at(ns("./renderterm"))
28
+ ref = node.at(ns("./xref | ./eref | ./termref"))
29
+ ref && opts[:ref] != "false" and r&.next = " "
30
+ opts[:ital] == "true" and r&.name = "em"
31
+ if opts[:linkmention] == "true" && !r.nil? && !ref.nil?
32
+ ref2 = ref.clone
33
+ r2 = r.clone
34
+ r.replace(ref2).children = r2
35
+ end
36
+ concept1_ref(node, ref, opts)
37
+ if opts[:ital] == "false"
38
+ r = node.at(ns(".//renderterm"))
39
+ r&.replace(r&.children)
40
+ end
41
+ node.replace(node.children)
42
+ end
43
+
44
+ def concept1_ref(_node, ref, opts)
45
+ ref.nil? and return
46
+ return ref.remove if opts[:ref] == "false"
47
+
48
+ r = concept1_ref_content(ref)
49
+ ref = r.at("./descendant-or-self::xmlns:xref | "\
50
+ "./descendant-or-self::xmlns:eref | "\
51
+ "./descendant-or-self::xmlns:termref")
52
+ %w(xref eref).include? ref&.name and get_linkend(ref)
53
+ if opts[:linkref] == "false" && %w(xref eref).include?(ref&.name)
54
+ ref.replace(ref.children)
55
+ end
56
+ end
57
+
58
+ def concept1_ref_content(ref)
59
+ if non_locality_elems(ref).select do |c|
60
+ !c.text? || /\S/.match(c)
61
+ end.empty?
62
+ ref.replace(@i18n.term_defined_in.sub(/%/,
63
+ ref.to_xml))
64
+ else ref.replace("[#{ref.to_xml}]")
65
+ end
66
+ end
67
+
68
+ def related(docxml)
69
+ docxml.xpath(ns("//related")).each { |f| related1(f) }
70
+ end
71
+
72
+ def related1(node)
73
+ p = node.at(ns("./preferred"))
74
+ ref = node.at(ns("./xref | ./eref | ./termref"))
75
+ label = @i18n.relatedterms[node["type"]].upcase
76
+ node.replace(l10n("<p><strong>#{label}:</strong> "\
77
+ "<em>#{p.to_xml}</em> (#{ref.to_xml})</p>"))
78
+ end
79
+
80
+ def designation(docxml)
81
+ docxml.xpath(ns("//preferred | //admitted | //deprecates")).each do |p|
82
+ designation1(p)
83
+ end
84
+ docxml.xpath(ns("//term")).each do |t|
85
+ merge_second_preferred(t)
86
+ end
87
+ end
88
+
89
+ def merge_second_preferred(term)
90
+ pref = nil
91
+ term.xpath(ns("./preferred")).each_with_index do |p, i|
92
+ if i.zero? then pref = p
93
+ else
94
+ pref << l10n("; #{p.children.to_xml}")
95
+ p.remove
96
+ end
97
+ end
98
+ end
99
+
100
+ def designation1(desgn)
101
+ s = desgn.at(ns("./termsource"))
102
+ name = desgn.at(ns("./expression/name | ./letter-symbol/name | "\
103
+ "./graphical-symbol")) or return
104
+
105
+ g = desgn.at(ns("./expression/grammar")) and
106
+ name << " #{designation_grammar(g).join(', ')}"
107
+ desgn.children = name.children
108
+ s and desgn.next = s
109
+ end
110
+
111
+ def designation_grammar(grammar)
112
+ ret = []
113
+ grammar.xpath(ns("./gender")).each do |x|
114
+ ret << @i18n.grammar_abbrevs[x.text]
115
+ end
116
+ %w(isPreposition isParticiple isAdjective isVerb isAdverb isNoun)
117
+ .each do |x|
118
+ grammar.at(ns("./#{x}[text() = 'true']")) and
119
+ ret << @i18n.grammar_abbrevs[x]
120
+ end
121
+ ret
122
+ end
123
+
124
+ def definition1(elem)
125
+ nodes = Nokogiri::XML::NodeSet.new(elem.document)
126
+ v = elem&.at(ns("./verbaldefinition"))&.children and nodes += v
127
+ n = elem&.at(ns("./nonverbalrepresentation"))&.children and nodes += n
128
+ elem.children = nodes
129
+ end
130
+
131
+ def termexample(docxml)
132
+ docxml.xpath(ns("//termexample")).each do |f|
133
+ example1(f)
134
+ end
135
+ end
136
+
137
+ def termnote(docxml)
138
+ docxml.xpath(ns("//termnote")).each do |f|
139
+ termnote1(f)
140
+ end
141
+ end
142
+
143
+ # introduce name element
144
+ def termnote1(elem)
145
+ lbl = l10n(@xrefs.anchor(elem["id"], :label) || "???")
146
+ prefix_name(elem, "", lower2cap(lbl), "name")
147
+ end
148
+
149
+ def termdefinition(docxml)
150
+ docxml.xpath(ns("//term[definition]")).each do |f|
151
+ termdefinition1(f)
152
+ end
153
+ end
154
+
155
+ def termdefinition1(elem)
156
+ unwrap_definition(elem)
157
+ multidef(elem) if elem.xpath(ns("./definition")).size > 1
158
+ end
159
+
160
+ def multidef(elem)
161
+ d = elem.at(ns("./definition"))
162
+ d = d.replace("<ol><li>#{d.children.to_xml}</li></ol>").first
163
+ elem.xpath(ns("./definition")).each do |f|
164
+ f = f.replace("<li>#{f.children.to_xml}</li>").first
165
+ d << f
166
+ end
167
+ d.wrap("<definition></definition>")
168
+ end
169
+
170
+ def unwrap_definition(elem)
171
+ elem.xpath(ns("./definition")).each do |d|
172
+ nodes = Nokogiri::XML::NodeSet.new(elem.document)
173
+ v = d&.at(ns("./verbaldefinition"))&.children and nodes += v
174
+ n = d&.at(ns("./nonverbalrepresentation"))&.children and nodes += n
175
+ d.children = nodes
176
+ end
177
+ end
178
+ end
179
+ end
@@ -1,4 +1,5 @@
1
1
  require_relative "presentation_function/block"
2
+ require_relative "presentation_function/terms"
2
3
  require_relative "presentation_function/inline"
3
4
  require_relative "presentation_function/math"
4
5
  require_relative "presentation_function/section"
@@ -25,6 +26,7 @@ module IsoDoc
25
26
  @xrefs.parse docxml
26
27
  section docxml
27
28
  block docxml
29
+ terms docxml
28
30
  inline docxml
29
31
  end
30
32
 
@@ -46,17 +48,13 @@ module IsoDoc
46
48
  sourcecode docxml
47
49
  formula docxml
48
50
  example docxml
49
- termexample docxml
50
51
  note docxml
51
- termnote docxml
52
- termdefinition docxml
53
52
  permission docxml
54
53
  requirement docxml
55
54
  recommendation docxml
56
55
  end
57
56
 
58
57
  def inline(docxml)
59
- concept docxml
60
58
  xref docxml
61
59
  eref docxml
62
60
  origin docxml
@@ -65,6 +63,15 @@ module IsoDoc
65
63
  variant docxml
66
64
  end
67
65
 
66
+ def terms(docxml)
67
+ termexample docxml
68
+ termnote docxml
69
+ termdefinition docxml
70
+ designation docxml
71
+ concept docxml
72
+ related docxml
73
+ end
74
+
68
75
  def postprocess(result, filename, _dir)
69
76
  toXML(result, filename)
70
77
  @files_to_delete.each { |f| FileUtils.rm_rf f }
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "1.7.7".freeze
2
+ VERSION = "1.8.0".freeze
3
3
  end