metanorma-standoc 2.9.2 → 2.9.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: afbcf21ea1b8e99868178616c755a4dcef811f631326c65f6835ad491d1f2835
4
- data.tar.gz: 9d3499adf6025521d2683f4456e64b1cd27dd63722c231de8fab7aa47fe79973
3
+ metadata.gz: e946ea4ef470077763b56b2435a231a884ddede3c32f9bd09dde4fd912b15bfc
4
+ data.tar.gz: 80511a11e935c1e090be377db8180907835895d5507e8b4e88df6c2dee7d4f9a
5
5
  SHA512:
6
- metadata.gz: 46a8beb31cb6230dccdcdb36352dd05e705a3114d0b1b6e04b46b1a445aa1fe30249426c81be8a441f615c95fe633cc078bd70c030616cdc25ff4c50eb45ab76
7
- data.tar.gz: 300aeca29fa514e88535c4f60577f9a6e83446f195b76e7e15029ae912d0beb06c0f6f028b098e4662ab53fbf83fc8e675a920ef7c3269f1e501afa835ba127f
6
+ metadata.gz: a72d55869cbd272db4c6818cd8aadd3057021bf4b876c595ecb6c10d98008c7da98368189df23ad25297eaa68119c2c2cdc3efeb9b573812b9a200974458d703
7
+ data.tar.gz: 6710ac348b46e662a77ec202ec26944c3d0956a5b984546995444f352f661fefff3995c328ee6c7b2448137d690a7091db2b873584a277279f1c01e549c8a099
@@ -15,7 +15,7 @@ module Metanorma
15
15
  def inline_anchor_ref(node)
16
16
  noko do |xml|
17
17
  xml.bookmark nil, **attr_code(id: node.id)
18
- end.join
18
+ end
19
19
  end
20
20
 
21
21
  def inline_anchor_xref(node)
@@ -26,7 +26,7 @@ module Metanorma
26
26
  xml.xref **attr_code(attrs) do |x|
27
27
  x << c
28
28
  end
29
- end.join
29
+ end
30
30
  end
31
31
 
32
32
  def inline_anchor_xref_attrs(node)
@@ -83,7 +83,7 @@ module Metanorma
83
83
  xml.link **attr_code(attributes) do |l|
84
84
  l << contents
85
85
  end
86
- end.join
86
+ end
87
87
  end
88
88
 
89
89
  def inline_anchor_link_attrs(node)
@@ -103,7 +103,7 @@ module Metanorma
103
103
  xml.ref **attr_code(id: node.target || node.id) do |r|
104
104
  r << eref_contents
105
105
  end
106
- end.join
106
+ end
107
107
  end
108
108
 
109
109
  def inline_anchor_bibref_contents(node)
@@ -114,7 +114,7 @@ module Metanorma
114
114
  def inline_callout(node)
115
115
  noko do |xml|
116
116
  xml.callout node.text
117
- end.join
117
+ end
118
118
  end
119
119
 
120
120
  def inline_footnote(node)
@@ -124,7 +124,7 @@ module Metanorma
124
124
  xml.fn reference: @fn_number do |fn|
125
125
  fn.p { |p| p << node.text }
126
126
  end
127
- end.join
127
+ end
128
128
  end
129
129
  end
130
130
  end
@@ -90,7 +90,7 @@ module Metanorma
90
90
  )) do |ex|
91
91
  wrap_in_para(node, ex)
92
92
  end
93
- end.join("")
93
+ end
94
94
  end
95
95
 
96
96
  def example(node)
@@ -128,7 +128,7 @@ module Metanorma
128
128
  figure_title(node, ex)
129
129
  wrap_in_para(node, ex)
130
130
  end
131
- end.join("")
131
+ end
132
132
  end
133
133
 
134
134
  def example_attrs(node)
@@ -141,7 +141,7 @@ module Metanorma
141
141
  node.title.nil? or ex.name { |name| name << node.title }
142
142
  wrap_in_para(node, ex)
143
143
  end
144
- end.join("")
144
+ end
145
145
  end
146
146
 
147
147
  def para_attrs(node)
@@ -158,7 +158,7 @@ module Metanorma
158
158
  xml.p **para_attrs(node) do |xml_t|
159
159
  xml_t << node.content
160
160
  end
161
- end.join("")
161
+ end
162
162
  end
163
163
 
164
164
  def quote_attrs(node)
