Valide HTML Listen erstellen
Verfasst: Sonntag 17. Juni 2007, 15:51
Hallo alle zusammen!
Ich arbeite an einer Funktion, die mir aus etwa folgender Wikisyntax eine Valide, HTML Liste baut.
Die Wikisyntax ist folgende:
Die Einrückung pro Level beträgt immer ein leerzeichen.
Die Funktion, die das umwandeln soll, sieht so aus:
Jedoch bekomme ich das nicht so ganz hin. Die Level anfangs super gerendert, bis zum zweiten "listene ebene 3". Da versagt er.
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
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