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 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
- warn "*** redundant in #{k}: #{v.inspect}" if v
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![:include:](#{bts[0]})\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)
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'kramdown-rfc2629'
3
- s.version = '0.13.4'
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
- version: 0.13.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
- date: 2012-01-25 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
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
- requirement: &70155418327600 !ruby/object:Gem::Requirement
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
- version: '0.13'
28
+ - !ruby/object:Gem::Version
29
+ hash: 17
30
+ segments:
31
+ - 0
32
+ - 13
33
+ version: "0.13"
22
34
  type: :runtime
23
- prerelease: false
24
- version_requirements: *70155418327600
25
- description: ! 'An RFC2629 (XML2RFC) generating backend for Thomas Leitner''s
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
- files:
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
- require_paths:
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
- version: '0'
57
- requirements:
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.8.12
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
+