Menü
Developer

GitHub stellt eigene, CommonMark-konforme Markdown-Spezifikation vor

Um unterschiedliche Darstellungen von Markdown-Inhalten einzudämmen, hat GitHub die letzten fünf Jahre an Projekten zur Spezifikation und Implementierung einer eigenen Version gearbeitet.

Von
vorlesen Drucken Kommentare lesen
GitHub stellt eigene, CommonMark-konforme Markdown-Spezifikation vor

GitHubs Engineering-Team hat in einem Blogeintrag seine Spezifikation für GitHub Flavored Markdown, kurz GFM, vorgestellt. Markdown kommt auf der Repository-Verwaltungsplattform zum Erstellen von Nutzerinhalten zum Einsatz, allerdings fehlt eine Standardisierung von Sprachdetails, weshalb das Team vor fünf Jahren mit der Entwicklung des Sundown-Parsers begann, um entsprechenden Schwachstellen zu begegnen. Die nun verfügbare Spezifikation enthält die Syntax des im Prozess entstandenen GitHub Flavored Markdown und einen Anhang mit Details der Referenzimplementierung.

Die Spezifikation nimmt das CommonMark-Projekt zur Grundlage, dessen erklärtes Ziel es ist, eine eindeutige Syntaxspezifikation für Markdown erarbeiten. Allerdings konzentriert sich das Projekt auf eine Untermenge von Markdown, die in der ursprünglichen Perl-Implementierung verankert ist, aber nicht alle Features abbildet, die GitHub benötigt. Die GFM-Spezifikation soll diese Fälle durch Ergänzungen in CommonMark abfangen. Um die richtige Darstellung auf der Website sicherzustellen, gibt es eine neue Backendimplementierung zum Parsen von GFM in GitHub, die die CommonMark-Referenzimplementierung cmark als Grundlage nimmt und vom Team wie die Spezifikation erweitert wurde. Gleichzeitig konnte es Performanceoptimierungen und Sicherheitsfeatures zu cmark beisteuern.

Der Umstieg von Sundown auf das zu CommonMark konforme System stellte sich jedoch schwieriger dar als angenommen, da einige der von CommonMark spezifizierten Ausnahmefälle zu unerwarteten Darstellungen in alten Markdown-Inhalten führen könnten. Zwar seien nur ein Prozent aller Dokumente betroffen, bei der von GitHub verwalteten Menge ist das allerdings immer noch eine Menge, die man nicht vor den Kopf stoßen wollte. Da Sundown eher als Übersetzer angelegt war, wurden deshalb semantische Callbacks genutzt, um das Tool dazu zu bringen, Markdown in CommonMark-konformes Markdown statt in HTML umzuarbeiten und so entsprechende Inhalte für weitere Schritte normalisierien zu können.

CommonMark-Rendering ist jetzt für Markdown-Inhalte in Git-Repositories aktiviert. GitHub will sich auch weiterhin an der CommonMark-Spezifikation orientieren und geht davon aus, GitHub.com bei Freigabe der finalen Version 1.0 der Spezifikation komplett konform zu haben. Verweise auf die GFM- sowie die CommonMark-Spezifikation und eine Reihe unterschiedlicher Implementierungen sind in der Bekanntmachung zu finden. (jul)