0.9.0
- [bug] Fixed the babel plugin to properly interpret ${} sections
  inside of a "call" tag, i.e. <%self:some_tag attr="${_('foo')}"/>.
  Code that's subject to babel escapes in here needs to be
  specified as a Python expression, not a literal.  This change
  is backwards incompatible vs. code that is relying upon a _('')
  translation to be working within a call tag.

- [bug] The Babel plugin has been repaired to work on Python 3.
  [ticket:187]

0.8.1
- [bug] Changed setup.py to skip installing markupsafe
  if Python version is < 2.6 or is between 3.0 and
  less than 3.3, as Markupsafe now only supports 2.6->2.X,
  3.3->3.X. [ticket:216]

- [bug] Fixed regression where "entity" filter wasn't
  converted for py3k properly (added tests.)
  [ticket:214]

- [bug] Fixed bug where mako-render script wasn't
  compatible with Py3k.  [ticket:212]

- [bug] Cleaned up all the various deprecation/
  file warnings when running the tests under
  various Pythons with warnings turned on.
  [ticket:213]

0.8.0
- [feature] Performance improvement to the
  "legacy" HTML escape feature, used for XML
  escaping and when markupsafe isn't present,
  courtesy George Xie.

- [bug] Fixed bug whereby an exception in Python 3
  against a module compiled to the filesystem would
  fail trying to produce a RichTraceback due to the
  content being in bytes. [ticket:209]

- [bug] Change default for compile()->reserved_names
  from tuple to frozenset, as this is expected to be
  a set by default.  [ticket:208]

- [feature] Code has been reworked to support Python 2.4->
  Python 3.xx in place.  2to3 no longer needed.

- [feature] Added lexer_cls argument to Template,
  TemplateLookup, allows alternate Lexer classes
  to be used.

- [feature] Added future_imports parameter to Template
  and TemplateLookup, renders the __future__ header
  with desired capabilities at the top of the generated
  template module.  Courtesy Ben Trofatter.

0.7.3
- [bug] legacy_html_escape function, used when
  Markupsafe isn't installed, was using an inline-compiled
  regexp which causes major slowdowns on Python 3.3;
  is now precompiled.

- [bug] AST supporting now supports tuple-packed
  function arguments inside pure-python def
  or lambda expressions.  [ticket:201]

- [bug] Fixed Py3K bug in the Babel extension.

- [bug] Fixed the "filter" attribute of the
  <%text> tag so that it pulls locally specified
  identifiers from the context the same
  way as that of <%block> and <%filter>.

- [bug] Fixed bug in plugin loader to correctly
  raise exception when non-existent plugin
  is specified.

0.7.2
- [bug] Fixed regression in 0.7.1 where AST
  parsing for Py2.4 was broken.
  [ticket:193]

0.7.1
- [feature] Control lines with no bodies will
  now succeed, as "pass" is added for these
  when no statements are otherwise present.
  Courtesy Ben Trofatter [ticket:146]

- [bug] Fixed some long-broken scoping behavior
  involving variables declared in defs and such,
  which only became apparent when
  the strict_undefined flag was turned on.
  [ticket:192]

- [bug] Can now use strict_undefined at the
  same time args passed to def() are used
  by other elements of the <%def> tag.
  [ticket:191]

0.7.0
- [feature] Added new "loop" variable to templates,
  is provided within a % for block to provide
  info about the loop such as index, first/last,
  odd/even, etc.  A migration path is also provided
  for legacy templates via the "enable_loop" argument
  available on Template, TemplateLookup, and <%page>.
  Thanks to Ben Trofatter for all
  the work on this [ticket:125]

- [feature] Added a real check for "reserved"
  names, that is names which are never pulled
  from the context and cannot be passed to
  the template.render() method.  Current names
  are "context", "loop", "UNDEFINED".

- [feature] The html_error_template() will now
  apply Pygments highlighting to the source
  code displayed in the traceback, if Pygments
  if available.  Courtesy Ben Trofatter
  [ticket:95]

- [feature] Added support for context managers,
  i.e. "% with x as e:/ % endwith" support.
  Courtesy Ben Trofatter [ticket:147]

- [feature] Added class-level flag to CacheImpl
  "pass_context"; when True, the keyword argument
  'context' will be passed to get_or_create()
  containing the Mako Context object.
  [ticket:185]

