ruwiki 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Readme.rubygems +86 -0
- data/Readme.tarfile +65 -0
- data/bin/ruwiki +58 -0
- data/bin/ruwiki.cgi +87 -0
- data/bin/ruwiki_convert +56 -0
- data/bin/ruwiki_service.rb +82 -0
- data/bin/ruwiki_servlet +53 -0
- data/contrib/enscript-token.rb +55 -0
- data/contrib/rublog_integrator.rb +68 -0
- data/data/Default/ProjectIndex.ruwiki +49 -0
- data/data/Ruwiki/Antispam.ruwiki +65 -0
- data/data/Ruwiki/BugTracking.ruwiki +33 -0
- data/data/Ruwiki/ChangeLog.ruwiki +102 -0
- data/data/Ruwiki/Configuring_Ruwiki.ruwiki +151 -0
- data/data/Ruwiki/Extending_Ruwiki.ruwiki +317 -0
- data/data/Ruwiki/LicenseAndAuthorInfo.ruwiki +30 -0
- data/data/Ruwiki/ProjectIndex.ruwiki +84 -0
- data/data/Ruwiki/Roadmap.ruwiki +225 -0
- data/data/Ruwiki/RuwikiTemplatingLibrary.ruwiki +156 -0
- data/data/Ruwiki/RuwikiUtilities.ruwiki +157 -0
- data/data/Ruwiki/SandBox.ruwiki +9 -0
- data/data/Ruwiki/To_Do.ruwiki +51 -0
- data/data/Ruwiki/TroubleShooting.ruwiki +33 -0
- data/data/Ruwiki/WikiFeatures.ruwiki +17 -0
- data/data/Ruwiki/WikiMarkup.ruwiki +261 -0
- data/data/Tutorial/AddingPages.ruwiki +16 -0
- data/data/Tutorial/AddingProjects.ruwiki +16 -0
- data/data/Tutorial/ProjectIndex.ruwiki +11 -0
- data/data/Tutorial/SandBox.ruwiki +9 -0
- data/data/agents.banned +60 -0
- data/data/agents.readonly +321 -0
- data/data/hostip.banned +30 -0
- data/data/hostip.readonly +28 -0
- data/lib/ruwiki.rb +622 -0
- data/lib/ruwiki/auth.rb +56 -0
- data/lib/ruwiki/auth/gforge.rb +73 -0
- data/lib/ruwiki/backend.rb +318 -0
- data/lib/ruwiki/backend/flatfiles.rb +217 -0
- data/lib/ruwiki/config.rb +244 -0
- data/lib/ruwiki/exportable.rb +192 -0
- data/lib/ruwiki/handler.rb +342 -0
- data/lib/ruwiki/lang/de.rb +339 -0
- data/lib/ruwiki/lang/en.rb +334 -0
- data/lib/ruwiki/lang/es.rb +339 -0
- data/lib/ruwiki/page.rb +262 -0
- data/lib/ruwiki/servlet.rb +38 -0
- data/lib/ruwiki/template.rb +553 -0
- data/lib/ruwiki/utils.rb +24 -0
- data/lib/ruwiki/utils/command.rb +102 -0
- data/lib/ruwiki/utils/converter.rb +297 -0
- data/lib/ruwiki/utils/manager.rb +639 -0
- data/lib/ruwiki/utils/servletrunner.rb +295 -0
- data/lib/ruwiki/wiki.rb +147 -0
- data/lib/ruwiki/wiki/tokens.rb +136 -0
- data/lib/ruwiki/wiki/tokens/00default.rb +211 -0
- data/lib/ruwiki/wiki/tokens/01wikilinks.rb +166 -0
- data/lib/ruwiki/wiki/tokens/02actions.rb +63 -0
- data/lib/ruwiki/wiki/tokens/abbreviations.rb +40 -0
- data/lib/ruwiki/wiki/tokens/calendar.rb +147 -0
- data/lib/ruwiki/wiki/tokens/headings.rb +43 -0
- data/lib/ruwiki/wiki/tokens/lists.rb +112 -0
- data/lib/ruwiki/wiki/tokens/rubylists.rb +48 -0
- data/ruwiki.conf +22 -0
- data/ruwiki.pkg +0 -0
- data/templates/default/body.tmpl +19 -0
- data/templates/default/content.tmpl +7 -0
- data/templates/default/controls.tmpl +23 -0
- data/templates/default/edit.tmpl +27 -0
- data/templates/default/error.tmpl +14 -0
- data/templates/default/footer.tmpl +23 -0
- data/templates/default/ruwiki.css +297 -0
- data/templates/default/save.tmpl +8 -0
- data/templates/sidebar/body.tmpl +19 -0
- data/templates/sidebar/content.tmpl +8 -0
- data/templates/sidebar/controls.tmpl +8 -0
- data/templates/sidebar/edit.tmpl +27 -0
- data/templates/sidebar/error.tmpl +13 -0
- data/templates/sidebar/footer.tmpl +22 -0
- data/templates/sidebar/ruwiki.css +347 -0
- data/templates/sidebar/save.tmpl +10 -0
- data/templates/simple/body.tmpl +13 -0
- data/templates/simple/content.tmpl +7 -0
- data/templates/simple/controls.tmpl +8 -0
- data/templates/simple/edit.tmpl +25 -0
- data/templates/simple/error.tmpl +10 -0
- data/templates/simple/footer.tmpl +10 -0
- data/templates/simple/ruwiki.css +192 -0
- data/templates/simple/save.tmpl +8 -0
- data/tests/harness.rb +52 -0
- data/tests/tc_backend_flatfile.rb +103 -0
- data/tests/tc_bugs.rb +74 -0
- data/tests/tc_exportable.rb +64 -0
- data/tests/tc_template.rb +145 -0
- data/tests/tc_tokens.rb +335 -0
- data/tests/testall.rb +20 -0
- 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
|