workreport-manager/main.go

106 lines
3.7 KiB
Go

package main
import (
"log"
"os"
"git.dekart811.net/icedream/workreportmgr/export/latex"
"git.dekart811.net/icedream/workreportmgr/project"
"github.com/alecthomas/kingpin"
)
var (
cli = kingpin.New("workreport-manager", "Manage all of your workreports through an easy to read and manage format.")
flagProjectFile = cli.Flag("file", "Defines the project filename from which to parse all workreports.").Short('f').Default("workreports.yml").File()
flagVerbose = cli.Flag("verbose", "Print extra information about what's happening.").Short('v').Bool()
flagLocale = cli.Flag("locale", "The locale to use for exports.").Default("en-US").String()
cmdInit = cli.Command("init", "Creates a new workreports project file.")
cmdAdd = cli.Command("add", "Add new information to the workreport.")
cmdAddActivity = cmdAdd.Command("activity", "Adds a new work activity to the workreport for the current date.")
cmdAddPeriod = cmdAdd.Command("period", "Adds a new school period to the workreport for the current date.")
cmdAddActivityDetails = cmdAdd.Command("details", "Sets the detail information for a work activity for the current date.")
cmdAddActivityDetailsFlagInput = cmdAddActivityDetails.Flag("input", "The file from which to read the information. Defaults to stdin.").Short('i').Default(os.Stdin.Name()).ExistingFile()
cmdExportToLatex = cli.Command("latex", "Exports the current workreport project to Latex.")
cmdExportToLatexFlagOutput = cmdExportToLatex.Flag("output", "The file to write the generated code to. Defaults to stdout.").Short('o').Default(os.Stdout.Name()).String()
cmdExportToLatexFlagInput = cmdExportToLatex.Flag("input", "Use this to write additional \\input statements in the resulting LaTeX file.").Short('i').Strings()
cmdExportToLatexFlagProgram = cmdExportToLatex.Flag("program", "The LaTeX compiler program to use, for example \"lualatex\". Leave empty if you don't know what to put here.").Short('p').String()
version = "master"
currentProject *project.Project
)
func main() {
cli.Version(version)
if *flagVerbose {
log.Printf("%s v%s", cli.Name, version)
}
command := kingpin.MustParse(cli.Parse(os.Args[1:]))
switch command {
case cmdInit.FullCommand():
log.Println("Not yet implemented") // TODO
case cmdAddActivity.FullCommand():
log.Println("Not yet implemented") // TODO
case cmdAddActivityDetails.FullCommand():
log.Println("Not yet implemented") // TODO
case cmdAddPeriod.FullCommand():
log.Println("Not yet implemented") // TODO
case cmdExportToLatex.FullCommand():
parseProject()
if *flagVerbose {
log.Println("Going to export to Latex file...")
}
w, err := os.Create(*cmdExportToLatexFlagOutput)
if err != nil {
log.Print("Failed to create output file.")
os.Exit(1)
}
log.Println("Created output file.")
defer w.Close()
exporter := new(latex.Exporter)
if flagLocale != nil {
exporter.Locale = *flagLocale
}
if cmdExportToLatexFlagInput != nil {
exporter.Inputs = *cmdExportToLatexFlagInput
}
if cmdExportToLatexFlagProgram != nil {
exporter.Marker.Program = *cmdExportToLatexFlagProgram
}
log.Println("Now exporting...")
if err := exporter.Export(currentProject, w); err != nil {
log.Print("Failed to generate LaTeX output:", err)
os.Exit(1)
}
log.Println("Done.")
default:
log.Println("Unknown command.")
}
}
func parseProject() {
var err error
defer func() {
if err != nil {
log.Print("Failed to parse project file:", err)
os.Exit(1)
}
}()
currentProject, err = project.DecodeFromFile(*flagProjectFile)
if *flagVerbose {
log.Println("Parsed project file successfully.")
log.Printf("Resulting project: %+v", currentProject)
}
}