Revision 1852
Added by darkviper almost 13 years ago
| Compiler.php | ||
|---|---|---|
| 25 | 25 |
protected $debugInfo; |
| 26 | 26 |
protected $sourceOffset; |
| 27 | 27 |
protected $sourceLine; |
| 28 |
protected $filename; |
|
| 28 | 29 |
|
| 29 | 30 |
/** |
| 30 | 31 |
* Constructor. |
| ... | ... | |
| 37 | 38 |
$this->debugInfo = array(); |
| 38 | 39 |
} |
| 39 | 40 |
|
| 41 |
public function getFilename() |
|
| 42 |
{
|
|
| 43 |
return $this->filename; |
|
| 44 |
} |
|
| 45 |
|
|
| 40 | 46 |
/** |
| 41 | 47 |
* Returns the environment instance related to this compiler. |
| 42 | 48 |
* |
| ... | ... | |
| 70 | 76 |
$this->lastLine = null; |
| 71 | 77 |
$this->source = ''; |
| 72 | 78 |
$this->sourceOffset = 0; |
| 73 |
$this->sourceLine = 0; |
|
| 79 |
// source code starts at 1 (as we then increment it when we encounter new lines) |
|
| 80 |
$this->sourceLine = 1; |
|
| 74 | 81 |
$this->indentation = $indentation; |
| 75 | 82 |
|
| 83 |
if ($node instanceof Twig_Node_Module) {
|
|
| 84 |
$this->filename = $node->getAttribute('filename');
|
|
| 85 |
} |
|
| 86 |
|
|
| 76 | 87 |
$node->compile($this); |
| 77 | 88 |
|
| 78 | 89 |
return $this; |
| ... | ... | |
| 92 | 103 |
/** |
| 93 | 104 |
* Adds a raw string to the compiled code. |
| 94 | 105 |
* |
| 95 |
* @param string $string The string
|
|
| 106 |
* @param string $string The string |
|
| 96 | 107 |
* |
| 97 | 108 |
* @return Twig_Compiler The current compiler instance |
| 98 | 109 |
*/ |
| ... | ... | |
| 119 | 130 |
return $this; |
| 120 | 131 |
} |
| 121 | 132 |
|
| 133 |
/** |
|
| 134 |
* Appends an indentation to the current PHP code after compilation. |
|
| 135 |
* |
|
| 136 |
* @return Twig_Compiler The current compiler instance |
|
| 137 |
*/ |
|
| 122 | 138 |
public function addIndentation() |
| 123 | 139 |
{
|
| 124 | 140 |
$this->source .= str_repeat(' ', $this->indentation * 4);
|
| ... | ... | |
| 129 | 145 |
/** |
| 130 | 146 |
* Adds a quoted string to the compiled code. |
| 131 | 147 |
* |
| 132 |
* @param string $value The string
|
|
| 148 |
* @param string $value The string |
|
| 133 | 149 |
* |
| 134 | 150 |
* @return Twig_Compiler The current compiler instance |
| 135 | 151 |
*/ |
| ... | ... | |
| 143 | 159 |
/** |
| 144 | 160 |
* Returns a PHP representation of a given value. |
| 145 | 161 |
* |
| 146 |
* @param mixed $value The value to convert
|
|
| 162 |
* @param mixed $value The value to convert |
|
| 147 | 163 |
* |
| 148 | 164 |
* @return Twig_Compiler The current compiler instance |
| 149 | 165 |
*/ |
| ... | ... | |
| 192 | 208 |
public function addDebugInfo(Twig_NodeInterface $node) |
| 193 | 209 |
{
|
| 194 | 210 |
if ($node->getLine() != $this->lastLine) {
|
| 195 |
$this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset); |
|
| 211 |
$this->write("// line {$node->getLine()}\n");
|
|
| 212 |
|
|
| 213 |
// when mbstring.func_overload is set to 2 |
|
| 214 |
// mb_substr_count() replaces substr_count() |
|
| 215 |
// but they have different signatures! |
|
| 216 |
if (((int) ini_get('mbstring.func_overload')) & 2) {
|
|
| 217 |
// this is much slower than the "right" version |
|
| 218 |
$this->sourceLine += mb_substr_count(mb_substr($this->source, $this->sourceOffset), "\n"); |
|
| 219 |
} else {
|
|
| 220 |
$this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset); |
|
| 221 |
} |
|
| 196 | 222 |
$this->sourceOffset = strlen($this->source); |
| 197 | 223 |
$this->debugInfo[$this->sourceLine] = $node->getLine(); |
| 198 | 224 |
|
| 199 | 225 |
$this->lastLine = $node->getLine(); |
| 200 |
$this->write("// line {$node->getLine()}\n");
|
|
| 201 | 226 |
} |
| 202 | 227 |
|
| 203 | 228 |
return $this; |
| ... | ... | |
| 231 | 256 |
*/ |
| 232 | 257 |
public function outdent($step = 1) |
| 233 | 258 |
{
|
| 259 |
// can't outdent by more steps that the current indentation level |
|
| 260 |
if ($this->indentation < $step) {
|
|
| 261 |
throw new LogicException('Unable to call outdent() as the indentation would become negative');
|
|
| 262 |
} |
|
| 263 |
|
|
| 234 | 264 |
$this->indentation -= $step; |
| 235 | 265 |
|
| 236 |
if ($this->indentation < 0) {
|
|
| 237 |
throw new Twig_Error('Unable to call outdent() as the indentation would become negative');
|
|
| 238 |
} |
|
| 239 |
|
|
| 240 | 266 |
return $this; |
| 241 | 267 |
} |
| 242 | 268 |
} |
Also available in: Unified diff
updated Twig template engine to stable version 1.11.1 step2