diff --git a/environment.go b/environment.go index 177bf72..baaac34 100644 --- a/environment.go +++ b/environment.go @@ -46,8 +46,25 @@ func (this *Environment) Init (ctx context.Context) error { // environment once parsed, and are returned on subsequent calls that have the // same name. func (this *Environment) Parse (name string) (*Document, error) { - name = filepath.Clean(name) - input, err := this.GetFS().Open(name) + return this.ParseRelative(name, nil) +} + +// ParseRelative is like Parse, but treats the name as a path relative to the +// given document. +func (this *Environment) ParseRelative (name string, document *Document) (*Document, error) { + var fileName string + if document == nil { + fileName = filepath.Clean(name) + } else { + nam, err := document.Abs(name) + if err != nil { return nil, err } + fileName = nam + nam, err = document.Rel(name) + if err != nil { return nil, err } + name = nam + } + + input, err := this.GetFS().Open(fileName) if err != nil { // if the file couldn't be opened, delete from cache in case the // file was deleted