summaryrefslogtreecommitdiff
path: root/CHANGES
blob: 02bc2b1e5f846d4792581ec7beaf9e9f1c3401e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
Please initial your changes (there's a key at bottom) and add a date for each
release
================================================================================
0.9.15b1 (unreleased)
  - fixed a package-relative import bug in ImportHooks.py (TR)
  - set 'monitorSrcFile' to false as it was causing problems with the
    ImportHooks ... This might be temporary as the problem needs more thought
    (TR)
  - fixed meta tag http_equiv to be http-equiv in SkeletonPage (TR)
  - $webInput (Utils.WebInputMixin) 'source' arg can be either case. (MO)
  - fixed code-gen bug in MethodCompiler.commitStrConst that was leading to
    triple single quotes followed immediately by another single quote if the
    template def contained a '$placeholder' surrounded in single quotes and
    multiple \n newlines ... plus added new test case.(TR)
  - undocumented the '#settings' directive.  The directive itself will be
    removed soon.  (MO)
  - Utils.optik: Optik 1.3 package by Gregory P Ward, for parsing
    command-line options in 'cheetah' comamnd.  Copied unchanged into
    Cheetah except added "Cheetah.Utils.optik." prefix to intra-package
    imports.  Optik's copyright and license is in an appendix in the
    Cheetah Users' Guide.  (MO)
  - rewrite of the "cheetah" and "cheetah-compile" commands. 
    The command-line options have changed!  Removed CheetahCompile module
    removed and its test suite too; CheetahWrapper now takes its place. (MO)
  - Utils.dualglob: new module to recursively generate source+destination
    filenames from command-line filespecs. (MO)
  - The command-line options of .py template modules have also changed
    to conform with the "cheetah" command.  Also a --pickle bug was
    fixed.  (MO)
  - Utils.WebMixin: made a string type comparision backward compatible.
    This was why the Cheetah test suite was failing on Python < 2.2! (MO)
  - SettingsManager._createConfigFile(): bugfix in default argument. (MO)
  - $hasVar('varName') is an alias for $varExists('varName').  (MO)
  - $_fileDirName and $_filePath are now None rather than missing if
    the template definition did not come from a named file.  (MO)
  - applied patch on SourceForge for "%" in default arguments of a block (TR)
  - removed the _underscored attribute lookup step from NameMapper NOTE THIS
    MIGHT BREAK EXISTING CODE (TR)
  - Install Cheetah into site-packages/Cheetah/ rather than
    site-packages/Webware/Cheetah/. Added code to automatically remove the old dir.(TR)
  - added __builtin__ to the end of the searchList so that other searchList
    variables can override Python builtins. The old implementation allowed
    builtins to trump searchList vars. (TR)
  - fixed the variable name resolution order bug in $placeholders.  The new
    implementation uses 
     valueFromSearchList([locals()] + searchList + [globals()], rest of the args) 
    for all lookups. (TR)
  - removed the #settings directive (TR)
  - added the #del directive, for using Python's del statement (TR)
   

0.9.14 (July 14, 2002)
  - Precompiled template Templates/SkeletonPage.py added to CVS.  This file is
    needed for Cheetah's regression tests. (MO)
  - removed automatic recompilation of .py template in memory if the
    .tmpl file has changed.  (TR)

0.9.14b1 (June 30, 2002)
  - moved the Users' Guide and the Developers' Guide into a separate CVS module,
    'CheetahDocs', so they can be distributed separately from the source distro
    (TR,MO)
  - added TypeType to the types that NameMapper won't do autocalling on (TR)
  - in Template.py moved the global LegalKWs to Template._legalKWs (TR)
  - made #set work with RVALUES that are missing the recommended $ (TR)
  - added some new test cases for the #set directive (TR)
  - fixed bug in the output of the #unless directive that Mike found (TR)
  - added some module constants to clear up a missing name bug that Mike found
    in cases where you use **KW in a Cheetah method definition (TR)
  - fixed a bug in Parser.py:_LowLevelSemanticsParser.getExpression() that was
    related to the default enclosures=[] argument.  This arg was unintentionally
    being shared between calls and thus leading to parsing errors as reported by
    Greg Czajkowski (TR)
  - Filter: fixed an '== None' expression (should be 'is None'). (MO)
  - TemplateMisc: new base class for Template.  This is for optional
    convenience methods that don't require Webware. (MO)
  - User's Guide: new sections "Non-Webware HTML Output" and "Non-HTML
    Output". (MO)
  - Expanded $webInput() -- renamed from $cgiImport() -- to work both with
    Webware input and CGI scripts.  Handles GET/POST/cookie/session vars under
    Webware, and GET/POST under CGI.  Defined in Cheetah.Utils.WebInputMixin,
    now inherited by Template directly. (MO)
  - Tools.CGITemplate has methods to output CGI headers: .isCgi, .cgiHeaders
    and .cgiHeadersHook in TemplateMisc. (MO)
  - New #indent directive allows you to indent block constructs in the
    template definition without having that indentation in the output, and
    allows you to set the output indentation per line independent of the
    indentation in the template definition.  This version uses Robert
    Kuzelj's #indent syntax exactly.  In the next few days, 
    Cheetah.Utils.Indenter will be refactored and
    *** THE #INDENT SYNTAX WILL CHANGE! *** (MO)
  - added the #return directive as requested by Robert Kulezj (TR)
  - added some test cases for the #return directive (TR)
  - removed buggy import statement that had been left in Servlet.py after the
    CGIInputMixin changes (TR)


0.9.13 (May 8, 2002)
  - changed Cheetah.Servlet.isRunningFromWebKit to isWebwareInstalled (TR)

  - fixed parsing bug that would exit an expression if the directiveEndToken was a
    valid Python token and was found inside the directive.  (TR)

    E.g.:
    #compiler-settings
    directiveStartToken = .
    directiveEndToken = :
    commentStartToken = #
    #end compiler-settings
    
    .for a in [1,2,3,4][2:3]:
    blag
    .end for

  - fixed #include bug that was resulting in non-unique includeIDs (TR)

0.9.13b2 (May 3, 2002)
  - fixed the bug in Cheetah.Servlet.Servlet.serverSidePath that Jeff Johnson
    found. (TR)
  - changed the attribute Cheetah.Servlet.ServletisRunningFromWebKit to
    isControlledByWebKit and set the default to False unless the .awake method
    is called.  This makes a clear distinction between templates that are being
    used with WebKit via the inheritance approach and the containment approach
    (TR)

 
0.9.13b1 (May 1, 2002)
  - Was going to import cStringIO instead of StringIO, but it made the 
    DummyTransaction.py unittest fail so I undid it.  Cheetah aims to provide
    Unicode support, which cStringIO does not provide. (TR/MO)
  - Utils.Misc.CheckKeywords(): prevent misspelled keyword arguments,
    used by Template constructor. (MO)
  - removed support for multiple inheritance (TR)
  - added some bounds-checking code to _namemapper.c's getNameChunks function
    (TR)
  - changed the exceptions in _namemapper.c from the old string exceptions
    to proper exception objects (TR)
  - first portion of Developers' Guide written (MO)
  - implemented the extended #extends directive, which does automatic importing
    (MO,TR)
  - added some new testcases for the extended #extends directive (TR)
  - lots of work on the Users' Guide (MO)
  - implemented and tested an import hook for .tmpl files (TR):
      import MyTemplate  # will compile and import MyTemplate.tmpl
  - made my True/False declarations friendly with Python 2.2.1, which already
    includes True/False as builtins (TR)
  - implemented the #compiler directive that Edmund Lian suggested (TR)
      e.g.:
        #compiler commentStartToken = '//'
        // a comment
        #compiler reset
	// no longer a comment
  - fixed the bug that Edmund Lian found in .addSet() when useNameMapper = 0
  (TR)
  - fixed bug in comment creation using lineCol that Mike found (TR)

0.9.12 (April 3, 2002)
   - no code changes from beta 2
   - more work on the docs (MO)

0.9.12b2 (Mar 28, 2002)
   - fixed Win32 path bug in Template._makeDummyPackageForDir() (TR)
   - prettied up the format of the debug comments in the Cheetah generated
     Python code (TR)
   - fixed the non-unique key error in Template._includeCheetahSource (TR)
   - fixed the module import bug in 'cheetah compile -w' (TR)

0.9.12b1 (Mar 24, 2002)
   - $request().field(args) now works, identical to $request.field(args)
     to implement this, the request object is now self.request() instead of
     self.request.  This provides compatibility with Webware's servlet API.
     (self.session already was an accessor method).  New read-only attribute
     self.isRunningFromWebKit is boolean.  All changes are in Servlet.py. (MO)
   - fixed nested-NotFound bug in _namemapper.c's valueFromSearchList (TR)
   - 'cheetah' wrapper script has abbreviation -c for the 'compile' command,
     -t for 'test', and an ASCII-art cheetah face in the help message. (MO)
   - CheetahCompile.py: fixed to recognize --help option and to show --help/-h
     in help message. (MO)
   - CheetahCompile.py: 
     changed the order of the VERBOSE mode printouts, as per Mike's request (TR)
   - Template.py:
     fixed the #include'd template searchList sharing problem, as reported by
     Johannes (TR)
   - corrected namemapper translation bug in
     Compiler.GenUtils.genNameMapperVar() (TR)
   - Utils.Misc.UseOrRaise(): convenience function to return a 
     value, or raise it if it's a subclass of Exception. (MO)
   - Utils.CGIImportMixin replaces Tools.WebwareMixin.  Servlet now
     subclasses it.  This adds the .cgiImport() method to all servlets, allowing
     sophisticated retrieval of form fields, cookies or session variables from
     one line of Cheetah or Python code.  See module docstring. (MO)
   - lots of updates to the docs (MO)

0.9.11 (Mar 07, 2002)
   - fixed a careless bug in cheetah-compile (TR)
   - implemented the new 'cheetah' wrapper script (TR)
   - refactored the local copy of unittest a bit (TR)

0.9.10 (Mar 06, 2002): Primarily a bug fix release
   - fixed bug in srcfile-mtime monitoring / update code (TR)
   - fixed the parsing of single-line #defs and #blocks so they can have
     arguments (TR)
   - added test cases for single-line #defs and #blocks with args (TR)
   - fixed a silly typo bug in Parser.py where a comma was left at the end of
     regex definition, make it a tuple rather than a regex
   - fixed the directive matching bug that Jeff Johnson reported.  It was
     causing #else# to not match, while #else # was matching. + added a test
     for it.(TR)
   - fixed bug in a regex that was preventing bare $'s followed by whitespace
     and then valid varname chars from parsing as just $ instead of as a
     placeholder (TR)
   - added some code to break reference cycles after the compilation is
     complete. This helps prevent memory leaks when a process in creating then
     discarding lots of Templates.  You also need to manually call
     "template.shutdown()" to clear the remaining reference cycles.
     (TR)
   - fixed string formating bug in the autogenerated docstring code (TR)
   - added better error message for the #attr directive (TR)
   - removed some residual code that was causing a bug with cheetahvars that
     started with the name of one of the imported modules, such as 'time'. (TR)

0.9.9 (Dec 14, 2001)
   - implemented one-line #def's and #block's (TR)
        #def aTest: This is a $adj test   ---- READ THE MANUAL FOR MORE INFO.
     NOTE: leading and trailing whitespace is stripped.  These should only be
     used on lines by themselves as it reads to the end of the line.
   - made cheetah-compile accept input on standard input (TR)
   - made sure that #def and #block work with $'s on the method names (TR)

0.9.9b1 (Dec 6, 2001)
   - template constructor arg 'outputFilter' now 'filter', for consistency
     with #filter (MO)
   - template constructor raises TypeError if bad arguments (MO)
   - Cheetah.Utils.VerifyType new module containing functions for verifying the
     type of an argument (MO)
   - Cheetah.Utils: new package for non-Cheetah-specific modules needed by
     Cheetah (MO)
   - Cheetah.Filters: new filter WebSafe, several bugfixes (MO)
   - more work on the Users' Guide (MO)
   - fixed bug with adding Python's __builtins__ to the local vars list (TR)
   - fixed bug with #echo (TR)
   - fixed bug that was preventing ${a, $b=1234} from working like ${a, b=1234} (TR)
   - fixed some bugs in Template.varExists and Template.getVar() 
     (TR - thanks to MH for spotting them)
   - made it possible to use filenames like 'spam-eggs.txt' that have invalid
     characters for module names with Template(): Template(file='spam-eggs.txt')
     (TR/MH)
   - refactored 'cheetah-compile' a little (TR)
   - Cheetah.Filters.Strip: new filter to strip leading/trailing whitespace
     but preserve newlines.  Suitable for #filter directive or (possible)
     future #sed directive. (MO)
   - Cheetah.Filters.StripSqueeze: new filter to canonicalize all whitespace
     chunks to ' '.  Also removes all newlines (joining multi-line input into
     one long line), and leading/trailing whitespace from the final result. (MO)
   - Filters can now be used standalone for debugging or for use outside
     Cheetah.  This works transparently; details are in Filters.py docstring.
     (MO)
   - Cheetah.Tools.MondoReport: new module for dividing a long list into
     "pages", and for calculating statistics useful in reports. (MO)
   - refactored Cheetah.Servlet.Servlet.Awake a little (TR)
   - fixed an output bug in the #block generated code that turned up when you
     tried to override a block method from Python rather than Cheetah. (TR)
   - started preparing to shift some of the 'shared' utility classes, such as
     SettingsManager, to the Webware core.  Cheetah 1.0 will probably require
     Webware to be installed so it can access those shared classes. (TR)
   - extended the template module command line interface(TR/MO)

0.9.9a6 (Nov 6, 2001) 
   - fixed bug with quotations in longer constant string chunks (TR)
   - fixed another bug in the cheetah-compile script (TR)
   - fixed a bug in the file-update monitoring code that was resulting in
     infinite loops when used with Template sub-classes (TR)
   - extended the #filter framework according to Mike's suggestions (TR)  
   - added test modules for cheetah-compile and the file-update monitoring code (TR)
   - extended the capabilities of cheetah-compile ... (IB)
   - updated the docs (MO)

0.9.9a5 (October 31, 2001) 
   - fixed a bug I created yesterday (TR)

0.9.9a4 (October 30, 2001) 
   - added #repeat (TR implementing Chuck's suggestion)
   - added #unless (TR implementing Mike's suggestion)
   - updates to the Users' Guide (MO)
   - fixed a small bug in the cheetah-compile script, as reported by Ian on the
     list (TR)

0.9.9a3 (October 12, 2001) 
   - more in the Users Guide (TR)
   - renamed #attribute as #attr  (TR)
   - renamed #call as #silent (TR)
   - added #echo directive (TR)
 
0.9.9a2 (October 11, 2001) 
   - updated the example site and the SkeletonPage framework (TR)
   - fixed some small bugs (TR)
   - corrected some typos in the docs (TR + MO)
   - added Ian's sitehiearchy class to Cheetah.Tools (TR + IB)

0.9.9a1 (October 9, 2001)  [many changes and bug-fixes]
   - a complete reimplementation of Cheetah's core (the parser and compiler
     classes) (TR + IB)

   - implemented the #def, #implements, #import, and #from directives
     + removed #redefine and #macros
     + renamed #extend as #extends (TR + IB)

   - replaced #data with #settings, see the docs (TR)

   - restructured and updated the docs (TR + MO + IB)

   - reimplemented the cheetah-compile script, without the -g option that Ian
     had added (TR)

   - changed the signature of Template.__init__.  See the docs. (TR)

   - made #set distinguish between local and global vars.  See the docs. (TR)

   - added hundreds of new test cases (TR)

   - added the #breakpoint and #compiler-settings directives (TR)

   - started restructuring the SkeletonPage framework [not complete yet] (TR)
   - started restructuring the example sites [not complete yet] (TR)


