Ich arbeite an einer Funktion, die mir aus etwa folgender Wikisyntax eine Valide, HTML Liste baut.
Die Wikisyntax ist folgende:
Code: Alles auswählen
* Liste ebene 1
* liste ebene 2
* liste ebene 2
* liste ebene 3
* liste ebene 2
* liste ebene 3
* Liste ebene 1
* Liste ebene 4
* Liste ebene 1
* Liste ebene 3
Die Funktion, die das umwandeln soll, sieht so aus:
Code: Alles auswählen
def build_list(txt):
result = []
deep = 1
open_li = []
result.append(('ul/start', '<ul>'))
for item in re.findall("(\s+)\*(.*)", txt):
currentlen = len(item[0])-1
if currentlen > deep:
if result[-1][0] == 'li/close':
open_li.append(('li/close', result.pop()[1]))
for i in range(currentlen - deep):
if not result[-1][0] in ['text', 'li/start']:
result.append(('li/start', '<li>'))
result.append(('ul/start', '<ul>'))
deep = currentlen
elif currentlen < deep:
for i in range(deep - currentlen):
result.append(('ul/close', '</ul>'))
if open_li:
result.append(('li/close', open_li.pop()[1]))
deep = currentlen
result.append(('li/open', '<li>'))
result.append(('text', item[1]))
result.append(('li/close', '</li>'))
deep = currentlen
for i in range(deep):
result.append(('ul/close', '</ul>'))
return '\n'.join([x[1] for x in result])
Ich währe euch sehr verbunden, wenn ihr mir ein wenig helfen könntet, oder mir ein paar Tipps geben könntet, woran es eventuell liegen könnte.
Leider habe ich bisher kaum Ressourcen gefunden, die die erstellung solcher Listen in einem Rutsch durchführt... :'(
Fast alle Markupparser, sei es MoinMoin oder Trac erstellen die Listen über so viele instanzen, das ich da nicht immer hinterher komme
MfG EnTeQuAk