Completed
Pull Request — master (#56)
by David
05:43
created
lib/Dwoo/Plugins/Blocks/PluginForelse.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -27,47 +27,47 @@
 block discarded – undo
27 27
  */
28 28
 class PluginForelse extends BlockPlugin implements ICompilableBlock
29 29
 {
30
-    public function init()
31
-    {
32
-    }
30
+	public function init()
31
+	{
32
+	}
33 33
 
34
-    /**
35
-     * @param Compiler $compiler
36
-     * @param array    $params
37
-     * @param string   $prepend
38
-     * @param string   $append
39
-     * @param string   $type
40
-     *
41
-     * @return string
42
-     */
43
-    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
44
-    {
45
-        $with = &$compiler->findBlock('for', true);
34
+	/**
35
+	 * @param Compiler $compiler
36
+	 * @param array    $params
37
+	 * @param string   $prepend
38
+	 * @param string   $append
39
+	 * @param string   $type
40
+	 *
41
+	 * @return string
42
+	 */
43
+	public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
44
+	{
45
+		$with = &$compiler->findBlock('for', true);
46 46
 
47
-        $params['initialized'] = true;
48
-        $compiler->injectBlock($type, $params);
47
+		$params['initialized'] = true;
48
+		$compiler->injectBlock($type, $params);
49 49
 
50
-        return '';
51
-    }
50
+		return '';
51
+	}
52 52
 
53
-    /**
54
-     * @param Compiler $compiler
55
-     * @param array    $params
56
-     * @param string   $prepend
57
-     * @param string   $append
58
-     * @param string   $content
59
-     *
60
-     * @return string
61
-     */
62
-    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
63
-    {
64
-        if (!isset($params['initialized'])) {
65
-            return '';
66
-        }
53
+	/**
54
+	 * @param Compiler $compiler
55
+	 * @param array    $params
56
+	 * @param string   $prepend
57
+	 * @param string   $append
58
+	 * @param string   $content
59
+	 *
60
+	 * @return string
61
+	 */
62
+	public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
63
+	{
64
+		if (!isset($params['initialized'])) {
65
+			return '';
66
+		}
67 67
 
68
-        $block                      = &$compiler->getCurrentBlock();
69
-        $block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
68
+		$block                      = &$compiler->getCurrentBlock();
69
+		$block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
70 70
 
71
-        return '';
72
-    }
71
+		return '';
72
+	}
73 73
 }
Please login to merge, or discard this patch.
lib/Dwoo/Plugins/Blocks/PluginLoop.php 1 patch
Indentation   +108 added lines, -108 removed lines patch added patch discarded remove patch
@@ -48,123 +48,123 @@
 block discarded – undo
48 48
  */
49 49
 class PluginLoop extends BlockPlugin implements ICompilableBlock, IElseable
50 50
 {
51
-    public static $cnt = 0;
51
+	public static $cnt = 0;
52 52
 
53
-    /**
54
-     * @param        $from
55
-     * @param string $name
56
-     */
57
-    public function init($from, $name = 'default')
58
-    {
59
-    }
53
+	/**
54
+	 * @param        $from
55
+	 * @param string $name
56
+	 */
57
+	public function init($from, $name = 'default')
58
+	{
59
+	}
60 60
 
61
-    /**
62
-     * @param Compiler $compiler
63
-     * @param array    $params
64
-     * @param string   $prepend
65
-     * @param string   $append
66
-     * @param string   $type
67
-     *
68
-     * @return string
69
-     */
70
-    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
71
-    {
72
-        // get block params and save the current template pointer to use it in the postProcessing method
73
-        $currentBlock                         = &$compiler->getCurrentBlock();
74
-        $currentBlock['params']['tplPointer'] = $compiler->getPointer();
61
+	/**
62
+	 * @param Compiler $compiler
63
+	 * @param array    $params
64
+	 * @param string   $prepend
65
+	 * @param string   $append
66
+	 * @param string   $type
67
+	 *
68
+	 * @return string
69
+	 */
70
+	public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
71
+	{
72
+		// get block params and save the current template pointer to use it in the postProcessing method
73
+		$currentBlock                         = &$compiler->getCurrentBlock();
74
+		$currentBlock['params']['tplPointer'] = $compiler->getPointer();
75 75
 
76
-        return '';
77
-    }
76
+		return '';
77
+	}
78 78
 
79
-    /**
80
-     * @param Compiler $compiler
81
-     * @param array    $params
82
-     * @param string   $prepend
83
-     * @param string   $append
84
-     * @param string   $content
85
-     *
86
-     * @return string
87
-     */
88
-    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
89
-    {
90
-        $params = $compiler->getCompiledParams($params);
91
-        $tpl    = $compiler->getTemplateSource($params['tplPointer']);
79
+	/**
80
+	 * @param Compiler $compiler
81
+	 * @param array    $params
82
+	 * @param string   $prepend
83
+	 * @param string   $append
84
+	 * @param string   $content
85
+	 *
86
+	 * @return string
87
+	 */
88
+	public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
89
+	{
90
+		$params = $compiler->getCompiledParams($params);
91
+		$tpl    = $compiler->getTemplateSource($params['tplPointer']);
92 92
 
93
-        // assigns params
94
-        $src  = $params['from'];
95
-        $name = $params['name'];
93
+		// assigns params
94
+		$src  = $params['from'];
95
+		$name = $params['name'];
96 96
 
97
-        // evaluates which global variables have to be computed
98
-        $varName       = '$dwoo.loop.' . trim($name, '"\'') . '.';
99
-        $shortVarName  = '$.loop.' . trim($name, '"\'') . '.';
100
-        $usesAny       = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
101
-        $usesFirst     = strpos($tpl, $varName . 'first') !== false || strpos($tpl, $shortVarName . 'first') !== false;
102
-        $usesLast      = strpos($tpl, $varName . 'last') !== false || strpos($tpl, $shortVarName . 'last') !== false;
103
-        $usesIndex     = $usesFirst || strpos($tpl, $varName . 'index') !== false || strpos($tpl, $shortVarName . 'index') !== false;
104
-        $usesIteration = $usesLast || strpos($tpl, $varName . 'iteration') !== false || strpos($tpl, $shortVarName . 'iteration') !== false;
105
-        $usesShow      = strpos($tpl, $varName . 'show') !== false || strpos($tpl, $shortVarName . 'show') !== false;
106
-        $usesTotal     = $usesLast || strpos($tpl, $varName . 'total') !== false || strpos($tpl, $shortVarName . 'total') !== false;
97
+		// evaluates which global variables have to be computed
98
+		$varName       = '$dwoo.loop.' . trim($name, '"\'') . '.';
99
+		$shortVarName  = '$.loop.' . trim($name, '"\'') . '.';
100
+		$usesAny       = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
101
+		$usesFirst     = strpos($tpl, $varName . 'first') !== false || strpos($tpl, $shortVarName . 'first') !== false;
102
+		$usesLast      = strpos($tpl, $varName . 'last') !== false || strpos($tpl, $shortVarName . 'last') !== false;
103
+		$usesIndex     = $usesFirst || strpos($tpl, $varName . 'index') !== false || strpos($tpl, $shortVarName . 'index') !== false;
104
+		$usesIteration = $usesLast || strpos($tpl, $varName . 'iteration') !== false || strpos($tpl, $shortVarName . 'iteration') !== false;
105
+		$usesShow      = strpos($tpl, $varName . 'show') !== false || strpos($tpl, $shortVarName . 'show') !== false;
106
+		$usesTotal     = $usesLast || strpos($tpl, $varName . 'total') !== false || strpos($tpl, $shortVarName . 'total') !== false;
107 107
 
108
-        if (strpos($name, '$this->scope[') !== false) {
109
-            $usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
110
-        }
108
+		if (strpos($name, '$this->scope[') !== false) {
109
+			$usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
110
+		}
111 111
 
112
-        // gets foreach id
113
-        $cnt = self::$cnt ++;
112
+		// gets foreach id
113
+		$cnt = self::$cnt ++;
114 114
 
115
-        // builds pre processing output
116
-        $pre = Compiler::PHP_OPEN . "\n" . '$_loop' . $cnt . '_data = ' . $src . ';';
117
-        // adds foreach properties
118
-        if ($usesAny) {
119
-            $pre .= "\n" . '$this->globals["loop"][' . $name . '] = array' . "\n(";
120
-            if ($usesIndex) {
121
-                $pre .= "\n\t" . '"index"		=> 0,';
122
-            }
123
-            if ($usesIteration) {
124
-                $pre .= "\n\t" . '"iteration"		=> 1,';
125
-            }
126
-            if ($usesFirst) {
127
-                $pre .= "\n\t" . '"first"		=> null,';
128
-            }
129
-            if ($usesLast) {
130
-                $pre .= "\n\t" . '"last"		=> null,';
131
-            }
132
-            if ($usesShow) {
133
-                $pre .= "\n\t" . '"show"		=> $this->isTraversable($_loop' . $cnt . '_data, true),';
134
-            }
135
-            if ($usesTotal) {
136
-                $pre .= "\n\t" . '"total"		=> $this->count($_loop' . $cnt . '_data),';
137
-            }
138
-            $pre .= "\n);\n" . '$_loop' . $cnt . '_glob =& $this->globals["loop"][' . $name . '];';
139
-        }
140
-        // checks if the loop must be looped
141
-        $pre .= "\n" . 'if ($this->isTraversable($_loop' . $cnt . '_data' . (isset($params['hasElse']) ? ', true' : '') . ') == true)' . "\n{";
142
-        // iterates over keys
143
-        $pre .= "\n\t" . 'foreach ($_loop' . $cnt . '_data as $tmp_key => $this->scope["-loop-"])' . "\n\t{";
144
-        // updates properties
145
-        if ($usesFirst) {
146
-            $pre .= "\n\t\t" . '$_loop' . $cnt . '_glob["first"] = (string) ($_loop' . $cnt . '_glob["index"] === 0);';
147
-        }
148
-        if ($usesLast) {
149
-            $pre .= "\n\t\t" . '$_loop' . $cnt . '_glob["last"] = (string) ($_loop' . $cnt . '_glob["iteration"] === $_loop' . $cnt . '_glob["total"]);';
150
-        }
151
-        $pre .= "\n\t\t" . '$_loop' . $cnt . '_scope = $this->setScope(array("-loop-"));' . "\n/* -- loop start output */\n" . Compiler::PHP_CLOSE;
115
+		// builds pre processing output
116
+		$pre = Compiler::PHP_OPEN . "\n" . '$_loop' . $cnt . '_data = ' . $src . ';';
117
+		// adds foreach properties
118
+		if ($usesAny) {
119
+			$pre .= "\n" . '$this->globals["loop"][' . $name . '] = array' . "\n(";
120
+			if ($usesIndex) {
121
+				$pre .= "\n\t" . '"index"		=> 0,';
122
+			}
123
+			if ($usesIteration) {
124
+				$pre .= "\n\t" . '"iteration"		=> 1,';
125
+			}
126
+			if ($usesFirst) {
127
+				$pre .= "\n\t" . '"first"		=> null,';
128
+			}
129
+			if ($usesLast) {
130
+				$pre .= "\n\t" . '"last"		=> null,';
131
+			}
132
+			if ($usesShow) {
133
+				$pre .= "\n\t" . '"show"		=> $this->isTraversable($_loop' . $cnt . '_data, true),';
134
+			}
135
+			if ($usesTotal) {
136
+				$pre .= "\n\t" . '"total"		=> $this->count($_loop' . $cnt . '_data),';
137
+			}
138
+			$pre .= "\n);\n" . '$_loop' . $cnt . '_glob =& $this->globals["loop"][' . $name . '];';
139
+		}
140
+		// checks if the loop must be looped
141
+		$pre .= "\n" . 'if ($this->isTraversable($_loop' . $cnt . '_data' . (isset($params['hasElse']) ? ', true' : '') . ') == true)' . "\n{";
142
+		// iterates over keys
143
+		$pre .= "\n\t" . 'foreach ($_loop' . $cnt . '_data as $tmp_key => $this->scope["-loop-"])' . "\n\t{";
144
+		// updates properties
145
+		if ($usesFirst) {
146
+			$pre .= "\n\t\t" . '$_loop' . $cnt . '_glob["first"] = (string) ($_loop' . $cnt . '_glob["index"] === 0);';
147
+		}
148
+		if ($usesLast) {
149
+			$pre .= "\n\t\t" . '$_loop' . $cnt . '_glob["last"] = (string) ($_loop' . $cnt . '_glob["iteration"] === $_loop' . $cnt . '_glob["total"]);';
150
+		}
151
+		$pre .= "\n\t\t" . '$_loop' . $cnt . '_scope = $this->setScope(array("-loop-"));' . "\n/* -- loop start output */\n" . Compiler::PHP_CLOSE;
152 152
 
153
-        // build post processing output and cache it
154
-        $post = Compiler::PHP_OPEN . "\n" . '/* -- loop end output */' . "\n\t\t" . '$this->setScope($_loop' . $cnt . '_scope, true);';
155
-        // update properties
156
-        if ($usesIndex) {
157
-            $post .= "\n\t\t" . '$_loop' . $cnt . '_glob["index"]+=1;';
158
-        }
159
-        if ($usesIteration) {
160
-            $post .= "\n\t\t" . '$_loop' . $cnt . '_glob["iteration"]+=1;';
161
-        }
162
-        // end loop
163
-        $post .= "\n\t}\n}\n" . Compiler::PHP_CLOSE;
164
-        if (isset($params['hasElse'])) {
165
-            $post .= $params['hasElse'];
166
-        }
153
+		// build post processing output and cache it
154
+		$post = Compiler::PHP_OPEN . "\n" . '/* -- loop end output */' . "\n\t\t" . '$this->setScope($_loop' . $cnt . '_scope, true);';
155
+		// update properties
156
+		if ($usesIndex) {
157
+			$post .= "\n\t\t" . '$_loop' . $cnt . '_glob["index"]+=1;';
158
+		}
159
+		if ($usesIteration) {
160
+			$post .= "\n\t\t" . '$_loop' . $cnt . '_glob["iteration"]+=1;';
161
+		}
162
+		// end loop
163
+		$post .= "\n\t}\n}\n" . Compiler::PHP_CLOSE;
164
+		if (isset($params['hasElse'])) {
165
+			$post .= $params['hasElse'];
166
+		}
167 167
 
168
-        return $pre . $content . $post;
169
-    }
168
+		return $pre . $content . $post;
169
+	}
170 170
 }
Please login to merge, or discard this patch.
lib/Dwoo/Plugins/Blocks/PluginStrip.php 1 patch
Indentation   +50 added lines, -50 removed lines patch added patch discarded remove patch
@@ -31,59 +31,59 @@
 block discarded – undo
31 31
  */
32 32
 class PluginStrip extends BlockPlugin implements ICompilableBlock
33 33
 {
34
-    /**
35
-     * @param string $mode
36
-     */
37
-    public function init($mode = 'default')
38
-    {
39
-    }
34
+	/**
35
+	 * @param string $mode
36
+	 */
37
+	public function init($mode = 'default')
38
+	{
39
+	}
40 40
 
41
-    /**
42
-     * @param Compiler $compiler
43
-     * @param array    $params
44
-     * @param string   $prepend
45
-     * @param string   $append
46
-     * @param string   $type
47
-     *
48
-     * @return string
49
-     */
50
-    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
51
-    {
52
-        return '';
53
-    }
41
+	/**
42
+	 * @param Compiler $compiler
43
+	 * @param array    $params
44
+	 * @param string   $prepend
45
+	 * @param string   $append
46
+	 * @param string   $type
47
+	 *
48
+	 * @return string
49
+	 */
50
+	public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
51
+	{
52
+		return '';
53
+	}
54 54
 
55
-    /**
56
-     * @param Compiler $compiler
57
-     * @param array    $params
58
-     * @param string   $prepend
59
-     * @param string   $append
60
-     * @param string   $content
61
-     *
62
-     * @return mixed|string
63
-     */
64
-    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
65
-    {
66
-        $params = $compiler->getCompiledParams($params);
55
+	/**
56
+	 * @param Compiler $compiler
57
+	 * @param array    $params
58
+	 * @param string   $prepend
59
+	 * @param string   $append
60
+	 * @param string   $content
61
+	 *
62
+	 * @return mixed|string
63
+	 */
64
+	public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
65
+	{
66
+		$params = $compiler->getCompiledParams($params);
67 67
 
68
-        $mode = trim($params['mode'], '"\'');
69
-        switch ($mode) {
70
-            case 'js':
71
-            case 'javascript':
72
-                $content = preg_replace('#(?<!:)//\s[^\r\n]*|/\*.*?\*/#s', '', $content);
68
+		$mode = trim($params['mode'], '"\'');
69
+		switch ($mode) {
70
+			case 'js':
71
+			case 'javascript':
72
+				$content = preg_replace('#(?<!:)//\s[^\r\n]*|/\*.*?\*/#s', '', $content);
73 73
 
74
-            case 'default':
75
-            default:
76
-        }
77
-        $content = preg_replace(array(
78
-            "/\n/",
79
-            "/\r/",
80
-            '/(<\?(?:php)?|<%)\s*/'
81
-        ), array(
82
-            '',
83
-            '',
84
-            '$1 '
85
-        ), preg_replace('#^\s*(.+?)\s*$#m', '$1', $content));
74
+			case 'default':
75
+			default:
76
+		}
77
+		$content = preg_replace(array(
78
+			"/\n/",
79
+			"/\r/",
80
+			'/(<\?(?:php)?|<%)\s*/'
81
+		), array(
82
+			'',
83
+			'',
84
+			'$1 '
85
+		), preg_replace('#^\s*(.+?)\s*$#m', '$1', $content));
86 86
 
87
-        return $content;
88
-    }
87
+		return $content;
88
+	}
89 89
 }
Please login to merge, or discard this patch.
lib/Dwoo/Plugins/Blocks/PluginAutoEscape.php 1 patch
Indentation   +56 added lines, -56 removed lines patch added patch discarded remove patch
@@ -32,67 +32,67 @@
 block discarded – undo
32 32
  */
33 33
 class PluginAutoEscape extends BlockPlugin implements ICompilableBlock
34 34
 {
35
-    protected static $stack = array();
35
+	protected static $stack = array();
36 36
 
37
-    /**
38
-     * @param $enabled
39
-     */
40
-    public function init($enabled)
41
-    {
42
-    }
37
+	/**
38
+	 * @param $enabled
39
+	 */
40
+	public function init($enabled)
41
+	{
42
+	}
43 43
 
44
-    /**
45
-     * @param Compiler $compiler
46
-     * @param array    $params
47
-     * @param string   $prepend
48
-     * @param string   $append
49
-     * @param string   $type
50
-     *
51
-     * @return string
52
-     * @throws CompilationException
53
-     */
54
-    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
55
-    {
56
-        $params = $compiler->getCompiledParams($params);
57
-        switch (strtolower(trim((string)$params['enabled'], '"\''))) {
44
+	/**
45
+	 * @param Compiler $compiler
46
+	 * @param array    $params
47
+	 * @param string   $prepend
48
+	 * @param string   $append
49
+	 * @param string   $type
50
+	 *
51
+	 * @return string
52
+	 * @throws CompilationException
53
+	 */
54
+	public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
55
+	{
56
+		$params = $compiler->getCompiledParams($params);
57
+		switch (strtolower(trim((string)$params['enabled'], '"\''))) {
58 58
 
59
-            case 'on':
60
-            case 'true':
61
-            case 'enabled':
62
-            case 'enable':
63
-            case '1':
64
-                $enable = true;
65
-                break;
66
-            case 'off':
67
-            case 'false':
68
-            case 'disabled':
69
-            case 'disable':
70
-            case '0':
71
-                $enable = false;
72
-                break;
73
-            default:
74
-                throw new CompilationException($compiler, 'Auto_Escape : Invalid parameter (' . $params['enabled'] . '), valid parameters are "enable"/true or "disable"/false');
75
-        }
59
+			case 'on':
60
+			case 'true':
61
+			case 'enabled':
62
+			case 'enable':
63
+			case '1':
64
+				$enable = true;
65
+				break;
66
+			case 'off':
67
+			case 'false':
68
+			case 'disabled':
69
+			case 'disable':
70
+			case '0':
71
+				$enable = false;
72
+				break;
73
+			default:
74
+				throw new CompilationException($compiler, 'Auto_Escape : Invalid parameter (' . $params['enabled'] . '), valid parameters are "enable"/true or "disable"/false');
75
+		}
76 76
 
77
-        self::$stack[] = $compiler->getAutoEscape();
78
-        $compiler->setAutoEscape($enable);
77
+		self::$stack[] = $compiler->getAutoEscape();
78
+		$compiler->setAutoEscape($enable);
79 79
 
80
-        return '';
81
-    }
80
+		return '';
81
+	}
82 82
 
83
-    /**
84
-     * @param Compiler $compiler
85
-     * @param array    $params
86
-     * @param string   $prepend
87
-     * @param string   $append
88
-     * @param string   $content
89
-     *
90
-     * @return string
91
-     */
92
-    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
93
-    {
94
-        $compiler->setAutoEscape(array_pop(self::$stack));
83
+	/**
84
+	 * @param Compiler $compiler
85
+	 * @param array    $params
86
+	 * @param string   $prepend
87
+	 * @param string   $append
88
+	 * @param string   $content
89
+	 *
90
+	 * @return string
91
+	 */
92
+	public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
93
+	{
94
+		$compiler->setAutoEscape(array_pop(self::$stack));
95 95
 
96
-        return $content;
97
-    }
96
+		return $content;
97
+	}
98 98
 }
Please login to merge, or discard this patch.
lib/Dwoo/Plugins/Blocks/PluginElse.php 1 patch
Indentation   +49 added lines, -49 removed lines patch added patch discarded remove patch
@@ -38,59 +38,59 @@
 block discarded – undo
38 38
  */
39 39
 class PluginElse extends BlockPlugin implements ICompilableBlock
40 40
 {
41
-    public function init()
42
-    {
43
-    }
41
+	public function init()
42
+	{
43
+	}
44 44
 
45
-    /**
46
-     * @param Compiler $compiler
47
-     * @param array    $params
48
-     * @param string   $prepend
49
-     * @param string   $append
50
-     * @param string   $type
51
-     *
52
-     * @return string
53
-     * @throws CompilationException
54
-     */
55
-    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
56
-    {
57
-        $preContent = '';
58
-        while (true) {
59
-            $preContent .= $compiler->removeTopBlock();
60
-            $block = &$compiler->getCurrentBlock();
61
-            if (!$block) {
62
-                throw new CompilationException($compiler, 'An else block was found but it was not preceded by an if or other else-able construct');
63
-            }
64
-            $interfaces = class_implements($block['class']);
65
-            if (in_array('Dwoo\IElseable', $interfaces) !== false) {
66
-                break;
67
-            }
68
-        }
45
+	/**
46
+	 * @param Compiler $compiler
47
+	 * @param array    $params
48
+	 * @param string   $prepend
49
+	 * @param string   $append
50
+	 * @param string   $type
51
+	 *
52
+	 * @return string
53
+	 * @throws CompilationException
54
+	 */
55
+	public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
56
+	{
57
+		$preContent = '';
58
+		while (true) {
59
+			$preContent .= $compiler->removeTopBlock();
60
+			$block = &$compiler->getCurrentBlock();
61
+			if (!$block) {
62
+				throw new CompilationException($compiler, 'An else block was found but it was not preceded by an if or other else-able construct');
63
+			}
64
+			$interfaces = class_implements($block['class']);
65
+			if (in_array('Dwoo\IElseable', $interfaces) !== false) {
66
+				break;
67
+			}
68
+		}
69 69
 
70
-        $params['initialized'] = true;
71
-        $compiler->injectBlock($type, $params);
70
+		$params['initialized'] = true;
71
+		$compiler->injectBlock($type, $params);
72 72
 
73
-        return $preContent;
74
-    }
73
+		return $preContent;
74
+	}
75 75
 
76
-    /**
77
-     * @param Compiler $compiler
78
-     * @param array    $params
79
-     * @param string   $prepend
80
-     * @param string   $append
81
-     * @param string   $content
82
-     *
83
-     * @return string
84
-     */
85
-    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
86
-    {
87
-        if (!isset($params['initialized'])) {
88
-            return '';
89
-        }
76
+	/**
77
+	 * @param Compiler $compiler
78
+	 * @param array    $params
79
+	 * @param string   $prepend
80
+	 * @param string   $append
81
+	 * @param string   $content
82
+	 *
83
+	 * @return string
84
+	 */
85
+	public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
86
+	{
87
+		if (!isset($params['initialized'])) {
88
+			return '';
89
+		}
90 90
 
91
-        $block                      = &$compiler->getCurrentBlock();
92
-        $block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
91
+		$block                      = &$compiler->getCurrentBlock();
92
+		$block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
93 93
 
94
-        return '';
95
-    }
94
+		return '';
95
+	}
96 96
 }
Please login to merge, or discard this patch.
lib/Dwoo/Plugins/Blocks/PluginSection.php 1 patch
Indentation   +117 added lines, -117 removed lines patch added patch discarded remove patch
@@ -28,98 +28,98 @@  discard block
 block discarded – undo
28 28
  */
29 29
 class PluginSection extends BlockPlugin implements ICompilableBlock, IElseable
30 30
 {
31
-    public static $cnt = 0;
32
-
33
-    /**
34
-     * @param      $name
35
-     * @param      $loop
36
-     * @param null $start
37
-     * @param null $step
38
-     * @param null $max
39
-     * @param bool $show
40
-     */
41
-    public function init($name, $loop, $start = null, $step = null, $max = null, $show = true)
42
-    {
43
-    }
44
-
45
-    /**
46
-     * @param Compiler $compiler
47
-     * @param array    $params
48
-     * @param string   $prepend
49
-     * @param string   $append
50
-     * @param string   $type
51
-     *
52
-     * @return string
53
-     */
54
-    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
55
-    {
56
-        return '';
57
-    }
58
-
59
-    /**
60
-     * @param Compiler $compiler
61
-     * @param array    $params
62
-     * @param string   $prepend
63
-     * @param string   $append
64
-     * @param string   $content
65
-     *
66
-     * @return string
67
-     */
68
-    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
69
-    {
70
-        $output = Compiler::PHP_OPEN;
71
-        $params = $compiler->getCompiledParams($params);
72
-
73
-        // assigns params
74
-        $loop  = $params['loop'];
75
-        $start = $params['start'];
76
-        $max   = $params['max'];
77
-        $name  = $params['name'];
78
-        $step  = $params['step'];
79
-        $show  = $params['show'];
80
-
81
-        // gets unique id
82
-        $cnt = self::$cnt ++;
83
-
84
-        $output .= '$this->globals[\'section\'][' . $name . '] = array();' . "\n" . '$_section' . $cnt . ' =& $this->globals[\'section\'][' . $name . '];' . "\n";
85
-
86
-        if ($loop !== 'null') {
87
-            $output .= '$_section' . $cnt . '[\'loop\'] = is_array($tmp = ' . $loop . ') ? count($tmp) : max(0, (int) $tmp);' . "\n";
88
-        } else {
89
-            $output .= '$_section' . $cnt . '[\'loop\'] = 1;' . "\n";
90
-        }
91
-
92
-        if ($show !== 'null') {
93
-            $output .= '$_section' . $cnt . '[\'show\'] = ' . $show . ";\n";
94
-        } else {
95
-            $output .= '$_section' . $cnt . '[\'show\'] = true;' . "\n";
96
-        }
97
-
98
-        if ($name !== 'null') {
99
-            $output .= '$_section' . $cnt . '[\'name\'] = ' . $name . ";\n";
100
-        } else {
101
-            $output .= '$_section' . $cnt . '[\'name\'] = true;' . "\n";
102
-        }
103
-
104
-        if ($max !== 'null') {
105
-            $output .= '$_section' . $cnt . '[\'max\'] = (int)' . $max . ";\n" . 'if($_section' . $cnt . '[\'max\'] < 0) { $_section' . $cnt . '[\'max\'] = $_section' . $cnt . '[\'loop\']; }' . "\n";
106
-        } else {
107
-            $output .= '$_section' . $cnt . '[\'max\'] = $_section' . $cnt . '[\'loop\'];' . "\n";
108
-        }
109
-
110
-        if ($step !== 'null') {
111
-            $output .= '$_section' . $cnt . '[\'step\'] = (int)' . $step . ' == 0 ? 1 : (int) ' . $step . ";\n";
112
-        } else {
113
-            $output .= '$_section' . $cnt . '[\'step\'] = 1;' . "\n";
114
-        }
115
-
116
-        if ($start !== 'null') {
117
-            $output .= '$_section' . $cnt . '[\'start\'] = (int)' . $start . ";\n";
118
-        } else {
119
-            $output .= '$_section' . $cnt . '[\'start\'] = $_section' . $cnt . '[\'step\'] > 0 ? 0 : $_section' . $cnt . '[\'loop\'] - 1;' . "\n" . 'if ($_section' . $cnt . '[\'start\'] < 0) { $_section' . $cnt . '[\'start\'] = max($_section' . $cnt . '[\'step\'] > 0 ? 0 : -1, $_section' . $cnt . '[\'loop\'] + $_section' . $cnt . '[\'start\']); } ' . "\n" . 'else { $_section' . $cnt . '[\'start\'] = min($_section' . $cnt . '[\'start\'], $_section' . $cnt . '[\'step\'] > 0 ? $_section' . $cnt . '[\'loop\'] : $_section' . $cnt . '[\'loop\'] -1); }' . "\n";
120
-        }
121
-
122
-        /*		if ($usesAny) {
31
+	public static $cnt = 0;
32
+
33
+	/**
34
+	 * @param      $name
35
+	 * @param      $loop
36
+	 * @param null $start
37
+	 * @param null $step
38
+	 * @param null $max
39
+	 * @param bool $show
40
+	 */
41
+	public function init($name, $loop, $start = null, $step = null, $max = null, $show = true)
42
+	{
43
+	}
44
+
45
+	/**
46
+	 * @param Compiler $compiler
47
+	 * @param array    $params
48
+	 * @param string   $prepend
49
+	 * @param string   $append
50
+	 * @param string   $type
51
+	 *
52
+	 * @return string
53
+	 */
54
+	public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
55
+	{
56
+		return '';
57
+	}
58
+
59
+	/**
60
+	 * @param Compiler $compiler
61
+	 * @param array    $params
62
+	 * @param string   $prepend
63
+	 * @param string   $append
64
+	 * @param string   $content
65
+	 *
66
+	 * @return string
67
+	 */
68
+	public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
69
+	{
70
+		$output = Compiler::PHP_OPEN;
71
+		$params = $compiler->getCompiledParams($params);
72
+
73
+		// assigns params
74
+		$loop  = $params['loop'];
75
+		$start = $params['start'];
76
+		$max   = $params['max'];
77
+		$name  = $params['name'];
78
+		$step  = $params['step'];
79
+		$show  = $params['show'];
80
+
81
+		// gets unique id
82
+		$cnt = self::$cnt ++;
83
+
84
+		$output .= '$this->globals[\'section\'][' . $name . '] = array();' . "\n" . '$_section' . $cnt . ' =& $this->globals[\'section\'][' . $name . '];' . "\n";
85
+
86
+		if ($loop !== 'null') {
87
+			$output .= '$_section' . $cnt . '[\'loop\'] = is_array($tmp = ' . $loop . ') ? count($tmp) : max(0, (int) $tmp);' . "\n";
88
+		} else {
89
+			$output .= '$_section' . $cnt . '[\'loop\'] = 1;' . "\n";
90
+		}
91
+
92
+		if ($show !== 'null') {
93
+			$output .= '$_section' . $cnt . '[\'show\'] = ' . $show . ";\n";
94
+		} else {
95
+			$output .= '$_section' . $cnt . '[\'show\'] = true;' . "\n";
96
+		}
97
+
98
+		if ($name !== 'null') {
99
+			$output .= '$_section' . $cnt . '[\'name\'] = ' . $name . ";\n";
100
+		} else {
101
+			$output .= '$_section' . $cnt . '[\'name\'] = true;' . "\n";
102
+		}
103
+
104
+		if ($max !== 'null') {
105
+			$output .= '$_section' . $cnt . '[\'max\'] = (int)' . $max . ";\n" . 'if($_section' . $cnt . '[\'max\'] < 0) { $_section' . $cnt . '[\'max\'] = $_section' . $cnt . '[\'loop\']; }' . "\n";
106
+		} else {
107
+			$output .= '$_section' . $cnt . '[\'max\'] = $_section' . $cnt . '[\'loop\'];' . "\n";
108
+		}
109
+
110
+		if ($step !== 'null') {
111
+			$output .= '$_section' . $cnt . '[\'step\'] = (int)' . $step . ' == 0 ? 1 : (int) ' . $step . ";\n";
112
+		} else {
113
+			$output .= '$_section' . $cnt . '[\'step\'] = 1;' . "\n";
114
+		}
115
+
116
+		if ($start !== 'null') {
117
+			$output .= '$_section' . $cnt . '[\'start\'] = (int)' . $start . ";\n";
118
+		} else {
119
+			$output .= '$_section' . $cnt . '[\'start\'] = $_section' . $cnt . '[\'step\'] > 0 ? 0 : $_section' . $cnt . '[\'loop\'] - 1;' . "\n" . 'if ($_section' . $cnt . '[\'start\'] < 0) { $_section' . $cnt . '[\'start\'] = max($_section' . $cnt . '[\'step\'] > 0 ? 0 : -1, $_section' . $cnt . '[\'loop\'] + $_section' . $cnt . '[\'start\']); } ' . "\n" . 'else { $_section' . $cnt . '[\'start\'] = min($_section' . $cnt . '[\'start\'], $_section' . $cnt . '[\'step\'] > 0 ? $_section' . $cnt . '[\'loop\'] : $_section' . $cnt . '[\'loop\'] -1); }' . "\n";
120
+		}
121
+
122
+		/*		if ($usesAny) {
123 123
                     $output .= "\n".'$this->globals["section"]['.$name.'] = array'."\n(";
124 124
                     if ($usesIndex) $output .="\n\t".'"index"		=> 0,';
125 125
                     if ($usesIteration) $output .="\n\t".'"iteration"		=> 1,';
@@ -131,29 +131,29 @@  discard block
 block discarded – undo
131 131
                 }
132 132
         */
133 133
 
134
-        $output .= 'if ($_section' . $cnt . '[\'show\']) {' . "\n";
135
-        if ($start === 'null' && $step === 'null' && $max === 'null') {
136
-            $output .= '	$_section' . $cnt . '[\'total\'] = $_section' . $cnt . '[\'loop\'];' . "\n";
137
-        } else {
138
-            $output .= '	$_section' . $cnt . '[\'total\'] = min(ceil(($_section' . $cnt . '[\'step\'] > 0 ? $_section' . $cnt . '[\'loop\'] - $_section' . $cnt . '[\'start\'] : $_section' . $cnt . '[\'start\'] + 1) / abs($_section' . $cnt . '[\'step\'])), $_section' . $cnt . '[\'max\']);' . "\n";
139
-        }
140
-        $output .= '	if ($_section' . $cnt . '[\'total\'] == 0) {' . "\n" . '		$_section' . $cnt . '[\'show\'] = false;' . "\n" . '	}' . "\n" . '} else {' . "\n" . '	$_section' . $cnt . '[\'total\'] = 0;' . "\n}\n";
141
-        $output .= 'if ($_section' . $cnt . '[\'show\']) {' . "\n";
142
-        $output .= "\t" . 'for ($this->scope[' . $name . '] = $_section' . $cnt . '[\'start\'], $_section' . $cnt . '[\'iteration\'] = 1; ' . '$_section' . $cnt . '[\'iteration\'] <= $_section' . $cnt . '[\'total\']; ' . '$this->scope[' . $name . '] += $_section' . $cnt . '[\'step\'], $_section' . $cnt . '[\'iteration\']++) {' . "\n";
143
-        $output .= "\t\t" . '$_section' . $cnt . '[\'rownum\'] = $_section' . $cnt . '[\'iteration\'];' . "\n";
144
-        $output .= "\t\t" . '$_section' . $cnt . '[\'index_prev\'] = $this->scope[' . $name . '] - $_section' . $cnt . '[\'step\'];' . "\n";
145
-        $output .= "\t\t" . '$_section' . $cnt . '[\'index_next\'] = $this->scope[' . $name . '] + $_section' . $cnt . '[\'step\'];' . "\n";
146
-        $output .= "\t\t" . '$_section' . $cnt . '[\'first\']      = ($_section' . $cnt . '[\'iteration\'] == 1);' . "\n";
147
-        $output .= "\t\t" . '$_section' . $cnt . '[\'last\']       = ($_section' . $cnt . '[\'iteration\'] == $_section' . $cnt . '[\'total\']);' . "\n";
148
-
149
-        $output .= Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN;
150
-
151
-        $output .= "\n\t}\n} " . Compiler::PHP_CLOSE;
152
-
153
-        if (isset($params['hasElse'])) {
154
-            $output .= $params['hasElse'];
155
-        }
156
-
157
-        return $output;
158
-    }
134
+		$output .= 'if ($_section' . $cnt . '[\'show\']) {' . "\n";
135
+		if ($start === 'null' && $step === 'null' && $max === 'null') {
136
+			$output .= '	$_section' . $cnt . '[\'total\'] = $_section' . $cnt . '[\'loop\'];' . "\n";
137
+		} else {
138
+			$output .= '	$_section' . $cnt . '[\'total\'] = min(ceil(($_section' . $cnt . '[\'step\'] > 0 ? $_section' . $cnt . '[\'loop\'] - $_section' . $cnt . '[\'start\'] : $_section' . $cnt . '[\'start\'] + 1) / abs($_section' . $cnt . '[\'step\'])), $_section' . $cnt . '[\'max\']);' . "\n";
139
+		}
140
+		$output .= '	if ($_section' . $cnt . '[\'total\'] == 0) {' . "\n" . '		$_section' . $cnt . '[\'show\'] = false;' . "\n" . '	}' . "\n" . '} else {' . "\n" . '	$_section' . $cnt . '[\'total\'] = 0;' . "\n}\n";
141
+		$output .= 'if ($_section' . $cnt . '[\'show\']) {' . "\n";
142
+		$output .= "\t" . 'for ($this->scope[' . $name . '] = $_section' . $cnt . '[\'start\'], $_section' . $cnt . '[\'iteration\'] = 1; ' . '$_section' . $cnt . '[\'iteration\'] <= $_section' . $cnt . '[\'total\']; ' . '$this->scope[' . $name . '] += $_section' . $cnt . '[\'step\'], $_section' . $cnt . '[\'iteration\']++) {' . "\n";
143
+		$output .= "\t\t" . '$_section' . $cnt . '[\'rownum\'] = $_section' . $cnt . '[\'iteration\'];' . "\n";
144
+		$output .= "\t\t" . '$_section' . $cnt . '[\'index_prev\'] = $this->scope[' . $name . '] - $_section' . $cnt . '[\'step\'];' . "\n";
145
+		$output .= "\t\t" . '$_section' . $cnt . '[\'index_next\'] = $this->scope[' . $name . '] + $_section' . $cnt . '[\'step\'];' . "\n";
146
+		$output .= "\t\t" . '$_section' . $cnt . '[\'first\']      = ($_section' . $cnt . '[\'iteration\'] == 1);' . "\n";
147
+		$output .= "\t\t" . '$_section' . $cnt . '[\'last\']       = ($_section' . $cnt . '[\'iteration\'] == $_section' . $cnt . '[\'total\']);' . "\n";
148
+
149
+		$output .= Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN;
150
+
151
+		$output .= "\n\t}\n} " . Compiler::PHP_CLOSE;
152
+
153
+		if (isset($params['hasElse'])) {
154
+			$output .= $params['hasElse'];
155
+		}
156
+
157
+		return $output;
158
+	}
159 159
 }
Please login to merge, or discard this patch.
lib/Dwoo/Plugins/Blocks/PluginFor.php 1 patch
Indentation   +146 added lines, -146 removed lines patch added patch discarded remove patch
@@ -35,158 +35,158 @@
 block discarded – undo
35 35
  */
36 36
 class PluginFor extends BlockPlugin implements ICompilableBlock, IElseable
37 37
 {
38
-    public static $cnt = 0;
39
-
40
-    /**
41
-     * @param      $name
42
-     * @param      $from
43
-     * @param null $to
44
-     * @param int  $step
45
-     * @param int  $skip
46
-     */
47
-    public function init($name, $from, $to = null, $step = 1, $skip = 0)
48
-    {
49
-    }
50
-
51
-    /**
52
-     * @param Compiler $compiler
53
-     * @param array    $params
54
-     * @param string   $prepend
55
-     * @param string   $append
56
-     * @param string   $type
57
-     *
58
-     * @return string
59
-     */
60
-    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
61
-    {
62
-        // get block params and save the current template pointer to use it in the postProcessing method
63
-        $currentBlock                         = &$compiler->getCurrentBlock();
64
-        $currentBlock['params']['tplPointer'] = $compiler->getPointer();
65
-
66
-        return '';
67
-    }
68
-
69
-    /**
70
-     * @param Compiler $compiler
71
-     * @param array    $params
72
-     * @param string   $prepend
73
-     * @param string   $append
74
-     * @param string   $content
75
-     *
76
-     * @return string
77
-     */
78
-    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
79
-    {
80
-        $params = $compiler->getCompiledParams($params);
81
-        $tpl    = $compiler->getTemplateSource($params['tplPointer']);
82
-
83
-        // assigns params
84
-        $from = $params['from'];
85
-        $name = $params['name'];
86
-        $step = $params['step'];
87
-        $to   = $params['to'];
88
-
89
-        // evaluates which global variables have to be computed
90
-        $varName       = '$dwoo.for.' . trim($name, '"\'') . '.';
91
-        $shortVarName  = '$.for.' . trim($name, '"\'') . '.';
92
-        $usesAny       = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
93
-        $usesFirst     = strpos($tpl, $varName . 'first') !== false || strpos($tpl, $shortVarName . 'first') !== false;
94
-        $usesLast      = strpos($tpl, $varName . 'last') !== false || strpos($tpl, $shortVarName . 'last') !== false;
95
-        $usesIndex     = strpos($tpl, $varName . 'index') !== false || strpos($tpl, $shortVarName . 'index') !== false;
96
-        $usesIteration = $usesFirst || $usesLast || strpos($tpl, $varName . 'iteration') !== false || strpos($tpl, $shortVarName . 'iteration') !== false;
97
-        $usesShow      = strpos($tpl, $varName . 'show') !== false || strpos($tpl, $shortVarName . 'show') !== false;
98
-        $usesTotal     = $usesLast || strpos($tpl, $varName . 'total') !== false || strpos($tpl, $shortVarName . 'total') !== false;
99
-
100
-        if (strpos($name, '$this->scope[') !== false) {
101
-            $usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
102
-        }
103
-
104
-        // gets foreach id
105
-        $cnt = self::$cnt ++;
106
-
107
-        // builds pre processing output for
108
-        $out = Compiler::PHP_OPEN . "\n" . '$_for' . $cnt . '_from = ' . $from . ';' . "\n" . '$_for' . $cnt . '_to = ' . $to . ';' . "\n" . '$_for' . $cnt . '_step = abs(' . $step . ');' . "\n" . 'if (is_numeric($_for' . $cnt . '_from) && !is_numeric($_for' . $cnt . '_to)) { $this->triggerError(\'For requires the <em>to</em> parameter when using a numerical <em>from</em>\'); }' . "\n" . '$tmp_shows = $this->isArray($_for' . $cnt . '_from, true) || (is_numeric($_for' . $cnt . '_from) && (abs(($_for' . $cnt . '_from - $_for' . $cnt . '_to)/$_for' . $cnt . '_step) !== 0 || $_for' . $cnt . '_from == $_for' . $cnt . '_to));';
109
-        // adds for properties
110
-        if ($usesAny) {
111
-            $out .= "\n" . '$this->globals["for"][' . $name . '] = array' . "\n(";
112
-            if ($usesIndex) {
113
-                $out .= "\n\t" . '"index"		=> 0,';
114
-            }
115
-            if ($usesIteration) {
116
-                $out .= "\n\t" . '"iteration"		=> 1,';
117
-            }
118
-            if ($usesFirst) {
119
-                $out .= "\n\t" . '"first"		=> null,';
120
-            }
121
-            if ($usesLast) {
122
-                $out .= "\n\t" . '"last"		=> null,';
123
-            }
124
-            if ($usesShow) {
125
-                $out .= "\n\t" . '"show"		=> $tmp_shows,';
126
-            }
127
-            if ($usesTotal) {
128
-                $out .= "\n\t" . '"total"		=> $this->isArray($_for' . $cnt . '_from) ? floor($this->count($_for' . $cnt . '_from) / $_for' . $cnt . '_step) : (is_numeric($_for' . $cnt . '_from) ? abs(($_for' . $cnt . '_to + 1 - $_for' . $cnt . '_from)/$_for' . $cnt . '_step) : 0),';
129
-            }
130
-            $out .= "\n);\n" . '$_for' . $cnt . '_glob =& $this->globals["for"][' . $name . '];';
131
-        }
132
-        // checks if for must be looped
133
-        $out .= "\n" . 'if ($tmp_shows)' . "\n{";
134
-        // set from/to to correct values if an array was given
135
-        $out .= "\n\t" . 'if ($this->isArray($_for' . $cnt . '_from' . (isset($params['hasElse']) ? ', true' : '') . ') == true) {
38
+	public static $cnt = 0;
39
+
40
+	/**
41
+	 * @param      $name
42
+	 * @param      $from
43
+	 * @param null $to
44
+	 * @param int  $step
45
+	 * @param int  $skip
46
+	 */
47
+	public function init($name, $from, $to = null, $step = 1, $skip = 0)
48
+	{
49
+	}
50
+
51
+	/**
52
+	 * @param Compiler $compiler
53
+	 * @param array    $params
54
+	 * @param string   $prepend
55
+	 * @param string   $append
56
+	 * @param string   $type
57
+	 *
58
+	 * @return string
59
+	 */
60
+	public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
61
+	{
62
+		// get block params and save the current template pointer to use it in the postProcessing method
63
+		$currentBlock                         = &$compiler->getCurrentBlock();
64
+		$currentBlock['params']['tplPointer'] = $compiler->getPointer();
65
+
66
+		return '';
67
+	}
68
+
69
+	/**
70
+	 * @param Compiler $compiler
71
+	 * @param array    $params
72
+	 * @param string   $prepend
73
+	 * @param string   $append
74
+	 * @param string   $content
75
+	 *
76
+	 * @return string
77
+	 */
78
+	public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
79
+	{
80
+		$params = $compiler->getCompiledParams($params);
81
+		$tpl    = $compiler->getTemplateSource($params['tplPointer']);
82
+
83
+		// assigns params
84
+		$from = $params['from'];
85
+		$name = $params['name'];
86
+		$step = $params['step'];
87
+		$to   = $params['to'];
88
+
89
+		// evaluates which global variables have to be computed
90
+		$varName       = '$dwoo.for.' . trim($name, '"\'') . '.';
91
+		$shortVarName  = '$.for.' . trim($name, '"\'') . '.';
92
+		$usesAny       = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
93
+		$usesFirst     = strpos($tpl, $varName . 'first') !== false || strpos($tpl, $shortVarName . 'first') !== false;
94
+		$usesLast      = strpos($tpl, $varName . 'last') !== false || strpos($tpl, $shortVarName . 'last') !== false;
95
+		$usesIndex     = strpos($tpl, $varName . 'index') !== false || strpos($tpl, $shortVarName . 'index') !== false;
96
+		$usesIteration = $usesFirst || $usesLast || strpos($tpl, $varName . 'iteration') !== false || strpos($tpl, $shortVarName . 'iteration') !== false;
97
+		$usesShow      = strpos($tpl, $varName . 'show') !== false || strpos($tpl, $shortVarName . 'show') !== false;
98
+		$usesTotal     = $usesLast || strpos($tpl, $varName . 'total') !== false || strpos($tpl, $shortVarName . 'total') !== false;
99
+
100
+		if (strpos($name, '$this->scope[') !== false) {
101
+			$usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
102
+		}
103
+
104
+		// gets foreach id
105
+		$cnt = self::$cnt ++;
106
+
107
+		// builds pre processing output for
108
+		$out = Compiler::PHP_OPEN . "\n" . '$_for' . $cnt . '_from = ' . $from . ';' . "\n" . '$_for' . $cnt . '_to = ' . $to . ';' . "\n" . '$_for' . $cnt . '_step = abs(' . $step . ');' . "\n" . 'if (is_numeric($_for' . $cnt . '_from) && !is_numeric($_for' . $cnt . '_to)) { $this->triggerError(\'For requires the <em>to</em> parameter when using a numerical <em>from</em>\'); }' . "\n" . '$tmp_shows = $this->isArray($_for' . $cnt . '_from, true) || (is_numeric($_for' . $cnt . '_from) && (abs(($_for' . $cnt . '_from - $_for' . $cnt . '_to)/$_for' . $cnt . '_step) !== 0 || $_for' . $cnt . '_from == $_for' . $cnt . '_to));';
109
+		// adds for properties
110
+		if ($usesAny) {
111
+			$out .= "\n" . '$this->globals["for"][' . $name . '] = array' . "\n(";
112
+			if ($usesIndex) {
113
+				$out .= "\n\t" . '"index"		=> 0,';
114
+			}
115
+			if ($usesIteration) {
116
+				$out .= "\n\t" . '"iteration"		=> 1,';
117
+			}
118
+			if ($usesFirst) {
119
+				$out .= "\n\t" . '"first"		=> null,';
120
+			}
121
+			if ($usesLast) {
122
+				$out .= "\n\t" . '"last"		=> null,';
123
+			}
124
+			if ($usesShow) {
125
+				$out .= "\n\t" . '"show"		=> $tmp_shows,';
126
+			}
127
+			if ($usesTotal) {
128
+				$out .= "\n\t" . '"total"		=> $this->isArray($_for' . $cnt . '_from) ? floor($this->count($_for' . $cnt . '_from) / $_for' . $cnt . '_step) : (is_numeric($_for' . $cnt . '_from) ? abs(($_for' . $cnt . '_to + 1 - $_for' . $cnt . '_from)/$_for' . $cnt . '_step) : 0),';
129
+			}
130
+			$out .= "\n);\n" . '$_for' . $cnt . '_glob =& $this->globals["for"][' . $name . '];';
131
+		}
132
+		// checks if for must be looped
133
+		$out .= "\n" . 'if ($tmp_shows)' . "\n{";
134
+		// set from/to to correct values if an array was given
135
+		$out .= "\n\t" . 'if ($this->isArray($_for' . $cnt . '_from' . (isset($params['hasElse']) ? ', true' : '') . ') == true) {
136 136
 		$_for' . $cnt . '_to = is_numeric($_for' . $cnt . '_to) ? $_for' . $cnt . '_to - $_for' . $cnt . '_step : $this->count($_for' . $cnt . '_from) - 1;
137 137
 		$_for' . $cnt . '_from = 0;
138 138
 	}';
139 139
 
140
-        // if input are pure numbers it shouldn't reorder them, if it's variables it gets too messy though so in that case a counter should be used
141
-        $reverse     = false;
142
-        $condition   = '<=';
143
-        $incrementer = '+';
144
-
145
-        if (preg_match('{^(["\']?)([0-9]+)\1$}', $from, $mN1) && preg_match('{^(["\']?)([0-9]+)\1$}', $to, $mN2)) {
146
-            $from = (int)$mN1[2];
147
-            $to   = (int)$mN2[2];
148
-            if ($from > $to) {
149
-                $reverse     = true;
150
-                $condition   = '>=';
151
-                $incrementer = '-';
152
-            }
153
-        }
154
-
155
-        // reverse from and to if needed
156
-        if (!$reverse) {
157
-            $out .= "\n\t" . 'if ($_for' . $cnt . '_from > $_for' . $cnt . '_to) {
140
+		// if input are pure numbers it shouldn't reorder them, if it's variables it gets too messy though so in that case a counter should be used
141
+		$reverse     = false;
142
+		$condition   = '<=';
143
+		$incrementer = '+';
144
+
145
+		if (preg_match('{^(["\']?)([0-9]+)\1$}', $from, $mN1) && preg_match('{^(["\']?)([0-9]+)\1$}', $to, $mN2)) {
146
+			$from = (int)$mN1[2];
147
+			$to   = (int)$mN2[2];
148
+			if ($from > $to) {
149
+				$reverse     = true;
150
+				$condition   = '>=';
151
+				$incrementer = '-';
152
+			}
153
+		}
154
+
155
+		// reverse from and to if needed
156
+		if (!$reverse) {
157
+			$out .= "\n\t" . 'if ($_for' . $cnt . '_from > $_for' . $cnt . '_to) {
158 158
 				$tmp = $_for' . $cnt . '_from;
159 159
 				$_for' . $cnt . '_from = $_for' . $cnt . '_to;
160 160
 				$_for' . $cnt . '_to = $tmp;
161 161
 			}';
162
-        }
163
-
164
-        $out .= "\n\t" . 'for ($this->scope[' . $name . '] = $_for' . $cnt . '_from; $this->scope[' . $name . '] ' . $condition . ' $_for' . $cnt . '_to; $this->scope[' . $name . '] ' . $incrementer . '= $_for' . $cnt . '_step)' . "\n\t{";
165
-        // updates properties
166
-        if ($usesIndex) {
167
-            $out .= "\n\t\t" . '$_for' . $cnt . '_glob["index"] = $this->scope[' . $name . '];';
168
-        }
169
-        if ($usesFirst) {
170
-            $out .= "\n\t\t" . '$_for' . $cnt . '_glob["first"] = (string) ($_for' . $cnt . '_glob["iteration"] === 1);';
171
-        }
172
-        if ($usesLast) {
173
-            $out .= "\n\t\t" . '$_for' . $cnt . '_glob["last"] = (string) ($_for' . $cnt . '_glob["iteration"] === $_for' . $cnt . '_glob["total"]);';
174
-        }
175
-        $out .= "\n/* -- for start output */\n" . Compiler::PHP_CLOSE;
176
-
177
-        // build post processing output and cache it
178
-        $postOut = Compiler::PHP_OPEN . '/* -- for end output */';
179
-        // update properties
180
-        if ($usesIteration) {
181
-            $postOut .= "\n\t\t" . '$_for' . $cnt . '_glob["iteration"]+=1;';
182
-        }
183
-        // end loop
184
-        $postOut .= "\n\t}\n}\n" . Compiler::PHP_CLOSE;
185
-
186
-        if (isset($params['hasElse'])) {
187
-            $postOut .= $params['hasElse'];
188
-        }
189
-
190
-        return $out . $content . $postOut;
191
-    }
162
+		}
163
+
164
+		$out .= "\n\t" . 'for ($this->scope[' . $name . '] = $_for' . $cnt . '_from; $this->scope[' . $name . '] ' . $condition . ' $_for' . $cnt . '_to; $this->scope[' . $name . '] ' . $incrementer . '= $_for' . $cnt . '_step)' . "\n\t{";
165
+		// updates properties
166
+		if ($usesIndex) {
167
+			$out .= "\n\t\t" . '$_for' . $cnt . '_glob["index"] = $this->scope[' . $name . '];';
168
+		}
169
+		if ($usesFirst) {
170
+			$out .= "\n\t\t" . '$_for' . $cnt . '_glob["first"] = (string) ($_for' . $cnt . '_glob["iteration"] === 1);';
171
+		}
172
+		if ($usesLast) {
173
+			$out .= "\n\t\t" . '$_for' . $cnt . '_glob["last"] = (string) ($_for' . $cnt . '_glob["iteration"] === $_for' . $cnt . '_glob["total"]);';
174
+		}
175
+		$out .= "\n/* -- for start output */\n" . Compiler::PHP_CLOSE;
176
+
177
+		// build post processing output and cache it
178
+		$postOut = Compiler::PHP_OPEN . '/* -- for end output */';
179
+		// update properties
180
+		if ($usesIteration) {
181
+			$postOut .= "\n\t\t" . '$_for' . $cnt . '_glob["iteration"]+=1;';
182
+		}
183
+		// end loop
184
+		$postOut .= "\n\t}\n}\n" . Compiler::PHP_CLOSE;
185
+
186
+		if (isset($params['hasElse'])) {
187
+			$postOut .= $params['hasElse'];
188
+		}
189
+
190
+		return $out . $content . $postOut;
191
+	}
192 192
 }
