diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2021-06-22 01:29:21 +0200 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2021-06-22 23:25:01 +0200 |
commit | dd5c583e8b48b2f12e7d0875fff1f8580e0a956a (patch) | |
tree | 3c5d27305879980e16d63309499de62d4b1270d8 /hswg/main.go | |
parent | 63d18d068d3b01041a4d1e73cf5eb78c6d3eac27 (diff) | |
download | haven-dd5c583e8b48b2f12e7d0875fff1f8580e0a956a.tar.gz haven-dd5c583e8b48b2f12e7d0875fff1f8580e0a956a.tar.xz haven-dd5c583e8b48b2f12e7d0875fff1f8580e0a956a.zip |
hswg: store backlinks in a map
Diffstat (limited to 'hswg/main.go')
-rw-r--r-- | hswg/main.go | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/hswg/main.go b/hswg/main.go index caae1f1..5076bd1 100644 --- a/hswg/main.go +++ b/hswg/main.go @@ -134,12 +134,12 @@ func Render(r io.Reader, config configuration.Configuration) ( // Entry contains all context information about a single page. type Entry struct { - Metadata // metadata - PathSource string // path to source AsciiDoc - PathDestination string // path to destination HTML - mtime time.Time // modification time - Content template.HTML // inner document with expanded LinkWords - backlinks []string // what documents link back here + Metadata // metadata + PathSource string // path to source AsciiDoc + PathDestination string // path to destination HTML + mtime time.Time // modification time + Content template.HTML // inner document with expanded LinkWords + backlinks map[string]bool // what documents link back here Backlinks []template.HTML } @@ -180,7 +180,7 @@ func expand(m *map[string]*Entry, name string, chunk []byte) []byte { return linkWordRE.ReplaceAllFunc(chunk, func(match []byte) []byte { if link, ok := (*m)[string(match)]; ok && string(match) != name && !link.IsDraft() { - link.backlinks = append(link.backlinks, name) + link.backlinks[name] = true return []byte(makeLink(m, string(match))) } return match @@ -234,6 +234,7 @@ func main() { entries[name] = &Entry{ PathSource: path, PathDestination: resultPath(path), + backlinks: map[string]bool{}, } } } @@ -277,27 +278,21 @@ func main() { } for _, e := range entries { - sort.Strings(e.backlinks) - - last, uniq := "", []string{} - for _, name := range e.backlinks { - if name != last { - uniq = append(uniq, name) - } - last = name - } - e.backlinks = uniq - } - - for _, e := range entries { f, err := os.Create(e.PathDestination) if err != nil { log.Fatalln(err) } - for _, name := range e.backlinks { - e.Backlinks = append(e.Backlinks, - template.HTML(makeLink(&entries, name))) + + backlinks := []string{} + for name := range e.backlinks { + backlinks = append(backlinks, name) + } + sort.Strings(backlinks) + for _, name := range backlinks { + e.Backlinks = + append(e.Backlinks, template.HTML(makeLink(&entries, name))) } + if err = t.Execute(f, e); err != nil { log.Fatalln(err) } |