Вопрос

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

  1. javabbкод :ничего не вижу
  2. кефир-бб :В списке альфа
  3. Парсер BB-кода в исходном коде JBoss.

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

Это было полезно?

Решение

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

кефир-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;
    }

Кстати, javaBBcode является частью проекта с открытым исходным кодом: JavaBB.

Другие советы

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

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

Я считаю, что лучшим вариантом является использование наценки вики

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

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

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

Еще один вариант Java для анализа и преобразования BBCode в HTML — Prime Transformer.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top