metanorma-standoc 1.3.16 → 1.3.17
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 +4 -4
- data/lib/asciidoctor/standoc/base.rb +8 -6
- data/lib/asciidoctor/standoc/inline.rb +4 -1
- data/lib/asciidoctor/standoc/isodoc.rng +1 -1
- data/lib/asciidoctor/standoc/macros.rb +24 -7
- data/lib/asciidoctor/standoc/section.rb +36 -20
- data/lib/metanorma/standoc/version.rb +1 -1
- data/spec/asciidoctor-standoc/base_spec.rb +2 -2
- data/spec/asciidoctor-standoc/blocks_spec.rb +1 -1
- data/spec/asciidoctor-standoc/cleanup_spec.rb +2 -2
- data/spec/asciidoctor-standoc/inline_spec.rb +11 -2
- data/spec/asciidoctor-standoc/macros_spec.rb +2 -2
- data/spec/asciidoctor-standoc/refs_spec.rb +1 -1
- data/spec/asciidoctor-standoc/section_spec.rb +29 -0
- data/spec/spec_helper.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: 4647d414467e7326fb0d0d30ee3ac79ad4f3f4a8a2e7d4ffa0948db689781db3
|
4
|
+
data.tar.gz: ca6d428a27678a89ff8188162046216a7f4f0efe450488d36b158319a91e45a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97847d11b89413d948324766bda68e416defdb35fd6fed828d6e3bcda8e67fe626a3d14054edce3d580af83c465c786b1a1c11e24585d15054d0cb01d9952bc2
|
7
|
+
data.tar.gz: 30e844b147945676fa516f98955f878d6b9442c3875f3edcea6ef27a6908a15bc15fedcd26a76619c3068f9f534820db419704abdcb7d2e5562a68dc4a77f9e8
|
@@ -4,7 +4,6 @@ require "htmlentities"
|
|
4
4
|
require "json"
|
5
5
|
require "pathname"
|
6
6
|
require "open-uri"
|
7
|
-
require "pp"
|
8
7
|
require "isodoc"
|
9
8
|
require "relaton"
|
10
9
|
require "fileutils"
|
@@ -12,6 +11,9 @@ require "fileutils"
|
|
12
11
|
module Asciidoctor
|
13
12
|
module Standoc
|
14
13
|
module Base
|
14
|
+
XML_ROOT_TAG = "standard-document".freeze
|
15
|
+
XML_NAMESPACE = "https://www.metanorma.com/ns/standoc".freeze
|
16
|
+
|
15
17
|
Asciidoctor::Extensions.register do
|
16
18
|
inline_macro Asciidoctor::Standoc::AltTermInlineMacro
|
17
19
|
inline_macro Asciidoctor::Standoc::DeprecatedTermInlineMacro
|
@@ -159,17 +161,18 @@ module Asciidoctor
|
|
159
161
|
end
|
160
162
|
|
161
163
|
def makexml1(node)
|
162
|
-
result = ["<?xml version='1.0' encoding='UTF-8'
|
164
|
+
result = ["<?xml version='1.0' encoding='UTF-8'?>",
|
165
|
+
"<#{self.class::XML_ROOT_TAG}>"]
|
163
166
|
result << noko { |ixml| front node, ixml }
|
164
167
|
result << noko { |ixml| middle node, ixml }
|
165
|
-
result << "
|
168
|
+
result << "</#{self.class::XML_ROOT_TAG}>"
|
166
169
|
textcleanup(result)
|
167
170
|
end
|
168
171
|
|
169
172
|
def makexml(node)
|
170
173
|
result = makexml1(node)
|
171
174
|
ret1 = cleanup(Nokogiri::XML(result))
|
172
|
-
ret1.root.add_namespace(nil,
|
175
|
+
ret1.root.add_namespace(nil, self.class::XML_NAMESPACE)
|
173
176
|
validate(ret1) unless @novalid
|
174
177
|
ret1
|
175
178
|
end
|
@@ -219,9 +222,8 @@ module Asciidoctor
|
|
219
222
|
|
220
223
|
def extract_termsource_refs(text, node)
|
221
224
|
matched = TERM_REFERENCE_RE.match text
|
222
|
-
|
225
|
+
matched.nil? and
|
223
226
|
Utils::warning(node, "term reference not in expected format", text)
|
224
|
-
end
|
225
227
|
matched
|
226
228
|
end
|
227
229
|
|
@@ -89,7 +89,10 @@ module Asciidoctor
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def page_break(node)
|
92
|
-
|
92
|
+
attrs = {}
|
93
|
+
node.option?("landscape") and attrs[:orientation] = "landscape"
|
94
|
+
node.option?("portrait") and attrs[:orientation] = "portrait"
|
95
|
+
noko { |xml| xml.pagebreak **attr_code(attrs)}.join
|
93
96
|
end
|
94
97
|
|
95
98
|
def thematic_break(_node)
|
@@ -17,7 +17,7 @@
|
|
17
17
|
these elements; we just want one namespace for any child grammars
|
18
18
|
of this.
|
19
19
|
-->
|
20
|
-
<grammar ns="
|
20
|
+
<grammar ns="https://www.metanorma.com/ns/standoc" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
21
21
|
<include href="reqt.rng"/>
|
22
22
|
<!-- include "biblio.rnc" { } -->
|
23
23
|
<include href="basicdoc.rng">
|
@@ -182,19 +182,35 @@ module Asciidoctor
|
|
182
182
|
end
|
183
183
|
|
184
184
|
# if no :imagesdir: leave image file in plantuml
|
185
|
-
# sleep need for windows because dot works in separate process and
|
186
|
-
# plantuml process may finish earlier then dot, as result png file
|
185
|
+
# sleep need for windows because dot works in separate process and
|
186
|
+
# plantuml process may finish earlier then dot, as result png file
|
187
187
|
# maybe not created yet after plantuml finish
|
188
188
|
def self.generate_file parent, reader
|
189
189
|
localdir = Utils::localdir(parent.document)
|
190
|
+
|
191
|
+
imagesdir = parent.document.attr('imagesdir')
|
190
192
|
umlfile, outfile = save_plantuml parent, reader, localdir
|
193
|
+
|
194
|
+
# TODO: this should raise failure if there is no image output!!
|
191
195
|
run(umlfile, outfile) or return
|
192
|
-
path = Pathname.new(localdir) + "plantuml"
|
193
|
-
path.mkpath()
|
194
|
-
File.exist?(path) && File.writable?(path) or return
|
195
|
-
FileUtils.cp outfile, path
|
196
196
|
umlfile.unlink
|
197
|
-
|
197
|
+
|
198
|
+
path = Pathname.new(localdir) + (imagesdir || "plantuml")
|
199
|
+
path.mkpath
|
200
|
+
|
201
|
+
# TODO: this should raise failure if the destination path already exists!
|
202
|
+
File.exist?(path) or return
|
203
|
+
|
204
|
+
# TODO: this should raise failure if the destination path is not writable!
|
205
|
+
File.writable?(path) or return
|
206
|
+
|
207
|
+
# Warning for Heisenbug: metanorma/metanorma-standoc#187
|
208
|
+
# Windows Ruby 2.4 will crash if a Tempfile is "mv"ed.
|
209
|
+
# This is why we need to copy and then unlink.
|
210
|
+
filename = File.basename(outfile.to_s)
|
211
|
+
FileUtils.cp(outfile, path) && outfile.unlink
|
212
|
+
|
213
|
+
imagesdir ? filename : File.join(path, filename)
|
198
214
|
end
|
199
215
|
|
200
216
|
def self.save_plantuml parent, reader, localdir
|
@@ -225,6 +241,7 @@ module Asciidoctor
|
|
225
241
|
parse_content_as :raw
|
226
242
|
|
227
243
|
def abort(parent, reader, attrs, msg)
|
244
|
+
# TODO: Abort should really raise an error
|
228
245
|
warn msg
|
229
246
|
attrs["language"] = "plantuml"
|
230
247
|
create_listing_block parent, reader.source, attrs.reject { |k, v| k == 1 }
|
@@ -20,15 +20,34 @@ module Asciidoctor
|
|
20
20
|
@norm_ref
|
21
21
|
end
|
22
22
|
|
23
|
-
def sectiontype(node)
|
23
|
+
def sectiontype(node, level = true)
|
24
24
|
ret = node&.attr("heading")&.downcase ||
|
25
25
|
node.title.gsub(/<[^>]+>/, "").downcase
|
26
|
-
|
27
|
-
|
28
|
-
return nil unless node.level == 1
|
26
|
+
ret1 = sectiontype_streamline(ret)
|
27
|
+
return ret1 if "symbols and abbreviated terms" == ret1
|
28
|
+
return nil unless !level || node.level == 1
|
29
29
|
return nil if @seen_headers.include? ret
|
30
30
|
@seen_headers << ret
|
31
|
-
|
31
|
+
ret1
|
32
|
+
end
|
33
|
+
|
34
|
+
def sectiontype_streamline(ret)
|
35
|
+
case ret
|
36
|
+
when "terms and definitions",
|
37
|
+
"terms, definitions, symbols and abbreviated terms",
|
38
|
+
"terms, definitions, symbols and abbreviations",
|
39
|
+
"terms, definitions and symbols",
|
40
|
+
"terms, definitions and abbreviations",
|
41
|
+
"terms, definitions and abbreviated terms"
|
42
|
+
"terms and definitions"
|
43
|
+
when "symbols and abbreviated terms",
|
44
|
+
"symbols",
|
45
|
+
"abbreviated terms",
|
46
|
+
"abbreviations"
|
47
|
+
"symbols and abbreviated terms"
|
48
|
+
else
|
49
|
+
ret
|
50
|
+
end
|
32
51
|
end
|
33
52
|
|
34
53
|
def section_attributes(node)
|
@@ -43,19 +62,11 @@ module Asciidoctor
|
|
43
62
|
case sectiontype(node)
|
44
63
|
when "introduction" then introduction_parse(a, xml, node)
|
45
64
|
when "normative references" then norm_ref_parse(a, xml, node)
|
46
|
-
when "terms and definitions"
|
47
|
-
"terms, definitions, symbols and abbreviated terms",
|
48
|
-
"terms, definitions, symbols and abbreviations",
|
49
|
-
"terms, definitions and symbols",
|
50
|
-
"terms, definitions and abbreviations",
|
51
|
-
"terms, definitions and abbreviated terms"
|
65
|
+
when "terms and definitions"
|
52
66
|
@term_def = true
|
53
67
|
term_def_parse(a, xml, node, true)
|
54
68
|
@term_def = false
|
55
|
-
when "symbols and abbreviated terms"
|
56
|
-
"symbols",
|
57
|
-
"abbreviated terms",
|
58
|
-
"abbreviations"
|
69
|
+
when "symbols and abbreviated terms"
|
59
70
|
symbols_parse(a, xml, node)
|
60
71
|
when "bibliography" then bibliography_parse(a, xml, node)
|
61
72
|
else
|
@@ -139,9 +150,9 @@ module Asciidoctor
|
|
139
150
|
@definitions = true
|
140
151
|
end
|
141
152
|
|
142
|
-
def symbols_parse(
|
143
|
-
node.role == "nonterm" and return nonterm_symbols_parse(
|
144
|
-
xml.definitions **attr_code(
|
153
|
+
def symbols_parse(attr, xml, node)
|
154
|
+
node.role == "nonterm" and return nonterm_symbols_parse(attr, xml, node)
|
155
|
+
xml.definitions **attr_code(attr) do |xml_section|
|
145
156
|
xml_section.title { |t| t << node.title }
|
146
157
|
defs = @definitions
|
147
158
|
termdefs = @term_def
|
@@ -164,13 +175,18 @@ module Asciidoctor
|
|
164
175
|
|
165
176
|
# subclause contains subclauses
|
166
177
|
def term_def_subclause_parse(attrs, xml, node)
|
167
|
-
node.role == "nonterm"
|
178
|
+
node.role == "nonterm" ||
|
179
|
+
sectiontype(node, false) == "terms and definitions" and
|
168
180
|
return nonterm_term_def_subclause_parse(attrs, xml, node)
|
169
181
|
return symbols_parse(attrs, xml, node) if @definitions
|
170
182
|
sub = node.find_by(context: :section) { |s| s.level == node.level + 1 }
|
171
183
|
sub.empty? || (return term_def_parse(attrs, xml, node, false))
|
172
|
-
|
184
|
+
sectiontype(node, false) == "symbols and abbreviated terms" and
|
173
185
|
(return symbols_parse(attrs, xml, node))
|
186
|
+
term_def_subclause_parse1(attrs, xml, node)
|
187
|
+
end
|
188
|
+
|
189
|
+
def term_def_subclause_parse1(attrs, xml, node)
|
174
190
|
xml.term **attr_code(attrs) do |xml_section|
|
175
191
|
xml_section.preferred { |name| name << node.title }
|
176
192
|
xml_section << node.content
|
@@ -106,7 +106,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
106
106
|
:keywords: a, b, c
|
107
107
|
INPUT
|
108
108
|
<?xml version="1.0" encoding="UTF-8"?>
|
109
|
-
<standard-document xmlns="
|
109
|
+
<standard-document xmlns="https://www.metanorma.com/ns/standoc">
|
110
110
|
<bibdata type="standard">
|
111
111
|
<title language="en" format="text/plain">Main Title — Title</title>
|
112
112
|
<docidentifier>1000-1</docidentifier>
|
@@ -315,7 +315,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
315
315
|
== Clause 1
|
316
316
|
INPUT
|
317
317
|
<?xml version="1.0" encoding="UTF-8"?>
|
318
|
-
<standard-document xmlns="
|
318
|
+
<standard-document xmlns="https://www.metanorma.com/ns/standoc">
|
319
319
|
<bibdata type="standard">
|
320
320
|
<title language="en" format="text/plain">Document title</title>
|
321
321
|
<title language="eo" format="text/plain">Dokumenttitolo</title>
|
@@ -273,7 +273,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
273
273
|
For further information on the Foreword, see *ISO/IEC Directives, Part 2, 2016, Clause 12.*
|
274
274
|
****
|
275
275
|
INPUT
|
276
|
-
<standard-document xmlns="
|
276
|
+
<standard-document xmlns="https://www.metanorma.com/ns/standoc">
|
277
277
|
<bibdata type="standard">
|
278
278
|
<title language="en" format="text/plain">Document title</title>
|
279
279
|
|
@@ -1402,7 +1402,7 @@ it "removes bibdata bibitem IDs" do
|
|
1402
1402
|
|
1403
1403
|
INPUT
|
1404
1404
|
<?xml version='1.0' encoding='UTF-8'?>
|
1405
|
-
<standard-document xmlns='
|
1405
|
+
<standard-document xmlns='https://www.metanorma.com/ns/standoc'>
|
1406
1406
|
<bibdata type='standard'>
|
1407
1407
|
<title language='en' format='text/plain'>Document title</title>
|
1408
1408
|
<language>en</language>
|
@@ -1448,7 +1448,7 @@ it "imports boilerplate file" do
|
|
1448
1448
|
== Clause 1
|
1449
1449
|
|
1450
1450
|
INPUT
|
1451
|
-
<standard-document xmlns='
|
1451
|
+
<standard-document xmlns='https://www.metanorma.com/ns/standoc'>
|
1452
1452
|
<bibdata type='standard'>
|
1453
1453
|
<title language='en' format='text/plain'>Document title</title>
|
1454
1454
|
<language>en</language>
|
@@ -10,7 +10,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
10
10
|
text, including **__nest__**ed markup.
|
11
11
|
INPUT
|
12
12
|
<?xml version="1.0" encoding="UTF-8"?>
|
13
|
-
<standard-document xmlns="
|
13
|
+
<standard-document xmlns="https://www.metanorma.com/ns/standoc">
|
14
14
|
<bibdata type="standard">
|
15
15
|
<title language="en" format="text/plain">Document title</title>
|
16
16
|
<language>en</language>
|
@@ -136,12 +136,21 @@ text, including <strong><em>nest</em></strong>ed markup.</p>
|
|
136
136
|
'''
|
137
137
|
|
138
138
|
<<<
|
139
|
+
|
140
|
+
[%landscape]
|
141
|
+
<<<
|
142
|
+
|
143
|
+
[%portrait]
|
144
|
+
<<<
|
139
145
|
INPUT
|
140
146
|
#{BLANK_HDR}
|
141
147
|
<sections><p id="_">Line break<br/>
|
142
148
|
line break</p>
|
143
149
|
<hr/>
|
144
|
-
<pagebreak
|
150
|
+
<pagebreak/>
|
151
|
+
<pagebreak orientation="landscape"/>
|
152
|
+
<pagebreak orientation="portrait"/>
|
153
|
+
</sections>
|
145
154
|
</standard-document>
|
146
155
|
OUTPUT
|
147
156
|
end
|
@@ -254,7 +254,7 @@ OUTPUT
|
|
254
254
|
end
|
255
255
|
|
256
256
|
it "processes the PlantUML macro" do
|
257
|
-
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)).gsub(%r{plantuml/plantuml[
|
257
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)).gsub(%r{plantuml/plantuml[^./]+\.}, "plantuml/_."))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
258
258
|
#{ASCIIDOC_BLANK_HDR}
|
259
259
|
|
260
260
|
[plantuml]
|
@@ -305,7 +305,7 @@ OUTPUT
|
|
305
305
|
end
|
306
306
|
|
307
307
|
it "processes the PlantUML macro with imagesdir" do
|
308
|
-
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)).gsub(%r{spec/assets/[
|
308
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)).gsub(%r{spec/assets/[^./]+\.}, "spec/assets/_."))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
309
309
|
= Document title
|
310
310
|
Author
|
311
311
|
:docfile: test.adoc
|
@@ -1085,7 +1085,7 @@ OUTPUT
|
|
1085
1085
|
* [[[iso124,(1)ISO 123]]] _Standard_
|
1086
1086
|
INPUT
|
1087
1087
|
<?xml version="1.0" encoding="UTF-8"?>
|
1088
|
-
<standard-document xmlns="
|
1088
|
+
<standard-document xmlns="https://www.metanorma.com/ns/standoc">
|
1089
1089
|
<bibdata type="standard">
|
1090
1090
|
<title language="en" format="text/plain">Document title</title>
|
1091
1091
|
<language>en</language>
|
@@ -561,6 +561,35 @@ RSpec.describe Asciidoctor::Standoc do
|
|
561
561
|
OUTPUT
|
562
562
|
end
|
563
563
|
|
564
|
+
it "processes terminal nodes in terms with term subsection names" do
|
565
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
566
|
+
#{ASCIIDOC_BLANK_HDR}
|
567
|
+
|
568
|
+
== Terms, definitions, symbols and abbreviated terms
|
569
|
+
|
570
|
+
=== Terms and definitions
|
571
|
+
|
572
|
+
=== Symbols
|
573
|
+
|
574
|
+
INPUT
|
575
|
+
#{BLANK_HDR}
|
576
|
+
<sections>
|
577
|
+
<terms id='_' obligation='normative'>
|
578
|
+
<title>Terms, definitions, symbols and abbreviated terms</title>
|
579
|
+
<p id='_'>No terms and definitions are listed in this document.</p>
|
580
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
581
|
+
<title>Terms and definitions</title>
|
582
|
+
</clause>
|
583
|
+
<definitions id='_'>
|
584
|
+
<title>Symbols</title>
|
585
|
+
</definitions>
|
586
|
+
</terms>
|
587
|
+
</sections>
|
588
|
+
</standard-document>
|
589
|
+
OUTPUT
|
590
|
+
end
|
591
|
+
|
592
|
+
|
564
593
|
it "processes terms & definitions with external source" do
|
565
594
|
expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", backend: :standoc, header_footer: true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
566
595
|
#{ASCIIDOC_BLANK_HDR}
|
data/spec/spec_helper.rb
CHANGED
@@ -128,7 +128,7 @@ HDR
|
|
128
128
|
|
129
129
|
BLANK_HDR = <<~"HDR"
|
130
130
|
<?xml version="1.0" encoding="UTF-8"?>
|
131
|
-
<standard-document xmlns="
|
131
|
+
<standard-document xmlns="https://www.metanorma.com/ns/standoc">
|
132
132
|
<bibdata type="standard">
|
133
133
|
<title language="en" format="text/plain">Document title</title>
|
134
134
|
<language>en</language>
|
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: 1.3.
|
4
|
+
version: 1.3.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|