kramdown-rfc2629 1.7.3 → 1.7.5
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 +27 -8
- data/bin/kramdown-rfc-extract-sourcecode +68 -6
- data/kramdown-rfc2629.gemspec +1 -1
- data/lib/kramdown-rfc/parameterset.rb +9 -1
- data/lib/kramdown-rfc/refxml.rb +2 -1
- data/lib/kramdown-rfc2629.rb +4 -0
- 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: c4312704a187b582d3529a40e9823be50ad351fed98b6e29ab808098c56f9a0b
|
4
|
+
data.tar.gz: 27b76a9e2993053e0833e26989d97c074a0a3dcae3b47fd40d1aeaa96d928620
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c759b0acce805b13a263ec9b7246524a880715ff347d2b55e804a068c267dac09dc4bbc0630fc397ccdf364dd1b33102eff048729acacb271601b161502365c1
|
7
|
+
data.tar.gz: 4fb895add0affa38a4504c0e610676cef702a336e4377fee1142b41ddf1f83541ec64084aceb103857d944a14680561b53d19327d4661b15ae65e65de5b7b67e
|
data/README.md
CHANGED
@@ -475,8 +475,8 @@ allow for automatic entry of items as normative/informative.
|
|
475
475
|
(1.0.16:) Markdown footnotes are converted into `cref`s (XML2RFC formal
|
476
476
|
comments; note that these are only visible if the pi "comments" is set to yes).
|
477
477
|
The anchor is taken from the markdown footnote name. The source, if
|
478
|
-
needed, can be supplied by an
|
479
|
-
ALD):
|
478
|
+
needed, can be supplied by an [IAL][], as in (first example also uses an
|
479
|
+
[ALD][]):
|
480
480
|
|
481
481
|
```markdown
|
482
482
|
{:cabo: source="cabo"}
|
@@ -494,7 +494,7 @@ Note that XML2RFC v2 doesn't allow structure in crefs. If you put any,
|
|
494
494
|
you get the escaped verbatim XML...
|
495
495
|
|
496
496
|
(1.0.11:) Allow overriding "style" attribute (via IAL =
|
497
|
-
[inline attribute list][
|
497
|
+
[inline attribute list][IAL]) in lists and spans
|
498
498
|
as in:
|
499
499
|
|
500
500
|
```markdown
|
@@ -549,8 +549,9 @@ note that this creates ugly blank space in some HTML converters).
|
|
549
549
|
|
550
550
|
# Risks and Side-Effects
|
551
551
|
|
552
|
-
The code is not very polished, but now quite stable; it has been
|
553
|
-
|
552
|
+
The code is not very polished, but now quite stable; it has been
|
553
|
+
successfully used for hundreds of non-trivial Internet-Drafts and RFCs.
|
554
|
+
You probably still need to
|
554
555
|
skim [v3][] if you want to write an Internet-Draft, but you
|
555
556
|
don't really need to understand XML very much. Knowing the basics of
|
556
557
|
YAML helps with the metadata (but you'll understand it from the
|
@@ -563,12 +564,29 @@ This can for instance be used to obtain unnumbered appendices:
|
|
563
564
|
```markdown
|
564
565
|
Acknowledgements
|
565
566
|
================
|
566
|
-
{: numbered="
|
567
|
+
{: numbered="false"}
|
568
|
+
|
569
|
+
John Mattsson was nice enough to point out the need for this being documented.
|
570
|
+
```
|
571
|
+
|
572
|
+
|
573
|
+
Note that this specific example is covered by a predefined
|
574
|
+
kramdown-rfc ["attribute list definition" (ALD)][ALD]:
|
575
|
+
|
576
|
+
```markdown
|
577
|
+
{:unnumbered: numbered="false"}
|
578
|
+
```
|
579
|
+
|
580
|
+
so the conventional way to write this example would be the somewhat simpler:
|
581
|
+
|
582
|
+
```markdown
|
583
|
+
Acknowledgements
|
584
|
+
================
|
585
|
+
{:unnumbered}
|
567
586
|
|
568
587
|
John Mattsson was nice enough to point out the need for this being documented.
|
569
588
|
```
|
570
589
|
|
571
|
-
[IAL]: https://kramdown.gettalong.org/syntax.html#inline-attribute-lists
|
572
590
|
|
573
591
|
# Upconversion
|
574
592
|
|
@@ -638,7 +656,8 @@ made it possible to license kramdown-rfc under the same license.
|
|
638
656
|
|
639
657
|
[kramdown]: https://kramdown.gettalong.org
|
640
658
|
[kdsyntax]: http://kramdown.gettalong.org/syntax.html
|
641
|
-
[
|
659
|
+
[IAL]: https://kramdown.gettalong.org/syntax.html#inline-attribute-lists
|
660
|
+
[ALD]: https://kramdown.gettalong.org/syntax.html#attribute-list-definitions
|
642
661
|
[stupid]: http://tools.ietf.org/id/draft-hartke-xmpp-stupid-00
|
643
662
|
[RFC 2629]: https://www.rfc-editor.org/rfc/rfc2629.html
|
644
663
|
[RFC 7749]: https://www.rfc-editor.org/rfc/rfc7749.html
|
@@ -9,10 +9,35 @@ require_relative '../lib/kramdown-rfc/rexml-all-text.rb'
|
|
9
9
|
def clean(s)
|
10
10
|
s.gsub!(/\//, ":")
|
11
11
|
s.gsub!(/\A([-.]+)/) {"_" * $1.size }
|
12
|
-
s.gsub!(/[^-.:\w]
|
12
|
+
s.gsub!(/[^-.:\w]+/, "-")
|
13
13
|
s
|
14
14
|
end
|
15
15
|
|
16
|
+
$seen_slugs = {}
|
17
|
+
|
18
|
+
def slugify_like_xml2rfc(s, delta = 0)
|
19
|
+
s = s.unicode_normalize(:nfkd).force_encoding(Encoding::ASCII).scrub('').downcase
|
20
|
+
s.gsub!(/[^-\w\s\/]/, '')
|
21
|
+
s = s.strip
|
22
|
+
s.gsub!(/[-\s\/]/, '-')
|
23
|
+
n = 32 - delta
|
24
|
+
nmax = [s.size, 40 - delta].min
|
25
|
+
while $seen_slugs[slugex = s[0...n]] && n < nmax
|
26
|
+
n += 1
|
27
|
+
end
|
28
|
+
if $seen_slugs[slugex]
|
29
|
+
m = 2
|
30
|
+
while $seen_slugs[slugex = "#{s[0...n]}-#{m}"]
|
31
|
+
m += 1
|
32
|
+
if m == 1000
|
33
|
+
raise ArgumentError, "Can't build distinguishable slug for '#{s}'"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
$seen_slugs[slugex] = s
|
38
|
+
slugex
|
39
|
+
end
|
40
|
+
|
16
41
|
target = nil
|
17
42
|
dir = nil
|
18
43
|
unfold = true
|
@@ -52,17 +77,54 @@ warned = Hash.new { |h, k| h[k] = Hash.new }
|
|
52
77
|
d = REXML::Document.new(ARGF)
|
53
78
|
REXML::XPath.each(d.root, "//sourcecode|//artwork") do |x|
|
54
79
|
if ty = x[:type]
|
80
|
+
is_svg = false
|
81
|
+
REXML::XPath.each(x, "svg") do is_svg = true end
|
55
82
|
ty = clean(ty)
|
83
|
+
if is_svg && ty != "svg"
|
84
|
+
warn "** replacing SVG type '#{ty}' by type 'svg'"
|
85
|
+
ty = "svg"
|
86
|
+
end
|
87
|
+
ext = ty
|
88
|
+
if ty.empty?
|
89
|
+
ty = "=txt"
|
90
|
+
ext = "txt"
|
91
|
+
end
|
56
92
|
name = x[:name]
|
93
|
+
name_is_from_slug = false
|
57
94
|
if !name || name.empty?
|
58
|
-
name =
|
59
|
-
|
95
|
+
REXML::XPath.each(x, "ancestor::*/name[position() = 1]") do |nameel|
|
96
|
+
unless sname = nameel['slugifiedName']
|
97
|
+
alltext = nameel.all_text
|
98
|
+
nameel.add_attribute('slugifiedName',
|
99
|
+
sname = clean("name-" << slugify_like_xml2rfc(alltext, 5)))
|
100
|
+
end
|
101
|
+
name = clean(sname.to_s.sub(/^name-/, ''))
|
102
|
+
name_is_from_slug = true
|
103
|
+
end
|
104
|
+
if !name || name.empty?
|
105
|
+
name = gensym.succ!.dup
|
106
|
+
end
|
107
|
+
name = "#{name}.#{ext}"
|
60
108
|
end
|
61
109
|
name = clean(name)
|
62
110
|
if taken[ty][name]
|
63
|
-
|
64
|
-
|
65
|
-
|
111
|
+
if name_is_from_slug || is_svg
|
112
|
+
# rename old entry as well if it was from slug?
|
113
|
+
nameparts = name.split(".")
|
114
|
+
if is_svg && nameparts[-1] != "svg"
|
115
|
+
nameparts << "svg"
|
116
|
+
end
|
117
|
+
ext1 = nameparts.pop || "txt"
|
118
|
+
suffix = "b"
|
119
|
+
while taken[ty][name = [*nameparts[0...-1], "#{nameparts[-1]}-#{suffix}", ext1].join(".")]
|
120
|
+
suffix.succ!
|
121
|
+
end
|
122
|
+
taken[ty][name] = ''
|
123
|
+
else
|
124
|
+
unless warned[ty][name]
|
125
|
+
warn "Concatenating to #{ty}/#{name}."
|
126
|
+
warned[ty][name] = true
|
127
|
+
end
|
66
128
|
end
|
67
129
|
else
|
68
130
|
taken[ty][name] = ''
|
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.7.
|
3
|
+
s.version = '1.7.5'
|
4
4
|
s.summary = "Kramdown extension for generating RFCXML (RFC 799x)."
|
5
5
|
s.description = %{An RFCXML (RFC 799x) generating backend for Thomas Leitner's
|
6
6
|
"kramdown" markdown parser. Mostly useful for RFC writers.}
|
@@ -40,11 +40,19 @@ module KramdownRFC
|
|
40
40
|
def attr(pn)
|
41
41
|
val, an = van(pn)
|
42
42
|
@av[an.intern] = val
|
43
|
-
%{#{an}="#{escattr(val)}"} if val
|
43
|
+
%{#{an}="#{escattr(val)}"} if val # see attrtf below
|
44
44
|
end
|
45
45
|
def attrs(*pns)
|
46
46
|
pns.map{ |pn| attr(pn) if pn }.compact.join(" ")
|
47
47
|
end
|
48
|
+
def attrtf(pn) # can do an overriding false value
|
49
|
+
val, an = van(pn)
|
50
|
+
@av[an.intern] = val
|
51
|
+
%{#{an}="#{escattr(val)}"} unless val.nil?
|
52
|
+
end
|
53
|
+
def attrstf(*pns)
|
54
|
+
pns.map{ |pn| attrtf(pn) if pn }.compact.join(" ")
|
55
|
+
end
|
48
56
|
def ele(pn, attr=nil, defcontent=nil, markdown=false)
|
49
57
|
val, an = van(pn)
|
50
58
|
val ||= defcontent
|
data/lib/kramdown-rfc/refxml.rb
CHANGED
@@ -17,7 +17,8 @@ module KramdownRFC
|
|
17
17
|
def self.ref_to_xml(k, v)
|
18
18
|
vps = KramdownRFC::ParameterSet.new(v)
|
19
19
|
erb = ERB.trim_new <<-REFERB, '-'
|
20
|
-
<reference anchor="<%= escattr(k) %>" <%=
|
20
|
+
<reference anchor="<%= escattr(k) %>" <%=
|
21
|
+
vps.attrstf("target", "quoteTitle=quote-title=quotetitle=qt") %>>
|
21
22
|
<front>
|
22
23
|
<%= vps.ele("title") -%>
|
23
24
|
|
data/lib/kramdown-rfc2629.rb
CHANGED
@@ -702,6 +702,10 @@ COLORS
|
|
702
702
|
checks = el.attr.delete("check")
|
703
703
|
postprocs = el.attr.delete("post")
|
704
704
|
case t
|
705
|
+
when "cbor"
|
706
|
+
warn "** There is no sourcecode-type “cbor”."
|
707
|
+
warn "** Do you mean “cbor-diag” (diagnostic notation)"
|
708
|
+
warn "** or “cbor-pretty” (annotated hex-dump)?"
|
705
709
|
when "json"
|
706
710
|
checks ||= "json"
|
707
711
|
when /\A(.*)-from-yaml\z/
|
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.7.
|
4
|
+
version: 1.7.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Bormann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kramdown
|