0.9.8 (October 9, 2001)
   - added a few new language constructs (aka 'directives') to Cheetah (TR)
     #while ... #end while
     #try ... #except ... #else ... #finally ... #end try

   - fixed a bug in the handling of local vars in #for loops that was preventing
     callable local vars from being handled properly. See Chuck's post of Sept
     10. (TR)

   - fixed a pointer bug in the C version of NameMapper.valueFromSearchList()
     that was yielding undefined values for the NotFound exception when it was
     raised (TR)

   - prefaced all internal args to Template() with underscores (TR)
   - fixed the problem with parsing triple quoted strings in arg lists (TR)
   - updated the docs (TR)

0.9.8a4 (September 7, 2001)

  - Added -g (appendGen function argument), which compiles x.tmpl to xGen.py,
    with x.py being for non-generated Python code. Also changed option handling
    a little and added a comment to the top of compiled files. (IB + MO)

  - finalized the #include syntax after a lengthy discussion on the list 
    This is different from in 0.9.8a3 (TR)
        #include <ARGS> <EXPR> 
        ... uses the value of EXPR as the path of the file to include.
        
        #include <ARGS> source = <EXPR> 
        ... includes the value of the EXPR 

        where <ARGS> is 'raw' or ''

  - re-implemented the output mechanism to use streaming via Webware's
    Transaction and Response objects when available and fake it with the
    DummyTransaction DummyResponse classes when the Webware Transaction is not
    avialable. This behaviour is roughly the same as in Webware's PSP.  Will
    implement output buffering PHP-style later if there is any demand. (TR)

  - made #include a run-time directive rather than compile-time.  This is
    slower, but the semantics are better. (TR)

  - various small optimizations to the generated code (TR)

  - updated the docs (TR)


