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 +4 -4
- data/lib/metanorma/standoc/cleanup.rb +1 -1
- data/lib/metanorma/standoc/cleanup_boilerplate.rb +24 -7
- data/lib/metanorma/standoc/cleanup_section.rb +15 -4
- data/lib/metanorma/standoc/cleanup_section_names.rb +70 -2
- data/lib/metanorma/standoc/converter.rb +1 -0
- data/lib/metanorma/standoc/isodoc.rng +9 -1
- data/lib/metanorma/standoc/macros.rb +9 -0
- data/lib/metanorma/standoc/processor.rb +1 -0
- data/lib/metanorma/standoc/ref_queue.rb +6 -0
- data/lib/metanorma/standoc/render.rb +4 -2
- data/lib/metanorma/standoc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd044342634fd4dd1a67955a5f07785ae4762a0f63520e8254efe6e016853b1a
|
4
|
+
data.tar.gz: 89625dee3748cca3301727fc88650b0f916b8d2f60a258a9731ac09783c2465a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
90
|
-
f
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
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
|
-
|
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
|
-
|
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)]",
|
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.
|
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)
|
@@ -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(
|
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
|
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)
|
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.
|
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-
|
11
|
+
date: 2023-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|