NPM, Markdown Extra i ja

Markdown! Wszędzie Markdown! Pliki readme w repozytoriach Gita używają Markdown. Wiki na Bitbuckecie i Githubie używają Markdown. Stack Overflow używa Markdown. Artykuły na SitePoint są pisane za pomocą Markdown. A Markdown ma wiele odmian, wiele pluginów i wiele implementacji. I wielu z nich brakuje w JavaScripcie.

Markdown! Wszędzie Markdown! Pliki readme w repozytoriach Gita używają Markdown. Wiki na Bitbuckecie i Githubie używają Markdown. Stack Overflow używa Markdown. Artykuły na SitePoint są pisane za pomocą Markdown. A Markdown ma wiele odmian, wiele pluginów i wiele implementacji. I wielu z nich brakuje w JavaScripcie.

No dobra, nie wiem, czy wielu, ale na pewno nie znalazłem tych, które mnie osobiście interesowały: Markdown Extra i SmartyPants. Oba pluginy, autorstwa Michela Fortina, oryginalnie napisane zostały w PHP. Zwłaszcza tego pierwszego dość mocno poszukiwałem w wersji JavaScriptowej, ale ku mojemu rozczarowaniu, jedyne, co dało się znaleźć to dość antyczna i nie do końca działająca biblioteczka oparta na bardzo starej wersji oryginału. Smutek oraz żal, jak śpiewają panowie z Łydki Grubasa.

Poużalałem się, poskarżyłem, aż wreszcie zabrałem się za poszukiwania rozwiązania, które nie wymagałoby własnoręcznego portowania Markdown Extra do JavaScriptu (bo nie dość, że za dużo roboty z tym, to jeszcze za jakiś czas oryginał się zaktualizuje, a moja wersja będzie zapóźniona). W efekcie znalazłem implementację Markdown Extra (oraz całej gromady innych pluginów do „podstawowego” Markdown)… w Pythonie.

Pythona nie znam, ale zainstalowanie narzędzia na szczęście mnie nie przerosło:

sudo apt-get install python-pip
sudo pip install markdown

Dzięki temu narzędziu mogłem sobie spokojnie konwertować pliki .md do .html z poziomu linii komend:

markdown_py input.md -x extra -x smarty > output.html

Łatwe? Łatwe! Tylko jak tego ustrojstwa użyć np. w tasku Grunta? Najpierw musiałbym zrobić z tego moduł npm. Pomyślałem, pokombinowałem… i zabrałem się do roboty. Efektem jest plugin o nazwie mingos-markdown-py. Wymaga on oczywiście zainstalowania pythonowego narzędzia, ale może być używany w kontekście skryptu Node.js.

Weźmy taki szybki przykład. Stwórzmy testowy katalog i napiszmy maleńki skrypcik, który wykorzysta mój moduł:

mkdir mdtest
cd mdtest
npm install mingos-markdown-py
touch mdtest.js
touch mdtest.md

W pliku JS umieśćmy następujący kod:

var md = require("mingos-markdown-py");
md.convert("mdtest.md", function(data) {
    console.log(data);
});

A w pliku .md umieśćmy sobie dowolny kawałek Markdownu. I teraz magia:

nodejs mdtest.js > mdtest.html

W wynikowym pliku HTML znajdziemy, rzecz jasna, wynikowy kod HTML. Teraz zostaje tylko napisanie taska do Grunta… Ale o tym napiszę innym razem.


Napisz komentarz


Szukaj wpisów


Chmura tagów