- [bug] Fixed some Py3K resource warnings due
  to filehandles being implicitly closed.
  [ticket:182]

- [bug] Fixed endless recursion bug when
  nesting multiple def-calls with content.
  Thanks to Jeff Dairiki. [ticket:186]

- [feature] Added Jinja2 to the example
  benchmark suite, courtesy Vincent Férotin

0.6.2
- [bug] The ${{"foo":"bar"}} parsing issue is fixed!!
  The legendary Eevee has slain the dragon!
  [ticket:20].  Also fixes quoting issue
  at [ticket:86].

0.6.1
- [bug] Added special compatibility for the 0.5.0
  Cache() constructor, which was preventing file
  version checks and not allowing Mako 0.6 to
  recompile the module files.

0.6.0

- [feature] Template caching has been converted into a plugin
  system, whereby the usage of Beaker is just the
  default plugin.   Template and TemplateLookup
  now accept a string "cache_impl" parameter which
  refers to the name of a cache plugin, defaulting
  to the name 'beaker'.  New plugins can be
  registered as pkg_resources entrypoints under
  the group "mako.cache", or registered directly
  using mako.cache.register_plugin().  The
  core plugin is the mako.cache.CacheImpl
  class.

- [feature] Added support for Beaker cache regions
  in templates.   Usage of regions should be considered
  as superseding the very obsolete idea of passing in
  backend options, timeouts, etc. within templates.

- [feature] The 'put' method on Cache is now
  'set'.  'put' is there for backwards compatibility.

- [feature] The <%def>, <%block> and <%page> tags now accept
  any argument named "cache_*", and the key
  minus the "cache_" prefix will be passed as keyword
  arguments to the CacheImpl methods.

- [feature] Template and TemplateLookup now accept an argument
  cache_args, which refers to a dictionary containing
  cache parameters.  The cache_dir, cache_url, cache_type,
  cache_timeout arguments are deprecated (will probably
  never be removed, however) and can be passed
  now as cache_args={'url':<some url>, 'type':'memcached',
  'timeout':50, 'dir':'/path/to/some/directory'}

- [feature/bug] Can now refer to context variables
  within extra arguments to <%block>, <%def>, i.e.
  <%block name="foo" cache_key="${somekey}">.
  Filters can also be used in this way, i.e.
  <%def name="foo()" filter="myfilter">
  then template.render(myfilter=some_callable)
  [ticket:180]

- [feature] Added "--var name=value" option to the mako-render
  script, allows passing of kw to the template from
  the command line. [ticket:178]

- [feature] Added module_writer argument to Template,
  TemplateLookup, allows a callable to be passed which
  takes over the writing of the template's module source
  file, so that special environment-specific steps
  can be taken.  [ticket:181]

- [bug] The exception message in the html_error_template
  is now escaped with the HTML filter. [ticket:142]

- [bug] Added "white-space:pre" style to html_error_template()
  for code blocks so that indentation is preserved
  [ticket:173]

- [bug] The "benchmark" example is now Python 3 compatible
  (even though several of those old template libs aren't
  available on Py3K, so YMMV) [ticket:175]

0.5
- A Template is explicitly disallowed
  from having a url that normalizes to relative outside
  of the root.   That is, if the Lookup is based
  at /home/mytemplates, an include that would place
  the ultimate template at
  /home/mytemplates/../some_other_directory,
  i.e. outside of /home/mytemplates,
  is disallowed.   This usage was never intended
  despite the lack of an explicit check.
  The main issue this causes
  is that module files can be written outside
  of the module root (or raise an error, if file perms aren't
  set up), and can also lead to the same template being
  cached in the lookup under multiple, relative roots.
  TemplateLookup instead has always supported multiple
  file roots for this purpose.
  [ticket:174]

0.4.2
- Fixed bug regarding <%call>/def calls w/ content
  whereby the identity of the "caller" callable
  inside the <%def> would be corrupted by the
  presence of another <%call> in the same block.
  [ticket:170]

- Fixed the babel plugin to accommodate <%block>
  [ticket:169]

0.4.1
- New tag: <%block>.  A variant on <%def> that
  evaluates its contents in-place.
  Can be named or anonymous,
  the named version is intended for inheritance
  layouts where any given section can be
  surrounded by the <%block> tag in order for
  it to become overrideable by inheriting
  templates, without the need to specify a
  top-level <%def> plus explicit call.
  Modified scoping and argument rules as well as a
  more strictly enforced usage scheme make it ideal
  for this purpose without at all replacing most
  other things that defs are still good for.
  Lots of new docs. [ticket:164]

