Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

95 lignes
1.9KB

  1. package main
  2. import (
  3. _ "embed"
  4. "flag"
  5. "fmt"
  6. "log/slog"
  7. "os"
  8. gotemplate "text/template"
  9. "git.wtrh.nl/patterns/gopatterns/pkg/pattern/template"
  10. "gitlab.com/slxh/go/env"
  11. )
  12. //go:embed combined_pdf.tex.template
  13. var texTemplate string
  14. func main() {
  15. var (
  16. templateDir string
  17. outputDir string
  18. help bool
  19. debug bool
  20. )
  21. flag.StringVar(&templateDir, "templates", "templates", "Directory with template files")
  22. flag.StringVar(&outputDir, "out", ".", "output directory")
  23. flag.BoolVar(&help, "help", false, "show help")
  24. flag.BoolVar(&debug, "debug", false, "enable debug mode")
  25. if err := env.ParseWithFlags(); err != nil {
  26. slog.Error("parsing flags failed", "err", err)
  27. return
  28. }
  29. if help {
  30. fmt.Printf(`
  31. Render patterns. Usage
  32. gopatterns [-templates <template-dir>] [-out <output-dir>] input-file
  33. `)
  34. }
  35. args := flag.Args()
  36. if len(args) == 0 {
  37. slog.Error("at least one pattern is required")
  38. }
  39. os.MkdirAll(outputDir, 0o770)
  40. storage, err := template.NewStorage(templateDir)
  41. if err != nil {
  42. slog.Error("failed to open template directory", "err", err, "dir", templateDir)
  43. return
  44. }
  45. files := make([]string, 0)
  46. for _, arg := range args {
  47. pattern, err := template.LoadPattern(arg)
  48. if err != nil {
  49. slog.Error("failed to load pattern", "err", err)
  50. return
  51. }
  52. filenames, err := storage.RenderPatterns(pattern, outputDir, debug)
  53. if err != nil {
  54. slog.Error("error occurred while creating pattern", "pattern", arg, "err", err)
  55. return
  56. }
  57. files = append(files, filenames...)
  58. }
  59. generateLatex(outputDir, files...)
  60. }
  61. func generateLatex(outDir string, filenames ...string) {
  62. open, err := os.OpenFile(outDir+"/combined_pdf.tex", os.O_RDWR+os.O_CREATE+os.O_TRUNC, 0o640)
  63. if err != nil {
  64. panic(err)
  65. }
  66. defer open.Close()
  67. parse, err := gotemplate.New("latex").Parse(texTemplate)
  68. if err != nil {
  69. panic(err)
  70. }
  71. err = parse.Execute(open, filenames)
  72. if err != nil {
  73. panic(err)
  74. }
  75. }