syntax highlight via bfchroma
This commit is contained in:
parent
5409a62021
commit
1187291938
132
README.md
132
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.
|
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
17
main.go
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user