| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 | 
							- * 1.6.0 (2012-02-04)
 - 
 -  * fixed raw blocks when used with the whitespace trim option
 -  * made a speed optimization to macro calls when imported via the "from" tag
 -  * fixed globals, parsers, visitors, filters, tests, and functions management in Twig_Environment when a new one or new extension is added
 -  * fixed the attribute function when passing arguments
 -  * added slice notation support for the [] operator (syntactic sugar for the slice operator)
 -  * added a slice filter
 -  * added string support for the reverse filter
 -  * fixed the empty test and the length filter for Twig_Markup instances
 -  * added a date function to ease date comparison
 -  * fixed unary operators precedence
 -  * added recursive parsing support in the parser
 -  * added string and integer handling for the random function
 - 
 - * 1.5.1 (2012-01-05)
 - 
 -  * fixed a regression when parsing strings
 - 
 - * 1.5.0 (2012-01-04)
 - 
 -  * added Traversable objects support for the join filter
 - 
 - * 1.5.0-RC2 (2011-12-30)
 - 
 -  * added a way to set the default global date interval format
 -  * fixed the date filter for DateInterval instances (setTimezone() does not exist for them)
 -  * refactored Twig_Template::display() to ease its extension
 -  * added a number_format filter
 - 
 - * 1.5.0-RC1 (2011-12-26)
 - 
 -  * removed the need to quote hash keys
 -  * allowed hash keys to be any expression
 -  * added a do tag
 -  * added a flush tag
 -  * added support for dynamically named filters and functions
 -  * added a dump function to help debugging templates
 -  * added a nl2br filter
 -  * added a random function
 -  * added a way to change the default format for the date filter
 -  * fixed the lexer when an operator ending with a letter ends a line
 -  * added string interpolation support
 -  * enhanced exceptions for unknown filters, functions, tests, and tags
 - 
 - * 1.4.0 (2011-12-07)
 - 
 -  * fixed lexer when using big numbers (> PHP_INT_MAX)
 -  * added missing preserveKeys argument to the reverse filter
 -  * fixed macros containing filter tag calls
 - 
 - * 1.4.0-RC2 (2011-11-27)
 - 
 -  * removed usage of Reflection in Twig_Template::getAttribute()
 -  * added a C extension that can optionally replace Twig_Template::getAttribute()
 -  * added negative timestamp support to the date filter
 - 
 - * 1.4.0-RC1 (2011-11-20)
 - 
 -  * optimized variable access when using PHP 5.4
 -  * changed the precedence of the .. operator to be more consistent with languages that implements such a feature like Ruby
 -  * added an Exception to Twig_Loader_Array::isFresh() method when the template does not exist to be consistent with other loaders
 -  * added Twig_Function_Node to allow more complex functions to have their own Node class
 -  * added Twig_Filter_Node to allow more complex filters to have their own Node class
 -  * added Twig_Test_Node to allow more complex tests to have their own Node class
 -  * added a better error message when a template is empty but contain a BOM
 -  * fixed "in" operator for empty strings
 -  * fixed the "defined" test and the "default" filter (now works with more than one call (foo.bar.foo) and for both values of the strict_variables option)
 -  * changed the way extensions are loaded (addFilter/addFunction/addGlobal/addTest/addNodeVisitor/addTokenParser/addExtension can now be called in any order)
 -  * added Twig_Environment::display()
 -  * made the escape filter smarter when the encoding is not supported by PHP
 -  * added a convert_encoding filter
 -  * moved all node manipulations outside the compile() Node method
 -  * made several speed optimizations
 - 
 - * 1.3.0 (2011-10-08)
 - 
 - no changes
 - 
 - * 1.3.0-RC1 (2011-10-04)
 - 
 -  * added an optimization for the parent() function
 -  * added cache reloading when auto_reload is true and an extension has been modified
 -  * added the possibility to force the escaping of a string already marked as safe (instance of Twig_Markup)
 -  * allowed empty templates to be used as traits
 -  * added traits support for the "parent" function
 - 
 - * 1.2.0 (2011-09-13)
 - 
 - no changes
 - 
 - * 1.2.0-RC1 (2011-09-10)
 - 
 -  * enhanced the exception when a tag remains unclosed
 -  * added support for empty Countable objects for the "empty" test
 -  * fixed algorithm that determines if a template using inheritance is valid (no output between block definitions)
 -  * added better support for encoding problems when escaping a string (available as of PHP 5.4)
 -  * added a way to ignore a missing template when using the "include" tag ({% include "foo" ignore missing %})
 -  * added support for an array of templates to the "include" and "extends" tags ({% include ['foo', 'bar'] %})
 -  * added support for bitwise operators in expressions
 -  * added the "attribute" function to allow getting dynamic attributes on variables
 -  * added Twig_Loader_Chain
 -  * added Twig_Loader_Array::setTemplate()
 -  * added an optimization for the set tag when used to capture a large chunk of static text
 -  * changed name regex to match PHP one "[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*" (works for blocks, tags, functions, filters, and macros)
 -  * removed the possibility to use the "extends" tag from a block
 -  * added "if" modifier support to "for" loops
 - 
 - * 1.1.2 (2011-07-30)
 - 
 -  * fixed json_encode filter on PHP 5.2
 -  * fixed regression introduced in 1.1.1 ({{ block(foo|lower) }})
 -  * fixed inheritance when using conditional parents
 -  * fixed compilation of templates when the body of a child template is not empty
 -  * fixed output when a macro throws an exception
 -  * fixed a parsing problem when a large chunk of text is enclosed in a comment tag
 -  * added PHPDoc for all Token parsers and Core extension functions
 - 
 - * 1.1.1 (2011-07-17)
 - 
 -  * added a performance optimization in the Optimizer (also helps to lower the number of nested level calls)
 -  * made some performance improvement for some edge cases
 - 
 - * 1.1.0 (2011-06-28)
 - 
 -  * fixed json_encode filter
 - 
 - * 1.1.0-RC3 (2011-06-24)
 - 
 -  * fixed method case-sensitivity when using the sandbox mode
 -  * added timezone support for the date filter
 -  * fixed possible security problems with NUL bytes
 - 
 - * 1.1.0-RC2 (2011-06-16)
 - 
 -  * added an exception when the template passed to "use" is not a string
 -  * made 'a.b is defined' not throw an exception if a is not defined (in strict mode)
 -  * added {% line \d+ %} directive
 - 
 - * 1.1.0-RC1 (2011-05-28)
 - 
 - Flush your cache after upgrading.
 - 
 -  * fixed date filter when using a timestamp
 -  * fixed the defined test for some cases
 -  * fixed a parsing problem when a large chunk of text is enclosed in a raw tag
 -  * added support for horizontal reuse of template blocks (see docs for more information)
 -  * added whitespace control modifier to all tags (see docs for more information)
 -  * added null as an alias for none (the null test is also an alias for the none test now)
 -  * made TRUE, FALSE, NONE equivalent to their lowercase counterparts
 -  * wrapped all compilation and runtime exceptions with Twig_Error_Runtime and added logic to guess the template name and line
 -  * moved display() method to Twig_Template (generated templates should now use doDisplay() instead)
 - 
 - * 1.0.0 (2011-03-27)
 - 
 -  * fixed output when using mbstring
 -  * fixed duplicate call of methods when using the sandbox
 -  * made the charset configurable for the escape filter
 - 
 - * 1.0.0-RC2 (2011-02-21)
 - 
 -  * changed the way {% set %} works when capturing (the content is now marked as safe)
 -  * added support for macro name in the endmacro tag
 -  * make Twig_Error compatible with PHP 5.3.0 >
 -  * fixed an infinite loop on some Windows configurations
 -  * fixed the "length" filter for numbers
 -  * fixed Template::getAttribute() as properties in PHP are case sensitive
 -  * removed coupling between Twig_Node and Twig_Template
 -  * fixed the ternary operator precedence rule
 - 
 - * 1.0.0-RC1 (2011-01-09)
 - 
 - Backward incompatibilities:
 - 
 -  * the "items" filter, which has been deprecated for quite a long time now, has been removed
 -  * the "range" filter has been converted to a function: 0|range(10) -> range(0, 10)
 -  * the "constant" filter has been converted to a function: {{ some_date|date('DATE_W3C'|constant) }} -> {{ some_date|date(constant('DATE_W3C')) }}
 -  * the "cycle" filter has been converted to a function: {{ ['odd', 'even']|cycle(i) }} -> {{ cycle(['odd', 'even'], i) }}
 -  * the "for" tag does not support "joined by" anymore
 -  * the "autoescape" first argument is now "true"/"false" (instead of "on"/"off")
 -  * the "parent" tag has been replaced by a "parent" function ({{ parent() }} instead of {% parent %})
 -  * the "display" tag has been replaced by a "block" function ({{ block('title') }} instead of {% display title %})
 -  * removed the grammar and simple token parser (moved to the Twig Extensions repository)
 - 
 - Changes:
 - 
 -  * added "needs_context" option for filters and functions (the context is then passed as a first argument)
 -  * added global variables support
 -  * made macros return their value instead of echoing directly (fixes calling a macro in sandbox mode)
 -  * added the "from" tag to import macros as functions
 -  * added support for functions (a function is just syntactic sugar for a getAttribute() call)
 -  * made macros callable when sandbox mode is enabled
 -  * added an exception when a macro uses a reserved name
 -  * the "default" filter now uses the "empty" test instead of just checking for null
 -  * added the "empty" test
 - 
 - * 0.9.10 (2010-12-16)
 - 
 - Backward incompatibilities:
 - 
 -  * The Escaper extension is enabled by default, which means that all displayed
 -    variables are now automatically escaped. You can revert to the previous
 -    behavior by removing the extension via $env->removeExtension('escaper')
 -    or just set the 'autoescape' option to 'false'.
 -  * removed the "without loop" attribute for the "for" tag (not needed anymore
 -    as the Optimizer take care of that for most cases)
 -  * arrays and hashes have now a different syntax
 -      * arrays keep the same syntax with square brackets: [1, 2]
 -      * hashes now use curly braces (["a": "b"] should now be written as {"a": "b"})
 -      * support for "arrays with keys" and "hashes without keys" is not supported anymore ([1, "foo": "bar"] or {"foo": "bar", 1})
 -  * the i18n extension is now part of the Twig Extensions repository
 - 
 - Changes:
 - 
 -  * added the merge filter
 -  * removed 'is_escaper' option for filters (a left over from the previous version) -- you must use 'is_safe' now instead
 -  * fixed usage of operators as method names (like is, in, and not)
 -  * changed the order of execution for node visitors
 -  * fixed default() filter behavior when used with strict_variables set to on
 -  * fixed filesystem loader compatibility with PHAR files
 -  * enhanced error messages when an unexpected token is parsed in an expression
 -  * fixed filename not being added to syntax error messages
 -  * added the autoescape option to enable/disable autoescaping
 -  * removed the newline after a comment (mimicks PHP behavior)
 -  * added a syntax error exception when parent block is used on a template that does not extend another one
 -  * made the Escaper extension enabled by default
 -  * fixed sandbox extension when used with auto output escaping
 -  * fixed escaper when wrapping a Twig_Node_Print (the original class must be preserved)
 -  * added an Optimizer extension (enabled by default; optimizes "for" loops and "raw" filters)
 -  * added priority to node visitors
 - 
 - * 0.9.9 (2010-11-28)
 - 
 - Backward incompatibilities:
 -  * the self special variable has been renamed to _self
 -  * the odd and even filters are now tests:
 -      {{ foo|odd }} must now be written {{ foo is odd }}
 -  * the "safe" filter has been renamed to "raw"
 -  * in Node classes,
 -         sub-nodes are now accessed via getNode() (instead of property access)
 -         attributes via getAttribute() (instead of array access)
 -  * the urlencode filter had been renamed to url_encode
 -  * the include tag now merges the passed variables with the current context by default
 -    (the old behavior is still possible by adding the "only" keyword)
 -  * moved Exceptions to Twig_Error_* (Twig_SyntaxError/Twig_RuntimeError are now Twig_Error_Syntax/Twig_Error_Runtime)
 -  * removed support for {{ 1 < i < 3 }} (use {{ i > 1 and i < 3 }} instead)
 -  * the "in" filter has been removed ({{ a|in(b) }} should now be written {{ a in b }})
 - 
 - Changes:
 -  * added file and line to Twig_Error_Runtime exceptions thrown from Twig_Template
 -  * changed trans tag to accept any variable for the plural count
 -  * fixed sandbox mode (__toString() method check was not enforced if called implicitly from complex statements)
 -  * added the ** (power) operator
 -  * changed the algorithm used for parsing expressions
 -  * added the spaceless tag
 -  * removed trim_blocks option
 -  * added support for is*() methods for attributes (foo.bar now looks for foo->getBar() or foo->isBar())
 -  * changed all exceptions to extend Twig_Error
 -  * fixed unary expressions ({{ not(1 or 0) }})
 -  * fixed child templates (with an extend tag) that uses one or more imports
 -  * added support for {{ 1 not in [2, 3] }} (more readable than the current {{ not (1 in [2, 3]) }})
 -  * escaping has been rewritten
 -  * the implementation of template inheritance has been rewritten
 -    (blocks can now be called individually and still work with inheritance)
 -  * fixed error handling for if tag when a syntax error occurs within a subparse process
 -  * added a way to implement custom logic for resolving token parsers given a tag name
 -  * fixed js escaper to be stricter (now uses a whilelist-based js escaper)
 -  * added the following filers: "constant", "trans", "replace", "json_encode"
 -  * added a "constant" test
 -  * fixed objects with __toString() not being autoescaped
 -  * fixed subscript expressions when calling __call() (methods now keep the case)
 -  * added "test" feature (accessible via the "is" operator)
 -  * removed the debug tag (should be done in an extension)
 -  * fixed trans tag when no vars are used in plural form
 -  * fixed race condition when writing template cache
 -  * added the special _charset variable to reference the current charset
 -  * added the special _context variable to reference the current context
 -  * renamed self to _self (to avoid conflict)
 -  * fixed Twig_Template::getAttribute() for protected properties
 - 
 - * 0.9.8 (2010-06-28)
 - 
 - Backward incompatibilities:
 -  * the trans tag plural count is now attached to the plural tag:
 -     old: `{% trans count %}...{% plural %}...{% endtrans %}`
 -     new: `{% trans %}...{% plural count %}...{% endtrans %}`
 - 
 -  * added a way to translate strings coming from a variable ({% trans var %})
 -  * fixed trans tag when used with the Escaper extension
 -  * fixed default cache umask
 -  * removed Twig_Template instances from the debug tag output
 -  * fixed objects with __isset() defined
 -  * fixed set tag when used with a capture
 -  * fixed type hinting for Twig_Environment::addFilter() method
 - 
 - * 0.9.7 (2010-06-12)
 - 
 - Backward incompatibilities:
 -  * changed 'as' to '=' for the set tag ({% set title as "Title" %} must now be {% set title = "Title" %})
 -  * removed the sandboxed attribute of the include tag (use the new sandbox tag instead)
 -  * refactored the Node system (if you have custom nodes, you will have to update them to use the new API)
 - 
 -  * added self as a special variable that refers to the current template (useful for importing macros from the current template)
 -  * added Twig_Template instance support to the include tag
 -  * added support for dynamic and conditional inheritance ({% extends some_var %} and {% extends standalone ? "minimum" : "base" %})
 -  * added a grammar sub-framework to ease the creation of custom tags
 -  * fixed the for tag for large arrays (some loop variables are now only available for arrays and objects that implement the Countable interface)
 -  * removed the Twig_Resource::resolveMissingFilter() method
 -  * fixed the filter tag which did not apply filtering to included files
 -  * added a bunch of unit tests
 -  * added a bunch of phpdoc
 -  * added a sandbox tag in the sandbox extension
 -  * changed the date filter to support any date format supported by DateTime
 -  * added strict_variable setting to throw an exception when an invalid variable is used in a template (disabled by default)
 -  * added the lexer, parser, and compiler as arguments to the Twig_Environment constructor
 -  * changed the cache option to only accepts an explicit path to a cache directory or false
 -  * added a way to add token parsers, filters, and visitors without creating an extension
 -  * added three interfaces: Twig_NodeInterface, Twig_TokenParserInterface, and Twig_FilterInterface
 -  * changed the generated code to match the new coding standards
 -  * fixed sandbox mode (__toString() method check was not enforced if called implicitly from a simple statement like {{ article }})
 -  * added an exception when a child template has a non-empty body (as it is always ignored when rendering)
 - 
 - * 0.9.6 (2010-05-12)
 - 
 -  * fixed variables defined outside a loop and for which the value changes in a for loop
 -  * fixed the test suite for PHP 5.2 and older versions of PHPUnit
 -  * added support for __call() in expression resolution
 -  * fixed node visiting for macros (macros are now visited by visitors as any other node)
 -  * fixed nested block definitions with a parent call (rarely useful but nonetheless supported now)
 -  * added the cycle filter
 -  * fixed the Lexer when mbstring.func_overload is used with an mbstring.internal_encoding different from ASCII
 -  * added a long-syntax for the set tag ({% set foo %}...{% endset %})
 -  * unit tests are now powered by PHPUnit
 -  * added support for gettext via the `i18n` extension
 -  * fixed twig_capitalize_string_filter() and fixed twig_length_filter() when used with UTF-8 values
 -  * added a more useful exception if an if tag is not closed properly
 -  * added support for escaping strategy in the autoescape tag
 -  * fixed lexer when a template has a big chunk of text between/in a block
 - 
 - * 0.9.5 (2010-01-20)
 - 
 - As for any new release, don't forget to remove all cached templates after
 - upgrading.
 - 
 - If you have defined custom filters, you MUST upgrade them for this release. To
 - upgrade, replace "array" with "new Twig_Filter_Function", and replace the
 - environment constant by the "needs_environment" option:
 - 
 -   // before
 -   'even'   => array('twig_is_even_filter', false),
 -   'escape' => array('twig_escape_filter', true),
 - 
 -   // after
 -   'even'   => new Twig_Filter_Function('twig_is_even_filter'),
 -   'escape' => new Twig_Filter_Function('twig_escape_filter', array('needs_environment' => true)),
 - 
 - If you have created NodeTransformer classes, you will need to upgrade them to
 - the new interface (please note that the interface is not yet considered
 - stable).
 - 
 -  * fixed list nodes that did not extend the Twig_NodeListInterface
 -  * added the "without loop" option to the for tag (it disables the generation of the loop variable)
 -  * refactored node transformers to node visitors
 -  * fixed automatic-escaping for blocks
 -  * added a way to specify variables to pass to an included template
 -  * changed the automatic-escaping rules to be more sensible and more configurable in custom filters (the documentation lists all the rules)
 -  * improved the filter system to allow object methods to be used as filters
 -  * changed the Array and String loaders to actually make use of the cache mechanism
 -  * included the default filter function definitions in the extension class files directly (Core, Escaper)
 -  * added the // operator (like the floor() PHP function)
 -  * added the .. operator (as a syntactic sugar for the range filter when the step is 1)
 -  * added the in operator (as a syntactic sugar for the in filter)
 -  * added the following filters in the Core extension: in, range
 -  * added support for arrays (same behavior as in PHP, a mix between lists and dictionaries, arrays and hashes)
 -  * enhanced some error messages to provide better feedback in case of parsing errors
 - 
 - * 0.9.4 (2009-12-02)
 - 
 - If you have custom loaders, you MUST upgrade them for this release: The
 - Twig_Loader base class has been removed, and the Twig_LoaderInterface has also
 - been changed (see the source code for more information or the documentation).
 - 
 -  * added support for DateTime instances for the date filter
 -  * fixed loop.last when the array only has one item
 -  * made it possible to insert newlines in tag and variable blocks
 -  * fixed a bug when a literal '\n' were present in a template text
 -  * fixed bug when the filename of a template contains */
 -  * refactored loaders
 - 
 - * 0.9.3 (2009-11-11)
 - 
 - This release is NOT backward compatible with the previous releases.
 - 
 -   The loaders do not take the cache and autoReload arguments anymore. Instead,
 -   the Twig_Environment class has two new options: cache and auto_reload.
 -   Upgrading your code means changing this kind of code:
 - 
 -       $loader = new Twig_Loader_Filesystem('/path/to/templates', '/path/to/compilation_cache', true);
 -       $twig = new Twig_Environment($loader);
 - 
 -   to something like this:
 - 
 -       $loader = new Twig_Loader_Filesystem('/path/to/templates');
 -       $twig = new Twig_Environment($loader, array(
 -         'cache' => '/path/to/compilation_cache',
 -         'auto_reload' => true,
 -       ));
 - 
 -  * deprecated the "items" filter as it is not needed anymore
 -  * made cache and auto_reload options of Twig_Environment instead of arguments of Twig_Loader
 -  * optimized template loading speed
 -  * removed output when an error occurs in a template and render() is used
 -  * made major speed improvements for loops (up to 300% on even the smallest loops)
 -  * added properties as part of the sandbox mode
 -  * added public properties support (obj.item can now be the item property on the obj object)
 -  * extended set tag to support expression as value ({% set foo as 'foo' ~ 'bar' %} )
 -  * fixed bug when \ was used in HTML
 - 
 - * 0.9.2 (2009-10-29)
 - 
 -  * made some speed optimizations
 -  * changed the cache extension to .php
 -  * added a js escaping strategy
 -  * added support for short block tag
 -  * changed the filter tag to allow chained filters
 -  * made lexer more flexible as you can now change the default delimiters
 -  * added set tag
 -  * changed default directory permission when cache dir does not exist (more secure)
 -  * added macro support
 -  * changed filters first optional argument to be a Twig_Environment instance instead of a Twig_Template instance
 -  * made Twig_Autoloader::autoload() a static method
 -  * avoid writing template file if an error occurs
 -  * added $ escaping when outputting raw strings
 -  * enhanced some error messages to ease debugging
 -  * fixed empty cache files when the template contains an error
 - 
 - * 0.9.1 (2009-10-14)
 - 
 -   * fixed a bug in PHP 5.2.6
 -   * fixed numbers with one than one decimal
 -   * added support for method calls with arguments ({{ foo.bar('a', 43) }})
 -   * made small speed optimizations
 -   * made minor tweaks to allow better extensibility and flexibility
 - 
 - * 0.9.0 (2009-10-12)
 - 
 -  * Initial release
 
 
  |