diff --git a/src/hello-world.go b/src/001-hello-world/hello-world.go similarity index 100% rename from src/hello-world.go rename to src/001-hello-world/hello-world.go diff --git a/src/hello-world.sh b/src/001-hello-world/hello-world.sh similarity index 100% rename from src/hello-world.sh rename to src/001-hello-world/hello-world.sh diff --git a/style/golit.html b/style/golit.html deleted file mode 100644 index 272b587..0000000 --- a/style/golit.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - Page Title - - - -
-
- - - - - - - - - - - - - - - - - - - - - - -

Line Filters

-
///
-  
-
-

Generate literate-programming style HTML -documentation form Go source files.

-
package main
-
-import (
-    "fmt"
-    "io/ioutil"
-    "os"
-    "os/exec"
-    "regexp"
-    "strings"
-)
-  
-
-

Recognize doc lines, extract their comment prefixes.

-
var docsPat = regexp.MustCompile("^\\s*\\/\\/\\s")
-  
-
-

Abort on non-nil errors.

-
func check(err error) {
-    if err != nil {
-        panic(err)
-    }
-}
-  
-
-

For docs and code rendering: pipe source data -through binary at path with given argv, return -the output.

-
func pipedCmd(path string, argv []string, source string) string {
-    cmd := exec.Command(path, argv...)
-    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)
-}
-  
-
-

We'll break the code into {docs, code} pairs, -and then render those text segments before -including them in the HTML doc.

-
type segment struct {
-    docs, code, docsRendered, codeRendered string
-}
-
-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, remember their paths.

-
    markdownPath, err := exec.LookPath("markdown")
-    check(err)
-    pygmentizePath, err := exec.LookPath("pygmentize")
-    check(err)
-  
-
-

Read the source file in, split into lines.

-
    sourceBytes, err := ioutil.ReadFile(os.Args[1])
-    check(err)
-    lines := strings.Split(string(sourceBytes), "\n")
-  
-
-

Group lines into docs/code segments.

-
    segments := []*segment{}
-    segments = append(segments, &segment{code: "", docs: ""})
-    lastLine := ""
-    for _, line := range lines {
-        head := segments[len(segments)-1]  
-
-

Doc line - trim off the comment markers.

-
        if (line == "" && lastLine == "docs") || docsPat.MatchString(line) {
-            trimLine := docsPat.ReplaceAllString(line, "")
-            if !(lastLine == "code" && head.docs != "") {
-                head.docs = head.docs + "\n" + trimLine
-            } else {
-                segments = append(segments, &segment{docs: trimLine, code: ""})
-            }
-            lastLine = "docs"  
-
-

Code line - preserve all whitespace.

-
        } else {
-            if !(lastLine == "docs" && head.code != "") {
-                head.code = head.code + "\n" + line
-            } else {
-                segments = append(segments, &segment{docs: "", code: line})
-            }
-            lastLine = "code"
-        }
-    }
-  
-
-

Render docs via markdown and code via -pygmentize in each segment.

-
    for _, seg := range segments {
-        seg.docsRendered = pipedCmd(markdownPath, []string{}, seg.docs)
-        seg.codeRendered = pipedCmd(pygmentizePath, []string{"-l", "go", "-f", "html"}, seg.code + "  ")
-    }
-  
-
-

Print HTML header.

-
    fmt.Print(`
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-eqiv="content-type" content="text/html;charset=utf-8">
-    <title>Page Title</title>
-    <link rel=stylesheet href="book.css">
-  </head>
-  <body>
-    <div id="container">
-      <div id="background"></div>
-      <table cellspacing="0" cellpadding="0">
-        <thead>
-          <tr><td class=docs></td><td class=code></td></tr>
-        </thead>
-        <tbody>`)
-  
-
-

Print HTML docs/code segments.

-
    for _, seg := range segments {
-        fmt.Printf("<tr><td class=docs>%s</td><td class=code>%s</td></tr>\n", seg.docsRendered, seg.codeRendered)
-    }
-  
-
-

Print HTML footer.

-
    fmt.Print(`
-        </tbody>
-      </table>
-    </div>
-  </body>
-</html>
-`)
-}
-  
-
-
-
- - diff --git a/tool/number.go b/tool/number.go index 6a0d8ff..14a2695 100644 --- a/tool/number.go +++ b/tool/number.go @@ -23,17 +23,15 @@ func main() { // read names of source files sourceNames := make([]string, 0) sourceMap := make(map[string]string) - fileInfos, dirErr := ioutil.ReadDir("./") + fileInfos, dirErr := ioutil.ReadDir("./src") if dirErr != nil { panic(dirErr) } baseTrimmer, _ := regexp.Compile("[0-9x]+-") for _, fi := range fileInfos { baseName := baseTrimmer.ReplaceAllString(fi.Name(), "") - if baseName != ".git" && baseName != ".gitignore" && baseName != "tool" && baseName != "build" && baseName != "style" && baseName != "README.md" { - sourceNames = append(sourceNames, baseName) - sourceMap[baseName] = fi.Name() - } + sourceNames = append(sourceNames, baseName) + sourceMap[baseName] = fi.Name() } // read names from index