metanorma-ietf 2.3.5 → 2.3.6
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/ietf/cleanup.rb +85 -0
- data/lib/asciidoctor/ietf/converter.rb +19 -27
- data/lib/asciidoctor/ietf/isodoc.rng +32 -7
- data/lib/metanorma/ietf/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a19bfaee2381bda7dd532941697aa43f6c9804940b9c2f82897f6950d195cc7
|
4
|
+
data.tar.gz: ba4c70b46014f9c41c4971e99da7608df7f2780855bbdbd005e6e4c542dda215
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b3eafc5eccb17ceaa77851f1aef2d66ea2fd6b39213b2537643571ee4f3b827a1b5b4d2fc2f9e3622649302661285035a483567b90d32cdddc693ca0d62f86d
|
7
|
+
data.tar.gz: 41c2f933072a61553455c06ac46ce40cd49e81fa86e162740b179a3099ad033eafd9a09723cbfe05c6d7b86227bf5fbd2e4121d4c92e6f625927a535e53ee58e
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Asciidoctor
|
2
|
+
module Ietf
|
3
|
+
class Converter < ::Asciidoctor::Standoc::Converter
|
4
|
+
def cleanup(xmldoc)
|
5
|
+
bcp14_cleanup(xmldoc)
|
6
|
+
abstract_cleanup(xmldoc)
|
7
|
+
super
|
8
|
+
rfc_anchor_cleanup(xmldoc)
|
9
|
+
end
|
10
|
+
|
11
|
+
BCP_KEYWORDS =
|
12
|
+
["MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
13
|
+
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"].freeze
|
14
|
+
|
15
|
+
def abstract_cleanup(xmldoc)
|
16
|
+
xmldoc.xpath("//abstract[not(text())]").each do |x|
|
17
|
+
x.remove
|
18
|
+
warn "Empty abstract section removed"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def bcp14_cleanup(xmldoc)
|
23
|
+
return unless @bcp_bold
|
24
|
+
|
25
|
+
xmldoc.xpath("//strong").each do |s|
|
26
|
+
next unless BCP_KEYWORDS.include?(s.text)
|
27
|
+
|
28
|
+
s.name = "bcp14"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def rfc_anchor_cleanup(xmldoc)
|
33
|
+
map = {}
|
34
|
+
xmldoc.xpath("//bibitem[docidentifier/@type = 'rfc-anchor']").each do |b|
|
35
|
+
next if b.at("./ancestor::bibdata")
|
36
|
+
|
37
|
+
map[b["id"]] = b.at("./docidentifier[@type = 'rfc-anchor']").text
|
38
|
+
b["id"] = b.at("./docidentifier[@type = 'rfc-anchor']").text
|
39
|
+
end
|
40
|
+
xmldoc.xpath("//eref | //origin").each do |x|
|
41
|
+
map[x["bibitemid"]] and x["bibitemid"] = map[x["bibitemid"]]
|
42
|
+
end
|
43
|
+
xmldoc
|
44
|
+
end
|
45
|
+
|
46
|
+
def smartquotes_cleanup(xmldoc)
|
47
|
+
xmldoc.traverse do |n|
|
48
|
+
next unless n.text?
|
49
|
+
|
50
|
+
n.replace(HTMLEntities.new.encode(
|
51
|
+
n.text.gsub(/\u2019|\u2018|\u201a|\u201b/, "'")
|
52
|
+
.gsub(/\u201c|\u201d|\u201e|\u201f/, '"'), :basic
|
53
|
+
))
|
54
|
+
end
|
55
|
+
xmldoc
|
56
|
+
end
|
57
|
+
|
58
|
+
def xref_to_eref(xref)
|
59
|
+
super
|
60
|
+
xref.delete("format")
|
61
|
+
end
|
62
|
+
|
63
|
+
def xref_cleanup(xmldoc)
|
64
|
+
super
|
65
|
+
xmldoc.xpath("//xref").each do |x|
|
66
|
+
x.delete("displayFormat")
|
67
|
+
x.delete("relative")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def quotesource_cleanup(xmldoc)
|
72
|
+
xmldoc.xpath("//quote/source | //terms/source").each do |x|
|
73
|
+
if x["target"]&.match?(URI::DEFAULT_PARSER.make_regexp)
|
74
|
+
x["uri"] = x["target"]
|
75
|
+
x.delete("target")
|
76
|
+
else
|
77
|
+
xref_to_eref(x)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def section_names_refs_cleanup(xml); end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -4,6 +4,7 @@ require "isodoc/ietf/rfc_convert"
|
|
4
4
|
require_relative "./front"
|
5
5
|
require_relative "./blocks"
|
6
6
|
require_relative "./validate"
|
7
|
+
require_relative "./cleanup"
|
7
8
|
|
8
9
|
module Asciidoctor
|
9
10
|
module Ietf
|
@@ -22,13 +23,13 @@ module Asciidoctor
|
|
22
23
|
@draft = node.attributes.has_key?("draft")
|
23
24
|
@workgroups = cache_workgroup(node)
|
24
25
|
@bcp_bold = !node.attr?("no-rfc-bold-bcp14")
|
25
|
-
@xinclude = node.attr?("use-xinclude")
|
26
|
+
@xinclude = node.attr?("use-xinclude")
|
26
27
|
super
|
27
28
|
end
|
28
29
|
|
29
30
|
def outputs(node, ret)
|
30
|
-
File.open(@filename
|
31
|
-
rfc_converter(node).convert(@filename
|
31
|
+
File.open("#{@filename}.xml", "w:UTF-8") { |f| f.write(ret) }
|
32
|
+
rfc_converter(node).convert("#{@filename}.xml")
|
32
33
|
end
|
33
34
|
|
34
35
|
def doctype(node)
|
@@ -63,12 +64,12 @@ module Asciidoctor
|
|
63
64
|
f, c = xref_text(node)
|
64
65
|
f1, c = eref_text(node) if f.nil?
|
65
66
|
t, rel = xref_rel(node)
|
67
|
+
attrs = { target: t, type: "inline", displayFormat: f1, format: f,
|
68
|
+
relative: rel }
|
66
69
|
noko do |xml|
|
67
|
-
xml.xref **attr_code(
|
68
|
-
|
69
|
-
|
70
|
-
x << c
|
71
|
-
end
|
70
|
+
xml.xref **attr_code(attrs) do |x|
|
71
|
+
x << c
|
72
|
+
end
|
72
73
|
end.join
|
73
74
|
end
|
74
75
|
|
@@ -140,7 +141,8 @@ module Asciidoctor
|
|
140
141
|
def rfc_anchor_cleanup(xmldoc)
|
141
142
|
map = {}
|
142
143
|
xmldoc.xpath("//bibitem[docidentifier/@type = 'rfc-anchor']").each do |b|
|
143
|
-
next if b.at("./ancestor::bibdata")
|
144
|
+
next if b.at("./ancestor::bibdata | ./ancestor::bibitem")
|
145
|
+
|
144
146
|
map[b["id"]] = b.at("./docidentifier[@type = 'rfc-anchor']").text
|
145
147
|
b["id"] = b.at("./docidentifier[@type = 'rfc-anchor']").text
|
146
148
|
end
|
@@ -194,34 +196,24 @@ module Asciidoctor
|
|
194
196
|
clause_parse(attrs, xml, node)
|
195
197
|
end
|
196
198
|
|
197
|
-
def quotesource_cleanup(xmldoc)
|
198
|
-
xmldoc.xpath("//quote/source | //terms/source").each do |x|
|
199
|
-
if x["target"] =~ URI::DEFAULT_PARSER.make_regexp
|
200
|
-
x["uri"] = x["target"]
|
201
|
-
x.delete("target")
|
202
|
-
else
|
203
|
-
xref_to_eref(x)
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
199
|
def inline_indexterm(node)
|
209
200
|
noko do |xml|
|
210
201
|
node.type == :visible and xml << node.text.sub(/^primary:(?=\S)/, "")
|
211
202
|
terms = (node.attr("terms") || [node.text]).map { |x| xml_encode(x) }
|
212
|
-
if /^primary:\S/.match(terms[0])
|
203
|
+
if /^primary:\S/.match?(terms[0])
|
213
204
|
terms[0].sub!(/^primary:/, "")
|
214
205
|
has_primary = true
|
215
206
|
end
|
216
|
-
|
217
|
-
i.primary { |x| x << terms[0] }
|
218
|
-
a = terms.dig(1) and i.secondary { |x| x << a }
|
219
|
-
a = terms.dig(2) and i.tertiary { |x| x << a }
|
220
|
-
end
|
207
|
+
inline_indexterm1(has_primary, terms, xml)
|
221
208
|
end.join
|
222
209
|
end
|
223
210
|
|
224
|
-
def
|
211
|
+
def inline_indexterm1(has_primary, terms, xml)
|
212
|
+
xml.index **attr_code(primary: has_primary) do |i|
|
213
|
+
i.primary { |x| x << terms[0] }
|
214
|
+
a = terms[1] and i.secondary { |x| x << a }
|
215
|
+
a = terms[2] and i.tertiary { |x| x << a }
|
216
|
+
end
|
225
217
|
end
|
226
218
|
|
227
219
|
def html_extract_attributes(node)
|
@@ -204,6 +204,18 @@
|
|
204
204
|
</zeroOrMore>
|
205
205
|
</element>
|
206
206
|
</define>
|
207
|
+
<define name="dt">
|
208
|
+
<element name="dt">
|
209
|
+
<optional>
|
210
|
+
<attribute name="id">
|
211
|
+
<data type="ID"/>
|
212
|
+
</attribute>
|
213
|
+
</optional>
|
214
|
+
<zeroOrMore>
|
215
|
+
<ref name="TextElement"/>
|
216
|
+
</zeroOrMore>
|
217
|
+
</element>
|
218
|
+
</define>
|
207
219
|
<define name="example">
|
208
220
|
<element name="example">
|
209
221
|
<attribute name="id">
|
@@ -899,7 +911,7 @@
|
|
899
911
|
</include>
|
900
912
|
<!-- end overrides -->
|
901
913
|
<define name="docsubtype">
|
902
|
-
<element name="
|
914
|
+
<element name="subdoctype">
|
903
915
|
<ref name="DocumentSubtype"/>
|
904
916
|
</element>
|
905
917
|
</define>
|
@@ -954,6 +966,16 @@
|
|
954
966
|
</define>
|
955
967
|
<define name="concept">
|
956
968
|
<element name="concept">
|
969
|
+
<optional>
|
970
|
+
<attribute name="ital">
|
971
|
+
<data type="boolean"/>
|
972
|
+
</attribute>
|
973
|
+
</optional>
|
974
|
+
<optional>
|
975
|
+
<attribute name="ref">
|
976
|
+
<data type="boolean"/>
|
977
|
+
</attribute>
|
978
|
+
</optional>
|
957
979
|
<optional>
|
958
980
|
<element name="refterm">
|
959
981
|
<zeroOrMore>
|
@@ -998,6 +1020,9 @@
|
|
998
1020
|
</attribute>
|
999
1021
|
<attribute name="name"/>
|
1000
1022
|
<attribute name="action"/>
|
1023
|
+
<optional>
|
1024
|
+
<attribute name="class"/>
|
1025
|
+
</optional>
|
1001
1026
|
<zeroOrMore>
|
1002
1027
|
<choice>
|
1003
1028
|
<ref name="TextElement"/>
|
@@ -1490,26 +1515,26 @@
|
|
1490
1515
|
<optional>
|
1491
1516
|
<ref name="section-title"/>
|
1492
1517
|
</optional>
|
1493
|
-
<
|
1518
|
+
<choice>
|
1494
1519
|
<choice>
|
1495
1520
|
<group>
|
1496
|
-
<
|
1521
|
+
<oneOrMore>
|
1497
1522
|
<ref name="BasicBlock"/>
|
1498
|
-
</
|
1523
|
+
</oneOrMore>
|
1499
1524
|
<zeroOrMore>
|
1500
1525
|
<ref name="note"/>
|
1501
1526
|
</zeroOrMore>
|
1502
1527
|
</group>
|
1503
1528
|
<ref name="amend"/>
|
1504
1529
|
</choice>
|
1505
|
-
<
|
1530
|
+
<oneOrMore>
|
1506
1531
|
<choice>
|
1507
1532
|
<ref name="clause-subsection"/>
|
1508
1533
|
<ref name="terms"/>
|
1509
1534
|
<ref name="definitions"/>
|
1510
1535
|
</choice>
|
1511
|
-
</
|
1512
|
-
</
|
1536
|
+
</oneOrMore>
|
1537
|
+
</choice>
|
1513
1538
|
</define>
|
1514
1539
|
<define name="Annex-Section">
|
1515
1540
|
<optional>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-ietf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: isodoc
|
@@ -275,6 +275,7 @@ files:
|
|
275
275
|
- lib/asciidoctor/ietf/basicdoc.rng
|
276
276
|
- lib/asciidoctor/ietf/biblio.rng
|
277
277
|
- lib/asciidoctor/ietf/blocks.rb
|
278
|
+
- lib/asciidoctor/ietf/cleanup.rb
|
278
279
|
- lib/asciidoctor/ietf/converter.rb
|
279
280
|
- lib/asciidoctor/ietf/front.rb
|
280
281
|
- lib/asciidoctor/ietf/ietf.rng
|