WikiName

元祖のWikiでは、2つ以上の単語をmixed case (WikiName とか ThisIsAnotherWikiName ) で書いておくと、それが自動的に Wiki内の他のページへのリンクになる。これをWikiNameと呼ぶ。

良いアイディアだと思うのだけれど、日本語では使えない。 日本語拡張されたWikiCloneでは特殊な区切り記号を用いて WikiNameとしているものが多い。WiLiKiもそれにならった。


Mixed Caseの起源

mixed case を WikiName とする、というのはWikiが作られた もともとの目的がJava,C++などでのプログラミングに関する議論の 場を作ろう、ということだったからのような気がします。

ああいった言語では識別子を命名するときにmixed caseを使う習慣が あるんですよね。

ですから逆に WiLiKiでは英小文字をハイフンでつないだものを wiki-name? として自動認識させるようにしたら面白いのでは ないかと思いました。 (単に面白いだけで実用性が無いのはあいかわらずですが‥‥‥)


MixedCaseの単語区切りを展開したら

Swiki にも WikiName はありませんので親近感?がありますw。--sumim

WikiClone って、WikiName をきちんと展開(ページのタイトルになった とき、省略されたスペースを補完して Wiki Clone 、Wiki Name と表示)しない ですね。なんか理由があるのでしょうか。--sumim


ページ名に空白を含めるには

WiLiKi:WishListより移動

Shiro (2003/08/18 01:43:16 PDT): src/wiliki/format.scmのreader-macro-wiki-name? の4行目の(string-index-name #[\s]) でスペースの入っているページ名を 弾いているので、これを除けば多分できるんじゃないかと思います(試していません)。 そういうページ名を許すとどうなるかあまり深く考えてないので。 何か嬉しいことはありますか。

Shiro (2003/08/29 01:26:17 PDT): 多分、こんな理由で、私はpagenameに 空白を含めたいと思ったことがないのです:

  1. ページのタイトルは簡潔な方がわかりやすい
  2. ページのタイトルはページを同定するキーなので、 見た目で判別しにくい文字は入れたくない (例えば、「あ あ」というページと 「あ あ」というページと「あ あ 」というページが別々に出来たらあんまり 嬉しくない)。
  3. ページへのリンクとなる方の文章では、たまに長いフレーズから リンクを張りたい場合があるが、それはむしろanchor文字列と ページ名を別に指定できるようなメカニズムで解決されるべきでは

で、特に3番目の機構に関して、PageNameに空白が入らないことが分かっていれば [[PageName アンカー文字列]]という文法が使えるなあ、と思っています。

Shiro (2003/09/01 23:01:48 PDT): なるほど。元々のWikiNameの発想が頭にあったので、 ProcessDirectoryRecursively の方が「オブジェクトとしてのページ」のID という感じがするなあと思っていたのですが、そういう前提をとっぱらって 考えてみれば、ブラケット名を採用した時点でWikiName式の綴りを使う必要性は 無くなっているのですよね。紛らわしい名前に関しては、細かいことを言えば ASCIIの空白以外にもいくつもあるので(現在でもいわゆる全角空白は入ってしまうはず)、 最終的には利用者に気を付けてもらうしかないし。 とりあえず、文字間の空白は許す(WikiNameの前後の空白や、空白だけの名前はダメ) って感じで運用してみようかな。


bracket vs paren

Shiro (2003/09/05 13:24:15 PDT): Wikiのような、通常の文章にディレクティブを埋め込む 文法の場合、「なるべく『地の文』と干渉しにくく、かつ、なるべく簡単な文字列」 を特別扱いする必要がありますね。ディレクティブが普通の文章にもよく出てくる ような文字列だったらその文字列をエスケープすることに気を使わなくちゃならないし、 それを避けるためにあんまり複雑にしすぎても使うのが難しくなるだけ。

オリジナルのWikiNameは、(少なくとも英語圏では)そのへんのバランスがまあうまく 取れている解だったとは思います。(それでも干渉を防げないことがしばしばありますが)。 BracketNameもその精神にはわりと合致しているんじゃないかと。

Schemeの形式を取る場合、考慮すべきなのは次のような点かと。

  1. カッコは地の文にもよく出てくるので、どうやってディレクティブと区別するか?
  2. Wikiのように多くが文字列操作の場合、ディレクティブ中のリテラル文字列を "..." で表現するのは繁雑に感じることがある。むしろ変数参照の方を特別扱いする、 sh系の文法の方が良くは無いか。
  3. 文法エラーがあった時に、Gracefulに対応できるか? 例えば1行目にカッコの閉じ忘れ があり、最終行にカッコがひとつ余分だった時に、全てがひとつのカッコ無いの ディレクティブだと判断されてしまうのは、あまり嬉しくない。

ディレクティブと地の文の区別

リテラル文字列の扱い

Shiro: sh系の文法とは、通常の文字列トークンはリテラルとして扱い、 変数参照の場合にそれを明示する方法のことです(例: $PATH など)。

文法エラーのgracefulな処理

gracefulな処理に関して言うと、行指向の文法は結構ロバストです。 一応、WiLiKiでは不正な入力が来たときでも「見えなくなる」ことはないように しています。

階層構造にならない入力が来たときにどう処理するかですね。

More ...