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

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

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)