kramdown-rfc2629 1.4.13 → 1.4.18
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.md +4 -0
- data/bin/kdrfc +1 -1
- data/bin/kramdown-rfc-cache-i-d-bibxml +1 -1
- data/bin/kramdown-rfc2629 +83 -57
- data/kramdown-rfc2629.gemspec +1 -1
- data/lib/kramdown-rfc2629.rb +17 -8
- 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: f351fb251c634da227a9ce9202094ee20ac11689be7b2144f118ba07aa2b31fb
|
4
|
+
data.tar.gz: 45d0559f1f6c6ff2c4ba18bab26a4e88bec8faad622cf0b9183c144eb419441f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d3acf198070f8d7b69995f9f581302a6d20bbb24241350a169ef8cc5ccfeb49d191adfaaa11442df5859534812761d91c7f7c5a8b22b5a2aec19c8d2a02e48b
|
7
|
+
data.tar.gz: b1c5d6d9c968d82a453bcdfcc234e1dc4f3844ba9084942f73fd5212258d0d1e361f55fc1cb36910b58a4c2e68286cfe20695cf8d6d1c9e538a9907164d89d71
|
data/README.md
CHANGED
@@ -317,6 +317,10 @@ Note that this feature does not play well with the CI (continuous
|
|
317
317
|
integration) support in Martin Thomson's [I-D Template][], as that may
|
318
318
|
not have the tools installed in its docker instance.
|
319
319
|
|
320
|
+
More details have been collected on the [wiki][svg].
|
321
|
+
|
322
|
+
[svg]: https://github.com/cabo/kramdown-rfc2629/wiki/SVG
|
323
|
+
|
320
324
|
(1.2.9:)
|
321
325
|
The YAML header now allows specifying [kramdown_options][].
|
322
326
|
|
data/bin/kdrfc
CHANGED
@@ -127,7 +127,7 @@ BANNER
|
|
127
127
|
opts.on("-p", "--[no-]prep", "Convert xml to prepped xml") do |v|
|
128
128
|
$options.prep = v
|
129
129
|
end
|
130
|
-
opts.on("-P", "--[no-]pdf", "Convert xml to PDF") do |v|
|
130
|
+
opts.on("-P", "-f", "--[no-]pdf", "Convert xml to PDF") do |v|
|
131
131
|
$options.pdf = v
|
132
132
|
end
|
133
133
|
opts.on("-c", "--[no-]convert", "Convert xml to v3 xml") do |v|
|
data/bin/kramdown-rfc2629
CHANGED
@@ -83,7 +83,7 @@ def do_the_tls_dance
|
|
83
83
|
end
|
84
84
|
|
85
85
|
RE_NL = /(?:\n|\r|\r\n)/
|
86
|
-
RE_SECTION = /---(
|
86
|
+
RE_SECTION = /---(?: +(\w+)(-?))?\s*#{RE_NL}(.*?#{RE_NL})(?=---(?:\s+\w+-?)?\s*#{RE_NL}|\Z)/m
|
87
87
|
|
88
88
|
NMDTAGS = ["{:/nomarkdown}\n\n", "\n\n{::nomarkdown}\n"]
|
89
89
|
|
@@ -98,7 +98,61 @@ def yaml_load(input, *args)
|
|
98
98
|
end
|
99
99
|
else
|
100
100
|
YAML.load(input)
|
101
|
-
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def process_kramdown_options(coding_override = nil,
|
105
|
+
smart_quotes = nil, typographic_symbols = nil,
|
106
|
+
header_kramdown_options = nil)
|
107
|
+
|
108
|
+
ascii_target = coding_override && coding_override =~ /ascii/
|
109
|
+
suppress_typography = ascii_target || $options.v3
|
110
|
+
entity_output = ascii_target ? :numeric : :as_char;
|
111
|
+
|
112
|
+
options = {input: 'RFC2629Kramdown', entity_output: entity_output, link_defs: {}}
|
113
|
+
|
114
|
+
if smart_quotes.nil? && suppress_typography
|
115
|
+
smart_quotes = false
|
116
|
+
end
|
117
|
+
if smart_quotes == false
|
118
|
+
smart_quotes = ["'".ord, "'".ord, '"'.ord, '"'.ord]
|
119
|
+
end
|
120
|
+
case smart_quotes
|
121
|
+
when Array
|
122
|
+
options[:smart_quotes] = smart_quotes
|
123
|
+
when nil, true
|
124
|
+
# nothin
|
125
|
+
else
|
126
|
+
warn "*** Can't deal with smart_quotes value #{smart_quotes.inspect}"
|
127
|
+
end
|
128
|
+
|
129
|
+
if typographic_symbols.nil? && suppress_typography
|
130
|
+
typographic_symbols = false
|
131
|
+
end
|
132
|
+
if typographic_symbols == false
|
133
|
+
typographic_symbols = Hash[::Kramdown::Parser::Kramdown::TYPOGRAPHIC_SYMS.map { |k, v|
|
134
|
+
if Symbol === v
|
135
|
+
[v.intern, k]
|
136
|
+
end
|
137
|
+
}.compact]
|
138
|
+
end
|
139
|
+
# warn [:TYPOGRAPHIC_SYMBOLS, typographic_symbols].to_yaml
|
140
|
+
case typographic_symbols
|
141
|
+
when Hash
|
142
|
+
options[:typographic_symbols] = typographic_symbols
|
143
|
+
when nil, true
|
144
|
+
# nothin
|
145
|
+
else
|
146
|
+
warn "*** Can't deal with typographic_symbols value #{typographic_symbols.inspect}"
|
147
|
+
end
|
148
|
+
|
149
|
+
if header_kramdown_options
|
150
|
+
options.merge! header_kramdown_options
|
151
|
+
end
|
152
|
+
|
153
|
+
$global_markdown_options = options # For nested calls in bibref annotation processing and xref text
|
154
|
+
|
155
|
+
options
|
102
156
|
end
|
103
157
|
|
104
158
|
XREF_SECTIONS_RE = ::Kramdown::Parser::RFC2629Kramdown::SECTIONS_RE
|
@@ -127,15 +181,21 @@ def xml_from_sections(input)
|
|
127
181
|
# We put back the "---" plus gratuitous blank lines to hack the line number in errors
|
128
182
|
yaml_in = input[/---\s*/] << sections.shift[2]
|
129
183
|
ps = KramdownRFC::ParameterSet.new(yaml_load(yaml_in, [Date], [], true))
|
184
|
+
|
130
185
|
coding_override = ps.has(:coding)
|
131
186
|
smart_quotes = ps[:smart_quotes]
|
132
187
|
typographic_symbols = ps[:typographic_symbols]
|
133
|
-
|
188
|
+
header_kramdown_options = ps[:kramdown_options]
|
189
|
+
|
190
|
+
kramdown_options = process_kramdown_options(coding_override,
|
191
|
+
smart_quotes, typographic_symbols,
|
192
|
+
header_kramdown_options)
|
134
193
|
|
135
194
|
# all the other sections are put in a Hash, possibly concatenated from parts there
|
136
195
|
sechash = Hash.new{ |h,k| h[k] = ""}
|
137
196
|
snames = [] # a stack of section names
|
138
197
|
sections.each do |sname, nmdflag, text|
|
198
|
+
# warn [:SNAME, sname, nmdflag, text[0..10]].inspect
|
139
199
|
nmdin, nmdout = {
|
140
200
|
"-" => ["", ""], # stay in nomarkdown
|
141
201
|
"" => NMDTAGS, # pop out temporarily
|
@@ -243,13 +303,12 @@ def xml_from_sections(input)
|
|
243
303
|
end
|
244
304
|
|
245
305
|
stand_alone = ps[:stand_alone]
|
246
|
-
link_defs = {}
|
247
306
|
|
248
307
|
[:normative, :informative].each do |sn|
|
249
308
|
if refs = ps[sn]
|
250
309
|
refs.each do |k, v|
|
251
|
-
href =
|
252
|
-
link_defs[k] = ["##{href}", nil]
|
310
|
+
href = ::Kramdown::Parser::RFC2629Kramdown.idref_cleanup(k)
|
311
|
+
kramdown_options[:link_defs][k] = ["##{href}", nil] # allow [RFC2119] in addition to {{RFC2119}}
|
253
312
|
|
254
313
|
bibref = anchor_to_bibref[k] || k
|
255
314
|
bts, url = bibtagsys(bibref, k, stand_alone)
|
@@ -270,9 +329,7 @@ def xml_from_sections(input)
|
|
270
329
|
if bts && !v.delete("override")
|
271
330
|
warn "*** warning: explicit settings completely override canned bibxml in reference #{k}"
|
272
331
|
end
|
273
|
-
|
274
|
-
$global_markdown_options = options # For recursive calls in bibref annotation processing.
|
275
|
-
sechash[sn.to_s] << KramdownRFC::ref_to_xml(k, v)
|
332
|
+
sechash[sn.to_s] << KramdownRFC::ref_to_xml(href, v)
|
276
333
|
end
|
277
334
|
end
|
278
335
|
end
|
@@ -289,7 +346,7 @@ def xml_from_sections(input)
|
|
289
346
|
warn "*** sections left #{sechash.keys.inspect}!"
|
290
347
|
end
|
291
348
|
|
292
|
-
[input,
|
349
|
+
[input, kramdown_options, coding_override]
|
293
350
|
end
|
294
351
|
|
295
352
|
XML_RESOURCE_ORG_PREFIX = Kramdown::Converter::Rfc2629::XML_RESOURCE_ORG_PREFIX
|
@@ -307,7 +364,7 @@ def bibtagsys(bib, anchor=nil, stand_alone=true)
|
|
307
364
|
elsif bib =~ /\A([-A-Z0-9]+)\./ &&
|
308
365
|
(xro = Kramdown::Converter::Rfc2629::XML_RESOURCE_ORG_MAP[$1])
|
309
366
|
dir, _ttl, rewrite_anchor = xro
|
310
|
-
bib1 =
|
367
|
+
bib1 = ::Kramdown::Parser::RFC2629Kramdown.idref_cleanup(bib)
|
311
368
|
if anchor && bib1 != anchor
|
312
369
|
if rewrite_anchor
|
313
370
|
a = %{?anchor=#{anchor}}
|
@@ -371,7 +428,6 @@ if $options.verbose && $options.v3
|
|
371
428
|
warn "*** not much RFCXMLv3 stuff implemented yet"
|
372
429
|
end
|
373
430
|
|
374
|
-
coding_override = :as_char
|
375
431
|
input = ARGF.read
|
376
432
|
if input[0] == "\uFEFF"
|
377
433
|
warn "*** There is a leading byte order mark. Ignored."
|
@@ -392,62 +448,32 @@ if input =~ /[\t]/
|
|
392
448
|
input = expand_tabs(input)
|
393
449
|
end
|
394
450
|
|
395
|
-
link_defs = {}
|
396
451
|
if input =~ /\A---/ # this is a sectionized file
|
397
452
|
do_the_tls_dance unless ENV["KRAMDOWN_DONT_VERIFY_HTTPS"]
|
398
|
-
input,
|
453
|
+
input, options, coding_override = xml_from_sections(input)
|
454
|
+
else
|
455
|
+
options = process_kramdown_options # all default
|
399
456
|
end
|
400
457
|
if input =~ /\A<\?xml/ # if this is a whole XML file, protect it
|
401
458
|
input = "{::nomarkdown}\n#{input}\n{:/nomarkdown}\n"
|
402
459
|
end
|
403
|
-
options = {input: 'RFC2629Kramdown', entity_output: coding_override, link_defs: link_defs}
|
404
|
-
if smart_quotes.nil?
|
405
|
-
if (target_coding && target_coding =~ /ascii/) || $options.v3
|
406
|
-
smart_quotes = false
|
407
|
-
end
|
408
|
-
end
|
409
|
-
if smart_quotes == false
|
410
|
-
smart_quotes = ["'".ord, "'".ord, '"'.ord, '"'.ord]
|
411
|
-
end
|
412
|
-
case smart_quotes
|
413
|
-
when Array
|
414
|
-
options[:smart_quotes] = smart_quotes
|
415
|
-
when nil, true
|
416
|
-
# nothin
|
417
|
-
else
|
418
|
-
warn "*** Can't deal with smart_quotes value #{smart_quotes.inspect}"
|
419
|
-
end
|
420
|
-
if typographic_symbols.nil?
|
421
|
-
if (target_coding && target_coding =~ /ascii/) || $options.v3
|
422
|
-
typographic_symbols = false
|
423
|
-
end
|
424
|
-
end
|
425
|
-
if typographic_symbols == false
|
426
|
-
typographic_symbols = Hash[::Kramdown::Parser::Kramdown::TYPOGRAPHIC_SYMS.map { |k, v|
|
427
|
-
if Symbol === v
|
428
|
-
[v.intern, k]
|
429
|
-
end
|
430
|
-
}.compact]
|
431
|
-
end
|
432
|
-
# warn [:TYPOGRAPHIC_SYMBOLS, typographic_symbols].to_yaml
|
433
|
-
case typographic_symbols
|
434
|
-
when Hash
|
435
|
-
options[:typographic_symbols] = typographic_symbols
|
436
|
-
when nil, true
|
437
|
-
# nothin
|
438
|
-
else
|
439
|
-
warn "*** Can't deal with typographic_symbols value #{typographic_symbols.inspect}"
|
440
|
-
end
|
441
460
|
|
442
|
-
if
|
443
|
-
|
461
|
+
if coding_override
|
462
|
+
input = input.encode(Encoding.find(coding_override), fallback: FALLBACK)
|
444
463
|
end
|
445
464
|
|
446
|
-
|
447
|
-
|
465
|
+
# 1.4.17: because of UTF-8 bibxml files, kramdown always needs to see UTF-8 (!)
|
466
|
+
if input.encoding != Encoding::UTF_8
|
467
|
+
input = input.encode(Encoding::UTF_8)
|
448
468
|
end
|
449
469
|
|
450
470
|
# warn "options: #{options.inspect}"
|
451
471
|
doc = Kramdown::Document.new(input, options)
|
452
472
|
$stderr.puts doc.warnings.to_yaml unless doc.warnings.empty?
|
453
|
-
|
473
|
+
output = doc.to_rfc2629
|
474
|
+
|
475
|
+
if coding_override
|
476
|
+
output = output.encode(Encoding.find(coding_override), fallback: FALLBACK)
|
477
|
+
end
|
478
|
+
|
479
|
+
puts output
|
data/kramdown-rfc2629.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'kramdown-rfc2629'
|
3
|
-
s.version = '1.4.
|
3
|
+
s.version = '1.4.18'
|
4
4
|
s.summary = "Kramdown extension for generating RFC 7749 XML."
|
5
5
|
s.description = %{An RFC7749 (XML2RFC) generating backend for Thomas Leitner's
|
6
6
|
"kramdown" markdown parser. Mostly useful for RFC writers.}
|
data/lib/kramdown-rfc2629.rb
CHANGED
@@ -42,7 +42,7 @@ module Kramdown
|
|
42
42
|
@block_parsers.unshift(:block_pi)
|
43
43
|
end
|
44
44
|
|
45
|
-
XREF_BASE =
|
45
|
+
XREF_BASE = /#{REXML::XMLTokens::NAME_CHAR}+/ # a token for a reference
|
46
46
|
XREF_TXT = /(?:[^\(]|\([^\)]*\))+/ # parenthesized text
|
47
47
|
XREF_RE = /#{XREF_BASE}(?: \(#{XREF_TXT}\))?/
|
48
48
|
XREF_RE_M = /\A(#{XREF_BASE})(?: \((#{XREF_TXT})\))?/ # matching version of XREF_RE
|
@@ -51,6 +51,11 @@ module Kramdown
|
|
51
51
|
XREF_ANY = /(?:#{XREF_SINGLE}|#{XREF_MULTI})/
|
52
52
|
SECTIONS_RE = /(?:#{XREF_ANY} and )?#{XREF_ANY}/
|
53
53
|
|
54
|
+
def self.idref_cleanup(href)
|
55
|
+
# can't start an IDREF with a number or reserved start
|
56
|
+
href.gsub(/\A(?:[0-9]|section-|u-|figure-|table-|iref-)/) { "_#{$&}" }
|
57
|
+
end
|
58
|
+
|
54
59
|
def handle_bares(s, attr, format, href, last_join = nil)
|
55
60
|
if s.match(/\A(#{XREF_ANY}) and (#{XREF_ANY})\z/)
|
56
61
|
handle_bares($1, {}, nil, href, " and ")
|
@@ -132,11 +137,11 @@ module Kramdown
|
|
132
137
|
attr['format'] = 'counter'
|
133
138
|
end
|
134
139
|
end
|
135
|
-
if href.match(XREF_RE_M)
|
140
|
+
if href.match(/#{XREF_RE_M}\z/)
|
136
141
|
href = $1
|
137
142
|
attr['text'] = $2
|
138
143
|
end
|
139
|
-
href =
|
144
|
+
href = self.class.idref_cleanup(href)
|
140
145
|
attr['target'] = href
|
141
146
|
el = Element.new(:xref, nil, attr)
|
142
147
|
end
|
@@ -212,10 +217,10 @@ module Kramdown
|
|
212
217
|
def rfc2629_fix
|
213
218
|
if a = attr
|
214
219
|
if anchor = a.delete('id')
|
215
|
-
a['anchor'] = anchor
|
220
|
+
a['anchor'] = ::Kramdown::Parser::RFC2629Kramdown.idref_cleanup(anchor)
|
216
221
|
end
|
217
222
|
if anchor = a.delete('href')
|
218
|
-
a['target'] = anchor
|
223
|
+
a['target'] = ::Kramdown::Parser::RFC2629Kramdown.idref_cleanup(anchor)
|
219
224
|
end
|
220
225
|
attr.keys.each do |k|
|
221
226
|
if (d = k.gsub(/_(.|$)/) { $1.upcase }) != k or d = STUDLY_ATTR_MAP[k]
|
@@ -251,7 +256,10 @@ module Kramdown
|
|
251
256
|
require 'net/http/persistent'
|
252
257
|
$http = Net::HTTP::Persistent.new name: 'kramdown-rfc'
|
253
258
|
rescue Exception => e
|
254
|
-
warn "**
|
259
|
+
warn "** Not using persistent HTTP -- #{e}"
|
260
|
+
warn "** To silence this message and get full speed, try:"
|
261
|
+
warn "** gem install net-http-persistent"
|
262
|
+
warn "** If this doesn't work, you can ignore this warning."
|
255
263
|
end
|
256
264
|
end
|
257
265
|
|
@@ -917,6 +925,7 @@ COLORS
|
|
917
925
|
],
|
918
926
|
"W3C" => "bibxml4",
|
919
927
|
"3GPP" => "bibxml5",
|
928
|
+
"SDO-3GPP" => "bibxml5",
|
920
929
|
"ANSI" => "bibxml2",
|
921
930
|
"CCITT" => "bibxml2",
|
922
931
|
"FIPS" => "bibxml2",
|
@@ -955,7 +964,7 @@ COLORS
|
|
955
964
|
warn "*** missing anchor for '#{src}'"
|
956
965
|
src
|
957
966
|
)
|
958
|
-
anchor.
|
967
|
+
anchor = ::Kramdown::Parser::RFC2629Kramdown.idref_cleanup(anchor)
|
959
968
|
anchor.gsub!('/', '_') # should take out all illegals
|
960
969
|
to_insert = ""
|
961
970
|
src.scan(/(W3C|3GPP|[A-Z-]+)[.]?([A-Za-z_0-9.\/\+-]+)/) do |t, n|
|
@@ -1024,7 +1033,7 @@ COLORS
|
|
1024
1033
|
# "\n#{' '*indent}<cref>\n#{inner(el.value, indent, opts).rstrip}\n#{' '*indent}</cref>"
|
1025
1034
|
content = inner(el.value, indent, opts).strip
|
1026
1035
|
content = escape_html(content.sub(/\A<t>(.*)<\/t>\z/m) {$1}, :text) # text only...
|
1027
|
-
name = el.options[:name]
|
1036
|
+
name = ::Kramdown::Parser::RFC2629Kramdown.idref_cleanup(el.options[:name])
|
1028
1037
|
while @footnote_names_in_use[name] do
|
1029
1038
|
if name =~ /:\d+\z/
|
1030
1039
|
name.succ!
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kramdown-rfc2629
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Bormann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kramdown
|