本文 編集 履歴 ソース 差分 最近の更新 VikiWikiとは

VikiWiki - WikiDomProject

いよいよVikiWikiに組み込むことにしました。 各種スタイルがそろったら1.9.0として公開をします。

VikiWikiパーサをDOMで実装

まずは作ってみた

適当な親ノードを用意してWikiテキストと一緒にパーサに渡せば、 WikiテキストをDOMオブジェクトに変換してくれる代物です。

imp = DOMImplementation.instance
doc = imp.createDocument(nil, nil, nil)
root = doc.createElement('wiki')
doc.appendChild(root)
VikiWikiStyle::new.parse(root, wiki)

Wikiデータにアクセスパスを

Wikiテキストはテキストなのでgrepやらawkやらを駆使してデータへのアクセスはできるのだが、 Wikiテキストを解析したデータに対するアクセスは難しい。 一度XMLテキストに落とす方式はすでに実験済みだが、面白くも何ともない。

ということでDOMを使ってWikiをパースすることで DOMを使って参照してもらおうというのがこのプロジェクトの試みです。 最初からDOMをやっておけばよかったと思うくらい、きれいなパーサができました。

Wikiエンジンの開発キットを

Wiki書式を使ったCGIやツールを作りたいというニーズはあるようです。 独自のAPIを用意するよりも標準化されたDOMによるパーサを公開するというのは より組み込みやすいライブラリを提供できるのではないかと思います。

Wikiの開発キットWikiWiKitというのはどうでしょうか?

DOCTYPE

まずは文章で書いてみます。 (固有)はVikiWikiの現在の仕様に則している部分です。

DTDで書くとこんな感じでしたっけ?

<! DOCTYPE wiki [
<!ELEMENT WikiName (#PCDATA) >
<!ATTRLIST WikiName
  wri CDATA #REQUIRED
  bracket CDATA #IMPLIED
>
<!ELEMENT escape (#PCDATA) >
<!ELEMENT plugin (param)+ >
<!ATTRLIST plugin
  name CDATA #REQUIRED
  id CDATA #IMPLIED
  plain CDATA #IMPLIED
>
<!ELEMENT param EMPTY >
<!ATTRLIST plugin
  mark CDATA #IMPLIED
>
]>

ご意見など

ご意見などあればどうぞ。

お名前
コメント