Skip to content

Parentheses in subexpression argument cause error #367

@TomKeyte

Description

@TomKeyte

The PHP Code:

require('./vendor/autoload.php');
use LightnCandy\LightnCandy;

// The Template:
$template = <<<VAREND
{{#each (myfunc 'foo(bar)' ) }}

{{/each}}
VAREND;

// Helpers:
$helpers = array(
  'myfunc' => function ($arg) {
    return ...;
  },
);

$phpStr = LightnCandy::compile($template, array(
  // Used compile flags
  'flags' => LightnCandy::FLAG_ERROR_EXCEPTION | LightnCandy::FLAG_HANDLEBARS,
  'helpers' => $helpers,
));

echo "Generated PHP Code:\n$phpStr\n";

// Save the compiled PHP code into a php file
file_put_contents('render.php', '<?php ' . $phpStr . '?>');

// Get the render function from the php file
$renderer = include('render.php');

echo "Result:\n" . $renderer($data);

The Issue:

If the arguments passed to a helper function which is used as a subexpression contain parentheses, the parser throws an error:

`Error in 'each (myfunc 'foo(bar)' )': expect ')' but the token ended!! No argument after {{#each}} !

Is there any way to escape them, or use a different bracket style to wrap the subexpression?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions