diff --git a/hugo/README.md b/hugo/README.md index 6ae9756..42b92db 100644 --- a/hugo/README.md +++ b/hugo/README.md @@ -1,4 +1,6 @@ # hugo v0.49.2 -The files in this directory are copied from the [hugo repository](https://github.com/gohugoio/hugo) -v0.49.2 and only slightly modified. The hugo license applies and is included. +The few files in this directory are copied from the [hugo](https://gohugo.io/) repository at tag +[hugo@v0.49.2](https://github.com/gohugoio/hugo/tree/v0.49.2/) and only slightly modified. +It's the easiest way to get working what I needed to work as the few required functions are well +isolated. I've added Hugo's Apache License v2.0. diff --git a/hugo/parser.go b/hugo/parser.go index 15d71a7..e2aeb3b 100644 --- a/hugo/parser.go +++ b/hugo/parser.go @@ -60,6 +60,9 @@ type Page interface { // Content contains the raw page content. Content() []byte + // Body contains the full document. + Body() []byte + // IsRenderable denotes that the page should be rendered. IsRenderable() bool @@ -74,6 +77,14 @@ type page struct { content []byte } +// Body returns the raw full document content. +func (p page) Body() []byte { + body := p.frontmatter + body = append(body, '\n') + body = append(body, p.content...) + return body +} + // Content returns the raw page content. func (p *page) Content() []byte { return p.content diff --git a/hugo/permalinks.go b/hugo/permalinks.go index fae6f63..27afcc5 100644 --- a/hugo/permalinks.go +++ b/hugo/permalinks.go @@ -9,7 +9,7 @@ import ( "time" ) -type Content struct { +type PageMetadata struct { Title string Slug string Summary string @@ -43,7 +43,7 @@ func init() { // pageToPermaAttribute is the type of a function which, given a page and a tag // can return a string to go in that position in the page (or an error) -type pageToPermaAttribute func(*Content, string) (string, error) +type pageToPermaAttribute func(*PageMetadata, string) (string, error) // PathPattern represents a string which builds up a URL from attributes type PathPattern string @@ -85,7 +85,7 @@ func (pp PathPattern) validate() bool { // Expand on a PathPattern takes a Content and returns the fully expanded Permalink // or an error explaining the failure. -func (pp PathPattern) Expand(p *Content) (string, error) { +func (pp PathPattern) Expand(m *PageMetadata) (string, error) { if !pp.validate() { return "", fmt.Errorf("error") } @@ -111,7 +111,7 @@ func (pp PathPattern) Expand(p *Content) (string, error) { return "", fmt.Errorf("err2") } - newAttr, err := callback(p, attr) + newAttr, err := callback(m, attr) if err != nil { return "", fmt.Errorf("err3 %w", err) @@ -125,23 +125,23 @@ func (pp PathPattern) Expand(p *Content) (string, error) { return strings.Join(sections, "/"), nil } -func pageToPermalinkDate(p *Content, dateField string) (string, error) { +func pageToPermalinkDate(m *PageMetadata, dateField string) (string, error) { // a Content contains a Node which provides a field Date, time.Time switch dateField { case "year": - return strconv.Itoa(p.Date.Year()), nil + return strconv.Itoa(m.Date.Year()), nil case "month": - return fmt.Sprintf("%02d", int(p.Date.Month())), nil + return fmt.Sprintf("%02d", int(m.Date.Month())), nil case "monthname": - return p.Date.Month().String(), nil + return m.Date.Month().String(), nil case "day": - return fmt.Sprintf("%02d", p.Date.Day()), nil + return fmt.Sprintf("%02d", m.Date.Day()), nil case "weekday": - return strconv.Itoa(int(p.Date.Weekday())), nil + return strconv.Itoa(int(m.Date.Weekday())), nil case "weekdayname": - return p.Date.Weekday().String(), nil + return m.Date.Weekday().String(), nil case "yearday": - return strconv.Itoa(p.Date.YearDay()), nil + return strconv.Itoa(m.Date.YearDay()), nil } //TODO: support classic strftime escapes too // (and pass those through despite not being in the map) @@ -149,33 +149,33 @@ func pageToPermalinkDate(p *Content, dateField string) (string, error) { } // if the page has a slug, return the slug, else return the title -func pageToPermalinkSlugElseTitle(p *Content, a string) (string, error) { - if p.Slug != "" { +func pageToPermalinkSlugElseTitle(m *PageMetadata, a string) (string, error) { + if m.Slug != "" { // Don't start or end with a - // TODO(bep) this doesn't look good... Set the Slug once. - if strings.HasPrefix(p.Slug, "-") { - p.Slug = p.Slug[1:len(p.Slug)] + if strings.HasPrefix(m.Slug, "-") { + m.Slug = m.Slug[1:len(m.Slug)] } - if strings.HasSuffix(p.Slug, "-") { - p.Slug = p.Slug[0 : len(p.Slug)-1] + if strings.HasSuffix(m.Slug, "-") { + m.Slug = m.Slug[0 : len(m.Slug)-1] } - return URLEscape(p.Slug) + return URLEscape(m.Slug) } - return pageToPermalinkTitle(p, a) + return pageToPermalinkTitle(m, a) } // pageToPermalinkFilename returns the URL-safe form of the filename -func pageToPermalinkFilename(p *Content, _ string) (string, error) { - return URLEscape(p.Filepath) +func pageToPermalinkFilename(m *PageMetadata, _ string) (string, error) { + return URLEscape(m.Filepath) } -func pageToPermalinkTitle(p *Content, _ string) (string, error) { - return URLEscape(p.Title) +func pageToPermalinkTitle(m *PageMetadata, _ string) (string, error) { + return URLEscape(m.Title) } -func pageToPermalinkSection(p *Content, _ string) (string, error) { - return URLEscape(p.Subdir) +func pageToPermalinkSection(m *PageMetadata, _ string) (string, error) { + return URLEscape(m.Subdir) } func URLEscape(uri string) (string, error) {