Jak nie tworzy膰 parsera Markdown w Node.js
Wymy艣li艂em sobie ostatnio nowy projekt - parser markdown w node.Za艂o偶enia by艂y proste - parser mia艂 wczytywa膰 plik tekstowy (proste) i zwraca膰 wynikowy HTML (trudne).
Tekstu nie mo偶na parsowa膰 po prostu linia po linii, bo (przyk艂adowo), w bloku blockquote mo偶e znale藕膰 si臋 dowolny inny znacznik i on te偶 musi by膰 poprawnie sparsowany.
W projekcie wyodr臋bni艂em kilka warstw:
- Tokenizer, dziel膮cy tekst na zagnie偶d偶one podbloki tekstu o takim samym formatowaniu. Jest potrzebny, poniewa偶 Markdown mo偶e zawiera膰 zagnie偶d偶one cytaty czy bloki list.
- TemplateChooser, kt贸ry przyporz膮dkowuje parser do bloku, na podstawie analizy tekstu przez regexy.
- Kilka parser贸w, do parsowania r贸偶nych typ贸w tekstu obj臋tego znacznikami. Przyk艂adowe nazwy, to HeaderParser czy BlockquoteParser. Ka偶dy parser, wykorzystuje odpowiedni regex pobierany z utils.
- Format danych, w kt贸rym s艂ownie opisuje, jaki typ danych zawiera dany block i linia.
- Obs艂ug臋 wej艣cia.