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  }