(sourcePath string)
| 136 | } |
| 137 | |
| 138 | func parseSegs(sourcePath string) ([]*Seg, string) { |
| 139 | var ( |
| 140 | lines []string |
| 141 | source []string |
| 142 | ) |
| 143 | // Convert tabs to spaces for uniform rendering. |
| 144 | for _, line := range readLines(sourcePath) { |
| 145 | lines = append(lines, strings.Replace(line, "\t", " ", -1)) |
| 146 | source = append(source, line) |
| 147 | } |
| 148 | segs := []*Seg{} |
| 149 | lastSeen := "" |
| 150 | for _, line := range lines { |
| 151 | if line == "" { |
| 152 | lastSeen = "" |
| 153 | continue |
| 154 | } |
| 155 | matchDocs := docsPat.MatchString(line) |
| 156 | matchCode := !matchDocs |
| 157 | newDocs := (lastSeen == "") || ((lastSeen != "docs") && (segs[len(segs)-1].Docs != "")) |
| 158 | newCode := (lastSeen == "") || ((lastSeen != "code") && (segs[len(segs)-1].Code != "")) |
| 159 | if newDocs || newCode { |
| 160 | debug("NEWSEG") |
| 161 | } |
| 162 | if matchDocs { |
| 163 | trimmed := docsPat.ReplaceAllString(line, "") |
| 164 | if newDocs { |
| 165 | newSeg := Seg{Docs: trimmed, Code: ""} |
| 166 | segs = append(segs, &newSeg) |
| 167 | } else { |
| 168 | segs[len(segs)-1].Docs = segs[len(segs)-1].Docs + "\n" + trimmed |
| 169 | } |
| 170 | debug("DOCS: " + line) |
| 171 | lastSeen = "docs" |
| 172 | } else if matchCode { |
| 173 | if newCode { |
| 174 | newSeg := Seg{Docs: "", Code: line} |
| 175 | segs = append(segs, &newSeg) |
| 176 | } else { |
| 177 | lastSeg := segs[len(segs)-1] |
| 178 | if len(lastSeg.Code) == 0 { |
| 179 | lastSeg.Code = line |
| 180 | } else { |
| 181 | lastSeg.Code = lastSeg.Code + "\n" + line |
| 182 | } |
| 183 | } |
| 184 | debug("CODE: " + line) |
| 185 | lastSeen = "code" |
| 186 | } |
| 187 | } |
| 188 | for i, seg := range segs { |
| 189 | seg.CodeEmpty = (seg.Code == "") |
| 190 | seg.CodeLeading = (i < (len(segs) - 1)) |
| 191 | seg.CodeRun = strings.Contains(seg.Code, "package main") |
| 192 | } |
| 193 | return segs, strings.Join(source, "\n") |
| 194 | } |
| 195 |
no test coverage detected