@@ -183,7 +183,7 @@ module Metanorma
183
183
  quote_attribution(node, q)
184
184
  wrap_in_para(node, q)
185
185
  end
186
- end.join("")
186
+ end
187
187
  end
188
188
 
189
189
  def listing_attrs(node)
@@ -17,7 +17,7 @@ module Metanorma
17
17
  figure_title(node, ex)
18
18
  ex << node.content
19
19
  end
20
- end.join("\n")
20
+ end
21
21
  end
22
22
 
23
23
  def figure_example(node)
@@ -26,7 +26,7 @@ module Metanorma
26
26
  node.title.nil? or ex.name { |name| name << node.title }
27
27
  wrap_in_para(node, ex)
28
28
  end
29
- end.join("")
29
+ end
30
30
  end
31
31
 
32
32
  def figure_title(node, out)
@@ -32,7 +32,7 @@ module Metanorma
32
32
  xml.review **sidebar_attrs(node) do |r|
33
33
  wrap_in_para(node, r)
34
34
  end
35
- end.join("")
35
+ end
36
36
  end
37
37
 
38
38
  def todo_attrs(node)
@@ -49,7 +49,7 @@ module Metanorma
49
49
  xml.review **todo_attrs(node) do |r|
50
50
  wrap_in_para(node, r)
51
51
  end
52
- end.join("")
52
+ end
53
53
  end
54
54
 
55
55
  def termnote(node)
@@ -57,7 +57,7 @@ module Metanorma
57
57
  xml.termnote **termnote_attrs(node) do |ex|
58
58
  wrap_in_para(node, ex)
59
59
  end
60
- end.join("")
60
+ end
61
61
  end
62
62
 
63
63
  def note(node)
@@ -67,7 +67,7 @@ module Metanorma
67
67
  xml.note **note_attrs(node) do |c|
68
68
  wrap_in_para(node, c)
69
69
  end
70
- end.join("")
70
+ end
71
71
  end
72
72
 
73
73
  def boilerplate_note(node)
@@ -101,7 +101,7 @@ module Metanorma
101
101
  node.title.nil? or a.name { |name| name << node.title }
102
102
  wrap_in_para(node, a)
103
103
  end
104
- end.join("")
104
+ end
105
105
  end
106
106
 
107
107
  def admonition_alternatives(node)
@@ -82,6 +82,7 @@ module Metanorma
82
82
  boilerplate_cleanup(xmldoc)
83
83
  toc_cleanup(xmldoc)
84
84
  smartquotes_cleanup(xmldoc)
85
+ linebreak_cleanup(xmldoc)
85
86
  variant_cleanup(xmldoc)
86
87
  para_cleanup(xmldoc)
87
88
  empty_element_cleanup(xmldoc)
@@ -137,7 +138,7 @@ module Metanorma
137
138
  end
138
139
 
139
140
  def element_name_cleanup(xmldoc)
140
- xmldoc.traverse { |n| n.name = n.name.gsub("_", "-") }
141
+ xmldoc.traverse { |n| n.name = n.name.tr("_", "-") }
141
142
  end
142
143
 
143
144
  # allows us to deal with doc relation localities,
@@ -10,7 +10,7 @@ module Metanorma
10
10
  def symbol_key(sym)
11
11
  @c.decode(asciimath_key(sym).text)
12
12
  .gsub(/[\[\]{}<>()]/, "").gsub(/\s/m, "")
13
- .gsub(/[[:punct:]]|[_^]/, ":\\0").gsub("`", "")
13
+ .gsub(/[[:punct:]]|[_^]/, ":\\0").delete("`")
14
14
  .gsub(/[0-9]+/, "þ\\0")
