asciidoctor-rfc 0.2.0 → 0.8.0
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/README.adoc +116 -6
- data/asciidoctor-rfc.gemspec +15 -1
- data/lib/asciidoctor/rfc/common/base.rb +74 -7
- data/lib/asciidoctor/rfc/common/front.rb +1 -1
- data/lib/asciidoctor/rfc/v2/base.rb +87 -38
- data/lib/asciidoctor/rfc/v2/blocks.rb +29 -2
- data/lib/asciidoctor/rfc/v2/converter.rb +0 -1
- data/lib/asciidoctor/rfc/v2/inline_anchor.rb +2 -8
- data/lib/asciidoctor/rfc/v2/lists.rb +7 -4
- data/lib/asciidoctor/rfc/v2/table.rb +1 -1
- data/lib/asciidoctor/rfc/v3/base.rb +41 -43
- data/lib/asciidoctor/rfc/v3/blocks.rb +29 -2
- data/lib/asciidoctor/rfc/v3/converter.rb +0 -2
- data/lib/asciidoctor/rfc/v3/inline_anchor.rb +2 -6
- data/lib/asciidoctor/rfc/version.rb +1 -1
- data/spec/asciidoctor/rfc/v2/comments_spec.rb +7 -3
- data/spec/asciidoctor/rfc/v2/date_spec.rb +23 -0
- data/spec/asciidoctor/rfc/v2/dlist_spec.rb +107 -9
- data/spec/asciidoctor/rfc/v2/image_spec.rb +17 -0
- data/spec/asciidoctor/rfc/v2/inline_formatting_spec.rb +12 -0
- data/spec/asciidoctor/rfc/v2/listing_spec.rb +22 -0
- data/spec/asciidoctor/rfc/v2/literal_spec.rb +22 -2
- data/spec/asciidoctor/rfc/v2/preamble_spec.rb +72 -0
- data/spec/asciidoctor/rfc/v2/references_spec.rb +3 -1
- data/spec/asciidoctor/rfc/v2/table_spec.rb +104 -4
- data/spec/asciidoctor/rfc/v2/text_spec.rb +89 -0
- data/spec/asciidoctor/rfc/v2/ulist_spec.rb +40 -0
- data/spec/asciidoctor/rfc/v3/dlist_spec.rb +103 -1
- data/spec/asciidoctor/rfc/v3/image_spec.rb +18 -0
- data/spec/asciidoctor/rfc/v3/listing_spec.rb +26 -0
- data/spec/asciidoctor/rfc/v3/literal_spec.rb +20 -1
- data/spec/asciidoctor/rfc/v3/preamble_spec.rb +150 -0
- data/spec/asciidoctor/rfc/v3/references_spec.rb +35 -34
- data/spec/asciidoctor/rfc/v3/series_info_spec.rb +39 -0
- data/spec/examples/README.adoc +162 -0
- data/spec/examples/davies-template-bare-06.adoc +3 -0
- data/spec/examples/draft-ietf-core-block-xx.mkd +935 -0
- data/spec/examples/draft-ietf-core-block-xx.mkd.adoc +1013 -0
- data/spec/examples/draft-ietf-core-block-xx.xml.orig +1251 -0
- data/spec/examples/example-v2.adoc +6 -2
- data/spec/examples/example-v3.adoc +5 -1
- data/spec/examples/hoffmanv2.xml.adoc +247 -0
- data/spec/examples/hoffmanv2.xml.orig +339 -0
- data/spec/examples/hoffmanv3.xml.orig +346 -0
- data/spec/examples/mib-doc-template-xml-06.adoc +5 -1
- data/spec/examples/rfc2100.md.adoc +2 -3
- data/spec/examples/rfc3514.md.adoc +3 -2
- data/spec/examples/rfc5841.md.adoc +1 -1
- data/spec/examples/rfc748.md.adoc +7 -6
- data/spec/examples/rfc7511.md.adoc +15 -15
- data/spec/examples/skel.mkd +32 -0
- data/spec/examples/skel.mkd.adoc +50 -0
- data/spec/examples/skel.xml.orig +105 -0
- data/spec/examples/stupid-s.mkd +569 -0
- data/spec/examples/stupid-s.mkd.adoc +771 -0
- data/spec/examples/stupid-s.xml.orig +880 -0
- data/spec/spec_helper.rb +1 -1
- metadata +32 -4
@@ -1,3 +1,5 @@
|
|
1
|
+
require "htmlentities"
|
2
|
+
|
1
3
|
module Asciidoctor
|
2
4
|
module RFC::V2
|
3
5
|
module Blocks
|
@@ -42,6 +44,31 @@ module Asciidoctor
|
|
42
44
|
ret
|
43
45
|
end
|
44
46
|
|
47
|
+
# stem is treated as literal, but with center alignment
|
48
|
+
def stem(node)
|
49
|
+
artwork_attributes = {
|
50
|
+
align: node.attr("align") || "center",
|
51
|
+
type: node.attr("type"),
|
52
|
+
name: node.title,
|
53
|
+
alt: node.attr("alt"),
|
54
|
+
}
|
55
|
+
|
56
|
+
# NOTE: html escaping is performed by Nokogiri
|
57
|
+
artwork_content = node.lines.join("\n")
|
58
|
+
|
59
|
+
ret = noko do |xml|
|
60
|
+
if node.parent.context != :example
|
61
|
+
xml.figure do |xml_figure|
|
62
|
+
xml_figure.artwork artwork_content, **attr_code(artwork_attributes)
|
63
|
+
end
|
64
|
+
else
|
65
|
+
xml.artwork artwork_content, **attr_code(artwork_attributes)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
ret
|
69
|
+
end
|
70
|
+
|
71
|
+
|
45
72
|
# Syntax:
|
46
73
|
# = Title
|
47
74
|
# Author
|
@@ -78,7 +105,7 @@ module Asciidoctor
|
|
78
105
|
title: (node.title.nil? ? "NOTE" : node.title),
|
79
106
|
}
|
80
107
|
|
81
|
-
note_contents = [paragraph1(node)].flatten.join("\n")
|
108
|
+
note_contents = HTMLEntities.new.decode([paragraph1(node)].flatten.join("\n"))
|
82
109
|
|
83
110
|
result << noko do |xml|
|
84
111
|
xml.note **attr_code(note_attributes) do |xml_note|
|
@@ -137,7 +164,7 @@ module Asciidoctor
|
|
137
164
|
xml.figure **attr_code(figure_attributes) do |xml_figure|
|
138
165
|
node.blocks.each do |b|
|
139
166
|
case b.context
|
140
|
-
when :listing, :image, :literal
|
167
|
+
when :listing, :image, :literal, :stem
|
141
168
|
xml_figure << send(b.context, b).join("\n")
|
142
169
|
seen_artwork = true
|
143
170
|
else
|
@@ -37,8 +37,6 @@ module Asciidoctor
|
|
37
37
|
"[#{target}] (Section #{matched[:section]})"
|
38
38
|
when "bare"
|
39
39
|
matched[:section]
|
40
|
-
else
|
41
|
-
"Section #{matched[:section]} of #{target}"
|
42
40
|
end
|
43
41
|
unless matched[:text].empty?
|
44
42
|
xref_contents = "#{xref_contents}: #{matched[:text]}"
|
@@ -86,16 +84,12 @@ module Asciidoctor
|
|
86
84
|
end
|
87
85
|
end
|
88
86
|
# NOTE technically node.text should be node.reftext, but subs have already been applied to text
|
89
|
-
%(<bibanchor="#{node.id}">) # will convert to anchor attribute upstream
|
87
|
+
# %(<bibanchor="#{node.id}">) # will convert to anchor attribute upstream
|
88
|
+
nil
|
90
89
|
end
|
91
90
|
|
92
91
|
def inline_anchor_ref(node)
|
93
|
-
# If this is within referencegroup, output as bibanchor anyway
|
94
|
-
if $processing_reflist
|
95
|
-
%(<bibanchor="#{node.id}">) # will convert to anchor attribute upstream
|
96
|
-
else
|
97
92
|
warn %(asciidoctor: WARNING: anchor "#{node.id}" is not in a place where XML RFC will recognise it as an anchor attribute)
|
98
|
-
end
|
99
93
|
end
|
100
94
|
end
|
101
95
|
end
|
@@ -106,7 +106,7 @@ module Asciidoctor
|
|
106
106
|
# all but last term have empty dd
|
107
107
|
terms.each_with_index do |term, idx|
|
108
108
|
t_attributes = {
|
109
|
-
hangText: term.text,
|
109
|
+
hangText: flatten_rawtext(term.text).join(' '),
|
110
110
|
}
|
111
111
|
|
112
112
|
if idx < terms.size - 1
|
@@ -114,13 +114,16 @@ module Asciidoctor
|
|
114
114
|
else
|
115
115
|
xml_list.t **attr_code(t_attributes) do |xml_t|
|
116
116
|
if !dd.nil?
|
117
|
+
if dd.text?
|
118
|
+
# This vspace element is extraneous to the RFC XML spec,
|
119
|
+
# but is required by IDNITS
|
120
|
+
xml_t.vspace({blankLines: "1"}) unless $inline_definition_lists
|
121
|
+
xml_t << dd.text
|
122
|
+
end
|
117
123
|
if dd.blocks?
|
118
|
-
xml_t << dd.text if dd.text?
|
119
124
|
# v2 does not support multi paragraph list items;
|
120
125
|
# vspace is used to emulate them
|
121
126
|
xml_t << para_to_vspace(dd.content)
|
122
|
-
else
|
123
|
-
xml_t << dd.text
|
124
127
|
end
|
125
128
|
end
|
126
129
|
end
|
@@ -33,6 +33,7 @@ module Asciidoctor
|
|
33
33
|
# If this is present, then BCP14 keywords in boldface are not assumed to be <bcp14> tags. By default they are.
|
34
34
|
$bcp_bold = !(node.attr? "no-rfc-bold-bcp14")
|
35
35
|
$smart_quotes = (node.attr("smart-quotes") != "false")
|
36
|
+
$xreftext = {}
|
36
37
|
result = []
|
37
38
|
result << '<?xml version="1.0" encoding="UTF-8"?>'
|
38
39
|
|
@@ -89,34 +90,7 @@ module Asciidoctor
|
|
89
90
|
# Below are generally applicable Processing Instructions (PIs)
|
90
91
|
# that most I-Ds might want to use. (Here they are set differently than
|
91
92
|
# their defaults in xml2rfc v1.32)
|
92
|
-
rfc_pis =
|
93
|
-
# give errors regarding ID-nits and DTD validation
|
94
|
-
strict: "yes",
|
95
|
-
|
96
|
-
# TOC control
|
97
|
-
# generate a ToC
|
98
|
-
toc: node.attr("toc-include") == "false" ? "no" : "yes",
|
99
|
-
|
100
|
-
# the number of levels of subsections in ToC. default: 3
|
101
|
-
tocdepth: node.attr("toc-depth") || "4",
|
102
|
-
|
103
|
-
# References control
|
104
|
-
|
105
|
-
# use symbolic references tags, i.e, [RFC2119] instead of [1]
|
106
|
-
symrefs: node.attr("sym-refs"),
|
107
|
-
|
108
|
-
# sort the reference entries alphabetically
|
109
|
-
sortrefs: node.attr("sort-refs"),
|
110
|
-
|
111
|
-
# Vertical whitespace control
|
112
|
-
# (using these PIs as follows is recommended by the RFC Editor)
|
113
|
-
|
114
|
-
# do not start each main section on a new page
|
115
|
-
compact: "yes",
|
116
|
-
|
117
|
-
# keep one blank line between list items
|
118
|
-
subcompact: "no",
|
119
|
-
}
|
93
|
+
rfc_pis = common_rfc_pis(node)
|
120
94
|
|
121
95
|
doc.create_internal_subset("rfc", nil, "rfc2629.dtd")
|
122
96
|
rfc_pis.each_pair do |k, v|
|
@@ -157,12 +131,16 @@ module Asciidoctor
|
|
157
131
|
end.join
|
158
132
|
end
|
159
133
|
|
134
|
+
BCP_KEYWORDS = [
|
135
|
+
'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT',
|
136
|
+
'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', 'OPTIONAL'
|
137
|
+
]
|
160
138
|
def inline_quoted(node)
|
161
139
|
noko do |xml|
|
162
140
|
case node.type
|
163
141
|
when :emphasis then xml.em node.text
|
164
142
|
when :strong
|
165
|
-
if $bcp_bold && node.text
|
143
|
+
if $bcp_bold && BCP_KEYWORDS.exist?(node.text)
|
166
144
|
xml.bcp14 node.text
|
167
145
|
else
|
168
146
|
xml.strong node.text
|
@@ -227,20 +205,20 @@ module Asciidoctor
|
|
227
205
|
# * [[[ref2]]] Ref
|
228
206
|
def section(node)
|
229
207
|
result = []
|
230
|
-
if node.attr("style") == "bibliography"
|
231
|
-
|
208
|
+
if node.attr("style") == "bibliography" ||
|
209
|
+
node.parent.context == :section && node.parent.attr("style") == "bibliography"
|
232
210
|
$processing_reflist = true
|
233
211
|
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
212
|
+
references_attributes = {
|
213
|
+
anchor: node.id,
|
214
|
+
}
|
215
|
+
=begin
|
216
|
+
result << noko do |xml|
|
217
|
+
xml.references **attr_code(references_attributes) do |references_xml|
|
218
|
+
references_xml.name node.title unless node.title.nil?
|
219
|
+
node.blocks.each { |b| references_xml << reflist(b).join }
|
220
|
+
end
|
221
|
+
end
|
244
222
|
|
245
223
|
anchor_attribute = node.id.nil? ? nil : " anchor=\"#{node.id}\""
|
246
224
|
result << "<references#{anchor_attribute}>"
|
@@ -250,6 +228,8 @@ module Asciidoctor
|
|
250
228
|
node.blocks.each do |b|
|
251
229
|
if b.context == :pass
|
252
230
|
result << reflist(b)
|
231
|
+
elsif b.context == :section
|
232
|
+
result << node.content
|
253
233
|
elsif b.context == :ulist
|
254
234
|
b.items.each do |i|
|
255
235
|
i.text # we only process the item for its displayreferences
|
@@ -257,9 +237,27 @@ module Asciidoctor
|
|
257
237
|
end
|
258
238
|
end
|
259
239
|
result << "</references>"
|
240
|
+
=end
|
241
|
+
node.blocks.each do |block|
|
242
|
+
if block.context == :section
|
243
|
+
result << section(block)
|
244
|
+
elsif block.context == :pass
|
245
|
+
# we are assuming a single contiguous :pass block of XML
|
246
|
+
result << noko do |xml|
|
247
|
+
xml.references **attr_code(references_attributes) do |xml_references|
|
248
|
+
xml_references.name node.title unless node.title.nil?
|
249
|
+
xml_references << reflist(block).join
|
250
|
+
end
|
251
|
+
end
|
252
|
+
elsif block.context == :ulist
|
253
|
+
block.items.each do |i|
|
254
|
+
i.text # we only process the item for its displayreferences
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
260
258
|
|
261
|
-
unless $xreftext.empty?
|
262
|
-
result.unshift($xreftext.keys.map { |k| %(<displayreference target="#{k}" to="#{$xreftext[k]}"/>) })
|
259
|
+
unless $xreftext.empty? || $seen_back_matter
|
260
|
+
result = result.unshift($xreftext.keys.map { |k| %(<displayreference target="#{k}" to="#{$xreftext[k]}"/>) })
|
263
261
|
end
|
264
262
|
result = result.unshift("</middle><back>") unless $seen_back_matter
|
265
263
|
$processing_reflist = false
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "htmlentities"
|
2
|
+
|
1
3
|
module Asciidoctor
|
2
4
|
module RFC::V3
|
3
5
|
module Blocks
|
@@ -40,6 +42,31 @@ module Asciidoctor
|
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
45
|
+
# stem is treated as literal, but with center alignment
|
46
|
+
def stem(node)
|
47
|
+
artwork_attributes = {
|
48
|
+
anchor: node.id,
|
49
|
+
align: node.attr("align") || "center",
|
50
|
+
type: "ascii-art",
|
51
|
+
name: node.title,
|
52
|
+
alt: node.attr("alt"),
|
53
|
+
}
|
54
|
+
|
55
|
+
# NOTE: html escaping is performed by Nokogiri
|
56
|
+
artwork_content = node.lines.join("\n")
|
57
|
+
|
58
|
+
noko do |xml|
|
59
|
+
if node.parent.context != :example
|
60
|
+
xml.figure do |xml_figure|
|
61
|
+
xml_figure.artwork artwork_content, **attr_code(artwork_attributes)
|
62
|
+
end
|
63
|
+
else
|
64
|
+
xml.artwork artwork_content, **attr_code(artwork_attributes)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
43
70
|
# Syntax:
|
44
71
|
# [[id]]
|
45
72
|
# [quote, attribution, citation info] # citation info limited to URL
|
@@ -104,7 +131,7 @@ module Asciidoctor
|
|
104
131
|
result << noko do |xml|
|
105
132
|
xml.note **attr_code(note_attributes) do |xml_note|
|
106
133
|
xml_note.name node.title unless node.title.nil?
|
107
|
-
xml_note << [paragraph1(node)].flatten.join("\n")
|
134
|
+
xml_note << HTMLEntities.new.decode([paragraph1(node)].flatten.join("\n"))
|
108
135
|
end
|
109
136
|
end
|
110
137
|
else
|
@@ -149,7 +176,7 @@ module Asciidoctor
|
|
149
176
|
# ====
|
150
177
|
def example(node)
|
151
178
|
node.blocks.each do |b|
|
152
|
-
unless %i{listing image literal}.include? b.context
|
179
|
+
unless %i{listing image literal stem}.include? b.context
|
153
180
|
warn "asciidoctor: WARNING: examples (figures) should only contain listings (sourcecode), images (artwork), or literal (artwork):\n#{b.lines}"
|
154
181
|
end
|
155
182
|
end
|
@@ -74,16 +74,12 @@ module Asciidoctor
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
# NOTE technically node.text should be node.reftext, but subs have already been applied to text
|
77
|
-
%(<bibanchor="#{node.id}">) # will convert to anchor attribute upstream
|
77
|
+
# %(<bibanchor="#{node.id}">) # will convert to anchor attribute upstream
|
78
|
+
nil
|
78
79
|
end
|
79
80
|
|
80
81
|
def inline_anchor_ref(node)
|
81
|
-
# If this is within referencegroup, output as bibanchor anyway
|
82
|
-
if $processing_reflist
|
83
|
-
%(<bibanchor="#{node.id}">) # will convert to anchor attribute upstream
|
84
|
-
else
|
85
82
|
warn %(asciidoctor: WARNING: anchor "#{node.id}" is not in a place where XML RFC will recognise it as an anchor attribute)
|
86
|
-
end
|
87
83
|
end
|
88
84
|
end
|
89
85
|
end
|
@@ -156,7 +156,7 @@ describe Asciidoctor::RFC::V2::Converter do
|
|
156
156
|
|
157
157
|
|
158
158
|
</front><middle>
|
159
|
-
<section anchor="sect1" title="Section1"><t>Text<cref>Text _Text_ *Text* `Text` ~Text~ ^Text^ http://example.com/[linktext]
|
159
|
+
<section anchor="sect1" title="Section1"><t>Text<cref>Text _Text_ *Text* `Text` ~Text~ ^Text^ http://example.com/[linktext] </cref></t>
|
160
160
|
|
161
161
|
</section>
|
162
162
|
</middle><back>
|
@@ -208,6 +208,10 @@ describe Asciidoctor::RFC::V2::Converter do
|
|
208
208
|
. They are allergic to *cinnamon*.
|
209
209
|
. More than two glasses of orange juice in 24 hours makes them howl in harmony with alarms and sirens.
|
210
210
|
. Celery makes them sad.
|
211
|
+
|
212
|
+
....
|
213
|
+
<tagging>
|
214
|
+
....
|
211
215
|
====
|
212
216
|
INPUT
|
213
217
|
<?xml version="1.0" encoding="US-ASCII"?>
|
@@ -236,8 +240,8 @@ describe Asciidoctor::RFC::V2::Converter do
|
|
236
240
|
|
237
241
|
|
238
242
|
|
239
|
-
Celery makes them sad
|
240
|
-
|
243
|
+
Celery makes them sad.
|
244
|
+
<tagging></cref></t>
|
241
245
|
</section>
|
242
246
|
</middle>
|
243
247
|
</rfc>
|
@@ -163,4 +163,27 @@ describe Asciidoctor::RFC::V2::Converter do
|
|
163
163
|
</rfc>
|
164
164
|
OUTPUT
|
165
165
|
end
|
166
|
+
|
167
|
+
it "supplies today's date if invalid date given" do
|
168
|
+
# today's date is frozen at 2000-01-01 by spec_helper
|
169
|
+
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2, header_footer: true)).to be_equivalent_to <<~'OUTPUT'
|
170
|
+
= Document title
|
171
|
+
:docName:
|
172
|
+
:date: fred
|
173
|
+
Author
|
174
|
+
INPUT
|
175
|
+
<?xml version="1.0" encoding="US-ASCII"?>
|
176
|
+
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
|
177
|
+
|
178
|
+
<rfc
|
179
|
+
submissionType="IETF">
|
180
|
+
<front>
|
181
|
+
<title>Document title</title>
|
182
|
+
<author fullname="Author"/>
|
183
|
+
<date day="1" month="January" year="2000"/>
|
184
|
+
</front><middle>
|
185
|
+
</middle>
|
186
|
+
</rfc>
|
187
|
+
OUTPUT
|
188
|
+
end
|
166
189
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
describe Asciidoctor::RFC::V2::Converter do
|
3
|
-
it "renders a
|
3
|
+
it "renders a definition list" do
|
4
4
|
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2)).to be_equivalent_to <<~'OUTPUT'
|
5
5
|
= Document title
|
6
6
|
Author
|
@@ -14,15 +14,74 @@ describe Asciidoctor::RFC::V2::Converter do
|
|
14
14
|
<section anchor="_section_1" title="Section 1">
|
15
15
|
<t>
|
16
16
|
<list hangIndent="5" style="hanging">
|
17
|
-
<t hangText="A"
|
18
|
-
<t hangText="C"
|
17
|
+
<t hangText="A"><vspace blankLines="1"/>B</t>
|
18
|
+
<t hangText="C"><vspace blankLines="1"/>D</t>
|
19
19
|
</list>
|
20
20
|
</t>
|
21
21
|
</section>
|
22
22
|
OUTPUT
|
23
23
|
end
|
24
24
|
|
25
|
-
it "renders
|
25
|
+
it "renders an inline definition list" do
|
26
|
+
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2, header_footer: true)).to be_equivalent_to <<~'OUTPUT'
|
27
|
+
= Document title
|
28
|
+
Author
|
29
|
+
:inline-definition-list: true
|
30
|
+
|
31
|
+
== Section 1
|
32
|
+
[[id]]
|
33
|
+
[hang-indent=5]
|
34
|
+
A:: B
|
35
|
+
C:: D
|
36
|
+
INPUT
|
37
|
+
<?xml version="1.0" encoding="US-ASCII"?>
|
38
|
+
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
|
39
|
+
<?rfc strict="yes"?>
|
40
|
+
<?rfc toc="yes"?>
|
41
|
+
<?rfc tocdepth="4"?>
|
42
|
+
<?rfc symrefs="yes"?>
|
43
|
+
<?rfc sortrefs="yes"?>
|
44
|
+
<?rfc compact="yes"?>
|
45
|
+
<?rfc subcompact="no"?>
|
46
|
+
<rfc submissionType="IETF">
|
47
|
+
<front>
|
48
|
+
<title>Document title</title>
|
49
|
+
<author fullname="Author"/>
|
50
|
+
<date day="1" month="January" year="2000"/>
|
51
|
+
|
52
|
+
</front><middle>
|
53
|
+
<section anchor="_section_1" title="Section 1">
|
54
|
+
<t>
|
55
|
+
<list hangIndent="5" style="hanging">
|
56
|
+
<t hangText="A"><vspace blankLines="1"/>B</t>
|
57
|
+
<t hangText="C"><vspace blankLines="1"/>D</t>
|
58
|
+
</list>
|
59
|
+
</t>
|
60
|
+
</section>
|
61
|
+
</middle>
|
62
|
+
</rfc>
|
63
|
+
OUTPUT
|
64
|
+
end
|
65
|
+
|
66
|
+
it "ignores formatting on definition list terms" do
|
67
|
+
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2)).to be_equivalent_to <<~'OUTPUT'
|
68
|
+
= Document title
|
69
|
+
Author
|
70
|
+
|
71
|
+
== Section 1
|
72
|
+
`A` _2_:: B
|
73
|
+
INPUT
|
74
|
+
<section anchor="_section_1" title="Section 1">
|
75
|
+
<t>
|
76
|
+
<list style="hanging">
|
77
|
+
<t hangText="A 2"><vspace blankLines="1"/>B</t>
|
78
|
+
</list>
|
79
|
+
</t>
|
80
|
+
</section>
|
81
|
+
OUTPUT
|
82
|
+
end
|
83
|
+
|
84
|
+
it "renders a definition list with empty style" do
|
26
85
|
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2)).to be_equivalent_to <<~'OUTPUT'
|
27
86
|
= Document title
|
28
87
|
Author
|
@@ -36,15 +95,15 @@ describe Asciidoctor::RFC::V2::Converter do
|
|
36
95
|
<section anchor="_section_1" title="Section 1">
|
37
96
|
<t>
|
38
97
|
<list hangIndent="5" style="empty">
|
39
|
-
<t hangText="A"
|
40
|
-
<t hangText="C"
|
98
|
+
<t hangText="A"><vspace blankLines="1"/>B</t>
|
99
|
+
<t hangText="C"><vspace blankLines="1"/>D</t>
|
41
100
|
</list>
|
42
101
|
</t>
|
43
102
|
</section>
|
44
103
|
OUTPUT
|
45
104
|
end
|
46
105
|
|
47
|
-
it "renders hybrid
|
106
|
+
it "renders hybrid definition list" do
|
48
107
|
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2)).to be_equivalent_to <<~'OUTPUT'
|
49
108
|
= Document title
|
50
109
|
Author
|
@@ -83,6 +142,26 @@ describe Asciidoctor::RFC::V2::Converter do
|
|
83
142
|
OUTPUT
|
84
143
|
end
|
85
144
|
|
145
|
+
it "renders a definition list with definitions on the next line" do
|
146
|
+
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2)).to be_equivalent_to <<~'OUTPUT'
|
147
|
+
= Document title
|
148
|
+
Author
|
149
|
+
|
150
|
+
== Section 1
|
151
|
+
A::
|
152
|
+
+
|
153
|
+
B
|
154
|
+
INPUT
|
155
|
+
<section anchor="_section_1" title="Section 1">
|
156
|
+
<t>
|
157
|
+
<list style="hanging">
|
158
|
+
<t hangText="A"><vspace blankLines="1"/>B</t>
|
159
|
+
</list>
|
160
|
+
</t>
|
161
|
+
</section>
|
162
|
+
OUTPUT
|
163
|
+
end
|
164
|
+
|
86
165
|
it "uses vspace to break up multi paragraph list items" do
|
87
166
|
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2)).to be_equivalent_to <<~'OUTPUT'
|
88
167
|
= Document title
|
@@ -98,8 +177,27 @@ describe Asciidoctor::RFC::V2::Converter do
|
|
98
177
|
<section anchor="_section_1" title="Section 1">
|
99
178
|
<t>
|
100
179
|
<list style="hanging">
|
101
|
-
<t hangText="Notes"
|
102
|
-
<vspace/>Note 3.</t>
|
180
|
+
<t hangText="Notes"><vspace blankLines="1"/>Note 1.<vspace blankLines="1"/>Note 2.
|
181
|
+
<vspace blankLines="1"/>Note 3.</t>
|
182
|
+
</list>
|
183
|
+
</t>
|
184
|
+
</section>
|
185
|
+
OUTPUT
|
186
|
+
end
|
187
|
+
it "renders definition lists with more definition terms than definitions" do
|
188
|
+
expect(Asciidoctor.convert(<<~'INPUT', backend: :rfc2)).to be_equivalent_to <<~'OUTPUT'
|
189
|
+
= Document title
|
190
|
+
Author
|
191
|
+
|
192
|
+
== Section 1
|
193
|
+
Notes1::
|
194
|
+
Notes2:: Definition
|
195
|
+
INPUT
|
196
|
+
<section anchor="_section_1" title="Section 1">
|
197
|
+
<t>
|
198
|
+
<list style="hanging">
|
199
|
+
<t hangText="Notes1"/>
|
200
|
+
<t hangText="Notes2"><vspace blankLines="1"/>Definition</t>
|
103
201
|
</list>
|
104
202
|
</t>
|
105
203
|
</section>
|