- a slight adjustment to the "highlight" logic
  for generating template bound stacktraces.
  Will stick to known template source lines
  without any extra guessing. [ticket:165]

0.4.0
- A 20% speedup for a basic two-page
  inheritance setup rendering
  a table of escaped data
  (see http://techspot.zzzeek.org/2010/11/19/quick-mako-vs.-jinja-speed-test/).
  A few configurational changes which
  affect those in the I-don't-do-unicode
  camp should be noted below.

- The FastEncodingBuffer is now used
  by default instead of cStringIO or StringIO,
  regardless of whether output_encoding
  is set to None or not.  FEB is faster than
  both.  Only StringIO allows bytestrings
  of unknown encoding to pass right
  through, however - while it is of course
  not recommended to send bytestrings of unknown
  encoding to the output stream, this
  mode of usage can be re-enabled by
  setting the flag bytestring_passthrough
  to True.

- disable_unicode mode requires that
  output_encoding be set to None - it also
  forces the bytestring_passthrough flag
  to True.

- the <%namespace> tag raises an error
  if the 'template' and 'module' attributes
  are specified at the same time in
  one tag.  A different class is used
  for each case which allows a reduction in
  runtime conditional logic and function
  call overhead. [ticket:156]

- the keys() in the Context, as well as
  it's internal _data dictionary, now
  include just what was specified to
  render() as well as Mako builtins
  'caller', 'capture'.  The contents
  of __builtin__ are no longer copied.
  Thanks to Daniel Lopez for pointing
  this out. [ticket:159]

0.3.6
- Documentation is on Sphinx.
  [ticket:126]

- Beaker is now part of "extras" in
  setup.py instead of "install_requires".
  This to produce a lighter weight install
  for those who don't use the caching
  as well as to conform to Pyramid
  deployment practices.  [ticket:154]

- The Beaker import (or attempt thereof)
  is delayed until actually needed;
  this to remove the performance penalty
  from startup, particularly for
  "single execution" environments
  such as shell scripts. [ticket:153]

- Patch to lexer to not generate an empty
  '' write in the case of backslash-ended
  lines.  [ticket:155]

- Fixed missing **extra collection in
  setup.py which prevented setup.py
  from running 2to3 on install.
  [ticket:148]

- New flag on Template, TemplateLookup -
  strict_undefined=True, will cause
  variables not found in the context to
  raise a NameError immediately, instead of
  defaulting to the UNDEFINED value.

- The range of Python identifiers that
  are considered "undefined", meaning they
  are pulled from the context, has been
  trimmed back to not include variables
  declared inside of expressions (i.e. from
  list comprehensions), as well as
  in the argument list of lambdas.  This
  to better support the strict_undefined
  feature.  The change should be
  fully backwards-compatible but involved
  a little bit of tinkering in the AST code,
  which hadn't really been touched for
  a couple of years, just FYI.

0.3.5
- The <%namespace> tag allows expressions
  for the `file` argument, i.e. with ${}.
  The `context` variable, if needed,
  must be referenced explicitly.
  [ticket:141]

- ${} expressions embedded in tags,
  such as <%foo:bar x="${...}">, now
  allow multiline Python expressions.

- Fixed previously non-covered regular
  expression, such that using a ${} expression
  inside of a tag element that doesn't allow
  them raises a CompileException instead of
  silently failing.

- Added a try/except around "import markupsafe".
  This to support GAE which can't run markupsafe.
  [ticket:151] No idea whatsoever if the
  install_requires in setup.py also breaks GAE,
  couldn't get an answer on this.

0.3.4
- Now using MarkupSafe for HTML escaping,
  i.e. in place of cgi.escape().  Faster
  C-based implementation and also escapes
  single quotes for additional security.
  Supports the __html__ attribute for
  the given expression as well.

  When using "disable_unicode" mode,
  a pure Python HTML escaper function
  is used which also quotes single quotes.

  Note that Pylons by default doesn't
  use Mako's filter - check your
  environment.py file.

- Fixed call to "unicode.strip" in
  exceptions.text_error_template which
  is not Py3k compatible.  [ticket:137]

0.3.3
- Added conditional to RichTraceback
  such that if no traceback is passed
  and sys.exc_info() has been reset,
  the formatter just returns blank
  for the "traceback" portion.
  [ticket:135]

- Fixed sometimes incorrect usage of
  exc.__class__.__name__
  in html/text error templates when using
  Python 2.4 [ticket:131]

- Fixed broken @property decorator on
  template.last_modified

- Fixed error formatting when a stacktrace
  line contains no line number, as in when
  inside an eval/exec-generated function.
  [ticket:132]

- When a .py is being created, the tempfile
  where the source is stored temporarily is
  now made in the same directory as that of
  the .py file.  This ensures that the two
  files share the same filesystem, thus
  avoiding cross-filesystem synchronization
  issues.  Thanks to Charles Cazabon.

0.3.2
- Calling a def from the top, via
  template.get_def(...).render() now checks the
  argument signature the same way as it did in
  0.2.5, so that TypeError is not raised.
  reopen of [ticket:116]


0.3.1
- Fixed incorrect dir name in setup.py
  [ticket:129]

0.3
- Python 2.3 support is dropped. [ticket:123]

- Python 3 support is added ! See README.py3k
  for installation and testing notes.
  [ticket:119]

- Unit tests now run with nose.  [ticket:127]

- Source code escaping has been simplified.
  In particular, module source files are now
  generated with the Python "magic encoding
  comment", and source code is passed through
  mostly unescaped, except for that code which
  is regenerated from parsed Python source.
  This fixes usage of unicode in
  <%namespace:defname> tags.  [ticket:99]

- RichTraceback(), html_error_template().render(),
  text_error_template().render() now accept "error"
  and "traceback" as optional arguments, and
  these are now actually used.  [ticket:122]

- The exception output generated when
  format_exceptions=True will now be as a Python
  unicode if it occurred during render_unicode(),
  or an encoded string if during render().

- A percent sign can be emitted as the first
  non-whitespace character on a line by escaping
  it as in "%%". [ticket:112]

- Template accepts empty control structure, i.e.
  % if: %endif, etc. [ticket:94]

- The <%page args> tag can now be used in a base
  inheriting template - the full set of render()
  arguments are passed down through the inherits
  chain.  Undeclared arguments go into **pageargs
  as usual.  [ticket:116]

- defs declared within a <%namespace> section, an
  uncommon feature, have been improved.  The defs
  no longer get doubly-rendered in the body() scope,
  and now allow local variable assignment without
  breakage.  [ticket:109]

- Windows paths are handled correctly if a Template
  is passed only an absolute filename (i.e. with c:
  drive etc.)  and no URI - the URI is converted
  to a forward-slash path and module_directory
  is treated as a windows path.  [ticket:128]

- TemplateLookup raises TopLevelLookupException for
  a given path that is a directory, not a filename,
  instead of passing through to the template to
  generate IOError.  [ticket:73]

0.2.6

- Fix mako function decorators to preserve the
  original function's name in all cases. Patch
  from Scott Torborg.

- Support the <%namespacename:defname> syntax in
  the babel extractor. [ticket:118]

- Further fixes to unicode handling of .py files with the
  html_error_template. [ticket:88]

0.2.5
- Added a "decorator" kw argument to <%def>,
  allows custom decoration functions to wrap
  rendering callables.  Mainly intended for
  custom caching algorithms, not sure what
  other uses there may be (but there may be).
  Examples are in the "filtering" docs.

- When Mako creates subdirectories in which
  to store templates, it uses the more
  permissive mode of 0775 instead of 0750,
  helping out with certain multi-process
  scenarios. Note that the mode is always
  subject to the restrictions of the existing
  umask. [ticket:101]

- Fixed namespace.__getattr__() to raise
  AttributeError on attribute not found
  instead of RuntimeError.  [ticket:104]

- Added last_modified accessor to Template,
  returns the time.time() when the module
  was created. [ticket:97]

- Fixed lexing support for whitespace
  around '=' sign in defs. [ticket:102]

- Removed errant "lower()" in the lexer which
  was causing tags to compile with
  case-insensitive names, thus messing up
  custom <%call> names. [ticket:108]

- added "mako.__version__" attribute to
  the base module.  [ticket:110]

0.2.4
- Fixed compatibility with Jython 2.5b1.

0.2.3
- the <%namespacename:defname> syntax described at
  http://techspot.zzzeek.org/?p=28 has now
  been added as a built in syntax, and is recommended
  as a more modern syntax versus <%call expr="expression">.
  The %call tag itself will always remain,
  with <%namespacename:defname> presenting a more HTML-like
  alternative to calling defs, both plain and
  nested.  Many examples of the new syntax are in the
  "Calling a def with embedded content" section
  of the docs.

- added support for Jython 2.5.

- cache module now uses Beaker's CacheManager
  object directly, so that all cache types are included.
  memcached is available as both "ext:memcached" and
  "memcached", the latter for backwards compatibility.

- added "cache" accessor to Template, Namespace.
  e.g.  ${local.cache.get('somekey')} or
  template.cache.invalidate_body()

- added "cache_enabled=True" flag to Template,
  TemplateLookup.  Setting this to False causes cache
  operations to "pass through" and execute every time;
  this flag should be integrated in Pylons with its own
  cache_enabled configuration setting.

- the Cache object now supports invalidate_def(name),
  invalidate_body(), invalidate_closure(name),
  invalidate(key), which will remove the given key
  from the cache, if it exists.  The cache arguments
  (i.e. storage type) are derived from whatever has
  been already persisted for that template.
  [ticket:92]

- For cache changes to work fully, Beaker 1.1 is required.
  1.0.1 and up will work as well with the exception of
  cache expiry.  Note that Beaker 1.1 is **required**
  for applications which use dynamically generated keys,
  since previous versions will permanently store state in memory
  for each individual key, thus consuming all available
  memory for an arbitrarily large number of distinct
  keys.

- fixed bug whereby an <%included> template with
  <%page> args named the same as a __builtin__ would not
  honor the default value specified in <%page> [ticket:93]

- fixed the html_error_template not handling tracebacks from
  normal .py files with a magic encoding comment [ticket:88]

- RichTraceback() now accepts an optional traceback object
  to be used in place of sys.exc_info()[2].  html_error_template()
  and text_error_template() accept an optional
  render()-time argument "traceback" which is passed to the
  RichTraceback object.

- added ModuleTemplate class, which allows the construction
  of a Template given a Python module generated by a previous
  Template.   This allows Python modules alone to be used
  as templates with no compilation step.   Source code
  and template source are optional but allow error reporting
  to work correctly.

- fixed Python 2.3 compat. in mako.pyparser [ticket:90]

- fix Babel 0.9.3 compatibility; stripping comment tags is now
  optional (and enabled by default).


0.2.2
- cached blocks now use the current context when rendering
an expired section, instead of the original context
passed in [ticket:87]
- fixed a critical issue regarding caching, whereby
a cached block would raise an error when called within a
cache-refresh operation that was initiated after the
initiating template had completed rendering.

0.2.1
- fixed bug where 'output_encoding' parameter would prevent
render_unicode() from returning a unicode object.
- bumped magic number, which forces template recompile for
this version (fixes incompatible compile symbols from 0.1
series).
- added a few docs for cache options, specifically those that
help with memcached.

0.2.0
- Speed improvements (as though we needed them, but people
  contributed and there you go):

  - added "bytestring passthru" mode, via
    `disable_unicode=True` argument passed to Template or
    TemplateLookup. All unicode-awareness and filtering is
    turned off, and template modules are generated with
    the appropriate magic encoding comment. In this mode,
    template expressions can only receive raw bytestrings
    or Unicode objects which represent straight ASCII, and
    render_unicode() may not be used if multibyte
    characters are present. When enabled, speed
    improvement around 10-20%. [ticket:77] (courtesy
    anonymous guest)

  - inlined the "write" function of Context into a local
    template variable. This affords a 12-30% speedup in
    template render time. (idea courtesy same anonymous
    guest) [ticket:76]

- New Features, API changes:

  - added "attr" accessor to namespaces. Returns
    attributes configured as module level attributes, i.e.
    within <%! %> sections.  [ticket:62] i.e.:

    # somefile.html
    <%!
        foo = 27
    %>

    # some other template
    <%namespace name="myns" file="somefile.html"/>
    ${myns.attr.foo}

    The slight backwards incompatibility here is, you
    can't have namespace defs named "attr" since the
    "attr" descriptor will occlude it.

  - cache_key argument can now render arguments passed
    directly to the %page or %def, i.e. <%def
    name="foo(x)" cached="True" cache_key="${x}"/>
    [ticket:78]

  - some functions on Context are now private:
    _push_buffer(), _pop_buffer(),
    caller_stack._push_frame(), caller_stack._pop_frame().

  - added a runner script "mako-render" which renders
    standard input as a template to stdout [ticket:81]
    [ticket:56]

- Bugfixes:
  - can now use most names from __builtins__ as variable
    names without explicit declaration (i.e. 'id',
    'exception', 'range', etc.) [ticket:83] [ticket:84]

  - can also use builtin names as local variable names
    (i.e. dict, locals) (came from fix for [ticket:84])

  - fixed bug in python generation when variable names are
    used with identifiers like "else", "finally", etc.
    inside them [ticket:68]

  - fixed codegen bug which occured when using <%page>
    level caching, combined with an expression-based
    cache_key, combined with the usage of <%namespace
    import="*"/> - fixed lexer exceptions not cleaning up
    temporary files, which could lead to a maximum number
    of file descriptors used in the process [ticket:69]

  - fixed issue with inline format_exceptions that was
    producing blank exception pages when an inheriting
    template is present [ticket:71]

  - format_exceptions will apply the encoding options of
    html_error_template() to the buffered output

  - rewrote the "whitespace adjuster" function to work
    with more elaborate combinations of quotes and
    comments [ticket:75]

0.1.10
- fixed propagation of 'caller' such that nested %def calls
  within a <%call> tag's argument list propigates 'caller'
  to the %call function itself (propigates to the inner
  calls too, this is a slight side effect which previously
  existed anyway)
- fixed bug where local.get_namespace() could put an
  incorrect "self" in the current context
- fixed another namespace bug where the namespace functions
  did not have access to the correct context containing
  their 'self' and 'parent'

0.1.9
- filters.Decode filter can also accept a non-basestring
object and will call str() + unicode() on it [ticket:47]
- comments can be placed at the end of control lines,
i.e. if foo: # a comment, [ticket:53], thanks to
Paul Colomiets
- fixed expressions and page tag arguments and with embedded
newlines in CRLF templates, follow up to [ticket:16], thanks
Eric Woroshow
- added an IOError catch for source file not found in RichTraceback
exception reporter [ticket:51]

0.1.8
- variable names declared in render methods by internal
codegen prefixed by "__M_" to prevent name collisions
with user code
- added a Babel (http://babel.edgewall.org/) extractor entry
point, allowing extraction of gettext messages directly from
mako templates via Babel [ticket:45]
- fix to turbogears plugin to work with dot-separated names
(i.e. load_template('foo.bar')).  also takes file extension
as a keyword argument (default is 'mak').
- more tg fix:  fixed [ticket:35], allowing string-based
templates with tgplugin even if non-compatible args were sent

0.1.7
- one small fix to the unit tests to support python 2.3
- a slight hack to how cache.py detects Beaker's memcached,
works around unexplained import behavior observed on some
python 2.3 installations

0.1.6
- caching is now supplied directly by Beaker, which has
  all of MyghtyUtils merged into it now.  The latest Beaker
  (0.7.1) also fixes a bug related to how Mako was using the
  cache API.
- fix to module_directory path generation when the path is "./"
  [ticket:34]
- TGPlugin passes options to string-based templates [ticket:35]
- added an explicit stack frame step to template runtime, which
  allows much simpler and hopefully bug-free tracking of 'caller',
  fixes #28
- if plain Python defs are used with <%call>, a decorator
  @runtime.supports_callable exists to ensure that the "caller"
  stack is properly handled for the def.
- fix to RichTraceback and exception reporting to get template
  source code as a unicode object #37
- html_error_template includes options "full=True", "css=True"
  which control generation of HTML tags, CSS [ticket:39]
- added the 'encoding_errors' parameter to Template/TemplateLookup
  for specifying the error handler associated with encoding to
  'output_encoding' [ticket:40]
- the Template returned by html_error_template now defaults to
  output_encoding=sys.getdefaultencoding(),
  encoding_errors='htmlentityreplace' [ticket:37]
- control lines, i.e. % lines, support backslashes to continue long
  lines (#32)
- fixed codegen bug when defining <%def> within <%call> within <%call>
- leading utf-8 BOM in template files is honored according to pep-0263

0.1.5
- AST expression generation - added in just about everything
  expression-wise from the AST module  [ticket:26]
- AST parsing, properly detects imports of the form "import foo.bar"
  [ticket:27]
- fix to lexing of <%docs> tag nested in other tags
- fix to context-arguments inside of <%include> tag which broke
during 0.1.4 [ticket:29]
- added "n" filter, disables *all* filters normally applied to an expression
via <%page> or default_filters (but not those within the filter)
- added buffer_filters argument, defines filters applied to the return value
of buffered/cached/filtered %defs, after all filters defined with the %def
itself have been applied.  allows the creation of default expression filters
that let the output of return-valued %defs "opt out" of that filtering
via passing special attributes or objects.

0.1.4
- got defs-within-defs to be cacheable
- fixes to code parsing/whitespace adjusting where plain python comments
  may contain quote characters [ticket:23]
- fix to variable scoping for identifiers only referenced within
  functions
- added a path normalization step to lookup so URIs like
  "/foo/bar/../etc/../foo" pre-process the ".." tokens before checking
  the filesystem
- fixed/improved "caller" semantics so that undefined caller is
  "UNDEFINED", propigates __nonzero__ method so it evaulates to False if
  not present, True otherwise. this way you can say % if caller:\n
  ${caller.body()}\n% endif
- <%include> has an "args" attribute that can pass arguments to the
  called template (keyword arguments only, must be declared in that
  page's <%page> tag.)
- <%include> plus arguments is also programmatically available via
  self.include_file(<filename>, **kwargs)
- further escaping added for multibyte expressions in %def, %call
  attributes [ticket:24]


0.1.3
- ***Small Syntax Change*** - the single line comment character is now
*two* hash signs, i.e. "## this is a comment".  This avoids a common
collection with CSS selectors.
- the magic "coding" comment (i.e. # coding:utf-8) will still work with
either one "#" sign or two for now; two is preferred going forward, i.e.
## coding:<someencoding>.
- new multiline comment form: "<%doc> a comment </%doc>"
- UNDEFINED evaluates to False
- improvement to scoping of "caller" variable when using <%call> tag
- added lexer error for unclosed control-line (%) line
- added "preprocessor" argument to Template, TemplateLookup - is a single
  callable or list of callables which will be applied to the template text
  before lexing.  given the text as an argument, returns the new text.
- added mako.ext.preprocessors package, contains one preprocessor so far:
  'convert_comments', which will convert single # comments to the new ##
  format

0.1.2
- fix to parsing of code/expression blocks to insure that non-ascii
  characters, combined with a template that indicates a non-standard
  encoding, are expanded into backslash-escaped glyphs before being AST
  parsed [ticket:11]
- all template lexing converts the template to unicode first, to
  immediately catch any encoding issues and ensure internal unicode
  representation.
- added module_filename argument to Template to allow specification of a
  specific module file
- added modulename_callable to TemplateLookup to allow a function to
  determine module filenames (takes filename, uri arguments). used for
  [ticket:14]
- added optional input_encoding flag to Template, to allow sending a
  unicode() object with no magic encoding comment
- "expression_filter" argument in <%page> applies only to expressions
- added "default_filters" argument to Template, TemplateLookup. applies only
  to expressions, gets prepended to "expression_filter" arg from <%page>.
  defaults to ["unicode"], so that all expressions get stringified into u''
  by default (this is what Mako already does). By setting to [], expressions
  are passed through raw.
- added "imports" argument to Template, TemplateLookup. so you can predefine
  a list of import statements at the top of the template. can be used in
  conjunction with default_filters.
- support for CRLF templates...whoops ! welcome to all the windows users.
  [ticket:16]
- small fix to local variable propigation for locals that are conditionally
  declared
- got "top level" def calls to work, i.e. template.get_def("somedef").render()

0.1.1
- buffet plugin supports string-based templates, allows ToscaWidgets to work
  [ticket:8]
- AST parsing fixes: fixed TryExcept identifier parsing
- removed textmate tmbundle from contrib and into separate SVN location;
  windows users cant handle those files, setuptools not very good at
  "pruning" certain directories
- fix so that "cache_timeout" parameter is propigated
- fix to expression filters so that string conversion (actually unicode)
  properly occurs before filtering
- better error message when a lookup is attempted with a template that has no
  lookup
- implemented "module" attribute for namespace
- fix to code generation to correctly track multiple defs with the same name
- "directories" can be passed to TemplateLookup as a scalar in which case it
  gets converted to a list [ticket:9]

0.1.0

Initial release.
