github.com/suntong/easygen@v5.3.0+incompatible/cmd/easygen/main.go (about) 1 //////////////////////////////////////////////////////////////////////////// 2 // Porgram: easygen 3 // Purpose: Easy to use universal code/text generator 4 // Authors: Tong Sun (c) 2015-2021, All rights reserved 5 //////////////////////////////////////////////////////////////////////////// 6 7 //////////////////////////////////////////////////////////////////////////// 8 // Program start 9 10 /* 11 12 Command easygen is an easy to use universal code/text generator. 13 14 It can be used as a text or html generator for arbitrary purposes with arbitrary data and templates. 15 16 It can be used as a code generator, or anything that is structurally repetitive. Some command line parameter handling code generator are provided as examples, including the Go's built-in flag package, and the viper & cobra package. 17 18 You can even use easygen as a generic Go template testing tool using the -ts commandline option. 19 20 */ 21 package main 22 23 import ( 24 "flag" 25 "os" 26 "strings" 27 28 "github.com/go-easygen/easygen" 29 "github.com/go-easygen/easygen/egCal" 30 "github.com/go-easygen/easygen/egFilePath" 31 "github.com/go-easygen/easygen/egVar" 32 ) 33 34 //go:generate sh -v easygen.gen.sh 35 36 //////////////////////////////////////////////////////////////////////////// 37 // Constant and data type/structure definitions 38 39 //////////////////////////////////////////////////////////////////////////// 40 // Global variables definitions 41 42 var ( 43 progname = "easygen" 44 version = "5.3.0" 45 date = "2022-07-10" 46 ) 47 48 //////////////////////////////////////////////////////////////////////////// 49 // Main 50 51 func main() { 52 flag.Usage = Usage 53 flag.Parse() 54 55 // One mandatory non-flag arguments 56 if flag.NArg() < 1 { 57 Usage() 58 } 59 60 args := flag.Args() 61 // There is only one command line argument, and is template 62 if len(args) == 1 && len(easygen.Opts.TemplateStr) == 0 { 63 // when template_name is comma-separated list, data_filename must be given 64 if strings.Contains(args[0], ",") { 65 Usage() 66 } 67 // else, dup template_name as data_filename 68 args = append(args, args[0]) 69 } 70 71 tmpl0 := easygen.NewTemplate().Customize() 72 tmpl := tmpl0.Funcs(easygen.FuncDefs()). 73 Funcs(egVar.FuncDefs()).Funcs(egCal.FuncDefs()).Funcs(egFilePath.FuncDefs()) 74 75 var err error 76 if len(easygen.Opts.TemplateStr) > 0 { 77 err = easygen.Process0(tmpl, os.Stdout, easygen.Opts.TemplateStr, args...) 78 } else { 79 err = easygen.Process2(tmpl, os.Stdout, args[0], args[1:]...) 80 } 81 if err != nil { 82 panic(err) 83 } 84 }