Please login to merge, or discard this patch.
lib/Dwoo/Plugins/Blocks/PluginTopLevelBlock.php 1 patch
Indentation   +29 added lines, -29 removed lines patch added patch discarded remove patch
@@ -26,35 +26,35 @@
 block discarded – undo
26 26
  */
27 27
 final class PluginTopLevelBlock extends BlockPlugin implements ICompilableBlock
28 28
 {
29
-    public function init()
30
-    {
31
-    }
29
+	public function init()
30
+	{
31
+	}
32 32
 
33
-    /**
34
-     * @param Compiler $compiler
35
-     * @param array    $params
36
-     * @param string   $prepend
37
-     * @param string   $append
38
-     * @param string   $type
39
-     *
40
-     * @return string
41
-     */
42
-    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
43
-    {
44
-        return '/* end template head */ ob_start(); /* template body */ ' . Compiler::PHP_CLOSE;
45
-    }
33
+	/**
34
+	 * @param Compiler $compiler
35
+	 * @param array    $params
36
+	 * @param string   $prepend
37
+	 * @param string   $append
38
+	 * @param string   $type
39
+	 *
40
+	 * @return string
41
+	 */
42
+	public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
43
+	{
44
+		return '/* end template head */ ob_start(); /* template body */ ' . Compiler::PHP_CLOSE;
45
+	}
46 46
 
47
-    /**
48
-     * @param Compiler $compiler
49
-     * @param array    $params
50
-     * @param string   $prepend
51
-     * @param string   $append
52
-     * @param string   $content
53
-     *
54
-     * @return string
55
-     */
56
-    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
57
-    {
58
-        return $content . Compiler::PHP_OPEN . ' /* end template body */' . "\n" . 'return $this->buffer . ob_get_clean();';
59
-    }
47
+	/**
48
+	 * @param Compiler $compiler
49
+	 * @param array    $params
50
+	 * @param string   $prepend
51
+	 * @param string   $append
52
+	 * @param string   $content
53
+	 *
54
+	 * @return string
55
+	 */
56
+	public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
57
+	{
58
+		return $content . Compiler::PHP_OPEN . ' /* end template body */' . "\n" . 'return $this->buffer . ob_get_clean();';
59
+	}
60 60
 }
