# #define, #undef, and macro declarations in blocks
# 'source' parameter to load templates from string or arrays

>20.	"[^"]+ vs "[\w+?]"; need to improve the double-quote regex, ensure that escaped quotes are not included
>4.	change _generate_code() to build the wrapper code, not just the code inside the braces; i.e. build the entire block, e.g.
	"subroutine abc($$) { gjunk; gunk; };"	the whole she-bang!
>16.	elminate 'my $X= $ABC->{X}'; instead use $ABC->{X} everywhere, will facilitate deployment of #define/#undef ?
>17.	in the block's macro-list, include the macro's type
>3.	need to check that a KEY is not already being used, i.e. ! exists $PAGE_CACHE{KEY}
>5.5	accept template text from sources other than files, e.g. scalars or arrays;  use SOURCE attribute ?
>6.	enable the user to load a template from a scalar or array via a SOURCE option; got this to work again but didn't like it.
	now i am uncertain that I want to implement this feature at all.  after all, the entire idea is to separate the presentation
	layer from the application layer.
5.	'first( BLOCK/EXPR, array-ref)' returns first occurence of true evaluation of the BLOCK/EXPRession provided into array
8.  !	split the block stack into two stacks, one for text and one for macroes, for finer control and better scalability
9.	try to think trees instead of stacks, before it gets too late and it turns into a big mess
12.	macro declarations for FOR loops; then globals variables would be accessible from inside a loop
13.	#define and #undef; substitute during parse and output
14.	be able to specify an #include file via a parameter,, e.g. "#include ##SPECIAL_BODY##"
15.	define a 'statement' structure in same capacity as 'block' structures used; #define, #undef, #include
21. ?	if a template is not being cached then the destruction of the object needs to include the subroutine; perhaps
	this is a bad idea since a template might include other templates that another template has cached;
	maybe templates should be cached forcibly
22.	additional public instance methods to provide visibility into the object, such as
	key()		--> returns the key associated with this template object
	filename()	--> returns the full pathname of the file from which the the templated object was loaded
	group()		--> returns group of which this template is a member
	path()		--> return the path for the group/object
	includes()	--> list of templates included by a template
23.	additional public class methods
	files()		--> lists files in a group
	templates()	--> list templates available in a group by key
25.	defaults() could load defaults for multiple groups, given in a list of HASH-REFs
26.	preload() could accept a list of common parameters along with the list of preload() pages, like this:
		preload( { key => 'abc', file => 'abc' },
			 { key => 'def', file => 'def' },
			 { key => 'ghi', file => 'ghi' },
			 path => [ qw: . .. /tmp ],
			 debug => 1,
			 dynamic_reload => 1
			);