BBCode の適切な Java 実装を使用した人はいますか? 私は見ています
- javabbcode : 何も表示されません
- kefir-bb : アルファとしてリストされています
- JBoss ソースコードの BBcode パーサー。
より良いオプションはありますか?
BBCode の適切な Java 実装を使用した人はいますか? 私は見ています
より良いオプションはありますか?
KefirBB 0.6 の現在のバージョンは、ベータ版としてリストされなくなりました。KefirBB パーサーは、独自のタグを使用して構成および拡張するのが非常に簡単だと思います。
(これは私がこれまでに見つけた中で最高のBBCodeパーサーです)
fyhao.comでこのコードも見つけましたが、誤ってネストされたタグから保護します (したがって、ユーザーが入力した入力の解析には適していません)。
public static String bbcode(String text) {
String html = text;
Map<String,String> bbMap = new HashMap<String , String>();
bbMap.put("(\r\n|\r|\n|\n\r)", "<br/>");
bbMap.put("\\[b\\](.+?)\\[/b\\]", "<strong>$1</strong>");
bbMap.put("\\[i\\](.+?)\\[/i\\]", "<span style='font-style:italic;'>$1</span>");
bbMap.put("\\[u\\](.+?)\\[/u\\]", "<span style='text-decoration:underline;'>$1</span>");
bbMap.put("\\[h1\\](.+?)\\[/h1\\]", "<h1>$1</h1>");
bbMap.put("\\[h2\\](.+?)\\[/h2\\]", "<h2>$1</h2>");
bbMap.put("\\[h3\\](.+?)\\[/h3\\]", "<h3>$1</h3>");
bbMap.put("\\[h4\\](.+?)\\[/h4\\]", "<h4>$1</h4>");
bbMap.put("\\[h5\\](.+?)\\[/h5\\]", "<h5>$1</h5>");
bbMap.put("\\[h6\\](.+?)\\[/h6\\]", "<h6>$1</h6>");
bbMap.put("\\[quote\\](.+?)\\[/quote\\]", "<blockquote>$1</blockquote>");
bbMap.put("\\[p\\](.+?)\\[/p\\]", "<p>$1</p>");
bbMap.put("\\[p=(.+?),(.+?)\\](.+?)\\[/p\\]", "<p style='text-indent:$1px;line-height:$2%;'>$3</p>");
bbMap.put("\\[center\\](.+?)\\[/center\\]", "<div align='center'>$1");
bbMap.put("\\[align=(.+?)\\](.+?)\\[/align\\]", "<div align='$1'>$2");
bbMap.put("\\[color=(.+?)\\](.+?)\\[/color\\]", "<span style='color:$1;'>$2</span>");
bbMap.put("\\[size=(.+?)\\](.+?)\\[/size\\]", "<span style='font-size:$1;'>$2</span>");
bbMap.put("\\[img\\](.+?)\\[/img\\]", "<img src='$1' />");
bbMap.put("\\[img=(.+?),(.+?)\\](.+?)\\[/img\\]", "<img width='$1' height='$2' src='$3' />");
bbMap.put("\\[email\\](.+?)\\[/email\\]", "<a href='mailto:$1'>$1</a>");
bbMap.put("\\[email=(.+?)\\](.+?)\\[/email\\]", "<a href='mailto:$1'>$2</a>");
bbMap.put("\\[url\\](.+?)\\[/url\\]", "<a href='$1'>$1</a>");
bbMap.put("\\[url=(.+?)\\](.+?)\\[/url\\]", "<a href='$1'>$2</a>");
bbMap.put("\\[youtube\\](.+?)\\[/youtube\\]", "<object width='640' height='380'><param name='movie' value='http://www.youtube.com/v/$1'></param><embed src='http://www.youtube.com/v/$1' type='application/x-shockwave-flash' width='640' height='380'></embed></object>");
bbMap.put("\\[video\\](.+?)\\[/video\\]", "<video src='$1' />");
for (Map.Entry entry: bbMap.entrySet()) {
html = html.replaceAll(entry.getKey().toString(), entry.getValue().toString());
}
return html;
}
ところで、javaBBcode はオープンソース プロジェクトの一部です: JavaBB。
より良いオプションはウィキマークアップを使用することだと思います
bbcodeに慣れていて、別の難解なマークアップ形式の学習にそれほど興味がない非技術的なユーザーがいない限り。
私は過去に正規表現を使用してhtmlとbbcodeを切り替えることに成功しました。各タグをカバーする式のリストを定義し、各タグのパターンをプリコンパイルします。次に、各式で文字列を繰り返し変換します。双方向で動作します。パフォーマンスは実際にはかなり良好であり、独自の方言/拡張機能に簡単に適応できます。
欠点は、正規表現が必ずしも簡単に解決できるとは限らないことです。
ウィキ マークアップを使用する方がよいと思います。Mylyn Wikitext パッケージを試すことができます。これは、私が現在ドキュメンテーション システムで大成功を収めているものです。
ただし、これはあなたの問題に対する答えではありません。既に持っているフォーラムのテキストを自動的に解析しようとする場合:-I
BBCode を解析して HTML に変換するためのもう 1 つの Java オプションは、Prime Transformer です。
https://github.com/inversoft/prime-transformer
私たちはこれをいくつかの特定の用途のために構築しましたが、一般的な消費に十分な汎用性を維持しようとしました. GitHub のランディング ページにまとめる方法の基本的な例があります。