praegnanz.de büro für intervernetzte medien

Gerrit, 17.10.2013

Die Großartigkeit von (und das Problem mit) Markdown

Ich mag Markdown. Es ist einer der besten Syntaxen für strukturierten Text, mit Sicherheit jedoch die bekannteste und verbreitetste. Markdown hat sich, anders als seine älteren Geschwister bbCode, Textile und WikiText, in sehr vielen unterschiedlichen Umgebungen breitgemacht, so dass es fast zu einer Art De-facto-Standard geworden ist. Man findet Markdown heute in nativen Schreibprogrammen wie iAWriter, in Webplattformen wie github, sowie natürlich als Plugin in zahllosen Content-Management-System. Es gibt Implementierungen in allen erdenklichen Programmiersprachen, und sogar Duplex-Skripte, die HTML zu Markdown konvertieren. Wow. Ganz schön wahnsinnig, was aus dem kleinen Perl-Skript von John Gruber geworden ist.

Die ultimative Verbreitung ist sicherlich der Einfachheit gedankt. Die offizielle Syntax hat sich seit 2004 nicht mehr verändert. Es existieren einige Erweiterungen da draußen, welche beispielsweise Tabellen realisieren, und besser mit Fußnoten und anderen Spezialitäten umgehen können. Doch dieses sind immer nur Insellösungen und haben es nie in einen »offiziellen« Status geschafft.

In der CMS-Realität da draußen hat es sich von daher eingebürgert, dass man zusätzlich zu Markdown eigene Syntax-Erweiterungen als Textfilter einsetzt. Kunden bzw. Redakteure wollen schließlich Boxen realisieren, Bilder links- oder rechtsbündig platzieren, evtl. sogar Bildgrößen festlegen. Dies alles ist nicht möglich, wenn man sich auf die reine Markdown-Lehre beschränkt, was schade ist. Kurz gesagt: Markdown fehlen in erster Linie HTML-Klassen und Wrapper-Elemente. Und es ist verdammt schade, dass es diese nicht gibt, und es auch nicht danach aussieht, dass sie außerhalb von vereinzelten Implementierungen in einheitlicher Form spezifiziert werden.

Heute habe ich zum ersten Mal die neue Blogging-Software Ghost angetestet und war begeistert von der Markdown-Liveansicht. Insbesondere das Hinzufügen von Bildern per Drag’n’Drop in den Inhaltsbereich hat mich begeistert. Wir schön wäre es, wenn man jetzt noch Klassen auf die einzelnen Elemente vergeben könnte, um die Bilder zu platzieren oder auf eine bestimmte Größe zu bringen! Mit einer Live-Vorschau neben dem Editierfeld hat man eine fantastische Kontrolle über das Resultat, gleichzeitig gibt man nicht die Unverwüstlichkeit des HTML-Codes auf, da dieser ja weiterhin in purem Plaintext-Markdown verfasst ist.

Textile ist einige Monate vor Markdown erschienen und konnte von Beginn an mit Klassen umgehen – sieht aber leider nicht ganz so übersichtlich aus. Ach, es ist schade, dass die Welt nicht perfekt ist!

