wiki/backref.go
Peter Stuifzand 86f4d68d9c
Some checks failed
continuous-integration/drone/push Build is failing
Show more information in back references
2020-05-16 21:02:19 +02:00

98 lines
1.6 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"strings"
)
type Reference struct {
Link ParsedLink
Name string
}
type Refs map[string][]Reference
func processBackrefs(fp *FilePages) error {
pages, err := fp.AllPages()
refs := make(Refs)
if err != nil {
return err
}
for _, page := range pages {
content := page.Content
var listItems []struct {
Id int
Indented int
Text string
}
err = json.NewDecoder(strings.NewReader(content)).Decode(&listItems)
if err == nil {
pageText := ""
for _, item := range listItems {
pageText += strings.Repeat(" ", item.Indented) + "* " + item.Text + "\n"
}
content = pageText
}
links, err := ParseLinks(content)
if err != nil {
return err
}
for _, link := range links {
fmt.Println(link.Line)
refs[link.PageName] = append(refs[link.PageName], Reference{link, page.Name})
}
}
f, err := os.Create(filepath.Join(fp.dirname, "backrefs.json"))
if err != nil {
return err
}
defer f.Close()
err = json.NewEncoder(f).Encode(&refs)
return err
}
func loadBackrefs(fp *FilePages, p string) ([]Backref, error) {
refs := make(Refs)
p = strings.Replace(p, " ", "_", -1)
f, err := os.Open(filepath.Join(fp.dirname, "backrefs.json"))
if err != nil {
return nil, err
}
defer f.Close()
err = json.NewDecoder(f).Decode(&refs)
if err != nil {
return nil, err
}
var result []Backref
for _, ref := range refs[p] {
title := strings.Replace(ref.Name, "_", " ", -1)
result = append(result, Backref{
Name: ref.Name,
Title: title,
Line: strings.TrimLeft(ref.Link.Line, " *"),
})
}
return result, nil
}