metanorma-standoc 1.3.16 → 1.3.17
Sign up to get free protection for your applications and to get access to all the features.
- 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
|