本文整理汇总了PHP中Twig_NodeInterface::getLine方法的典型用法代码示例。如果您正苦于以下问题:PHP Twig_NodeInterface::getLine方法的具体用法?PHP Twig_NodeInterface::getLine怎么用?PHP Twig_NodeInterface::getLine使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Twig_NodeInterface
的用法示例。
在下文中一共展示了Twig_NodeInterface::getLine方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: enterNode
/**
* {@inheritdoc}
*/
public function enterNode(\Twig_NodeInterface $node, \Twig_Environment $env)
{
if ($node instanceof \Twig_Node_Block || $node instanceof \Twig_Node_Module) {
$this->scope = $this->scope->enter();
}
if ($node instanceof TransDefaultDomainNode) {
if ($node->getNode('expr') instanceof \Twig_Node_Expression_Constant) {
$this->scope->set('domain', $node->getNode('expr'));
return $node;
} else {
$var = $env->getParser()->getVarName();
$name = new \Twig_Node_Expression_AssignName($var, $node->getLine());
$this->scope->set('domain', new \Twig_Node_Expression_Name($var, $node->getLine()));
return new \Twig_Node_Set(false, new \Twig_Node(array($name)), new \Twig_Node(array($node->getNode('expr'))), $node->getLine());
}
}
if (!$this->scope->has('domain')) {
return $node;
}
if ($node instanceof \Twig_Node_Expression_Filter && in_array($node->getNode('filter')->getAttribute('value'), array('trans', 'transchoice'))) {
$ind = 'trans' === $node->getNode('filter')->getAttribute('value') ? 1 : 2;
$arguments = $node->getNode('arguments');
if (!$arguments->hasNode($ind)) {
if (!$arguments->hasNode($ind - 1)) {
$arguments->setNode($ind - 1, new \Twig_Node_Expression_Array(array(), $node->getLine()));
}
$arguments->setNode($ind, $this->scope->get('domain'));
}
} elseif ($node instanceof TransNode) {
if (null === $node->getNode('domain')) {
$node->setNode('domain', $this->scope->get('domain'));
}
}
return $node;
}
示例2: compileString
protected function compileString(\Twig_NodeInterface $body, \Twig_Node_Expression_Array $vars)
{
if ($body instanceof \Twig_Node_Expression_Constant) {
$msg = $body->getAttribute('value');
} elseif ($body instanceof \Twig_Node_Text) {
$msg = $body->getAttribute('data');
} else {
return array($body, $vars);
}
preg_match_all('/(?<!%)%([^%]+)%/', $msg, $matches);
if (version_compare(\Twig_Environment::VERSION, '1.5', '>=')) {
foreach ($matches[1] as $var) {
$key = new \Twig_Node_Expression_Constant('%' . $var . '%', $body->getLine());
if (!$vars->hasElement($key)) {
$vars->addElement(new \Twig_Node_Expression_Name($var, $body->getLine()), $key);
}
}
} else {
$current = array();
foreach ($vars as $name => $var) {
$current[$name] = true;
}
foreach ($matches[1] as $var) {
if (!isset($current['%' . $var . '%'])) {
$vars->setNode('%' . $var . '%', new \Twig_Node_Expression_Name($var, $body->getLine()));
}
}
}
return array(new \Twig_Node_Expression_Constant(str_replace('%%', '%', trim($msg)), $body->getLine()), $vars);
}
示例3: getAssetUrlNode
/**
* Renders the asset URL using Symfony's asset() function.
*/
protected function getAssetUrlNode(\Twig_NodeInterface $body)
{
return new \Twig_Node_Expression_Function(
new \Twig_Node_Expression_Name('asset', $body->getLine()),
new \Twig_Node(array(
new \Twig_Node_Expression_Constant($this->getAttribute('target_url'), $body->getLine()),
)),
$body->getLine()
);
}
示例4: __construct
public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null)
{
$default = new Twig_Node_Expression_Filter($node, new Twig_Node_Expression_Constant('_default', $node->getLine()), $arguments, $node->getLine());
if ('default' === $filterName->getAttribute('value') && ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr)) {
$test = new Twig_Node_Expression_Test_Defined(clone $node, 'defined', new Twig_Node(), $node->getLine());
$false = count($arguments) ? $arguments->getNode(0) : new Twig_Node_Expression_Constant('', $node->getLine());
$node = new Twig_Node_Expression_Conditional($test, $default, $false, $node->getLine());
} else {
$node = $default;
}
parent::__construct($node, $filterName, $arguments, $lineno, $tag);
}
示例5: enterNode
/**
* Called before child nodes are visited.
*
* @param Twig_NodeInterface $node The node to visit
* @param Twig_Environment $env The Twig environment instance
*
* @return Twig_NodeInterface The modified node
*/
public function enterNode(Twig_NodeInterface $node, Twig_Environment $env)
{
if ($node instanceof Twig_Node_Module) {
$this->inAModule = true;
$this->tags = array();
$this->filters = array();
$this->functions = array();
return $node;
} elseif ($this->inAModule) {
// look for tags
if ($node->getNodeTag() && !isset($this->tags[$node->getNodeTag()])) {
$this->tags[$node->getNodeTag()] = $node;
}
// look for filters
if ($node instanceof Twig_Node_Expression_Filter && !isset($this->filters[$node->getNode('filter')->getAttribute('value')])) {
$this->filters[$node->getNode('filter')->getAttribute('value')] = $node;
}
// look for functions
if ($node instanceof Twig_Node_Expression_Function && !isset($this->functions[$node->getAttribute('name')])) {
$this->functions[$node->getAttribute('name')] = $node;
}
// wrap print to check __toString() calls
if ($node instanceof Twig_Node_Print) {
return new Twig_Node_SandboxedPrint($node->getNode('expr'), $node->getLine(), $node->getNodeTag());
}
}
return $node;
}
示例6: optimizeRenderBlock
/**
* Replaces "echo $this->renderBlock()" with "$this->displayBlock()".
*
* @param Twig_NodeInterface $node A Node
* @param Twig_Environment $env The current Twig environment
*/
protected function optimizeRenderBlock($node, $env)
{
if ($node instanceof Twig_Node_Print && $node->getNode('expr') instanceof Twig_Node_Expression_BlockReference) {
return new Twig_Node_BlockReference($node->getNode('expr')->getNode('name')->getAttribute('value'), $node->getLine(), $node->getNodeTag());
}
return $node;
}
示例7: enterNode
/**
* @param \Twig_NodeInterface $node
* @param \Twig_Environment $env
* @return \Twig_NodeInterface
*/
public function enterNode(\Twig_NodeInterface $node, \Twig_Environment $env)
{
$this->stack[] = $node;
if ($node instanceof TransNode) {
$id = $node->getNode('body')->getAttribute('data');
$domain = 'messages';
if (null !== ($domainNode = $node->getNode('domain'))) {
$domain = $domainNode->getAttribute('value');
}
$message = new Message($id, $domain);
$message->addSource($this->fileSourceFactory->create($this->file, $node->getLine()));
$this->catalogue->add($message);
} elseif ($node instanceof \Twig_Node_Expression_Filter) {
$name = $node->getNode('filter')->getAttribute('value');
if ('trans' === $name || 'transchoice' === $name) {
$idNode = $node->getNode('node');
if (!$idNode instanceof \Twig_Node_Expression_Constant) {
return $node;
// FIXME: see below
// throw new \RuntimeException(sprintf('Cannot infer translation id from node "%s". Please refactor to only translate constants.', get_class($idNode)));
}
$id = $idNode->getAttribute('value');
$index = 'trans' === $name ? 1 : 2;
$domain = 'messages';
$arguments = $node->getNode('arguments');
if ($arguments->hasNode($index)) {
$argument = $arguments->getNode($index);
if (!$argument instanceof \Twig_Node_Expression_Constant) {
return $node;
// FIXME: Throw exception if there is some way for the user to turn this off
// on a case-by-case basis, similar to @Ignore in PHP
}
$domain = $argument->getAttribute('value');
}
$message = new Message($id, $domain);
$message->addSource($this->fileSourceFactory->create($this->file, $node->getLine()));
for ($i = count($this->stack) - 2; $i >= 0; $i -= 1) {
if (!$this->stack[$i] instanceof \Twig_Node_Expression_Filter) {
break;
}
$name = $this->stack[$i]->getNode('filter')->getAttribute('value');
if ('desc' === $name || 'meaning' === $name) {
$arguments = $this->stack[$i]->getNode('arguments');
if (!$arguments->hasNode(0)) {
throw new RuntimeException(sprintf('The "%s" filter requires exactly one argument, the description text.', $name));
}
$text = $arguments->getNode(0);
if (!$text instanceof \Twig_Node_Expression_Constant) {
throw new RuntimeException(sprintf('The first argument of the "%s" filter must be a constant expression, such as a string.', $name));
}
$message->{'set' . $name}($text->getAttribute('value'));
} elseif ('trans' === $name) {
break;
}
}
$this->catalogue->add($message);
}
}
return $node;
}
示例8: enterNode
public function enterNode(Twig_NodeInterface $node, Twig_Environment $env)
{
if ($node instanceof Twig_Node_Module) {
$this->inAModule = true;
$this->tags = array();
$this->filters = array();
return $node;
} elseif ($this->inAModule) {
// look for tags
if ($node->getNodeTag()) {
$this->tags[$node->getNodeTag()] = true;
}
// look for filters
if ($node instanceof Twig_Node_Expression_Filter) {
foreach ($node->getFilters() as $filter) {
$this->filters[$filter[0]] = true;
}
}
// look for simple print statement ({{ article }})
if ($node instanceof Twig_Node_Print && $node->getExpression() instanceof Twig_Node_Expression_Name) {
return new Twig_Node_SandboxPrint($node->getExpression(), $node->getLine(), $node->getNodeTag());
}
}
return $node;
}
示例9: applyFilters
protected function applyFilters(Twig_NodeInterface $node)
{
if (false === ($filters = $this->getCurrentFilters())) {
return $node;
}
if ($node instanceof Twig_Node_Text) {
$expression = new Twig_Node_Expression_Constant($node->getData(), $node->getLine());
} else {
$expression = $node->getExpression();
}
// filters
if ($expression instanceof Twig_Node_Expression_Filter) {
$expression->appendFilters($filters);
return $node;
} else {
return new Twig_Node_Print(new Twig_Node_Expression_Filter($expression, $filters, $node->getLine()), $node->getLine());
}
}
示例10: compileString
protected function compileString(\Twig_NodeInterface $body, \Twig_Node_Expression_Array $vars)
{
if ($body instanceof \Twig_Node_Expression_Constant) {
$msg = $body->getAttribute('value');
} elseif ($body instanceof \Twig_Node_Text) {
$msg = $body->getAttribute('data');
} else {
return array($body, $vars);
}
preg_match_all('/(?<!%)%([^%]+)%/', $msg, $matches);
foreach ($matches[1] as $var) {
$key = new \Twig_Node_Expression_Constant('%' . $var . '%', $body->getLine());
if (!$vars->hasElement($key)) {
$vars->addElement(new \Twig_Node_Expression_Name($var, $body->getLine()), $key);
}
}
return array(new \Twig_Node_Expression_Constant(str_replace('%%', '%', trim($msg)), $body->getLine()), $vars);
}
示例11: escapeNode
protected function escapeNode(Twig_NodeInterface $node, Twig_Environment $env, $type)
{
if (false === $type) {
return $node;
}
$expression = $node instanceof Twig_Node_Print ? $node->getExpression() : $node;
if ($expression instanceof Twig_Node_Expression_Filter) {
// don't escape if the primary node of the filter is not a variable
$nodes = $expression->getNodes();
if (!$nodes[0] instanceof Twig_Node_Expression_Name) {
return $node;
}
// don't escape if there is already an "escaper" in the filter chain
$filterMap = $env->getFilters();
foreach ($expression->getFilters() as $filter) {
if (isset($filterMap[$filter[0]]) && $filterMap[$filter[0]]->isEscaper()) {
return $node;
}
}
} elseif (!$expression instanceof Twig_Node_Expression_GetAttr && !$expression instanceof Twig_Node_Expression_Name) {
// don't escape if the node is not a variable
return $node;
}
// escape
if ($expression instanceof Twig_Node_Expression_Filter) {
// escape all variables in filters arguments
$filters = $expression->getFilters();
foreach ($filters as $i => $filter) {
foreach ($filter[1] as $j => $argument) {
$filters[$i][1][$j] = $this->escapeNode($argument, $env, $type);
}
}
$expression->setFilters($filters);
$expression->prependFilter($this->getEscaperFilter($type));
return $node;
} elseif ($node instanceof Twig_Node_Print) {
return new Twig_Node_Print(new Twig_Node_Expression_Filter($expression, array($this->getEscaperFilter($type)), $node->getLine()), $node->getLine());
} else {
return new Twig_Node_Expression_Filter($node, array($this->getEscaperFilter($type)), $node->getLine());
}
}
示例12: compileString
protected function compileString(\Twig_NodeInterface $body, \Twig_Node_Expression_Array $vars)
{
if ($body instanceof \Twig_Node_Expression_Constant) {
$msg = $body->getAttribute('value');
} elseif ($body instanceof \Twig_Node_Text) {
$msg = $body->getAttribute('data');
} else {
return array($body, $vars);
}
$current = array();
foreach ($vars as $name => $var) {
$current[$name] = true;
}
preg_match_all('/\\%([^\\%]+)\\%/', $msg, $matches);
foreach ($matches[1] as $var) {
if (!isset($current['%' . $var . '%'])) {
$vars->setNode('%' . $var . '%', new \Twig_Node_Expression_Name($var, $body->getLine()));
}
}
return array(new \Twig_Node_Expression_Constant(trim($msg), $body->getLine()), $vars);
}
示例13: compileString
protected function compileString(\Twig_NodeInterface $body, \Twig_Node_Expression_Array $vars, $ignoreStrictCheck = false)
{
if ($body instanceof \Twig_Node_Expression_Constant) {
$msg = $body->getAttribute('value');
} elseif ($body instanceof \Twig_Node_Text) {
$msg = $body->getAttribute('data');
} else {
return array($body, $vars);
}
preg_match_all('/(?<!%)%([^%]+)%/', $msg, $matches);
foreach ($matches[1] as $var) {
$key = new \Twig_Node_Expression_Constant('%' . $var . '%', $body->getLine());
if (!$vars->hasElement($key)) {
if ('count' === $var && null !== $this->getNode('count')) {
$vars->addElement($this->getNode('count'), $key);
} else {
$varExpr = new \Twig_Node_Expression_Name($var, $body->getLine());
$varExpr->setAttribute('ignore_strict_check', $ignoreStrictCheck);
$vars->addElement($varExpr, $key);
}
}
}
return array(new \Twig_Node_Expression_Constant(str_replace('%%', '%', trim($msg)), $body->getLine()), $vars);
}
示例14: enterNode
public function enterNode(\Twig_NodeInterface $node, \Twig_Environment $env)
{
$this->stack[] = $node;
if ($node instanceof \Twig_Node_Expression_Function) {
$name = $node->getAttribute('name');
if (in_array($name, $this->methodNames)) {
$args = $node->getNode('arguments');
switch ($name) {
case '_n':
case '_fn':
$id = $args->getNode(0)->getAttribute('value') . '|' . $args->getNode(1)->getAttribute('value');
break;
default:
case '__f':
case '__':
$id = $args->getNode(0)->getAttribute('value');
break;
}
// obtain translation domain from composer file
$composerPath = str_replace($this->file->getRelativePathname(), '', $this->file->getPathname());
if (isset(self::$domainCache[$composerPath])) {
$domain = self::$domainCache[$composerPath];
} else {
$scanner = new Scanner();
$scanner->scan(array($composerPath), 1);
$metaData = $scanner->getModulesMetaData(true);
$domains = array_keys($metaData);
if (isset($domains[0])) {
$domain = strtolower($domains[0]);
// cache result of file lookup
self::$domainCache[$composerPath] = $domain;
} else {
$domain = 'messages';
}
}
$domainNode = array_search($name, $this->methodNames);
$domain = $args->hasNode($domainNode) ? $args->getNode($domainNode)->getAttribute('value') : $domain;
$message = new Message($id, $domain);
$message->addSource(new FileSource((string) $this->file, $node->getLine()));
$this->catalogue->add($message);
}
}
return $node;
}
示例15: checkLoopUsageBody
protected function checkLoopUsageBody(Twig_TokenStream $stream, Twig_NodeInterface $node)
{
if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) {
$attribute = $node->getNode('attribute');
if ($attribute instanceof Twig_Node_Expression_Constant && in_array($attribute->getAttribute('value'), array('length', 'revindex0', 'revindex', 'last'))) {
throw new Twig_Error_Syntax(sprintf('The "loop.%s" variable is not defined when looping with a condition', $attribute->getAttribute('value')), $node->getLine(), $stream->getFilename());
}
}
// should check for parent.loop.XXX usage
if ($node instanceof Twig_Node_For) {
return;
}
foreach ($node as $n) {
if (!$n) {
continue;
}
$this->checkLoopUsageBody($stream, $n);
}
}