106 lines
3.7 KiB
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)
|
|
}
|
|
}
|