BBcode to Creole Converter
Verfasst: Freitag 31. Dezember 2010, 12:31
Gibt es einen Converter von BBcode nach Creole Syntax? Idealerweise in Python
Tante Google hat mir noch nichts verraten

Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
def bbcode_to_html(s):
s = s.replace('&', '&').replace('<', '<')
# format bold, italic, underline
s = re.sub(r"(?is)\[b\](.*?)\[/b\]", r"<b>\1</b>", s)
s = re.sub(r"(?is)\[i\](.*?)\[/i\]", r"<i>\1</i>", s)
s = re.sub(r"(?is)\[u\](.*?)\[/u\]", r"<u>\1</u>", s)
# ignore center, font, color and size
s = re.sub(r"(?is)\[center\](.*?)\[/center\]", r"\1", s)
s = re.sub(r"(?is)\[font[^\]]*\](.*?)\[/font\]", r"\1", s)
s = re.sub(r"(?is)\[color[^\]]*\](.*?)\[/color\]", r"\1", s)
s = re.sub(r"(?is)\[size[^\]]*\](.*?)\[/size\]", r"\1", s)
# lists
s = re.sub(r"(?is)\[list[^\]]*\](.*?)\[/list\]",
lambda m:"<ul>%s</ul>" % re.sub(r"\[\*\]", r"<li>", m.group(1)), s)
# urls
s = re.sub(r"(?is)\[url\](.*?)\[/url\]", r"<a href='\1'>\1</a>", s)
s = re.sub(r"(?is)\[url\s*=\s*([^\]]*)\](.*?)\[/url\]", r"<a href='\1'>\2</a>", s)
# images
s = re.sub(r"(?is)\[img\](.*?)\[/img\]", r"<img src='\1'>", s)
# code and python
s = re.sub(r"(?is)\[code\s*=\s*([^\]]*)\](.*?)\[/code\]", r"<pre class='\1'>\2</pre>", s)
s = re.sub(r"(?is)\[python\](.*?)\[/python\]", r"<pre class='python'>\1</pre>", s)
return s
Code: Alles auswählen
[b][i]Hallo[/b][/i]
Code: Alles auswählen
<b><i>Hallo</b></i>
Code: Alles auswählen
...
# code
t = []
def extract_code(m):
t.append(m.group(2))
return '<pre class="%s">%s</pre>' % (m.group(1), len(t))
s = re.sub(r"(?is)\[code\s*=\s*([^\]]*)\](.*?)\[/code\]", extract_code, s)
...
return re.sub(r">(\d+)</pre>", lambda m:">%s</pre>" % t[int(m.group(1)) - 1], s)
Code: Alles auswählen
...
# code
s = re.sub(r"(?is)\[code\s*=\s*([^\]]*)\](.*?)\[/code\]",
lambda m:"<pre class='%s'>%s</pre>" % (m.group(1), m.group(2).replace("[", "\1")), s)
...
return s.replace("\1", "[")
Bei Foren kommt of falscher BBCode an. Browser freut sich… besser man fängt das schon beim parsen ab.sma hat geschrieben:2. Garbage in -> Garbage out: Wer falschen BBCode einfüttert, erhält falsches HTML. Der Browser wird's schon richten.
Nein, aber3. Meinen Beitrag kann ich problemlos in meine Funktion einfüttern und der Code-Block wird zu <pre class='python'>...</pre> und die -Tags werden nicht ersetzt, weil sie ja alle noch ein \ enthalten, falls das die Befürchtung war.
Code: Alles auswählen
[code=foo][b]foo[/b]
Code: Alles auswählen
<pre class='foo'><b>foo</b></pre>
Muss nicht, aber sollte. Gibt keinen Grund deswegen seltsames Browserverhalten in Kauf zu nehmen. Du musst auch nicht & immer ersetzten, macht es aber trotzdem einfacher.4. ">" habe ich nicht vergessen, das Zeichen muss nicht ersetzt werden.