0.9.8a3 (August 22, 2001) [includes changes for 0.9.8a1 and 0.9.8a2]

  - Added package ./src/Tools/ for contributed classes/functions/packages not
    necessary to run Cheetah.  The first such class is RecursiveNull.py by Ian
    Bicking.  Added package Cheetah.Tools to list in ./setup.py . (MO)
  - Template.__init__ keyword arg 'searchList': no longer has to be a tuple.  It
    may be a list or any type that that Python's 'tuple' function accepts. (MO)
  - Template.__init__ new keyword arg 'file': this may be a filename or file
    object to read the Template Definition from.  If you use this, you must not
    pass a Template Definition string also.  New instance variables 
    ._fileName and ._fileMtime are set if a filename was passed; otherwise they
    are None. (MO)
  - CodeGenerator new function 'varNotFound_KeyError': raises KeyError if a
    placeholder name is missing when filling the template.  Disabled by default.
    (MO)  NB - this change has been superceeded by 'errorCheckers'
  - Template.getUnknowns (new method): returns a list of Placeholder Names
    missing in the Search List. (MO) - this change has been superceeded by 
    'errorCheckers'
  - made changes to Template.py, CodeGenerator.py, PlaceholderProcessor.py,
    and TagProcessor.py to enable customization of the placeholderStartToken so 
    it can be set to any character sequence, rather than just the default '$'.
    This is configurable by the Template setting 'placeholderStartToken' (TR)
  - fixed a small bug in PlaceholderProcessor.processTag() that prevented
    static caching (i.e. $*) of a value containing ''' style quotes
  - added #break and #continue (TR)
  - fixed the relative path problem with #include when using Cheetah with WebKit
    (TR)
  - implemented the #stop directive (TR)
  - fixed a bug in the macro processing that prevented macros defined inside
    #includes from being visible at the top level (TR)
  - fixed a bug in the handling of the setting 'useAutocalling' (TR)
  - fixed some bugs in the handling of macros (TR)
  - completed the transition to nested template #includes (TR)
  - added direct #includes (TR)
  - completed the transition to run-time evaluation (TR)
  - renamed the .startServer() method of Template to .compile() (TR)
  - renamed the 'delayedStart' setting as 'delayedCompile' (TR)
  - added .redefineTemplateBlock as an alias to Template.defineTemplateBlock
    (TR)
  - got relative path includes working with Webware and Cheetah.Servlet (TR)
  - lots of changes in the docs (TR & MO)
  - implemented a C version of NameMapper (TR + CE)
  - added the 'errorCheckers' framwork (TR)
  - added the 'formatters' framework and the #formatter directive
  - a major restructuring of the modules and internal API (TR)
  - made sure that all the #directives with start and end tags are
    implemented in such a way that they won't cause 'maximum recursion' limit
    errors if their content block is long.  Simple regexes didn't cut it in these 
    cases. (TR)
    - #macro
    - multiline comments
    - #data
    - #block
    - #raw
    - the parsing of the core tags (the state-dependent ones) after they have been
      translated to the internal delimiters
  - made a Template.shutdown() method for cleaning up reference cycles before a 
    template object is deleted. (TR)
  - made the parsing and processing of #macros() more robust (TR)
  - implemented the file update checking mechanism (TR)
    NOTE, the syntax for the #include is now:
        #include <ARGS> file = <EXPR> 
        ... uses the value of EXPR as the path of the file to include.

        #include <ARGS> <EXPR> 
        ... includes the value of the EXPR 

        where <ARGS> is 'raw' or 'direct'

 
0.9.7 (July 13, 2001)

  - reimplemented the parsing of $placeholders using the Python tokenize module (TR)
    - now translates into Python code instead of going through NameMapper for
      each request
    - supports arg lists and nested placeholders
    - maintained support for autocalling of functions and methods,
      will do this serially for $func.otherFunc, etc.
  - reimplemented the #include and #raw directives using nested templates for
    parsed includes and  string attributes of 'Template' to store raw text
    The support for file update monitoring of includes is still not implemented (TR)
  - moved some stuff from __init__.py into CHANGES and TODO  (TR)
  - added a new command 'sdist_docs' to setup.py which rebuilds the docs
    when making a source distribution (TR)
  - changed the name of the ./Cheetah dir to ./src (TR)
  - fixed a bug in one of the code filters that was preventing commas from 
    being used between $placeholders (TR)
  - generalized the line ending regex for single-line comments (TR)
  - corrected the spelling of 'Delimiters' throughout Cheetah (TR)
  - made insertLines in Utilities.py more robust (Chuck)
  - added key argument to raising some NotFound exceptions in NameMapper (Chuck)
  - fixed strange bug involving missing templateObj parameter 
    in PlaceholderProcessor.py(Chuck)
  - expanded on the docs (Mike)

0.9.6 (June 12, 2001)
  - fixed a bug in NameMapper that was preventing 'obj.__class__.__name__' from mapping (TR)

0.9.5 (June 10, 2001)
  - implemented the #cache directive - see the mailing list (TR)
  - reworked the handling of cached $placeholders and set $var to mean NO_CACHE,
    $*var to mean STATIC_CACHE, and $*15*var to mean TIMED_REFRESH_CACHE (TR)
  - renamed Template._getValueForName as Template.mapName (TR)

0.9.4 (June 9, 2001)
  - created a SettingsManager base class to handle settings for the Template class (TR)
  - moved the HTML docs icons into the same dir as the HTML (TR)

0.9.3
  - updated the User's Guide Makefile. Builds HTML, PDF, and PS in the ./docs dir now. (TR)
  - changed the refs to 'Tavis Rudd' in the docs to 'The Cheetah Development Team' (TR)
  - added a few bits to the docs (TR)
  - did some internal renaming so 'nameMapperTags' are referred as 'placeholderTags' (TR)
  - added the #slurp directive (TR)
  
0.9.2
  - got the PSP plugin working again.  It still need test cases. (TR)

0.9.1
  - Changed the name of the package to 'Cheetah' from TemplateServer (TR)
  - Changed the name of the Server module and its TemplateServer class to 'Template' (TR)
  - Changed the name of the 'TScompile' script to 'cheetah-compile' (TR)
  - updated the docs (TR)

0.9.0
  - changed the names and behaviour of the #parse and #include directives (TR)
    see the docs for more. (TR)
  - changed #verbatim to #raw (TR)
  - fixed a bug in Tests.py that caused an error on the first run. (TR)
  - more docs (TR + MO)
  ! all tests pass with Python 2.1 and 2.0 (TR)
  
0.8.4
  - changed the #directive end tags to #end if instead of #/if and #end (TR)
    macro instead of #/macro (TR)
  - more work on the User's Guide (TR)
  - fixed a bug in TScompile (TR)
  
0.8.3
  - fixed a problem with the regexs that caused $vars and #directives at the (TR)
    very beginning of the template string not to match in Python 2.0 (TR)
  - removed some Test cases that made invalid assumptions about the order (TR)
    of items in dictionaries. (TR)

0.8.2
  - finished half of the User's Guide (TR)
  - fixed several small bugs (TR)
  - added the #comment directive and removed the old <# multiline comment tag #> (TR)
  - changed the explicit directive closure to /# from ;# (TR)

  
0.7.6
  - several small bug fixes (TR)
  - reimplemented the #block directive to avoid maximum recursion depth errors (TR)
    with large blocks. (TR)
  - created many new test cases in the regression testing suite (TR)
  - added an example site to the examples/ directory (TR)
  - started the User's Guide (TR)

0.7.5
  - implemented the command-line compiler (TR)

0.7.3-4
  - implemented the regression testing suite (TR)
  - fixed a number of small bugs (TR)

0.7.2
  - implemented the #longMacro directive (TR)


================================================================================
KEY TO INITIALS USED ABOVE:
TR - Tavis Rudd
CE - Chuck Esterbrook
MO - Mike Orr
IB - Ian Bicking
MH - Mike Halle