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 }