Commit 258a08ed authored by Rob Pike's avatar Rob Pike

add {.tab}

fix a couple of comments

TBR=rsc
OCL=27716
CL=27716
parent 9d70646f
...@@ -73,10 +73,11 @@ type ParseError struct { ...@@ -73,10 +73,11 @@ type ParseError struct {
os.ErrorString os.ErrorString
} }
// All the literals are aces. // Most of the literals are aces.
var lbrace = []byte{ '{' } var lbrace = []byte{ '{' }
var rbrace = []byte{ '}' } var rbrace = []byte{ '}' }
var space = []byte{ ' ' } var space = []byte{ ' ' }
var tab = []byte{ '\t' }
// The various types of "tokens", which are plain text or (usually) brace-delimited descriptors // The various types of "tokens", which are plain text or (usually) brace-delimited descriptors
const ( const (
...@@ -330,7 +331,7 @@ func (t *Template) analyze(item []byte) (tok int, w []string) { ...@@ -330,7 +331,7 @@ func (t *Template) analyze(item []byte) (tok int, w []string) {
return; return;
} }
switch w[0] { switch w[0] {
case ".meta-left", ".meta-right", ".space": case ".meta-left", ".meta-right", ".space", ".tab":
tok = tokLiteral; tok = tokLiteral;
return; return;
case ".or": case ".or":
...@@ -413,6 +414,8 @@ func (t *Template) parseSimple(item []byte) (done bool, tok int, w []string) { ...@@ -413,6 +414,8 @@ func (t *Template) parseSimple(item []byte) (done bool, tok int, w []string) {
t.elems.Push(&literalElement{t.rdelim}); t.elems.Push(&literalElement{t.rdelim});
case ".space": case ".space":
t.elems.Push(&literalElement{space}); t.elems.Push(&literalElement{space});
case ".tab":
t.elems.Push(&literalElement{tab});
default: default:
t.parseError("internal error: unknown literal: %s", w[0]); t.parseError("internal error: unknown literal: %s", w[0]);
} }
...@@ -714,7 +717,7 @@ func validDelim(d []byte) bool { ...@@ -714,7 +717,7 @@ func validDelim(d []byte) bool {
return true; return true;
} }
// Public interface // -- Public interface
// Parse initializes a Template by parsing its definition. The string // Parse initializes a Template by parsing its definition. The string
// s contains the template text. If any errors occur, Parse returns // s contains the template text. If any errors occur, Parse returns
...@@ -730,11 +733,10 @@ func (t *Template) Parse(s string) (err os.Error) { ...@@ -730,11 +733,10 @@ func (t *Template) Parse(s string) (err os.Error) {
t.parse(); t.parse();
t.errorchan <- nil; // clean return; t.errorchan <- nil; // clean return;
}(); }();
err = <-t.errorchan; return <-t.errorchan;
return
} }
// Execute executes a parsed template on the specified data object, // Execute applies a parsed template to the specified data object,
// generating output to wr. // generating output to wr.
func (t *Template) Execute(data interface{}, wr io.Write) os.Error { func (t *Template) Execute(data interface{}, wr io.Write) os.Error {
// Extract the driver data. // Extract the driver data.
......
...@@ -73,6 +73,7 @@ var tests = []*Test { ...@@ -73,6 +73,7 @@ var tests = []*Test {
&Test{ " {.meta-left} \n", "{" }, &Test{ " {.meta-left} \n", "{" },
&Test{ " {.meta-right} \n", "}" }, &Test{ " {.meta-right} \n", "}" },
&Test{ " {.space} \n", " " }, &Test{ " {.space} \n", " " },
&Test{ " {.tab} \n", "\t" },
&Test{ " {#comment} \n", "" }, &Test{ " {#comment} \n", "" },
// Variables at top level // Variables at top level
......
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