ruwiki 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. data/Readme.rubygems +86 -0
  2. data/Readme.tarfile +65 -0
  3. data/bin/ruwiki +58 -0
  4. data/bin/ruwiki.cgi +87 -0
  5. data/bin/ruwiki_convert +56 -0
  6. data/bin/ruwiki_service.rb +82 -0
  7. data/bin/ruwiki_servlet +53 -0
  8. data/contrib/enscript-token.rb +55 -0
  9. data/contrib/rublog_integrator.rb +68 -0
  10. data/data/Default/ProjectIndex.ruwiki +49 -0
  11. data/data/Ruwiki/Antispam.ruwiki +65 -0
  12. data/data/Ruwiki/BugTracking.ruwiki +33 -0
  13. data/data/Ruwiki/ChangeLog.ruwiki +102 -0
  14. data/data/Ruwiki/Configuring_Ruwiki.ruwiki +151 -0
  15. data/data/Ruwiki/Extending_Ruwiki.ruwiki +317 -0
  16. data/data/Ruwiki/LicenseAndAuthorInfo.ruwiki +30 -0
  17. data/data/Ruwiki/ProjectIndex.ruwiki +84 -0
  18. data/data/Ruwiki/Roadmap.ruwiki +225 -0
  19. data/data/Ruwiki/RuwikiTemplatingLibrary.ruwiki +156 -0
  20. data/data/Ruwiki/RuwikiUtilities.ruwiki +157 -0
  21. data/data/Ruwiki/SandBox.ruwiki +9 -0
  22. data/data/Ruwiki/To_Do.ruwiki +51 -0
  23. data/data/Ruwiki/TroubleShooting.ruwiki +33 -0
  24. data/data/Ruwiki/WikiFeatures.ruwiki +17 -0
  25. data/data/Ruwiki/WikiMarkup.ruwiki +261 -0
  26. data/data/Tutorial/AddingPages.ruwiki +16 -0
  27. data/data/Tutorial/AddingProjects.ruwiki +16 -0
  28. data/data/Tutorial/ProjectIndex.ruwiki +11 -0
  29. data/data/Tutorial/SandBox.ruwiki +9 -0
  30. data/data/agents.banned +60 -0
  31. data/data/agents.readonly +321 -0
  32. data/data/hostip.banned +30 -0
  33. data/data/hostip.readonly +28 -0
  34. data/lib/ruwiki.rb +622 -0
  35. data/lib/ruwiki/auth.rb +56 -0
  36. data/lib/ruwiki/auth/gforge.rb +73 -0
  37. data/lib/ruwiki/backend.rb +318 -0
  38. data/lib/ruwiki/backend/flatfiles.rb +217 -0
  39. data/lib/ruwiki/config.rb +244 -0
  40. data/lib/ruwiki/exportable.rb +192 -0
  41. data/lib/ruwiki/handler.rb +342 -0
  42. data/lib/ruwiki/lang/de.rb +339 -0
  43. data/lib/ruwiki/lang/en.rb +334 -0
  44. data/lib/ruwiki/lang/es.rb +339 -0
  45. data/lib/ruwiki/page.rb +262 -0
  46. data/lib/ruwiki/servlet.rb +38 -0
  47. data/lib/ruwiki/template.rb +553 -0
  48. data/lib/ruwiki/utils.rb +24 -0
  49. data/lib/ruwiki/utils/command.rb +102 -0
  50. data/lib/ruwiki/utils/converter.rb +297 -0
  51. data/lib/ruwiki/utils/manager.rb +639 -0
  52. data/lib/ruwiki/utils/servletrunner.rb +295 -0
  53. data/lib/ruwiki/wiki.rb +147 -0
  54. data/lib/ruwiki/wiki/tokens.rb +136 -0
  55. data/lib/ruwiki/wiki/tokens/00default.rb +211 -0
  56. data/lib/ruwiki/wiki/tokens/01wikilinks.rb +166 -0
  57. data/lib/ruwiki/wiki/tokens/02actions.rb +63 -0
  58. data/lib/ruwiki/wiki/tokens/abbreviations.rb +40 -0
  59. data/lib/ruwiki/wiki/tokens/calendar.rb +147 -0
  60. data/lib/ruwiki/wiki/tokens/headings.rb +43 -0
  61. data/lib/ruwiki/wiki/tokens/lists.rb +112 -0
  62. data/lib/ruwiki/wiki/tokens/rubylists.rb +48 -0
  63. data/ruwiki.conf +22 -0
  64. data/ruwiki.pkg +0 -0
  65. data/templates/default/body.tmpl +19 -0
  66. data/templates/default/content.tmpl +7 -0
  67. data/templates/default/controls.tmpl +23 -0
  68. data/templates/default/edit.tmpl +27 -0
  69. data/templates/default/error.tmpl +14 -0
  70. data/templates/default/footer.tmpl +23 -0
  71. data/templates/default/ruwiki.css +297 -0
  72. data/templates/default/save.tmpl +8 -0
  73. data/templates/sidebar/body.tmpl +19 -0
  74. data/templates/sidebar/content.tmpl +8 -0
  75. data/templates/sidebar/controls.tmpl +8 -0
  76. data/templates/sidebar/edit.tmpl +27 -0
  77. data/templates/sidebar/error.tmpl +13 -0
  78. data/templates/sidebar/footer.tmpl +22 -0
  79. data/templates/sidebar/ruwiki.css +347 -0
  80. data/templates/sidebar/save.tmpl +10 -0
  81. data/templates/simple/body.tmpl +13 -0
  82. data/templates/simple/content.tmpl +7 -0
  83. data/templates/simple/controls.tmpl +8 -0
  84. data/templates/simple/edit.tmpl +25 -0
  85. data/templates/simple/error.tmpl +10 -0
  86. data/templates/simple/footer.tmpl +10 -0
  87. data/templates/simple/ruwiki.css +192 -0
  88. data/templates/simple/save.tmpl +8 -0
  89. data/tests/harness.rb +52 -0
  90. data/tests/tc_backend_flatfile.rb +103 -0
  91. data/tests/tc_bugs.rb +74 -0
  92. data/tests/tc_exportable.rb +64 -0
  93. data/tests/tc_template.rb +145 -0
  94. data/tests/tc_tokens.rb +335 -0
  95. data/tests/testall.rb +20 -0
  96. metadata +182 -0
