Files
mark2web/cmd/mark2web/main.go
Sebastian Frank d652afd633
Some checks failed
continuous-integration/drone/push Build is failing
multithreaded image processing
2019-03-19 12:46:32 +01:00

134 lines
3.8 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"path"
"gitbase.de/apairon/mark2web/pkg/filter"
"gitbase.de/apairon/mark2web/pkg/helper"
"gitbase.de/apairon/mark2web/pkg/mark2web"
)
var (
// Version is the app's version string
Version = "UNKNOWN"
// GitHash is the current git hash for this version
GitHash = "UNKNOWN"
// BuildTime is the time of build of this app
BuildTime = "UNKNOWN"
)
func main() {
inDir := flag.String("in", "./", "input directory")
outDir := flag.String("out", "html", "output directory")
createOutDir := flag.Bool("create", false, "create output directory if not existing")
//clearOutDir := flag.Bool("clear", false, "clear output directory before generating website")
logLevel := flag.String("logLevel", "info", "log level: debug, info, warning, error")
version := flag.Bool("version", false, "print version of this executable")
flag.Parse()
if version != nil && *version {
fmt.Printf(`%11s: %s
%11s: %s
%11s: %s
`, "version", Version, "git hash", GitHash, "build time", BuildTime)
os.Exit(0)
}
level := "info"
if logLevel != nil {
level = *logLevel
}
helper.ConfigureLogger(level)
if inDir == nil || *inDir == "" {
helper.Log.Panic("input directory not specified")
}
iDir := path.Clean(*inDir)
inDir = &iDir
helper.Log.Infof("input directory: %s", *inDir)
if outDir == nil || *outDir == "" {
helper.Log.Panic("output directory not specified")
}
oDir := path.Clean(*outDir)
outDir = &oDir
helper.Log.Infof("output directory: %s", *outDir)
if createOutDir != nil && *createOutDir {
if _, err := os.Stat(*outDir); os.IsNotExist(err) {
helper.Log.Debugf("output directory '%s' does not exist", *outDir)
helper.Log.Debugf("trying to create output directory: %s", *outDir)
err := os.MkdirAll(*outDir, 0755)
if err != nil {
helper.Log.Panic(err)
}
helper.Log.Noticef("created output directory: %s", *outDir)
} else {
helper.Log.Noticef("output directory '%s' already exists", *outDir)
}
}
if fD, err := os.Stat(*outDir); os.IsNotExist(err) {
helper.Log.Panicf("output directory '%s' does not exist, try -create parameter or create manually", *outDir)
} else {
if fD == nil {
helper.Log.Panicf("something went wrong, could not get file handle for output dir %s", *outDir)
} else if !fD.IsDir() {
helper.Log.Panicf("output directory '%s' is not a directory", *outDir)
}
}
helper.Log.Debug("reading global config...")
configFilename := *inDir + "/config.yml"
err := mark2web.Config.ReadFromFile(configFilename)
if err != nil {
helper.Log.Panicf("could not read file '%s': %s", configFilename, err)
}
mark2web.Config.Directories.Input = *inDir
mark2web.Config.Directories.Output = *outDir
helper.Log.Debugf("reading input directory %s", *inDir)
defaultTemplate := "base.html"
defaultInputFile := "README.md"
defaultOutputFile := "index.html"
defaultPathStrip := "^[0-9]*_(.*)"
defaultPathIgnoreForNav := "^_"
defaultFilenameStrip := "(.*).md$"
defaultFilenameIgnore := "^_"
defaultFilenameOutputExtension := "html"
defaultPathConfig := new(mark2web.PathConfig)
defaultPathConfig.Template = &defaultTemplate
defaultPathConfig.Index = &mark2web.IndexConfig{
InputFile: &defaultInputFile,
OutputFile: &defaultOutputFile,
}
defaultPathConfig.Path = &mark2web.DirnameConfig{
Strip: &defaultPathStrip,
IgnoreForNav: &defaultPathIgnoreForNav,
}
defaultPathConfig.Filename = &mark2web.FilenameConfig{
Strip: &defaultFilenameStrip,
Ignore: &defaultFilenameIgnore,
OutputExtension: &defaultFilenameOutputExtension,
}
defaultPathConfig.Imaging = &mark2web.ImagingConfig{
Width: 1920,
Height: 1920,
Process: "fit",
Quality: 75,
}
filtersDir := *inDir + "/templates/filters"
if _, err := os.Stat(filtersDir); !os.IsNotExist(err) {
filter.RegisterFilters(filtersDir)
}
mark2web.Run(*inDir, *outDir, defaultPathConfig)
}