15
15
  .tr("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",
16
16
  "ABCFEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
@@ -46,7 +46,7 @@ module Metanorma
46
46
  %w(absent geographic-area).each do |a|
47
47
  dl_to_attrs(prev, dlist, a)
48
48
  end
49
- %w(field-of-application usage-info).reverse.each do |a|
49
+ %w(field-of-application usage-info).reverse_each do |a|
50
50
  dl_to_elems(prev.at("./expression"), prev, dlist, a)
51
51
  end
52
52
  end
@@ -78,7 +78,7 @@ module Metanorma
78
78
  end
79
79
 
80
80
  def term_dl_to_expression_name_metadata(prev, dlist)
81
- %w(abbreviation-type pronunciation).reverse.each do |a|
81
+ %w(abbreviation-type pronunciation).reverse_each do |a|
82
82
  dl_to_elems(prev.at("./expression/name"), prev, dlist, a)
83
83
  end
84
84
  g = dlist.at("./dt[text()='grammar']/following::dd//dl") and
@@ -89,7 +89,7 @@ module Metanorma
89
89
  prev.at(".//expression") or return
90
90
  prev.at(".//expression") << "<grammar><sentinel/></grammar>"
91
91
  %w(gender number isPreposition isParticiple isAdjective isAdverb isNoun
92
- grammar-value).reverse.each do |a|
92
+ grammar-value).reverse_each do |a|
93
93
  dl_to_elems(prev.at(".//expression/grammar/*"), prev.elements.last,
94
94
  dlist, a)
95
95
  end
@@ -11,6 +11,54 @@ module Metanorma
11
11
  text
12
12
  end
13
13
 
14
+ def ancestor_include?(elem, ancestors)
15
+ path = elem.path.gsub(/\[\d+\]/, "").split(%r{/})[1..-2]
16
+ !path.intersection(ancestors).empty?
17
+ end
18
+
19
+ def linebreak_cleanup(xmldoc)
20
+ xmldoc.traverse do |x|
21
+ x.text? && x.text.include?("\n") or next
22
+ ancestor_include?(x, PRESERVE_LINEBREAK_ELEMENTS) and next
23
+ ancestor_include?(x, STRIP_LINEBREAK_ELEMENTS) or next
24
+ x.replace(Metanorma::Utils
25
+ .line_sanitise(x.text.lines.map(&:rstrip)).join)
26
+ end
27
+ end
28
+
29
+ # process example/p, example/sourcecode, not example on its own:
30
+ # this is about stripping lines for blocks containing inline elems & text
31
+ def linebreak_cleanup(xmldoc)
32
+ xmldoc.xpath(STRIP_LINEBREAK_ELEMENTS.map { |e| "//#{e}" }.join(" | "))
33
+ .each do |b|
34
+ b.xpath(STRIP_LINEBREAK_ELEMENTS.map { |e| ".//#{e}" }.join(" | "))
35
+ .empty? or next
36
+ linebreak_cleanup_block(gather_text_for_linebreak_cleanup(b))
37
+ end
38
+ end
39
+
40
+ def linebreak_cleanup_block(block)
41
+ block.each_with_index do |e, i|
42
+ e[:skip] and next
43
+ lines = e[:text].lines.map(&:rstrip)
44
+ e[:last] or lines << block[i + 1][:text].lines.first # next token context
45
+ out = Metanorma::Utils.line_sanitise(lines)
46
+ e[:last] or out.pop
47
+ e[:elem].replace(out.join)
48
+ end
49
+ end
50
+
51
+ def gather_text_for_linebreak_cleanup(block)
52
+ x = block.xpath(".//text()").map do |e|
53
+ { elem: e, text: e.text,
54
+ skip: ancestor_include?(e, PRESERVE_LINEBREAK_ELEMENTS) }
55
+ end
56
+ x.empty? and return x
57
+ x.each { |e| e[:skip] ||= !e[:text].include?("\n") }
58
+ x[-1][:last] = true
59
+ x
60
+ end
61
+
14
62
  def smartquotes_cleanup(xmldoc)
15
63
  xmldoc.xpath("//date").each { |d| Metanorma::Utils::endash_date(d) }
16
64
  if @smartquotes then smartquotes_cleanup1(xmldoc)
@@ -37,10 +85,20 @@ module Metanorma
37
85
  %w(pre tt sourcecode stem asciimath figure bibdata passthrough
38
86
  identifier metanorma-extension).freeze
39
87
 
88
+ PRESERVE_LINEBREAK_ELEMENTS =
89
+ %w(pre sourcecode passthrough metanorma-extension).freeze
90
+
91
+ STRIP_LINEBREAK_ELEMENTS =
92
+ %w(title name variant-title figure example review admonition
93
+ note li th td dt dd p quote label annotation
94
+ preferred admitted related deprecates field-of-application
95
+ usage-info expression pronunciation grammar-value domain
96
+ definition termnote termexample modification description
97
+ newcontent floating-title).freeze
98
+
40
99
  def uninterrupt_quotes_around_xml_skip(elem)
