about summary refs log tree commit diff stats
path: root/internal/atom
diff options
context:
space:
mode:
Diffstat (limited to 'internal/atom')
-rw-r--r--internal/atom/atom.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/internal/atom/atom.go b/internal/atom/atom.go
new file mode 100644
index 0000000..f75d18a
--- /dev/null
+++ b/internal/atom/atom.go
@@ -0,0 +1,71 @@
+package atom
+
+import (
+	"bytes"
+	"encoding/xml"
+	"net/url"
+	"time"
+
+	"go.alanpearce.eu/website/internal/config"
+)
+
+func MakeTagURI(config *config.Config, specific string) string {
+	return "tag:" + config.OriginalDomain + "," + config.DomainStartDate + ":" + specific
+}
+
+func LinkXSL(w *bytes.Buffer, url string) error {
+	_, err := w.WriteString(`<?xml-stylesheet href="`)
+	if err != nil {
+		return err
+	}
+	err = xml.EscapeText(w, []byte(url))
+	if err != nil {
+		return err
+	}
+	_, err = w.WriteString(`" type="text/xsl"?>`)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+type Link struct {
+	XMLName xml.Name `xml:"link"`
+	Rel     string   `xml:"rel,attr,omitempty"`
+	Type    string   `xml:"type,attr,omitempty"`
+	Href    string   `xml:"href,attr"`
+}
+
+func MakeLink(url *url.URL) Link {
+	return Link{
+		Rel:  "alternate",
+		Type: "text/html",
+		Href: url.String(),
+	}
+}
+
+type FeedContent struct {
+	Content string `xml:",chardata"`
+	Type    string `xml:"type,attr"`
+}
+
+type FeedEntry struct {
+	XMLName xml.Name    `xml:"entry"`
+	Title   string      `xml:"title"`
+	Link    Link        `xml:"link"`
+	ID      string      `xml:"id"`
+	Updated time.Time   `xml:"updated"`
+	Summary string      `xml:"summary,omitempty"`
+	Content FeedContent `xml:"content"`
+	Author  string      `xml:"author>name"`
+}
+
+type Feed struct {
+	XMLName xml.Name     `xml:"http://www.w3.org/2005/Atom feed"`
+	Title   string       `xml:"title"`
+	Link    Link         `xml:"link"`
+	ID      string       `xml:"id"`
+	Updated time.Time    `xml:"updated"`
+	Entries []*FeedEntry `xml:"entry"`
+}