From 1187291938e1bc21ac5ac0057185d5c65301b7f0 Mon Sep 17 00:00:00 2001 From: Sebastian Frank Date: Mon, 18 Feb 2019 18:02:35 +0100 Subject: [PATCH] syntax highlight via bfchroma --- README.md | 132 ++---------------------------------------------------- main.go | 17 +++++-- 2 files changed, 18 insertions(+), 131 deletions(-) diff --git a/README.md b/README.md index a92f5bd..9e67522 100644 --- a/README.md +++ b/README.md @@ -4,132 +4,8 @@ mark2web ist ein Website-Generator, der als Eingabe Markdown-Dateien, Templates Die vorgesehene Arbeitsweise ist die Pflege der Inhalte über eine Versionsverwaltung (z.B. git) und anschließende CI/CD-Pipeline, welche den Generator aufruft und die fertige Website publiziert. -## Verzeichnisstruktur der Quellen +## Dokumentation -```plain -DIR content - FIL config.yml (Pfad-Konfiguration) - DIR de (Sprache) - DIR main (Navigationsbaum) - DIR 01_Home (1. Ebene) - FIL config.yml - FIL README.md - DIR 02_Download - FIL README.md - FIL bild.jpg - FIL presse.zip - DIR 03_Kontakt - FIL README.md - DIR 01_Adresse - FIL README.md - DIR 02_Anfahrt - FIL README.md - DIR 04_Impressum - FIL README.md - service - DIR 01_Datenschutz - FIL README.md - DIR 02_AGB - FIL README.md - DIR 03_Impressum - FIL README.md - -DIR assets - DIR js - DIR img - DIR css - -DIR templates - FIL home.html - FIL site.html - DIR partials - FIL meta.html - FIL header.html - FIL footer.html - -FIL config.yml (globale Konfiguration, enthält andere Anweisungen als individuelle Pfad-Konfig, siehe Beispiel) -``` - -### `content` - -- enthält die Markdown-Dateien und Konfigurationen für die Navigationsstruktur und Einzelseiten -- voranestellte Nummer mit Unterstrich wie z.B. `01_` dienen nur der Sortierung und gehen nicht in den eigentlichen Navigationspfad mit ein -- zur Bildung des Navigationspfades werden die Verzeichnisnamen in Kleinschreibung konvertiert -- Navigationsnamen für die Website werden aus dem Pfad gebildet, wobei `_`(Unterstriche) in Leerzeichen umgewandelt werden -- Navigationsnamen können durch die `config.yml` überschrieben werden - -### Medien und Downloads - -- Mediendateien werden neben den Inhalten in `content` abgelegt und müssen dementsprechend relativ verlinkt werden - -### `assets` - -- Bilder/CSS/JS die im Templates benötigt werden liegen in `assets` - -### `templates` - -- Template-Dateien für die Generierung der Website liegen hier -- Handlebar-Partials liegen in `templates/partials` und werden von mark2web global eingelesen und in Templates unter dem Dateinamen zur Verfügung gestellt - -## Einzelseiten - -Jede Seite ist innerhalb der Ordnerstruktur (Navigation) standardmäßig als `README.md` gespeichert. Die Datei ist eine normale Markdown-Datei mit einem optionalen Header: - -```markdown ---- -Meta: - Title: Seitentitel für die Meta-Angaben - Keywords: Meta-Keywords - Description: Meta-Description - -Data: # Vererbung spielt hier keine Rolle, da Markdown-Datei letzte Ebene in der Generierung ist - image: bild.jpg - ---- - -# Seitentitel - -Seiteninhalt, lorem ipsum... - -## Überschrift 2 - -Weiterer Absatz, usw... -``` - -## zusätzliche Konfiguration - -In jedem Ordner kann sich eine `config.yml` befinden. - -- z.B. Verküpfung eines Eintrags eines Navigations-Baums zu einem anderen - -```yml -This: - GoTo: /de/main/service/impressum - Navname: Impressum - - Data: # wird nicht vererbt: {{ NavSlice.[0].This.Data.slogan }} - slogan: Rechtliches und mehr - -Data: # wird an alle Unterpunkte vererbt: {{ NavSlice.[0].Data.slogan }} - image: imprint.png -``` - -- außerdem kann sich im Header der Markdown-Datei die Konfig im YAML-Format befinden -- die Konfig in der Markdown-Datei überschreibt die Konfig aus der config.yml - -## Haupt-Konfiguration im `content`-Verzeichnis - -```yml -Meta: - Title: meine Website - Description: Standard-Meta-Beschreibung, die verwendet wird, wenn keine pro Seite definiert ist - Keywords: Standard-Keywords, welche in den einzelnen Seiten überschrieben werden kann -``` - -## Templates - -Die Template-Sprache ist Handlebars. - -### Helper - -Weitere Handlebars-Helper sind: \ No newline at end of file +Die Dokumentation ist auf der [mark2web-Website](https://www.mark2web.de/) zu finden. Außerdem ist die Dokumentation im Verzeichnis `website/content` dieses Repositories, da dies das Ausgangsmaterial der Projekt-Website ist. + +Die öffentliche Website ist mit **mark2web** generiert. \ No newline at end of file diff --git a/main.go b/main.go index 2a12545..80ea7ba 100644 --- a/main.go +++ b/main.go @@ -11,6 +11,7 @@ import ( "github.com/imdario/mergo" + "github.com/Depado/bfchroma" "github.com/davecgh/go-spew/spew" "github.com/flosch/pongo2" "github.com/gosimple/slug" @@ -94,6 +95,10 @@ type PathConfig struct { OutputExtension *string `yaml:"OutputExtension"` } `yaml:"Filename"` + Markdown struct { + SyntaxHighlight *bool `yaml:"SyntaxHighlight"` + } `yaml:"Markdown"` + Data interface{} `yaml:"Data"` } @@ -430,15 +435,21 @@ RewriteRule ^$ %{REQUEST_URI}`+goToFixed+`/ [R,L] outFile := conf.OutputPath + "/" + outputFilename log.Debugf("using '%s' as output file", outFile) - //html := blackfriday.Run(input, blackfriday.WithRenderer(bfchroma.NewRenderer())) - html := blackfriday.Run(input) + var option blackfriday.Option + + synH := conf.Config.Markdown.SyntaxHighlight + if synH != nil && *synH { + option = blackfriday.WithRenderer(bfchroma.NewRenderer()) + } + + html := blackfriday.Run(input, option) // use --- for splitting document in markdown parts regex := regexp.MustCompile("\\r?\\n\\r?---\\r?\\n\\r?") inputParts := regex.Split(string(input), -1) htmlParts := make([]*pongo2.Value, 0) for _, iPart := range inputParts { - htmlParts = append(htmlParts, pongo2.AsSafeValue(string(blackfriday.Run([]byte(iPart))))) + htmlParts = append(htmlParts, pongo2.AsSafeValue(string(blackfriday.Run([]byte(iPart), option)))) } log.Debugf("rendering template '%s' for '%s'", *newConfig.Template, outFile)