Add ParseRelative to Environment

This commit is contained in:
Sasha Koshka 2024-12-08 02:51:13 -05:00
parent 3c9f91a2c9
commit f1fccdc2ae

View File

@ -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