Commit | Line | Data |
---|---|---|
ccd27f54 S |
1 | <?php |
2 | ||
3 | /** | |
4 | * Double quoted string inside a tag. | |
5 | * | |
6 | * @package Smarty | |
7 | * @subpackage Compiler | |
8 | * @ignore | |
9 | */ | |
cd8826ea | 10 | |
ccd27f54 S |
11 | /** |
12 | * Double quoted string inside a tag. | |
13 | * | |
14 | * @package Smarty | |
15 | * @subpackage Compiler | |
16 | * @ignore | |
17 | */ | |
18 | class Smarty_Internal_ParseTree_Dq extends Smarty_Internal_ParseTree | |
19 | { | |
20 | /** | |
21 | * Create parse tree buffer for double quoted string subtrees | |
22 | * | |
cd8826ea S |
23 | * @param object $parser parser object |
24 | * @param Smarty_Internal_ParseTree $subtree parse tree buffer | |
ccd27f54 S |
25 | */ |
26 | public function __construct($parser, Smarty_Internal_ParseTree $subtree) | |
27 | { | |
28 | $this->parser = $parser; | |
29 | $this->subtrees[] = $subtree; | |
30 | if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { | |
31 | $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack); | |
32 | } | |
33 | } | |
34 | ||
35 | /** | |
36 | * Append buffer to subtree | |
37 | * | |
cd8826ea | 38 | * @param Smarty_Internal_ParseTree $subtree parse tree buffer |
ccd27f54 S |
39 | */ |
40 | public function append_subtree(Smarty_Internal_ParseTree $subtree) | |
41 | { | |
42 | $last_subtree = count($this->subtrees) - 1; | |
43 | if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof Smarty_Internal_ParseTree_Tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) { | |
44 | if ($subtree instanceof Smarty_Internal_ParseTree_Code) { | |
cd8826ea | 45 | $this->subtrees[$last_subtree]->data = $this->parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo ' . $subtree->data . ';?>'); |
ccd27f54 | 46 | } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) { |
cd8826ea | 47 | $this->subtrees[$last_subtree]->data = $this->parser->compiler->appendCode($this->subtrees[$last_subtree]->data, '<?php echo "' . $subtree->data . '";?>'); |
ccd27f54 | 48 | } else { |
cd8826ea | 49 | $this->subtrees[$last_subtree]->data = $this->parser->compiler->appendCode($this->subtrees[$last_subtree]->data, $subtree->data); |
ccd27f54 S |
50 | } |
51 | } else { | |
52 | $this->subtrees[] = $subtree; | |
53 | } | |
54 | if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { | |
55 | $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack); | |
56 | } | |
57 | } | |
58 | ||
59 | /** | |
60 | * Merge subtree buffer content together | |
61 | * | |
62 | * @return string compiled template code | |
63 | */ | |
64 | public function to_smarty_php() | |
65 | { | |
66 | $code = ''; | |
67 | foreach ($this->subtrees as $subtree) { | |
68 | if ($code !== "") { | |
69 | $code .= "."; | |
70 | } | |
71 | if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { | |
72 | $more_php = $subtree->assign_to_var(); | |
73 | } else { | |
74 | $more_php = $subtree->to_smarty_php(); | |
75 | } | |
76 | ||
77 | $code .= $more_php; | |
78 | ||
79 | if (!$subtree instanceof Smarty_Internal_ParseTree_DqContent) { | |
80 | $this->parser->compiler->has_variable_string = true; | |
81 | } | |
82 | } | |
83 | ||
84 | return $code; | |
85 | } | |
86 | } |