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  }