metanorma-ietf 2.4.1 → 2.4.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/asciidoctor/ietf/cleanup.rb +23 -5
- data/lib/asciidoctor/ietf/converter.rb +6 -64
- data/lib/asciidoctor/ietf/ietf.rng +4 -1
- data/lib/asciidoctor/ietf/isodoc.rng +26 -2
- data/lib/asciidoctor/ietf/macros.rb +17 -0
- data/lib/isodoc/ietf/blocks.rb +8 -8
- data/lib/isodoc/ietf/cleanup.rb +19 -1
- data/lib/isodoc/ietf/inline.rb +127 -124
- data/lib/isodoc/ietf/references.rb +23 -9
- data/lib/isodoc/ietf/validation.rb +1 -1
- data/lib/metanorma/ietf/version.rb +1 -1
- data/metanorma-ietf.gemspec +1 -2
- metadata +6 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0bce55e3d73f441a77b94d2aa6f7f464e727b914dd8e8c6fa67dbf035122d63
|
4
|
+
data.tar.gz: 1eaa61e2a47f793b47653f76e8ff6a7fd53a8f7889a06b9e43e61132cb6b066d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8f01b1753308bdb0d335a766fa4ed638a417a81433bb6f6b95a02518674d5eff55b3951db0717e748f7dc8dc3d0def3db27ddadb0f0a36105247f666747099b
|
7
|
+
data.tar.gz: af96278d659ea2949ad3aa2a435cdbe17017e171502fdea71cd5c332d13d7f7a2dade54361e8173aaf9b41e0614af7402fed6773d6f978e2388616f929108007
|
@@ -6,6 +6,8 @@ module Asciidoctor
|
|
6
6
|
abstract_cleanup(xmldoc)
|
7
7
|
super
|
8
8
|
rfc_anchor_cleanup(xmldoc)
|
9
|
+
cref_cleanup(xmldoc)
|
10
|
+
xmldoc
|
9
11
|
end
|
10
12
|
|
11
13
|
def abstract_cleanup(xmldoc)
|
@@ -15,6 +17,21 @@ module Asciidoctor
|
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
20
|
+
def cref_cleanup(xmldoc)
|
21
|
+
xmldoc.xpath("//crefref").each do |r|
|
22
|
+
if c = xmldoc.at("//review[@id = '#{r.text}']")
|
23
|
+
r.replace(c.remove)
|
24
|
+
else
|
25
|
+
@log.add("Crossrefences", r,
|
26
|
+
"No matching review for cref:[#{r.text}]")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
BCP_KEYWORDS = ["MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
32
|
+
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
|
33
|
+
"OPTIONAL"].freeze
|
34
|
+
|
18
35
|
def bcp14_cleanup(xmldoc)
|
19
36
|
return unless @bcp_bold
|
20
37
|
|
@@ -26,12 +43,13 @@ module Asciidoctor
|
|
26
43
|
end
|
27
44
|
|
28
45
|
def rfc_anchor_cleanup(xmldoc)
|
29
|
-
map =
|
30
|
-
|
31
|
-
next if b.at("./ancestor::bibdata")
|
46
|
+
map = xmldoc.xpath("//bibitem[docidentifier/@type = 'rfc-anchor']")
|
47
|
+
.each_with_object({}) do |b, m|
|
48
|
+
next if b.at("./ancestor::bibdata | ./ancestor::bibitem")
|
32
49
|
|
33
|
-
|
34
|
-
b["id"] =
|
50
|
+
id = b.at("./docidentifier[@type = 'rfc-anchor']").text
|
51
|
+
m[b["id"]] = id
|
52
|
+
b["id"] = id
|
35
53
|
end
|
36
54
|
xmldoc.xpath("//eref | //origin").each do |x|
|
37
55
|
map[x["bibitemid"]] and x["bibitemid"] = map[x["bibitemid"]]
|
@@ -5,10 +5,15 @@ require_relative "./front"
|
|
5
5
|
require_relative "./blocks"
|
6
6
|
require_relative "./validate"
|
7
7
|
require_relative "./cleanup"
|
8
|
+
require_relative "./macros"
|
8
9
|
|
9
10
|
module Asciidoctor
|
10
11
|
module Ietf
|
11
12
|
class Converter < ::Asciidoctor::Standoc::Converter
|
13
|
+
Asciidoctor::Extensions.register do
|
14
|
+
inline_macro Asciidoctor::Ietf::InlineCrefMacro
|
15
|
+
end
|
16
|
+
|
12
17
|
XML_ROOT_TAG = "ietf-standard".freeze
|
13
18
|
XML_NAMESPACE = "https://www.metanorma.org/ns/ietf".freeze
|
14
19
|
|
@@ -113,70 +118,7 @@ module Asciidoctor
|
|
113
118
|
[t, rel]
|
114
119
|
end
|
115
120
|
|
116
|
-
def
|
117
|
-
bcp14_cleanup(xmldoc)
|
118
|
-
abstract_cleanup(xmldoc)
|
119
|
-
super
|
120
|
-
rfc_anchor_cleanup(xmldoc)
|
121
|
-
end
|
122
|
-
|
123
|
-
BCP_KEYWORDS = ["MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
124
|
-
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"].freeze
|
125
|
-
|
126
|
-
def abstract_cleanup(xmldoc)
|
127
|
-
xmldoc.xpath("//abstract[not(text())]").each do |x|
|
128
|
-
x.remove
|
129
|
-
warn "Empty abstract section removed"
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def bcp14_cleanup(xmldoc)
|
134
|
-
return unless @bcp_bold
|
135
|
-
xmldoc.xpath("//strong").each do |s|
|
136
|
-
next unless BCP_KEYWORDS.include?(s.text)
|
137
|
-
s.name = "bcp14"
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
def rfc_anchor_cleanup(xmldoc)
|
142
|
-
map = {}
|
143
|
-
xmldoc.xpath("//bibitem[docidentifier/@type = 'rfc-anchor']").each do |b|
|
144
|
-
next if b.at("./ancestor::bibdata | ./ancestor::bibitem")
|
145
|
-
|
146
|
-
map[b["id"]] = b.at("./docidentifier[@type = 'rfc-anchor']").text
|
147
|
-
b["id"] = b.at("./docidentifier[@type = 'rfc-anchor']").text
|
148
|
-
end
|
149
|
-
xmldoc.xpath("//eref | //origin").each do |x|
|
150
|
-
map[x["bibitemid"]] and x["bibitemid"] = map[x["bibitemid"]]
|
151
|
-
end
|
152
|
-
xmldoc
|
153
|
-
end
|
154
|
-
|
155
|
-
def smartquotes_cleanup(xmldoc)
|
156
|
-
xmldoc.traverse do |n|
|
157
|
-
next unless n.text?
|
158
|
-
n.replace(HTMLEntities.new.encode(
|
159
|
-
n.text.gsub(/\u2019|\u2018|\u201a|\u201b/, "'").
|
160
|
-
gsub(/\u201c|\u201d|\u201e|\u201f/, '"'), :basic))
|
161
|
-
end
|
162
|
-
xmldoc
|
163
|
-
end
|
164
|
-
|
165
|
-
def xref_to_eref(x)
|
166
|
-
super
|
167
|
-
x.delete("format")
|
168
|
-
end
|
169
|
-
|
170
|
-
def xref_cleanup(xmldoc)
|
171
|
-
super
|
172
|
-
xmldoc.xpath("//xref").each do |x|
|
173
|
-
x.delete("displayFormat")
|
174
|
-
x.delete("relative")
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
def norm_ref_preface(f)
|
179
|
-
end
|
121
|
+
def norm_ref_preface(sect); end
|
180
122
|
|
181
123
|
def clause_parse(attrs, xml, node)
|
182
124
|
attrs[:numbered] = node.attr("numbered")
|
@@ -990,6 +990,16 @@
|
|
990
990
|
<data type="boolean"/>
|
991
991
|
</attribute>
|
992
992
|
</optional>
|
993
|
+
<optional>
|
994
|
+
<attribute name="linkmention">
|
995
|
+
<data type="boolean"/>
|
996
|
+
</attribute>
|
997
|
+
</optional>
|
998
|
+
<optional>
|
999
|
+
<attribute name="linkref">
|
1000
|
+
<data type="boolean"/>
|
1001
|
+
</attribute>
|
1002
|
+
</optional>
|
993
1003
|
<optional>
|
994
1004
|
<element name="refterm">
|
995
1005
|
<zeroOrMore>
|
@@ -1026,6 +1036,7 @@
|
|
1026
1036
|
<ref name="svgmap"/>
|
1027
1037
|
<ref name="inputform"/>
|
1028
1038
|
<ref name="toc"/>
|
1039
|
+
<ref name="passthrough"/>
|
1029
1040
|
</choice>
|
1030
1041
|
</define>
|
1031
1042
|
<define name="toc">
|
@@ -1033,6 +1044,14 @@
|
|
1033
1044
|
<ref name="ul"/>
|
1034
1045
|
</element>
|
1035
1046
|
</define>
|
1047
|
+
<define name="passthrough">
|
1048
|
+
<element name="passthrough">
|
1049
|
+
<optional>
|
1050
|
+
<attribute name="formats"/>
|
1051
|
+
</optional>
|
1052
|
+
<text/>
|
1053
|
+
</element>
|
1054
|
+
</define>
|
1036
1055
|
<define name="inputform">
|
1037
1056
|
<element name="form">
|
1038
1057
|
<attribute name="id">
|
@@ -1700,7 +1719,9 @@
|
|
1700
1719
|
<zeroOrMore>
|
1701
1720
|
<ref name="termgrammar"/>
|
1702
1721
|
</zeroOrMore>
|
1703
|
-
<
|
1722
|
+
<oneOrMore>
|
1723
|
+
<ref name="termdefinition"/>
|
1724
|
+
</oneOrMore>
|
1704
1725
|
<zeroOrMore>
|
1705
1726
|
<ref name="termnote"/>
|
1706
1727
|
</zeroOrMore>
|
@@ -1763,7 +1784,7 @@
|
|
1763
1784
|
</oneOrMore>
|
1764
1785
|
</element>
|
1765
1786
|
</define>
|
1766
|
-
<define name="
|
1787
|
+
<define name="termdefinition">
|
1767
1788
|
<element name="definition">
|
1768
1789
|
<oneOrMore>
|
1769
1790
|
<choice>
|
@@ -1772,6 +1793,9 @@
|
|
1772
1793
|
<ref name="formula"/>
|
1773
1794
|
</choice>
|
1774
1795
|
</oneOrMore>
|
1796
|
+
<zeroOrMore>
|
1797
|
+
<ref name="termsource"/>
|
1798
|
+
</zeroOrMore>
|
1775
1799
|
</element>
|
1776
1800
|
</define>
|
1777
1801
|
<define name="termnote">
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "asciidoctor/extensions"
|
2
|
+
|
3
|
+
module Asciidoctor
|
4
|
+
module Ietf
|
5
|
+
class InlineCrefMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
6
|
+
use_dsl
|
7
|
+
named :cref
|
8
|
+
parse_content_as :text
|
9
|
+
using_format :short
|
10
|
+
|
11
|
+
def process(parent, _target, attrs)
|
12
|
+
out = Asciidoctor::Inline.new(parent, :quoted, attrs["text"]).convert
|
13
|
+
%{<crefref>#{out}</crefref>}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/isodoc/ietf/blocks.rb
CHANGED
@@ -64,11 +64,11 @@ module IsoDoc
|
|
64
64
|
spacing: node["spacing"])
|
65
65
|
end
|
66
66
|
|
67
|
-
def dt_parse(
|
68
|
-
if
|
69
|
-
term <<
|
67
|
+
def dt_parse(dterm, term)
|
68
|
+
if dterm.elements.empty?
|
69
|
+
term << dterm.text
|
70
70
|
else
|
71
|
-
|
71
|
+
dterm.children.each { |n| parse(n, term) }
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -108,7 +108,7 @@ module IsoDoc
|
|
108
108
|
end
|
109
109
|
p << lbl
|
110
110
|
name and !lbl.nil? and p << ": "
|
111
|
-
name
|
111
|
+
name&.children&.each { |e| parse(e, p) }
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -139,11 +139,11 @@ module IsoDoc
|
|
139
139
|
@annotation = false
|
140
140
|
end
|
141
141
|
|
142
|
-
def formula_where(
|
143
|
-
return unless
|
142
|
+
def formula_where(dlist, out)
|
143
|
+
return unless dlist
|
144
144
|
|
145
145
|
out.t { |p| p << @i18n.where }
|
146
|
-
parse(
|
146
|
+
parse(dlist, out)
|
147
147
|
end
|
148
148
|
|
149
149
|
def formula_parse1(node, out)
|
data/lib/isodoc/ietf/cleanup.rb
CHANGED
@@ -7,14 +7,32 @@ module IsoDoc::Ietf
|
|
7
7
|
footnote_cleanup(docxml)
|
8
8
|
sourcecode_cleanup(docxml)
|
9
9
|
annotation_cleanup(docxml)
|
10
|
+
li_cleanup(docxml)
|
10
11
|
deflist_cleanup(docxml)
|
11
12
|
bookmark_cleanup(docxml)
|
12
13
|
aside_cleanup(docxml)
|
13
14
|
front_cleanup(docxml)
|
15
|
+
u_cleanup(docxml)
|
14
16
|
docxml
|
15
17
|
end
|
16
18
|
|
17
|
-
|
19
|
+
def u_cleanup(xmldoc)
|
20
|
+
xmldoc.traverse do |n|
|
21
|
+
next unless n.text?
|
22
|
+
next if %w(author organization street city region code country
|
23
|
+
postalLine email seriesInfo title%).include? n.parent
|
24
|
+
|
25
|
+
n.replace(n.text.gsub(/[\u0080-\uffff]/, "<u>\\0</u>"))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def li_cleanup(xmldoc)
|
30
|
+
xmldoc.xpath("//li[t]").each do |li|
|
31
|
+
next unless li.elements.size == 1
|
32
|
+
|
33
|
+
li.children = li.elements[0].children
|
34
|
+
end
|
35
|
+
end
|
18
36
|
|
19
37
|
def front_cleanup(xmldoc)
|
20
38
|
xmldoc.xpath("//title").each { |s| s.children = s.text }
|
data/lib/isodoc/ietf/inline.rb
CHANGED
@@ -1,167 +1,170 @@
|
|
1
1
|
require "mathml2asciimath"
|
2
2
|
|
3
|
-
module IsoDoc
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
module IsoDoc
|
4
|
+
module Ietf
|
5
|
+
class RfcConvert < ::IsoDoc::Convert
|
6
|
+
def em_parse(node, out)
|
7
|
+
out.em do |e|
|
8
|
+
node.children.each { |n| parse(n, e) }
|
9
|
+
end
|
8
10
|
end
|
9
|
-
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
def sup_parse(node, out)
|
13
|
+
out.sup do |e|
|
14
|
+
node.children.each { |n| parse(n, e) }
|
15
|
+
end
|
14
16
|
end
|
15
|
-
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
def sub_parse(node, out)
|
19
|
+
out.sub do |e|
|
20
|
+
node.children.each { |n| parse(n, e) }
|
21
|
+
end
|
20
22
|
end
|
21
|
-
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def tt_parse(node, out)
|
25
|
+
out.tt do |e|
|
26
|
+
node.children.each { |n| parse(n, e) }
|
27
|
+
end
|
26
28
|
end
|
27
|
-
end
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
def strong_parse(node, out)
|
31
|
+
out.strong do |e|
|
32
|
+
node.children.each { |n| parse(n, e) }
|
33
|
+
end
|
32
34
|
end
|
33
|
-
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
36
|
+
def bcp14_parse(node, out)
|
37
|
+
out.bcp14 do |e|
|
38
|
+
node.children.each { |n| parse(n, e) }
|
39
|
+
end
|
38
40
|
end
|
39
|
-
end
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
def strike_parse(node, out)
|
43
|
+
node.children.each { |n| parse(n, out) }
|
44
|
+
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
def smallcap_parse(node, out)
|
47
|
+
node.children.each { |n| parse(n, out) }
|
48
|
+
end
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
50
|
+
def keyword_parse(node, out)
|
51
|
+
node.children.each { |n| parse(n, out) }
|
52
|
+
end
|
52
53
|
|
53
|
-
|
54
|
-
|
55
|
-
text = node.to_s
|
56
|
-
out << text
|
57
|
-
end
|
54
|
+
def text_parse(node, out)
|
55
|
+
return if node.nil? || node.text.nil?
|
58
56
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
else
|
63
|
-
HTMLEntities.new.encode(node.text)
|
64
|
-
end
|
65
|
-
out << "#{@openmathdelim} #{stem} #{@closemathdelim}"
|
66
|
-
end
|
57
|
+
text = node.to_s
|
58
|
+
out << text
|
59
|
+
end
|
67
60
|
|
68
|
-
|
69
|
-
|
61
|
+
def stem_parse(node, out)
|
62
|
+
stem = case node["type"]
|
63
|
+
when "MathML" then MathML2AsciiMath.m2a(node.children.to_xml)
|
64
|
+
else HTMLEntities.new.encode(node.text)
|
65
|
+
end
|
66
|
+
out << "#{@openmathdelim} #{stem} #{@closemathdelim}"
|
67
|
+
end
|
70
68
|
|
71
|
-
|
72
|
-
end
|
69
|
+
def page_break(_out); end
|
73
70
|
|
74
|
-
|
75
|
-
|
71
|
+
def pagebreak_parse(_node, _out); end
|
72
|
+
|
73
|
+
def br_parse(_node, out)
|
76
74
|
out.br
|
77
75
|
end
|
78
|
-
end
|
79
76
|
|
80
|
-
|
81
|
-
end
|
77
|
+
def hr_parse(node, out); end
|
82
78
|
|
83
|
-
|
84
|
-
|
85
|
-
|
79
|
+
def link_parse(node, out)
|
80
|
+
out.eref **attr_code(target: node["target"]) do |l|
|
81
|
+
node.children.each { |n| parse(n, l) }
|
82
|
+
end
|
86
83
|
end
|
87
|
-
end
|
88
84
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
85
|
+
def image_parse(node, out, caption)
|
86
|
+
attrs = { src: node["src"], title: node["title"],
|
87
|
+
align: node["align"], name: node["filename"],
|
88
|
+
anchor: node["id"], type: "svg",
|
89
|
+
alt: node["alt"] }
|
90
|
+
out.artwork **attr_code(attrs)
|
91
|
+
image_title_parse(out, caption)
|
92
|
+
end
|
97
93
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
94
|
+
def image_title_parse(out, caption)
|
95
|
+
unless caption.nil?
|
96
|
+
out.t **{ align: "center", keepWithPrevious: "true" } do |p|
|
97
|
+
p << caption.to_s
|
98
|
+
end
|
102
99
|
end
|
103
100
|
end
|
104
|
-
end
|
105
101
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
102
|
+
def xref_parse(node, out)
|
103
|
+
out.xref **attr_code(target: node["target"], format: node["format"],
|
104
|
+
relative: node["relative"]) do |l|
|
105
|
+
l << get_linkend(node)
|
106
|
+
end
|
107
|
+
end
|
112
108
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
109
|
+
def get_linkend(node)
|
110
|
+
contents = node.children.reject do |c|
|
111
|
+
%w{locality localityStack}.include? c.name
|
112
|
+
end
|
113
|
+
.select { |c| !c.text? || /\S/.match(c) }
|
114
|
+
!contents.empty? and
|
115
|
+
return Nokogiri::XML::NodeSet.new(node.document, contents).to_xml
|
116
|
+
""
|
117
|
+
end
|
120
118
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
119
|
+
def eref_parse(node, out)
|
120
|
+
linkend = node.children.reject do |c|
|
121
|
+
%w{locality localityStack}.include? c.name
|
122
|
+
end
|
123
|
+
relative = node["relative"] ||
|
124
|
+
node.at(ns(".//locality[@type = 'anchor']/referenceFrom"))&.text || ""
|
125
|
+
section = eref_clause(node.xpath(ns("./locality | ./localityStack")),
|
126
|
+
nil) || ""
|
127
|
+
#section = "" unless relative.empty?
|
128
|
+
out.relref **attr_code(target: node["bibitemid"], section: section,
|
129
|
+
relative: relative,
|
130
|
+
displayFormat: node["displayFormat"]) do |l|
|
131
|
+
linkend.each { |n| parse(n, l) }
|
132
|
+
end
|
133
|
+
end
|
133
134
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
135
|
+
def eref_clause(refs, target)
|
136
|
+
ret = []
|
137
|
+
ret1 = ""
|
138
|
+
refs.each do |l|
|
139
|
+
if l.name == "localityStack"
|
140
|
+
ret << ret1
|
141
|
+
ret1 = ""
|
142
|
+
ret << eref_clause1(l.elements, target)
|
143
|
+
else ret1 += eref_clause1([l], target)
|
144
|
+
end
|
144
145
|
end
|
146
|
+
ret << ret1
|
147
|
+
ret.reject { |c| c.nil? || c.empty? }.join("; ")
|
145
148
|
end
|
146
|
-
ret << ret1
|
147
|
-
ret.reject { |c| c.nil? || c.empty? }.join("; ")
|
148
|
-
end
|
149
149
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
150
|
+
def eref_clause1(refs, _target)
|
151
|
+
refs.each do |l|
|
152
|
+
next unless %w(clause section).include? l["type"]
|
153
|
+
|
154
|
+
return l&.at(ns("./referenceFrom"))&.text
|
155
|
+
end
|
156
|
+
""
|
154
157
|
end
|
155
|
-
return ""
|
156
|
-
end
|
157
158
|
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
159
|
+
def index_parse(node, out)
|
160
|
+
out.iref nil, **attr_code(item: node.at(ns("./primary")).text,
|
161
|
+
primary: node["primary"],
|
162
|
+
subitem: node&.at(ns("./secondary"))&.text)
|
163
|
+
end
|
162
164
|
|
163
|
-
|
164
|
-
|
165
|
+
def bookmark_parse(node, out)
|
166
|
+
out.bookmark nil, **attr_code(anchor: node["id"])
|
167
|
+
end
|
165
168
|
end
|
166
169
|
end
|
167
170
|
end
|
@@ -55,15 +55,29 @@ module IsoDoc
|
|
55
55
|
uris&.each do |u|
|
56
56
|
r.format nil, **attr_code(target: u.text, type: u["type"])
|
57
57
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
58
|
+
docidentifier_render(bib, r)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def docidentifier_render(bib, out)
|
63
|
+
docidentifiers = bib.xpath(ns("./docidentifier"))
|
64
|
+
id = render_identifier(bibitem_ref_code(bib))
|
65
|
+
!id[1].nil? && id[1] != "(NO ID)" and out.refcontent id[1]
|
66
|
+
docidentifiers&.each do |u|
|
67
|
+
u["type"] == "DOI" and
|
68
|
+
out.seriesInfo nil, **attr_code(value: u.text.sub(/^DOI /, ""),
|
69
|
+
name: "DOI")
|
70
|
+
u["type"] == "IETF" and docidentifier_ietf(u, out)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def docidentifier_ietf(ident, out)
|
75
|
+
if /^RFC /.match?(ident.text)
|
76
|
+
out.seriesInfo nil, **attr_code(value: ident.text.sub(/^RFC 0*/, ""),
|
77
|
+
name: "RFC")
|
78
|
+
elsif /^I-D\./.match?(ident.text)
|
79
|
+
out.seriesInfo nil, **attr_code(value: ident.text.sub(/^I-D\./, ""),
|
80
|
+
name: "Internet-Draft")
|
67
81
|
end
|
68
82
|
end
|
69
83
|
|
@@ -165,7 +165,7 @@ module IsoDoc
|
|
165
165
|
def seriesInfo_check(xml)
|
166
166
|
ret = []
|
167
167
|
xml.root["ipr"] == "none" and return []
|
168
|
-
rfcinfo = xml.at("//seriesInfo[@name = 'RFC']")
|
168
|
+
rfcinfo = xml.at("//front//seriesInfo[@name = 'RFC']")
|
169
169
|
rfcnumber = xml.root["number"]
|
170
170
|
rfcinfo && rfcnumber && rfcnumber != rfcinfo["value"] and
|
171
171
|
ret << "Mismatch between <rfc number='#{rfcnumber}'> "\
|
data/metanorma-ietf.gemspec
CHANGED
@@ -37,9 +37,8 @@ Gem::Specification.new do |spec|
|
|
37
37
|
|
38
38
|
spec.add_dependency "isodoc", "~> 1.7.0"
|
39
39
|
spec.add_dependency "mathml2asciimath"
|
40
|
-
spec.add_dependency "metanorma-standoc", "~> 1.10.0"
|
41
40
|
spec.add_dependency "metanorma-ietf-data"
|
42
|
-
spec.add_dependency "
|
41
|
+
spec.add_dependency "metanorma-standoc", "~> 1.10.0"
|
43
42
|
spec.add_dependency "open-uri"
|
44
43
|
|
45
44
|
spec.add_development_dependency "byebug"
|
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.4.
|
4
|
+
version: 2.4.2
|
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-
|
11
|
+
date: 2021-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: isodoc
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: metanorma-standoc
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.10.0
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.10.0
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: metanorma-ietf-data
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,19 +53,19 @@ dependencies:
|
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
56
|
+
name: metanorma-standoc
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
61
|
+
version: 1.10.0
|
76
62
|
type: :runtime
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
68
|
+
version: 1.10.0
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: open-uri
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -294,6 +280,7 @@ files:
|
|
294
280
|
- lib/asciidoctor/ietf/front.rb
|
295
281
|
- lib/asciidoctor/ietf/ietf.rng
|
296
282
|
- lib/asciidoctor/ietf/isodoc.rng
|
283
|
+
- lib/asciidoctor/ietf/macros.rb
|
297
284
|
- lib/asciidoctor/ietf/reqt.rng
|
298
285
|
- lib/asciidoctor/ietf/validate.rb
|
299
286
|
- lib/isodoc/ietf/SVG-1.2-RFC.rng
|