2009-05-11 7 views
16

Qualcuno ha utilizzato una buona implementazione Java del BBCode? Sto cercando diLibreria Javaode Java

  1. javabbcode: nulla a che vedere
  2. kefir-bb: Annunciato come alpha
  3. BBcode parser nel codice sorgente JBoss.

Ci sono alternative migliori?

+0

Hai trovato qualche parser/librerie di BBCode? – Kdeveloper

+0

@ Kdeveloper: No – Rohit

+1

Ho provato KefirBB ed è molto facile lavorare con e la versione 0.6 corrente non è elencata come beta. – Kdeveloper

risposta

17

La versione corrente di KefirBB 0.6 non è elencato come versione beta più. Trovo il parser KefirBB molto facile da configurare ed estendere con i miei tags:

kefir-bb.sourceforge.net

(Questo è il miglior BBCode parser che ho trovato finora)

ho trovato anche questo codice a fyhao.com, ma non si protegge contro i tag correttamente annidati (quindi non adatto per l'analisi di utente immesso in ingresso):

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 fa parte del progetto opensource: JavaBB.

+2

Sembra che KefirBB sia stato spostato su GitHub https://github.com/kefirfromperm/kefirbb ed è in fase di sviluppo attivo – Kuitsi

3

credo che una scelta migliore è quella di utilizzare marcatori wiki. Puoi provare il pacchetto Mylyn Wikitext che attualmente utilizzo con grande successo per il nostro sistema di documentazione.

Tuttavia, questa non è una risposta al tuo problema, se ciò che si prova è di analizzare un testo forum hai già automaticamente: -I

+0

Il markup Wiki è una buona idea.La mia intenzione era di standardizzare il meccanismo di formattazione del testo nell'applicazione su cui lavoro. Al momento permettiamo all'utente di inserire qualsiasi cosa e quindi di eseguire tutti i metodi di sanitizzazione mediante i tag di whitelist. Consentire solo il markup di BBCode/Wiki sembra essere un'idea migliore per me. – Rohit

3

Credo che una soluzione migliore è quella di utilizzare wiki markup

A meno che non si abbiano utenti non tecnici abituati a bbcode e che non siano terribilmente interessati ad apprendere un altro formato di markup arcano.

ho usato con successo le espressioni regolari in passato per capovolgere tra html e bbcode. Definisci un elenco di espressioni che coprono ciascun tag e precompila i Pattern per ognuno. Quindi trasformare iterativamente la stringa con ciascuna espressione. Funziona in entrambi i modi. Le prestazioni sono piuttosto buone e puoi adattarti facilmente al tuo dialetto/alle tue estensioni.

Unico inconveniente è che regex non sono sempre facili da risolvere.

1

Un'altra opzione Java per BBCode l'analisi e la trasformazione di HTML è Transformer Prime.

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

abbiamo costruito questo per alcuni usi specifici, ma ha cercato di tenerlo sufficientemente generico per il consumo generale. Ho un esempio di base su come metterlo insieme sulla pagina di destinazione su GitHub.

+1

Non sono sicuro del motivo per cui questa risposta è stata annullata perché questa libreria è open source e gestisce un BBCode davvero complesso. –