41
100
  !(/\A['"]/.match?(elem.text) &&
42
- elem.previous.path.gsub(/\[\d+\]/, "").split(%r{/})[1..-2]
43
- .intersection(IGNORE_QUOTES_ELEMENTS).empty? &&
101
+ !ancestor_include?(elem.previous, IGNORE_QUOTES_ELEMENTS) &&
44
102
  ((elem.previous.text.strip.empty? &&
45
103
  !empty_tag_with_text_content?(elem.previous)) ||
46
104
  ignoretext?(elem.previous)))
@@ -69,7 +127,7 @@ module Metanorma
69
127
  abstract preferred admitted related deprecates field-of-application
70
128
  usage-info expression pronunciation grammar-value domain
71
129
  definition termnote termexample modification description
72
- newcontent floating-title tab).include? elem.name
130
+ newcontent floating-title tab review admonition annotation).include? elem.name
73
131
  end
74
132
 
75
133
  def empty_tag_with_text_content?(elem)
@@ -83,8 +141,9 @@ module Metanorma
83
141
  empty_tag_with_text_content?(x) and prev = "dummy"
84
142
  x.text? or next
85
143
 
86
- ancestors = x.path.gsub(/\[\d+\]/, "").split(%r{/})[1..-2]
87
- ancestors.intersection(IGNORE_QUOTES_ELEMENTS).empty? or next
144
+ # ancestors = x.path.gsub(/\[\d+\]/, "").split(%r{/})[1..-2]
145
+ # ancestors.intersection(IGNORE_QUOTES_ELEMENTS).empty? or next
146
+ ancestor_include?(x, IGNORE_QUOTES_ELEMENTS) and next
88
147
  dumb2smart_quotes1(x, prev)
89
148
  prev = x.text
90
149
  end
@@ -11,19 +11,19 @@ module Metanorma
11
11
  noko do |xml|
12
12
  xml << node.text
13
13
  xml.br
14
- end.join
14
+ end
15
15
  end
16
16
 
17
17
  def page_break(node)
18
18
  attrs = {}
19
19
  node.option?("landscape") and attrs[:orientation] = "landscape"
20
20
  node.option?("portrait") and attrs[:orientation] = "portrait"
21
- noko { |xml| xml.pagebreak **attr_code(attrs) }.join
21
+ noko { |xml| xml.pagebreak **attr_code(attrs) }
22
22
  end
23
23
 
24
24
  def thematic_break(_node)
25
25
  # noko(&:hr).join # Do not do this, noko blows up
26
- noko { |xml| xml.hr }.join # rubocop:disable Style/SymbolProc
26
+ noko { |xml| xml.hr } # rubocop:disable Style/SymbolProc
27
27
  end
28
28
 
29
29
  def latex_parse1(text, block)
@@ -102,7 +102,7 @@ module Metanorma
102
102
  xml << node.text
103
103
  end
104
104
  end
105
- end.join
105
+ end
106
106
  end
107
107
 
108
108
  def hash2styles(role)
@@ -146,7 +146,7 @@ module Metanorma
146
146
  def inline_image(node)
147
147
  noko do |xml|
148
148
  xml.image **image_attributes(node)
149
- end.join
149
+ end
150
150
  end
151
151
 
152
152
  def inline_indexterm(node)
@@ -154,7 +154,7 @@ module Metanorma
154
154
  node.type == :visible and xml << node.text
155
155
  terms = (node.attr("terms") || [node.text]).map { |x| xml_encode(x) }
156
156
  inline_indexterm1(xml, terms)
157
- end.join
157
+ end
158
158
  end
159
159
 
160
160
  def inline_indexterm1(xml, terms)
@@ -41,7 +41,7 @@ module Metanorma
41
41
  list_caption(node, xml_ul)
42
42
  node.items.each { |item| ul_li(xml_ul, item) }
43
43
  end
44
- end.join("")
44
+ end
45
45
  end
46
46
 
47
47
  def olist_style(style)
@@ -67,7 +67,7 @@ module Metanorma
67
67
  list_caption(node, xml_ol)
68
68
  node.items.each { |item| li(xml_ol, item) }
69
69
  end
70
- end.join("")
70
+ end
71
71
  end
72
72
 
73
73
  def dt(terms, xml_dl)
@@ -107,7 +107,7 @@ module Metanorma
107
107
  dd(dd, xml_dl)
