Commit Graph

328 Commits

Author SHA1 Message Date
Grégoire Pineau 6ca2ca6050 [Tests] Removed dead code in core test 2012-01-08 17:27:53 +01:00
Fabien Potencier 764829f55a added a date function to ease date comparison (closes #571) 2012-01-06 20:32:26 +01:00
Fabien Potencier 8fb4172a04 fixed unary operators precedence (closes #583) 2012-01-06 19:47:50 +01:00
Fabien Potencier ee39215cc2 fixed regression in string parsing (closes #580) 2012-01-05 15:29:43 +01:00
Fabien Potencier b44dba5c7c fixed the join filter when several items have the same key 2012-01-02 15:13:27 +01:00
Fabien Potencier c03458483b added a unit test 2012-01-02 13:14:06 +01:00
Fabien Potencier 19ba9c2141 added Traversable objects support for the join filter 2012-01-02 13:10:08 +01:00
Fabien Potencier 736dfa84d0 added a way to set the default global date interval format 2011-12-30 09:15:53 +01:00
Mark Story 0edcfdd28b Add number_format filter.
Refs #417
2011-12-28 10:39:04 -05:00
Fabien Potencier f3de043d0e changed hash key expression support (expression must now be enclosed with parentheses and hash keys can now be names) 2011-12-26 09:35:38 +01:00
Fabien Potencier 591f982b47 Revert "Revert "merged branch arnaud-lb/hash-key-expr (PR #514)""
This reverts commit 99b2c5bf99.
2011-12-24 09:22:35 +01:00
Fabien Potencier 99b2c5bf99 Revert "merged branch arnaud-lb/hash-key-expr (PR #514)"
This reverts commit 8665c64634, reversing
changes made to 4aba337cda.
2011-12-23 08:59:54 +01:00
Fabien Potencier 8665c64634 merged branch arnaud-lb/hash-key-expr (PR #514)
Commits
-------

542e9e7 added getKeyValuePairs() on Twig_Node_Expression_Array
3f64f1d added test for hash keys
4bdb3a9 fixed tests
3b1f269 support any expression as hash key

Discussion
----------

Allow hash keys to be any expression

This allows hash keys to be any expression

---------------------------------------------------------------------------

by fabpot at 2011/12/07 02:08:19 -0800

I had not implemented this feature back then because I'm not sure it makes sense to support it in the context of a templating system. I'm still not convinced that this is useful.
2011-12-22 22:41:37 +01:00
Fabien Potencier 4aba337cda added a do tag (closes #446) 2011-12-22 22:36:35 +01:00
nikic 8255b8b239 Fix test for previous commit 2011-12-21 11:06:03 +01:00
Fabien Potencier 4f19c7a04b added support for dynamically named filters and functions 2011-12-18 20:20:35 +01:00
Fabien Potencier 9489136c17 made the dump function registration explicit and disable its output when debug is off 2011-12-18 20:20:35 +01:00
Fabien Potencier 865a7039f8 added a dump function to help debugging templates 2011-12-18 18:30:06 +01:00
Fabien Potencier 932a4d8d94 added a nl2br filter 2011-12-18 12:36:07 +01:00
Fabien Potencier 89a1519e09 added a random function 2011-12-18 11:27:47 +01:00
Fabien Potencier f8b7441e42 added a way to change the default format for the date filter 2011-12-18 11:12:59 +01:00
Fabien Potencier b990868012 merged branch arnaud-lb/ext-crash2 (PR #560)
Commits
-------

9e6f285 fixed crash in twig_template_get_attributes when input is not an array or object

Discussion
----------

Fix crash in twig_template_get_attributes when input is not an array or object

This fixes a crash when the input of twig_template_get_attributes() is not an array or object, and strict mode is enabled.

---------------------------------------------------------------------------

by nikic at 2011/12/16 12:03:21 -0800

Could you maybe place the exception tests in a different method?

---------------------------------------------------------------------------

by arnaud-lb at 2011/12/16 12:13:35 -0800

This method already expects many of its inputs to cause an exception to be thrown (it tests getAttribute() in strict mode, and in many cases the attribute isn't defined). I don't see a real benefit from moving these tests in a separate method in this case.
2011-12-17 08:58:24 +01:00
Arnaud Le Blanc 9e6f285362 fixed crash in twig_template_get_attributes when input is not an array or object 2011-12-16 20:46:37 +01:00
Fabien Potencier 3689745d35 moved some common compiled code to Twig_Template 2011-12-08 19:14:07 +01:00
Fabien Potencier ae250f6b6f fixed the lexer when an operator ending with a letter ends a line 2011-12-08 09:29:20 +01:00
Fabien Potencier 1036f90e79 merged branch arnaud-lb/str-interpolation (PR #515)
Commits
-------

d41d10c simplification
2dbb420 moved hard-coded regexes
61986c1 shortcut for non-interpolated double quoted strings
062ed5c regex optimization
0e63abb integration tests for interpolated strings
773fff5 parser tests for interpolated strings
098634e parser support for interpolated strings
c8bba24 lexer tests for interpolated strings
a203686 lexer support for interpolated strings
0bd63dd stack lexer states

Discussion
----------

String interpolation syntax

This adds support for string interpolation:

```
{{ "foo #{ any expression here } bar" }}
```

I find string interpolation to be often more readable than concatenation, and doesn't have the precedence ambiguity of the concatenation operator:

```
Interpolation:

{{ "foo #{bar} baz" }}
{{ "foo #{1+2} baz" }}
{{ "foo #{1+2} baz"|escape }}

Concatenation:

{{ "foo "~bar~" baz" }}
{{ "foo "~(1+2)~" baz" }} extra parentheses
{{ ("foo "~(1+2)~" baz")|escape }} more extra parentheses
```

---------------------------------------------------------------------------

by nikic at 2011/11/12 12:41:54 -0800

Really nice idea. We should discuss the exact syntax though :) Dart for example uses `${expr}` for interpolation or `$name` if the expression is just a name. I think it makes sense to have a special short syntax for the name case, because it is the most common one.

---------------------------------------------------------------------------

by stof at 2011/11/12 13:06:51 -0800

@nikic could you comment on the PR instead of commenting on each commit individually ? it would make it easier to see what is concerned in the PR.

---------------------------------------------------------------------------

by arnaud-lb at 2011/11/12 14:22:14 -0800

@nikic Thanks for your review, I'll take care of your remarks.

For the syntax, I have no preference. I've taken this one because it has the same semantics. In Ruby and Coffeescript the `#{...}` allows any expression between the brackets. In PHP the expression in the `${...}` must start with a variable name. As you mentioned Dart's `${...}` seems to allow any expression.

---------------------------------------------------------------------------

by nikic at 2011/11/12 15:03:48 -0800

@arnaud-lb If Ruby and Coffeescript use this, the #{...} syntax should be okay. Especially as ${...} might be confusing for PHP developers as it has the semantics of variable variables in PHP.

@stof Thanks, will do so next time.

---------------------------------------------------------------------------

by damianb at 2011/11/12 15:38:31 -0800

@stof he doesn't need to - this is something github handles already. in the PR view, beside the "@nikic commented" bits, there's a set of links that shows where exactly the comment was in the format of commit sha, filename, and line inside the diff.

You can see for yourself right here, upper left:
![pr snapshot](http://i42.tinypic.com/zl6s82.png)

---------------------------------------------------------------------------

by stof at 2011/11/13 01:20:38 -0800

@damianb The comment appears, but not the context in which the comment was. We have to follow each link to see it whereas comments done on the PR appear directly with their context. This is why I said it is easier when comments are on the PR.

---------------------------------------------------------------------------

by nikic at 2011/12/02 15:13:30 -0800

So what about this now?

Btw, `REGEX_STRING` and `REGEX_DQ_STRING_PART` still are hardcoded and do not depend on the specified `interpolation` tags. But this looks hard to change, at least the regexes are quite complicated.

---------------------------------------------------------------------------

by arnaud-lb at 2011/12/02 15:22:45 -0800

I think I've addressed all issues (except hardcoding of `#{` and `}` in `REGEX_STRING` and `REGEX_DQ_STRING_PART`.)

Can this be merged after v1.4 is release if the syntax is accepted ?

---------------------------------------------------------------------------

by nikic at 2011/12/03 01:53:41 -0800

This would be my go for `STRING` and `DQ_STRING_PART` (isn't tested):

```php
<?php
$interpolChar = preg_quote(substr($options['interpolation'][0], 0, 1), '/');
$interpolPart = '[^' . $interpolChar . '"\\\\]*';
if (strlen($options['interpolation'][0]) > 1) {
    $interpolRest = preg_quote(substr($options['interpolation'][0], 1), '/');
    $interpolRegex = $interpolPart . '(?:(?:\\\\.|' . $interpolChar . '(?!' . $interpolRest . '))' . $interpolPart . ')*';

} else {
    $interpolRegex =  $interpolPart . '(?:\\\\.' . $interpolPart . ')*';
}
$this->options['dq_string_part_regex'] = '/' . $interpolRegex . '/As';
$this->options['string_regex'] = '/"' . $interpolRegex . '"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As';
```

It should allow both a single char interpolation syntax (like `{`) and multichar ones (like `#{`).

By the way, could we maybe move the compiled regexes out of `$this->options` into `$this->regexes`?
2011-12-07 10:09:34 +01:00
Fabien Potencier 08bda72355 enhanced exceptions for unknown filters, functions, tests, and tags 2011-12-07 09:54:44 +01:00
Fabien Potencier 049f515c54 removed dead code 2011-12-07 09:31:19 +01:00
Fabien Potencier a6f9f9b5e3 added a unit test test for previous merge 2011-12-06 16:54:43 +01:00
Fabien Potencier c6917a28ef fixed macros containing filter tag calls 2011-12-03 08:16:26 +01:00
Martin Hasoň 16d780043f fixed a crash when an object with __toString() method is passed as template name 2011-12-01 12:43:07 +01:00
Fabien Potencier fba7f95bd2 simplified the implementation of the replace filter 2011-11-27 14:58:36 +01:00
Fabien Potencier 317f6e4725 fixed unit tests due to a difference between the PHP and C versions of Twig_Template::getAttribute() 2011-11-23 14:24:45 +01:00
Arnaud Le Blanc 7e566b8462 test twig_template_get_attributes 2011-11-23 13:38:48 +01:00
Fabien Potencier 82e3ecc6da added more unit tests 2011-11-21 14:50:30 +01:00
Fabien Potencier fc6819cec2 added support for twig C extension 2011-11-21 09:36:32 +01:00
Fabien Potencier 9d2272efbf fixed previous merge and added some unit tests 2011-11-21 09:04:06 +01:00
Fabien Potencier 1b32617b97 optimized variable access when using PHP 5.4 2011-11-18 22:31:28 +01:00
Arnaud Le Blanc d41d10ca28 simplification 2011-11-13 14:23:45 +01:00
Arnaud Le Blanc 0e63abba76 integration tests for interpolated strings 2011-11-12 16:55:29 +01:00
Arnaud Le Blanc 773fff59ed parser tests for interpolated strings 2011-11-12 16:55:07 +01:00
Arnaud Le Blanc c8bba24dec lexer tests for interpolated strings 2011-11-12 16:54:03 +01:00
Arnaud Le Blanc 9b4e298e8e fixed failing test 2011-11-12 12:01:31 +01:00
Arnaud Le Blanc 3f64f1d24c added test for hash keys 2011-11-12 11:56:47 +01:00
Arnaud Le Blanc 4bdb3a93a8 fixed tests 2011-11-12 11:56:40 +01:00
Fabien Potencier aa6b835816 converted item parameter of Twig_Template::getAttribute() to string 2011-11-07 14:18:48 +01:00
Fabien Potencier 40595b848e fixed for tag loop variable when using a condition 2011-11-07 14:01:06 +01:00
Fabien Potencier 25336fd6fd refactored "for" tag (moved some logic from the token parser to the node) 2011-11-07 13:45:45 +01:00
Fabien Potencier 10c799fd90 changed the precedence of the .. operator 2011-11-05 08:30:08 +01:00
Fabien Potencier f3f5afbb13 merged branch hason/arrayloader (PR #496)
Commits
-------

253f813 added an exception for undefined templates in ArrayLoader::isFresh

Discussion
----------

added an exception for undefined templates in ArrayLoader::isFresh
2011-11-05 08:02:41 +01:00