Die Klasse MarkDown ist als „abstrakte Klasse“ eine reine Basisklasse und definiert eine Schnittstelle. Sie existiert nur, damit Gambas-Programmierer in eigenen Klassen von ihr erben → Kapitel 24.7.1 Projekte (Projekt 2), um ihre spezielle Variante von (Gambas-)Markdown zu schreiben.
So kann man zum Beispiel in der Command()-Methode neue spezielle Kommandos schreiben, die es im Standard-Markdown nicht gibt. Im Gambas-Wiki, das auf gambaswiki.org läuft, sind auch neue Kommandos implementiert worden (in WikiMarkdown.Command()). Die Informations- und Warnungsboxen, die man im Wiki sieht oder die rote „Since 3.x“- Box sind zum Beispiel solche speziellen Kommandos. Das vollständige Projekt befindet sich in den Gambas-Quelltexten unter /app/src/gambas-wiki, wenn Sie Gambas aus den Projekt-Quellen installiert haben. Die Link()-Methode bekommt einen Link vom Typ MarkdownLink (→ Kapitel 27.4.3 MarkDownLink) und konvertiert ihn aus der MarkDown-Syntax in eine korrekte HTML-Pfadangabe. Im Gambas-Beispiel-Projekt 'SmallWiki' wird genau das in einer eigenen Klasse in der Klassen-Datei WikiMarkdown.class umgesetzt:
' Gambas class file Inherits Markdown Public Sub Link(hLink As MarkdownLink) Dim sPath As String If hLink.Link Begins "/" Then sPath = Mid$(hLink.Link, 2) Else If hLink.Link Begins "./" Then sPath = Request.Path &/ Mid$(hLink.Link, 3) Else Return Endif If Not hLink.Text Then If Main.IsImage(sPath) Then hLink.Html = "<img src=\"" & Application.Root &/ sPath & "?show\" />" Return Endif hLink.Text = Main.GetPageTitle(sPath) Endif hLink.Link = Application.Root &/ sPath End ' Link(hLink As MarkdownLink)
Im folgenden Quelltext sehen Sie die Basis-Implementierung der Klasse Markdown:
' Gambas class file Export Create Public Root As String Public Line As Integer Public Current As String Public Sub ToHTML(Markdown As String) As String Return Markup.Convert(Markdown, Me) End Public Sub Link((sLink) As MarkdownLink) ' Link vom Typ MarkDownLink ' NOOP End Public Sub Command((sCommand) As String) As String[] ' NOOP End Public Sub Enter((sClass) As String) As String[] ' NOOP End Public Sub Leave((sClass) As String) As String[] ' NOOP End Public Sub EnableCode(Enabled As Boolean) If Enabled Then Inc Markup.EnableCode Else Dec Markup.EnableCode Endif End Public Sub CheckURL(URL As String, (Markup) As String) As String Return URL End
Artikel