metanorma-standoc 2.0.1 → 2.0.2
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/metanorma/standoc/biblio.rng +2 -2
- data/lib/metanorma/standoc/cleanup_text.rb +0 -22
- data/lib/metanorma/standoc/converter.rb +1 -0
- data/lib/metanorma/standoc/isodoc.rng +69 -1
- data/lib/metanorma/standoc/macros.rb +1 -0
- data/lib/metanorma/standoc/macros_embed.rb +72 -0
- data/lib/metanorma/standoc/version.rb +1 -1
- data/spec/assets/a1.adoc +8 -0
- data/spec/assets/a2.adoc +8 -0
- data/spec/assets/a3.adoc +9 -0
- data/spec/assets/a4.adoc +4 -0
- data/spec/metanorma/macros_spec.rb +89 -0
- data/spec/metanorma/refs_spec.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9031c28646f9cd9a481ad67911f2f0f7e5bd058368f80888a788753e5f63fa3
|
4
|
+
data.tar.gz: 25b16459f351f266f19b2f00d70b5bf7f6f5c95325a0d61d43fbe5f3fa518802
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 885e62405f3198482ffd7e152b25bef8ab09fc227a8107984297e8fa15b64552b2e745f4ce5e1d60dd37df6dc5cf5c505fb9acfeedd1bdc4ef77954e01218893
|
7
|
+
data.tar.gz: 69cac251a0696b46dd25f37fb23828780e1945e57464e829c91ab5d88ac481311d130c4ff0e670ee89d56fd998eff4ea48e3c5a0c4b24c514021431fb785d852
|
@@ -28,28 +28,6 @@ module Metanorma
|
|
28
28
|
end
|
29
29
|
|
30
30
|
# "abc<tag/>", def => "abc",<tag/> def
|
31
|
-
=begin
|
32
|
-
def uninterrupt_quotes_around_xml(xmldoc)
|
33
|
-
xmldoc.xpath("//*[following::text()[1]"\
|
34
|
-
"[starts-with(., '\"') or starts-with(., \"'\")]]")
|
35
|
-
.each do |x|
|
36
|
-
next if !x.ancestors("pre, tt, sourcecode, stem, figure").empty?
|
37
|
-
|
38
|
-
uninterrupt_quotes_around_xml1(x)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
=end
|
42
|
-
=begin
|
43
|
-
def uninterrupt_quotes_around_xml(xmldoc)
|
44
|
-
xmldoc.traverse do |n|
|
45
|
-
next unless n.element? && n&.next&.text? &&
|
46
|
-
n.ancestors("pre, tt, sourcecode, stem, figure").empty?
|
47
|
-
next unless /^['"]/.match?(n.next.text)
|
48
|
-
|
49
|
-
uninterrupt_quotes_around_xml1(n)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
=end
|
53
31
|
def uninterrupt_quotes_around_xml(xmldoc)
|
54
32
|
xmldoc.traverse do |n|
|
55
33
|
next unless n.text? && n&.previous&.element?
|
@@ -61,6 +61,7 @@ module Metanorma
|
|
61
61
|
block Metanorma::Standoc::PlantUMLBlockMacro
|
62
62
|
block Metanorma::Plugin::Lutaml::LutamlDiagramBlock
|
63
63
|
block Metanorma::Standoc::PseudocodeBlockMacro
|
64
|
+
preprocessor Metanorma::Standoc::EmbedIncludeProcessor
|
64
65
|
end
|
65
66
|
|
66
67
|
include ::Asciidoctor::Converter
|
@@ -32,6 +32,43 @@
|
|
32
32
|
<ref name="DocumentType"/>
|
33
33
|
</element>
|
34
34
|
</define>
|
35
|
+
<define name="index">
|
36
|
+
<element name="index">
|
37
|
+
<optional>
|
38
|
+
<attribute name="to">
|
39
|
+
<data type="IDREF"/>
|
40
|
+
</attribute>
|
41
|
+
</optional>
|
42
|
+
<element name="primary">
|
43
|
+
<oneOrMore>
|
44
|
+
<choice>
|
45
|
+
<ref name="PureTextElement"/>
|
46
|
+
<ref name="stem"/>
|
47
|
+
</choice>
|
48
|
+
</oneOrMore>
|
49
|
+
</element>
|
50
|
+
<optional>
|
51
|
+
<element name="secondary">
|
52
|
+
<oneOrMore>
|
53
|
+
<choice>
|
54
|
+
<ref name="PureTextElement"/>
|
55
|
+
<ref name="stem"/>
|
56
|
+
</choice>
|
57
|
+
</oneOrMore>
|
58
|
+
</element>
|
59
|
+
</optional>
|
60
|
+
<optional>
|
61
|
+
<element name="tertiary">
|
62
|
+
<oneOrMore>
|
63
|
+
<choice>
|
64
|
+
<ref name="PureTextElement"/>
|
65
|
+
<ref name="stem"/>
|
66
|
+
</choice>
|
67
|
+
</oneOrMore>
|
68
|
+
</element>
|
69
|
+
</optional>
|
70
|
+
</element>
|
71
|
+
</define>
|
35
72
|
<define name="bibitem">
|
36
73
|
<element name="bibitem">
|
37
74
|
<attribute name="id">
|
@@ -1027,6 +1064,26 @@
|
|
1027
1064
|
</zeroOrMore>
|
1028
1065
|
</element>
|
1029
1066
|
</define>
|
1067
|
+
<define name="sub">
|
1068
|
+
<element name="sub">
|
1069
|
+
<zeroOrMore>
|
1070
|
+
<choice>
|
1071
|
+
<ref name="PureTextElement"/>
|
1072
|
+
<ref name="stem"/>
|
1073
|
+
</choice>
|
1074
|
+
</zeroOrMore>
|
1075
|
+
</element>
|
1076
|
+
</define>
|
1077
|
+
<define name="sup">
|
1078
|
+
<element name="sup">
|
1079
|
+
<zeroOrMore>
|
1080
|
+
<choice>
|
1081
|
+
<ref name="PureTextElement"/>
|
1082
|
+
<ref name="stem"/>
|
1083
|
+
</choice>
|
1084
|
+
</zeroOrMore>
|
1085
|
+
</element>
|
1086
|
+
</define>
|
1030
1087
|
<define name="pagebreak">
|
1031
1088
|
<element name="pagebreak">
|
1032
1089
|
<optional>
|
@@ -2216,7 +2273,18 @@
|
|
2216
2273
|
<ref name="MultilingualRenderingType"/>
|
2217
2274
|
</attribute>
|
2218
2275
|
</optional>
|
2219
|
-
<
|
2276
|
+
<oneOrMore>
|
2277
|
+
<choice>
|
2278
|
+
<ref name="formula"/>
|
2279
|
+
<ref name="ul"/>
|
2280
|
+
<ref name="ol"/>
|
2281
|
+
<ref name="dl"/>
|
2282
|
+
<ref name="quote"/>
|
2283
|
+
<ref name="sourcecode"/>
|
2284
|
+
<ref name="paragraph"/>
|
2285
|
+
<ref name="figure"/>
|
2286
|
+
</choice>
|
2287
|
+
</oneOrMore>
|
2220
2288
|
</element>
|
2221
2289
|
</define>
|
2222
2290
|
<define name="termsource">
|
@@ -7,6 +7,7 @@ require_relative "./macros_plantuml"
|
|
7
7
|
require_relative "./macros_terms"
|
8
8
|
require_relative "./macros_form"
|
9
9
|
require_relative "./macros_note"
|
10
|
+
require_relative "./macros_embed"
|
10
11
|
require_relative "./datamodel/attributes_table_preprocessor"
|
11
12
|
require_relative "./datamodel/diagram_preprocessor"
|
12
13
|
require "metanorma-plugin-datastruct"
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Metanorma
|
2
|
+
module Standoc
|
3
|
+
class EmbedIncludeProcessor < Asciidoctor::Extensions::Preprocessor
|
4
|
+
def process(doc, reader)
|
5
|
+
return reader if reader.eof?
|
6
|
+
|
7
|
+
lines = reader.readlines
|
8
|
+
while !lines.grep(/^embed::/).empty?
|
9
|
+
headings = lines.grep(/^== /).map(&:strip)
|
10
|
+
lines = lines.map do |line|
|
11
|
+
/^embed::/.match?(line) ? embed(line, doc, reader, headings) : line
|
12
|
+
end.flatten
|
13
|
+
end
|
14
|
+
::Asciidoctor::Reader.new lines
|
15
|
+
end
|
16
|
+
|
17
|
+
def filename(line, doc, reader)
|
18
|
+
m = /^embed::([^\[]+)\[/.match(line)
|
19
|
+
f = doc.normalize_system_path m[1], reader.dir, nil,
|
20
|
+
target_name: "include file"
|
21
|
+
File.exist?(f) ? f : nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def readlines_safe(file)
|
25
|
+
if file.eof? then []
|
26
|
+
else file.readlines
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def embed(line, doc, reader, headings)
|
31
|
+
inc_path = filename(line, doc, reader) or return line
|
32
|
+
lines = filter_sections(read(inc_path), headings)
|
33
|
+
doc = Asciidoctor::Document.new [], { safe: :safe }
|
34
|
+
reader = ::Asciidoctor::PreprocessorReader.new doc, lines
|
35
|
+
strip_header(reader.read_lines)
|
36
|
+
end
|
37
|
+
|
38
|
+
def read(inc_path)
|
39
|
+
::File.open inc_path, "r" do |fd|
|
40
|
+
readlines_safe(fd).map(&:chomp)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def strip_header(lines)
|
45
|
+
return lines unless !lines.empty? && lines.first.start_with?("= ")
|
46
|
+
|
47
|
+
skip = true
|
48
|
+
lines.each_with_object([]) do |l, m|
|
49
|
+
m << l unless skip
|
50
|
+
skip = false if !/\S/.match?(l)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def filter_sections(lines, headings)
|
55
|
+
skip = false
|
56
|
+
lines.each_with_index.with_object([]) do |(l, i), m|
|
57
|
+
if headings.include?(l.strip)
|
58
|
+
skip = true
|
59
|
+
m.unshift while !m.empty? && /^\S/.match?(m[-1])
|
60
|
+
elsif skip && /^== |^embed::|^include::/.match?(l)
|
61
|
+
skip = false
|
62
|
+
j = i
|
63
|
+
j -= 1 while j >= 0 && /^\S/.match?(m[j])
|
64
|
+
lines[j..i].each { |n| m << n }
|
65
|
+
else
|
66
|
+
skip or m << l
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/spec/assets/a1.adoc
ADDED
data/spec/assets/a2.adoc
ADDED
data/spec/assets/a3.adoc
ADDED
data/spec/assets/a4.adoc
ADDED
@@ -1304,6 +1304,95 @@ RSpec.describe Metanorma::Standoc do
|
|
1304
1304
|
.to be_equivalent_to xmlpp(output)
|
1305
1305
|
end
|
1306
1306
|
|
1307
|
+
it "processes embed macro" do
|
1308
|
+
input = <<~INPUT
|
1309
|
+
#{ASCIIDOC_BLANK_HDR}
|
1310
|
+
|
1311
|
+
[[clause1]]
|
1312
|
+
== Clause 1
|
1313
|
+
|
1314
|
+
embed::spec/assets/xref_error.adoc[]
|
1315
|
+
INPUT
|
1316
|
+
output = <<~OUTPUT
|
1317
|
+
#{BLANK_HDR}
|
1318
|
+
<sections>
|
1319
|
+
<clause id='clause1' inline-header='false' obligation='normative'>
|
1320
|
+
<title>Clause 1</title>
|
1321
|
+
</clause>
|
1322
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
1323
|
+
<title>Clause</title>
|
1324
|
+
<p id='_'>
|
1325
|
+
<xref target='a'>b</xref>
|
1326
|
+
</p>
|
1327
|
+
</clause>
|
1328
|
+
</sections>
|
1329
|
+
</standard-document>
|
1330
|
+
OUTPUT
|
1331
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
1332
|
+
.to be_equivalent_to xmlpp(output)
|
1333
|
+
end
|
1334
|
+
|
1335
|
+
it "processes embed macro with overwriting" do
|
1336
|
+
input = <<~INPUT
|
1337
|
+
#{ASCIIDOC_BLANK_HDR}
|
1338
|
+
|
1339
|
+
[[clause1]]
|
1340
|
+
== Clause
|
1341
|
+
|
1342
|
+
embed::spec/assets/xref_error.adoc[]
|
1343
|
+
INPUT
|
1344
|
+
output = <<~OUTPUT
|
1345
|
+
#{BLANK_HDR}
|
1346
|
+
<sections>
|
1347
|
+
<clause id='clause1' inline-header='false' obligation='normative'>
|
1348
|
+
<title>Clause</title>
|
1349
|
+
</clause>
|
1350
|
+
</sections>
|
1351
|
+
</standard-document>
|
1352
|
+
OUTPUT
|
1353
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
1354
|
+
.to be_equivalent_to xmlpp(output)
|
1355
|
+
end
|
1356
|
+
|
1357
|
+
it "processes recursive embed macro with includes" do
|
1358
|
+
input = <<~INPUT
|
1359
|
+
#{ASCIIDOC_BLANK_HDR}
|
1360
|
+
|
1361
|
+
[[clause1]]
|
1362
|
+
== Clause
|
1363
|
+
|
1364
|
+
embed::spec/assets/a1.adoc[]
|
1365
|
+
INPUT
|
1366
|
+
output = <<~OUTPUT
|
1367
|
+
#{BLANK_HDR}
|
1368
|
+
<sections>
|
1369
|
+
<clause id='clause1' inline-header='false' obligation='normative'>
|
1370
|
+
<title>Clause</title>
|
1371
|
+
</clause>
|
1372
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
1373
|
+
<title>Clause 1</title>
|
1374
|
+
<p id='_'>X</p>
|
1375
|
+
</clause>
|
1376
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
1377
|
+
<title>Clause 2</title>
|
1378
|
+
<p id='_'>X</p>
|
1379
|
+
</clause>
|
1380
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
1381
|
+
<title>Clause 3</title>
|
1382
|
+
<p id='_'>X</p>
|
1383
|
+
</clause>
|
1384
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
1385
|
+
<title>Clause 4</title>
|
1386
|
+
<p id='_'>X</p>
|
1387
|
+
</clause>
|
1388
|
+
</sections>
|
1389
|
+
</standard-document>
|
1390
|
+
OUTPUT
|
1391
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
1392
|
+
.to be_equivalent_to xmlpp(output)
|
1393
|
+
end
|
1394
|
+
|
1395
|
+
|
1307
1396
|
describe "term inline macros" do
|
1308
1397
|
subject(:convert) do
|
1309
1398
|
xmlpp(
|
data/spec/metanorma/refs_spec.rb
CHANGED
@@ -1625,7 +1625,7 @@ RSpec.describe Metanorma::Standoc do
|
|
1625
1625
|
|
1626
1626
|
* [[[iso124,BSI BS EN ISO 19011:2018]]] _Standard_
|
1627
1627
|
* [[[iso123,BSI BS EN 16341]]] _Standard_
|
1628
|
-
* [[[ref_2,BSI BS EN ISO 14044:2006+
|
1628
|
+
* [[[ref_2,BSI BS EN ISO 14044:2006+A2:2020]]], _Environmental management – Life cycle assessment – Requirements and guidelines_
|
1629
1629
|
INPUT
|
1630
1630
|
output = Nokogiri::XML(Asciidoctor.convert(input, *OPTIONS))
|
1631
1631
|
.xpath("//xmlns:docidentifier[@type = 'BSI']").map(&:text)
|
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.0.
|
4
|
+
version: 2.0.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: 2022-01-
|
11
|
+
date: 2022-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -492,6 +492,7 @@ files:
|
|
492
492
|
- lib/metanorma/standoc/isodoc.rng
|
493
493
|
- lib/metanorma/standoc/lists.rb
|
494
494
|
- lib/metanorma/standoc/macros.rb
|
495
|
+
- lib/metanorma/standoc/macros_embed.rb
|
495
496
|
- lib/metanorma/standoc/macros_form.rb
|
496
497
|
- lib/metanorma/standoc/macros_note.rb
|
497
498
|
- lib/metanorma/standoc/macros_plantuml.rb
|
@@ -514,6 +515,10 @@ files:
|
|
514
515
|
- lib/metanorma/standoc/views/datamodel/model_representation.adoc.erb
|
515
516
|
- lib/metanorma/standoc/views/datamodel/plantuml_representation.adoc.erb
|
516
517
|
- metanorma-standoc.gemspec
|
518
|
+
- spec/assets/a1.adoc
|
519
|
+
- spec/assets/a2.adoc
|
520
|
+
- spec/assets/a3.adoc
|
521
|
+
- spec/assets/a4.adoc
|
517
522
|
- spec/assets/boilerplate.xml
|
518
523
|
- spec/assets/codes.yml
|
519
524
|
- spec/assets/header.html
|