mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Add BaseFs to RenderingContext
The org mode renderer supports including other files [1]. We don't want to allow reading of arbitrary files (go-org defaults to ioutil.ReadFile [2]) but want to make use of the FileSystem abstractions hugo provides. For starters we will allow reading from the content directory only [1]: e.g. `#+INCLUDE: ./foo.py src python` includes `foo.py` as a python source block.
This commit is contained in:
parent
b152216d5c
commit
020a6fbd7f
2 changed files with 8 additions and 0 deletions
|
@ -27,6 +27,7 @@ import (
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/maps"
|
"github.com/gohugoio/hugo/common/maps"
|
||||||
|
"github.com/gohugoio/hugo/hugolib/filesystems"
|
||||||
"github.com/niklasfasching/go-org/org"
|
"github.com/niklasfasching/go-org/org"
|
||||||
|
|
||||||
bp "github.com/gohugoio/hugo/bufferpool"
|
bp "github.com/gohugoio/hugo/bufferpool"
|
||||||
|
@ -34,6 +35,7 @@ import (
|
||||||
"github.com/miekg/mmark"
|
"github.com/miekg/mmark"
|
||||||
"github.com/mitchellh/mapstructure"
|
"github.com/mitchellh/mapstructure"
|
||||||
"github.com/russross/blackfriday"
|
"github.com/russross/blackfriday"
|
||||||
|
"github.com/spf13/afero"
|
||||||
jww "github.com/spf13/jwalterweatherman"
|
jww "github.com/spf13/jwalterweatherman"
|
||||||
|
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -466,6 +468,7 @@ func ExtractTOC(content []byte) (newcontent []byte, toc []byte) {
|
||||||
// for a given content rendering.
|
// for a given content rendering.
|
||||||
// By creating you must set the Config, otherwise it will panic.
|
// By creating you must set the Config, otherwise it will panic.
|
||||||
type RenderingContext struct {
|
type RenderingContext struct {
|
||||||
|
BaseFs *filesystems.BaseFs
|
||||||
Content []byte
|
Content []byte
|
||||||
PageFmt string
|
PageFmt string
|
||||||
DocumentID string
|
DocumentID string
|
||||||
|
@ -752,6 +755,9 @@ func getPandocContent(ctx *RenderingContext) []byte {
|
||||||
func orgRender(ctx *RenderingContext, c ContentSpec) []byte {
|
func orgRender(ctx *RenderingContext, c ContentSpec) []byte {
|
||||||
config := org.New()
|
config := org.New()
|
||||||
config.Log = jww.WARN
|
config.Log = jww.WARN
|
||||||
|
config.ReadFile = func(filename string) ([]byte, error) {
|
||||||
|
return afero.ReadFile(ctx.BaseFs.Content.Fs, filename)
|
||||||
|
}
|
||||||
writer := org.NewHTMLWriter()
|
writer := org.NewHTMLWriter()
|
||||||
writer.HighlightCodeBlock = func(source, lang string) string {
|
writer.HighlightCodeBlock = func(source, lang string) string {
|
||||||
highlightedSource, err := c.Highlight(source, lang, "")
|
highlightedSource, err := c.Highlight(source, lang, "")
|
||||||
|
|
|
@ -143,6 +143,7 @@ func newPageContentOutput(p *pageState) func(f output.Format) (*pageContentOutpu
|
||||||
html := cp.p.s.ContentSpec.RenderBytes(&helpers.RenderingContext{
|
html := cp.p.s.ContentSpec.RenderBytes(&helpers.RenderingContext{
|
||||||
Content: []byte(cp.p.m.summary), RenderTOC: false, PageFmt: cp.p.m.markup,
|
Content: []byte(cp.p.m.summary), RenderTOC: false, PageFmt: cp.p.m.markup,
|
||||||
Cfg: p.Language(),
|
Cfg: p.Language(),
|
||||||
|
BaseFs: p.s.BaseFs,
|
||||||
DocumentID: p.File().UniqueID(), DocumentName: p.File().Path(),
|
DocumentID: p.File().UniqueID(), DocumentName: p.File().Path(),
|
||||||
Config: cp.p.getRenderingConfig()})
|
Config: cp.p.getRenderingConfig()})
|
||||||
html = cp.p.s.ContentSpec.TrimShortHTML(html)
|
html = cp.p.s.ContentSpec.TrimShortHTML(html)
|
||||||
|
@ -314,6 +315,7 @@ func (cp *pageContentOutput) renderContent(p page.Page, content []byte) []byte {
|
||||||
return cp.p.s.ContentSpec.RenderBytes(&helpers.RenderingContext{
|
return cp.p.s.ContentSpec.RenderBytes(&helpers.RenderingContext{
|
||||||
Content: content, RenderTOC: true, PageFmt: cp.p.m.markup,
|
Content: content, RenderTOC: true, PageFmt: cp.p.m.markup,
|
||||||
Cfg: p.Language(),
|
Cfg: p.Language(),
|
||||||
|
BaseFs: cp.p.s.BaseFs,
|
||||||
DocumentID: p.File().UniqueID(), DocumentName: p.File().Path(),
|
DocumentID: p.File().UniqueID(), DocumentName: p.File().Path(),
|
||||||
Config: cp.p.getRenderingConfig()})
|
Config: cp.p.getRenderingConfig()})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue