MoinMoinでWikiNameを禁止する

webをwikiに書き直す計画は遅々として進んでいないが、忘れていたりしてるのではないのであって、足踏を繰り返しつつ牛歩戦術の如く前進しているので、お待ち願いたい。待っても何もないけど。
ところで、使用しているwikiエンジンであるMoinMoinは、(wikiとしては当然の機能だが) 例えば HogeFuga などと CamelCase で英単語を書くと、自動的にwiki内の該当ペイジにリンクが張られる (WikiName と解釈される)。MoinMoinでは !HogeFuga のように ! を付けるとWikiNameとは解釈されないので、リンクを防ぐこともできる。通常はそれでいいのだが、あたしのような使いかたをしていると時々困ることがある。

  1. あたしは、HTMLからwikiに自動変換している。プログラムの含まれたペイジだと CamelCase には頻繁に出くわすので、いちいち頭に ! を付けて、WikiName として解釈されるのを止める。でも、プログラムの一部なので、大抵は <pre> の中だったりする。pre の中では WikiName として解釈されないので、! が表示されるというカッコ悪いことになってします。HTML→wikiの変換スクリプトで pre などの中かどうか解釈するのも面倒…。
  2. だいたい、あたししか編集できないwikiにしたいのだ。当然、他の人は新しいペイジを作ることはできない。しかし、間違ってCamelCaseの部分をそのまま残してしまったら、誰かがそこをクリックすると「新しいペイジを作りますか?」的な表示が出てしまう。実際に作ることは出来なくしてあるが、カッコ悪いのはまちがいない。

というわけで、CamelCase が書いてあっても、WikiNameと解釈されないようにしたい。具体的には、[ ] で囲まない限り、InterWiki リンクは止めたい! わけだ。


MoinMoinのソースを追いかけて、方法を見付けたので紹介したい。ちなみにMoinMoinのバージョンは 1.5.8。他のバージョンではいろいろと違いそうなので御注意を。
MoinMoinをインストールしたディレクトリ以下の

  • moin/lib/python2.4/site-packages/MoinMoin/parser/wiki.py

の中で

  • formatting_rules

という変数を初期化しているところがある (1.5.8 では 54 行目あたり)。長い正規表現が複数行に渡って代入されているが、一行まるまる消せば良い。消すのは

(?P<word>%(word_rule)s)

という一行。こうしてから、wikiのペイジを変更して保存しなおすと、[ ] で囲んでいない WikiName はリンクになっていない!!


ちょっと試してみただけなので、他に問題が起こるかもしれない。飽くまで自己責任で。

追記

早速問題が発生した。
HelpContentsあたりのデフォルトのペイジ達は、ほとんどのリンクがWikiName直書きになっている。つまり、上の対応をすると、ヘルプが見れなくなるということ。
ヘルプを手動で書き換えてもいいわけだし、あたしみたいに「自分しか編集しない」ばあいは、ヘルプが見れなくても問題ないのだが、通常使用だといろいろ面倒かもしれない。
さて、どうしようか。