mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			92 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
| // Copyright 2009 The Go Authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style
 | |
| // license that can be found in the LICENSE file.
 | |
| 
 | |
| /*
 | |
| 	Package template implements data-driven templates for generating textual
 | |
| 	output such as HTML.
 | |
| 
 | |
| 	Templates are executed by applying them to a data structure.
 | |
| 	Annotations in the template refer to elements of the data
 | |
| 	structure (typically a field of a struct or a key in a map)
 | |
| 	to control execution and derive values to be displayed.
 | |
| 	The template walks the structure as it executes and the
 | |
| 	"cursor" @ represents the value at the current location
 | |
| 	in the structure.
 | |
| 
 | |
| 	Data items may be values or pointers; the interface hides the
 | |
| 	indirection.
 | |
| 
 | |
| 	In the following, 'Field' is one of several things, according to the data.
 | |
| 
 | |
| 		- The name of a field of a struct (result = data.Field),
 | |
| 		- The value stored in a map under that key (result = data["Field"]), or
 | |
| 		- The result of invoking a niladic single-valued method with that name
 | |
| 		  (result = data.Field())
 | |
| 
 | |
| 	If Field is a struct field or method name, it must be an exported
 | |
| 	(capitalized) name.
 | |
| 
 | |
| 	Major constructs ({} are the default delimiters for template actions;
 | |
| 	[] are the notation in this comment for optional elements):
 | |
| 
 | |
| 		{# comment }
 | |
| 
 | |
| 	A one-line comment.
 | |
| 
 | |
| 		{.section field} XXX [ {.or} YYY ] {.end}
 | |
| 
 | |
| 	Set @ to the value of the field.  It may be an explicit @
 | |
| 	to stay at the same point in the data. If the field is nil
 | |
| 	or empty, execute YYY; otherwise execute XXX.
 | |
| 
 | |
| 		{.repeated section field} XXX [ {.alternates with} ZZZ ] [ {.or} YYY ] {.end}
 | |
| 
 | |
| 	Like .section, but field must be an array or slice.  XXX
 | |
| 	is executed for each element.  If the array is nil or empty,
 | |
| 	YYY is executed instead.  If the {.alternates with} marker
 | |
| 	is present, ZZZ is executed between iterations of XXX.
 | |
| 
 | |
| 		{field}
 | |
| 		{field1 field2 ...}
 | |
| 		{field|formatter}
 | |
| 		{field1 field2...|formatter}
 | |
| 		{field|formatter1|formatter2}
 | |
| 
 | |
| 	Insert the value of the fields into the output. Each field is
 | |
| 	first looked for in the cursor, as in .section and .repeated.
 | |
| 	If it is not found, the search continues in outer sections
 | |
| 	until the top level is reached.
 | |
| 
 | |
| 	If the field value is a pointer, leading asterisks indicate
 | |
| 	that the value to be inserted should be evaluated through the
 | |
| 	pointer.  For example, if x.p is of type *int, {x.p} will
 | |
| 	insert the value of the pointer but {*x.p} will insert the
 | |
| 	value of the underlying integer.  If the value is nil or not a
 | |
| 	pointer, asterisks have no effect.
 | |
| 
 | |
| 	If a formatter is specified, it must be named in the formatter
 | |
| 	map passed to the template set up routines or in the default
 | |
| 	set ("html","str","") and is used to process the data for
 | |
| 	output.  The formatter function has signature
 | |
| 		func(wr io.Writer, formatter string, data ...interface{})
 | |
| 	where wr is the destination for output, data holds the field
 | |
| 	values at the instantiation, and formatter is its name at
 | |
| 	the invocation site.  The default formatter just concatenates
 | |
| 	the string representations of the fields.
 | |
| 
 | |
| 	Multiple formatters separated by the pipeline character | are
 | |
| 	executed sequentially, with each formatter receiving the bytes
 | |
| 	emitted by the one to its left.
 | |
| 
 | |
| 	As well as field names, one may use literals with Go syntax.
 | |
| 	Integer, floating-point, and string literals are supported.
 | |
| 	Raw strings may not span newlines.
 | |
| 
 | |
| 	The delimiter strings get their default value, "{" and "}", from
 | |
| 	JSON-template.  They may be set to any non-empty, space-free
 | |
| 	string using the SetDelims method.  Their value can be printed
 | |
| 	in the output using {.meta-left} and {.meta-right}.
 | |
| */
 | |
| package template
 |