aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Peppe <rogpeppe@gmail.com>2011-07-28 09:59:20 -0700
committerRob Pike <r@golang.org>2011-07-28 09:59:20 -0700
commitca68b2810d599b56e9e9a640f715de7485caf593 (patch)
treea6f7b30a3ff75d1412cc4739bc44a8532bf7d288
parentdb9229def8bb23cf254e5027eaf9b5914220e621 (diff)
downloadgo-ca68b2810d599b56e9e9a640f715de7485caf593.tar.gz
go-ca68b2810d599b56e9e9a640f715de7485caf593.zip
exp/template: make Set.ParseFile etc resolve functions in the Set
Fixes #2114 R=r CC=golang-dev https://golang.org/cl/4823056
-rw-r--r--src/pkg/exp/template/helper.go30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/pkg/exp/template/helper.go b/src/pkg/exp/template/helper.go
index 97917fddfc..cf50a3082f 100644
--- a/src/pkg/exp/template/helper.go
+++ b/src/pkg/exp/template/helper.go
@@ -35,6 +35,17 @@ func (t *Template) ParseFile(filename string) os.Error {
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
// construct an internal representation of the template for execution.
// 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) {
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
// 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.
@@ -179,13 +199,10 @@ func MustParseSetFiles(pattern string) *Set {
// encountered.
func (s *Set) ParseTemplateFile(filenames ...string) os.Error {
for _, filename := range filenames {
- t, err := ParseFile(filename)
+ _, err := ParseFileInSet(filename, s)
if err != nil {
return err
}
- if err := s.add(t); err != nil {
- return err
- }
}
return nil
}
@@ -216,13 +233,10 @@ func (s *Set) ParseTemplateFiles(pattern string) os.Error {
return err
}
for _, filename := range filenames {
- t, err := ParseFile(filename)
+ _, err := ParseFileInSet(filename, s)
if err != nil {
return err
}
- if err := s.add(t); err != nil {
- return err
- }
}
return nil
}