github.com/raphaelreyna/latte@v0.11.2-0.20220317193248-98e2fcef4eef/cmd/latte/cli-tool.go (about) 1 package main 2 3 import ( 4 "context" 5 "encoding/json" 6 "flag" 7 "github.com/raphaelreyna/latte/internal/job" 8 "log" 9 "os" 10 "path/filepath" 11 "text/template" 12 ) 13 14 func cli(errLog, infoLog *log.Logger) { 15 t := flag.String("t", "", "path to template/tex file") 16 d := flag.String("d", "", "path to details json file") 17 flag.Parse() 18 p := os.Args[len(os.Args)-1] 19 if *t == "" { 20 errLog.Fatal("no template/tex file provided") 21 } 22 if *d == "" { 23 errLog.Fatal("no details json file provided") 24 } 25 26 switch p { 27 case *t: 28 fallthrough 29 case *d: 30 fallthrough 31 case os.Args[0]: 32 fallthrough 33 case "server": 34 p = "" 35 } 36 37 if p != "" { 38 statInfo, err := os.Stat(p) 39 if err != nil { 40 errLog.Fatalf("error while reading info for %s: %v", p, err) 41 } 42 if !statInfo.IsDir() { 43 p = "" 44 } 45 } 46 47 if filepath.Ext(*t) != ".tex" { 48 errLog.Fatalf("%s must be a valid .tex file", *t) 49 } 50 _, err := os.Stat(*t) 51 if err != nil { 52 errLog.Fatalf("error while reading info for %s: %v", *t, err) 53 } 54 55 if filepath.Ext(*d) != ".json" { 56 errLog.Fatalf("%s must be a valid .json file", *d) 57 } 58 _, err = os.Stat(*d) 59 if err != nil { 60 errLog.Fatalf("error while reading info for %s: %v", *d, err) 61 } 62 63 if p == "" { 64 p, err = os.Getwd() 65 if err != nil { 66 errLog.Fatalf("error while obtaining working directory: %v", err) 67 } 68 } 69 tmpl, err := template.New(filepath.Base(*t)).Delims("#!", "!#").ParseFiles(*t) 70 if err != nil { 71 errLog.Fatalf("error while parsing template %s: %v", *t, err) 72 } 73 74 var dtls map[string]interface{} 75 dFile, err := os.Open(*d) 76 if err != nil { 77 errLog.Fatalf("error while opening details json file %s: %v", *t, err) 78 } 79 err = json.NewDecoder(dFile).Decode(&dtls) 80 if err != nil { 81 errLog.Fatalf("error while decoding json file %s: %v", *t, err) 82 } 83 84 j := job.NewJob(p, nil) 85 j.Template = tmpl 86 j.Details = dtls 87 88 pdfPath, err := j.Compile(context.Background()) 89 if err != nil { 90 errLog.Fatalf("error while compiling pdf: %v", err) 91 } 92 infoLog.Printf("Successfully created PDF at location: %s", filepath.Join(p, pdfPath)) 93 }