java parsing bbcode

Biblioteca BBCode de Java



parsing (4)

¿Alguien ha usado una buena implementación Java de BBCode? estoy mirando a

  1. javabbcode : nada que ver
  2. kefir-bb : listado como alfa
  3. Analizador de BBcode en el código fuente de JBoss.

¿Hay mejores opciones?


Creo que una mejor opción es usar el marcado wiki. Puede probar el paquete Myly Wikitext que actualmente uso con gran éxito para nuestro sistema de Documentación.

Sin embargo, esta no es una respuesta a su problema, si lo que intenta es analizar el texto del foro que ya tiene automáticamente: -I


Creo que una mejor opción es usar el marcado wiki

A menos que tenga usuarios no técnicos que estén acostumbrados a bbcode y no estén muy interesados ​​en aprender otro formato de marcado arcano.

He utilizado con éxito expresiones regulares en el pasado para cambiar entre html y bbcode. Defina una lista de expresiones que cubran cada etiqueta y precompile los patrones para cada una. Luego transforma iterativamente la cadena con cada expresión. Funciona en ambos sentidos. El rendimiento es bastante bueno, y puedes adaptarte a tu propio dialecto / extensiones fácilmente.

Lo malo es que las expresiones regulares no siempre son fáciles de resolver.


La versión actual de KefirBB 0.6 ya no aparece como beta. Encuentro que el analizador KefirBB es muy fácil de configurar y extender con mis propias etiquetas:

kefir-bb.sourceforge.net

(Este es el mejor analizador de BBCode que he encontrado hasta ahora)

También encontré este código en fyhao.com , pero lo protege contra etiquetas anidadas incorrectamente (por lo tanto, no es adecuado para analizar entradas ingresadas por el usuario):

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 es parte del proyecto de código abierto: JavaBB .


Otra opción de Java para el análisis y transformación de BBCode a HTML es Prime Transformer.

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

Construimos esto para algunos usos específicos, pero tratamos de mantenerlo lo suficientemente genérico para el consumo general. Tengo un ejemplo básico de cómo armarlo en la página de inicio en GitHub.