diff --git a/.gitignore b/.gitignore index d858ecc..e58e6db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ build tool/generate +tool/number + diff --git a/README.md b/README.md index 2d3200b..84e45dc 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,8 @@ $ tool/gofmt ``` -### Generating +### Building ```console -$ cd tool -$ go build generate.go -$ cd .. -$ tool/generate src/063-line-filters/line-filters.go 'Line Filters' > build/line-filters.html -$ prince build/line-filters.html -o build/line-filters.pdf +$ tool/build ``` diff --git a/tool/compile b/tool/compile new file mode 100755 index 0000000..ce6f04b --- /dev/null +++ b/tool/compile @@ -0,0 +1,6 @@ +#!/bin/bash + +set -e + +go build -o tool/generate tool/src/generate.go +go build -o tool/number tool/src/number.go diff --git a/tool/gofmt b/tool/gofmt index 331602b..6534c38 100755 --- a/tool/gofmt +++ b/tool/gofmt @@ -3,4 +3,4 @@ set -e set -o pipefail -ls tool/*.go src/*/*.go | xargs -n 1 gofmt -tabs=false -tabwidth=4 -w=true +ls tool/src/*.go src/*/*.go | xargs -n 1 gofmt -tabs=false -tabwidth=4 -w=true diff --git a/tool/generate.go b/tool/src/generate.go similarity index 86% rename from tool/generate.go rename to tool/src/generate.go index 98e8d84..5ef1b16 100644 --- a/tool/generate.go +++ b/tool/src/generate.go @@ -54,6 +54,18 @@ func whichLexer(path string) string { return "" } +func progress(msg string) { + if os.Getenv("DEBUG") != "1" { + fmt.Fprint(os.Stderr, msg) + } +} + +func debug(msg string) { + if os.Getenv("DEBUG") == "1" { + fmt.Fprintln(os.Stderr, msg) + } +} + var docsPat = regexp.MustCompile("^\\s*(\\/\\/|#)\\s") var headerPat = regexp.MustCompile("^\\s*(\\/\\/|#)\\s#+\\s") @@ -83,7 +95,7 @@ func main() {
`) for _, sourcePath := range os.Args[1:] { - fmt.Fprint(os.Stderr, ".") + progress(".") lexer := whichLexer(sourcePath) lines := readLines(sourcePath) @@ -98,9 +110,12 @@ func main() { lastSeg := segs[len(segs)-1] lastHeader := lastSeen == "header" lastDocs := lastSeen == "docs" - newHeader := (lastSeen != "header") && lastSeg.docs != "" - newDocs := (lastSeen != "docs") && lastSeg.docs != "" - newCode := (lastSeen != "code") && lastSeg.code != "" + newHeader := lastSeen != "header" && lastSeg.docs != "" + newDocs := lastSeen == "code" || lastSeen == "header" + newCode := (lastSeen != "code" && lastSeg.code != "") || lastSeen == "header" + if newHeader || newDocs || newCode { + debug("NEWSEG") + } if headerMatch || (emptyMatch && lastHeader) { trimmed := docsPat.ReplaceAllString(line, "") if newHeader { @@ -109,15 +124,18 @@ func main() { } else { lastSeg.docs = lastSeg.docs + "\n" + trimmed } + debug("HEAD") lastSeen = "header" } else if docsMatch || (emptyMatch && lastDocs) { trimmed := docsPat.ReplaceAllString(line, "") if newDocs { + debug("NEWSEG") newSeg := seg{docs: trimmed, code: ""} segs = append(segs, &newSeg) } else { lastSeg.docs = lastSeg.docs + "\n" + trimmed } + debug("DOCS") lastSeen = "docs" } else { if newCode { @@ -126,6 +144,7 @@ func main() { } else { lastSeg.code = lastSeg.code + "\n" + line } + debug("CODE") lastSeen = "code" } } @@ -146,7 +165,7 @@ func main() { codeClasses = codeClasses + " empty" } fmt.Printf( - `