9e909d5be3
Update Bundler to 1.0.15. Update Rails to 2.3.12. Update rails_xss plugin. The latter two were the source of a considerable amount of grief, as rails_xss is now MUCH stricter about what string methods can be used. Also made it possible to use rake 0.9.x with Instiki. But you probably REALLY want to use ruby bundle exec rake ... instead of just saying rake ....
158 lines
4 KiB
Ruby
158 lines
4 KiB
Ruby
begin
|
|
require "rdoc/markup/simple_markup"
|
|
require 'rdoc/markup/simple_markup/to_html'
|
|
rescue LoadError
|
|
# Ruby 1.9
|
|
require "rdoc/markup"
|
|
require 'rdoc/markup/to_html'
|
|
module SM
|
|
class SimpleMarkup < RDoc::Markup
|
|
end
|
|
class ToHtml <RDoc::Markup::ToHtml
|
|
end
|
|
end
|
|
end
|
|
|
|
module RDocSupport
|
|
|
|
# A simple +rdoc+ markup class which recognizes some additional
|
|
# formatting commands suitable for Wiki use.
|
|
class RDocMarkup < SM::SimpleMarkup
|
|
def initialize
|
|
super()
|
|
|
|
pre = '(?:\\s|^|\\\\)'
|
|
|
|
# links of the form
|
|
# [[<url> description with spaces]]
|
|
add_special(/((\\)?\[\[\S+?\s+.+?\]\])/,:TIDYLINK)
|
|
|
|
# and external references
|
|
add_special(/((\\)?(link:|anchor:|http:|mailto:|ftp:|img:|www\.)\S+\w\/?)/,
|
|
:HYPERLINK)
|
|
|
|
# <br/>
|
|
add_special(%r{(#{pre}<br/>)}, :BR)
|
|
|
|
# and <center> ... </center>
|
|
add_html("center", :CENTER)
|
|
end
|
|
|
|
def convert(text, handler)
|
|
super.sub(/^\n{0,1}<p>\n{0,1}/, '').sub(/\n{0,1}<\/p>\n{0,1}$/, '')
|
|
end
|
|
end
|
|
|
|
# Handle special hyperlinking requirments for RDoc formatted
|
|
# entries. Requires RDoc
|
|
|
|
class HyperLinkHtml < SM::ToHtml
|
|
|
|
# Initialize the HyperLinkHtml object.
|
|
# [path] location of the node
|
|
# [site] object representing the whole site (typically of class
|
|
# +Site+)
|
|
def initialize
|
|
super()
|
|
add_tag(:CENTER, "<center>", "</center>")
|
|
end
|
|
|
|
# handle <br/>
|
|
def handle_special_BR(special)
|
|
return "<br/>" if special.text[0,1] == '\\'
|
|
special.text
|
|
end
|
|
|
|
# We're invoked with a potential external hyperlink.
|
|
# [mailto:] just gets inserted.
|
|
# [http:] links are checked to see if they
|
|
# reference an image. If so, that image gets inserted
|
|
# using an <img> tag. Otherwise a conventional <a href>
|
|
# is used.
|
|
# [img:] insert a <tt><img></tt> tag
|
|
# [link:] used to insert arbitrary <tt><a></tt> references
|
|
# [anchor:] used to create an anchor
|
|
def handle_special_HYPERLINK(special)
|
|
text = special.text.strip
|
|
return text[1..-1] if text[0,1] == '\\'
|
|
url = special.text.strip
|
|
if url =~ /([A-Za-z]+):(.*)/
|
|
type = $1
|
|
path = $2
|
|
else
|
|
type = "http"
|
|
path = url
|
|
url = "http://#{url}"
|
|
end
|
|
|
|
case type
|
|
when "http"
|
|
if url =~ /\.(gif|png|jpg|jpeg|bmp)$/
|
|
"<img src=\"#{url}\"/>"
|
|
else
|
|
"<a href=\"#{url}\">#{url.sub(%r{^\w+:/*}, '')}</a>"
|
|
end
|
|
when "img"
|
|
"<img src=\"#{path}\"/>"
|
|
when "link"
|
|
"<a href=\"#{path}\">#{path}</a>"
|
|
when "anchor"
|
|
"<a name=\"#{path}\"></a>"
|
|
else
|
|
"<a href=\"#{url}\">#{url.sub(%r{^\w+:/*}, '')}</a>"
|
|
end
|
|
end
|
|
|
|
# Here's a hyperlink where the label is different to the URL
|
|
# [[url label that may contain spaces]]
|
|
#
|
|
|
|
def handle_special_TIDYLINK(special)
|
|
text = special.text.strip
|
|
return text[1..-1] if text[0,1] == '\\'
|
|
unless text =~ /\[\[(\S+?)\s+(.+?)\]\]/
|
|
return text
|
|
end
|
|
url = $1
|
|
label = $2
|
|
label = RDocFormatter.new(label).to_html
|
|
label = label.split.select{|x| x =~ /\S/}.
|
|
map{|x| x.chomp}.join(' ')
|
|
|
|
case url
|
|
when /link:(\S+)/
|
|
return %{<a href="#{$1}">#{label}</a>}
|
|
when /img:(\S+)/
|
|
return %{<img src="http://#{$1}" alt="#{label}" />}
|
|
when /rubytalk:(\S+)/
|
|
return %{<a href="http://ruby-talk.org/blade/#{$1}">#{label}</a>}
|
|
when /rubygarden:(\S+)/
|
|
return %{<a href="http://www.rubygarden.org/ruby?#{$1}">#{label}</a>}
|
|
when /c2:(\S+)/
|
|
return %{<a href="http://c2.com/cgi/wiki?#{$1}">#{label}</a>}
|
|
when /isbn:(\S+)/
|
|
return %{<a href="http://search.barnesandnoble.com/bookSearch/} +
|
|
%{isbnInquiry.asp?isbn=#{$1}">#{label}</a>}
|
|
end
|
|
|
|
unless url =~ /\w+?:/
|
|
url = "http://#{url}"
|
|
end
|
|
|
|
"<a href=\"#{url}\">#{label}</a>"
|
|
end
|
|
end
|
|
|
|
class RDocFormatter
|
|
def initialize(text)
|
|
@text = text
|
|
end
|
|
|
|
def to_html
|
|
markup = RDocMarkup.new
|
|
h = HyperLinkHtml.new
|
|
markup.convert(@text, h)
|
|
end
|
|
end
|
|
|
|
end
|