|
- package main
-
- import (
- _ "embed"
- "flag"
- "fmt"
- "log/slog"
- "os"
- gotemplate "text/template"
-
- "git.wtrh.nl/patterns/gopatterns/pkg/pattern/template"
- "gitlab.com/slxh/go/env"
- )
-
- //go:embed combined_pdf.tex.template
- var texTemplate string
-
- func main() {
- var (
- templateDir string
- outputDir string
- help bool
- debug bool
- )
-
- flag.StringVar(&templateDir, "templates", "templates", "Directory with template files")
- flag.StringVar(&outputDir, "out", ".", "output directory")
- flag.BoolVar(&help, "help", false, "show help")
- flag.BoolVar(&debug, "debug", false, "enable debug mode")
-
- if err := env.ParseWithFlags(); err != nil {
- slog.Error("parsing flags failed", "err", err)
- return
- }
-
- if help {
- fmt.Printf(`
- Render patterns. Usage
- gopatterns [-templates <template-dir>] [-out <output-dir>] input-file
- `)
- }
-
- args := flag.Args()
- if len(args) == 0 {
- slog.Error("at least one pattern is required")
- }
-
- os.MkdirAll(outputDir, 0o770)
-
- storage, err := template.NewStorage(templateDir)
- if err != nil {
- slog.Error("failed to open template directory", "err", err, "dir", templateDir)
- return
- }
-
- files := make([]string, 0)
-
- for _, arg := range args {
- pattern, err := template.LoadPattern(arg)
- if err != nil {
- slog.Error("failed to load pattern", "err", err)
- return
- }
-
- filenames, err := storage.RenderPatterns(pattern, outputDir, debug)
- if err != nil {
- slog.Error("error occurred while creating pattern", "pattern", arg, "err", err)
- return
- }
-
- files = append(files, filenames...)
- }
-
- generateLatex(outputDir, files...)
- }
-
- func generateLatex(outDir string, filenames ...string) {
- open, err := os.OpenFile(outDir+"/combined_pdf.tex", os.O_RDWR+os.O_CREATE+os.O_TRUNC, 0o640)
- if err != nil {
- panic(err)
- }
-
- defer open.Close()
-
- parse, err := gotemplate.New("latex").Parse(texTemplate)
- if err != nil {
- panic(err)
- }
-
- err = parse.Execute(open, filenames)
- if err != nil {
- panic(err)
- }
- }
|