metanorma-standoc 2.6.1 → 2.6.2

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: 42b32b109ae4f5ac4505f2218a4d4c5768ad388ffb29d3ae292b61fab8923030
4
- data.tar.gz: aafef4197f9d88913ef52f8effacb515e54e94f456757758e9ac0bfe41b2656d
3
+ metadata.gz: bd044342634fd4dd1a67955a5f07785ae4762a0f63520e8254efe6e016853b1a
4
+ data.tar.gz: 89625dee3748cca3301727fc88650b0f916b8d2f60a258a9731ac09783c2465a
5
5
  SHA512:
6
- metadata.gz: 13a8345e82e041ebbefecddeea7ba719898b6997877891d76177872b672e9bce7d00c060bf98569b0acd49c0c3ba691a989032e3650066030cf99a86991b5cbb
7
- data.tar.gz: 37c1b235d071bb2d7b4f5ff8e73e3f5a3ca668c726245ea75002152bbd9931b07e67869dee8b0b6b8685e4480054f50244ddfa492cdd12275e30d27ec2d389e2
6
+ metadata.gz: 9958565ebd72f63b2a17af3f6cc89d5055d36f77ba15f4b80763ca64f3d45368b084e321ef05b0f49655943df029556a1ddd1c9cf27a7466299977b48aee57cc
7
+ data.tar.gz: 3979efde78ee18714f49a321ce89c51aa2039cc153863d118ddc788d610fae7788134688454bff075a9c95ace5bb097e5b24b169df9877f17a4321632b230b14
@@ -45,7 +45,7 @@ module Metanorma
45
45
  element_name_cleanup(xmldoc)
46
46
  ref_cleanup(xmldoc) # feeds: bibitem_cleanup
47
47
  note_cleanup(xmldoc)
48
- clausebefore_cleanup(xmldoc)
48
+ clausebefore_cleanup(xmldoc) # feeeds: floatingtitle_cleanup
49
49
  floatingtitle_cleanup(xmldoc)
50
50
  bibitem_cleanup(xmldoc) # feeds: normref_cleanup, biblio_cleanup,
51
51
  # reference_names, bpart_cleanup
@@ -86,16 +86,33 @@ module Metanorma
86
86
  end
87
87
 
88
88
  def termdef_boilerplate_insert(xmldoc, isodoc, once = false)
89
- xmldoc.xpath(self.class::TERM_CLAUSE).each do |f|
90
- f.at("./clause[@type = 'boilerplate'] | " \
91
- "./note[@type = 'boilerplate']") and next
92
- term_defs_boilerplate(f.at("./title"),
93
- xmldoc.xpath(".//termdocsource"),
94
- f.at(".//term"), f.at(".//p"), isodoc)
95
- once and break
89
+ if once
90
+ f = termdef_boilerplate_insert_location(xmldoc) and
91
+ termdef_boilerplate_insert1(f, xmldoc, isodoc)
92
+ else
93
+ xmldoc.xpath(self.class::TERM_CLAUSE).each do |f|
94
+ termdef_boilerplate_insert1(f, xmldoc, isodoc)
95
+ end
96
96
  end
97
97
  end
98
98
 
99
+ def termdef_boilerplate_insert_location(xmldoc)
100
+ f = xmldoc.at(self.class::TERM_CLAUSE)
101
+ root = xmldoc.at("//sections/terms | //sections/clause[.//terms]")
102
+ !f || !root and return f || root
103
+ f.at("./following::terms") and return root
104
+ f.at("./preceding-sibling::clause") and return root
105
+ f
106
+ end
107
+
108
+ def termdef_boilerplate_insert1(sect, xmldoc, isodoc)
109
+ sect.at("./clause[@type = 'boilerplate'] | " \
110
+ "./note[@type = 'boilerplate']") and return
111
+ term_defs_boilerplate(sect.at("./title"),
112
+ xmldoc.xpath(".//termdocsource"),
113
+ sect.at(".//term"), sect.at(".//p"), isodoc)
114
+ end
115
+
99
116
  def boilerplate_cleanup(xmldoc)
100
117
  isodoc = boilerplate_isodoc(xmldoc)
101
118
  termdef_boilerplate_cleanup(xmldoc)
@@ -178,8 +178,8 @@ module Metanorma
178
178
  end
179
179
 
180
180
  def clausebefore_cleanup(xmldoc)
181
- preface_clausebefore_cleanup(xmldoc)
182
181
  sections_clausebefore_cleanup(xmldoc)
182
+ preface_clausebefore_cleanup(xmldoc)
183
183
  end
184
184
 
185
185
  def preface_clausebefore_cleanup(xmldoc)
@@ -196,10 +196,20 @@ module Metanorma
196
196
  end
197
197
 
198
198
  def sections_clausebefore_cleanup(xmldoc)
199
- return unless xmldoc.at("//sections")
200
-
199
+ xmldoc.at("//sections") or return
201
200
  ins = insert_before(xmldoc, "//sections")
