package main import ( "os" "path/filepath" "regexp" "strconv" ) /* * This file contains all the code related to reading and processing entries */ type entry struct { name string rawName string fullPath string } type logEntry struct { baseEntry entry day int month int year int } func findEntries(cfg config) (entries []Renderer, err error) { baseEntryRegex := regexp.MustCompile("([A-z\\-]+)\\.md") logEntryRegex := regexp.MustCompile("(20[0-9]{2})-([0-9]{2})-([0-9]{2})-([A-z\\-]+)\\.md") err = filepath.Walk(cfg.DocsRoot, func(p string, f os.FileInfo, e error) error { if !f.IsDir() && baseEntryRegex.MatchString(f.Name()) { baseCaptures := baseEntryRegex.FindStringSubmatch(f.Name()) newBaseEntry := entry{name: nameify(baseCaptures[1]), rawName: baseCaptures[1], fullPath: p} if logEntryRegex.MatchString(f.Name()) { logCaptures := logEntryRegex.FindStringSubmatch(f.Name()) y, _ := strconv.Atoi(logCaptures[1]) m, _ := strconv.Atoi(logCaptures[2]) d, _ := strconv.Atoi(logCaptures[3]) newLogEntry := logEntry{ baseEntry: newBaseEntry, day: d, month: m, year: y} entries = append(entries, newLogEntry) } else { entries = append(entries, newBaseEntry) } } return nil }) return }