Allow customizing reading of #+INCLUDE files

It's not always sensible to allow #+INCLUDE of arbitrary files (e.g. user
provided content)
This commit is contained in:
Niklas Fasching 2019-10-03 23:42:26 +02:00
parent 2347800922
commit 9de65240a0
2 changed files with 8 additions and 6 deletions

View file

@ -23,10 +23,11 @@ import (
) )
type Configuration struct { type Configuration struct {
MaxEmphasisNewLines int // Maximum number of newlines inside an emphasis. See org-emphasis-regexp-components newline. MaxEmphasisNewLines int // Maximum number of newlines inside an emphasis. See org-emphasis-regexp-components newline.
AutoLink bool // Try to convert text passages that look like hyperlinks into hyperlinks. AutoLink bool // Try to convert text passages that look like hyperlinks into hyperlinks.
DefaultSettings map[string]string // Default values for settings that are overriden by setting the same key in BufferSettings. DefaultSettings map[string]string // Default values for settings that are overriden by setting the same key in BufferSettings.
Log *log.Logger // Log is used to print warnings during parsing. Log *log.Logger // Log is used to print warnings during parsing.
ReadFile func(filename string) ([]byte, error) // ReadFile is used to read e.g. #+INCLUDE files.
} }
// Document contains the parsing results and a pointer to the Configuration. // Document contains the parsing results and a pointer to the Configuration.
@ -82,7 +83,8 @@ func New() *Configuration {
"EXCLUDE_TAGS": "noexport", "EXCLUDE_TAGS": "noexport",
"OPTIONS": "toc:t <:t e:t f:t pri:t todo:t tags:t", "OPTIONS": "toc:t <:t e:t f:t pri:t todo:t tags:t",
}, },
Log: log.New(os.Stderr, "go-org: ", 0), Log: log.New(os.Stderr, "go-org: ", 0),
ReadFile: ioutil.ReadFile,
} }
} }

View file

@ -127,7 +127,7 @@ func (d *Document) newInclude(k Keyword) (int, Node) {
path = filepath.Join(filepath.Dir(d.Path), path) path = filepath.Join(filepath.Dir(d.Path), path)
} }
resolve = func() Node { resolve = func() Node {
bs, err := ioutil.ReadFile(path) bs, err := d.ReadFile(path)
if err != nil { if err != nil {
d.Log.Printf("Bad include %#v: %s", k, err) d.Log.Printf("Bad include %#v: %s", k, err)
return k return k