1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Copyright (c) 2013-2016 |
4
|
|
|
* |
5
|
|
|
* @category Library |
6
|
|
|
* @package Dwoo\Plugins\Processors |
7
|
|
|
* @author Jordi Boggiano <[email protected]> |
8
|
|
|
* @author David Sanchez <[email protected]> |
9
|
|
|
* @copyright 2008-2013 Jordi Boggiano |
10
|
|
|
* @copyright 2013-2016 David Sanchez |
11
|
|
|
* @license http://dwoo.org/LICENSE Modified BSD License |
12
|
|
|
* @version 1.3.0 |
13
|
|
|
* @date 2016-09-18 |
14
|
|
|
* @link http://dwoo.org/ |
15
|
|
|
*/ |
16
|
|
|
|
17
|
|
|
namespace Dwoo\Plugins\Processors; |
18
|
|
|
|
19
|
|
|
use Dwoo\Processor; |
20
|
|
|
|
21
|
|
|
/** |
22
|
|
|
* Performs some template conversions to allow smarty templates to be used by |
23
|
|
|
* the Dwoo compiler. |
24
|
|
|
* This software is provided 'as-is', without any express or implied warranty. |
25
|
|
|
* In no event will the authors be held liable for any damages arising from the use of this software. |
26
|
|
|
*/ |
27
|
|
|
class PluginSmartyCompatible extends Processor |
28
|
|
|
{ |
29
|
|
|
/** |
30
|
|
|
* @param string $input |
31
|
|
|
* |
32
|
|
|
* @return mixed |
33
|
|
|
*/ |
34
|
|
|
public function process($input) |
35
|
|
|
{ |
36
|
|
|
list($l, $r) = $this->compiler->getDelimiters(); |
|
|
|
|
37
|
|
|
|
38
|
|
|
$rl = preg_quote($l, '/'); |
39
|
|
|
$rr = preg_quote($r, '/'); |
40
|
|
|
$sectionParam = '(?:(name|loop|start|step|max|show)\s*=\s*(\S+))?\s*'; |
41
|
|
|
$input = preg_replace_callback('/' . $rl . '\s*section ' . str_repeat($sectionParam, 6) . '\s*' . $rr . '(.+?)(?:' . $rl . '\s*sectionelse\s*' . $rr . '(.+?))?' . $rl . '\s*\/section\s*' . $rr . '/is', array( |
42
|
|
|
$this, |
43
|
|
|
'convertSection' |
44
|
|
|
), $input); |
45
|
|
|
$input = str_replace('$smarty.section.', '$smarty.for.', $input); |
46
|
|
|
|
47
|
|
|
$smarty = array( |
48
|
|
|
'/' . $rl . '\s*ldelim\s*' . $rr . '/', |
49
|
|
|
'/' . $rl . '\s*rdelim\s*' . $rr . '/', |
50
|
|
|
'/' . $rl . '\s*\$smarty\.ldelim\s*' . $rr . '/', |
51
|
|
|
'/' . $rl . '\s*\$smarty\.rdelim\s*' . $rr . '/', |
52
|
|
|
'/\$smarty\./', |
53
|
|
|
'/' . $rl . '\s*php\s*' . $rr . '/', |
54
|
|
|
'/' . $rl . '\s*\/php\s*' . $rr . '/', |
55
|
|
|
'/\|(@?)strip(\||' . $rr . ')/', |
56
|
|
|
'/' . $rl . '\s*sectionelse\s*' . $rr . '/', |
57
|
|
|
); |
58
|
|
|
|
59
|
|
|
$dwoo = array( |
60
|
|
|
'\\' . $l, |
61
|
|
|
$r, |
62
|
|
|
'\\' . $l, |
63
|
|
|
$r, |
64
|
|
|
'$dwoo.', |
65
|
|
|
'<?php ', |
66
|
|
|
' ?>', |
67
|
|
|
'|$1whitespace$2', |
68
|
|
|
$l . 'else' . $r, |
69
|
|
|
); |
70
|
|
|
|
71
|
|
|
if (preg_match('{\|@([a-z][a-z0-9_]*)}i', $input, $matches)) { |
72
|
|
|
trigger_error('The Smarty Compatibility Module has detected that you use |@' . $matches[1] . ' in your template, this might lead to problems as Dwoo interprets the @ operator differently than Smarty, see http://wiki.dwoo.org/index.php/Syntax#The_.40_Operator', E_USER_NOTICE); |
73
|
|
|
} |
74
|
|
|
|
75
|
|
|
return preg_replace($smarty, $dwoo, $input); |
76
|
|
|
} |
77
|
|
|
|
78
|
|
|
/** |
79
|
|
|
* @param array $matches |
80
|
|
|
* |
81
|
|
|
* @return mixed |
82
|
|
|
*/ |
83
|
|
|
protected function convertSection(array $matches) |
84
|
|
|
{ |
85
|
|
|
$params = array(); |
86
|
|
|
$index = 1; |
87
|
|
|
while (!empty($matches[$index]) && $index < 13) { |
88
|
|
|
$params[$matches[$index]] = $matches[$index + 1]; |
89
|
|
|
$index += 2; |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
return str_replace('[' . trim($params['name'], '"\'') . ']', '[$' . trim($params['name'], '"\'') . ']', $matches[0]); |
93
|
|
|
} |
94
|
|
|
} |
95
|
|
|
|
If you implement
__call
and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.This is often the case, when
__call
is implemented by a parent class and only the child class knows which methods exist: