kramdown-rfc2629 0.13.4 → 0.13.6

Sign up to get free protection for your applications and to get access to all the features.
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
+