ich brauche für ein Projekt eine sehr simples Markup, welches dann nach HTML konvertiert wird. Aus diversen Gründen dürfen keine externen Abhängigkeiten da sein, also fält Markdown & Co aus.
Das Markup soll "nur" folgende können:
- Überschriften 1., 2. + 3. Ebene
- unnummerierte Listen, nur eine Ebene (=unverschachtelt)
- Kommentare im Ausgangstext, welche beim Konvertieren nach HTML "überlesen" werden
Code: Alles auswählen
#!/usr/bin/env python
html = []
in_list = False
with open('test.tpl') as f:
for line in f.readlines():
if not line.startswith(' * ') and in_list:
html.append('</ul>')
in_list = False
if line.startswith('#') or len(line.strip()) == 0:
pass
elif line.startswith('==='):
line = line.strip('===')
line = line.strip()
html.append('<h3>{0}</h3>'.format(line))
elif line.startswith('=='):
line = line.strip('==')
line = line.strip()
html.append('<h2>{0}</h2>'.format(line))
elif line.startswith('='):
line = line.strip('=')
line = line.strip()
html.append('<h1>{0}</h1>'.format(line))
elif line.startswith(' * '):
if not in_list:
html.append('<ul>')
in_list = True
line = line.strip(' * ')
line = line.strip()
html.append('<li>{0}</li>'.format(line))
else:
line = line.strip()
html.append('<p>{0}</p>'.format(line))
if in_list:
html.append('</ul>')
output = '\n'.join(html)
print outputCode: Alles auswählen
Hallo Welt
#Kommentar
Abschnitt
=Header 1
== Header 2
Abschnitt 2
=== Header 3
* foo
* bar
* spam
Es wurde nix gefunden.
== falscher header?
nach der LeerzeileFrage: ist das mit den ganzen if / elif bei sowas der richtige Weg? Oder geht das eleganter / besser / robuster / ...
Bin, was diesen "Markup-Parser" (na ja, Pseudo-Parser...) angeht gerade ein wenig ideenlos.
Gruß, noisefloor
