()
| 242 | } |
| 243 | |
| 244 | func parseExamples() []*Example { |
| 245 | var exampleNames []string |
| 246 | for _, line := range readLines("examples.txt") { |
| 247 | if line != "" && !strings.HasPrefix(line, "#") { |
| 248 | exampleNames = append(exampleNames, line) |
| 249 | } |
| 250 | } |
| 251 | examples := make([]*Example, 0) |
| 252 | for i, exampleName := range exampleNames { |
| 253 | if verbose() { |
| 254 | fmt.Printf("Processing %s [%d/%d]\n", exampleName, i+1, len(exampleNames)) |
| 255 | } |
| 256 | example := Example{Name: exampleName} |
| 257 | exampleID := strings.ToLower(exampleName) |
| 258 | exampleID = strings.Replace(exampleID, " ", "-", -1) |
| 259 | exampleID = strings.Replace(exampleID, "/", "-", -1) |
| 260 | exampleID = strings.Replace(exampleID, "'", "", -1) |
| 261 | exampleID = dashPat.ReplaceAllString(exampleID, "-") |
| 262 | example.ID = exampleID |
| 263 | example.Segs = make([][]*Seg, 0) |
| 264 | sourcePaths := mustGlob("examples/" + exampleID + "/*") |
| 265 | for _, sourcePath := range sourcePaths { |
| 266 | if !isDir(sourcePath) { |
| 267 | if strings.HasSuffix(sourcePath, ".hash") { |
| 268 | example.GoCodeHash, example.URLHash = parseHashFile(sourcePath) |
| 269 | } else { |
| 270 | sourceSegs, filecontents := parseAndRenderSegs(sourcePath) |
| 271 | if filecontents != "" { |
| 272 | example.GoCode = filecontents |
| 273 | } |
| 274 | example.Segs = append(example.Segs, sourceSegs) |
| 275 | } |
| 276 | } |
| 277 | } |
| 278 | newCodeHash := sha1Sum(example.GoCode) |
| 279 | if example.GoCodeHash != newCodeHash { |
| 280 | example.URLHash = resetURLHashFile(newCodeHash, example.GoCode, "examples/"+example.ID+"/"+example.ID+".hash") |
| 281 | } |
| 282 | examples = append(examples, &example) |
| 283 | } |
| 284 | for i, example := range examples { |
| 285 | if i > 0 { |
| 286 | example.PrevExample = examples[i-1] |
| 287 | } |
| 288 | if i < (len(examples) - 1) { |
| 289 | example.NextExample = examples[i+1] |
| 290 | } |
| 291 | } |
| 292 | return examples |
| 293 | } |
| 294 | |
| 295 | func renderIndex(examples []*Example) { |
| 296 | if verbose() { |
no test coverage detected