List of release changes.
0.4dev
Tue Mar 12, 2013
- support inline tags along with text. Eg,
<div> hello world <span> how are you
- Tags can also be nested in a text line. Eg,
First name : <inptext :firstname>
- Added tagspan and textspan grammar to support nested tags in the same
line.
- Added @@return statement, where template functions can return objects
other than template code. A corresponding popobject() instruction is added.
- Template plugins can define configuration settings using ConfigDict and
default_settings method. Although settings value must always be
string. ISettings methods added for BaseTTL and other plugins
implemented in tayra.
- Package info (package() entry point) returns list of template plugins
available in tayra package.
- Lexer preserves the token and its line no in ttl text while passing them to
the parser.
- Line no information from lexer are coded in the intermediate python file
in debug mode to accurately map exceptions to the correct line in the
ttl-file.
- Revamped filter block handling in ast and pycode.
- Codegen used __traceback_decorator__ to map exceptions to ttl file location.
- Improved vim-plugin for TTL filetype.
- Expression substitution is made pluggable. Any text within the ${ ... }
syntax is now handled by a runtime plugin implementing ITayraExpression
interface.
- TTLCompiler[‘expression.default’] configuration parameter specifies
the default ITayraExpression plugin to handle the expression.
- To invoke a specific plugin, ${-<name> ... },
where <name> is the plugin name to handle expression substitution.
- Renamed TTLCompiler[‘use_tag_plugins’] to TTLCompiler[‘tag.plugins’].
- ITayraEscFilter specification is merged with ITayraExpression interface
specification.
- TayraExpression plugin py added. This plugin is configured as the default
handler for expression substitution.
- TayraExpression plugin evalpy added.
- Added test cases for pluggable expression substitution feature.
Instead of blindly importing all utility functions from pluggdapps.utils,
these functions are first imported, individually, into tayra.utils and
then populated into a container object. This container object is finally made
available in template context as h. Eg,
<head>
<body>
${ h.parsecsv( 'one, two, three' ) }
${ h.parsecsvlines( 'one, \\n two,
three' ) }
${ dir(h) }