Moin,
ich bastel gerade einen HTML <-> Markdown Compiler (in beide Richtungen). Dabei bin ich jetzt auf ein Problem von HTML -> Md gestoßen für das mir gerade keine Lösung einfällt. Und zwar zerlege ich die Eingabe in Tokens, Beispiel:
|
Quellcode
|
1
2
|
Hello <e>World</e>!
Hello <e>happy</e> World!
|
Wird zu (kommasepariert, whitespace um strings und Zeilenumbrüche werden entfernt):
|
Quellcode
|
1
2
|
Hello,<,e,>,World,<,/,e,>,!,
Hello,<,e,>,happy,<,/,e,>,World!
|
Wie ihr seht steht hier in der ersten Zeile das ! allein, in der zweiten nicht.
Problem: wie füge ich jetzt entsprechend Leerzeichen ein, so dass dort folgendes herauskommt:
|
Quellcode
|
1
2
|
Hello *World*!
Hello *happy* World!
|
Ich kann weder für <e... noch für </e... einfach ein Leerzeichen einfügen, dann hätte das ! eines welches dort nicht hingehört. Nur für eines der beiden einfügen geht auch nicht, dann würde das "happy" links oder rechts mit am Wort kleben.
Fällt jemanden von euch eine Möglichkeit ein hier richtig zu unterscheiden?
Das ganze Ding gibt es auf
GitHub. Relevant ist vor allem die ParseBlock() Funktion in der
compiler Datei. An den Tokens kann ich auch erkennen ob es sich um ein Element oder um einen string handelt, falls das irgendwie hilft hier (wird für den tokenizer sowieso benötigt). Unter test findet ihr die Dateien mit denen ich teste. Alle Go Dateien mit _test.go am Ende sind Unit Tests.
Ich baue das ganze weil ich nichts finden konnte was beide Richtungen kann, ich Spaß daran habe und weil ich einen modularen Parser brauche (um mit speziellen Elementen erweitern zu können, für die Plattform die ich schon mal im offtopic gezeigt habe).