// renderTemplate read template and render to file func renderTemplate(doc *Document) { projectDir := env.Get().GetS("GOPATH") templateFile := path.Join( projectDir, "src/github.com/essentialkaos/shdoc/templates", arg.GetS(ARG_TEMPLATE)+".tpl", ) if !fsutil.CheckPerms("FRS", templateFile) { printError("Can't read template %s - file is not exist or empty", templateFile) os.Exit(1) } outputFile := arg.GetS(ARG_OUTPUT) if fsutil.IsExist(outputFile) { os.Remove(outputFile) } fd, err := os.OpenFile(outputFile, os.O_CREATE|os.O_WRONLY, 0644) if err != nil { printError(err.Error()) os.Exit(1) } defer fd.Close() tpl, err := ioutil.ReadFile(templateFile) if err != nil { printError(err.Error()) os.Exit(1) } t := template.New("Template") t, err = t.Parse(string(tpl[:])) err = t.Execute(fd, doc) if err != nil { printError(err.Error()) os.Exit(1) } fmtutil.Separator(false, doc.Title) fmtc.Printf(" {*}Constants:{!} %d\n", len(doc.Constants)) fmtc.Printf(" {*}Variables:{!} %d\n", len(doc.Variables)) fmtc.Printf(" {*}Methods:{!} %d\n", len(doc.Methods)) fmtc.NewLine() fmtc.Printf( " {*}Output:{!} %s {s-}(%s){!}\n", outputFile, fmtutil.PrettySize(fsutil.GetSize(outputFile)), ) fmtutil.Separator(false) }
func process(file string, pattern string) { if !fsutil.IsExist(file) { printError("File %s is not exist", file) os.Exit(1) } if !fsutil.IsReadable(file) { printError("File %s is not readable", file) os.Exit(1) } if !fsutil.IsNonEmpty(file) { printError("File %s is empty", file) os.Exit(1) } doc, errs := Parse(file) if len(errs) != 0 { printError("Shell script docs parsing errors:") for _, err := range errs { printError(" %s", err.Error()) } os.Exit(1) } if !doc.IsValid() { printWarn("File %s doesn't contains documentation", file) os.Exit(2) } if arg.GetS(ARG_NAME) != "" { doc.Title = arg.GetS(ARG_NAME) } if arg.GetS(ARG_OUTPUT) == "" { if pattern == "" { simpleRender(doc) } else { findInfo(doc, pattern) } } else { renderTemplate(doc) } }
// process starting request processing func process(args []string) { var ( ok bool err error hosts []string ) api, err = sslscan.NewAPI("SSLCli", VER) if err != nil { if !arg.GetB(ARG_FORMAT) { fmtc.Printf("{r}%v{!}\n", err) } os.Exit(1) } // By default all fine ok = true hosts = args if fsutil.CheckPerms("FR", hosts[0]) { hosts, err = readHostList(hosts[0]) if err != nil && arg.GetB(ARG_FORMAT) { fmtc.Printf("{r}%v{!}\n", err) os.Exit(1) } } var ( grade string checksInfo []*HostCheckInfo checkInfo *HostCheckInfo ) for _, host := range hosts { switch { case arg.GetB(ARG_QUIET): grade, _ = quietCheck(host) case arg.GetB(ARG_FORMAT): grade, checkInfo = quietCheck(host) checksInfo = append(checksInfo, checkInfo) default: grade = check(host) } switch { case arg.GetB(ARG_PERFECT) && grade != "A+": ok = false case grade[:1] != "A": ok = false } } if arg.GetB(ARG_FORMAT) { switch arg.GetS(ARG_FORMAT) { case FORMAT_TEXT: encodeAsText(checksInfo) case FORMAT_JSON: encodeAsJSON(checksInfo) case FORMAT_XML: encodeAsXML(checksInfo) case FORMAT_YAML: encodeAsYAML(checksInfo) default: os.Exit(1) } } if arg.GetB(ARG_NOTIFY) { fmtc.Bell() } if !ok { os.Exit(1) } }