summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Tyler Ballance <tyler@slide.com>2009-04-05 22:04:45 -0700
committerR. Tyler Ballance <tyler@slide.com>2009-04-05 22:04:45 -0700
commit72e5c4d9b352c4c34c638fc4189c63be8acab1d7 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent288616e4ea45cd40f16fba8055ad01d8e3e8ce66 (diff)
downloadpython-cheetah-72e5c4d9b352c4c34c638fc4189c63be8acab1d7.tar.gz
Nuke the entire old version of the site
Signed-off-by: R. Tyler Ballance <tyler@slide.com>
-rw-r--r--contribute.html112
-rw-r--r--credits.html189
-rw-r--r--docs/CHANGES1595
-rw-r--r--download.html93
-rw-r--r--examples.html108
-rwxr-xr-ximages/banner copy.jpgbin23108 -> 0 bytes
-rwxr-xr-ximages/banner2.jpgbin18926 -> 0 bytes
-rwxr-xr-ximages/banner3.jpgbin16867 -> 0 bytes
-rwxr-xr-ximages/banner_cheetah.jpgbin13047 -> 0 bytes
-rwxr-xr-ximages/banner_text.gifbin1224 -> 0 bytes
-rw-r--r--images/blank.gifbin1958 -> 0 bytes
-rw-r--r--images/bottom_border_shadow.gifbin90 -> 0 bytes
-rw-r--r--images/bottom_plus_leftcorner_border_shadow.gifbin535 -> 0 bytes
-rwxr-xr-ximages/cheetah-face-black-medium.jpgbin8734 -> 0 bytes
-rwxr-xr-ximages/cheetah-face-black.jpgbin57091 -> 0 bytes
-rwxr-xr-ximages/cheetah-face-original.jpgbin52832 -> 0 bytes
-rwxr-xr-ximages/cheetah-face.jpgbin56940 -> 0 bytes
-rwxr-xr-ximages/cheetah-face_medium.jpgbin8832 -> 0 bytes
-rw-r--r--images/cheetah-homepage-title.gifbin8436 -> 0 bytes
-rw-r--r--images/contents.gifbin438 -> 0 bytes
-rw-r--r--images/img1.gifbin132 -> 0 bytes
-rw-r--r--images/img2.gifbin200 -> 0 bytes
-rw-r--r--images/index.gifbin289 -> 0 bytes
-rw-r--r--images/leftcorner_border_shadow.gifbin100 -> 0 bytes
-rw-r--r--images/modules.gifbin385 -> 0 bytes
-rw-r--r--images/next.gifbin253 -> 0 bytes
-rw-r--r--images/previous.gifbin252 -> 0 bytes
-rw-r--r--images/right_border_shadow.gifbin90 -> 0 bytes
-rw-r--r--images/sourceforge_logo.gifbin6429 -> 0 bytes
-rwxr-xr-ximages/spacer.gifbin43 -> 0 bytes
-rw-r--r--images/top_border_shadow.gifbin90 -> 0 bytes
-rw-r--r--images/up.gifbin316 -> 0 bytes
-rw-r--r--index.html247
-rw-r--r--learn.html175
-rw-r--r--praise.html424
-rw-r--r--screen.css282
-rw-r--r--whouses.html239
37 files changed, 0 insertions, 3464 deletions
diff --git a/contribute.html b/contribute.html
deleted file mode 100644
index c5f8432..0000000
--- a/contribute.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="latin-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Cheetah Community Engine - The Python-Powered Template Engine</title>
-<link rel="stylesheet" href="screen.css" type="text/css" />
-</head>
-
-<body class="contribute"> <div class="banner" align="center">
- <a href="index.html"><img
- class="bannerImg" src="images/cheetah-face-black-medium.jpg" alt="" /></a>
-
- <a href="index.html"><img class="bannerText" src="images/banner_text.gif"
- alt="Cheetah Community Edition: The Python-Powered Template Engine" /></a>
- </div>
- <div class="pageOuterWrapper" align="center">
- <div class="pageInnerWrapper0">
- <div class="pageInnerWrapper1">
- <div align="center" class="navBarContainer">
- <a class="navBar "
- href="index.html">Overview</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="download.html">Download</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="learn.html">Docs</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="examples.html">Examples</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="whouses.html">Who Uses It?</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="praise.html">Testimonials</a>
-<span class="navBarSep">|</span> <a class="navBar activePage"
- href="contribute.html">Help Out</a>
- </div>
-
- <div class="pageInnerWrapper2">
- <div class="pageInnerWrapper3">
- <div class="pageInnerWrapper4">
- <div class="pageInnerWrapper5">
-
- <p>Cheetah is the work of <a href="credits.html">many volunteers</a>. If
- you use Cheetah, share your experiences, tricks, customizations, and
- frustrations. Please join the <a
- href="http://lists.sourceforge.net/mailman/listinfo/cheetahtemplate-discuss">mailing
- list</a>.</p>
-
- <h3>Publicity</h3>
-
- <p>Help spread the word: blog about it, write articles about it, recommend it
- to others, etc.</p>
-
- <h3>Bug reports and patches</h3>
-
- <p>If you think there is a bug in Cheetah, send a message to the email list with
- the following information:</p>
-
- <ol>
- <li>a description of what you were trying to do and what happened</li>
- <li>all tracebacks and error output</li>
- <li>your version of Cheetah</li>
- <li>your version of Python</li>
- <li>your operating system</li>
- <li>whether you have changed anything in the Cheetah installation</li>
- </ol>
-
- <h3>Example sites and tutorials</h3>
-
- <p>If you&#39;re developing a website with Cheetah, please send a link to the
-
- email list so we can keep track of Cheetah sites. Also, if you discover new
- and interesting ways to use Cheetah please share your experience and write a
- quick tutorial about your technique.</p>
-
- <h3>Test cases</h3>
- <p>Cheetah is packaged with a regression testing suite that is run with each
- new release to ensure that everything is working as expected and that recent
- changes haven&#39;t broken anything. The test cases are in the Cheetah.Tests
-
- module. If you find a reproduceable bug please consider writing a test case
- that will pass only when the bug is fixed. Send any new test cases to the
- email list with the subject-line "new test case for Cheetah." </p>
-
-
-
- <div class="attributionFooter"> Cheetah was created by Tavis
- Rudd, a freelance programmer and designer, with <a
- href="credits.html">contributions from many open source
- volunteers</a>.<br/>Its documentation is edited by Mike Orr, who
- also wrote its command line tool.</div> <img src="http://sourceforge.net/sflogo.php?group_id=28961&amp;type=1"
- width="0" height="0"
- border="0" alt="SourceForge.net Logo" />
-
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="copyrightFooter" align="left">
- Copyright &copy; 2001-2009 Tavis Rudd. All rights reserved.
- </div>
- </div>
-</body>
-</html>
-
-
-
-
-
diff --git a/credits.html b/credits.html
deleted file mode 100644
index 8210827..0000000
--- a/credits.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="latin-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Cheetah Community Engine - The Python-Powered Template Engine</title>
-<link rel="stylesheet" href="screen.css" type="text/css" />
-</head>
-
-<body class="credits"> <div class="banner" align="center">
- <a href="index.html"><img
- class="bannerImg" src="images/cheetah-face-black-medium.jpg" alt="" /></a>
-
- <a href="index.html"><img class="bannerText" src="images/banner_text.gif"
- alt="Cheetah Community Edition: The Python-Powered Template Engine" /></a>
- </div>
- <div class="pageOuterWrapper" align="center">
- <div class="pageInnerWrapper0">
- <div class="pageInnerWrapper1">
- <div align="center" class="navBarContainer">
- <a class="navBar "
- href="index.html">Overview</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="download.html">Download</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="learn.html">Docs</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="examples.html">Examples</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="whouses.html">Who Uses It?</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="praise.html">Testimonials</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="contribute.html">Help Out</a>
- </div>
-
- <div class="pageInnerWrapper2">
- <div class="pageInnerWrapper3">
- <div class="pageInnerWrapper4">
- <div class="pageInnerWrapper5">
-
-<p>Cheetah was created by Tavis Rudd, a freelance programmer and designer, with
-contributions from many open source volunteers. Its documentation is edited by
-Mike Orr, who also wrote its command line tool. The Community Edition of Cheetah
-is being maintained by R. Tyler Ballance of Slide, Inc, but is contributed to by
-the members of the Cheetah community.</p>
-
-<p>We&#39;d like to thank the following people for contributing valuable
-advice, encouragement, code and bug reports: </p>
-
-<ul>
- <li>Aaron Held</li>
- <li>Alex Le Dain</li>
- <li>Alex Martelli</li>
- <li>Alvaro Tejero Cantero</li>
- <li>Andrea Arcangeli</li>
- <li>Andreas Poisel</li>
- <li>Andrew Glover</li>
- <li>Andrew Johnson</li>
- <li>Arkaitz Bitorika</li>
- <li>Baruch Even</li>
- <li>Bob Van Zant</li>
- <li>Brian Bird</li>
- <li>Chad Walstrom</li>
- <li>Chris Murphy</li>
- <li>Christoph Zwerschke</li>
- <li>Christophe Eymard</li>
- <li>Chuck Esterbrook</li>
- <li>Chui Tey</li>
- <li>Clark C. Evans</li>
- <li>Craig Kattner</li>
- <li>David Warnock</li>
- <li>Deelan</li>
- <li>Dirk Hoffmann</li>
- <li>Donnie Hale</li>
- <li>Doug Wyatt</li>
- <li>Edmund Lian</li>
- <li>Eric Huss</li>
- <li>Erik Forsberg</li>
- <li>Erwin Ambrosch</li>
- <li>Evan Klitzke</li>
- <li>Federico Di Gregorio</li>
- <li>Franz Geiger</li>
- <li>Geir Magnusson</li>
- <li>Geoff Talvola</li>
- <li>Graham Dennis</li>
- <li>Graham Dumpleton</li>
- <li>Greg Czajkowski</li>
- <li>Hamish Lawson</li>
- <li>Henning Hasemann</li>
- <li>Ian Bicking</li>
- <li>James Robinson</li>
- <li>Jamieson Becker</li>
- <li>Jaroslaw Zabiello</li>
- <li>Jay Love</li>
- <li>Jeff Johnson</li>
- <li>Jeremiah Bellomy</li>
- <li>Johan Fredrik Ohman</li>
- <li>Johannes Erdfelt</li>
- <li>Jonathan Mark</li>
- <li>Jose Galvez</li>
- <li>Jurie Horneman</li>
- <li>Keith Devens</li>
- <li>Kevin Dangoor</li>
- <li>Leith Parkin</li>
- <li>Leonard Richardson</li>
- <li>Marcin Gajda</li>
- <li>Markus Jais</li>
- <li>Max Ischenko</li>
- <li>Michael Engelhart</li>
- <li>Michael Halle</li>
- <li>Michel Thadeu</li>
- <li>Mike Warren</li>
- <li>Oleg Broytmann</li>
- <li>Olivier Favre-Simon</li>
- <li>Paul Boddie</li>
- <li>Patrick K. O&#39;Brien</li>
- <li>Paul Sorenson</li>
- <li>Peyton McCullough</li>
- <li>Peter Hunt</li>
- <li>Peter Mott</li>
- <li>Peter Lyons</li>
- <li>Peter White</li>
- <li>Philippe Normand</li>
- <li>Pierre-Yves Delens</li>
- <li>Rene Pijlman</li>
- <li>Rimon Barr</li>
- <li>Robert Cowham</li>
- <li>Robert Kuzelj</li>
- <li>Rodrigo B. de Oliveira</li>
- <li>R. Tyler Ballance</li>
- <li>Scott Sanders</li>
- <li>Sasa Zivkov</li>
- <li>Satoru Satoh</li>
- <li>Shannon -jj Behrens</li>
- <li>Stephan Diehl</li>
- <li>Stephane Bortzmeyer</li>
- <li>Steve Holden</li>
- <li>Suriya Narayanan</li>
- <li>Terrel Shumway</li>
- <li>Todd Thomas</li>
- <li>Tracy Ruggles</li>
- <li>Tom Schwaller</li>
- <li>Warren Smith</li>
- <li>William Dodé</li>
- <li>Winston Wolff</li>
- <li>Zed Lopez</li>
-</ul>
-
-<p>The <a href="http://jakarta.apache.org/velocity/">Velocity</a>, <a
-href="http://www.webmacro.org/">WebMacro</a>, <a
-href="http://smarty.php.net/">Smarty</a> and <a
-href="http://www.masonhq.com/">Mason</a> projects provided inspiration and
-design ideas. Cheetah has benefited from the creativity and energy of their
-developers. Thank you.</p>
-
-<p>On a historical note, Cheetah is one of several templating frameworks that
-grew out of a "templates" thread on the <a
-href="http://www.webwareforpython.org/">Webware for Python</a> email list.</p>
-
-
-
- <div class="attributionFooter"> Cheetah was created by Tavis
- Rudd, a freelance programmer and designer, with <a
- href="credits.html">contributions from many open source
- volunteers</a>.<br/>Its documentation is edited by Mike Orr, who
- also wrote its command line tool.</div> <img src="http://sourceforge.net/sflogo.php?group_id=28961&amp;type=1"
- width="0" height="0"
- border="0" alt="SourceForge.net Logo" />
-
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="copyrightFooter" align="left">
- Copyright &copy; 2001-2009 Tavis Rudd. All rights reserved.
- </div>
- </div>
-</body>
-</html>
-
-
-
-
-
diff --git a/docs/CHANGES b/docs/CHANGES
deleted file mode 100644
index 67307d7..0000000
--- a/docs/CHANGES
+++ /dev/null
@@ -1,1595 +0,0 @@
-Please initial your changes (there's a key at bottom) and add a date for each
-release
-================================================================================
-
-2.1.1 (not yet released)
- - Support __eq__() and __ne__() the way you might expect in src/Tools/RecursiveNull (patch suggested by Peter Warasin <peter@endian.com>)
-
-2.1.0.1 (March 27, 2009)
- - Fix inline import issue introduced in v2.1.0
-
-2.1.0 (March 16, 2009)
- - Quiet DeprecationWarnings being printed to stderr when using Cheetah on Python 2.6 and up. Patch suggested by Satoru SATOH <satoru.satoh@gmail.com>
- - Apply patch to support parallel compilation of templates courtesy of Evan Klitzke <evan@eklitzke.org>
- - Corrected issue when __getattr__ calls on searchList objects raise exceptions (tyler@slide.com)
- - make autocalling in valueForName correctly ignore newstyle classes and instances
- that are callable, as it does for oldstyle classes and instances. Patch
- from lucas@endian.com
- [TR]
- - made it possible to chain multiple decorators to a method #def [TR with
- patch from Graham Dennis]
- - fixed a bug in _eatMultiLineDef that Graham Dennis reported. [TR]
- - fixed 'module.__init__() argument 1 must be string, not unicode' bug in
- Template.py reported by Erwin Ambrosch [TR]
-
-2.0.1 (Nov 16, 2007)
- - fixed a deadlock Christoph Zwerschke found in Cheetah.ImportHooks.
- [TR]
-
-2.0 (Oct 12, 2007)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- - fixed exception handling issue in the C implemenation of NameMapper
- [patch from Eric Huss]
-
- - fixed filtering of #included subtemplates
- [patch from Brian Bird]
-
- See the release notes from 2.0b1-5 and 2.0rc1-8 for other changes since
- Cheetah 1.0.
-
-
-2.0rc8 (April 11, 2007)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - added a '#unicode <encoding>' directive to indicate that the output of the
- template should be a unicode string even if the template source is a
- normal byte string.
-
- - #unicode and #encoding are mutually exclusive. Use one or the other.
- - #unicode must be on a line by itself.
- - Strings in embedded code must be explictly marked as unicode if they
- contain non-ascii chars:
-
- #unicode latin-1
- $f(u"<some non-ascii char>") ## right
- $f("<some non-ascii char>") ## wrong
-
- However, this works fine:
-
- #unicode latin-1
- blah blah <some non-ascii char> blah blah
-
- - fixed several unicode bugs in the compiler.
-
- - fixed some unicode issues in the standard filters.
-
- - fixed a few minor bugs in code that never gets called. Thanks to
- Alejandro Dubrovsky for pointing them out.
-
- - make RawOrEncodedUnicode the baseclass of all filters and remove some
- unused/redudant filters
-
- - added new compiler setting 'addTimestampsToCompilerOutput'. See Brian
- Bird's post about it. He stores his cheetah generated .py files in
- subversion and needed to disable the timestamp code so svn wouldn't care
- when he recompiles those .py modules.
-
- - added the #super directive, which calls the method from the parent class
- which has the same as the current #def or #block method.
-
- #def foo
- ... child output
- #super ## includes output of super(<CurrentClass>, self).foo()
- ... child output
- #end def
-
-
- #def bar(arg)
- ... child output
- #super(arg) ## includes output of super(<CurrentClass>, self).bar(arg)
- ... child output
- #end def
-
- - added some unit tests for the new directives
-
-
-2.0rc7 (July 4, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - extended the #implements directive so an arguments list can be declared in
- the same fashion as #def and #block.
-
- - made the parser raise ParseError when $*placeholder, $*5*placeholder,
- $(placeholder), etc. are found within expressions. They are only valid in
- top-level text.
-
- - tweaked the parser so it's possible to place a comment on the same line as
- a directive without needing to explicitly close the directive first. This
- works regardless of whether or not you added a colon.
-
- self.verify("#if 1:\n$aStr\n#end if\n",
- "blarg\n")
-
- self.verify("#if 1: \n$aStr\n#end if\n",
- "blarg\n")
-
- self.verify("#if 1: ##comment \n$aStr\n#end if\n",
- "blarg\n")
-
- self.verify("#if 1 ##comment \n$aStr\n#end if\n",
- "blarg\n")
-
- Previously, that last test would have required an extra # to close the #if
- directive before the comment directive started:
- self.verify("#if 1 ###comment \n$aStr\n#end if\n",
- "blarg\n")
-
- Code that makes use of explicit directive close tokens immediately followed by
- another directive will still work as expected:
- #if test##for i in range(10)# foo $i#end for##end if
-
- - safer handling of the baseclass arg to Template.compile(). It now does
- the right thing if the user passes in an instance rather than a class.
-
- ImportHooks: [TR]
- - made it possible to specify a list of template filename extentions that are
- looped through while searching for template modules. E.g.:
- import Cheetah.ImportHooks
- Cheetah.ImportHooks.install(templateFileExtensions=('.tmpl','.cheetah'))
-
- Core changes by MO:
- - Filters are now new-style classes.
- - WebSafe and the other optional filters in Filters.py now use
- RawOrEncodedUnicode instead of Filter as a base class. This allows them
- to work with Unicode values containing non-ASCII characters.
- User-written custom filters should inherit from
- RawOrEncodedUnicode and call the superclass .filter() instead of str().
- str() as of Python 2.4.2 still converts Unicode to string using
- ASCII codec, which raises UnicodeEncodeError if it contains non-ASCII
- characters.
-
-2.0rc6 (Feb 4, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - added a Cheetah version dependency check that raises an assertion if a
- template was compiled with a previous version of Cheetah whose templates
- must be recompiled.
-
- - made the Cheetah compilation metadata accessible via class attributes in
- addition to module globals
-
- - major improvement to exception reporting in cases where bad Python syntax
- slips past the Cheetah parser:
- """
- File "/usr/lib/python2.4/site-packages/Cheetah/Template.py", line 792, in compile
- raise parseError
- Cheetah.Parser.ParseError:
-
- Error in the Python code which Cheetah generated for this template:
- ================================================================================
-
- invalid syntax (DynamicallyCompiledCheetahTemplate.py, line 86)
-
- Line|Python Code
- ----|-------------------------------------------------------------
- 84 |
- 85 | write('\n\n')
- 86 | for i an range(10): # generated from line 4, col 1
- ^
- 87 | _v = i # '$i' on line 5, col 3
- 88 | if _v is not None: write(_filter(_v, rawExpr='$i')) # from line 5, col 3.
- 89 | write('\n')
-
- ================================================================================
-
- Here is the corresponding Cheetah code:
-
- Line 4, column 1
-
- Line|Cheetah Code
- ----|-------------------------------------------------------------
- 2 |#compiler useNameMapper=False
- 3 |
- 4 |#for i an range(10)
- ^
- 5 | $i
- 6 |#end for
- 7 |
- """
-
-2.0rc5 (Feb 3, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - fixed a memory leak in Template.compile(), reported by Andrea Arcangeli
- - simplified concurrency locking and compile caching in Template.compile()
-
- The command line tool (CheetahWrapper.py):
- - added new option --settings for supplying compiler settings
- - added new option --templateAPIClass to replace the environment var
- CHEETAH_TEMPLATE_CLASS lookup I added in 2.0b1
-
-2.0rc4 (Jan 31, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - fixed a typo-bug in the compile hashing code in Template.compile()
- - improved the macros framework and made it possible to implement macros in
- Python code so they can be shared between templates
- - more work on the #i18n directive. It's now a macro directive.
- - added new Cheetah.Macros package
- - more tests
-
-2.0rc3 (Jan 29, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - added short-form single line versions of all directives that have an #end
- tag, except for #errorCatcher:
- #if, #else, #elif, #unless,
- #for, #while, #repeat,
- #try, #except, #finally,
- #cache, #raw
- #call, #capture
-
- The #def and #block directives already had single-line versions.
- #if cond: foo
- #elif cond2: bar
- #else: blarg
-
- #for i, val in enumerate(vals): $i-$val
-
- Note that if you accidentally leave a colon at the end of one of these
- directives but nothing else follows it, aside from whitespace, the parser
- will treat it as a normal multi-line directive.
-
- The first leading space after the colon is discarded. Any additional
- spaces will be included in the output.
-
- Also note, if you use the short form versions of #if/#else/#elif you must
- it for all three. The following is not valid:
- #if cond: foo
- #elif cond2
- bar
- #else: blarg
-
- - added support for $!silentModePlaceholders
- This is the same as quiet mode in Velocity:
- http://jakarta.apache.org/velocity/docs/user-guide.html#Quiet%20Reference%20Notation
-
- - added support for function/method @decorators. It also works with blocks.
- As in vanilla Python, the @decorator statement must be followed with a
- function/method definition (i.e. #def or #block).
-
- #from xxx import aDecorator
- ...
- ...
- #@aDecorator
- #def func
- foo
- #end def
-
- #@aDecorator
- #def singleLineShortFormfunc: foo
-
- #@aDecorator
- #block func2
- bar
- #end block
-
- - added a new callback hook 'handlerForExtendsDirective' to the compiler settings. It
- can be used to customize the handling of #extends directives. The
- callback can dynamically add import statements or rewrite the baseclass'
- name if needed:
- baseClassName = handler(compiler, baseClassName)
- See the discussion on the mailing list on Jan 25th for more details.
-
- - changed the default filter to the one that doesn't try to encode Unicode
- It was 'EncodeUnicode' and is now 'RawOrEncodedUnicode'.
-
- - added optional support for parsing whitespace between the directive start
- token (#) and directive names, per Christophe Eymard's request. For the
- argument behind this see the mailing list archives for Jan 29th. This is
- off by default. You must turn it on using the compiler setting
- allowWhitespaceAfterDirectiveStartToken=True
-
- #for $something in $another
- # for $somethin2 in $another2
- blahblah $something in $something2
- # end for
- #end for
-
- - made the handling of Template.compile()'s preprocessors arg simpler and
- fixed a bug in it.
-
- - fixed attribute name bug in the .compile() method (it affected the feature
- that allows generated module files to be cached for better exception
- tracebacks)
-
- - refactored the #cache/CacheRegions code to support abitrary backend cache
- data stores.
-
- - added MemcachedCacheStore, which allows cache data to be stored in a
- memcached backend. See http://www.linuxjournal.com/article/7451 and
- http://www.danga.com/memcached/. This is only appropriate for systems
- running many Python server processes that need to share cached data to
- reduce memory requirements. Don't bother with this unless you actually
- need it. If you have a limited number of Python server processes it is
- much faster, simpler, and more secure to just cache in the memory of each
- process.
-
- KEEP MEMCACHED'S LIMITED SECURITY IN MIND!! It has no authentication or
- encryption and will introduce a gaping hole in your defenses unless you
- are careful. If you are caching sensitive data you should take measures
- to ensure that a) untrusted local system users cannot connect to memcached
- server, b) untrusted external servers cannot connect, and c) untrusted
- users on trusted external servers cannot connect. Case (a) can be dealt
- with via iptable's owner match module for one way to do this: "iptables -A
- ... -m owner ..." Cases (b) and (c) can be handled by tunnelling
- memcached network connections over stunnel and implementing stunnel
- authentication with mandatory peer/client certs.
-
- - some under-the-hood refactoring of the parser
-
- - made it possible to add custom directives, or customize the
- parsing/handling of existing ones, via the compiler settings
- 'directiveNamesAndParsers' and 'endDirectiveNamesAndHandlers'
-
- - added a compile-time macro facility to Cheetah. These macros are very
- similar to macros in Lisp:
- http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html.
-
- As with Lisp macros, they take source code (Cheetah source) as input and
- return source code (again Cheetah source) as output. They are executed at
- compile-time, just like in Lisp and C. The resultant code
- gets executed at run-time.
-
- The new #defmacro directive allows users to create macros inside the
- source of their templates. Macros can also be provided via the compiler
- setting 'macroDirectives'. The 'macroDirectives' setting allows you to
- share common macros between templates.
-
- The syntax for the opening tag of #defmacro is the same as for #def and
- #block. It expects a macro name followed by an optional argument list in
- brackets. A `src` argument is automatically added to the beginning of
- every macro's argument list. The value of the `src` is the block of
- input source code that is provided during a macro call (see below).
-
- #defmacro <macroname>[(argspec)]
- <macrobody>
- #end defmacro
-
- All of Cheetah's syntax is available for use inside macros, but the
- placeholderStartToken is @ instead of $ and the
- directiveStartToken/EndToken is % instead of #. Any syntax using the
- standard $/# tokens will be treated as plain text and included in the output
- of the macro.
-
- Here are some examples:
- #defmacro addHeaderFooter
- header
- @src
- footer
- #end defmacro
-
- #defmacro addHeaderFooter(header='h', footer='f')
- @header
- @src
- @footer
- #end defmacro
-
- There is a single-line short form like for other directives:
-
- #defmacro addHeaderFooter: header @src footer
- #defmacro addHeaderFooter(header='h', footer='f'): @header @src @footer
-
- The syntax for calling a macro is similar to the simplest usage of the
- #call directive:
-
- #addHeaderFooter
- Source $code to wrap
- #end addHeaderFooter
-
- #addHeaderFooter: Source $code to wrap
-
- #addHeaderFooter header='header', footer='footer: Source $code to wrap
-
-
- In Elisp you write
- (defmacro inc (var)
- (list 'setq var (list '1+ var)))
- to define the macro `inc` and write
- (inc x)
- which expands to
- (setq x (1+ x))
-
- In Cheetah you'd write
- #defmacro inc: #set @src +=1
- #inc: $i
- which expands to
- #set $i += 1
-
- print Template("""\
- #defmacro inc: #set @src +=1
- #set i = 1
- #inc: $i
- $i""").strip()==2
-
- - fixed some bugs related to advanced usage of Template.compile(). These
- were found via new unit tests. No one had actually run into them yet.
-
- - added the initial bits of an #i18n directive. It has the same semantics
- as
- #call self.handleI18n
- Some $var cheetah source
- #end call
- but has a simpler syntax:
- #i18n
- Some $var cheetah source
- #end i18n
-
- ## single-line short form:
- #i18n: Some $var cheetah source
-
- The method it calls, self.handleI18n, is just a stub at the moment, but it
- will soon be a wrapper around gettext. It currently has one required
- positional argument `message`. I anticipate supporting the following
- optional arguments:
-
- id = msgid in the translation catalog
- domain = translation domain
- source = source lang
- target = a specific target lang
- comment = a comment to the translation team
-
- plural = the plural form of the message
- n = a sized argument to distinguish between single and plural forms
-
- #i18n is executed at runtime, but it can also be used in conjunction with
- a Cheetah preprocessor or macro (see above) to support compile time
- translation of strings that don't have to deal with plural forms.
-
- - added Cheetah.Utils.htmlEncode and Cheetah.Utils.htmlDecode
-
- - more docstring text
-
- Unit tests: [TR]
- - extended the caching tests
- - added tests for the various calling styles of Template.compile()
- - added copies of all the SyntaxAndOutput tests that use a template
- baseclass other than `Template`. This ensures that all syntax & core
- features work with 2.0's support for arbitrary baseclasses.
- - added tests for all the new directives and the new single-line short forms
-
-2.0rc2 (Jan 13th, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - fixed some python 2.4isms that slipped in. All the tests pass with Python
- 2.2 now
- - added lots more docstring content in the Template class
- - made multiline comments gobble whitespace like other directives, per JJ's
- request. The rather longwinded compiler setting
- gobbleWhitespaceAroundMultiLineComments can be used to go back to the old
- non-gobbling behaviour if needed.
- - added #capture directive to complement the #call directive.
- #call executes a region of Cheetah code and passes its output into a function call
- #capture executes a region of Cheetah code and assigns its output to a variable
- - extended the compile caching code in Template.compile so it works with the
- 'file' arg.
- - added cacheModuleFilesForTracebacks and cacheDirForModuleFiles args to
- Template.compile(). See the docstring for details.
- - misc internal refactoring in the parser
- - improved handling of keyword args in the __init__ method and fixed a
- potential clash between the namespaces and searchList args
-
- WWW: [TR]
- - added the source for the new Cheetah website layout/content
-
-2.0rc1 (Jan 10, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - made it possible nest #filter directives
- - added lots more docstring content in the Template class
- - added Template.subclass() classmethod for quickly creating subclasses of
- existing Cheetah template classes. It takes the same args as the
- .compile() classmethod and returns a template that is a subclass of the
- template .subclass() is called from:
- T1 = Template.compile(' foo - $meth1 - bar\n#def meth1: this is T1.meth1')
- T2 = T1.subclass('#implements meth1\n this is T2.meth1')
-
- - added baseclass arg to Template.compile(). It simplifies the reuse of
- dynamically compiled templates:
- # example 1, quickly subclassing a normal Python class and using its
- # __init__ call signature:
- dictTemplate = Template.compile('hello $name from $caller', baseclass=dict)
- print dictTemplate(name='world', caller='me')
-
- # example 2, mixing a Cheetah method into a class definition:
- class Foo(dict):
- def meth1(self):
- return 'foo'
- def meth2(self):
- return 'bar'
- Foo = Template.compile('#implements meth3\nhello $name from $caller',
- baseclass=Foo)
- print Foo(name='world', caller='me')
-
- A side-benefit is the possibility to use the same Cheetah source with
- several baseclass, as the baseclass is orthogonal to the source code,
- unlike the #extends directive.
-
- - added 'namespaces' as an alias for 'searchList' in Template.__init__
- - made it possible to pass in a single namespace to 'searchList', which will
- automatically be converted into a list.
- - fixed issue with buffering and use of #call when template is used as a
- webkit servlet
- - added Cheetah.Utils.htmlEncode and htmlDecode
-
- The command line tool (CheetahWrapper.py):
- - changed insertion order for the --env and --pickle options so they match the
- commandline UI of the compiled template modules themselves [TR]
-
-2.0b5 (Jan 7, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - made Cheetah.Template a new-style class by inserting 'object' into its'
- inheritance tree. Templates can now use super(), properties and all the
- other goodies that come with new-style classes.
- - removed the WebInputMixin by placing its one method directly in the
- Template class.
- - removed the SettingsManager Mixin. It wasn't being used by anything
- anymore.
- - added a framework for caching the results of compilations in
- Template.compile(). This is on by default and protects against bad
- performance issues that are due to programmers misguidedly compiling
- templates inside tight loops. It also saves on memory usage.
- - misc attr name changes to avoid namespace pollution
- - more + improved docstrings
- - replaced the oldstyle dynamic compile hacks with a wrapper around
- Template.compile(). The old usage pattern Template(src) now benefits from
- most of the recent changes.
- Template(src).__class__ == Template.compile(src)
- - removed all the extra imports required by oldstyle dynamic compile hacks
- - converted the cheetah #include mechanism to newstyle compilation and made it
- more flexible
- - made the #include mechanism work with file objects in addition to file names
- - made the handling of args to Template.compile() more flexible. You can now
- provide defaults via class attributes.
- - made preprocessors for Template.compile() work with file arguments
- - added support for specifying a __metaclass__ on cheetah template classes
- - refactored both the class and instance initialization processes
- - improved the handling of __str__ in _assignRequiredMethodsToClass
-
- The command line tool (CheetahWrapper.py): [TR]
- - improved error output in CheetahWrapper
- - switched fill command over to new style compile usage
-
- Unit tests: [TR]
- - fixed format string bug in unittest_local_copy.py
-
-2.0b4 (Jan 6, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - fixed up parsing of target lists in for loops. This was previously limited
- to fairly simple target lists.
- #for ($i, $j) in [('aa','bb'),('cc','dd')]
- $i.upper,$j.upper
- #end for"
- #for (i, j) in [('aa','bb'),('cc','dd')]
- $i.upper,$j.upper
- #end for"
- #for i,(j, k) in enumerate([('aa','bb'),('cc','dd')])
- $j.upper,$k.upper
- #end for"
-- refactored the class initialization process
- - improved handling of target lists in #set directive. This was previously
- limited to fairly simple target lists.
- #set i,j = [1,2] ... #set $i,$j = [1,2]
- #set (i,j) = [1,2] ... #set ($i,$j) = [1,2]
- #set i, (j,k) = [1,(2,3)] ... #set $i, ($j,$k) = [1,(2,3)]
-
- - made it possible for the expressionFilter hooks to modify the code chunks
- they are fed. Also documented the hooks in a docstring. Thus the hooks
- can be used as preprocessors for expressions, 'restricted execution', or
- even enforcement of style guidelines.
-
- - removed cheetah junk from docstrings and placed it all in comments or
- __moduleVars__. Per JJ's suggestion.
-
- - made it possible to nest #cache directives to any level
- - made it possible to nest #call directives to any level
-
- Unit Tests [TR]
- - extended tests for #for directive
- - expanded tests for #set directive
- - expanded tests for #call directive
- - expanded tests for #cache directive
- - added basic tests for the new $placeholder string expressions:
- c'text $placeholder text'
-
-2.0b3 (Jan 5, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
- - added #yield statement
- - added ability to create nested scopes/functions via nested #def statements
- - added new #call directive and related #arg directive, per Ian Bicking's
- suggestion.
- - added new expression syntax c"text $placeholder text"
-
- for those basic function calling cases where you just need to pass in a
- small bit of cheetah output as an argument:
-
- c'a string with $placeholders',
- c'''a string with $placeholders''',
- c"a string with $placeholders",
- c"""a string with $placeholders"""
-
- - They can't contain #directives, but accept any valid $placeholder syntax
- except caching placeholders. Caching placeholders don't make any sense in
- this context.
- - They can be used *any* place where a python expression is expected.
- - They can be nested to any depth.
-
- $func(c'<li>$var1-$var2</li>')
- $func(c'<li>$var1-$var2</li>', doSomething=True)
- $func(content=c'<li>$var1-$var2</li>', doSomething=True)
- $func(lambda x,y: c'<li>$x-$y</li>')
- $func(callback=lambda x,y: c'<li>$x-$y</li>')
- $func(lambda x,y: c'<li>$x-$y-$varInSearchList</li>')
- $func(c'<li>$var1-$var2-$(var3*10)-$(94.3*58)</li>')
- $func(c'<li>$var1-$var2-$func2(c"a nested expr $var99")</li>')
- #if $cond then c'<li>$var1-$var2</li>' else c'<p>$var1-$var2</p>'
- #def foo(arg1=c'$var1<span class="foo">$var2</span>'): blah $arg1 blah
- $foo(c'$var1<i>$var2</i>')
-
- - added preprocessor hooks to Template.compile()
- can be used for partial completion or 'compile-time-caching'
- ... more details and examples coming. It's very useful, but takes a bit
- of explaining.
- - added '#set module varName = expr' for adding module globals. JJ's suggestion
- - improved generated docstring notes about cached vars
- - fixed silly bug related to """ in docstring comments and statements like
- this '#def foo: $str("""foo""")'. Reported by JJ.
- - changed the handling of single-line defs so that
- '#def xxx:<just whitespace>\n' will be treated as a multi-line #def.
- The same applies to #block. There's a compiler setting to turn this off
- if you really need empty single-line #def:'s.
- JJ reported that this was causing great confusion with beginners.
- - improved error message for unclosed directives, per Mike Orr's suggestion.
- - added optional support for passing the trans arg to methods via **KWS rather
- than trans=None. See the discussion on the mailing list Jan 4th (JJ's post) for
- details. The purpose is to avoid a positional argument clash that
- apparently is very confusing for beginners.
-
- Note that any existing client code that passing the trans arg in
- positionally rather than as a keyword will break as a result. WebKit
- does this with the .respond method so I've kept the old style there.
- You can also turn this new behaviour off by either manually including
- the trans arg in your method signature (see the example below) or by
- using the compiler setting 'useKWsDictArgForPassingTrans'=False.
-
- #def manualOverride(arg1, trans=None)
- foo $arg1
- #end def
-
- ImportHooks:
- - made the ImportHook more robust against compilation errors during import [TR]
-
- Install scripts: [TR]
- - added optional support for pje's setuptools
- - added cheeseshop classifiers
- - removed out of date install instructions in __init__.py
-
- Servlet Base Class For Webkit: [TR]
- - disabled assignment of self.application (was a webware hack)
-
- Unit Tests: [TR]
- - unit tests for most of the new syntax elements
- - tidied up some old tests
- - misc refactoring
-
-2.0b2 (Dec 30, 2005)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- Core Changes:
- - In previous versions of Cheetah tracebacks from exceptions that were raised
- inside dynamically compiled Cheetah templates were opaque because
- Python didn't have access to a python source file to use in the traceback:
-
- File "xxxx.py", line 192, in getTextiledContent
- content = str(template(searchList=searchList))
- File "cheetah_yyyy.py", line 202, in __str__
- File "cheetah_yyyy.py", line 187, in respond
- File "cheetah_yyyy.py", line 139, in writeBody
- ZeroDivisionError: integer division or modulo by zero
-
- It is now possible to keep the generated source code from the python
- classes returned by Template.compile() in a cache dir. Having these files
- around allows Python to include the actual source lines in tracebacks and
- makes them much easier to understand:
-
- File "/usr/local/unsnarl/lib/python/us/ui/views/WikiPageRenderer.py", line 192, in getTextiledContent
- content = str(template(searchList=searchList))
- File "/tmp/CheetahCacheDir/cheetah_yyyy.py", line 202, in __str__
- def __str__(self): return self.respond()
- File "/tmp/CheetahCacheDir/cheetah_yyyy.py", line 187, in respond
- self.writeBody(trans=trans)
- File "/tmp/CheetahCacheDir/cheetah_yyyy.py", line 139, in writeBody
- __v = 0/0 # $(0/0)
- ZeroDivisionError: integer division or modulo by zero
-
- This is turned off by default. To turn it on, do this:
-
- class NiceTracebackTemplate(Template):
- _CHEETAH_cacheModuleFilesForTracebacks = True
- _CHEETAH_cacheDirForModuleFiles = '/tmp/CheetahCacheDir' # change to a dirname
-
- templateClass = NiceTracebackTemplate.compile(src)
-
- # or
- templateClass = Template.compile(src,
- cacheModuleFilesForTracebacks=True, cacheDirForModuleFiles='/tmp/CheetahCacheDir')
-
-
- This only works with the new Template.compile(src) usage style!
-
- Note, Cheetah generated modules that are compiled on the command line have
- never been affected by this issue. [TR]
-
- - added an extra comment per $placeholder to generated python code so it is
- easier to grok. [TR]
-
-2.0b1 (Dec 29, 2005)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- Core Changes:
- - enabled use of any expression in ${placeholders}. See the examples I posted to
- the email list on Dec 12th. All use cases of the #echo directive can now
- be handled with ${placeholders}. This came from a suggestion by Mike
- Orr. [TR]
-
- - made it possible for templates to #extend (aka subclass) any arbitrary
- baseclass, including Python's new style classes. You must either compile
- your classes on the command line or use the new classmethod
- Template.compile() as described below. The old Template(src) interface
- still works, provided you don't try to use this new arbitrary baseclass
- stuff. See my messages to the email list for more details. [TR]
-
- - made it possible to create template classes dynamically, rather than just
- instances. See the new classmethod Template.compile(). See my messages
- to the email list for more details. [TR]
-
- klass = Template.compile(src)
-
- - made it easier to work with custom compiler settings, particularly from
- the command line tool. You can now define a subclass of Template which
- will compile your templates using custom compilerSettings, or even a
- custom compiler class, without requiring you to manually pass in your
- compilerSettings each time or define them in the template src itself via
- the #compiler directive. You can make the command line tool use your
- subclass by defining the environment variable CHEETAH_TEMPLATE_CLASS. It
- should be in the form 'package.module:class'. See my messages
- to the email list for more details. [TR]
-
- - made it possible to pass the searchList in as an argument to #def'ined
- methods. This makes all lookup that occur within the scope of that method
- use the provided searchList rather than self._searchList. This does not
- carry over to other methods called within the top method, unless they
- explicitly accept the searchList in their signature AND you pass it to
- them when calling them. This behaviour can be turned off with the
- corresponding compilerSetting 'allowSearchListAsMethArg' [TR]
-
- - added hooks for filtering / restricting dangerous stuff in cheetah source
- code at compile time. These hooks can be used to enable Cheetah template
- authoring by untrusted users. See my messages to the email list for more
- details. Note, it filters expressions at parse/compile time, unlike Python's
- old rexec module which restricted the Python environment at runtime. [TR]
-
- # Here are the relevant compiler settings:
- # use lower case keys here!!
- 'disabledDirectives':[], # list of directive keys, without the start token
- 'enabledDirectives':[], # list of directive keys, without the start token
-
- 'disabledDirectiveHooks':[], # callable(parser, directiveKey),
- # called when a disabled directive is found, prior to raising an exception
-
- 'preparseDirectiveHooks':[], # callable(parser, directiveKey)
- 'postparseDirectiveHooks':[], # callable(parser, directiveKey)
-
- 'preparsePlaceholderHooks':[], # callable(parser)
- 'postparsePlaceholderHooks':[], # callable(parser)
-
- 'expressionFilterHooks':[],
- # callable(parser, expr, exprType, rawExpr=None, startPos=None)
- # exprType is the name of the directive, 'psp', or 'placeholder'.
- #all lowercase
-
- - added support for a short EOLSlurpToken to supplement the #slurp
- directive. It's currently re.compile('#\s*\n') (i.e # followed by
- arbitrary whitespace and a new line), but this is not set in stone. One
- other suggestion was the backslash char, but I believe Python's own
- interpretation of backslashes will lead to confusion. The compiler
- setting 'EOLSlurpToken' controls this. You can turn it off completely by
- setting 'EOLSlurpToken' to None. See the email list for more details. [TR]
-
- - added '_CHEETAH_' prefix to all instance attribute names in compiled
- templates. This is related to the arbitrary baseclass change. [TR]
-
- - shifted instance attribute setup to _initCheetahAttributes() method. This
- is related to the arbitrary baseclass change. [TR]
-
- - made it possible to use full expressions in the #extends directive, rather
- than just dotted names. This allows you to do things like this:
-
- #from xx.TemplateRepository import getTemplateClass
- #extends getTemplateClass('someName')
-
- I don't expect this to be used much. I needed it for a wiki system in
- which the baseclasses for the templates are dynamically compiled at run
- time and are not available via simple imports. [TR]
-
- - added compiler setting autoImportForExtendDirective=True, so this existing
- default behaviour can be turned off when needed. [TR]
-
- - fixed a bug in the parsing of single-line #def's and #block's when they
- are enclosed within #if ... #end if. Reported by Marcin Gajda [TR]
-
- - tweak to remove needless write('') calls in generated code [TR]
-
- The command line tool (CheetahWrapper.py):
- - added code to cleanup trailing slashes on path arguments (code originally
- from Mike Orr) [TR]
- - turned on the ImportHooks by default for the 'cheetah fill' command. See the
- discussion on the email list [TR]
-
- ImportHooks:
- - fixed a name error bug in the ImportHooks [TR]
-
-1.0 (Dec 4, 2005)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- Version bump from 1.0rc3
-
-1.0rc3 (Nov 30, 2005)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- - added useSearchList compiler setting [TR]
- This defaults to True, but if false, the compiler assumes the first
- portion of a $variable (before the first dot) is a global, builtin, or local
- var that doesn't need looking up in the searchlist. NameMapper's unified
- dotted notation will still be used on the rest of the lookup (provide the
- setting useNameMapper==True):
- $aLocalDictVar.aKey.somethingElse
-
-1.0rc2 (Nov 19, 2005)
-
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- See my email to the cheetahtemplate-discuss list on Sat. Nov. 12th for more
- details on these changes:
-
- - faster list-based buffering in DummyTrans, rather than StringIO (my
- benchmarks showed it to be significantly faster. collections.deque wasn't
- any faster than a simple list.) [TR]
- - new CompilerSettings to tweak generated code: [TR]
- * alwaysFilterNone: filter out None immediately, before the filter is called
- * useFilters: allows you to turn them off completely and default to str()
- * includeRawExprInFilterArgs: allows you to disable this behaviour
- * autoAssignDummyTransactionToSelf: off by default
- - and automatic $trans finding without having to pass it as an arg to methods
- based Jonathan Mark's suggestion. If the template's self.transaction
- attribute has been set, each method of the template will use it when
- called. [TR]
- - applied Chris Murphy's patch to fix a bug in the #shBang directive. [TR]
-
-1.0rc1 (Nov 2, 2005)
-
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- - added the compiler option "useStackFrames" for optionally turning off the
- default lookup method which doesn't work with psyco because it uses stack
- frame introspection. When useStackFrames=False, an alternative psyco
- friendly lookup method is used. [TR]
-
- - fixed treatment of None in several filters, bug reported by Daniele Varrazzo
- [TR]
-
-0.9.18 (Aug 22, 2005)
- - version bump from 0.9.18rc1 [TR]
-
-0.9.18rc1 (Aug 15, 2005)
- - applied Philippe Normand's patch for extended cache support [TR]
- - added filter RawOrEncodedUnicode to fix a unicode issue that was discussed
- on the email list on Aug. 9th 2005 [TR]
-
-0.9.17 (May 30, 2005)
- - this is just 0.9.17rc1 repackaged [TR]
-
-0.9.17-rc1 (May 12, 2005)
- This simple bug fix release resolves some issues introduced by
- under-the-hood changes in release 0.9.16a1.
-
- - removed the use of temp files for handling imports with dynamic
- compilation. This removes a whole slew of issues, including a temp file
- security issue reported on the email list by Brian Bird. [TR]
- - fixed bug with handling of the searchList with dynamic inheritance, as
- reported by Brian Bird. [TR]
-
-0.9.16 (Mar 27, 2005)
- - this is just 0.9.16b1 repackaged [TR]
-
-0.9.16b1 (Feb 28, 2005)
- - fixed attr error in Parser.eatEncoding [TR]
- - some tweaks to Compiler.py to prevent errors with dynamically compiled
- templates [TR]
- - added tests for the #encoding directive [TR]
-
-0.9.16a1 (Jan 6, 2005)
- - fixed a unicode bug in Compiler.py [TR]
- - added new EncodeUnicode filter that Rene Pijlman contributed (I optimized it
- slightly) and made it the default filter for all templates. [TR]
- - added test cases for handling unicode with the default filter [TR]
- - fixed a caching bug related to the #include directive. Thanks to Michael
- Engelhart for reporting it.[TR]
- - added the new #encoding directive to handle PEP 263
- http://www.python.org/doc/2.3/whatsnew/section-encodings.html [TR]
- - Tools.CGITemplate: fix bug in comment.[MO]
- - Abort with a helpful error message if user runs 'cheetah test' in a
- directory without write permission. (Kludge in CheetahWrapper.py; we
- should probably move the temp files under the system tmp directory.) [MO]
- - added better string type checking for args in Template.py, as suggested by
- Terrel Shumway [TR]
- - minor tweak to the class attribute lookup style in the Compiler.py
- __getattr__ methods [TR]
- - Fix printf format bug in "cheetah c --debug", found by Terry MacDonald. [MO]
- - Disabled NameMapperDict test (in SyntaxAndOutput.py) because the
- namemappers still have the dict-method bug. (Reminder: don't use
- placehold names like $update that match dict method names.) [MO]
- - #repeat now uses a local variable of the form __i$num which permits
- nesting [JJ]
- - implemented a modified version of Bob and JJ's patch for better parser
- warnings about mismatched directives and #end directives [TR]
- - lots of little cleanups and refactoring [TR]
- - refactored the class tree for the Parser and Compiler. They are now
- completely separate trees and the communication between them is one-way:
- explicit commands from the parser to the compiler. The parser now handles
- all parsing tasks by itself and delegates *all* code generation to the
- compiler. This last bit was my original intention, but things got a bit
- mixed up over time. Also, all SettingsManager stuff for handling
- compiler/parser settings is now handled by ModuleCompiler. This should make
- it easier to grok, maintain, and extend both. [TR]
- - improved the parsing of singe-line #if directives. [TR]
- - removed the old webware example of the cheetah site, as it was way out of
- date and was more confusing than helpful. [TR]
- - added two new lookup functions to NameMapper (valueFromFrame and
- valueFromFrameOrSearchList) and synchronized the behaviour of the C and
- Python versions of all functions. [TR]
- - improved the exception handling of both versions of NameMapper. NotFound
- exceptions now include more detail about what wasn't found. [TR]
- - made NameMapper's searchList lookup functions work with any iterable
- type/class rather than just with lists. [TR]
- - added and updated a variety of test cases. [TR]
- - checked in a patch to CheetahWrapper that improves handling of the odir
- option when the path is absolute. I can't remember where the patch came
- from. [TR]
- - checked in a patch to Template.py for better include/import support under
- Jython. Again, I've forgotten who contributed it. [TR]
- - updated various bits of the user guide. [TR]
- - made the Cheetah NameMapper calls in the generated code use the new function
- valueFromFrameOrSearchList rather than passing locals, searchList, globals,
- and __builtins__ into valueFromSearchList. This is faster, less bug prone
- and simpler to read/grok. I also removed all tracking of local
- variable names by the compiler. [TR]
- - other misc. refactorings [TR]
-
-0.9.15 (Mar 25, 2003)
- - a minor tweak to the cleanup actions of one of the test cases [TR]
-
-0.9.15rc2 (Mar 23, 2003)
- - Fixed a python version dependency bug related to Compiler.py's use of
- isinstance() [TR]
-
-0.9.15rc1 (Mar 21, 2003)
- This is just 0.9.15b1 renamed.
-
-0.9.15b1 (Mar 17, 2003)
- - The Cheetah version of unittest now prints a blank line after each
- traceback to separate them. (MO)
- - .webInput() now saves the cgi.FieldStorage() instance in a global
- variable rather than recreating it each call. That should allow the
- method to be called multiple times with POST variables outside Webware.
- (MO)
- - CheetahWrapper: no verbose output on stdout with --stdout/-p. (MO)
- - "#indent" is now undocumented. The existing code remains intact for now.
- See the TODO file for our future plans. (MO)
- - Apply 2 unicode-support patches from Rodrigo B. de Oliveira (rodrigobamboo)
- that affected the Template and ModuleCompiler classes. (TR)
- - Template: compiling a template from a string now works if the current
- directory doesn't have write permission. (MO)
- - remove temporary .pyo files in addition to .py and .pyc files (TR)
-
-0.9.15a3 (Nov 10, 2002)
- - corrected a dictionary bug in the Python version of NameMapper (TR)
- - Rewrote the "cheetah" command (CheetahWrapper.py) again and added test
- cases. New options --flat and --nobackup; --stdout is now a synonym for
- -p. See the "cheetah compile" section in the Users' Guide for details.
- Deleted Utils.dualglob: merged into CheetahWrapper. (MO)
- - .addToSearchList() and .prependToSearchList() are gone. Instead of
- adding containers to the searchList after instantiation, pass all the
- containers you need to the constuctor, keep another reference somewhere
- to the containers, and modify the containers directly. Generic libraries
- that want to add a new kind of information to the searchList (e.g.,
- web variables) should do "self.searchList().insert(0, myContainer)". (MO)
-
-0.9.15a2 (Nov 4th, 2002)
- - Filters now have access to the name of the placeholder they're filtering.
- In the .filter() method, kw['rawExpr'] gives the entire placeholder name
- including subscripts and arguments, exactly as it appears in the template
- definition. (TR)
- - Fix three bugs in "cheetah compile -R": (1) the generated class name
- contained the subdirectory, (2) the destination path did not contain the
- subdirectory, (3) Cheetah failed to create the destination subdirectory
- if missing. All subdirectories created have an "__init__.py" file.
- "cheetah fill -R" does the same thing but does not create
- "__init__.py". (MO) NOTE: this is still buggy!
- - New directory "attic" in source contains code that has been abandoned
- for now but may come in handy someday. (MO)
- - Tests.CheetahWrapper: test suite for "cheetah compile" and
- "cheetah fill". If the module is run from the command line, the
- option "--list PATH/CheetahWrapper.py", lists all scenarios that would be
- tested; the argument is the path to the test module itself. (MO)
- - made Cheetah.NameMapper.NotFound subclass the builtin LookupError (TR)
- - added an initial implementation of single line #if directives
- #if <condition> then <true> else <false>
- The parsing is fairly rudimentary for now and assumes that the keywords
- 'then' and 'else' won't appear any inside a string in this directive (TR)
-
-0.9.15a1 (Oct 6th, 2002)
- - 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 TEMPLATES (TR)
- - Install Cheetah into site-packages/Cheetah/ rather than
- site-packages/Webware/Cheetah/. Added code to automatically remove the old
- dir.(TR)
- - fixed the variable name resolution order bug in $placeholders. The new
- implementation uses
- valueFromSearchList([locals()] + searchList + [globals(), __builtin__],
- rest of the args) for all lookups. (TR)
- - removed the #settings directive (TR)
- - added the #del directive, for using Python's del statement (TR)
- - I think I've fixed the problem with the searchList arg being discarded when a
- template is generated from a .tmpl file that #extends another template. This
- bug was reported by Edmund on Aug 30th
- (subject: "Bug? Was: Really basic searchList question") (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
-MO - Mike Orr
-JJ - Shannon 'jj' Behrens
-IB - Ian Bicking
-CE - Chuck Esterbrook
-MH - Mike Halle
-
-
diff --git a/download.html b/download.html
deleted file mode 100644
index d733a1a..0000000
--- a/download.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="latin-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Cheetah Community Engine - The Python-Powered Template Engine</title>
-<link rel="stylesheet" href="screen.css" type="text/css" />
-</head>
-
-<body class="download"> <div class="banner" align="center">
- <a href="index.html"><img
- class="bannerImg" src="images/cheetah-face-black-medium.jpg" alt="" /></a>
-
- <a href="index.html"><img class="bannerText" src="images/banner_text.gif"
- alt="Cheetah Community Edition: The Python-Powered Template Engine" /></a>
- </div>
- <div class="pageOuterWrapper" align="center">
- <div class="pageInnerWrapper0">
- <div class="pageInnerWrapper1">
- <div align="center" class="navBarContainer">
- <a class="navBar "
- href="index.html">Overview</a>
-<span class="navBarSep">|</span> <a class="navBar activePage"
- href="download.html">Download</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="learn.html">Docs</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="examples.html">Examples</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="whouses.html">Who Uses It?</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="praise.html">Testimonials</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="contribute.html">Help Out</a>
- </div>
-
- <div class="pageInnerWrapper2">
- <div class="pageInnerWrapper3">
- <div class="pageInnerWrapper4">
- <div class="pageInnerWrapper5">
-
- <p>The most <a
- href="http://github.com/rtyler/cheetah/tarball/v2.1.0.1">recent stable release</a>
- was Cheetah Community Edition v2.1.0.1, was released on March 27th, 2009.
- The latest Cheetah "official" release was 2.0.1 on November 16th, 2007. Cheetah has been <b>stable,
- production quality, post-beta code since 2001</b>. All new releases since then
- (40+) have been almost <b>100% backwards compatible</b>. The 2.0 code itself
- has production ready since early 2006.</p>
-
- <p>Here&#39;s the documentation on <a
- href="CHANGES">recent changes</a>.</p>
-
- <p>Cheetah is included in FreeBSD and most major Linux distributions:
- Gentoo, Fedora, Debian, and Ubuntu among others.</p>
-
- <p><b>IMPORTANT NOTE TO WINDOWS USERS:</b> You should
- install the compiled version of Cheetah\'s NameMapper. It is dramatically faster
- than the pure Python version! Python 2.4: <a
- href="http://cheetahtemplate.org/_namemapper.pyd2.4">_namemapper.pyd2.4</a>,
- Python 2.5: <a
- href="http://cheetahtemplate.org/_namemapper.pyd2.5">_namemapper.pyd2.5</a>.
- Install it wherever your system puts Cheetah/NameMapper.py. Strip the
- version numbers off the filename.</p>
-
-
-
- <div class="attributionFooter"> Cheetah was created by Tavis
- Rudd, a freelance programmer and designer, with <a
- href="credits.html">contributions from many open source
- volunteers</a>.<br/>Its documentation is edited by Mike Orr, who
- also wrote its command line tool.</div> <img src="http://sourceforge.net/sflogo.php?group_id=28961&amp;type=1"
- width="0" height="0"
- border="0" alt="SourceForge.net Logo" />
-
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="copyrightFooter" align="left">
- Copyright &copy; 2001-2009 Tavis Rudd. All rights reserved.
- </div>
- </div>
-</body>
-</html>
-
-
-
-
-
diff --git a/examples.html b/examples.html
deleted file mode 100644
index d8d458f..0000000
--- a/examples.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="latin-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Cheetah Community Engine - The Python-Powered Template Engine</title>
-<link rel="stylesheet" href="screen.css" type="text/css" />
-</head>
-
-<body class="examples"> <div class="banner" align="center">
- <a href="index.html"><img
- class="bannerImg" src="images/cheetah-face-black-medium.jpg" alt="" /></a>
-
- <a href="index.html"><img class="bannerText" src="images/banner_text.gif"
- alt="Cheetah Community Edition: The Python-Powered Template Engine" /></a>
- </div>
- <div class="pageOuterWrapper" align="center">
- <div class="pageInnerWrapper0">
- <div class="pageInnerWrapper1">
- <div align="center" class="navBarContainer">
- <a class="navBar "
- href="index.html">Overview</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="download.html">Download</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="learn.html">Docs</a>
-<span class="navBarSep">|</span> <a class="navBar activePage"
- href="examples.html">Examples</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="whouses.html">Who Uses It?</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="praise.html">Testimonials</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="contribute.html">Help Out</a>
- </div>
-
- <div class="pageInnerWrapper2">
- <div class="pageInnerWrapper3">
- <div class="pageInnerWrapper4">
- <div class="pageInnerWrapper5">
- <p>Here's a very simple example that illustrates some of Cheetah's basic syntax:</p>
-
-<dl><dd><pre class="verbatim">
- &lt;html&gt;
- &lt;head&gt;&lt;title&gt;$title&lt;/title&gt;&lt;/head&gt;
- &lt;body&gt;
- &lt;table&gt;
- #for $client in $clients
- &lt;tr&gt;
- &lt;td&gt;$client.surname, $client.firstname&lt;/td&gt;
- &lt;td&gt;&lt;a href=&quot;mailto:$client.email&quot;&gt;$client.email&lt;/a&gt;&lt;/td&gt;
- &lt;/tr&gt;
- #end for
- &lt;/table&gt;
- &lt;/body&gt;
- &lt;/html&gt;
-</pre></dl>
-
-<p>Compare this with PSP:</p>
-
-<dl><dd><pre class="verbatim">
- &lt;html&gt;
- &lt;head&gt;&lt;title&gt;&lt;%=title%&gt;&lt;/title&gt;&lt;/head&gt;
- &lt;body&gt;
- &lt;table&gt;
- &lt;% for client in clients: %&gt;
- &lt;tr&gt;
- &lt;td&gt;&lt;%=client['surname']%&gt;, &lt;%=client'[firstname']%&gt;&lt;/td&gt;
- &lt;td&gt;&lt;a href=&quot;mailto:&lt;%=client['email']%&gt;&quot;&gt;
- &lt;%=client['email']%&gt;&lt;/a&gt;&lt;/td&gt;
- &lt;/tr&gt;
- &lt;%end%&gt;
- &lt;/table&gt;
- &lt;/body&gt;
- &lt;/html&gt;
-</pre></dl>
-
-<p>See the <a href="learn.html">documentation</a> for more examples.</p>
-
-
-
- <div class="attributionFooter"> Cheetah was created by Tavis
- Rudd, a freelance programmer and designer, with <a
- href="credits.html">contributions from many open source
- volunteers</a>.<br/>Its documentation is edited by Mike Orr, who
- also wrote its command line tool.</div> <img src="http://sourceforge.net/sflogo.php?group_id=28961&amp;type=1"
- width="0" height="0"
- border="0" alt="SourceForge.net Logo" />
-
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="copyrightFooter" align="left">
- Copyright &copy; 2001-2009 Tavis Rudd. All rights reserved.
- </div>
- </div>
-</body>
-</html>
-
-
-
-
-
diff --git a/images/banner copy.jpg b/images/banner copy.jpg
deleted file mode 100755
index 173f8c6..0000000
--- a/images/banner copy.jpg
+++ /dev/null
Binary files differ
diff --git a/images/banner2.jpg b/images/banner2.jpg
deleted file mode 100755
index 44face0..0000000
--- a/images/banner2.jpg
+++ /dev/null
Binary files differ
diff --git a/images/banner3.jpg b/images/banner3.jpg
deleted file mode 100755
index 8b48927..0000000
--- a/images/banner3.jpg
+++ /dev/null
Binary files differ
diff --git a/images/banner_cheetah.jpg b/images/banner_cheetah.jpg
deleted file mode 100755
index acb4439..0000000
--- a/images/banner_cheetah.jpg
+++ /dev/null
Binary files differ
diff --git a/images/banner_text.gif b/images/banner_text.gif
deleted file mode 100755
index 9092416..0000000
--- a/images/banner_text.gif
+++ /dev/null
Binary files differ
diff --git a/images/blank.gif b/images/blank.gif
deleted file mode 100644
index 2e31f4e..0000000
--- a/images/blank.gif
+++ /dev/null
Binary files differ
diff --git a/images/bottom_border_shadow.gif b/images/bottom_border_shadow.gif
deleted file mode 100644
index 9b0ba85..0000000
--- a/images/bottom_border_shadow.gif
+++ /dev/null
Binary files differ
diff --git a/images/bottom_plus_leftcorner_border_shadow.gif b/images/bottom_plus_leftcorner_border_shadow.gif
deleted file mode 100644
index 0a6d098..0000000
--- a/images/bottom_plus_leftcorner_border_shadow.gif
+++ /dev/null
Binary files differ
diff --git a/images/cheetah-face-black-medium.jpg b/images/cheetah-face-black-medium.jpg
deleted file mode 100755
index fb4ad32..0000000
--- a/images/cheetah-face-black-medium.jpg
+++ /dev/null
Binary files differ
diff --git a/images/cheetah-face-black.jpg b/images/cheetah-face-black.jpg
deleted file mode 100755
index ace02c8..0000000
--- a/images/cheetah-face-black.jpg
+++ /dev/null
Binary files differ
diff --git a/images/cheetah-face-original.jpg b/images/cheetah-face-original.jpg
deleted file mode 100755
index a63cd21..0000000
--- a/images/cheetah-face-original.jpg
+++ /dev/null
Binary files differ
diff --git a/images/cheetah-face.jpg b/images/cheetah-face.jpg
deleted file mode 100755
index dace106..0000000
--- a/images/cheetah-face.jpg
+++ /dev/null
Binary files differ
diff --git a/images/cheetah-face_medium.jpg b/images/cheetah-face_medium.jpg
deleted file mode 100755
index 261888b..0000000
--- a/images/cheetah-face_medium.jpg
+++ /dev/null
Binary files differ
diff --git a/images/cheetah-homepage-title.gif b/images/cheetah-homepage-title.gif
deleted file mode 100644
index 91550ed..0000000
--- a/images/cheetah-homepage-title.gif
+++ /dev/null
Binary files differ
diff --git a/images/contents.gif b/images/contents.gif
deleted file mode 100644
index 6d299c4..0000000
--- a/images/contents.gif
+++ /dev/null
Binary files differ
diff --git a/images/img1.gif b/images/img1.gif
deleted file mode 100644
index cd78984..0000000
--- a/images/img1.gif
+++ /dev/null
Binary files differ
diff --git a/images/img2.gif b/images/img2.gif
deleted file mode 100644
index d097a10..0000000
--- a/images/img2.gif
+++ /dev/null
Binary files differ
diff --git a/images/index.gif b/images/index.gif
deleted file mode 100644
index 32eecfb..0000000
--- a/images/index.gif
+++ /dev/null
Binary files differ
diff --git a/images/leftcorner_border_shadow.gif b/images/leftcorner_border_shadow.gif
deleted file mode 100644
index 7191d04..0000000
--- a/images/leftcorner_border_shadow.gif
+++ /dev/null
Binary files differ
diff --git a/images/modules.gif b/images/modules.gif
deleted file mode 100644
index f5860b6..0000000
--- a/images/modules.gif
+++ /dev/null
Binary files differ
diff --git a/images/next.gif b/images/next.gif
deleted file mode 100644
index 5dcaff8..0000000
--- a/images/next.gif
+++ /dev/null
Binary files differ
diff --git a/images/previous.gif b/images/previous.gif
deleted file mode 100644
index de1da16..0000000
--- a/images/previous.gif
+++ /dev/null
Binary files differ
diff --git a/images/right_border_shadow.gif b/images/right_border_shadow.gif
deleted file mode 100644
index d51bb4c..0000000
--- a/images/right_border_shadow.gif
+++ /dev/null
Binary files differ
diff --git a/images/sourceforge_logo.gif b/images/sourceforge_logo.gif
deleted file mode 100644
index 08589d2..0000000
--- a/images/sourceforge_logo.gif
+++ /dev/null
Binary files differ
diff --git a/images/spacer.gif b/images/spacer.gif
deleted file mode 100755
index 5bfd67a..0000000
--- a/images/spacer.gif
+++ /dev/null
Binary files differ
diff --git a/images/top_border_shadow.gif b/images/top_border_shadow.gif
deleted file mode 100644
index 7091807..0000000
--- a/images/top_border_shadow.gif
+++ /dev/null
Binary files differ
diff --git a/images/up.gif b/images/up.gif
deleted file mode 100644
index a9d3e13..0000000
--- a/images/up.gif
+++ /dev/null
Binary files differ
diff --git a/index.html b/index.html
deleted file mode 100644
index 937a290..0000000
--- a/index.html
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="latin-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Cheetah Community Engine - The Python-Powered Template Engine</title>
-<link rel="stylesheet" href="screen.css" type="text/css" />
-</head>
-
-<body class="index"> <div class="banner" align="center">
- <a href="index.html"><img
- class="bannerImg" src="images/cheetah-face-black-medium.jpg" alt="" /></a>
-
- <a href="index.html"><img class="bannerText" src="images/banner_text.gif"
- alt="Cheetah Community Edition: The Python-Powered Template Engine" /></a>
- </div>
- <div class="pageOuterWrapper" align="center">
- <div class="pageInnerWrapper0">
- <div class="pageInnerWrapper1">
- <div align="center" class="navBarContainer">
- <a class="navBar activePage"
- href="index.html">Overview</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="download.html">Download</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="learn.html">Docs</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="examples.html">Examples</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="whouses.html">Who Uses It?</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="praise.html">Testimonials</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="contribute.html">Help Out</a>
- </div>
-
- <div class="pageInnerWrapper2">
- <div class="pageInnerWrapper3">
- <div class="pageInnerWrapper4">
- <div class="pageInnerWrapper5">
- <table>
- <tr valign="top">
- <td>
- <br />
- <div align="center">
- <img class="" src="images/cheetah-homepage-title.gif" alt="" />
- </div>
-
- <p>Cheetah <strong>Community Edition</strong> is a community supported release of the
- Cheetah template engine and code generation tool,
- template engine and code generation tool, written in <a
- href="http://python.org/">Python</a>. It can be used standalone
- or combined with other tools and frameworks. Web development is its
- principle use, but Cheetah is very flexible and is also being used to
- generate C++ game code, Java, sql, form emails and even Python code.</p>
-
- <p>The reasons behind the Community Edition is to maintain active development
- outside the mostly-stale <a href="http://sourceforge.net/scm/?type=cvs&group_id=28961">Cheetah CVS tree</a>.
- Cheetah CE is not intended on diverging from the main goals of the original releases
- of Cheetah, stability, speed and ease of use, but is to serve as a means of reinvigorating
- the Cheetah community with <strong>monthly</strong> releases with patches provided by the
- community as they're needed.
-
- <p>Cheetah has a large and active user community. Products built with
- Cheetah are <a href="whouses.html">used by many of the Fortune
- 500</a>. One prominent new user is <a
- href="http://reddit.com/">reddit.com</a>, a startup funded by Paul
- Graham. It has over 50,000 unique visitors a day.</p>
-
- </td>
- <td width="300">
- <div class="homePageUtilLinks">
- <a href="http://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss"
- >Mailing List</a> <span class="sep">|</span> <a href="docs/CHANGES">Changes</a> <span class="sep">|</span> <a
- href="http://github.com/rtyler/cheetah/tree/master">Git</a>
- </div>
-
- <div class="homePageQuotes">
- <div class="quote">
- <span class="quote">&#8220;I'm enamored with Cheetah&#8221;</span>
- <div class="citation">
- <cite>- <a
- href="http://www.intertwingly.net/wiki/pie/SamRuby">Sam Ruby</a>,
- senior member of IBM's Emerging Technologies Group &amp; director of Apache Software Foundation</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Give Cheetah a try. You won't regret
- it. ... Cheetah is a truly powerful system. ... Cheetah is a serious
- contender for the 'best of breed'&#8221;</span>
- <div class="citation">
- <cite>- <a
- href="http://conferences.oreillynet.com/cs/os2005/view/e_spkr/1541">Alex
- Martelli</a>, Google uber techie, core Python developer
- &amp; author of several popular Python books</cite>
- </div>
- </div>
-
-
-
-</div>
- <a class="quotesLink" href="praise.html">read more quotes</a>
- </td>
- </tr>
- </table>
-
- <div class="homePageDownloadBar">
- <div class="homePageDownloadBarInner">
- <b>Download</b> <a
- href="http://github.com/rtyler/cheetah/tarball/v2.1.0.1">Cheetah CE v2.1.0.1</a>
- (released on March 27, 2009: collection of bugfixes/improvements).
- </div>
- </div>
-
- <p><b>Cheetah Community Edition</b>:</p>
-
- <ul class="topLevel">
- <li><b>is supported by every major Python web framework</b>.</li>
-
- <li><b>is fully documented and is supported by an active user community</b>.</li>
-
- <li>can output/generate <b>any</b> text-based format.</li>
-
- <li>compiles templates into optimized, yet readable, Python code.</li>
-
- <li>blends the power and flexibility of Python with a simple template language
- that non-programmers can understand.
- </li>
-
- <li>gives template authors full access to any Python data structure, module,
- function, object, or method in their templates. Meanwhile, it provides a way
- for administrators to selectively restrict access to Python when needed.
- </li>
-
- <li>makes code reuse easy by providing an object-oriented interface to
- templates that is accessible from Python code or other Cheetah
- templates. One template can subclass another and selectively
- reimplement sections of it. Cheetah templates can be subclasses
- of <b>any</b> Python class and vice-versa.
- </li>
-
- <li>provides a simple, yet powerful, caching mechanism that can dramatically
- improve the performance of a dynamic website.
- </li>
-
- <li>encourages clean separation of content, graphic design, and program
- code. This leads to highly modular, flexible, and reusable site
- architectures, shorter development time, and HTML and program code that is
- easier to understand and maintain. It is particularly well suited for team
- efforts. </li>
-
- <li>can be used to generate static html via its command-line tool.</li>
-
- </ul>
-
- <h2>What is the philosophy behind Cheetah?</h2>
-
- <p>Its design was guided by these principles:</p>
-
- <ul class="topLevel">
- <li>Python for the back end, Cheetah for the front end. Cheetah was
- designed to complement Python, not replace it.
- </li>
-
- <li>Cheetah&#39;s core syntax should be easy for non-programmers to learn.
- </li>
-
- <li>Cheetah should make code reuse easy by providing an object-oriented
- interface to templates that is accessible from Python code or other
- Cheetah templates.
- </li>
-
- <li>Python objects, functions, and other data structures should be fully
- accessible in Cheetah.
- </li>
-
- <li>Cheetah should provide flow control and error handling. Logic
- that belongs in the front end shouldn't be relegated to the
- back end simply because it's complex.
- </li>
-
- <li>It should be easy to <b>separate</b> content, graphic design, and program
- code, but also easy to <b>integrate</b> them.
-
- <p>A clean separation makes it easier for a team of content writers,
- HTML/graphic designers, and programmers to work together without stepping
- on each other's toes and polluting each other's work. The HTML framework
- and the content it contains are two separate things, and analytical
- calculations (program code) is a third thing. Each team member should be
- able to concentrate on their specialty and to implement their changes
- without having to go through one of the others (i.e., the dreaded
- "webmaster bottleneck"). </p>
-
- <p>While it should be easy to develop content, graphics and program code
- separately, it should be easy to integrate them together into a website. In
- particular, it should be easy: </p>
-
- <ul>
- <li>for <b>programmers</b> to create reusable components and functions
- that are accessible and understandable to designers.
- </li>
- <li>for <b>designers</b> to mark out placeholders for content and
- dynamic components in their templates.
- </li>
- <li>for <b>designers</b> to soft-code aspects of their design that are
- either repeated in several places or are subject to change.
- </li>
- <li>for <b>designers</b> to reuse and extend existing templates and thus
- minimize duplication of effort and code.
- </li>
- <li>and, of course, for <b>content writers</b> to use the templates that
- designers have created.</li>
- </ul>
- </li>
- </ul>
-
-
-
- <div class="attributionFooter"> Cheetah was created by Tavis
- Rudd, a freelance programmer and designer, with <a
- href="credits.html">contributions from many open source
- volunteers</a>.<br/>Its documentation is edited by Mike Orr, who
- also wrote its command line tool.</div> <img src="http://sourceforge.net/sflogo.php?group_id=28961&amp;type=1"
- width="0" height="0"
- border="0" alt="SourceForge.net Logo" />
-
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="copyrightFooter" align="left">
- Copyright &copy; 2001-2009 Tavis Rudd. All rights reserved.
- </div>
- </div>
-</body>
-</html>
-
-
-
-
-
diff --git a/learn.html b/learn.html
deleted file mode 100644
index 8e4487b..0000000
--- a/learn.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<?xml version="1.0" encoding="latin-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Cheetah Community Engine - The Python-Powered Template Engine</title>
-<link rel="stylesheet" href="screen.css" type="text/css" />
-</head>
-
-<body class="learn"> <div class="banner" align="center">
- <a href="index.html"><img
- class="bannerImg" src="images/cheetah-face-black-medium.jpg" alt="" /></a>
-
- <a href="index.html"><img class="bannerText" src="images/banner_text.gif"
- alt="Cheetah Community Edition: The Python-Powered Template Engine" /></a>
- </div>
- <div class="pageOuterWrapper" align="center">
- <div class="pageInnerWrapper0">
- <div class="pageInnerWrapper1">
- <div align="center" class="navBarContainer">
- <a class="navBar "
- href="index.html">Overview</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="download.html">Download</a>
-<span class="navBarSep">|</span> <a class="navBar activePage"
- href="learn.html">Docs</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="examples.html">Examples</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="whouses.html">Who Uses It?</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="praise.html">Testimonials</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="contribute.html">Help Out</a>
- </div>
-
- <div class="pageInnerWrapper2">
- <div class="pageInnerWrapper3">
- <div class="pageInnerWrapper4">
- <div class="pageInnerWrapper5">
-
- <h3>Official Documentation</h3>
-
- <p>Note, the official documentation describes Cheetah 1.0. We are in the
- process of updating it to include the changes in the 2.0 release. For the
- time-being, the changes in 2.0 are described in the module docstrings and in
- the <a href="docs/CHANGES">CHANGES</a> log.</p>
-
- <p><b>Cheetah Users' Guide:</b>
- <a href="docs/users_guide_html/"><b>HTML</b></a>
- <a href="docs/users_guide_html_multipage/">Multi-page HTML</a>
- <a href="docs/users_guide.ps">Postscript</a>
- <a href="docs/users_guide.txt">Text</a>
- <a href="docs/users_guide.pdf">PDF</a>
- </p>
-
-
- <p><a href="http://seapig.org/CategoryCheetahDocs">The beginnings of new documentation for Cheetah 2.0</a> (work in progress)
- </p>
-
-
- <p> Also see the latest
- <a href="docs/CHANGES">CHANGES</a>,
- <a href="docs/TODO">TODO</a>,
- <a href="docs/BUGS">BUGS</a>.
- </p>
-
- <p>The LaTeX source for the Users' Guide and Developers' Guide is in the CVS
- module <b>CheetahDocs</b> at SourceForge, <a
- href="http://sourceforge.net/cvs/?group_id=28961">http://sourceforge.net/cvs/?group_id=28961</a>.</p>
-
- <h3>Unofficial Documentation and Articles</h3>
-
- <p><a href="http://www-128.ibm.com/developerworks/opensource/library/os-pythcheetah/?ca=dgr-lnxw06PythonCheetah">Building and filling out
- templates with Python and Cheetah</a> by Leonard Richardson, Software Engineer
- at CollabNet. Published in IBM Developer Works, August 9th, 2005. Leonard
- Richardson is the author of many Python applications and libraries, including
- NewsBruiser and Beautiful Soup. He is a co-author of the new tome Beginning
- Python, from Wrox.</p>
-
- <p><a
- href="http://www.onlamp.com/pub/a/python/2005/01/13/cheetah.html">Python-Powered
- Templates with Cheetah</a> by Andrew Glover, founder and CTO of Vanward
- Technologies, a company specializing in building automated testing frameworks.
- Published in O'Reilly's ONLamp.com, January 13th, 2005</p>
-
- <p><a href="http://www.devshed.com/c/a/Python/Templating-with-Cheetah/">Templating with
- Cheetah</a>, a DevShed article by Peyton McCullough. Published in December 2005.</p>
-
- <p><a href="http://linuxgazette.net/117/orr.html">Templating in Python</a>, a
- Linux Gazette article by Mike Orr. Published in Issue 117 of Linux Gazette,
- August 2005.</p>
-
- <p><a href="http://www.unixreview.com/documents/s=10075/ur0604h/">Regular
- Expressions: CherryPy proves its worth</a>, an Unix Review article by Miki
- Tebeka and Cameron Laid. They build a small addressbook application in less
- than 150 lines of code using the CherryPy web framework and Cheetah.
- Published May 2006.</p>
-
- <p><a
- href="http://coderseye.com/2006/how-to-install-cheetah-on-dreamhost.html">How
- to install Cheetah on Dreamhost</a>, a blog article published by Bruce Kroeze
- in January 2006.</p>
-
- <p><a href="http://www.linuxenterprise.de/itr/online_artikel/psecom,id,639,nodeid,9.html">Tierisch gut Das Cheetah Templating-System in
- der Praxis</a>, a German-language article by Markus Jais. Published in the
- December 2004 edition of <a
- href="http://www.linuxenterprise.de/">http://www.linuxenterprise.de/</a>.
-
- <p><a href="docs/OnePageTutorial.html">One-Page Tutorial</a> for template
- maintainers. Covers a few basic concepts.</p>
-
- <p> <a href="http://wingware.com/python/success/st-andrews">Python Success
- Stories: Python Enterprise-Wide at the University of St Andrews in
- Scotland</a> by Hamish Lawson. Cheetah is used for the presentation
- layer. Hamish Lawson is a software developer in the IT Services department at
- the University of St Andrews, Scotland. Published January 17th, 2003.</p>
-
- <p><a
- href="http://www.codegeneration.net/tiki-read_article.php?articleId=39">Code
- Generation Network - Case Study with Peter White</a>, an interview that
- discusses using Cheetah for generating Java code in a financial services
- application. "Given my recent experience with Python and Cheetah, I can't
- imagine an easier way to generate code!" Published March 1st, 2004.</p>
-
- <p>The <a href="Py10.html">Python10 conference paper</a> about Cheetah, by
- Tavis Rudd, Mike Orr, and Ian Bicking. It provides a high-level introduction
- to Cheetah and the philosophy behind its design. Published in December
- 2001.</p>
-
- <p>Cheetah is covered in <a
- href="http://www.amazon.com/exec/obidos/tg/detail/-/0596001886/ref=pd_sim_b_2/002-9262270-4252038?%5Fencoding=UTF8&amp;v=glance">Python in a
- Nutshell</a>, by Alex Martelli. Alex writes on the Cheetah list: "Nutshell
- readers looking for templating engines will be tempted by my ultra-brief
- coverage enough to come visit the Cheetah site and get stunned. Indeed, I'm
- impressed enough that I plan to cover _only_ Cheetah as the one tool for any
- serious templating need."</p>
-
- <p>It is also introduced in the New Riders book <a
- href="http://www.informit.com/title/0735710902">Python Web Programming</a>, by
- Steve Holden. Steve writes "Although the software is still in beta at the
- time of writing, it is already stable and easy to use either with or without
- Webware. It looks as though Cheetah will be useful to many web projects, as
- well as any others that need flexible template substitution of a general
- nature." Published Jan 8th, 2002.</p>
-
-
-
- <div class="attributionFooter"> Cheetah was created by Tavis
- Rudd, a freelance programmer and designer, with <a
- href="credits.html">contributions from many open source
- volunteers</a>.<br/>Its documentation is edited by Mike Orr, who
- also wrote its command line tool.</div> <img src="http://sourceforge.net/sflogo.php?group_id=28961&amp;type=1"
- width="0" height="0"
- border="0" alt="SourceForge.net Logo" />
-
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="copyrightFooter" align="left">
- Copyright &copy; 2001-2009 Tavis Rudd. All rights reserved.
- </div>
- </div>
-</body>
-</html>
-
-
-
-
-
diff --git a/praise.html b/praise.html
deleted file mode 100644
index ad68a9e..0000000
--- a/praise.html
+++ /dev/null
@@ -1,424 +0,0 @@
-<?xml version="1.0" encoding="latin-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Cheetah Community Engine - The Python-Powered Template Engine</title>
-<link rel="stylesheet" href="screen.css" type="text/css" />
-</head>
-
-<body class="praise"> <div class="banner" align="center">
- <a href="index.html"><img
- class="bannerImg" src="images/cheetah-face-black-medium.jpg" alt="" /></a>
-
- <a href="index.html"><img class="bannerText" src="images/banner_text.gif"
- alt="Cheetah Community Edition: The Python-Powered Template Engine" /></a>
- </div>
- <div class="pageOuterWrapper" align="center">
- <div class="pageInnerWrapper0">
- <div class="pageInnerWrapper1">
- <div align="center" class="navBarContainer">
- <a class="navBar "
- href="index.html">Overview</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="download.html">Download</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="learn.html">Docs</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="examples.html">Examples</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="whouses.html">Who Uses It?</a>
-<span class="navBarSep">|</span> <a class="navBar activePage"
- href="praise.html">Testimonials</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="contribute.html">Help Out</a>
- </div>
-
- <div class="pageInnerWrapper2">
- <div class="pageInnerWrapper3">
- <div class="pageInnerWrapper4">
- <div class="pageInnerWrapper5">
-
- <div class="quote">
- <span class="quote">&#8220;I'm enamored with Cheetah&#8221;</span>
- <div class="citation">
- <cite>- <a
- href="http://www.intertwingly.net/wiki/pie/SamRuby">Sam Ruby</a>,
- senior member of IBM's Emerging Technologies Group &amp; director of Apache Software Foundation</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Give Cheetah a try. You won't regret
- it. ... Cheetah is a truly powerful system. ... Cheetah is a serious
- contender for the 'best of breed'&#8221;</span>
- <div class="citation">
- <cite>- <a
- href="http://conferences.oreillynet.com/cs/os2005/view/e_spkr/1541">Alex
- Martelli</a>, Google uber techie, core Python developer
- &amp; author of several popular Python books</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;There is no better solution than Cheetah.&#8221;</span>
- <div class="citation">
- <cite>- William Dodé</cite>
- </div>
- </div>
-
-
-
- <div class="quote">
- <span class="quote">&#8220;i did it in a single night (i _love_ cheetah templates ;)&#8221;</span>
- <div class="citation">
- <cite>- <a href="http://initd.org/">Federico Di Gregorio</a>,
- developer of Python's Postgresql library</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Cheetah is an order of magnitude faster than nevow, and it's
- more powerful and flexibile and its syntax is *much* more readable too
- IMHO. The speedup after moving klive (<a
- href="http://klive.cpushare.com/">klive.cpushare.com</a>) from nevow to
- Cheetah has been huge ... 300% speedup. I used klive as a test for Cheetah
- and it worked so well that I'm rewriting <a
- href="http://cpushare.com/">cpushare.com</a> with ... Cheetah.&#8221;</span>
- <div class="citation">
- <cite>- <a href="http://kerneltrap.org/node/3148">Andrea Arcangeli</a>, the
- kernel hacker behind Linux's new virtual memory subsystem, and SUSE Linux
- employee</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I am currently in the process of re-doing the templating
- mechanism in RESTLog, throwing out my hand made templating scheme and
- replacing it with Cheetah and it's been a great success. I initially learned
- of Cheetah from Sam Ruby as he is using to write his own blogging
- software. The transformations are fast and Cheetah, to me, has struck just
- the right balance, sticking to adding features needed for templating and
- avoiding the tempation to become a full-blown language on it's own, instead
- deferring to Python when appropriate. ... Cheetah definitely passes by first
- cut utility test, in adding Cheetah to RESTLog my code got smaller and
- cleaner.&#8221;</span>
- <div class="citation">
- <cite>- <a href="http://www.xml.com/pub/au/225">Joe Gregorio</a>, editor of
- the <a href="http://www.ietf.org/">IETF</a> <a
- href="http://atomenabled.org/">Atom</a> <a
- href="http://bitworking.org/projects/atom/">Publishing Protocol</a> specification
- (along with <a href="http://dehora.net/">Bill de hÓra</a>) and creator of
- the <a href="http://bitworking.org/projects/sparklines/">Python Sparklines
- Module</a></cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Cheetah looks amazing. Wish I'd known about it before I
- went and invented my own damn templating language for my day project.&#8221;</span>
- <div class="citation">
- <cite>- <a href="http://diveintomark.org/">Mark Pilgrim</a>,
- author of <a href="http://diveintopython.org/">Dive Into Python</a> &amp;
- <a href="http://diveintogreasemonkey.org/">Dive Into Greasemonkey</a>,
- and creator of <a href="http://feedparser.org/">feedparser.org</a>
- &amp; <a href="http://feedvalidator.org/">feedvalidator.org</a></cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Cheetah seems to be practically the only web templating
- format with decent taste. On top of that, it doesn't try to limit the
- programmers with needless restrictions and hoops. ... <a
- href="http://reddit.com/">reddit.com</a> was recently rewritten with
- Python and Cheetah Templates. The project seems to have gone really well
- and the former-Lisp developers really enjoyed Cheetah's simple syntax.&#8221;</span>
- <div class="citation">
- <cite>- <a href="http://www.aaronsw.com/">Aaron Swartz</a>, co-author of the
- RSS 1.0 specification</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;<i>Happy little gophers</i>... <a
- href="http://socialserve.com">Socialserve.com</a> is switching over from a
- J2EE stack (JBoss / JPublish (used Velocity for templating)) over to a
- fastcgi-based web publishing system with Cheetah as the star. Site-wide,
- we're currently serving an average of 68K pages (198K 'hits') per day, with
- the Cheetah'd pages doing more than 65% of that traffic. Our web traffic has
- doubled in the past 6 months, and that growth curve shows no sign of slowing
- down.<br /><br />
-
- We have found Cheetah to be a gloriously flexible and powerful
- technology. Functions within templates allowed us to do far more elegant
- structured programming at the document level. Being able to use templates as
- python classes, importing constants and other goodies directly from our
- middleware python code really lets them act as first class code members
- instead of an ugly lesser citizen.&#8221;</span>
- <div class="citation">
- <cite>- <a href="http://socialserve.com">James Robinson</a></cite>
- </div>
- </div>
-
-
-
- <div class="quote">
- <span class="quote">&#8220;Cheetah is a powerful, stable and well documented templating system.&#8221;</span>
- <div class="citation">
- <cite>- James Gardner</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Cheetah is very nice. Good code even!&#8221;</span>
- <div class="citation">
- <cite>- Keith Devens</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;People with a strong PHP background absolutely love Cheetah for being Smarty,
- but much, much better.&#8221;</span>
- <div class="citation">
- <cite>- Marek Baczynski</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I am using Smarty and I know it very well, but compiled Cheetah
- Templates with its inheritance approach is much powerful and easier to
- use than Smarty.&#8221;</span>
- <div class="citation">
- <cite>- Jaroslaw Zabiello</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;A cheetah template can inherit from a python class, or a cheetah
- template, and a Python class can inherit from a cheetah template. This
- brings the full power of OO programming facilities to the templating
- system, and simply blows away other templating systems.&#8221;</span>
- <div class="citation">
- <cite>- Mike Meyer</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Love your work guys.&#8221;</span>
- <div class="citation">
- <cite>- Alex Le Dain</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I'm trying code generation with Cheetah.
- I have to say it's a pleasure compared to XSLT!&#8221;</span>
- <div class="citation">
- <cite>- Alex J. Champandard</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Cheetah has successfully been introduced as a replacement for the
- overweight XSL Templates for code generation. Despite the power of XSL
- (and notably XPath expressions), code generation is better suited to
- Cheetah as templates are much easier to implement and manage.&#8221;</span>
- <div class="citation">
- <cite>- The <a
- href="http://fear.sourceforge.net/docs/latest/guide/Build.html#id2550573">FEAR</a>
- development team</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I'm greatly in favour of Cheetah.&#8221;</span>
- <div class="citation">
- <cite>- Sybren Stuvel</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I ran across Cheetah, 'a Python-powered template engine and
- code generator', and haven't looked back since.
-
- ... it was a breeze to crank out several
- templates in a short period of time. In only a few hours a night, over three
- nights, I was able to learn enough about Python and Cheetah to write a code
- generator that generates my POJOs, DAOs, and WebWork2 action classes. ...
- Given my recent experience with Python and Cheetah, I can't imagine an
- easier way to generate code! &#8221;</span>
- <div class="citation">
- <cite>- Peter White, in an <a
- href="http://www.codegeneration.net/tiki-read_article.php?articleId=39">interview</a>
- on the "Code Generation Network"</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Cheetah is very powerful and flexible.&#8221;</span>
- <div class="citation">
- <cite>- Carsten Saathoff</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I've used Cheetah quite a bit and it's a very good package.&#8221;</span>
- <div class="citation">
- <cite>- <a href="http://turbogears.org/">Kevin Dangoor</a>, lead developer of TurboGears</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Cheetah is an extremely effective Python-powered template
- engine that can generate any text-based format. Cheetah's impressive yet
- simple template language (based on Python) can yield the most complex of
- documents ... Cheetah is surprisingly simple to use&#8221;</span>
- <div class="citation">
- <cite>- <a href="http://www.onlamp.com/pub/a/python/2005/01/13/cheetah.html">Andrew
- Glover</a>, in an article published on O&#39;Reilly ONLamp.com</cite>
- </div>
- </div>
-
-
-
- <div class="quote">
- <span class="quote">&#8220;Regarding the template engine, the best one I'm aware of is Cheetah.&#8221;</span>
- <div class="citation">
- <cite>- Alessandro Bottoni</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Just a quick note to say thanks for the work you've put into
- Cheetah. I had this unholy hack of several perl scripts to do my html
- templating. After seeing the light and moving to Python, I dreaded
- rewriting all of that working code. But, after finding Cheetah, I seriously
- had something working in under an hour that is way better than all of those
- perl scripts that took me weeks to write. Awesome stuff.&#8221;</span>
- <div class="citation">
- <cite>- Rob McMullen</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I write to say THANK YOU again! I'm very pleased to see such a friendly
- community. I appreciate your help! =)&#8221;</span>
- <div class="citation">
- <cite>- Timur Izhbulatov</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I hand it to the makers: Cheetah is great stuff. I've used
- WebMacro for years and this even improves on it. Specifically I like the
- blocks/functions and the ability to dynamically derive (thanks to python for
- that&#8221;</span>
- <div class="citation">
- <cite>- Torsten Rueger</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;But, the problem is PHP itself has so many bad features that I
- prefer rather Python to PHP. And I like Cheetah's inheritence aproach
- because it is scales very well for complicated web pages. I can develop
- internet application much faster using Python (e.g. using application, very
- cool and pythonic Cherry2) and Cheetah. And because extending templates
- using OO techniques is tthe feature I like, I would rather choose Cheetach
- than ZPT, SimleTAL, Nevow and similar solutions.&#8221;</span>
- <div class="citation">
- <cite>- Jaroslaw Zabiello</cite>
- </div>
- </div>
-
-
-
- <div class="quote">
- <span class="quote">&#8220;Another great bonus of Spyce is that it can work with Cheetah,
- the one templating system which I felt like I could live with.&#8221;</span>
- <div class="citation">
- <cite>- Jonathan P.</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;My graphist and me found it excellent, fast, clear, simple, stable: Pythonic!
- We found the others engines too verbose ... I use it to generate html, latex and xml&#8221;</span>
- <div class="citation">
- <cite>- William Dodé</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;I was going to try and learn Kid, but I'm in a bit of a hurry,
- and Cheetah's much closer to what I'm used to.&#8221;</span>
- <div class="citation">
- <cite>- Dave Benjamin</cite>
- </div>
- </div>
-
-
- <div class="quote">
- <span class="quote">&#8220;Personally, I prefer to Cheetah Templates to PSP - it plays better in the OO
- world, and I can use intelligent HTML/XML/SGML editors on the files.&#8221;</span>
- <div class="citation">
- <cite>- Mike Meyer</cite>
- </div>
- </div>
-
-
-
-
-
- <div class="attributionFooter"> Cheetah was created by Tavis
- Rudd, a freelance programmer and designer, with <a
- href="credits.html">contributions from many open source
- volunteers</a>.<br/>Its documentation is edited by Mike Orr, who
- also wrote its command line tool.</div> <img src="http://sourceforge.net/sflogo.php?group_id=28961&amp;type=1"
- width="0" height="0"
- border="0" alt="SourceForge.net Logo" />
-
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="copyrightFooter" align="left">
- Copyright &copy; 2001-2009 Tavis Rudd. All rights reserved.
- </div>
- </div>
-</body>
-</html>
-
-
-
-
-
diff --git a/screen.css b/screen.css
deleted file mode 100644
index 83f9d2d..0000000
--- a/screen.css
+++ /dev/null
@@ -1,282 +0,0 @@
-body {
- background-color: black;
- padding-bottom: 20px;
- color: #000033;
- font-family: verdana, "Lucida Grande", arial, helvetica, sans-serif;
-}
-
-.banner {
- padding: 0px;
- margin: 0px;
- /* background-color: red; */
-}
-.banner img {
- padding: 0px;
- margin: 0px;
- border: 0px solid blue;
- vertical-align: bottom;
-}
-
-img.bannerText {
- padding-left: 35px;
-}
-
-h1 {
-}
-h1.mainText {
- margin: 7px 2px;
- font-weight: bold;
- font-size: small;
-}
-
-p, .mainText {
- margin-left: 5px;
-}
-div.pageOuterWrapper {
- padding-left: 5%;
- padding-right: 5%;
- text-align: center;
-}
-
-div.pageInnerWrapper0 {
-}
-
-div.pageInnerWrapper1 {
- text-align: left;
- border: 1px solid #6699FF;
- background-color: #3366CC;
- padding-left: 8px;
- padding-right: 8px;
- padding-bottom: 8px;
-}
-
-div.pageInnerWrapper2 {
- border: 1px solid #6699FF;
- background-color: #6699FF;
- padding: 0px;
-}
-
-div.pageInnerWrapper3 {
- border-bottom: 1px solid #222;
- border-top: 1px solid #222;
- border-right: 1px solid #222;
- border-left: 0px solid #222;
- background-color: white;
-
- background:
- url("images/bottom_plus_leftcorner_border_shadow.gif")
- white repeat-x top left;
- padding-top: 7px;
-}
-
-html>body div.pageInnerWrapper3 {
- border-top: 0px solid black;
- background:
- url("images/bottom_border_shadow.gif")
- white repeat-x top;
- padding-top: 8px;
-}
-
-/* ie6 ignores this selector */
-div.pageInnerWrapper3:before {
- content: " ";
- display: block;
- width: 8px;
- height: 8px;
- background:
- url("images/leftcorner_border_shadow.gif")
- white repeat-y left;
- position: absolute;
- top: 0;
- right: 0;
- margin: -8px 0 0 0px;
- border: 0px;
- background-position: right top;
-}
-
-
-div.pageInnerWrapper4 {
- background-color: white;
- background:
- url("images/right_border_shadow.gif")
- white repeat-y left;
- padding-left: 8px;
-}
-
-div.pageInnerWrapper5 {
- background-color: white;
- padding: 15px;
- padding-top: 7px;
- padding-left: 7px;
-}
-
-html>body div.pageInnerWrapper5 {
- /*
- background:
- url("images/left_border_shadow.gif")
- white repeat-y right;
- */
-}
-
-
-.navBarContainer {
- color: white;
- padding: 4px 0px;
-}
-
-.navBar, a.navBar:link, a.navBar:visited {
- text-decoration: none;
- font-weight: bold;
- font-size: small;
- font-size: 12px;
- color: white;
-}
-
-a.navBar:hover, a.navBar:active {
- text-decoration: underline;
-}
-
-a.navBar.activePage {
- color: #FFFF88;
- text-decoration: none;
-}
-
-
-span.navBarSep {
- color: #6699FF;
- padding-left: 12px;
- padding-right: 12px;
-}
-
-
-div.homePageUtilLinks {
- margin-top: 22px;
- padding: 5px;
- border-bottom: 1px solid #ccc;
- background-color: #f9f9f9;
-}
-
-div.homePageUtilLinks span.sep {
- color: #999;
- padding-left: 12px;
- padding-right: 12px;
-}
-
-div.homePageQuotes {
- border-left: 1px solid #ccc;
- border-right: 1px solid #ccc;
- border-bottom: 1px solid #ccc;
- padding: 8px;
-}
-
-div.quote {
- font-size: 14px;
- font-family: georgia, "Times New Roman", serif;
- padding-top: 8px;
- padding-bottom: 8px;
-}
-
-div.citation {
- padding-left: 10px;
- padding-top: 8px;
- color: #A69E8A;
-}
-
-div.citation a,
-div.citation a:link,
-div.citation a:visited {
- color: #A69E8A;
- color: #847C68;
- font-weight: bold;
- /* background-color: #FFFFbb; */
- text-decoration: underline;
-}
-
-span.quote {
- color: #333;
-}
-a.quotesLink, a.quotesLink:link, a.quotesLink:visited {
- color: #A69E8A;
-}
-
-div.homePageDownloadBar {
- border-top: 1px solid #c1c5c9;
- border-left: 1px solid #c1c5c9;
- border-bottom: 1px solid #717579;
- border-right: 1px solid #717579;
- background-color: #f9f9f9;
-}
-
-div.homePageDownloadBarInner {
- border: 1px solid white;
- background-color: #f0f0f0;
- padding: 8px;
-}
-
-
-
-.attributionFooter {
- border-top: 1px solid #ddd;
- padding-top: 10px;
- padding-left: 10px;
- padding-right: 30px;
- font-size: 11px;
- color: #666;
-}
-
-.copyrightFooter {
- font-size: 12px;
- color: #ccc;
-}
-.sourceforgeFooter {
- padding-top: 20px;
- font-size: 11px;
- color: white;
-}
-.insetBoxTitleContainer {
- padding: 2px 5px;
- font-weight: bold;
- color: white;
-}
-
-.insetBoxTitle {
- text-decoration: none;
- font-weight: bold;
- font-size: x-small;
- color: white;
-}
-
-.insetBoxContainer {
- padding: 2px 2px 2px 5px;
-}
-
-.insetBox {
- font-size: x-small;
-}
-
-h1.insetBox {
- margin: 5px 5px;
- font-weight: bold;
- font-size: x-small;
- padding: 0px;
-}
-
-p.insetBox {
- margin: 2px 5px 7px 10px;
- padding: 0px;
-}
-
-a.insetBox:link, a.insetBox:visited {
- text-decoration: none;
- font-size: x-small;
-}
-a.insetBox:hover, a.insetBox:active {
- text-decoration: underline;
-}
-.listItems {
- margin-bottom: 200px;
-}
-
-ul.topLevel > li {
- margin-bottom: 8px;
-}
diff --git a/whouses.html b/whouses.html
deleted file mode 100644
index 44bf377..0000000
--- a/whouses.html
+++ /dev/null
@@ -1,239 +0,0 @@
-<?xml version="1.0" encoding="latin-1" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Cheetah Community Engine - The Python-Powered Template Engine</title>
-<link rel="stylesheet" href="screen.css" type="text/css" />
-</head>
-
-<body class="whouses"> <div class="banner" align="center">
- <a href="index.html"><img
- class="bannerImg" src="images/cheetah-face-black-medium.jpg" alt="" /></a>
-
- <a href="index.html"><img class="bannerText" src="images/banner_text.gif"
- alt="Cheetah Community Edition: The Python-Powered Template Engine" /></a>
- </div>
- <div class="pageOuterWrapper" align="center">
- <div class="pageInnerWrapper0">
- <div class="pageInnerWrapper1">
- <div align="center" class="navBarContainer">
- <a class="navBar "
- href="index.html">Overview</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="download.html">Download</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="learn.html">Docs</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="examples.html">Examples</a>
-<span class="navBarSep">|</span> <a class="navBar activePage"
- href="whouses.html">Who Uses It?</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="praise.html">Testimonials</a>
-<span class="navBarSep">|</span> <a class="navBar "
- href="contribute.html">Help Out</a>
- </div>
-
- <div class="pageInnerWrapper2">
- <div class="pageInnerWrapper3">
- <div class="pageInnerWrapper4">
- <div class="pageInnerWrapper5">
- <table class="whoUsesTable">
- <tr valign="top">
- <td>
-
- <p>Cheetah is being used in a wide variety of commercial, government,
- academic, personal, and open-source projects &amp; products. Products
- built with Cheetah are used by many of the Fortune 500.</p>
-
- <p>This page provides selected examples. It is not an exhaustive list. If
- you use Cheetah and wish to be added here, please send an email to the <a
- href="http://lists.sourceforge.net/mailman/listinfo/cheetahtemplate-discuss">mailing
- list</a>.</p>
-
- <ul class="topLevel">
- <li>One major example of commercial use are the email gateway appliances from
- <a href="http://www.ironport.com/products/">IronPort Systems</a>, which are
- used by the largest corporations and ISPs in the world. IronPort&#39;s products
- contain over a million lines of Python and use Cheetah plus <a
- href="http://aquarium.sf.net">Aquarium</a> for their user interfaces. Other
- major startup users of Cheetah include companies like <a href="http://youtube.com">YouTube</a>,
- <a href="http://www.yelp.com">Yelp</a> and <a href="http://www.slide.com">Slide</a>.</li>
-
- <li>A prominent example of government use is <a
- href="http://www.incidentnews.gov/">Incident News</a>, which provides news,
- photos, and other information about spill incidents and response actions in
- the U.S. A larger private site is used to feed the items on the public
- site. The site is maintained by the Hazardous Materials Response Division,
- Office of Response and Restoration, National Ocean Service, National Oceanic
- and Atmospheric Administration (NOAA), in support of U.S. Coast Guard incident
- response operations.</li>
-
- <li>The <a href="http://www.st-andrews.ac.uk/">University of St. Andrews</a>,
- in Scotland, uses Python + Cheetah for their student records system.
- St. Andrews is the 3rd oldest university in the English speaking world. See
- this <a href="http://wingware.com/python/success/st-andrews">write-up</a> for
- details.</li>
-
- <li>It is supported by, and used with, every major Python web
- development framework:
-
- <ul>
- <li><a href="http://www.webwareforpython.org/">Webware for Python</a></li>
- <li><a href="http://aquarium.sourceforge.net/">Aquarium</a></li>
- <li><a href="http://www.modpython.org/">mod_python</a></li>
- <li><a href="http://quixote.ca/qx/TemplatingWithCheetah">Quixote</a></li>
- <li><a href="http://www.cherrypy.org/">CherryPy</a>,</li>
- <li><a href="http://www.turbogears.org/">TurboGears</a></li>
- <li><a href="http://www.djangoproject.com/">Django</a></li>
- <li><a href="http://pythonpaste.org/">Paste</a></li>
- <li><a href="http://subway.python-hosting.com/">Subway</a></li>
- <li><a href="http://www.pythonweb.org/projects/webmodules/">Python Web Modules</a></li>
- <li><a href="http://spyce.sourceforge.net/">Spyce</a></li>
- <li><a href="http://www.ivy.fr/tahchee/">Tahchee</a></li>
- <li><a href="http://www.cs.virginia.edu/~lab2q/">plain-old-cgi</a></li>
- </ul>
- </li>
-
- <li>Cheetah is included in FreeBSD and most major Linux distributions:
- Gentoo, Fedora, Red Hat, Debian, and Ubuntu among others.
- The <a href="http://cobbler.et.redhat.com">Cobbler</a>
- boot/provisioning server for Fedora and Red Hat uses Cheetah heavily.</li>
-
- <li><a href="http://info.patientwire.com/">PatientWire</a></li>
- <li><a href="http://reddit.com/">reddit.com</a> 50,000 unique visitors/days</li>
- <li><a href="http://gentooexperimental.org/meatoo/">Gentoo Linux</a></li>
- <li><a href="http://dentalle.com/">Dentalle Inc.</a></li>
- <li><a href="http://bosco.tigris.org/">http://bosco.tigris.org/</a> A JMI-compliant template-based code generator. It reads XMI files and generates the corresponding source code, in different object-oriented languages (Java, Eiffel, Python, C++). In the case of Java, the generated code implements the JMI interfaces.</li>
- <li><a href="http://www.intertwingly.net/blog/">http://www.intertwingly.net/blog/</a> , blog of <a href="http://www.intertwingly.net/wiki/pie/SamRuby">Sam Ruby</a>, Apache Foundation Director</li>
- <li><a href="http://klive.cpushare.com/">http://klive.cpushare.com/</a> , <a href="http://kerneltrap.org/node/3148">Andrea Arcangeli&#39;s</a> "Linux Kernel Live Usage Monitor"</li>
- <li><a href="http://cobbler.et.redhat.com/">http://cobbler.et.redhat.com/</a> , <a href="http://cobbler.et.redhat.com">Cobbler</a> is a centralized provisioning (network deployment) server for Fedora and Red Hat based Linux distributions. Cobbler uses Cheetah for rendering kickstart files, DHCP configurations, PXE configuration trees, and to power its web user interface.</li>
- <li><a href="http://www.instasong.com/InstaSong/">http://www.instasong.com/InstaSong/</a></li>
- <li><a href="http://www.axiomfire.com/">http://www.axiomfire.com/</a> All internal tools and live eDialogues built with Cheetah</li>
- <li><a href="http://initd.org/">http://initd.org/</a> (makers of psycopg and pysqlite)</li>
- <li><a href="http://www.asti-usa.com/">http://www.asti-usa.com/</a> (Andrew Kuchling is currently porting their large web app to Cheetah)</li>
- <li><a href="http://snurf.bdash.net.nz/">http://snurf.bdash.net.nz/</a> a Python-based blogging system</li>
- <li><a href="http://linuxgazette.net/">http://linuxgazette.net/</a></li>
- <li><a href="http://www.teenwag.com/">http://www.teenwag.com/</a> 120,000+ users per day</li>
- <li><a href="http://pyblosxom.sourceforge.net/">http://pyblosxom.sourceforge.net/</a></li>
- <li><a href="http://pyds.muensterland.org/">http://pyds.muensterland.org/</a></li>
- <li><a href="http://faces.homeip.net/">http://faces.homeip.net/</a></li>
- <li><a href="http://map.wirelesslondon.info/">http://map.wirelesslondon.info/</a></li>
- <li><a href="http://tboard.sourceforge.net/">http://tboard.sourceforge.net/</a></li>
- <li><a href="http://singleshot.org/">http://singleshot.org/</a></li>
- <li><a href="http://invisiblecastle.com/">http://invisiblecastle.com/</a> free gaming site, 70,000 hits a month</li>
- <li><a href="http://www.python-hosting.com/">http://www.python-hosting.com/</a></li>
- <li><a href="http://www.petersblog.org/">http://www.petersblog.org/</a></li>
- <li><a href="http://www.lococitato.com/">http://www.lococitato.com/</a></li>
- <li><a href="http://tools.arlut.utexas.edu/DryDock/">http://tools.arlut.utexas.edu/DryDock/</a> a large web-publishing application focussed on workflow</li>
- <li><a href="http://wiki.osuosl.org/display/DEV/OJBDoc">http://wiki.osuosl.org/display/DEV/OJBDoc</a></li>
-
- <li>Cheetah supports internationalization and has a large non-English userbase, including:
- <ul>
- <li><a href="http://www.chinaliveuk.org.uk">http://www.chinaliveuk.org.uk</a> (Chinese)</li>
- <li><a href="http://www.alqua.org/">http://www.alqua.org/</a> (Spanish)</li>
- <li><a href="http://bank.muratordom.pl/">http://bank.muratordom.pl/</a> (Polish)</li>
- <li><a href="http://bank.muratorplus.pl/">http://bank.muratorplus.pl/</a> (Polish)</li>
- <li><a href="http://ustawki.net/">http://ustawki.net/</a> game-manager for soccer fans (Polish)</li>
- <li><a href="http://www.encyclon.net/multiblast">http://www.encyclon.net/multiblast</a> (Korean) Bioinformatics Tool</li>
- <li><a href="http://www.aufeinander.de/">http://www.aufeinander.de/</a> (German)</li>
- <li><a href="http://www.katechese.at/">http://www.katechese.at/</a> (German)</li>
- <li><a href="http://www.herschberger.at/">http://www.herschberger.at/</a> (German)</li>
- <li><a href="http://www.oejhw.or.at/">http://www.oejhw.or.at/</a> (German)</li>
- <li><a href="http://www.go-direct.at/">http://www.go-direct.at/</a> (German)</li>
- <li><a href="http://www.dmvoe.at/">http://www.dmvoe.at/</a> (German)</li>
- <li><a href="http://seps.flibuste.net/">http://seps.flibuste.net/</a> (French)</li>
- <li><a href="http://flibuste.net/">http://flibuste.net/</a> (French)</li>
- <li><a href="http://www.tac.cz/">http://www.tac.cz/</a> (Czech)</li>
- <li><a href="http://www.cestovatel.cz/">http://www.cestovatel.cz/</a> (Czech)</li>
- <li><a href="http://www.geogr.muni.cz/">http://www.geogr.muni.cz/</a> (Czech)</li>
- <li><a href="http://www.iddk.ru/">http://www.iddk.ru/</a> (Russian)</li>
- <li><a href="http://shop.iddk.ru/">http://shop.iddk.ru/</a> (Russian)</li>
- </ul>
- </li>
- </ul>
- </td>
- <td width="250">
- <ul>
- <li>Dell</li>
- <li>CNN</li>
- <li>NASDAQ</li>
- <li>Red Hat</li>
- <li>Ebay</li>
- <li>Sony</li>
- <li>EDS</li>
- <li>GAP</li>
- <li>Maytag</li>
- <li>PayPal</li>
- <li>Juniper</li>
- <li>Road Runner</li>
- <li>Whirlpool</li>
- <li>Capital One</li>
- <li>Liberty Mutual</li>
- <li>Continental Airlines</li>
- <li>General Foods</li>
- <li>Prudential Financial</li>
- <li>Aetna</li>
- <li>Dentalle Inc.</li>
- <li>Dentall Inc. (China)</li>
- <li><i>Hundreds of dental practices</i></li>
- <li>Imperial Optical</li>
- <li>Wolf Bioscience</li>
- <li><i>Hundreds of eye-care practices</i></li>
- <li>John Hopkins University</li>
- <li>Harvard University</li>
- <li>University of St. Andrews</li>
- <li>University of British Columbia</li>
- <li>Ryder</li>
- <li>AON</li>
- <li>Franklin Templeton Investments</li>
- <li>Manulife</li>
- <li>Societe Generale</li>
- <li>Juniper Networks</li>
- <li>Masco</li>
- <li>ADP</li>
- <li>Liberty Mutual</li>
- <li>RJ Renolds</li>
- <li>Charter Communications</li>
- <li>BNP Paribas</li>
- <li>L.A. Care Health Plan</li>
- <li>Salt Lake County</li>
- <li>Grand Prairie ISD</li>
- <li>ASTi</li>
- <li>Reddit.com</li>
- <li>LinuxGazette.com</li>
- <li>HFD.com</li>
- </ul>
- </td>
- </tr>
- </table>
-
-
-
- <div class="attributionFooter"> Cheetah was created by Tavis
- Rudd, a freelance programmer and designer, with <a
- href="credits.html">contributions from many open source
- volunteers</a>.<br/>Its documentation is edited by Mike Orr, who
- also wrote its command line tool.</div> <img src="http://sourceforge.net/sflogo.php?group_id=28961&amp;type=1"
- width="0" height="0"
- border="0" alt="SourceForge.net Logo" />
-
-
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="copyrightFooter" align="left">
- Copyright &copy; 2001-2009 Tavis Rudd. All rights reserved.
- </div>
- </div>
-</body>
-</html>
-
-
-
-
-