kramdown-rfc2629 0.13.4 → 0.13.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.
- data/bin/kramdown-rfc2629 +74 -1
- data/kramdown-rfc2629.gemspec +1 -1
- metadata +56 -31
data/bin/kramdown-rfc2629
CHANGED
@@ -12,6 +12,8 @@ RE_SECTION = /---(?:\s+(\w+)(-?))?\s*#{RE_NL}(.*?#{RE_NL})(?=---(?:\s+\w+-?)?\s*
|
|
12
12
|
|
13
13
|
NMDTAGS = ["{:/nomarkdown}\n\n", "\n{::nomarkdown}\n"]
|
14
14
|
|
15
|
+
NORMINFORM = { "!" => :normative, "?" => :informative }
|
16
|
+
|
15
17
|
def xml_from_sections(input)
|
16
18
|
sections = input.scan(RE_SECTION)
|
17
19
|
# resulting in an array; each section is [section-label, nomarkdown-flag, section-text]
|
@@ -36,13 +38,77 @@ def xml_from_sections(input)
|
|
36
38
|
sechash[snames.last] << "#{nmdin}#{text}#{nmdout}"
|
37
39
|
end
|
38
40
|
|
41
|
+
ref_replacements = { }
|
42
|
+
|
43
|
+
[:ref, :normative, :informative].each do |sn|
|
44
|
+
if refs = ps.has(sn)
|
45
|
+
warn "*** bad section #{sn}: #{refs.inspect}" unless refs.respond_to? :each
|
46
|
+
refs.each do |k, v|
|
47
|
+
if v.respond_to? :to_str
|
48
|
+
ref_replacements[v.to_str] = k
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
open_refs = ps[:ref] || { } # consumed
|
54
|
+
|
55
|
+
norm_ref = { }
|
56
|
+
|
57
|
+
# convenience replacement of {{-coap}} with {{I-D.ietf-core-coap}}
|
58
|
+
# collect normative/informative tagging {{!RFC2119}} {{?RFC4711}}
|
59
|
+
sechash.each do |k, v|
|
60
|
+
next if k == "fluff"
|
61
|
+
v.gsub!(/{{(?:([?!])(-)?|(-))([\w.\-]+)}}/) do |match|
|
62
|
+
norminform = $1
|
63
|
+
replacing = $2 || $3
|
64
|
+
word = $4
|
65
|
+
if replacing
|
66
|
+
if new = ref_replacements[word]
|
67
|
+
word = new
|
68
|
+
else
|
69
|
+
warn "*** no alias replacement for {{-#{word}}}"
|
70
|
+
word = "-#{word}"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
# things can be normative in one place and informative in another -> normative
|
74
|
+
# collect norm/inform above and assign it by priority here
|
75
|
+
if norminform
|
76
|
+
norm_ref[word] ||= norminform == '!' # one normative ref is enough
|
77
|
+
end
|
78
|
+
"{{#{word}}}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
[:normative, :informative].each do |k|
|
83
|
+
ps.rest[k.to_s] ||= { }
|
84
|
+
end
|
85
|
+
|
86
|
+
norm_ref.each do |k, v|
|
87
|
+
# could check bibtagsys here: needed if open_refs is nil or string
|
88
|
+
target = ps.has(v ? :normative : :informative)
|
89
|
+
warn "*** overwriting #{k}" if target.has_key?(k)
|
90
|
+
target[k] = open_refs[k] # add reference to normative/informative
|
91
|
+
end
|
92
|
+
# note that unused items from ref are considered OK, therefore no check for that here
|
93
|
+
|
94
|
+
# also should allow norm/inform check of other references
|
95
|
+
# {{?coap}} vs. {{!coap}} vs. {{-coap}} (undecided)
|
96
|
+
# or {{?-coap}} vs. {{!-coap}} vs. {{-coap}} (undecided)
|
97
|
+
# could require all references to be decided by a global flag
|
98
|
+
overlap = [:normative, :informative].map { |s| (ps.has(s) || { }).keys }.reduce(:&)
|
99
|
+
unless overlap.empty?
|
100
|
+
warn "*** #{overlap.join(', ')}: both normative and informative"
|
101
|
+
end
|
102
|
+
|
39
103
|
stand_alone = ps[:stand_alone]
|
40
104
|
|
41
105
|
[:normative, :informative].each do |sn|
|
42
106
|
if refs = ps[sn]
|
43
107
|
refs.each do |k, v|
|
44
108
|
if bts = bibtagsys(k)
|
45
|
-
|
109
|
+
if v
|
110
|
+
warn "*** redundant in #{k}: #{v.inspect}" unless v.respond_to? :to_str
|
111
|
+
end
|
46
112
|
if stand_alone
|
47
113
|
sechash[sn.to_s] << %{\n#{NMDTAGS[0]}\n\n#{NMDTAGS[1]}\n}
|
48
114
|
else
|
@@ -50,6 +116,10 @@ def xml_from_sections(input)
|
|
50
116
|
sechash[sn.to_s] << %{&#{bts[0]};\n}
|
51
117
|
end
|
52
118
|
else
|
119
|
+
unless v && Hash === v
|
120
|
+
warn "*** don't know how to expand ref #{k}"
|
121
|
+
next
|
122
|
+
end
|
53
123
|
vps = ParameterSet.new(v)
|
54
124
|
erb = ERB.new <<-REFERB, nil, '-'
|
55
125
|
<reference anchor="<%= k %>" <%= vps.attr("target") %>>
|
@@ -71,6 +141,9 @@ def xml_from_sections(input)
|
|
71
141
|
<% vps.arr("seriesinfo", false) do |k, v| -%>
|
72
142
|
<seriesInfo name="<%=k%>" value="<%=v%>"/>
|
73
143
|
<% end -%>
|
144
|
+
<% vps.arr("format", false) do |k, v| -%>
|
145
|
+
<format type="<%=k%>" target="<%=v%>"/>
|
146
|
+
<% end -%>
|
74
147
|
</reference>
|
75
148
|
REFERB
|
76
149
|
sechash[sn.to_s] << erb.result(binding)
|
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 = '0.13.
|
3
|
+
s.version = '0.13.6'
|
4
4
|
s.summary = "Kramdown extension for generating RFC 2629 XML."
|
5
5
|
s.description = %{An RFC2629 (XML2RFC) generating backend for Thomas Leitner's
|
6
6
|
"kramdown" markdown parser. Mostly useful for RFC writers.}
|
metadata
CHANGED
@@ -1,64 +1,89 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: kramdown-rfc2629
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 39
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 13
|
9
|
+
- 6
|
10
|
+
version: 0.13.6
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Carsten Bormann
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
-
|
17
|
+
|
18
|
+
date: 2012-04-21 00:00:00 +02:00
|
19
|
+
default_executable: kramdown-rfc2629
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
15
22
|
name: kramdown
|
16
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
25
|
none: false
|
18
|
-
requirements:
|
26
|
+
requirements:
|
19
27
|
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 17
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 13
|
33
|
+
version: "0.13"
|
22
34
|
type: :runtime
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
"kramdown" markdown parser. Mostly useful for RFC writers.'
|
35
|
+
version_requirements: *id001
|
36
|
+
description: |-
|
37
|
+
An RFC2629 (XML2RFC) generating backend for Thomas Leitner's
|
38
|
+
"kramdown" markdown parser. Mostly useful for RFC writers.
|
28
39
|
email: cabo@tzi.org
|
29
|
-
executables:
|
40
|
+
executables:
|
30
41
|
- kramdown-rfc2629
|
31
42
|
extensions: []
|
43
|
+
|
32
44
|
extra_rdoc_files: []
|
33
|
-
|
45
|
+
|
46
|
+
files:
|
34
47
|
- lib/kramdown-rfc2629.rb
|
35
48
|
- README.md
|
36
49
|
- kramdown-rfc2629.gemspec
|
37
50
|
- bin/kramdown-rfc2629
|
38
51
|
- data/kramdown-rfc2629.erb
|
52
|
+
has_rdoc: true
|
39
53
|
homepage: http://github.com/cabo/kramdown-rfc2629
|
40
54
|
licenses: []
|
55
|
+
|
41
56
|
post_install_message:
|
42
57
|
rdoc_options: []
|
43
|
-
|
58
|
+
|
59
|
+
require_paths:
|
44
60
|
- lib
|
45
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
62
|
none: false
|
47
|
-
requirements:
|
48
|
-
- -
|
49
|
-
- !ruby/object:Gem::Version
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
hash: 55
|
67
|
+
segments:
|
68
|
+
- 1
|
69
|
+
- 9
|
70
|
+
- 2
|
50
71
|
version: 1.9.2
|
51
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
73
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
requirements:
|
58
82
|
- wget
|
59
83
|
rubyforge_project:
|
60
|
-
rubygems_version: 1.
|
84
|
+
rubygems_version: 1.3.7
|
61
85
|
signing_key:
|
62
86
|
specification_version: 3
|
63
87
|
summary: Kramdown extension for generating RFC 2629 XML.
|
64
88
|
test_files: []
|
89
|
+
|