aboutsummaryrefslogtreecommitdiff
path: root/hswg
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-06-22 01:29:21 +0200
committerPřemysl Eric Janouch <p@janouch.name>2021-06-22 23:25:01 +0200
commitdd5c583e8b48b2f12e7d0875fff1f8580e0a956a (patch)
tree3c5d27305879980e16d63309499de62d4b1270d8 /hswg
parent63d18d068d3b01041a4d1e73cf5eb78c6d3eac27 (diff)
downloadhaven-dd5c583e8b48b2f12e7d0875fff1f8580e0a956a.tar.gz
haven-dd5c583e8b48b2f12e7d0875fff1f8580e0a956a.tar.xz
haven-dd5c583e8b48b2f12e7d0875fff1f8580e0a956a.zip
hswg: store backlinks in a map
Diffstat (limited to 'hswg')
-rw-r--r--hswg/main.go41
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)
}