108
108
  end
109
109
  end
110
- end.join("")
110
+ end
111
111
  end
112
112
 
113
113
  def colist(node)
@@ -117,7 +117,7 @@ module Metanorma
117
117
  xml_li.p { |p| p << item.text }
118
118
  end
119
119
  end
120
- end.join("")
120
+ end
121
121
  end
122
122
 
123
123
  def list_caption(node, out)
@@ -24,7 +24,7 @@ module Metanorma
24
24
 
25
25
  def references2xml(ret)
26
26
  out = ret.map do |b|
27
- b.nil? ? nil : noko { |xml| reference1out(b, xml) }.join
27
+ b.nil? ? nil : noko { |xml| reference1out(b, xml) }
28
28
  end
29
29
  out.map { |x| x.nil? ? nil : Nokogiri::XML(x).root }
30
30
  end
@@ -141,7 +141,7 @@ module Metanorma
141
141
  clause_parse(a, xml, node)
142
142
  end
143
143
  end
144
- end.join("\n")
144
+ end
145
145
  end
146
146
 
147
147
  def set_obligation(attrs, node)
@@ -162,7 +162,7 @@ module Metanorma
162
162
  end
163
163
  xml_abstract << node.content
164
164
  end
165
- end.join("\n")
165
+ end
166
166
  end
167
167
 
168
168
  def misccontainer_parse(_attrs, xml, node)
@@ -243,7 +243,7 @@ module Metanorma
243
243
  xml.floating_title **floating_title_attrs(node) do |xml_t|
244
244
  xml_t << node.title
245
245
  end
246
- end.join("\n")
246
+ end
247
247
  end
248
248
  end
249
249
  end
@@ -131,7 +131,7 @@ module Metanorma
131
131
  span[:surname] and return
132
132
  msg = "Missing surname: issue with bibliographic markup " \
133
133
  "in \"#{title}\": #{span}"
134
- @err << { msg: msg, fatal: true }
134
+ @err << { msg:, fatal: true }
135
135
  end
136
136
 
137
137
  def span_to_person(span, title)
@@ -170,7 +170,7 @@ module Metanorma
170
170
  seen_xref = Nokogiri::XML.fragment(matched[:xref])
171
171
  add_term_source(node, xml_t, seen_xref, matched)
172
172
  end
173
- end.join("")
173
+ end
174
174
  end
175
175
 
176
176
  def termdefinition(node)
@@ -178,7 +178,7 @@ module Metanorma
178
178
  xml.definition **attr_code(type: node.attr("type")) do |d|
179
179
  d << node.content
180
180
  end
181
- end.join("")
181
+ end
182
182
  end
183
183
  end
184
184
  end
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "2.9.2".freeze
22
+ VERSION = "2.9.3".freeze
23
23
  end
24
24
  end
@@ -32,12 +32,12 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency "asciidoctor", "~> 2.0.0"
33
33
  spec.add_dependency "crass", "~> 1.0.0"
34
34
  spec.add_dependency "iev", "~> 0.3.0"
35
- spec.add_dependency "isodoc", "~> 2.10.5"
35
+ spec.add_dependency "isodoc", "~> 2.11.0"
36
36
  spec.add_dependency "metanorma", ">= 1.6.0"
37
37
  spec.add_dependency "metanorma-plugin-datastruct", "~> 0.3.0"
38
38
  spec.add_dependency "metanorma-plugin-glossarist", "~> 0.2.0"
39
39
  spec.add_dependency "metanorma-plugin-lutaml", "~> 0.7.0"
40
- spec.add_dependency "metanorma-utils", "~> 1.9.0"
40
+ spec.add_dependency "metanorma-utils", "~> 1.10.0"
41
41
  spec.add_dependency "ruby-jing"
42
42
  # relaton-cli not just relaton, to avoid circular reference in metanorma
43
43
  spec.add_dependency "asciimath2unitsml", "~> 0.4.0"
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.9.2
4
+ version: 2.9.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: 2024-08-05 00:00:00.000000000 Z
11
+ date: 2024-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.10.5
75
+ version: 2.11.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 2.10.5
82
+ version: 2.11.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: metanorma
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 1.9.0
145
+ version: 1.10.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 1.9.0
152
+ version: 1.10.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: ruby-jing
155
155
  requirement: !ruby/object:Gem::Requirement