@@ -0,0 +1,211 @@
1
+ #--
2
+ # Ruwiki
3
+ # Copyright � 2002 - 2004, Digikata and HaloStatue
4
+ # Alan Chen (alan@digikata.com)
5
+ # Austin Ziegler (ruwiki@halostatue.ca)
6
+ #
7
+ # Licensed under the same terms as Ruby.
8
+ #
9
+ # $Id: 00default.rb,v 1.16 2004/11/28 23:59:18 austin Exp $
10
+ #++
11
+
12
+ # $debug = File.open("output.txt", "wb")
13
+
14
+ class Ruwiki::Wiki
15
+ # The Paragraph Token class changes blank lines to <p> tags. This class,
16
+ # under the current implementation, should be *first* in the Token list
17
+ # after Token.
18
+ class Paragraph < Ruwiki::Wiki::Token
19
+ # This Token is #rank 0, because it should be first in the Token list.
20
+ def self.rank
21
+ 0
22
+ end
23
+
24
+ # Matches blank lines. %r{^$}
25
+ def self.regexp
26
+ %r{(^$)}
27
+ end
28
+
29
+ def replace
30
+ %Q(</p><p class="rwtk_Paragraph">)
31
+ end
32
+
33
+ # Ensures that <p> won't be surrounded by <br> tags.
34
+ def self.post_replace(content)
35
+ content.gsub!(%r{\A}, '<p class="rwtk_Paragraph">')
36
+ content.gsub!(%r{\z}, '</p>')
37
+ content.gsub!(%r{\n(</p>)}, '\1')
38
+ content.gsub!(%r{(<p[^>]*>)\n}, '\1')
39
+ content.gsub!(%r{(</p>)(<p[^>]*>)}) { "#{$1}\n#{$2}" }
40
+ content.gsub!(%r{(<pre[^>]*>.*?)<p[^>]*></p>(.*?</pre>)}) { "#{$1}\n#{$2}" }
41
+ content.gsub!(%r{<p[^>]*></p>}, '')
42
+ content.gsub!(%r{^\n(<p[^>]*>)}, '\1')
43
+ content
44
+ end
45
+ end
46
+
47
+ # The Code Token class converts indented text to "unformatted" (<pre>)
48
+ # text. This class should be *second* in the Token list.
49
+ class Code < Ruwiki::Wiki::Token
50
+ # This Token is #rank 1, because it should be second in the Token list.
51
+ def self.rank
52
+ 1
53
+ end
54
+
55
+ # Matches indented text. %r{^(\s+\S?.*)$}
56
+ def self.regexp
57
+ %r{^([ \t]+[^\n]*)\n}
58
+ end
59
+
60
+ # Replaces the text to <pre>content</pre>.
61
+ def replace
62
+ content = Ruwiki.clean_entities(@match.captures[0])
63
+
64
+ %Q{</p><pre class="rwtk_Code">#{content}</pre>\n}
65
+ end
66
+
67
+ # Converts cases of %r{</pre>(\n|<br ?/?>)<pre>} to \1.
68
+ def self.post_replace(content)
69
+ content.gsub!(%r{</pre>((\n)*</p>(\n)*)?<pre[^>]*>}, "\n")
70
+ content.gsub!(%r{</pre>(\n|<br ?/?>)?<pre[^>]*>}, '\1')
71
+ content.gsub!(%r{<p[^>]*>(<pre[^>]*>)}, '\1')
72
+ content.gsub!(%r{</pre></p>}, '</pre>')
73
+ # content.gsub!(%r{(<pre[^>]*>.*?)<p[^>]*></p>(.*?</pre>)}) { "#{$1}\n#{$2}" }
74
+ content
75
+ end
76
+ end
77
+
78
+ RE_URI_SCHEME = %r{[-a-z0-9+.]{3,}?:}
79
+ RE_URI_PATH = %r{[^\s<>\]]}
80
+ RE_URI_TEXT = %r{[^\]]*}
81
+
82
+ def self.redirect(uri)
83
+ "http://www.google.com/url?sa=D;q=#{CGI.escape(uri)}"
84
+ end
85
+
86
+ # Converts URLs in the form of [url] to numbered links.
87
+ class NumberedLinks < Ruwiki::Wiki::Token
88
+ class << self
89
+ def increment
90
+ @count ||= 0
91
+ @count += 1
92
+ end
93
+
94
+ def reset
95
+ @count = 0
96
+ end
97
+ end
98
+
99
+ def self.rank
100
+ 2
101
+ end
102
+
103
+ def self.regexp
104
+ %r{\[(#{RE_URI_SCHEME}(?:#{RE_URI_PATH})*?)\]}
105
+ end
106
+
107
+ def replace
108
+ extlink = @match.captures[0]
109
+
110
+ name = "[#{NumberedLinks.increment}]"
111
+
112
+ %Q{<a class="rwtk_NumberedLinks" href="#{Ruwiki::Wiki.redirect(extlink)}">#{name}</a>}
113
+ end
114
+ end
115
+
116
+ class Image < Ruwiki::Wiki::Token
117
+ def self.rank
118
+ 1
119
+ end
120
+
121
+ RE_IMAGE_OPTIONS=%r{([^=]+)=("[^"]+"|[^ ]+)}
122
+
123
+ def self.regexp
124
+ %r{\[image\s*:\s*(#{RE_URI_SCHEME}(?:#{RE_URI_PATH})*?)(\s+[^\]]+)?\]}
125
+ end
126
+
127
+ def replace
128
+ options = { 'src' => %Q("#{@match.captures[0]}") }
129
+ groups = @match.captures[1]
130
+ unless groups.nil?
131
+ groups.scan(RE_IMAGE_OPTIONS).each { |gg| options[gg[0].strip] = gg[1].strip }
132
+ end
133
+
134
+ unless options['numbered'].nil? or options['numbered'] == "false"
135
+ options['title'] = %Q("[#{NumberedLinks.increment}]")
136
+ options.delete('numbered')
137
+ end
138
+
139
+ options['title'] ||= options['alt']
140
+ options['title'] ||= options['src']
141
+ options['alt'] ||= options['title']
142
+
143
+ ss = ""
144
+ options.keys.sort.map { |kk| ss << %Q( #{kk}=#{options[kk]}) }
145
+
146
+ %Q{<img class="rwtk_Image"#{ss} />}
147
+ end
148
+ end
149
+
150
+ # Converts URLs in the form of [url name] to named links.
151
+ class NamedLinks < Ruwiki::Wiki::Token
152
+ def self.rank
153
+ 3
154
+ end
155
+
156
+ def self.regexp
157
+ %r{\[(#{RE_URI_SCHEME}(?:#{RE_URI_PATH})*?)\s+(#{RE_URI_TEXT})\]}
158
+ end
159
+
160
+ def replace
161
+ extlink = @match.captures[0]
162
+ name = @match.captures[1]
163
+
164
+ %Q{<a class="rwtk_NamedLinks" href="#{Ruwiki::Wiki.redirect(extlink)}">#{name}</a>}
165
+ end
166
+ end
167
+
168
+ # Converts URLs to links where the "name" of the link is the URL itself.
169
+ class ExternalLinks < Ruwiki::Wiki::Token
170
+ def self.rank
171
+ 501
172
+ end
173
+
174
+ def self.regexp
175
+ %r{\b(#{RE_URI_SCHEME}#{RE_URI_PATH}+)}
176
+ end
177
+
178
+ def restore
179
+ @match[0]
180
+ end
181
+
182
+ def replace
183
+ extlink = @match.captures[0]
184
+
185
+ %Q{<a class="rwtk_ExternalLinks" href="#{Ruwiki::Wiki.redirect(extlink)}">#{extlink}</a>}
186
+ end
187
+ end
188
+
189
+ # Creates a horizontal rule.
190
+ class HRule < Ruwiki::Wiki::Token
191
+ def self.regexp
192
+ %r|^\\?-{4,}|
193
+ end
194
+
195
+ def replace
196
+ %Q(<hr class="rwtk_HRule" />)
197
+ end
198
+
199
+ def restore
200
+ @match[0][1 .. -1]
201
+ end
202
+
203
+ def self.post_replace(content)
204
+ content.gsub!(%r{(<p[^>]*>)*(<hr[^ />]* ?/?>)(</p>)*}, '\1')
205
+ content.gsub!(%r{\n<hr />}, "</p>\n<hr />")
206
+ content.gsub!(%r{<hr ?/?>\n<br ?/?>}, "<hr />")
207
+ content.gsub!(%r{(\n|<br ?/?>)?<hr>(\n|<br ?/?>)?}, "<hr />")
208
+ content
209
+ end
210
+ end
211
+ end
@@ -0,0 +1,166 @@
1
+ #--
2
+ # Ruwiki
3
+ # Copyright � 2002 - 2004, Digikata and HaloStatue
4
+ # Alan Chen (alan@digikata.com)
5
+ # Austin Ziegler (ruwiki@halostatue.ca)
6
+ #
7
+ # Licensed under the same terms as Ruby.
8
+ #
9
+ # $Id: 01wikilinks.rb,v 1.12 2004/08/16 11:28:27 austin Exp $
10
+ #++
11
+ require 'cgi'
12
+
13
+ class Ruwiki::Wiki
14
+ # This provides the basic WikiWord match. This supports WikiWord,
15
+ # CPlusPlus, ThisIsALink, and C_Plus_Plus.
16
+ RE_WIKI_WORDS = %r{[[:upper:]][\w_]*(?:[[:lower:]]+[[:upper:]_]|[[:upper:]_]+[[:lower:]])[\w_]*}
17
+ # This provides wikipedia format matches, e.g., [[wikipedia links]]. The
18
+ # only restriction on words in this format is that they must NOT begin
19
+ # with an underscore ('_').
20
+ RE_WIKIPEDIA_WORDS = %r{\[\[([^_].*?)\]\]}
21
+ # This provides the basic Wiki Project match.
22
+ RE_PROJECT_WORD = %r{[[:upper:]][[:lower:]]+}
23
+
24
+ # This provides the Wiki view link format:
25
+ VIEW_LINK = %Q[<a class="rwtk_WikiLink" href="%s">%s</a>]
26
+ EDIT_LINK = %Q[<span class="rwtk_EditWikiLink">%s</span><a class="rwtk_WikiLink" href="%s">?</a>]
27
+
28
+ # Creates a crosslink for a Project::WikiPage.
29
+ class ProjectCrossLink < Ruwiki::Wiki::Token
30
+ def self.rank
31
+ 500
32
+ end
33
+
34
+ def self.regexp
35
+ %r{(#{RE_PROJECT_WORD})::(#{RE_WIKI_WORDS})}
36
+ end
37
+
38
+ def replace
39
+ project = @match.captures[0]
40
+ topic = @match.captures[1]
41
+ link = CGI.escape(topic.dup)
42
+
43
+ if @backend.page_exists?(topic, project) or @backend.page_exists?(link, project)
44
+ VIEW_LINK % ["#{@script}/#{project}/#{link}", "#{project}::#{topic.gsub(/_/, ' ')}"]
45
+ else
46
+ EDIT_LINK % ["#{project}::#{topic.gsub(/_/, ' ')}", "#{@script}/#{project}/#{link}/_edit"]
47
+ end
48
+ end
49
+ end
50
+
51
+ # Creates a crosslink for a Project::WikiPage using a Wikipedia link
52
+ # format.
53
+ class ProjectCrossLinkWikipedia < Ruwiki::Wiki::Token
54
+ def self.rank
55
+ 500
56
+ end
57
+
58
+ def self.regexp
59
+ %r{(#{RE_PROJECT_WORD})::#{RE_WIKIPEDIA_WORDS}}
60
+ end
61
+
62
+ def replace
63
+ project = @match.captures[0]
64
+ topic = @match.captures[1]
65
+ link = CGI.escape(topic)
66
+
67
+ if @backend.page_exists?(topic, project) or @backend.page_exists?(link, project)
68
+ VIEW_LINK % ["#{@script}/#{project}/#{link}", "#{project}::#{topic}"]
69
+ else
70
+ EDIT_LINK % ["#{project}::#{topic}", "#{@script}/#{project}/#{link}/_edit"]
71
+ end
72
+ end
73
+ end
74
+
75
+ # Creates a link to the project index from ::Project.
76
+ class ProjectIndex < Ruwiki::Wiki::Token
77
+ def self.rank
78
+ 501
79
+ end
80
+
81
+ def self.regexp
82
+ %r{(\B|\\)::(#{RE_PROJECT_WORD})\b}
83
+ end
84
+
85
+ def restore
86
+ @match[0][1..-1]
87
+ end
88
+
89
+ def replace
90
+ project = @match.captures[1]
91
+
92
+ if @backend.page_exists?('ProjectIndex', project)
93
+ VIEW_LINK % ["#{@script}/#{project}/ProjectIndex", project]
94
+ else
95
+ if @backend.project_exists?(project)
96
+ EDIT_LINK % [project, "#{@script}/#{project}/ProjectIndex/_edit"]
97
+ else
98
+ EDIT_LINK % [project, "#{@script}/#{project}/_create"]
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ # Creates a link to a WikiPage in the current project.
105
+ class WikiLinks < Ruwiki::Wiki::Token
106
+ def self.rank
107
+ 503
108
+ end
109
+
110
+ def self.regexp
111
+ %r{(\b|\\)(#{RE_WIKI_WORDS})\b}
112
+ end
113
+
114
+ def restore
115
+ @match[0][1..-1]
116
+ end
117
+
118
+ def replace
119
+ topic = @match.captures[1]
120
+ link = CGI.escape(topic.dup)
121
+
122
+ if @backend.page_exists?(topic, @project) or @backend.page_exists?(link, @project)
123
+ VIEW_LINK % ["#{@script}/#{@project}/#{link}", topic.gsub(/_/, ' ')]
124
+ else
125
+ EDIT_LINK % [topic.gsub(/_/, ' '), "#{@script}/#{@project}/#{link}/_edit"]
126
+ end
127
+ end
128
+ end
129
+
130
+ # Creates a link to a WikiPage in the current project using a Wikipedia
131
+ # link format.
132
+ class WikipediaLinks < Ruwiki::Wiki::Token
133
+ def self.rank
134
+ 502
135
+ end
136
+
137
+ def self.regexp
138
+ %r{(\B|\\)#{RE_WIKIPEDIA_WORDS}\B}
139
+ end
140
+
141
+ def restore
142
+ @match[0][1..-1]
143
+ end
144
+
145
+ ALT_TEXT = %r{(.+)\|(.+)}o
146
+
147
+ def replace
148
+ captures = @match.captures
149
+ topic = @match.captures[1]
150
+ link = CGI.escape(topic)
151
+
152
+ at = ALT_TEXT.match(topic)
153
+
154
+ if not at.nil?
155
+ topic = at.captures[1]
156
+ link = CGI.escape(at.captures[0])
157
+ end
158
+
159
+ if @backend.page_exists?(link, @project) or @backend.page_exists?(link, @project)
160
+ VIEW_LINK % ["#{@script}/#{@project}/#{link}", topic]
161
+ else
162
+ EDIT_LINK % [topic, "#{@script}/#{@project}/#{link}/_edit"]
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,63 @@
1
+ #--
2
+ # Ruwiki
3
+ # Copyright � 2002 - 2004, Digikata and HaloStatue
4
+ # Alan Chen (alan@digikata.com)
5
+ # Austin Ziegler (ruwiki@halostatue.ca)
6
+ #
7
+ # Licensed under the same terms as Ruby.
8
+ #
9
+ # $Id: 02actions.rb,v 1.2 2004/11/26 12:18:47 austin Exp $
10
+ #++
11
+ require 'cgi'
12
+
13
+ class Ruwiki::Wiki
14
+ # Produces a list of topics.
15
+ class TopicList < Ruwiki::Wiki::Token
16
+ def self.regexp
17
+ %r{^%topics\((#{Ruwiki::Wiki::RE_PROJECT_WORD})?\)$}
18
+ end
19
+
20
+ def replace
21
+ project = @match.captures[0] || @project
22
+
23
+ if @backend.project_exists?(project)
24
+ topic_list = @backend.list_topics(project)
25
+ else
26
+ topic_list = []
27
+ end
28
+
29
+ if topic_list.empty?
30
+ ss = @message[:no_topics] % [project]
31
+ else
32
+ ss = %Q(<h4 class="rwtk_Headings">#{@message[:topics_for_project] % [project]}</h4>\n<ul class="rwtk_Lists">\n)
33
+ topic_list.each do |tt|
34
+ ss << %Q(<li class="rwtk_Lists">)
35
+ ss << VIEW_LINK % ["#{@script}/#{project}/#{tt}", "#{CGI::unescape(tt.gsub(/_/, ' '))}"]
36
+ ss << "</li>\n"
37
+ end
38
+ ss << "</ul>\n"
39
+ end
40
+
41
+ ss
42
+ end
43
+ end
44
+
45
+ class ProjectList < Ruwiki::Wiki::Token
46
+ def self.regexp
47
+ %r{^%projects\(\)$}
48
+ end
49
+
50
+ def replace
51
+ proj_list = @backend.list_projects
52
+
53
+ ss = %Q(<h4 class="rwtk_Headings">#{@message[:wiki_projects] % [@title]}</h4>\n<ul class="rwtk_Lists">\n)
54
+ proj_list.each do |pp|
55
+ ss << %Q(<li class="rwtk_Lists">)
56
+ ss << VIEW_LINK % ["#{@script}/#{pp}/ProjectIndex", pp]
57
+ ss << %Q! <a href='#{@script}/#{pp}/_topics' class='rw_minilink'>#{@message[:project_topics_link]}</a>!
58
+ ss << "</li>\n"
59
+ end
60
+ ss << "</ul>\n"
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,40 @@
1
+ #--
2
+ # Ruwiki
3
+ # Copyright � 2002 - 2004, Digikata and HaloStatue
4
+ # Alan Chen (alan@digikata.com)
5
+ # Austin Ziegler (ruwiki@halostatue.ca)
6
+ #
7
+ # Licensed under the same terms as Ruby.
8
+ #
9
+ # $Id: abbreviations.rb,v 1.9 2004/11/26 12:18:47 austin Exp $
10
+ #++
11
+ class Ruwiki::Wiki
12
+ # Converts abbreviations.
13
+ class Abbreviations < Ruwiki::Wiki::Token
14
+ ABBREVIATIONS = {
15
+ "matz" => "Yukihiro Matsumoto",
16
+ }
17
+
18
+ def self.regexp
19
+ %r!@\{([^\}]*)\}!
20
+ end
21
+
22
+ def replace
23
+ kk = @match.captures[0]
24
+ if kk.nil? or kk.empty?
25
+ data = %Q(<dl class="rwtk_Abbreviations">)
26
+ ABBREVIATIONS.each do |kk, vv|
27
+ data << %Q(<dt class="rwtk_Abbreviations">#{kk}</dt><dd class="rwtk_Abbreviations">#{vv}</dd>)
28
+ end
29
+ data << %Q(</dl>)
30
+ else
31
+ if ABBREVIATIONS.has_key?(kk)
32
+ data = ABBREVIATIONS[kk]
33
+ else
34
+ data = @match[0]
35
+ end
36
+ end
37
+ data
38
+ end
39
+ end
40
+ end