Rename internal list and add useful comment

This commit is contained in:
Kijin Sung 2023-10-18 21:19:04 +09:00
parent 3c401bbc20
commit 325c2c2b13

View file

@ -35,12 +35,16 @@ class TemplateParser_v2
/** /**
* Definitions of loop and condition directives. * Definitions of loop and condition directives.
* *
* This is not the exhaustive list of Blade-style directives
* supported by TemplateParser v2. Other directives may be handled
* by individual conversion methods, such as _convertIncludes().
*
* %s : Full PHP code passed to the directive in parentheses. * %s : Full PHP code passed to the directive in parentheses.
* %array : The array used in a foreach/forelse loop. * %array : The array used in a foreach/forelse loop.
* %remainder : The remainder of the foreach/forelse loop ($key => $val) * %remainder : The remainder of the foreach/forelse loop ($key => $val)
* %uniq : A random string that identifies a specific loop or condition. * %uniq : A random string that identifies a specific loop or condition.
*/ */
protected static $_loopdef = [ protected static $_directives = [
'if' => ['if (%s):', 'endif;'], 'if' => ['if (%s):', 'endif;'],
'unless' => ['if (!(%s)):', 'endif;'], 'unless' => ['if (!(%s)):', 'endif;'],
'for' => ['for (%s):', 'endfor;'], 'for' => ['for (%s):', 'endfor;'],
@ -508,7 +512,7 @@ class TemplateParser_v2
// Generate the list of directives to match. // Generate the list of directives to match.
if (self::$_directives_regexp === null) if (self::$_directives_regexp === null)
{ {
foreach (self::$_loopdef as $directive => $def) foreach (self::$_directives as $directive => $def)
{ {
$directive = preg_replace(['#(?<=\w)once$#', '#(?<=\w)if$#'], ['[Oo]nce', '[Ii]f'], $directive); $directive = preg_replace(['#(?<=\w)once$#', '#(?<=\w)if$#'], ['[Oo]nce', '[Ii]f'], $directive);
$directives[] = $directive; $directives[] = $directive;
@ -544,19 +548,19 @@ class TemplateParser_v2
if ($directive === 'empty' && !$args && !$stack && end($this->_stack)['directive'] === 'forelse') if ($directive === 'empty' && !$args && !$stack && end($this->_stack)['directive'] === 'forelse')
{ {
$stack = end($this->_stack); $stack = end($this->_stack);
$code = self::$_loopdef['forelse'][1]; $code = self::$_directives['forelse'][1];
$code = strtr($code, ['%uniq' => $stack['uniq'], '%array' => $stack['array'], '%remainder' => $stack['remainder']]); $code = strtr($code, ['%uniq' => $stack['uniq'], '%array' => $stack['array'], '%remainder' => $stack['remainder']]);
} }
// Single directives. // Single directives.
elseif (isset(self::$_loopdef[$directive]) && count(self::$_loopdef[$directive]) === 1) elseif (isset(self::$_directives[$directive]) && count(self::$_directives[$directive]) === 1)
{ {
$code = self::$_loopdef[$directive][0]; $code = self::$_directives[$directive][0];
$code = str_contains($code, '%s') ? sprintf($code, $args) : $code; $code = str_contains($code, '%s') ? sprintf($code, $args) : $code;
} }
// Paired directives. // Paired directives.
elseif (isset(self::$_loopdef[$directive])) elseif (isset(self::$_directives[$directive]))
{ {
// Starting directive. // Starting directive.
if (!$stack) if (!$stack)
@ -577,7 +581,7 @@ class TemplateParser_v2
$remainder = ''; $remainder = '';
} }
} }
$code = self::$_loopdef[$directive][0]; $code = self::$_directives[$directive][0];
$code = strtr($code, ['%s' => $args, '%uniq' => $uniq, '%array' => $array, '%remainder' => $remainder]); $code = strtr($code, ['%s' => $args, '%uniq' => $uniq, '%array' => $array, '%remainder' => $remainder]);
$this->_stack[] = [ $this->_stack[] = [
'directive' => $directive, 'directive' => $directive,
@ -591,7 +595,7 @@ class TemplateParser_v2
// Ending directive. // Ending directive.
else else
{ {
$code = end(self::$_loopdef[$directive]); $code = end(self::$_directives[$directive]);
$code = strtr($code, ['%s' => $stack['args'], '%uniq' => $stack['uniq'], '%array' => $stack['array'], '%remainder' => $stack['remainder']]); $code = strtr($code, ['%s' => $stack['args'], '%uniq' => $stack['uniq'], '%array' => $stack['array'], '%remainder' => $stack['remainder']]);
} }
} }