github.com/jcarley/cli@v0.0.0-20180201210820-966d90434c30/docs/generate.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  	"strings"
     8  
     9  	"github.com/daticahealth/cli/datica"
    10  	"github.com/daticahealth/cli/models"
    11  	"github.com/jault3/mow.cli"
    12  )
    13  
    14  const binaryName = "datica"
    15  
    16  func main() {
    17  	app := cli.App(binaryName, "")
    18  	settings := &models.Settings{}
    19  	datica.InitLogrus()
    20  	datica.InitGlobalOpts(app, settings)
    21  	datica.InitCLI(app, settings)
    22  
    23  	intro, err := os.OpenFile("intro.html", os.O_RDONLY, 0644)
    24  	if err != nil {
    25  		panic(err)
    26  	}
    27  	defer intro.Close()
    28  	output, err := os.OpenFile("cli-docs.html", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
    29  	if err != nil {
    30  		panic(err)
    31  	}
    32  	output.WriteString("<div class=\"cli-docs\" id=\"cli-docs\">\n")
    33  	defer output.Close()
    34  	_, err = io.Copy(output, intro)
    35  	if err != nil {
    36  		panic(err)
    37  	}
    38  
    39  	app.Cmd.DoInit()
    40  	if _, err = output.WriteString("\n<h1>Overview</h1>\n\n"); err != nil {
    41  		panic(err)
    42  	}
    43  	output.Write([]byte("<pre>\n"))
    44  	app.Cmd.PrintLongHelpTo(false, output)
    45  	output.Write([]byte("\n</pre>\n\n"))
    46  	for _, subCmd := range app.Cmd.Commands {
    47  		if err := generateCommandDocs(subCmd, 2, output); err != nil {
    48  			panic(err)
    49  		}
    50  	}
    51  	output.WriteString("</div>")
    52  }
    53  
    54  func generateCommandDocs(cmd *cli.Cmd, tagLevel int, writer io.Writer) error {
    55  	cmd.DoInit()
    56  	title := cmd.Name
    57  	if len(title) > 1 {
    58  		title = strings.ToUpper(title[:1]) + title[1:]
    59  	}
    60  	writer.Write([]byte(fmt.Sprintf("<h%[1]d>%[2]s</h%[1]d>\n\n", tagLevel, title)))
    61  	if len(cmd.Commands) == 0 || cmd.LongDesc == "" { // shortcut to print out the Overview section
    62  		writer.Write([]byte("<pre>\n"))
    63  		cmd.PrintLongHelpTo(false, writer)
    64  		writer.Write([]byte("\n</pre>\n\n"))
    65  	}
    66  	writer.Write([]byte(cmd.LongDesc))
    67  	writer.Write([]byte("\n\n"))
    68  	for _, subCmd := range cmd.Commands {
    69  		if err := generateCommandDocs(subCmd, tagLevel+1, writer); err != nil {
    70  			return err
    71  		}
    72  	}
    73  	return nil
    74  }