11 Kommentare

  1. oelauge am 17. Oktober 2013 #

    Ich nutze Pandoc als Schweitzer-Messer, was die Konvertierung von Markdown in etliche Formate betrifft. Auch Pandoc hat Erweiterungen in Petto (Pandoc’s markdown), um die fehlenden Funktionen nachzureichen. Schaue einfach mal in die Doku unter dem Punkt »Header identifiers in HTML, LaTeX, and ConTeXt«, um Klassen etc. zu definieren. Für die direkte Vorschau kann ich Marked empfehlen, eines der besten Programme im Bereich markdown und Co. (der auch Pandoc als externen Prozessor versteht), um sofort das Ergebnis zu zeigen.

  2. Paul am 18. Oktober 2013 #

    Markdown als Sprache ist eben unabhängig von HTML. Daher würden IDs und Klassen keinen Sinn ergeben.

    Da es entsprechende Erweiterungen gibt, sehe ich da kein Problem.

  3. erlehmann am 18. Oktober 2013 #

    Paul, Markdown ist nicht unabhängig von HTML. Es hat keine Syntax-Baum und ist nur eine krude Suche-Ersetze-Operation.

    Gerrit, warum nicht ReStructured Text nutzen? Es sieht so ähnlich aus wie Markdown, aber es existiert eine Spezifikation und es gibt nicht nicht unzählige Forks. <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html>

  4. Anatol Broder am 19. Oktober 2013 #

    Das Problem von Markdown ist so alt wie die Welt: Das Gute ist der Feind des Besten. Markdown schlägt sich gut bei Kommentaren und einfach strukturierten Texten. Damit ist es für die Mehrzahl der Schreiber vollkommen ausreichend.

    Durch die Verwendung von unterschiedlichen Symbolen für dieselben Auszeichnungen hat John Gruber die Erweiterbarkeit von Markdown von Beginn an eingeschränkt. Denn die in Frage kommenden Sonderzeichen sind leider knapp. Aber vielleicht war gerade diese großzügige Auslegung für Markdowns Erfolg mitverantwortlich.

    Ich träume von einer Formatierungssprache, bei der ich selbst festlegen kann, welche Sonderzeichen für welche Auszeichnungen verwendet werden. Falls es so etwas bereits gibt, bitte ich um Hinweise.

  5. David Siller am 25. Oktober 2013 #

    Bezüglich dem Hinzufügen von Bildern / Klassen wie bei Ghost: Vielleicht ist Sir Trevor was Passendes. Steht unter der MIT Lizenz, arbeitet mit Markdown, ermöglicht das Hinzufügen von »Blocks« verschiedener Art, etwa für ein Bild, ein Video, einen Tweet, einen selbsterstellten Block, …
    Konnte es mir noch nicht ansehen, sieht aber auf jeden Fall interessant aus.

    Bezüglich Markdown liebe ich v.a., dass auch das reine Textfile immer noch lesbar und strukturiert aussieht. Dass man dies dann in zig andere Formate konvertieren kann (ich nehme auch das schon erwähnte Pandoc dafür) ist ein zusätzlicher Pluspunkt.
    Störend für mich ist die fehlende Spezifikation und die dadurch verursachte Fragmentierung. Um die für mich fehlenden Elemente wie z.B. Tabellen oder Fußnoten dennoch umsetzen zu können, verwende ich dann doch meist Pandoc. Ist ganz einfach besser und nicht Abandonware.

  6. Niels Heidenreich am 31. Oktober 2013 #

    Ich bin auch ein glühender Markdown-Fan. Habe mir die üblichen Alternativen wie Textile, ReStructured Text etc. angesehen, und Markdown ist die eleganteste und lesbarste Lösung, mit Abstand. Gruber ist halt der einzige, der verstanden hat, dass ein vereinfachstes Markup am besten wie ganz normaler Plaintext aussehen sollte, und man einfach die üblichen (Schreibmaschinen)-Auszeichnungsmöglichkeiten von Plaintext in passendes, semantisches HTML übersetzt.

    Das Problem der fehlenden Spezifizierungsmöglichkeit habe ich dadurch gelöst, dass ich für alle »non-standard«-Contentmodule (z.B. Bilder mit spezieller Ausrichtung, etc., also alles, was man direkt mit Markdown nicht anlegen kann) Sonder-Codes erfunden habe, z.B. so:

    [BildZentriertMitLegende:pfadzumbild.jpg:Dies ist die Unterschrift]

    Der Markdown-Converter wandelt so etwas in einen regulären Absatz um. Nach dem Markdown-Processing schicke ich das generierte HTML durch einen Postprozessor, der einfach ein paar Regex-Ersetzungen vornimmt und die Sonderblöcke durch das gewünschte HTML ersetzt. Dabei gibt es beliebige Möglichkeiten, dem Block bestimmte Parameter zu übergeben, z.B. besondere Stylingklassen, URLs etc.

    Der Postprozessor braucht nur wenige Zeilen PHP. Optimal elegant ist das nicht, da man hierfür im Back-End herumpfuschen muss, und man idealerweise eine Möglichkeit bräuchte, die Syntax für die Sonderblöcke und deren Ersetzungen zu definieren, ohne den Code anfassen zu müssen.

    Ich habe mich nach Abwägen der Alternativen trotzdem dafür entschieden, und es funktioniert recht gut. Man kann weiterhin mit »sauberem« Markdown arbeiten und kann trotzdem vordefinierte Contentblöcke einsetzen, ohne HTML ins Markdown schreiben zu müssen.

    Ich habe sowas in Custom-Back-Ends eingesetzt und komme damit gut klar; für WordPress z.B. müsste man ein Plug-In schreiben, was aber auch nicht allzu aufwendig sein kann.

  7. Niels Heidenreich am 31. Oktober 2013 #

    Sir Trevor (vorletzter Kommentar) nutzt dasselbe Prinzip, aber, wenn ich es richtig verstehe, findet die Ersetzung erst auf dem Client via JavaScript statt.

    Das hat zumindest den einen Nachteil, dass Suchmaschinenbots nur das vom Server gesendete Markup zu sehen bekommen, in dem die Ersetzung noch nicht geschehen ist. Versucht man, maximal barrierefrei zu sein und auch auf Clients zugänglich zu sein, die kein JS unterstützen, funktioniert diese Lösung auch nicht.

  8. Niels Heidenreich am 31. Oktober 2013 #

    Zu http://praegnanz.de/weblog/markdown#c022800 — Tabellen und Fußnoten: PHPMarkdownExtra erweitert Markdown um genau diese beiden Funktionen (und noch ein paar kleinere Details). Die Syntax für diese Erweiterungen behält die Einfachheit und das Prinzip von Markdown bei, dass der Quelltext auch als Plaintext schon vollständig verständlich ist.

    http://michelf.ca/projects/php-markdown/extra/

    Nachteil ist halt, dass es eine reine PHP-Lösung ist und eben auch nur eine Erweiterung, für die es nirgendwo einen Spec oder Standard gibt.

  9. Jens am 6. November 2013 #

    Sollte es nicht heißen »Die Großartigkeit…« oder ist mir da eine Anspielung entgangen?

  10. David Siller am 30. Dezember 2013 #

    Zwei weitere (ungetestete) Alternativen, in dem Fall nur für WordPress:
    Gust: Admin-Panel + Markdown-Editor wie bei Ghost
    SplitDown: Ebenfalls ein Markdown-Editor à la Ghost

Kommentar schreiben

Nutzt Textile zum Strukturieren eures Textes.
SEO-Beiträge werden gelöscht, auch bei thematisch passendem Spam.