=======
CHANGES
=======

Release 0.7.0 (2009-05-24)
--------------------------

* [Enhancements]

  * Python 3.0 is now supported officially.

  * Google AppEngine (GAE) supported.
    You can use pyTenjin on Google AppEngine with memcache.
    See FAQ: 'Is pyTenjin ready for Google App Engine?' section.
    http://www.kuwata-lab.com/tenjin/pytenjin-faq.html#faq-google-appengine

  * Logging support.
    ex:

      import logging
      logging.basicConfig(level=logging.DEBUG)
      tenjin.logger = logging
      tenjin.Engine().render('index.pyhtml')  # report some messages

  * enerate_tostrfun() can take not only encode-encoding but also
    decode-encoding. These are exclusive.

    ex:
      ## convert unicode object into binary(=str)
      to_str = tenjin.generate_tostrfunc(encode='utf-8')
      ## convert binary(=str) into unicode object
      to_str = tenjin.generate_tostrfunc(decode='utf-8')

  * (Experimental) HTML helper functions are now provided.
    ex:

      >>> import tenjin
      >>> from tenjin.helpers.html import *
      >>> checked(1==1)
      ' checked="checked"'
      >>> checked(1==0)
      ''
      >>> selected(1==1)
      ' selected="selected"'
      >>> tagattr(klass='error', style='color:red')
      'class="error" style="color:red"'
      >>> tagattr(width='', height=0)
      ''
      >>> nv('rank', 'A')      # name and value
      'name="rank" value="A"'
      >>> nv('rank', 'A', '.', klass='opt')
      'name="rank" value="A" id="rank.A" class="opt"'

  * New command-line option '-a cache' supported.
    This option enables you to generate template cache files in advance.

  * You can share caches between all engine objects.
    PyTenjin now uses full-path of template file as key of cache.
    So you can share caches between engines which have different
    search path.
    ex:

      shared = tenjin.MarshalCacheStorage()
      engine1 = tenjin.Engine(path=['views/books', 'views'], cache=shared)
      engine2 = tenjin.Engine(path=['views/authors', 'views'], cache=shared)

  * Pickle-base and text-base template caching support.
    If you pass 'cache=tenjin.PickleCacheStorage()' or
    'cache=tenjin.TextCacheStorage()' option to template.Engine(),
    pyTenjin creates pickle-base or text-base cache files instead of
    marshal-base caches.
    These are useful in environment in which marshal module is
    not available, such as Google AppEngine.

* [Changes]

  * 'cache' option for tenjin.Engine() changed.
    (0.6.2)
      cache=True  :  cached both in memory and file (marshal-based)
      cache=None  :  same as cache=True
      cache=False :  cached in meory but not in file
    (0.7.0)
      cache=True  :  cached both in memory and file (marshal-based)
      cache=None  :  cached in meory but not in file
      cache=False :  never cached both in memory nor file

  * to_str() is changed to encode unicode object into binary(=str)
    using utf-8 encoding in default.
    In short:

      to_str = generate_tostrfunc(encode='utf-8')   # 0.7.0
      to_str = generate_tostrfunc(encode=None)      # 0.6.2

  * Benchmark script now skips to do benchmark template libraries
    which are failed to import.

* [BugFix]

  * In preprocessing, error was raised when expression is not string.
    Now fixed.


Release 0.6.2 (2008-02-27)
--------------------------

* [Changes]

  * Package name is changed from 'pyTenjin' to 'Tenjin'

  * When '-S', '-a retrieve', '-X', or '-a statements' specified,
    pytenjin command replaces text before expressions into spaces
    and print it.

* [Bugfix]

  * pytenjin command printed "\n\n" instead of "\n" when '-U' specified.
    Fixed to print "\n".


Release 0.6.1 (2007-10-23)
--------------------------

* [Enhancements]

  * Benchmark script (benchmark/bench.py) is rewrited.

  * Benchmark supports Genshi, Mako, and Templetor.

  * Add examples.

* [Bugfix]

  * Typo in User's Guide is fixed.


Release 0.6.0 (2007-08-04)
--------------------------

* first release
