Skip to content

Serendipity und das Markdown-Plugin

Bereits seit dem Relaunch meines Blogs anno 2014 nutze ich - wie schon berichtet - Markdown zur Eingabe meiner Blogbeiträge. Ich entwerfe sie in der Regel in einem externen Editor (MarkdownPad auf meinen Rechnern oder online mit Draft, wenn ich unterwegs bin) und kopiere sie dann in das Backend von Serendipity, getrennt in “Eintrag” und “erweiterter Eintrag”. Dabei nutze ich seit einigen Monaten “Eintrag” nur noch als Teaser, mit der Folge, dass die Beiträge auf der Startseite und bei Suchergebnissen auch nur noch “angeteasert” werden; bringt mehr Übersicht und eine handlichere Startseite, erfordert andererseits aber für jeden Beitrag einen weiteren Klick, um ihn zu lesen, ermöglicht es also nicht ohne weiteres, sich “an einem Stück” durch das Blogarchiv zu lesen.

Sei dem, wie dem sei - mir geht es heute um das Markdown-Plugin für Serendipity namens serendipity_event_markdown. Intern verwendet das Plugin PHP Markdown von Michel Fortin und bietet (aus mir nicht ganz klaren, wohl vor allem historischen Gründen) zwei Varianten (oder, wie es in der Konfiguration heißt: Versionen) des Markdown-Parsers an: einmal ein “klassisches” Plugin “für Wordpress, Smarty, etc.”, das aber durch den Autor seit Februar 2013 nicht mehr unterstützt wird, und die PHP Markdown Lib, die immerhin 2015 zuletzt released wurde. Auch werden zwei “Geschmacksrichtungen” unterstützt: das originale Markdown von John Gruber und eine erweiterte Version, PHP Markdown Extra, von Michael Fortin selbst, die - ähnlich wie MultiMarkdown oder GitHub Flavored Markdown - einige Erweiterungen unterstützt, namentlich Tabellen, Definitionslisten, HTML-IDs und -Klassen und Fußnoten.

Ich habe bisher immer die PHP Markdown Lib verwendet, mich aber darüber gewundert, dass - trotz Aktivierung von Markdown Extra in der Konfiguration - die erweiterten Funktionen nicht richtig umgesetzt wurden. Im Nachgang zum Serendipity-Camp 2017 hatte ich mir vergangene Woche dann einmal den entsprechenden Code des Plugins näher angesehen und den Grund für das Problem gefunden: das “klassische” Plugin stellt, je nach eingebundener Markdown-Geschmacksrichtung, über dieselben Funktionsaufrufe Markdown und Markdown Extra bereit, je nachdem. Die PHP Markdown Lib hingegen bietet zwei verschiedene Funktionsaufrufe; es muss also nicht nur die richtige Library eingebunden werden, es muss zusätzlich auch die Markdown-Extra-Funktion (und nicht die Markdown-Funktion) aufgerufen werden, damit die zusätzlichen Möglichkeiten von Markdown Extra zur Verfügung stehen.

Das habe ich dann im Code entsprechend umgesetzt und zugleich die derzeit aktuellste Version der PHP Markdown Lib in das Plugin eingebunden. Jetzt lassen sich endlich mit einfach Mitteln “Sprungmarken” im Text setzen und Fußnoten verwenden (und Tabellen usw. natürlich auch)!

Die Verwendung von Fußnoten zieht noch zwei weitere Probleme nach sich, die beide darin begründet liegen, dass die Fußnote im Text mit einem Link zum Fußnotentext hinterlegt wird und der Fußnotentext - am Ende des Beitrags eingefügt - dann einen Link zurück zur Fußnoten enthält. Eines der Probleme entsteht, wenn (bspw. auf der Startseite oder in einem Suchergebnis) mehrere Beiträge angezeigt werden, die Fußnoten enthalten. Dann gibt es nämlich mehrere identische Fußnoten (bspw. “1”) und damit auch mehrere identische Sprungmarken (IDs), und ein Klick auf die Fußnoten führt in der Regel zum falschen Fußnotentext, nämlich immer zu dem der ersten Fußnote “1” auf der Seite. Dieses Problem lässt sich lösen, indem die Fußnotenlinks jeweils um die interne Nummer des Beitrags ergänzt werden, zu dem sie gehören. Für die PHP Markdown Lib habe ich das implementiert; das “klassische” Plugin ermöglicht eine solche Funktionalität hingegen nicht (und müsste ggf. gepatcht werden, wenn man es nicht schlicht aus dem Code entfernen will, was m.E. näher liegt).

Das andere Problem ergibt sich aus der Designentscheidung, in Serendipity den “Eintrag” und den “erweiterten Eintrag” als getrennte Textfelder zu realisieren. Das führt dazu, dass auch für Plugins “Eintrag” und “erweiterter Eintrag” getrennte Textelemente sind, und dementsprechend Fußnoten im “Eintrag” an dessen Ende - also vor dem “erweiterten Eintrag” eingefügt werden. Andererseits hat das den Vorteil, dass man nicht das Problem von Wordpress und anderen Blogsystemen hat, die “Eintrag” und “erweiterten Eintrag” einfach durch eine spezielle Markierung wie <!-- more --> voneinander trennen; dann kann es nämlich passieren, dass man die Fußnote sieht, aber den Fußnotentext nicht anspringen kann, da dieser hinter <!-- more --> steht und daher nicht angezeigt wird.

Insgesamt freue ich mich aber, dass Markdown Extra nun auch in Serendipity zuverlässig zur Verfügung steht.1 (Wie soll man auch bloß Texte verfassen können, ohne sie mit Dutzenden, ja Hunderten von Fußnoten zu schmücken?! Einem Juristen muss das schon von Berufs wegen völlig unverständlich sein.)


  1. Jedenfalls, sobald der entsprechende Pull Request akzeptiert wird. :-) 

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

onli am :

onli

Ich glaube, keiner von uns anderen nutzt wirklich Markdown, damit bist du der geeignetste Tester und Maintainer des Plugins. Wobei Markdown eigentlich die beste Wahl für ein Standard-Formatierungsplugin nach der Installation wäre.

Wie auch immer, der PR ist nun gemerged.

Thomas Hochstein am :

Thomas Hochstein

> Wie auch immer, der PR ist nun gemerged.

Danke!

Kommentar schreiben

HTML-Tags werden in ihre Entities umgewandelt.
Markdown-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
Gravatar, Favatar, Pavatar, Twitter, Identica, Identicon/Ycon Autoren-Bilder werden unterstützt.
Formular-Optionen
tweetbackcheck