minimales Markup nach HTML-Konverter
Verfasst: Sonntag 23. Juni 2013, 20:29
Hallo,
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:
Was auch funktioniert, z.B. mit "test.tpl":
Die Eingabedatei hat höchsten ein paar hundert Zeilen.
Frage: 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
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