IT pass HikiWiki - [Memo2010][ITPASS] tako 構築作業ログ 11 (Hiki1) Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
10/10/20 に Hiki の設定を河合,坂本で行った.(ロガー: 坂本)
{{toc}}
[((<ITPASSサーバ構築ドキュメント>))へ戻る]
== Hiki のインストール
Debian package 版を使った.
$ apt-show-versions -a -p hiki
hiki 0.8.7-1 install ok installed
hiki 0.8.7-1 lenny cdn.debian.or.jp
hiki/lenny uptodate 0.8.7-1
現 Hiki, debian のパッケージでは以下の修正の必要がなくなっていた.
== hikisetup の修正
以降で作成する各 Hiki ディレクトリの初期設定は /usr/bin/hikisetup で
行うが, Debian etch の Ruby のバージョンと hikisetup とが
整合的でないためかそのままでは動かないので, 少し修正する.
$ sudo cp /usr/bin/hikisetup /usr/bin/hikisetup.org
$ sudo vi /usr/bin/hikisetup
変更後のファイルは
((<hikisetup|URL:../server/hiki_system/hikisetup>))
から入手できる.
以下は編集前後のファイルの差分である.
$ diff -u hikisetup.org hikisetup
--- /usr/bin/hikisetup.orig 2007-06-27 20:56:18.000000000 +0900
+++ /usr/bin/hikisetup 2007-10-23 15:47:35.000000000 +0900
@@ -137,7 +137,7 @@
check_datapath
check_pluginpath
check_templatepath
- File.makedirs(@hikidir)
+ makedirs(@hikidir)
create_hikicgi
create_theme
create_datadir
== hikiconf.rb.sample の作成
上記の修正だけでは実行時に, 「/usr/share/doc/hiki/examples/hikiconf.rb.sample が無い」ために失敗する. /usr/share/doc/hiki/examples/hikiconf.rb.sample.ja.gzを/usr/share/doc/hiki/examples/ 以下に展開し, hikiconf.rb.sample へシンボリックリンクを張る.
#今回の作業では, すでに /usr/share/doc/hiki/examples/hikiconf.rb.sample.ja.gz が /usr/share/doc/hiki/examples/ 以下に展開されていた.
$ cd /usr/share/doc/hiki/examples/
$ sudo gunzip hikiconf.rb.sample.ja.gz
$ sudo ln -s hikiconf.rb.sample.ja hikiconf.rb.sample
これでシステムへの Hiki のインストールは完了した.
== Hiki の環境設定
以下では Hiki の環境設定を記す.
ただし, apache の実効権限が www-data であるため, 作業には
管理者権限が必要となることに注意.
=== TABLE を使えるようにするための設定
plugin として table_form.rb が公開されているが, RD+ style に対応してい
ないのでちょっと修正する. またスタイルシートから見た目を変更できるよう,
div タグに class="table_form_rd" を含める. 一応オリジナルの
table_form.rb 自体もプラグインに含めておく.
$ wget http://gouketsu.net/simm/f/20050721/table_form.rb
$ sudo mv table_form.rb /usr/share/hiki/misc/plugin
$ cd /usr/share/hiki/misc/plugin
$ sudo cp table_form.rb table.form_rd.rb
$ sudo vi table.form_rd.rb
wget でファイルが見つからなかったため, 修正後のファイルをダウンロードした.
修正後のファイルは
((<table_form_rd.rb|URL:../server/hiki_system/table_form_rd.txt>))
においてある. 以下に差分の内容も記す.
$ diff -u table_form.rb table_form_rd.rb
--- table_form.rb 2005-07-22 00:51:42.000000000 +0900
+++ table_form_rd.rb 2008-11-11 15:25:39.000000000 +0900
@@ -20,11 +20,10 @@
@table_num += 1
result = <<EOS
<form action="#{$cgi_name}" method="post">
- <div>
+ <div class="table_form_rd">
<table border="1">
EOS
items.each do |i|
- i.gsub!(/\|\|/,"。ツ")
result << <<EOS
<tr>
<th><input type="hidden" name="title#{count}" value="#{i}">#{i} </th>
@@ -60,8 +59,8 @@
i = 0
while i < count
- title << "||'''#{params["title#{i}"][0].to_s.gsub(/\|\|/,"。ツ")}'''"
- elem = params["col#{i}"][0].to_s.gsub(/\|\|/,"。ツ")
+ title << "#{params["title#{i}"][0].to_s},"
+ elem = params["col#{i}"][0].to_s
row << elem
empty = false unless "" === elem
i += 1
@@ -82,14 +81,14 @@
if /^\{\{table_form.*\}\}/ =~ l && flag == false
if count == table_no
if style == 0 then
- content << title unless /^\|\|/ =~ prev
- content << "||" + row.join("||") + "\n"
+ content << "\s#RT\s" + title.gsub(/,$/,"") unless /^\s/ =~ prev
+ content << "\s" + row.join(",") + "\n"
content << l
prev = l
else
content << l
content << title
- prev = "||" + row.join("||") + "\n"
+ prev = "\s" + row.join(",") + "\n"
content << prev
end
flag = true
@@ -98,7 +97,7 @@
content << l
prev = l
end
- elsif title === l and /^\|\|/ =~ prev
+ elsif title === l and /^\s*#RT/ =~ prev
nil
else
content << l
=== タイムアウト時間の延長
デフォルトのタイムアウトは, ログインしてから 1 時間である.
長時間の編集作業の際には強制ログアウトされてしまうため, /usr/share/hiki/hiki/session.rb を直接編集し, タイムアウト時間を24 時間に延ばした. 以下は差分の内容である.
編集後のファイルは
((<session.rb|URL:../server/hiki_system/session.txt>))
から入手した.
$ diff -u session.rb.orig session.rb
--- /usr/share/hiki/hiki/session.rb.orig 2007-10-26 17:47:15.000000000 +0900
+++ /usr/share/hiki/hiki/session.rb 2007-10-26 17:47:21.000000000 +0900
@@ -3,7 +3,7 @@
module Hiki
class Session
- MAX_AGE = 60 * 60
+ MAX_AGE = 24 * 60 * 60
attr_reader :session_id
attr_writer :user
@@ -29,8 +29,9 @@
end
def save
+ return until @user
File.open( session_file, 'w' ) do |file|
- file.print @user.to_s
+ file.print @user
end
end
@@ -76,9 +77,7 @@
def create_new_id
require 'digest/md5'
md5 = Digest::MD5::new
- now = Time::now
- md5.update(now.to_s)
- md5.update(String(now.usec))
+ md5.update(String(Time::now))
md5.update(String(rand(0)))
md5.update(String($$))
md5.update('foobar')
=== admin でのログイン時には注記を表示
運用の際には, admin はあくまで管理用に使用することにし, 一般的なページの書き換えは行わないことが望ましい.
しかし現在自身が admin でログインしているのか一般ユーザでログインしているのか, 一見してよく分からないため, admin でのログインの際にはその旨をページ上部に表示するようにする.
書き換えを行うのは /usr/share/hiki/plugin/00default.rb である. 書き換え後のファイルは
((<00default.rb|URL:../server/hiki_system/00default.txt>))
から入手した. 以下に差分の内容も記す.
$ diff -u 00default.rb.orig 00default.rb
--- 00default.rb.orig 2007-10-25 20:01:21.000000000 +0900
+++ 00default.rb 2007-10-25 20:01:07.000000000 +0900
@@ -188,6 +188,7 @@
if @conf.bot?
menu << %Q!<a href="#{@conf.cgi_name}?c=index">#{@conf.msg_index}</a>!
else
+ menu << %Q!<span class="caution">Logged in as Admin. Don't edit any pages.</span><br/>! if admin?
menu << %Q!<a href="#{@conf.cgi_name}?c=create">#{@conf.msg_create}</a>! if creatable?
menu << %Q!<a href="#{@conf.cgi_name}?c=edit;p=#{@page.escape}">#{@conf.msg_edit}</a>! if @page && editable?
menu << %Q!<a href="#{@conf.cgi_name}?c=diff;p=#{@page.escape}">#{@conf.msg_diff}</a>! if @page && editable?
=== rdtool, rttool のインストール
RD(Ruby Document format)は, Ruby スクリプトファイルに
埋め込むことを念頭に定義されたドキュメントフォーマット(書式)であり,
Wiki に似た文法でマークアップ(構造化)できるため HTML などよりも簡潔な記述ができる.
Hiki のドキュメントは基本的に RD で記述されており, これらをブラウザで表示できるよう HTML に変換するのが rdtool である.
rdtool をインストールした.
# aptitude install rdtool
また, rdtool だけでは作表機能がサポートされていない.
作表機能を追加するために, rttool をインストールした.
# aptitude install librttool-ruby
#
=== html_formatter.rb の修正
以下の 2 点の目的のため,/usr/share/hiki/style/rd+/html_formatter.rb の修正を行った.
* ((<URL:#RD+ スタイルの目次の修飾>))
* ((<URL:#目次からのページ内リンク (日本語) を有効に>))
書き換え後のファイルは
((<html_formatter.rb|URL:../server/hiki_system/html_formatter.txt>))
から入手できる. 以下に差分の内容も記す.
$ diff -u html_formatter.rb.orig html_formatter.rb
--- html_formatter.rb.orig 2007-06-27 20:56:18.000000000 +0900
+++ html_formatter.rb 2007-10-28 23:55:25.000000000 +0900
@@ -39,7 +39,7 @@
end
def toc
- s = "<ul>"
+ s = "<div class=\"toc\"><ul>"
lv = 1
@visitor.toc.each do |h|
if h['level'] > lv
@@ -49,9 +49,10 @@
s << ( "</ul>" * ( lv - h['level'] ) )
lv = h['level']
end
- s << %Q!<li><a href="##{h['index']}">#{h['title'].escapeHTML}</a>!
+ s << %Q!<li><a href="##{h['index'].gsub(/^%/, '').gsub(/%/, '-')}" class="toc">#{h['title'].escapeHTML}</a>!
end
s << ("</ul>" * lv)
+ s << ("</div>")
end
end
end
==== RD+ スタイルの目次の修飾
ページの先頭に {{toc}} という文字を埋め込むと, 文頭に目次が挿入される.
ただし, デフォルトの設定では<ul> 等のタグがそのまま記述されているだけなので, 目次に関してスタイルシートによる指定ができない.
基本的には RD+ スタイルを用いることを考えているため, html_formatter.rb を修正し, 目次の前後に <div class="toc"> を埋め込むこととした.
((<社内SEの独り言 -- Hikiメモ::目次部分のスタイルを変えたい|URL:http://pochitto001.blog14.fc2.com/blog-entry-19.html>))
を参考にした.
==== 目次からのページ内リンク (日本語) を有効に
上記目次からページ内へリンクを作成する際, 日本語の見出しの場合には
一部ブラウザ (Mozilla 2.0 等) ではリンクが有効にならない場合がある.
そのための修正を html_formatter.rb に施した.
なおこの修正とあわせ, 下記の ((<URL:#rd2html.rb の修正>)) も行う必要がある.
=== rd2html.rb の修正
以下の 2 点の目的のため, /usr/share/hiki/style/rd+/rd2html.rb の修正を行った.
* ((<URL:#RT で作成された表を修飾可能に>))
* ((<URL:#ページ内リンクを有効に>))
書き換え後のファイルは
((<rd2html.rb|URL:../server/hiki_system/rd2html.txt>))
から入手した. 以下に差分の内容も記す.
$ diff rd2html.rb.orig rd2html.rb
--- rd2html.rb.orig 2007-10-25 12:38:34.000000000 +0900
+++ rd2html.rb 2007-11-15 17:07:52.000000000 +0900
@@ -174,7 +174,7 @@
else
label[0].gsub!(ESC_WORD_RE, "")
end
- %Q[<a name="#{anchor}" href="##{anchor}" title="#{anchor.unescape.escapeHTML}">#{label}</a>]
+ %Q[<a name="#{anchor.gsub(/^%/, '').gsub(/%/, '-')}" href="##{anchor.gsub(/^%/, '').gsub(/%/, '-')}" title="#{anchor.unescape.escapeHTML}">#{label}</a>]
end
def apply_to_Headline(element, title)
@@ -226,6 +226,13 @@
url = element.label.url
if /\.(jpg|jpeg|png|gif)\z/ =~ url
%Q[<img src="#{meta_char_escape(url)}" title="#{content.join("")}" alt="#{content.join("")}" />]
+ elsif /^(.*?)\#(.*?)$/ =~ url
+ url = $1 + '#' + $2.escape.gsub(/^%/, '').gsub(/%/, '-')
+ content_join = content.join("")
+ if content_join =~ /^\<URL:\#(.*?)\>$/
+ content_join = $1
+ end
+ %Q[<a href="#{meta_char_escape(url)}" class="external">#{content_join}</a>]
else
%Q[<a href="#{meta_char_escape(url)}" class="external">#{content.join("")}</a>]
end
@@ -249,7 +256,9 @@
escaped += '#' + option.join.gsub(@regex_modulenames, "\\&#{ESC_WORD}").escape if option and option.size > 0
end
@references << key
- @plugin.hiki_anchor(escaped, content)
+ internal_link = ''
+ internal_link << '#' + option[0].escape.gsub(/^%/, '').gsub(/%/, '-') if option.size > 0
+ @plugin.hiki_anchor(escaped + internal_link, content)
else
key, option, name = @anchorlist.separate(label)
if @anchorlist.has_key?(key)
@@ -272,7 +281,9 @@
if /\A#\s*RT\s*/ =~ content[0]
content.shift
rt_visitor = ::RT::RT2HTMLVisitor.new
- return rt_visitor.visit(::RT::RTParser.parse(content.join))
+ htm = rt_visitor.visit(::RT::RTParser.parse(content.join))
+ htm = "<div class=\"rt2html\">" + htm + "</div>"
+ return htm
end
rescue LoadError
$stderr.puts "RTtool cannot be load"
==== RT で作成された表を修飾可能に
RD+ モードの場合, RT を用いて表の作成が可能である.
(詳しくは ((<TextFormattingRules>)) を参照のこと).
しかし, オリジナルの RD+ で作成された表には div タグなどで括られていないため, その表に対する修飾ができない.
従って, /usr/share/hiki/style/rd+/rd2html.rb を書き換え,
<div class="rt2html"> .. </div> というタグで括るようにした.
==== ページ内リンクを有効に
デフォルトの rd2html.rb ではページ内リンクを使用できない.
そのため, 以下のように記述した際にページ内リンクが有効になるよう,
((<URL:#ページ内リンクを有効に>))
また以下のように記述した際には別のページ内の見出しを参照できるよう
修正を施した.
((<[ITPASS]Hikiのインストールと設定#ページ内リンクを有効に>))
== 参考文献
* ((<[ITPASS2009]Hikiのインストールと設定>))
{{toc}}
[((<ITPASSサーバ構築ドキュメント>))へ戻る]
== Hiki のインストール
Debian package 版を使った.
$ apt-show-versions -a -p hiki
hiki 0.8.7-1 install ok installed
hiki 0.8.7-1 lenny cdn.debian.or.jp
hiki/lenny uptodate 0.8.7-1
現 Hiki, debian のパッケージでは以下の修正の必要がなくなっていた.
== hikisetup の修正
以降で作成する各 Hiki ディレクトリの初期設定は /usr/bin/hikisetup で
行うが, Debian etch の Ruby のバージョンと hikisetup とが
整合的でないためかそのままでは動かないので, 少し修正する.
$ sudo cp /usr/bin/hikisetup /usr/bin/hikisetup.org
$ sudo vi /usr/bin/hikisetup
変更後のファイルは
((<hikisetup|URL:../server/hiki_system/hikisetup>))
から入手できる.
以下は編集前後のファイルの差分である.
$ diff -u hikisetup.org hikisetup
--- /usr/bin/hikisetup.orig 2007-06-27 20:56:18.000000000 +0900
+++ /usr/bin/hikisetup 2007-10-23 15:47:35.000000000 +0900
@@ -137,7 +137,7 @@
check_datapath
check_pluginpath
check_templatepath
- File.makedirs(@hikidir)
+ makedirs(@hikidir)
create_hikicgi
create_theme
create_datadir
== hikiconf.rb.sample の作成
上記の修正だけでは実行時に, 「/usr/share/doc/hiki/examples/hikiconf.rb.sample が無い」ために失敗する. /usr/share/doc/hiki/examples/hikiconf.rb.sample.ja.gzを/usr/share/doc/hiki/examples/ 以下に展開し, hikiconf.rb.sample へシンボリックリンクを張る.
#今回の作業では, すでに /usr/share/doc/hiki/examples/hikiconf.rb.sample.ja.gz が /usr/share/doc/hiki/examples/ 以下に展開されていた.
$ cd /usr/share/doc/hiki/examples/
$ sudo gunzip hikiconf.rb.sample.ja.gz
$ sudo ln -s hikiconf.rb.sample.ja hikiconf.rb.sample
これでシステムへの Hiki のインストールは完了した.
== Hiki の環境設定
以下では Hiki の環境設定を記す.
ただし, apache の実効権限が www-data であるため, 作業には
管理者権限が必要となることに注意.
=== TABLE を使えるようにするための設定
plugin として table_form.rb が公開されているが, RD+ style に対応してい
ないのでちょっと修正する. またスタイルシートから見た目を変更できるよう,
div タグに class="table_form_rd" を含める. 一応オリジナルの
table_form.rb 自体もプラグインに含めておく.
$ wget http://gouketsu.net/simm/f/20050721/table_form.rb
$ sudo mv table_form.rb /usr/share/hiki/misc/plugin
$ cd /usr/share/hiki/misc/plugin
$ sudo cp table_form.rb table.form_rd.rb
$ sudo vi table.form_rd.rb
wget でファイルが見つからなかったため, 修正後のファイルをダウンロードした.
修正後のファイルは
((<table_form_rd.rb|URL:../server/hiki_system/table_form_rd.txt>))
においてある. 以下に差分の内容も記す.
$ diff -u table_form.rb table_form_rd.rb
--- table_form.rb 2005-07-22 00:51:42.000000000 +0900
+++ table_form_rd.rb 2008-11-11 15:25:39.000000000 +0900
@@ -20,11 +20,10 @@
@table_num += 1
result = <<EOS
<form action="#{$cgi_name}" method="post">
- <div>
+ <div class="table_form_rd">
<table border="1">
EOS
items.each do |i|
- i.gsub!(/\|\|/,"。ツ")
result << <<EOS
<tr>
<th><input type="hidden" name="title#{count}" value="#{i}">#{i} </th>
@@ -60,8 +59,8 @@
i = 0
while i < count
- title << "||'''#{params["title#{i}"][0].to_s.gsub(/\|\|/,"。ツ")}'''"
- elem = params["col#{i}"][0].to_s.gsub(/\|\|/,"。ツ")
+ title << "#{params["title#{i}"][0].to_s},"
+ elem = params["col#{i}"][0].to_s
row << elem
empty = false unless "" === elem
i += 1
@@ -82,14 +81,14 @@
if /^\{\{table_form.*\}\}/ =~ l && flag == false
if count == table_no
if style == 0 then
- content << title unless /^\|\|/ =~ prev
- content << "||" + row.join("||") + "\n"
+ content << "\s#RT\s" + title.gsub(/,$/,"") unless /^\s/ =~ prev
+ content << "\s" + row.join(",") + "\n"
content << l
prev = l
else
content << l
content << title
- prev = "||" + row.join("||") + "\n"
+ prev = "\s" + row.join(",") + "\n"
content << prev
end
flag = true
@@ -98,7 +97,7 @@
content << l
prev = l
end
- elsif title === l and /^\|\|/ =~ prev
+ elsif title === l and /^\s*#RT/ =~ prev
nil
else
content << l
=== タイムアウト時間の延長
デフォルトのタイムアウトは, ログインしてから 1 時間である.
長時間の編集作業の際には強制ログアウトされてしまうため, /usr/share/hiki/hiki/session.rb を直接編集し, タイムアウト時間を24 時間に延ばした. 以下は差分の内容である.
編集後のファイルは
((<session.rb|URL:../server/hiki_system/session.txt>))
から入手した.
$ diff -u session.rb.orig session.rb
--- /usr/share/hiki/hiki/session.rb.orig 2007-10-26 17:47:15.000000000 +0900
+++ /usr/share/hiki/hiki/session.rb 2007-10-26 17:47:21.000000000 +0900
@@ -3,7 +3,7 @@
module Hiki
class Session
- MAX_AGE = 60 * 60
+ MAX_AGE = 24 * 60 * 60
attr_reader :session_id
attr_writer :user
@@ -29,8 +29,9 @@
end
def save
+ return until @user
File.open( session_file, 'w' ) do |file|
- file.print @user.to_s
+ file.print @user
end
end
@@ -76,9 +77,7 @@
def create_new_id
require 'digest/md5'
md5 = Digest::MD5::new
- now = Time::now
- md5.update(now.to_s)
- md5.update(String(now.usec))
+ md5.update(String(Time::now))
md5.update(String(rand(0)))
md5.update(String($$))
md5.update('foobar')
=== admin でのログイン時には注記を表示
運用の際には, admin はあくまで管理用に使用することにし, 一般的なページの書き換えは行わないことが望ましい.
しかし現在自身が admin でログインしているのか一般ユーザでログインしているのか, 一見してよく分からないため, admin でのログインの際にはその旨をページ上部に表示するようにする.
書き換えを行うのは /usr/share/hiki/plugin/00default.rb である. 書き換え後のファイルは
((<00default.rb|URL:../server/hiki_system/00default.txt>))
から入手した. 以下に差分の内容も記す.
$ diff -u 00default.rb.orig 00default.rb
--- 00default.rb.orig 2007-10-25 20:01:21.000000000 +0900
+++ 00default.rb 2007-10-25 20:01:07.000000000 +0900
@@ -188,6 +188,7 @@
if @conf.bot?
menu << %Q!<a href="#{@conf.cgi_name}?c=index">#{@conf.msg_index}</a>!
else
+ menu << %Q!<span class="caution">Logged in as Admin. Don't edit any pages.</span><br/>! if admin?
menu << %Q!<a href="#{@conf.cgi_name}?c=create">#{@conf.msg_create}</a>! if creatable?
menu << %Q!<a href="#{@conf.cgi_name}?c=edit;p=#{@page.escape}">#{@conf.msg_edit}</a>! if @page && editable?
menu << %Q!<a href="#{@conf.cgi_name}?c=diff;p=#{@page.escape}">#{@conf.msg_diff}</a>! if @page && editable?
=== rdtool, rttool のインストール
RD(Ruby Document format)は, Ruby スクリプトファイルに
埋め込むことを念頭に定義されたドキュメントフォーマット(書式)であり,
Wiki に似た文法でマークアップ(構造化)できるため HTML などよりも簡潔な記述ができる.
Hiki のドキュメントは基本的に RD で記述されており, これらをブラウザで表示できるよう HTML に変換するのが rdtool である.
rdtool をインストールした.
# aptitude install rdtool
また, rdtool だけでは作表機能がサポートされていない.
作表機能を追加するために, rttool をインストールした.
# aptitude install librttool-ruby
#
=== html_formatter.rb の修正
以下の 2 点の目的のため,/usr/share/hiki/style/rd+/html_formatter.rb の修正を行った.
* ((<URL:#RD+ スタイルの目次の修飾>))
* ((<URL:#目次からのページ内リンク (日本語) を有効に>))
書き換え後のファイルは
((<html_formatter.rb|URL:../server/hiki_system/html_formatter.txt>))
から入手できる. 以下に差分の内容も記す.
$ diff -u html_formatter.rb.orig html_formatter.rb
--- html_formatter.rb.orig 2007-06-27 20:56:18.000000000 +0900
+++ html_formatter.rb 2007-10-28 23:55:25.000000000 +0900
@@ -39,7 +39,7 @@
end
def toc
- s = "<ul>"
+ s = "<div class=\"toc\"><ul>"
lv = 1
@visitor.toc.each do |h|
if h['level'] > lv
@@ -49,9 +49,10 @@
s << ( "</ul>" * ( lv - h['level'] ) )
lv = h['level']
end
- s << %Q!<li><a href="##{h['index']}">#{h['title'].escapeHTML}</a>!
+ s << %Q!<li><a href="##{h['index'].gsub(/^%/, '').gsub(/%/, '-')}" class="toc">#{h['title'].escapeHTML}</a>!
end
s << ("</ul>" * lv)
+ s << ("</div>")
end
end
end
==== RD+ スタイルの目次の修飾
ページの先頭に {{toc}} という文字を埋め込むと, 文頭に目次が挿入される.
ただし, デフォルトの設定では<ul> 等のタグがそのまま記述されているだけなので, 目次に関してスタイルシートによる指定ができない.
基本的には RD+ スタイルを用いることを考えているため, html_formatter.rb を修正し, 目次の前後に <div class="toc"> を埋め込むこととした.
((<社内SEの独り言 -- Hikiメモ::目次部分のスタイルを変えたい|URL:http://pochitto001.blog14.fc2.com/blog-entry-19.html>))
を参考にした.
==== 目次からのページ内リンク (日本語) を有効に
上記目次からページ内へリンクを作成する際, 日本語の見出しの場合には
一部ブラウザ (Mozilla 2.0 等) ではリンクが有効にならない場合がある.
そのための修正を html_formatter.rb に施した.
なおこの修正とあわせ, 下記の ((<URL:#rd2html.rb の修正>)) も行う必要がある.
=== rd2html.rb の修正
以下の 2 点の目的のため, /usr/share/hiki/style/rd+/rd2html.rb の修正を行った.
* ((<URL:#RT で作成された表を修飾可能に>))
* ((<URL:#ページ内リンクを有効に>))
書き換え後のファイルは
((<rd2html.rb|URL:../server/hiki_system/rd2html.txt>))
から入手した. 以下に差分の内容も記す.
$ diff rd2html.rb.orig rd2html.rb
--- rd2html.rb.orig 2007-10-25 12:38:34.000000000 +0900
+++ rd2html.rb 2007-11-15 17:07:52.000000000 +0900
@@ -174,7 +174,7 @@
else
label[0].gsub!(ESC_WORD_RE, "")
end
- %Q[<a name="#{anchor}" href="##{anchor}" title="#{anchor.unescape.escapeHTML}">#{label}</a>]
+ %Q[<a name="#{anchor.gsub(/^%/, '').gsub(/%/, '-')}" href="##{anchor.gsub(/^%/, '').gsub(/%/, '-')}" title="#{anchor.unescape.escapeHTML}">#{label}</a>]
end
def apply_to_Headline(element, title)
@@ -226,6 +226,13 @@
url = element.label.url
if /\.(jpg|jpeg|png|gif)\z/ =~ url
%Q[<img src="#{meta_char_escape(url)}" title="#{content.join("")}" alt="#{content.join("")}" />]
+ elsif /^(.*?)\#(.*?)$/ =~ url
+ url = $1 + '#' + $2.escape.gsub(/^%/, '').gsub(/%/, '-')
+ content_join = content.join("")
+ if content_join =~ /^\<URL:\#(.*?)\>$/
+ content_join = $1
+ end
+ %Q[<a href="#{meta_char_escape(url)}" class="external">#{content_join}</a>]
else
%Q[<a href="#{meta_char_escape(url)}" class="external">#{content.join("")}</a>]
end
@@ -249,7 +256,9 @@
escaped += '#' + option.join.gsub(@regex_modulenames, "\\&#{ESC_WORD}").escape if option and option.size > 0
end
@references << key
- @plugin.hiki_anchor(escaped, content)
+ internal_link = ''
+ internal_link << '#' + option[0].escape.gsub(/^%/, '').gsub(/%/, '-') if option.size > 0
+ @plugin.hiki_anchor(escaped + internal_link, content)
else
key, option, name = @anchorlist.separate(label)
if @anchorlist.has_key?(key)
@@ -272,7 +281,9 @@
if /\A#\s*RT\s*/ =~ content[0]
content.shift
rt_visitor = ::RT::RT2HTMLVisitor.new
- return rt_visitor.visit(::RT::RTParser.parse(content.join))
+ htm = rt_visitor.visit(::RT::RTParser.parse(content.join))
+ htm = "<div class=\"rt2html\">" + htm + "</div>"
+ return htm
end
rescue LoadError
$stderr.puts "RTtool cannot be load"
==== RT で作成された表を修飾可能に
RD+ モードの場合, RT を用いて表の作成が可能である.
(詳しくは ((<TextFormattingRules>)) を参照のこと).
しかし, オリジナルの RD+ で作成された表には div タグなどで括られていないため, その表に対する修飾ができない.
従って, /usr/share/hiki/style/rd+/rd2html.rb を書き換え,
<div class="rt2html"> .. </div> というタグで括るようにした.
==== ページ内リンクを有効に
デフォルトの rd2html.rb ではページ内リンクを使用できない.
そのため, 以下のように記述した際にページ内リンクが有効になるよう,
((<URL:#ページ内リンクを有効に>))
また以下のように記述した際には別のページ内の見出しを参照できるよう
修正を施した.
((<[ITPASS]Hikiのインストールと設定#ページ内リンクを有効に>))
== 参考文献
* ((<[ITPASS2009]Hikiのインストールと設定>))