URI: 
       Add BaseFs to RenderingContext - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 020a6fbd7f6996ed84d80ba6c37fe0d8c2536806
   DIR parent b152216d5c8adbf1bfa4c6fb7b2a50b6866c685e
  HTML Author: Niklas Fasching <niklas.fasching@gmail.com>
       Date:   Thu,  3 Oct 2019 23:27:51 +0200
       
       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.
       
       Diffstat:
         M helpers/content.go                  |       6 ++++++
         M hugolib/page__per_output.go         |       2 ++
       
       2 files changed, 8 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/helpers/content.go b/helpers/content.go
       @@ -27,6 +27,7 @@ import (
                "unicode/utf8"
        
                "github.com/gohugoio/hugo/common/maps"
       +        "github.com/gohugoio/hugo/hugolib/filesystems"
                "github.com/niklasfasching/go-org/org"
        
                bp "github.com/gohugoio/hugo/bufferpool"
       @@ -34,6 +35,7 @@ import (
                "github.com/miekg/mmark"
                "github.com/mitchellh/mapstructure"
                "github.com/russross/blackfriday"
       +        "github.com/spf13/afero"
                jww "github.com/spf13/jwalterweatherman"
        
                "strings"
       @@ -466,6 +468,7 @@ func ExtractTOC(content []byte) (newcontent []byte, toc []byte) {
        // for a given content rendering.
        // By creating you must set the Config, otherwise it will panic.
        type RenderingContext struct {
       +        BaseFs       *filesystems.BaseFs
                Content      []byte
                PageFmt      string
                DocumentID   string
       @@ -752,6 +755,9 @@ func getPandocContent(ctx *RenderingContext) []byte {
        func orgRender(ctx *RenderingContext, c ContentSpec) []byte {
                config := org.New()
                config.Log = jww.WARN
       +        config.ReadFile = func(filename string) ([]byte, error) {
       +                return afero.ReadFile(ctx.BaseFs.Content.Fs, filename)
       +        }
                writer := org.NewHTMLWriter()
                writer.HighlightCodeBlock = func(source, lang string) string {
                        highlightedSource, err := c.Highlight(source, lang, "")
   DIR diff --git a/hugolib/page__per_output.go b/hugolib/page__per_output.go
       @@ -143,6 +143,7 @@ func newPageContentOutput(p *pageState) func(f output.Format) (*pageContentOutpu
                                                html := cp.p.s.ContentSpec.RenderBytes(&helpers.RenderingContext{
                                                        Content: []byte(cp.p.m.summary), RenderTOC: false, PageFmt: cp.p.m.markup,
                                                        Cfg:        p.Language(),
       +                                                BaseFs:     p.s.BaseFs,
                                                        DocumentID: p.File().UniqueID(), DocumentName: p.File().Path(),
                                                        Config: cp.p.getRenderingConfig()})
                                                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{
                        Content: content, RenderTOC: true, PageFmt: cp.p.m.markup,
                        Cfg:        p.Language(),
       +                BaseFs:     cp.p.s.BaseFs,
                        DocumentID: p.File().UniqueID(), DocumentName: p.File().Path(),
                        Config: cp.p.getRenderingConfig()})
        }