biblioteca Java BBCode [fechado]
Pergunta
Alguém tem usado uma boa implementação Java de BBCode? Estou olhando para
- javabbcode : nada a ver
- kefir-bb : Listado como alfa
- analisador BBcode no código-fonte JBoss.
Existem opções melhores?
Solução
A versão atual do KefirBB 0,6 não é listado como beta mais. I encontrar o analisador KefirBB muito fácil de configurar e estender com as minhas próprias tags:
(Este é o melhor BBCode analisador que eu encontrei até agora)
Eu também encontrei este código em fyhao .com , mas não protegê-lo contra as tags aninhadas incorretamente (portanto, não adequado para a análise input entrou usuário):
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 faz parte do projeto de código aberto:. JavaBB
Outras dicas
Eu acredito que a melhor opção é usar wiki markup. Você pode tentar o pacote Mylyn Wikitext que eu uso atualmente com grande sucesso para o nosso sistema de documentação.
No entanto, isso não é uma resposta para o seu problema, se o que você tentar é para analisar algum texto fórum você já tem automaticamente: -I
Eu acredito que a melhor opção é a utilização wiki markup
A menos que você tem usuários não técnicos que estão acostumados a bbcode e não está muito interessado em aprender outro formato arcano marcação.
Eu tenho usado com sucesso expressões regulares no passado para virar entre html e bbcode. Definir uma lista de expressões que cobrem cada tag, e pré-compilar os padrões para cada um. Em seguida, de forma iterativa transformar a string com cada expressão. Funciona nos dois sentidos. O desempenho é realmente muito bom, e você pode adaptar-se às suas próprias dialeto / extensões facilmente.
Desvantagem é que regex nem sempre são fáceis de trabalhar fora.
Outra opção Java para BBCode analisar e transformando a HTML é Transformer Prime.
https://github.com/inversoft/prime-transformer
Nós construímos isso por alguns usos específicos, mas tentei mantê-lo o suficiente genérico para consumo geral. Eu tenho um exemplo básico de como colocá-lo em conjunto na página de destino no GitHub.