6


0

XMLパーサーがエンティティーツリーを生成するのと同じ方法で、Wiki形式のテキストを入力として受け取り、エンティティーのツリーを生成できるパーサーを知っている人はいますか 明確にするために、私は次のようなテキストを取ることができる何かを探しています:

 -  " - "  -  "italics"のテキスト的な内容

そして、そのうちの1つ(サブヘッド)自体が子を持つ3つの子ノードを持つ、イントロをルートとするツリーを作成します。 私はhttp://meta.wikimedia.org/wiki/Help:Wikitextで説明されている「単純な」Wikiフォーマットを理解できるものを探しています。

私はウィキテキストのためのいくつかのレクサーを知っています、しかしツリーパーサーはありません。 私はオープンソースを探していて、CかCで書かれています。

6 Answer


2


Wiki形式には完全な情報がないため、Wiki形式のページから直接行うことはできません。 その代わりに、ウィキ形式のテキストは基本的に多くの正規表現規則によって翻訳され、HTMLまたはXHTMLの定義済みページフレームワークに挿入されます。

あなたがしたいことをする最も簡単な方法はいくつかの軽量テキストフォーマット(テキスタイルやクレオールのような)のための適切なフォーマッタを見つけ、それを通過してXHTMLを生成し、そして通常のパーサーを使ってXHTMLをパースすることです。


2


私がやりたいことは

  1. そのウィキ言語用のBNF構文を書きなさい。 それは単純なので、BNFもまた単純になるでしょう。

  2. パーサーを作成するには、 The Spirit Frameworkを使用してください。 それは本当に単純で(その単純なことのために)、そしてBNF構文はとても自然にCに翻訳されます。


2


私はこのようなツリーをJavaで内部的に作成するパーサーを書きました。 Java Wikipedia API

たぶんあなたはあなたのCまたはC実装のためのいくつかのアイデアを得ることができますか?

http://code.google.com/p/gwtwiki/source/browse/trunk/info.bliki.wiki / bliki-core / src / main / java / info / bliki / wiki / filter / HTMLConverter.java[HTMLConverter内部ノードツリーをHTMLマークアップに変換します。


2


あなたは Mylyn WikiTextを見てみるとよいでしょう。これはBuilderのデザインパターンを使ってウィキマークアップをさまざまなXMLフォーマットに変換するパーサーです。 HTML、Eclipseヘルプ、DITA、DocBookのビルダーが付属しています。 あなたはあなた自身のビルダーを使って出力をカスタマイズすることができます。

パーサーはTextile、MediaWiki、TracWiki、TWikiそしてConfluenceのマークアップを扱うことができます。 あなたが好きなら新しい言語を追加できるようにそれは拡張可能です。

ライブラリはJavaです


1


このPerlモジュールからいくつかのアイデアを得ることができます。

私はあなたがC / Cを探していると理解していますが、ちょっと、あなたはいくらかの長所を得るかもしれません。


0


https://dizzylogic.com/wikiparser[Wiki Parser]はまさにあなたが必要とすることをします:それはメディアウィキ構文を通常のXMLに翻訳します。 それはほとんどすべてのページ構造を保存し、テンプレート、画像ギャラリー、リダイレクトなどを処理します。

他のパーサーよりも桁違いに速く、現在の英語版ウィキペディアの55 GBすべてを解析するのに約2-3時間かかります。