more deliniated parsing

This commit is contained in:
Mark McGranaghan
2012-10-09 10:55:27 -07:00
parent 7f128eadd8
commit eaa044e1d5
3 changed files with 21 additions and 33 deletions

View File

@@ -100,7 +100,6 @@ func debug(msg string) {
}
var docsPat = regexp.MustCompile("^\\s*(\\/\\/|#)\\s")
var headerPat = regexp.MustCompile("^\\s*(\\/\\/|#)\\s#+\\s")
var todoPat = regexp.MustCompile("\\/\\/ todo: ")
type Seg struct {
@@ -118,50 +117,39 @@ func parseSegs(sourcePath string) []*Seg {
segs = append(segs, &Seg{code: "", docs: ""})
lastSeen := ""
for _, line := range lines {
if line == "" {
lastSeen = ""
continue
}
if todoPat.MatchString(line) {
continue
}
headerMatch := headerPat.MatchString(line)
docsMatch := docsPat.MatchString(line)
emptyMatch := line == ""
matchDocs := docsPat.MatchString(line)
matchCode := !matchDocs
lastSeg := segs[len(segs)-1]
lastHeader := lastSeen == "header"
lastDocs := lastSeen == "docs"
newHeader := lastSeen != "header" && lastSeg.docs != ""
newDocs := lastSeen == "code" || lastSeen == "header"
newCode := (lastSeen != "code" && lastSeg.code != "") || lastSeen == "header"
if newHeader || newDocs || newCode {
newDocs := (lastSeen == "") || ((lastSeen != "docs") && (lastSeg.docs != ""))
newCode := (lastSeen == "") || ((lastSeen != "code") && (lastSeg.code != ""))
if newDocs || newCode {
debug("NEWSEG")
}
if headerMatch || (emptyMatch && lastHeader) {
trimmed := docsPat.ReplaceAllString(line, "")
if newHeader {
newSeg := Seg{docs: trimmed, code: ""}
segs = append(segs, &newSeg)
} else {
lastSeg.docs = lastSeg.docs + "\n" + trimmed
}
debug("HEAD")
lastSeen = "header"
} else if docsMatch || (emptyMatch && lastDocs) {
if matchDocs {
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")
debug("DOCS: " + line)
lastSeen = "docs"
} else {
} else if matchCode {
if newCode {
newSeg := Seg{docs: "", code: line}
segs = append(segs, &newSeg)
} else {
lastSeg.code = lastSeg.code + "\n" + line
}
debug("CODE")
debug("CODE: " + line)
lastSeen = "code"
}
}