24.7.2 MarkDown

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

Download