syntax highlight via bfchroma

This commit is contained in:
Sebastian Frank 2019-02-18 18:02:35 +01:00
parent 5409a62021
commit 1187291938
Signed by: apairon
GPG Key ID: 7270D06DDA7FE8C3
2 changed files with 18 additions and 131 deletions

130
README.md
View File

@ -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. 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 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.
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 Die öffentliche Website ist mit **mark2web** generiert.
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:

17
main.go
View File

@ -11,6 +11,7 @@ import (
"github.com/imdario/mergo" "github.com/imdario/mergo"
"github.com/Depado/bfchroma"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
"github.com/flosch/pongo2" "github.com/flosch/pongo2"
"github.com/gosimple/slug" "github.com/gosimple/slug"
@ -94,6 +95,10 @@ type PathConfig struct {
OutputExtension *string `yaml:"OutputExtension"` OutputExtension *string `yaml:"OutputExtension"`
} `yaml:"Filename"` } `yaml:"Filename"`
Markdown struct {
SyntaxHighlight *bool `yaml:"SyntaxHighlight"`
} `yaml:"Markdown"`
Data interface{} `yaml:"Data"` Data interface{} `yaml:"Data"`
} }
@ -430,15 +435,21 @@ RewriteRule ^$ %{REQUEST_URI}`+goToFixed+`/ [R,L]
outFile := conf.OutputPath + "/" + outputFilename outFile := conf.OutputPath + "/" + outputFilename
log.Debugf("using '%s' as output file", outFile) log.Debugf("using '%s' as output file", outFile)
//html := blackfriday.Run(input, blackfriday.WithRenderer(bfchroma.NewRenderer())) var option blackfriday.Option
html := blackfriday.Run(input)
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 // use --- for splitting document in markdown parts
regex := regexp.MustCompile("\\r?\\n\\r?---\\r?\\n\\r?") regex := regexp.MustCompile("\\r?\\n\\r?---\\r?\\n\\r?")
inputParts := regex.Split(string(input), -1) inputParts := regex.Split(string(input), -1)
htmlParts := make([]*pongo2.Value, 0) htmlParts := make([]*pongo2.Value, 0)
for _, iPart := range inputParts { 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) log.Debugf("rendering template '%s' for '%s'", *newConfig.Template, outFile)