Подтвердить что ты не робот

Библиотека Java BBCode

Кто-нибудь использовал хорошую реализацию Java BBCode? Я смотрю

  • javabbcode: ничего не видеть
  • kefir-bb: список альфа
  • BBcode парсер в исходном коде JBoss.

Есть ли лучшие варианты?

4b9b3361

Ответ 1

Текущая версия KefirBB 0.6 больше не отображается как бета-версия. Я считаю, что парсер KefirBB очень легко настраивается и расширяется с помощью моих собственных тегов:

kefir-bb.sourceforge.net

(Это лучший 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;
    }

BTW javaBBcode является частью проекта openource: JavaBB.

Ответ 2

Я считаю, что лучше использовать wiki-разметку. Вы можете попробовать пакет Mylyn Wikitext, который в настоящее время я использую с большим успехом для нашей системы документации.

Однако это не ответ на вашу проблему, если вы пытаетесь разобрать какой-либо текст форума, который у вас уже есть: -I

Ответ 3

Я считаю, что лучший вариант - использовать Разметка wiki

Если у вас есть нетехнические пользователи, которые привыкли к bbcode и не очень заинтересованы в изучении еще одного формата тайной разметки.

Я успешно использовал регулярные выражения в прошлом, чтобы перевернуть между html и bbcode. Определите список выражений, которые охватывают каждый тег, и предварительно скомпилируйте шаблоны для каждого из них. Затем итеративно преобразуйте строку в каждое выражение. Работает в обоих направлениях. Производительность на самом деле очень хорошая, и вы можете легко адаптироваться к своему диалекту/расширению.

Даунсайд - это то, что регулярное выражение не всегда легко выработать.

Ответ 4

Другой вариант Java для синтаксического анализа и преобразования BBCode в HTML - это Prime Transformer.

https://github.com/inversoft/prime-transformer

Мы построили это для некоторых конкретных применений, но попытались сохранить его достаточно общим для общего потребления. У меня есть базовый пример того, как собрать его на целевой странице GitHub.