202
- xmldoc.xpath("//sections//*[@beforeclauses = 'true']").each do |x|
201
+ xmldoc.xpath("//sections//*[@beforeclauses = 'true']").reverse.each do |x|
202
+ x.delete("beforeclauses")
203
+ ins.previous = x.remove
204
+ end
205
+ endofpreface_clausebefore(xmldoc, ins)
206
+ end
207
+
208
+ # only move clausebefore notes at the very end of preface
209
+ def endofpreface_clausebefore(xmldoc, ins)
210
+ xmldoc.xpath("//preface//*[@beforeclauses = 'true']").reverse.each do |x|
211
+ textafternote = xmldoc.xpath("//preface//*") & x.xpath("./following::*")
212
+ textafternote.text.strip.empty? or break
203
213
  x.delete("beforeclauses")
204
214
  ins.previous = x.remove
205
215
  end
@@ -214,6 +224,7 @@ module Metanorma
214
224
  end
215
225
 
216
226
  def floatingtitle_cleanup(xmldoc)
227
+ pop_floating_title(xmldoc) # done again, after endofpreface_clausebefore
217
228
  floating_title_preface2sections(xmldoc)
218
229
  end
219
230
 
@@ -50,10 +50,30 @@ module Metanorma
50
50
  "[not(.//definitions[@type = 'symbols'])]".freeze
51
51
 
52
52
  def section_names_terms_cleanup(xml)
53
- replace_title(xml, "//definitions[@type = 'symbols']", @i18n&.symbols)
53
+ section_names_definitions(xml)
54
+ section_names_terms1_cleanup(xml)
55
+ end
56
+
57
+ def section_names_definitions(xml)
58
+ auto_name_definitions(xml) or return
59
+ replace_title(xml, "//definitions[@type = 'symbols']",
60
+ @i18n&.symbols)
54
61
  replace_title(xml, "//definitions[@type = 'abbreviated_terms']",
55
62
  @i18n&.abbrev)
56
- replace_title(xml, "//definitions[not(@type)]", @i18n&.symbolsabbrev)
63
+ replace_title(xml, "//definitions[not(@type)]",
64
+ @i18n&.symbolsabbrev)
65
+ end
66
+
67
+ def auto_name_definitions(xml)
68
+ xml.xpath("//definitions[@type = 'symbols']").size > 1 and return false
69
+ xml.xpath("//definitions[@type = 'abbreviated_terms']").size > 1 and
70
+ return false
71
+ xml.xpath("//definitions[not(@type)]").size > 1 and return false
72
+ true
73
+ end
74
+
75
+ def section_names_terms1_cleanup(xml)
76
+ auto_name_terms(xml) or return
57
77
  replace_title(xml, "//terms#{SYMnoABBR} | //clause[.//terms]#{SYMnoABBR}",
58
78
  @i18n&.termsdefsymbols, true)
59
79
  replace_title(xml, "//terms#{ABBRnoSYM} | //clause[.//terms]#{ABBRnoSYM}",
@@ -69,6 +89,54 @@ module Metanorma
69
89
  )
70
90
  end
71
91
 
92
+ # do not auto-name terms sections if there are terms subclauses
93
+ # not covered by the auto titles,
94
+ # or if more than one title is covered by an auto title
95
+ def auto_name_terms(xml)
96
+ n = xml.at("//terms | //clause[.//terms]")
97
+ out = terms_subclauses(n)
98
+ .each_with_object({ term: 0, sna: 0, ans: 0, sa: 0, nsa: 0,
99
+ tsna: 0, tans: 0, tsa: 0, tnsa: 0,
100
+ termdef: 0, other: 0 }) do |x, m|
101
+ terms_subclause_type_tally(x, m, n)
102
+ end
103
+ out.delete(:parent)
104
+ !out.values.detect { |x| x > 1 } && out[:other].zero?
105
+ end
106
+
107
+ def terms_subclauses(node)
108
+ legal = %w(terms definitions clause)
109
+ [node, node&.elements].compact.flatten
110
+ .select do |x|
111
+ legal.include?(x.name) &&
112
+ !(x.name == "clause" && x["type"] == "boilerplate")
113
+ end
114
+ end
115
+
116
+ def terms_subclause_type_tally(node, m, parent)
117
+ sym = if (node.at(".//term") && !node.at(".//definitions")) ||
118
+ (node.name == "terms" && !node.at(".//term"))
119
+ unless m[:parent] == :term # don't count Term > Term twice
120
+ :term
121
+ end
122
+ elsif node.at(".//term") && node.at("./self::*#{SYMnoABBR}") then :tsna
123
+ elsif node.at(".//term") && node.at("./self::*#{ABBRnoSYM}") then :tans
124
+ elsif node.at(".//term") && node.at("./self::*#{SYMABBR}") then :tsa
125
+ elsif node.at(".//term") && node.at("./self::*#{NO_SYMABBR}") then :tnsa
126
+ elsif node.at("./self::*#{SYMnoABBR}") then :sna
127
+ elsif node.at("./self::*#{ABBRnoSYM}") then :ans
128
+ elsif node.at("./self::*#{SYMABBR}") then :sa
129
+ elsif node.at("./self::*#{NO_SYMABBR}") then :nsa
130
+ elsif node.name == "definitions" # ignore
131
+ elsif node == parent && node.at(".//term") &&
132
+ node.at(".//definitions")
133
+ :termdef
134
+ else :other
135
+ end
136
+ node == parent and m[:parent] = sym
137
+ sym and m[sym] += 1
138
+ end
139
+
72
140
  SECTION_CONTAINERS = %w(foreword introduction acknowledgements abstract
73
141
  clause clause references terms definitions annex
74
142
  appendix).freeze
