Dotclear

source: inc/libs/Twig/Node/Expression/Array.php @ 1149:1657e862089c

Revision 1149:1657e862089c, 2.3 KB checked in by dsls, 13 years ago (diff)

Fixed unix case-sensitive twig directory

Line 
1<?php
2
3/*
4 * This file is part of Twig.
5 *
6 * (c) 2009 Fabien Potencier
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11class Twig_Node_Expression_Array extends Twig_Node_Expression
12{
13    protected $index;
14
15    public function __construct(array $elements, $lineno)
16    {
17        parent::__construct($elements, array(), $lineno);
18
19        $this->index = -1;
20        foreach ($this->getKeyValuePairs() as $pair) {
21            if ($pair['key'] instanceof Twig_Node_Expression_Constant && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) {
22                $this->index = $pair['key']->getAttribute('value');
23            }
24        }
25    }
26
27    public function getKeyValuePairs()
28    {
29        $pairs = array();
30
31        foreach (array_chunk($this->nodes, 2) as $pair) {
32            $pairs[] = array(
33                'key' => $pair[0],
34                'value' => $pair[1],
35            );
36        }
37
38        return $pairs;
39    }
40
41    public function hasElement(Twig_Node_Expression $key)
42    {
43        foreach ($this->getKeyValuePairs() as $pair) {
44            // we compare the string representation of the keys
45            // to avoid comparing the line numbers which are not relevant here.
46            if ((string) $key == (string) $pair['key']) {
47                return true;
48            }
49        }
50
51        return false;
52    }
53
54    public function addElement(Twig_Node_Expression $value, Twig_Node_Expression $key = null)
55    {
56        if (null === $key) {
57            $key = new Twig_Node_Expression_Constant(++$this->index, $value->getLine());
58        }
59
60        array_push($this->nodes, $key, $value);
61    }
62
63    /**
64     * Compiles the node to PHP.
65     *
66     * @param Twig_Compiler A Twig_Compiler instance
67     */
68    public function compile(Twig_Compiler $compiler)
69    {
70        $compiler->raw('array(');
71        $first = true;
72        foreach ($this->getKeyValuePairs() as $pair) {
73            if (!$first) {
74                $compiler->raw(', ');
75            }
76            $first = false;
77
78            $compiler
79                ->subcompile($pair['key'])
80                ->raw(' => ')
81                ->subcompile($pair['value'])
82            ;
83        }
84        $compiler->raw(')');
85    }
86}
Note: See TracBrowser for help on using the repository browser.

Sites map