diff -ruN rd+/CVS/Entries rd+_new/CVS/Entries
--- rd+/CVS/Entries 2003-04-22 01:07:37.000000000 +0900
+++ rd+_new/CVS/Entries 2003-04-21 23:34:18.000000000 +0900
@@ -1,5 +1,5 @@
/anchorlist.rb/1.1.2.2/Mon Apr 21 14:33:51 2003//Tv0_5_branch
/html_formatter.rb/1.1.2.2/Mon Apr 21 14:33:51 2003//Tv0_5_branch
/parser.rb/1.1.2.1/Mon Apr 21 14:33:51 2003//Tv0_5_branch
-/rd2html.rb/1.1.2.2/Mon Apr 21 16:07:37 2003//Tv0_5_branch
+/rd2html.rb/1.1.2.2/Mon Apr 21 14:33:51 2003//Tv0_5_branch
D
diff -ruN rd+/anchorlist.rb rd+_new/anchorlist.rb
--- rd+/anchorlist.rb 2003-04-21 23:33:51.000000000 +0900
+++ rd+_new/anchorlist.rb 2003-04-21 23:34:34.000000000 +0900
@@ -22,8 +22,9 @@
REG_INTERWIKI_NAME = /\[\[([^|]+)\|(#{URL})\]\](?:\s+(sjis|euc))?/
- def initialize(interwiki_data)
+ def initialize(interwiki_data, plugin)
@anchors = Hash.new
+ @plugin = plugin
n = interwiki_data || ''
n.scan(REG_INTERWIKI_NAME) do |i|
@anchors[i[0]] = [i[1], "", i.size > 2 ? i[2] : ""]
@@ -78,8 +79,8 @@
option_or_name = option unless option_or_name;
end
charset = cset unless charset
-
- value = "#{key}:#{option_or_name}" if value == ""
+ option_or_name = ":#{option_or_name}" if option_or_name
+ value = "#{key}#{option_or_name}" if value == ""
if url.nil?
url = key
@@ -95,7 +96,6 @@
url += convert_charset(option_or_name, charset)
value = name if name
end
-
%Q[#{value}]
end
diff -ruN rd+/html_formatter.rb rd+_new/html_formatter.rb
--- rd+/html_formatter.rb 2003-04-21 23:33:51.000000000 +0900
+++ rd+_new/html_formatter.rb 2003-04-21 23:34:34.000000000 +0900
@@ -21,7 +21,7 @@
@db = db
@plugin = plugin
@interwiki = InterWiki::new(@db)
- @toc = []
+ @visitor = Hiki::RD2HTMLVisitor.new(@plugin, @db)
end
def HTMLFormatter::diff(d)
@@ -39,13 +39,12 @@
end
def to_s
- visitor = Hiki::RD2HTMLVisitor.new(@plugin, @db, self)
- @references = visitor.references
+ @references = @visitor.references
begin
- visitor.visit(@tokens).gsub(/<\/?body>/, "")
+ @visitor.visit(@tokens).gsub(/<\/?body>/, "")
rescue Exception
tree = RD::RDTree.new("=begin\n==Error! Please edit this page again.\n#{CGI::escapeHTML($!.backtrace.join("\n"))}" + "\n=end\n")
- visitor.visit(tree).gsub(/<\/?body>/, "")
+ @visitor.visit(tree).gsub(/<\/?body>/, "")
end
end
@@ -56,7 +55,7 @@
def toc
s = "
\n"
lv = 1
- @toc.each do |h|
+ @visitor.toc.each do |h|
if h['level'] > lv
s << ( "\n" * ( h['level'] - lv ) )
lv = h['level']
@@ -68,9 +67,5 @@
end
s << ("
\n" * lv)
end
-
- def toc_add(h)
- @toc.push(h)
- end
end
end
diff -ruN rd+/parser.rb rd+_new/parser.rb
--- rd+/parser.rb 2003-04-21 23:33:51.000000000 +0900
+++ rd+_new/parser.rb 2003-04-21 23:34:34.000000000 +0900
@@ -12,9 +12,14 @@
class Parser
def parse(s)
begin
- RD::RDTree.new("=begin\n#{s}\n=end\n")
- rescue
- RD::RDTree.new("=begin\n==Error! Please edit this page again.\n#{CGI::escapeHTML($!.backtrace.join("\n"))}" + "\n=end\n")
+ RD::RDTree.new("=begin\n#{s}\n=end\n\n")
+ rescue
+ error = $!.message.gsub(/^/, " ")
+ i = 0
+ s = "\n#{s}\n"
+ src = s.split(/\n/).collect{|v| i += 1; " %03d: #{v}" % [i]}.join("\n")
+
+ RD::RDTree.new("=begin\n==Error! Please edit this page again.\n#{error}\n===Original document\n\n#{src}" + "\n=end\n")
end
end
end
diff -ruN rd+/rd2html.rb rd+_new/rd2html.rb
--- rd+/rd2html.rb 2003-04-22 01:07:37.000000000 +0900
+++ rd+_new/rd2html.rb 2003-04-22 01:10:32.000000000 +0900
@@ -15,34 +15,37 @@
require "rd/rd2html-lib"
require 'style/rd+/anchorlist.rb'
+
+$section_anchor = %Q[_] if $section_anchor == nil
+
module Hiki
class RD2HTMLVisitor < RD::RD2HTMLVisitor
- attr_reader :references
+ attr_reader :references, :toc
EVAL_PLUGIN_RE = /\{\{(.*?)\}\}/m
LAST_WORD_RE = /^[A-Z0-9_]*$/
CLASS_RE = /\#|::|\./
- CONSTANT_RE = /[a-zA-Z0-9_\+!\?\=]+/
+ CONSTANT_RE = /[a-zA-Z0-9_\+!\?\=&;\[\]]+/
ESC_WORD = '_h_i-k-i_'
ESC_WORD_RE = /#{ESC_WORD}/
- def initialize(plugin, db, visitee)
+ def initialize(plugin, db)
super()
@title = "Untitled"
@plugin = plugin
@db = db
@references = Array.new
@regex = nil
- @visitee = visitee
+ @toc = []
if text = @db.load("ModuleNames")
@modulenames = text.split(/\s/).join("|")
@esc_modulenames = /(#{text.split(/\s/).join(ESC_WORD + "|") + ESC_WORD})/
@regex_modulenames = /#{@modulenames}/
- @regex = /(#{@modulenames})[\#\.\:][a-zA-Z0-9_\#\.\:]*[a-zA-Z0-9_!\+\?=]/
+ @regex = /(#{@modulenames})[\#\.\:][a-zA-Z0-9_\#\.\:\=&;\[]*[a-zA-Z0-9_!\+\?\=&;\]]/
end
#InterWikiName
- @anchorlist = AnchorList.new(@db.load($interwiki_name))
+ @anchorlist = AnchorList.new(@db.load($interwiki_name), plugin)
end
def get_anchor(element)
@@ -54,6 +57,7 @@
# Gtk::Hoge#fuga, Gtk::Hoge.fuga, Gtk::Hoge::Foo
# If Gtk::Hoge. << period for document, unscan it.
if constant = s.scan(CONSTANT_RE)
+ constant = CGI::unescapeHTML(constant)
child = div_class_method(s)
if child
[sep, constant] << child
@@ -153,12 +157,15 @@
html_body(content) + "\n"
end
+ def a_name_href(anchor, label)
+ %Q[#{label}]
+ end
+
def apply_to_Headline(element, title)
anchor = get_anchor(element)
label = hyphen_escape(element.label)
- h = {'level' => element.level, 'index' => anchor, 'title' => title.join('')}
- @visitee.toc_add(h)
- %Q[#{title.join("")}] +
+ @toc.push({'level' => element.level, 'index' => anchor, 'title' => title.join('')})
+ %Q[#{a_name_href(anchor, title.join(""))}] +
%Q[]
end
@@ -173,6 +180,29 @@
end
end
+ def apply_to_DescListItem(element, term, description)
+ anchor = get_anchor(element.term)
+ label = hyphen_escape(element.label)
+ if description.empty?
+ %Q[- #{a_name_href(anchor, term)}
]
+ else
+ %Q[- #{a_name_href(anchor, term)}
\n] +
+ %Q[- \n#{description.join("\n").chomp}\n
]
+ end
+ end
+
+ def apply_to_MethodListItem(element, term, description)
+ term = parse_method(term) # maybe: term -> element.term
+ anchor = get_anchor(element.term)
+ label = hyphen_escape(element.label)
+ if description.empty?
+ %Q[- #{a_name_href(anchor, "
" + term + "")} ]
+ else
+ %Q[- #{a_name_href(anchor, "
" + term + "")} ] +
+ %Q[- \n#{description.join("\n")}
]
+ end
+ end
+
def apply_to_Reference_with_URL(element, content)
url = element.label.url
if /\.(jpg|jpeg|png|gif)/ =~ url