@@ -63,6 +63,7 @@ module Metanorma
63
63
  treeprocessor Metanorma::Standoc::ToDoInlineAdmonitionBlock
64
64
  block Metanorma::Standoc::PlantUMLBlockMacro
65
65
  block Metanorma::Standoc::PseudocodeBlockMacro
66
+ block_macro Metanorma::Standoc::ColumnBreakBlockMacro
66
67
  end
67
68
 
68
69
  include ::Asciidoctor::Converter
@@ -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.5 -->
20
+ <!-- VERSION v1.2.6 -->
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">
@@ -1013,6 +1013,14 @@
1013
1013
  </oneOrMore>
1014
1014
  </element>
1015
1015
  </define>
1016
+ <define name="BasicBlock" combine="choice">
1017
+ <ref name="columnbreak"/>
1018
+ </define>
1019
+ <define name="columnbreak">
1020
+ <element name="columnbreak">
1021
+ <empty/>
1022
+ </element>
1023
+ </define>
1016
1024
  <define name="MultilingualRenderingType">
1017
1025
  <choice>
1018
1026
  <value>common</value>
@@ -61,6 +61,15 @@ module Metanorma
61
61
  end
62
62
  end
63
63
 
64
+ class ColumnBreakBlockMacro < Asciidoctor::Extensions::BlockMacroProcessor
65
+ use_dsl
66
+ named :columnbreak
67
+
68
+ def process(parent, _reader, _attrs)
69
+ create_pass_block parent, "<columnbreak/>", {}, subs: nil
70
+ end
71
+ end
72
+
64
73
  # refer https://github.com/asciidoctor/asciidoctor/blob/main/lib/asciidoctor/substitutors.rb
65
74
  # Not using TreeProcessor because that is still too close to
66
75
  # inline expressions being processed on access (e.g. titles)
@@ -32,6 +32,7 @@ module Metanorma
32
32
  end
33
33
 
34
34
  def output(isodoc_node, inname, outname, format, options = {})
35
+ options_preprocess(options)
35
36
  case format
36
37
  when :html
37
38
  options = options
@@ -142,7 +142,12 @@ module Metanorma
142
142
  nil
143
143
  end
144
144
 
145
+ def supply_ref_prefix(ret)
146
+ ret
147
+ end
148
+
145
149
  def fetch_ref1(code, year, opts)
150
+ code = supply_ref_prefix(code)
146
151
  if opts[:localfile]
147
152
  @local_bibdb.get(code, opts[:localfile])
148
153
  else @bibdb&.fetch(code, year, opts)
@@ -156,6 +161,7 @@ module Metanorma
156
161
  end
157
162
 
158
163
  def fetch_ref_async(ref, idx, res)
164
+ ref[:code] &&= supply_ref_prefix(ref[:code])
159
165
  if unfetchable_ref_code?(ref)
160
166
  res << [ref, idx, nil]
161
167
  idx += 1
@@ -91,7 +91,7 @@ module Metanorma
91
91
  pdf-allow-print pdf-allow-print-hq
92
92
  pdf-allow-access-content pdf-encrypt-metadata fonts
93
93
  font-license-agreement).each_with_object({}) do |x, m|
94
- m[x.gsub(/-/, "").to_i] = node.attr(x)
94
+ m[x.gsub("-", "").to_i] = node.attr(x)
95
95
  end
96
96
 
97
97
  pdf_options.merge(fonts_manifest_option(node) || {})
@@ -102,7 +102,9 @@ module Metanorma
102
102
  end
103
103
 
104
104
  def presentation_xml_converter(node)
105
- IsoDoc::PresentationXMLConvert.new(html_extract_attributes(node))
105
+ IsoDoc::PresentationXMLConvert
106
+ .new(html_extract_attributes(node)
107
+ .merge(output_formats: ::Metanorma::Standoc::Processor.new.output_formats) )
106
108
  end
107
109
 
108
110
  def default_fonts(node)
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "2.6.1".freeze
22
+ VERSION = "2.6.2".freeze
23
23
  end
24
24
  end
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.6.1
4
+ version: 2.6.2
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-10-09 00:00:00.000000000 Z
11
+ date: 2023-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable