diff options
Diffstat (limited to 'internal/atom/atom.go')
-rw-r--r-- | internal/atom/atom.go | 71 |
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"` +} |