Please login to merge, or discard this patch.
lib/Dwoo/Plugins/Filters/PluginHtmlFormat.php 1 patch
Indentation   +157 added lines, -157 removed lines patch added patch discarded remove patch
@@ -30,161 +30,161 @@
 block discarded – undo
30 30
  */
31 31
 class PluginHtmlFormat extends Filter
32 32
 {
33
-    /**
34
-     * tab count to auto-indent the source.
35
-     *
36
-     * @var int
37
-     */
38
-    protected static $tabCount = - 1;
39
-
40
-    /**
41
-     * stores the additional data (following a tag) of the last call to open/close/singleTag.
42
-     *
43
-     * @var string
44
-     */
45
-    protected static $lastCallAdd = '';
46
-
47
-    /**
48
-     * formats the input using the singleTag/closeTag/openTag functions.
49
-     * It is auto indenting the whole code, excluding <textarea>, <code> and <pre> tags that must be kept intact.
50
-     * Those tags must however contain only htmlentities-escaped text for everything to work properly.
51
-     * Inline tags are presented on a single line with their content
52
-     *
53
-     * @param string $input the xhtml to format
54
-     *
55
-     * @return string formatted xhtml
56
-     */
57
-    public function process($input)
58
-    {
59
-        self::$tabCount = - 1;
60
-
61
-        // auto indent all but textareas & pre (or we have weird tabs inside)
62
-        $input = preg_replace_callback("#(<[^>]+>)(\s*)([^<]*)#", array(
63
-            'self',
64
-            'tagDispatcher'
65
-        ), $input);
66
-
67
-        return $input;
68
-    }
69
-
70
-    /**
71
-     * helper function for format()'s preg_replace call.
72
-     *
73
-     * @param array $input array of matches (1=>tag, 2=>whitespace(optional), 3=>additional non-html content)
74
-     *
75
-     * @return string the indented tag
76
-     */
77
-    protected static function tagDispatcher($input)
78
-    {
79
-        // textarea, pre, code tags and comments are to be left alone to avoid any non-wanted whitespace inside them so it just outputs them as they were
80
-        if (substr($input[1], 0, 9) == '<textarea' || substr($input[1], 0, 4) == '<pre' || substr($input[1], 0, 5) == '<code' || substr($input[1], 0, 4) == '<!--' || substr($input[1], 0, 9) == '<![CDATA[') {
81
-            return $input[1] . $input[3];
82
-        }
83
-        // closing textarea, code and pre tags and self-closed tags (i.e. <br />) are printed as singleTags because we didn't use openTag for the formers and the latter is a single tag
84
-        if (substr($input[1], 0, 10) == '</textarea' || substr($input[1], 0, 5) == '</pre' || substr($input[1], 0, 6) == '</code' || substr($input[1], - 2) == '/>') {
85
-            return self::singleTag($input[1], $input[3], $input[2]);
86
-        }
87
-        // it's the closing tag
88
-        if ($input[0][1] == '/') {
89
-            return self::closeTag($input[1], $input[3], $input[2]);
90
-        }
91
-
92
-        // opening tag
93
-        return self::openTag($input[1], $input[3], $input[2]);
94
-    }
95
-
96
-    /**
97
-     * returns an open tag and adds a tab into the auto indenting.
98
-     *
99
-     * @param string $tag        content of the tag
100
-     * @param string $add        additional data (anything before the following tag)
101
-     * @param string $whitespace white space between the tag and the additional data
102
-     *
103
-     * @return string
104
-     */
105
-    protected static function openTag($tag, $add, $whitespace)
106
-    {
107
-        $tabs = str_pad('', self::$tabCount ++, "\t");
108
-
109
-        if (preg_match('#^<(a|label|option|textarea|h1|h2|h3|h4|h5|h6|strong|b|em|i|abbr|acronym|cite|span|sub|sup|u|s|title)(?: [^>]*|)>#', $tag)) {
110
-            // if it's one of those tag it's inline so it does not require a leading line break
111
-            $result = $tag . $whitespace . str_replace("\n", "\n" . $tabs, $add);
112
-        } elseif (substr($tag, 0, 9) == '<!DOCTYPE') {
113
-            // it's the doctype declaration so no line break here either
114
-            $result = $tabs . $tag;
115
-        } else {
116
-            // normal block tag
117
-            $result = "\n" . $tabs . $tag;
118
-
119
-            if (!empty($add)) {
120
-                $result .= "\n" . $tabs . "\t" . str_replace("\n", "\n\t" . $tabs, $add);
121
-            }
122
-        }
123
-
124
-        self::$lastCallAdd = $add;
125
-
126
-        return $result;
127
-    }
128
-
129
-    /**
130
-     * returns a closing tag and removes a tab from the auto indenting.
131
-     *
132
-     * @param string $tag        content of the tag
133
-     * @param string $add        additional data (anything before the following tag)
134
-     * @param string $whitespace white space between the tag and the additional data
135
-     *
136
-     * @return string
137
-     */
138
-    protected static function closeTag($tag, $add, $whitespace)
139
-    {
140
-        $tabs = str_pad('', -- self::$tabCount, "\t");
141
-
142
-        // if it's one of those tag it's inline so it does not require a leading line break
143
-        if (preg_match('#^</(a|label|option|textarea|h1|h2|h3|h4|h5|h6|strong|b|em|i|abbr|acronym|cite|span|sub|sup|u|s|title)>#', $tag)) {
144
-            $result = $tag . $whitespace . str_replace("\n", "\n" . $tabs, $add);
145
-        } else {
146
-            $result = "\n" . $tabs . $tag;
147
-
148
-            if (!empty($add)) {
149
-                $result .= "\n" . $tabs . "\t" . str_replace("\n", "\n\t" . $tabs, $add);
150
-            }
151
-        }
152
-
153
-        self::$lastCallAdd = $add;
154
-
155
-        return $result;
156
-    }
157
-
158
-    /**
159
-     * returns a single tag with auto indenting.
160
-     *
161
-     * @param string $tag content of the tag
162
-     * @param string $add additional data (anything before the following tag)
163
-     *
164
-     * @return string
165
-     */
166
-    protected static function singleTag($tag, $add, $whitespace)
167
-    {
168
-        $tabs = str_pad('', self::$tabCount, "\t");
169
-
170
-        // if it's img, br it's inline so it does not require a leading line break
171
-        // if it's a closing textarea, code or pre tag, it does not require a leading line break either or it creates whitespace at the end of those blocks
172
-        if (preg_match('#^<(img|br|/textarea|/pre|/code)(?: [^>]*|)>#', $tag)) {
173
-            $result = $tag . $whitespace;
174
-
175
-            if (!empty($add)) {
176
-                $result .= str_replace("\n", "\n" . $tabs, $add);
177
-            }
178
-        } else {
179
-            $result = "\n" . $tabs . $tag;
180
-
181
-            if (!empty($add)) {
182
-                $result .= "\n" . $tabs . str_replace("\n", "\n" . $tabs, $add);
183
-            }
184
-        }
185
-
186
-        self::$lastCallAdd = $add;
187
-
188
-        return $result;
189
-    }
33
+	/**
34
+	 * tab count to auto-indent the source.
35
+	 *
36
+	 * @var int
37
+	 */
38
+	protected static $tabCount = - 1;
39
+
40
+	/**
41
+	 * stores the additional data (following a tag) of the last call to open/close/singleTag.
42
+	 *
43
+	 * @var string
44
+	 */
45
+	protected static $lastCallAdd = '';
46
+
47
+	/**
48
+	 * formats the input using the singleTag/closeTag/openTag functions.
49
+	 * It is auto indenting the whole code, excluding <textarea>, <code> and <pre> tags that must be kept intact.
50
+	 * Those tags must however contain only htmlentities-escaped text for everything to work properly.
51
+	 * Inline tags are presented on a single line with their content
52
+	 *
53
+	 * @param string $input the xhtml to format
54
+	 *
55
+	 * @return string formatted xhtml
56
+	 */
57
+	public function process($input)
58
+	{
59
+		self::$tabCount = - 1;
60
+
61
+		// auto indent all but textareas & pre (or we have weird tabs inside)
62
+		$input = preg_replace_callback("#(<[^>]+>)(\s*)([^<]*)#", array(
63
+			'self',
64
+			'tagDispatcher'
65
+		), $input);
66
+
67
+		return $input;
68
+	}
69
+
70
+	/**
71
+	 * helper function for format()'s preg_replace call.
72
+	 *
73
+	 * @param array $input array of matches (1=>tag, 2=>whitespace(optional), 3=>additional non-html content)
74
+	 *
75
+	 * @return string the indented tag
76
+	 */
77
+	protected static function tagDispatcher($input)
78
+	{
79
+		// textarea, pre, code tags and comments are to be left alone to avoid any non-wanted whitespace inside them so it just outputs them as they were
80
+		if (substr($input[1], 0, 9) == '<textarea' || substr($input[1], 0, 4) == '<pre' || substr($input[1], 0, 5) == '<code' || substr($input[1], 0, 4) == '<!--' || substr($input[1], 0, 9) == '<![CDATA[') {
81
+			return $input[1] . $input[3];
82
+		}
83
+		// closing textarea, code and pre tags and self-closed tags (i.e. <br />) are printed as singleTags because we didn't use openTag for the formers and the latter is a single tag
84
+		if (substr($input[1], 0, 10) == '</textarea' || substr($input[1], 0, 5) == '</pre' || substr($input[1], 0, 6) == '</code' || substr($input[1], - 2) == '/>') {
85
+			return self::singleTag($input[1], $input[3], $input[2]);
86
+		}
87
+		// it's the closing tag
88
+		if ($input[0][1] == '/') {
89
+			return self::closeTag($input[1], $input[3], $input[2]);
90
+		}
91
+
92
+		// opening tag
93
+		return self::openTag($input[1], $input[3], $input[2]);
94
+	}
95
+
96
+	/**
97
+	 * returns an open tag and adds a tab into the auto indenting.
98
+	 *
99
+	 * @param string $tag        content of the tag
100
+	 * @param string $add        additional data (anything before the following tag)
101
+	 * @param string $whitespace white space between the tag and the additional data
102
+	 *
103
+	 * @return string
104
+	 */
105
+	protected static function openTag($tag, $add, $whitespace)
106
+	{
107
+		$tabs = str_pad('', self::$tabCount ++, "\t");
108
+
109
+		if (preg_match('#^<(a|label|option|textarea|h1|h2|h3|h4|h5|h6|strong|b|em|i|abbr|acronym|cite|span|sub|sup|u|s|title)(?: [^>]*|)>#', $tag)) {
110
+			// if it's one of those tag it's inline so it does not require a leading line break
111
+			$result = $tag . $whitespace . str_replace("\n", "\n" . $tabs, $add);
112
+		} elseif (substr($tag, 0, 9) == '<!DOCTYPE') {
113
+			// it's the doctype declaration so no line break here either
114
+			$result = $tabs . $tag;
115
+		} else {
116
+			// normal block tag
117
+			$result = "\n" . $tabs . $tag;
118
+
119
+			if (!empty($add)) {
120
+				$result .= "\n" . $tabs . "\t" . str_replace("\n", "\n\t" . $tabs, $add);
121
+			}
122
+		}
123
+
124
+		self::$lastCallAdd = $add;
125
+
126
+		return $result;
127
+	}
128
+
129
+	/**
130
+	 * returns a closing tag and removes a tab from the auto indenting.
131
+	 *
132
+	 * @param string $tag        content of the tag
133
+	 * @param string $add        additional data (anything before the following tag)
134
+	 * @param string $whitespace white space between the tag and the additional data
135
+	 *
136
+	 * @return string
137
+	 */
138
+	protected static function closeTag($tag, $add, $whitespace)
139
+	{
140
+		$tabs = str_pad('', -- self::$tabCount, "\t");
141
+
142
+		// if it's one of those tag it's inline so it does not require a leading line break
143
+		if (preg_match('#^</(a|label|option|textarea|h1|h2|h3|h4|h5|h6|strong|b|em|i|abbr|acronym|cite|span|sub|sup|u|s|title)>#', $tag)) {
144
+			$result = $tag . $whitespace . str_replace("\n", "\n" . $tabs, $add);
145
+		} else {
146
+			$result = "\n" . $tabs . $tag;
147
+
148
+			if (!empty($add)) {
149
+				$result .= "\n" . $tabs . "\t" . str_replace("\n", "\n\t" . $tabs, $add);
150
+			}
151
+		}
152
+
153
+		self::$lastCallAdd = $add;
154
+
155
+		return $result;
156
+	}
157
+
158
+	/**
159
+	 * returns a single tag with auto indenting.
160
+	 *
161
+	 * @param string $tag content of the tag
162
+	 * @param string $add additional data (anything before the following tag)
163
+	 *
164
+	 * @return string
165
+	 */
166
+	protected static function singleTag($tag, $add, $whitespace)
167
+	{
168
+		$tabs = str_pad('', self::$tabCount, "\t");
169
+
170
+		// if it's img, br it's inline so it does not require a leading line break
171
+		// if it's a closing textarea, code or pre tag, it does not require a leading line break either or it creates whitespace at the end of those blocks
172
+		if (preg_match('#^<(img|br|/textarea|/pre|/code)(?: [^>]*|)>#', $tag)) {
173
+			$result = $tag . $whitespace;
174
+
175
+			if (!empty($add)) {
176
+				$result .= str_replace("\n", "\n" . $tabs, $add);
177
+			}
178
+		} else {
179
+			$result = "\n" . $tabs . $tag;
180
+
181
+			if (!empty($add)) {
182
+				$result .= "\n" . $tabs . str_replace("\n", "\n" . $tabs, $add);
183
+			}
184
+		}
185
+
186
+		self::$lastCallAdd = $add;
187
+
188
+		return $result;
189
+	}
190 190
 }
Please login to merge, or discard this patch.