Fabien Potencier [Tue, 11 Dec 2012 11:12:31 +0000]
merged branch fabpot/callables-everywhere (PR #905)
This PR was merged into the master branch.
Commits
-------
1918ede added the ability to use any PHP callable to define filters, functions, and tests
Discussion
----------
added the ability to use any PHP callable to define filters, functions, and tests
Everything is in the title.
---------------------------------------------------------------------------
by Tobion at 2012-11-18T13:25:51Z
Are filters etc. slower when defined as closures (instead of function definitions)?
---------------------------------------------------------------------------
by fabpot at 2012-11-18T13:30:47Z
@Tobion No, it does not matter how they are defined. Speed will be the same. A function is probably slightly faster as we can optimize the compiled template more than when it is an anonymous function where we need to use `call_user_func`.
---------------------------------------------------------------------------
by Tobion at 2012-11-18T13:40:17Z
This slight difference is what I questioned. On top of that, PHP can also not precompile those `call_user_func` I guess (e.g. when using APC). But it's probably not a big deal.
Since you have many examples in the doc with closures, I hope that it does not become the standard way for people to define custom functions.
Fabien Potencier [Mon, 10 Dec 2012 20:14:37 +0000]
merged branch fabpot/loop-errors (PR #927)
This PR was merged into the master branch.
Commits
-------
811dfad added a syntax error when using a loop variable that is not defined (closes #925)
aa15cae simplified code
Discussion
----------
added a syntax error when using a loop variable that is not defined
refs #925
---------------------------------------------------------------------------
by stof at 2012-12-10T15:18:30Z
in the ifexpr, you should also check for ``loop.index`` & co as they are not yet incremented (and so cannot be used properly)
---------------------------------------------------------------------------
by fabpot at 2012-12-10T20:07:08Z
@stof fixed
Fabien Potencier [Mon, 10 Dec 2012 14:52:15 +0000]
added a syntax error when using a loop variable that is not defined (closes #925)
Fabien Potencier [Mon, 10 Dec 2012 14:46:50 +0000]
simplified code
Fabien Potencier [Mon, 10 Dec 2012 14:12:12 +0000]
added @deprecated tags on deprecated classes
Fabien Potencier [Fri, 16 Nov 2012 14:22:28 +0000]
added the ability to use any PHP callable to define filters, functions, and tests
Fabien Potencier [Mon, 10 Dec 2012 13:58:56 +0000]
added Twig_TemplateInterface in the list of deprecated interfaces
Fabien Potencier [Sat, 8 Dec 2012 08:27:50 +0000]
added a note about deprecated interfaces
Fabien Potencier [Sat, 8 Dec 2012 08:25:13 +0000]
added a note about the PEAR package
Fabien Potencier [Sat, 8 Dec 2012 08:18:33 +0000]
moved some code to the proper location
Fabien Potencier [Fri, 7 Dec 2012 15:09:05 +0000]
added an exception when misusing macro calls (refs #922)
Fabien Potencier [Thu, 6 Dec 2012 20:30:34 +0000]
merged branch javiereguiluz/master (PR #923)
This PR was merged into the master branch.
Commits
-------
33539fc Fixed a typo in the 'escape' filter documentation.
Discussion
----------
Fixed a typo in the 'escape' filter documentation.
This typo prevents the proper rendering of one code block.
Javier Eguiluz [Thu, 6 Dec 2012 18:40:31 +0000]
Fixed a typo in the 'escape' filter documentation.
This typo prevents the proper rendering of one code block.
Fabien Potencier [Thu, 6 Dec 2012 07:16:52 +0000]
merged branch fabpot/twig-c-bug (PR #920)
This PR was merged into the master branch.
Commits
-------
df13370 added a missing test
33e690b fixed some tests when the extension is not enabled
51e707f merged branch char101/fix-ext-retval (PR #921)
014f459 added some missing test for Template::getAttribute()
e8d12da Fix empty string comparison
4311df3 added some missing test for Template::getAttribute()
Discussion
----------
The C extension does not behave in the same way as the PHP code
The added test shows that the C extension does not behave in the same way as the PHP code. I have no idea why. The problem is probably around line 1033 in the extension code: https://github.com/fabpot/Twig/blob/master/ext/twig/twig.c#L1033
---------------------------------------------------------------------------
by stof at 2012-12-05T17:07:00Z
The testsuite is broken when you run it without the C Twig extension. The test should be skipped when ``useExt`` is ``true`` and the extension is not available
Fabien Potencier [Thu, 6 Dec 2012 07:16:15 +0000]
added a missing test
Fabien Potencier [Thu, 6 Dec 2012 07:11:36 +0000]
fixed some tests when the extension is not enabled
Fabien Potencier [Thu, 6 Dec 2012 07:10:21 +0000]
merged branch char101/fix-ext-retval (PR #921)
This PR was merged into the twig-c-bug branch.
Commits
-------
e8d12da Fix empty string comparison
4311df3 added some missing test for Template::getAttribute()
Discussion
----------
Fix empty string comparison
Issue #920
Fabien Potencier [Sat, 1 Dec 2012 18:35:20 +0000]
added some missing test for Template::getAttribute()
Charles [Thu, 6 Dec 2012 01:39:46 +0000]
Fix empty string comparison
Fabien Potencier [Sat, 1 Dec 2012 18:35:20 +0000]
added some missing test for Template::getAttribute()
Fabien Potencier [Sat, 1 Dec 2012 18:41:29 +0000]
removed uneeded condition (a filter node cannot be created if the filer does not exist)
Fabien Potencier [Sat, 1 Dec 2012 18:21:32 +0000]
added missing tests for sandbox support in Template::getAttribute()
Fabien Potencier [Sat, 1 Dec 2012 18:04:43 +0000]
added some missing tests for getAttribute (for isXXX methods)
Fabien Potencier [Sat, 1 Dec 2012 07:00:48 +0000]
merged branch fabpot/extension-registration (PR #917)
This PR was merged into the master branch.
Commits
-------
4487387 reverted the early registration of extensions (extensions are now loaded as before -- as late as possible) -- closes #910
Discussion
----------
reverted the early registration of extensions (extensions are now loaded as before -- as late as possible)
---------------------------------------------------------------------------
by stof at 2012-11-30T20:18:51Z
Looks good to me
Fabien Potencier [Fri, 30 Nov 2012 18:49:04 +0000]
reverted the early registration of extensions (extensions are now loaded as before -- as late as possible) -- closes #910
Fabien Potencier [Fri, 30 Nov 2012 19:22:31 +0000]
fixed typo
Fabien Potencier [Mon, 26 Nov 2012 10:25:49 +0000]
added some unit for previous merge
Fabien Potencier [Mon, 26 Nov 2012 10:25:04 +0000]
merged branch arthens/master (PR #916)
This PR was merged into the master branch.
Commits
-------
16dc94e Fix broken variable reference
Discussion
----------
Fix broken variable reference
The exception message is referencing a non-existing variable $token, renamed to $tokens.
Giacomo Gatelli [Mon, 26 Nov 2012 04:03:31 +0000]
Fix broken variable reference
Fabien Potencier [Sun, 25 Nov 2012 12:44:18 +0000]
merged branch LouTerrailloune/patch-1 (PR #913)
This PR was merged into the master branch.
Commits
-------
c3281bb Update doc/filters/split.rst
Discussion
----------
Update doc/filters/split.rst
Added missing quotes in return values.
---------------------------------------------------------------------------
by sstok at 2012-11-23T09:17:35Z
:+1:
Fabien Potencier [Sun, 25 Nov 2012 12:43:34 +0000]
merged branch catchamonkey/compiler_typo (PR #915)
This PR was merged into the master branch.
Commits
-------
ae73c4c Fixes a typo in the compiler outdent comment
Discussion
----------
Fixes a typo in the compiler outdent comment
Embarrassing really as I introduced the typo back in June.
---------------------------------------------------------------------------
by catchamonkey at 2012-11-23T13:07:58Z
Failed due to time out, I can't rerun though as I', not part of this repo.
@fabpot could you rerun or merge anyway as it's a comment change?
---------------------------------------------------------------------------
by sstok at 2012-11-25T11:56:36Z
:+1:
Chris Sedlmayr [Fri, 23 Nov 2012 12:22:50 +0000]
Fixes a typo in the compiler outdent comment
Vincent Terraillon [Thu, 22 Nov 2012 10:21:50 +0000]
Update doc/filters/split.rst
Added missing quotes in return values.
Fabien Potencier [Mon, 19 Nov 2012 07:06:38 +0000]
merged branch Tobion/refactor-core-ext (PR #907)
This PR was merged into the master branch.
Commits
-------
6deee76 refactor test_empty and in_filter
Discussion
----------
refactor test_empty and in_filter
Fabien Potencier [Mon, 19 Nov 2012 07:06:25 +0000]
merged branch gunnarlium/master (PR #908)
This PR was merged into the master branch.
Commits
-------
a666505 Update doc for consistency.
Discussion
----------
docs: Use lipsum in all examples.
Fixes a small inconsistency in the docs for extending twig.
Fabien Potencier [Mon, 19 Nov 2012 07:06:03 +0000]
merged branch Tobion/editorconfig (PR #909)
This PR was merged into the master branch.
Commits
-------
e8ee79f added editorconfig file
Discussion
----------
added editorconfig file
This file is also in symfony. So also having it in twig would make things easier and consistent.
Tobias Schultze [Sun, 18 Nov 2012 20:35:48 +0000]
added editorconfig file
Gunnar Lium [Sun, 18 Nov 2012 20:17:30 +0000]
Update doc for consistency.
Tobias Schultze [Sun, 18 Nov 2012 19:53:43 +0000]
refactor test_empty and in_filter
Fabien Potencier [Sun, 18 Nov 2012 09:49:51 +0000]
merged branch fabpot/env-simplifications (PR #904)
This PR was merged into the master branch.
Commits
-------
0a7b37b changed the way extension filters/tests/functions/node visitors/globals/token parsers are registered (they were loaded as late as possible, they are now loaded as early as possible)
Discussion
----------
simplified some code
This PR changes the way extension filters/tests/functions/node visitors/globals/token parsers are registered (they were loaded as late as possible, they are now loaded as early as possible)
It mainly consists of a code cleanup by removing the horrible staging hack we have now.
Fabien Potencier [Fri, 16 Nov 2012 14:22:28 +0000]
changed the way extension filters/tests/functions/node visitors/globals/token parsers are registered (they were loaded as late as possible, they are now loaded as early as possible)
Fabien Potencier [Sun, 18 Nov 2012 09:38:27 +0000]
tweaked documentation
Fabien Potencier [Fri, 16 Nov 2012 20:56:44 +0000]
fixed 5.2 compat
Fabien Potencier [Fri, 16 Nov 2012 17:44:55 +0000]
merged branch fabpot/tokenparserbroker (PR #903)
This PR was merged into the master branch.
Commits
-------
8563e04 deprecated the token parser broker sub-system
Discussion
----------
deprecated the token parser broker sub-system
This is the first of a series of PRs where I want to deprecate some features that made sense at some point but do not anymore or features that are barely used. Deprecated features will still work in all versions of Twig 1.x but they will be removed in Twig 2.0.
This first one should not be controversial. The token parser broker was added at a time where functions in Twig were not available. Nowadays, creating a new tag is so rare that I cannot see any usage for the broker system.
As far as I know, nobody uses the broker system anyway (this feature is not even documented), except [Zwig](https://github.com/arnaud-lb/Zwig). And Zwig should probably create functions instead of tags for ZF helpers anyways.
ping @arnaud-lb
---------------------------------------------------------------------------
by arnaud-lb at 2012-11-16T17:27:02Z
IIRC the main reason for using this in Zwig was that ZF makes it hard to list helpers, and easy to get an helper by name. So the broken allows to use ZF helpers without listing them. The reason for using tags instead of functions is that many helpers in ZF are not used for their return value and/or printing. (Zwig also exposes helpers as functions, through registerUndefinedFunctionCallback, for those used for their return value or printing.)
No objection for removing in 2.x though.
Fabien Potencier [Fri, 16 Nov 2012 16:47:28 +0000]
deprecated the token parser broker sub-system
Fabien Potencier [Fri, 16 Nov 2012 07:04:33 +0000]
merged branch fabpot/named-arguments (PR #901)
This PR was merged into the master branch.
Commits
-------
4647913 added the ability to set default values for macro arguments (closes #447)
a59dcde added support for named arguments for filters, tests, and functions
65637b7 refactored the code handling arguments for PHP callbacks when compiling nodes
Discussion
----------
Named arguments and macro default values
This PR contains two new features. Even if they are not related, the code needed to make them work was almost the same.
The first feature is the ability to use named arguments for functions, tests, and filters:
```jinja
{{ data|convert_encoding('UTF-8', 'iso-2022-jp') }}
{# versus #}
{{ data|convert_encoding(from='iso-2022-jp', to='UTF-8') }}
```
The syntax is borrowed from Python where named arguments are part of the language.
The second feature is the ability to defined default values for macro arguments:
```jinja
{% macro input(name, value = "", type = "text", size = 20) %}
<input type="{{ type }}" name="{{ name }}" value="{{ value|e }}" size="{{ size }}" />
{% endmacro %}
```
More information in the updated documentation.
These features have been implemented with BC in mind (which means that the code is not optimal, but it will be completely refactored for Twig 2.0 where we will get rid of all those ridiculous `Twig_Filter_*` and `Twig_Function_*` classes).
---------------------------------------------------------------------------
by fabpot at 2012-11-15T10:34:16Z
I forgot to mention that there is no overhead if you are not using these new features, and that the overhead is only at compilation time (the compiled templates are the same as before).
---------------------------------------------------------------------------
by marekkalnik at 2012-11-15T10:36:49Z
That are some great features, thanks ! :+1:
---------------------------------------------------------------------------
by lolautruche at 2012-11-15T10:46:42Z
Nice ! :+1:
@fabpot So I guess the old behavior is kept, isn't it ?
---------------------------------------------------------------------------
by fspillner at 2012-11-15T10:50:31Z
Awesome!
---------------------------------------------------------------------------
by fabpot at 2012-11-15T11:28:20Z
@lolautruche yes, the old way still works of course.
---------------------------------------------------------------------------
by Seldaek at 2012-11-15T11:42:40Z
Awesome! This has been much needed a few times in the past. We can almost drop php altogether and just write twig :P
---------------------------------------------------------------------------
by marfillaster at 2012-11-15T12:07:43Z
@Seldaek maybe a twig to php processor
---------------------------------------------------------------------------
by Seldaek at 2012-11-15T12:14:34Z
@marfillaster that's already what twig is :)
---------------------------------------------------------------------------
by Tobion at 2012-11-15T12:38:28Z
@fabpot nice stuff
---------------------------------------------------------------------------
by simensen at 2012-11-15T16:01:03Z
This looks great!
---------------------------------------------------------------------------
by sstok at 2012-11-15T19:18:53Z
This was basically the only thing missing I was missing in Twig
:100: :+1:
---------------------------------------------------------------------------
by jorgelbg at 2012-11-15T20:05:15Z
I love this new feauture, it's great to have this on Twig! Brings a lot of clarity to my future templates ;-)
Fabien Potencier [Thu, 15 Nov 2012 09:41:23 +0000]
added the ability to set default values for macro arguments (closes #447)
Fabien Potencier [Thu, 15 Nov 2012 06:55:50 +0000]
added support for named arguments for filters, tests, and functions
Fabien Potencier [Wed, 14 Nov 2012 14:44:15 +0000]
refactored the code handling arguments for PHP callbacks when compiling nodes
Fabien Potencier [Wed, 14 Nov 2012 13:31:49 +0000]
moved filters/functions/tests syntax errors to the parser
Fabien Potencier [Wed, 14 Nov 2012 13:32:45 +0000]
switched version to 1.12
Fabien Potencier [Wed, 14 Nov 2012 06:40:53 +0000]
added support for extended ternary operator syntaxes (closes #134)
Fabien Potencier [Sun, 11 Nov 2012 17:22:10 +0000]
bumped version to 1.11.2-DEV
Fabien Potencier [Sun, 11 Nov 2012 17:17:59 +0000]
prepared the 1.11.1 release
Fabien Potencier [Thu, 8 Nov 2012 09:24:49 +0000]
tweaked previous merge (refs #894)
Fabien Potencier [Thu, 8 Nov 2012 09:22:28 +0000]
merged branch char101/fix-debug-lineno (PR #894)
This PR was squashed before being merged into the master branch (closes #894).
Commits
-------
7c5854b Fix twig error lineno off by 2
Discussion
----------
Fix twig error lineno off by 2
It seems to me that the lineno reported by Twig_Error is off by 2 from the real lineno in the generated PHP source
For example:
```
{% if true %}
Yes
{% endif %}
```
```php
<?php
/* */
class __TwigTemplate_d41d8cd98f00b204e9800998ecf8427e extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
if (true) { // <- this is line 19
// line 2
echo "Yes // <- this is line 21
";
}
}
public function getTemplateName()
{
return null;
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 19 => 2, 17 => 1,); // <- should be return array ( 21 => 2, 19 => 1,);
}
}
```
---------------------------------------------------------------------------
by char101 at 2012-11-08T08:23:57Z
Since `$compiler->addDebugInfo()` is called first before writing the node content, usually the number of lines in the PHP code is less than 2 (1 for the // lineno comment, and 1 for the generated content) than the line where the node content is written.
Charles [Thu, 8 Nov 2012 08:04:55 +0000]
Fix twig error lineno off by 2
Fabien Potencier [Thu, 8 Nov 2012 07:56:03 +0000]
fixed regression when calling a macro inside another one (closes #889)
Fabien Potencier [Thu, 8 Nov 2012 07:51:01 +0000]
fixed typo
Fabien Potencier [Thu, 8 Nov 2012 06:31:43 +0000]
udpated CHANGELOG
Fabien Potencier [Thu, 8 Nov 2012 06:29:16 +0000]
added a test for previous merge (refs #892)
Fabien Potencier [Thu, 8 Nov 2012 06:25:44 +0000]
merged branch char101/fix-ext-crash-on-undef-func-inside-macro (PR #892)
This PR was merged into the master branch.
Commits
-------
55b76c1 Fix extension crash when calling unknown method inside a macro
Discussion
----------
Fix extension crash when calling unknown method inside a macro
Issue #890
Fabien Potencier [Thu, 8 Nov 2012 06:24:19 +0000]
fixed CS
Fabien Potencier [Thu, 8 Nov 2012 06:21:48 +0000]
merged branch char101/optimize-strict-vars-php54 (PR #893)
This PR was squashed before being merged into the master branch (closes #893).
Commits
-------
f397a8f Use ternary operator with PHP 5.4 when strict_variables is true
Discussion
----------
Use ternary operator with PHP 5.4 when strict_variables is true
When strict variables is true, and using PHP 5.4, we can still use the ternary operator to optimize performance.
Charles [Thu, 8 Nov 2012 02:16:19 +0000]
Use ternary operator with PHP 5.4 when strict_variables is true
Charles [Thu, 8 Nov 2012 02:25:27 +0000]
Fix extension crash when calling unknown method inside a macro
Fabien Potencier [Wed, 7 Nov 2012 20:11:21 +0000]
merged branch nomack84/fixed_typo (PR #891)
This PR was merged into the master branch.
Commits
-------
cc65c88 [template_from_string]Fixed typo
Discussion
----------
[template_from_string]Fixed typo in docs
Fix a typo in the template_from_string function docs
Mario A. Alvarez Garcia [Wed, 7 Nov 2012 19:59:42 +0000]
[template_from_string]Fixed typo
Fabien Potencier [Wed, 7 Nov 2012 11:22:35 +0000]
bumped version to 1.11.0-DEV
Fabien Potencier [Wed, 7 Nov 2012 11:20:21 +0000]
prepared the 1.11.0 release
Fabien Potencier [Wed, 7 Nov 2012 06:34:36 +0000]
merged branch char101/fix-build-warning (PR #886)
This PR was merged into the master branch.
Commits
-------
3164ee3 Fix build warning for const pointer
Discussion
----------
Fix build warning for const pointer
Issue #883
Charles [Wed, 7 Nov 2012 01:49:50 +0000]
Fix build warning for const pointer
Fabien Potencier [Tue, 6 Nov 2012 12:20:59 +0000]
added a .gitignore to ignore files created when building the C extension
Fabien Potencier [Tue, 6 Nov 2012 11:54:36 +0000]
merged branch char101/nativeext-exception-info (PR #885)
This PR was merged into the master branch.
Commits
-------
db13b66 Pass lineno and filename to Twig_Error constructor
feee667 Merge branch 'nativeext-exception-info' of https://github.com/fabpot/Twig into nativeext-exception-info
adb31d4 Call Twig_Error constructor
d4a8c8b added tests for exceptions thrown in Twig_Template::getAttribute()
1b82bf7 Add template filename for the rest of the exception
5675140 Handle NULL filename
71f64bc Add template name to error message
Discussion
----------
Add template name to error message
Issue #884
---------------------------------------------------------------------------
by fabpot at 2012-11-06T07:43:16Z
For some unknown reasons, I don't see your branch when I try to submit a PR. Can you cherry-pick my unit tests from my `nativeext-exception-info` branch?
---------------------------------------------------------------------------
by Tobion at 2012-11-06T08:29:19Z
@char101 Maybe you could also integrate the fixes of #878?
---------------------------------------------------------------------------
by fabpot at 2012-11-06T08:30:55Z
@Tobion Let's do one thing at a time.
---------------------------------------------------------------------------
by char101 at 2012-11-06T08:59:30Z
@Tobion AFAIK, unlike the PHP implementation, the C implementation does not automatically convert array key type.
---------------------------------------------------------------------------
by char101 at 2012-11-06T09:27:54Z
@fabpot How about the lineno variable? Should I just set it to 0 or is there any function that can be called to obtain it?
```php
if (-1 === $this->lineno || null === $this->filename) {
$this->guessTemplateInfo();
}
```
---------------------------------------------------------------------------
by fabpot at 2012-11-06T09:32:09Z
You need to keep `-1` for the line.
---------------------------------------------------------------------------
by char101 at 2012-11-06T09:36:56Z
If `$lineno` is `-1`, wouldn't `$this->guessTemplateInfo()` still be called?
---------------------------------------------------------------------------
by fabpot at 2012-11-06T09:45:34Z
Yes, but the template name will not be guessed. So, there is a performance overhead for the line guessing, but not for the template name guessing.
Charles [Tue, 6 Nov 2012 09:51:20 +0000]
Pass lineno and filename to Twig_Error constructor
Charles [Tue, 6 Nov 2012 08:51:54 +0000]
Merge branch 'nativeext-exception-info' of https://github.com/fabpot/Twig into nativeext-exception-info
Charles [Tue, 6 Nov 2012 08:50:00 +0000]
Call Twig_Error constructor
Fabien Potencier [Tue, 6 Nov 2012 07:39:44 +0000]
added tests for exceptions thrown in Twig_Template::getAttribute()
Charles [Tue, 6 Nov 2012 04:37:50 +0000]
Add template filename for the rest of the exception
Charles [Tue, 6 Nov 2012 04:16:51 +0000]
Handle NULL filename
Charles [Tue, 6 Nov 2012 04:02:59 +0000]
Add template name to error message
Fabien Potencier [Mon, 5 Nov 2012 07:50:56 +0000]
fixed macro compilation when a variable name is a PHP reserved keyword (closes #881)
Fabien Potencier [Sat, 3 Nov 2012 07:27:23 +0000]
fixed CS
Fabien Potencier [Sat, 3 Nov 2012 07:09:43 +0000]
merged branch fabpot/timezones (PR #876)
This PR was merged into the master branch.
Commits
-------
f99504a changed the date filter behavior to always apply the default timezone, except if false is passed as the timezone
d3b0cbd merged branch jmikola/patch-1 (PR #845)
a6a1ef0 Avoid setting timezones on DateIntervals
Discussion
----------
changed the date filter behavior to always apply the default timezone, except if false is passed as the timezone
This PR is based on #845, and addresses issue #778.
Right now, the timezone management when using the date filter is counter-intuitive. When you pass a DateTime object, the default timezone is not applied, but in all other cases, it is.
This PR makes the behavior more consistent by always applying the default timezone (which is probably what users want most of the time), and this can be disabled by explicitly passing ``false`` as the timezone value.
This is a BC break but I think that not many consciously rely on the current behavior.
---------------------------------------------------------------------------
by fabpot at 2012-10-30T15:49:13Z
@jmikola Can you have a look at this PR and tell me your opinion about this change?
---------------------------------------------------------------------------
by jmikola at 2012-11-02T20:17:30Z
@fabpot: Will take a look at this tonight. I missed the notifications as I was offline for a few days.
---------------------------------------------------------------------------
by jmikola at 2012-11-03T04:09:54Z
I read through all of the issues and PR's and this looks reasonable. Are we missing a test case for passing in a DateTime object with `false` for the timezone? I do see one example where we render the current date using the `'e'` format string and provide `false` for the timezone, but that's it.
---------------------------------------------------------------------------
by fabpot at 2012-11-03T07:09:08Z
ok, I've added an additional test just to be sure.
Fabien Potencier [Tue, 30 Oct 2012 09:04:25 +0000]
changed the date filter behavior to always apply the default timezone, except if false is passed as the timezone
Fabien Potencier [Tue, 30 Oct 2012 18:13:42 +0000]
added a paragraph in the docs about how the Twig blocks work (based on an explanation from nikic, closes #704, refs #351)
Fabien Potencier [Tue, 30 Oct 2012 17:12:52 +0000]
fixed a stupid test
Fabien Potencier [Tue, 30 Oct 2012 16:46:49 +0000]
fixed broken test
Fabien Potencier [Tue, 30 Oct 2012 16:40:52 +0000]
fixed bitwise operator precedences (closes #866)
Fabien Potencier [Tue, 30 Oct 2012 15:42:59 +0000]
merged branch fabpot/template_from_string (PR #874)
This PR was merged into the master branch.
Commits
-------
4599188 added the template_from_string function
Discussion
----------
added the template_from_string function
One of the most often asked question is how someone can evaluate a template string from a template.
The template_from_string function solves this problem (more in the included docs).
I have two questions before merging this:
* What about the name? I find it quite long but also readable (`{% include template_from_string(template) %}`).
* Does it belongs to Twig core?
---------------------------------------------------------------------------
by boutell at 2012-10-28T16:45:08Z
Interesting. What are the use cases? Would it cache in some way, the md5 of the string maybe, to avoid having this be a major performance hit on every use?
---------------------------------------------------------------------------
by gcoguiec at 2012-10-28T16:46:04Z
And what about include_from_string ?
---------------------------------------------------------------------------
by lsmith77 at 2012-10-28T16:46:35Z
Heh, was just going to ask the same thing, would a use case be loading a twig snippet from a database? something like https://github.com/symfony-cmf/ContentBundle/issues/8 ..
---------------------------------------------------------------------------
by stof at 2012-10-28T16:48:09Z
@gcoguiec It is not including anything but creating a Twig_Template instance. ``{% extends include_from_string(foo) %}`` would be very ugly.
---------------------------------------------------------------------------
by gruzilla at 2012-10-28T16:48:37Z
i'd say yes.
im not like the core must can do everything. but besides that, what are the reasons against it?
i can already think of some usecases: user defined dynamic templates, ...
---------------------------------------------------------------------------
by alexandresalome at 2012-10-28T16:49:34Z
IMHO it's a mistake to put it in Twig. People won't get how to use it. My reasons are also regarding cache: will the template be regenerated on each call?
Looks magic
---------------------------------------------------------------------------
by stof at 2012-10-28T16:50:06Z
@fabpot I'm not really sure this should be in the core.
But FYI, there is a [PR on your Twig-extensions repository](https://github.com/fabpot/Twig-extensions/pull/68) adding an ``eval`` function with the same goal (but an incomplete implementation)
---------------------------------------------------------------------------
by fabpot at 2012-10-28T16:51:00Z
The template is loaded like any other ones, so it is using the cache if you have configured it. No magic included!
---------------------------------------------------------------------------
by fabpot at 2012-10-28T16:52:44Z
@lsmith77 yes, that's the main use case.
You can also have a look at this thread on the mailing-list: https://groups.google.com/group/twig-devs/browse_thread/thread/
a8b7bbae31cade18
---------------------------------------------------------------------------
by fabpot at 2012-10-28T16:54:28Z
I forgot to say that we can also move this function into its own extension, so that enabling it would have to come from a conscious choice from the developer (like the debug function in the debug extension).
---------------------------------------------------------------------------
by lsmith77 at 2012-10-28T16:55:32Z
OK great. Looks like something the CMF will need then. But it would also work for us if its part of the twig extension repo. we could of course also just drop the code into https://github.com/symfony-cmf/CoreBundle/blob/master/Twig/TwigExtension.php
---------------------------------------------------------------------------
by fabpot at 2012-10-28T16:56:59Z
I have proposed it for inclusion in Twig core (but not necessarily in the core extension) as it seems to be something many developers want to do in their code (mainly people writing a CMS in top of Twig).
---------------------------------------------------------------------------
by dlsniper at 2012-10-28T17:05:45Z
Hi
- why not name it `template_string` or `string_template`? Then it would read like: ` {% include template_string(template) %} ` or ` {% include string_template(template) %} `
- imo this shouldn't be in the core but rather in the extensions part of Twig as you just extend existing Twig functionality :)
Cheers.
---------------------------------------------------------------------------
by fabpot at 2012-10-28T17:37:12Z
I've moved the function to a new extension that should be enabled explicitely.
---------------------------------------------------------------------------
by EvanK at 2012-10-28T18:05:57Z
I would love to see this as a built-in feature to Twig, as my coworkers & I have had to implement a workaround for something similar.
(Our workaround involved writing said string to a file named after an md5 of the string's content, and then calling render() on said file, all within the php userspace. It was less than elegant, but functional.)
---------------------------------------------------------------------------
by Crell at 2012-10-28T19:11:34Z
This would lend itself to some of the wacky stuff Drupal has been discussing, too. +1 on the feature. No opinion on the name.
---------------------------------------------------------------------------
by jorgelbg at 2012-10-28T20:45:37Z
+1 for built-in support i think this is something Twig should do out of the box, regarding the name I guess that I'll vote for this name ```{% include from_string(template) %}``` The only thing that you can include is a template righ? So why put this explicitly in the function's name?
---------------------------------------------------------------------------
by pylebecq at 2012-10-29T09:53:05Z
+1 for me. And for the name, it seems I'm the only one but I would have vote for `eval` :smiling_imp:
---------------------------------------------------------------------------
by sstok at 2012-10-29T10:14:25Z
eval is bad name as can be confused with eval() in PHP, aka that what is passed is treated as PHP (similar to embeded PHP in Smarty). Please don't..
+1 for as it is now.
---------------------------------------------------------------------------
by drak at 2012-10-29T17:25:24Z
Love it +1
---------------------------------------------------------------------------
by acasademont at 2012-10-30T12:02:40Z
Very useful feature! +1
---------------------------------------------------------------------------
by acasademont at 2012-10-30T12:20:46Z
For clarification, now if you wanted to make dynamic include or dynamic inheritance like this ```{% extends some_var %}``` you had to supply a valid Twig_Template object. Now with this function you can supply a simple string that will be evaluated and transformed into a Twig_Template object. So this PR is not inventing dynamic inheritance but providing a helper to make it easier. Am I right?
---------------------------------------------------------------------------
by stof at 2012-10-30T12:45:08Z
@acasademont no. It is provinding a way to evaluate a string stored somewhere (in a database for instance) as a template. It is not about making dynamic inheritance easier.
If your template can be loaded by your loader (for instance a file when using the Twig_Loader_Filesystem), you can use the template name in your variable for the dynamic inheritance. You are not required to build the Twig_Template instance yourself
---------------------------------------------------------------------------
by fabpot at 2012-10-30T12:53:02Z
When you have `{% extends some_var %}`, `some_var` must be the template name. Using `{% extends template_from_string(some_var) %}` means that `some_var` contains the parent template code.
---------------------------------------------------------------------------
by acasademont at 2012-10-30T13:15:37Z
Perfectly understood, thanks!
Fabien Potencier [Tue, 30 Oct 2012 09:25:30 +0000]
added a note about double-escaping when using a variable for the strategy (closes #868)
Fabien Potencier [Tue, 30 Oct 2012 08:57:52 +0000]
merged branch jmikola/patch-1 (PR #845)
This PR was merged into the master branch.
Commits
-------
a6a1ef0 Avoid setting timezones on DateIntervals
Discussion
----------
Avoid setting timezones on DateIntervals
Edit: originally, I opened this to ensure the default Twig timezone was always set on incoming DateTime objects, but I came to realize why that behavior would be undesirable. The idea was prompted by this line from: http://twig.sensiolabs.org/doc/filters/date.html
> The default timezone can also be set globally by calling `setTimezone()`.
Anyway, I did notice an edge case where the code might call `DateInterval::setTimezone()`, so this PR attempts to correct that. Additionally, I added some tests for passing a DateTimeZone object to the `date` filter.
---------------------------------------------------------------------------
by jmikola at 2012-09-22T17:18:56Z
@fabpot: One question came up as I was looking through this a second time: if `twig_date_converter()` receives a DateTime argument, it will override its timezone regardless of the logic path within (either from the `$timezone` argument, Twig default, or the system default).
At first, I thought that it was redundant for `twig_date_format_filter()` not to utilize `twig_date_converter()`, but it looks like that was a careful decision; otherwise, there'd be no way to display DateTimes with their internal timezone. This PR would remove that functionality, so I need to reconsider.
Having said that, there does appear to be a bug in `twig_date_format_filter()` in that it could end up calling a nonexistent `setTimezone()` method on a DateInterval object. Would it be preferable to throw an exception or simply ignore the `$timezone` argument if the `$date` argument is a DateInterval?
---------------------------------------------------------------------------
by fabpot at 2012-10-30T08:56:31Z
I don't know if not changing the timezone on DateTime object was a conscious/careful decision or not. The documentation is not so clear about that, and there is even a bug report about this behavior: #778.
For consistency, I think we can always set the timezone and allow disabling that by passing `false` for the timezone.
Does it sounds good?
Fabien Potencier [Tue, 30 Oct 2012 08:53:04 +0000]
fixed default timezone usage for the date function (refactor of the previous merge)
Fabien Potencier [Tue, 30 Oct 2012 08:40:23 +0000]
merged branch vitman/patch-1 (PR #871)
This PR was squashed before being merged into the master branch (closes #871).
Commits
-------
b89163d Update lib/Twig/Extension/Core.php
Discussion
----------
Update lib/Twig/Extension/Core.php
Added support for setted default timezone for twig date functions.
---------------------------------------------------------------------------
by henrikbjorn at 2012-10-26T07:19:02Z
This have the same problem as the other PR you created. See php.net/datetime for reference.
vitman [Thu, 25 Oct 2012 17:44:06 +0000]
Update lib/Twig/Extension/Core.php
Fabien Potencier [Sun, 28 Oct 2012 16:28:55 +0000]
added the template_from_string function
Fabien Potencier [Sun, 28 Oct 2012 14:30:18 +0000]
added two new recipes
Fabien Potencier [Sun, 28 Oct 2012 14:19:48 +0000]
added missing documentation about Twig_Loader_Chain
Fabien Potencier [Sun, 28 Oct 2012 13:36:27 +0000]
fixed phpdoc
Fabien Potencier [Sat, 27 Oct 2012 06:23:19 +0000]
merged branch jeremymarc/master (PR #873)
This PR was merged into the master branch.
Commits
-------
c5d351d cast $name to string ($name can be an object implementing __toString function)
Discussion
----------
Cast $name to string in Loader/Chain.php and Loader/FileSystem.php
related to #603