Commit ca68b281 authored by Roger Peppe's avatar Roger Peppe Committed by Rob Pike

exp/template: make Set.ParseFile etc resolve functions in the Set

Fixes #2114

R=r
CC=golang-dev
https://golang.org/cl/4823056
parent db9229de
...@@ -35,6 +35,17 @@ func (t *Template) ParseFile(filename string) os.Error { ...@@ -35,6 +35,17 @@ func (t *Template) ParseFile(filename string) os.Error {
return t.Parse(string(b)) return t.Parse(string(b))
} }
// ParseFileInSet is the same as ParseFile except that function bindings
// are checked against those in the set and the template is added
// to the set.
func (t *Template) ParseFileInSet(filename string, set *Set) os.Error {
b, err := ioutil.ReadFile(filename)
if err != nil {
return err
}
return t.ParseInSet(string(b), set)
}
// MustParseFile reads the template definition from a file and parses it to // MustParseFile reads the template definition from a file and parses it to
// construct an internal representation of the template for execution. // construct an internal representation of the template for execution.
// It panics if the file cannot be read or the template cannot be parsed. // It panics if the file cannot be read or the template cannot be parsed.
...@@ -52,6 +63,15 @@ func ParseFile(filename string) (*Template, os.Error) { ...@@ -52,6 +63,15 @@ func ParseFile(filename string) (*Template, os.Error) {
return t, t.ParseFile(filename) return t, t.ParseFile(filename)
} }
// ParseFileInSet creates a new Template and parses the template
// definition from the named file. The template name is the base name
// of the file. It also adds the template to the set. Function bindings are
//checked against those in the set.
func ParseFileInSet(filename string, set *Set) (*Template, os.Error) {
t := New(filepath.Base(filename))
return t, t.ParseFileInSet(filename, set)
}
// MustParseFile creates a new Template and parses the template definition // MustParseFile creates a new Template and parses the template definition
// from the named file. The template name is the base name of the file. // from the named file. The template name is the base name of the file.
// It panics if the file cannot be read or the template cannot be parsed. // It panics if the file cannot be read or the template cannot be parsed.
...@@ -179,13 +199,10 @@ func MustParseSetFiles(pattern string) *Set { ...@@ -179,13 +199,10 @@ func MustParseSetFiles(pattern string) *Set {
// encountered. // encountered.
func (s *Set) ParseTemplateFile(filenames ...string) os.Error { func (s *Set) ParseTemplateFile(filenames ...string) os.Error {
for _, filename := range filenames { for _, filename := range filenames {
t, err := ParseFile(filename) _, err := ParseFileInSet(filename, s)
if err != nil { if err != nil {
return err return err
} }
if err := s.add(t); err != nil {
return err
}
} }
return nil return nil
} }
...@@ -216,13 +233,10 @@ func (s *Set) ParseTemplateFiles(pattern string) os.Error { ...@@ -216,13 +233,10 @@ func (s *Set) ParseTemplateFiles(pattern string) os.Error {
return err return err
} }
for _, filename := range filenames { for _, filename := range filenames {
t, err := ParseFile(filename) _, err := ParseFileInSet(filename, s)
if err != nil { if err != nil {
return err return err
} }
if err := s.add(t); err != nil {
return err
}
} }
return nil return nil
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment