diff --git a/062-spawning-processes/spawning-processes.go b/062-spawning-processes/spawning-processes.go index 44ac4b7..3fe1626 100644 --- a/062-spawning-processes/spawning-processes.go +++ b/062-spawning-processes/spawning-processes.go @@ -16,3 +16,4 @@ func main() { } // todo: full command lines with bash +// todo: piping in stdin diff --git a/tool/generate.go b/tool/generate.go index bbf10e5..b8316eb 100644 --- a/tool/generate.go +++ b/tool/generate.go @@ -1,30 +1,54 @@ +// Generate HTTML document form a Go source file. + package main import ( "os" "os/exec" + "io/ioutil" "fmt" ) +// Just be sure to blow up on non-nil errors. func check(err error) { if err != nil { panic(err) } } -func main() { - var err error +func markdown(path, source string) string { + cmd := exec.Command(path) + in, err := cmd.StdinPipe() + check(err) + out, err := cmd.StdoutPipe() + check(err) + err = cmd.Start() + check(err) + in.Write([]byte(source)) + check(err) + err = in.Close() + check(err) + bytes, err := ioutil.ReadAll(out) + check(err) + err = cmd.Wait() + check(err) + return string(bytes) +} +func main() { // Accept exactly 1 argument - the input filename. if len(os.Args) != 2 { fmt.Fprintln(os.Stderr, "Usage: tool/generate input.go > output.html") os.Exit(1) } - // Ensure that we have `markdown` and `pygmentize` binaries. + // Ensure that we have `markdown` and `pygmentize`, + // binaries, remember their paths. markdownPath, err := exec.LookPath("markdown"); check(err) - pygmentizePath, err := exec.LookPath("pygmentize") - check(err) - fmt.Println(markdownPath, pygmentizePath) + fmt.Print(markdown(markdownPath, "## wat")) + // pygmentizePath, err := exec.LookPath("pygmentize") + // check(err) + + // }