mirror of
https://github.com/slawkens/myaac.git
synced 2025-10-15 02:04:54 +02:00
First public release of MyAAC
This commit is contained in:
67
system/libs/dwoo/plugins/builtin/blocks/a.php
Normal file
67
system/libs/dwoo/plugins/builtin/blocks/a.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Outputs a html <a> tag
|
||||
* <pre>
|
||||
* * href : the target URI where the link must point
|
||||
* * rest : any other attributes you want to add to the tag can be added as named parameters
|
||||
* </pre>
|
||||
*
|
||||
* Example :
|
||||
*
|
||||
* <code>
|
||||
* {* Create a simple link out of an url variable and add a special class attribute: *}
|
||||
*
|
||||
* {a $url class="external" /}
|
||||
*
|
||||
* {* Mark a link as active depending on some other variable : *}
|
||||
*
|
||||
* {a $link.url class=tif($link.active "active"); $link.title /}
|
||||
*
|
||||
* {* This is similar to: <a href="{$link.url}" class="{if $link.active}active{/if}">{$link.title}</a> *}
|
||||
* </code>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_a extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init($href, array $rest=array())
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$p = $compiler->getCompiledParams($params);
|
||||
|
||||
$out = Dwoo_Compiler::PHP_OPEN . 'echo \'<a '.self::paramsToAttributes($p);
|
||||
|
||||
return $out.'>\';' . Dwoo_Compiler::PHP_CLOSE;
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$p = $compiler->getCompiledParams($params);
|
||||
|
||||
// no content was provided so use the url as display text
|
||||
if ($content == "") {
|
||||
// merge </a> into the href if href is a string
|
||||
if (substr($p['href'], -1) === '"' || substr($p['href'], -1) === '\'') {
|
||||
return Dwoo_Compiler::PHP_OPEN . 'echo '.substr($p['href'], 0, -1).'</a>'.substr($p['href'], -1).';'.Dwoo_Compiler::PHP_CLOSE;
|
||||
}
|
||||
// otherwise append
|
||||
return Dwoo_Compiler::PHP_OPEN . 'echo '.$p['href'].'.\'</a>\';'.Dwoo_Compiler::PHP_CLOSE;
|
||||
}
|
||||
|
||||
// return content
|
||||
return $content . '</a>';
|
||||
}
|
||||
}
|
61
system/libs/dwoo/plugins/builtin/blocks/auto_escape.php
Normal file
61
system/libs/dwoo/plugins/builtin/blocks/auto_escape.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Overrides the compiler auto-escape setting within the block
|
||||
* <pre>
|
||||
* * enabled : if set to "on", "enable", true or 1 then the compiler autoescaping is enabled inside this block. set to "off", "disable", false or 0 to disable it
|
||||
* </pre>
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_auto_escape extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
protected static $stack = array();
|
||||
|
||||
public function init($enabled)
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
switch(strtolower(trim((string) $params['enabled'], '"\''))) {
|
||||
|
||||
case 'on':
|
||||
case 'true':
|
||||
case 'enabled':
|
||||
case 'enable':
|
||||
case '1':
|
||||
$enable = true;
|
||||
break;
|
||||
case 'off':
|
||||
case 'false':
|
||||
case 'disabled':
|
||||
case 'disable':
|
||||
case '0':
|
||||
$enable = false;
|
||||
break;
|
||||
default:
|
||||
throw new Dwoo_Compilation_Exception($compiler, 'Auto_Escape : Invalid parameter ('.$params['enabled'].'), valid parameters are "enable"/true or "disable"/false');
|
||||
|
||||
}
|
||||
|
||||
self::$stack[] = $compiler->getAutoEscape();
|
||||
$compiler->setAutoEscape($enable);
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$compiler->setAutoEscape(array_pop(self::$stack));
|
||||
return $content;
|
||||
}
|
||||
}
|
34
system/libs/dwoo/plugins/builtin/blocks/block.php
Normal file
34
system/libs/dwoo/plugins/builtin/blocks/block.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This is used only when rendering a template that has blocks but is not extending anything,
|
||||
* it doesn't do anything by itself and should not be used outside of template inheritance context,
|
||||
* see {@link http://wiki.dwoo.org/index.php/TemplateInheritance} to read more about it.
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_block extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init($name='')
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
return $content;
|
||||
}
|
||||
}
|
61
system/libs/dwoo/plugins/builtin/blocks/capture.php
Normal file
61
system/libs/dwoo/plugins/builtin/blocks/capture.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Captures all the output within this block and saves it into {$.capture.default} by default,
|
||||
* or {$.capture.name} if you provide another name.
|
||||
* <pre>
|
||||
* * name : capture name, used to read the value afterwards
|
||||
* * assign : if set, the value is also saved in the given variable
|
||||
* * cat : if true, the value is appended to the previous one (if any) instead of overwriting it
|
||||
* </pre>
|
||||
* If the cat parameter is true, the content
|
||||
* will be appended to the existing content
|
||||
*
|
||||
* Example :
|
||||
*
|
||||
* <code>
|
||||
* {capture "foo"}
|
||||
* Anything in here won't show, it will be saved for later use..
|
||||
* {/capture}
|
||||
* Output was : {$.capture.foo}
|
||||
* </code>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_capture extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init($name = 'default', $assign = null, $cat = false, $trim = false)
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
return Dwoo_Compiler::PHP_OPEN.$prepend.'ob_start();'.$append.Dwoo_Compiler::PHP_CLOSE;
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
|
||||
$out = $content . Dwoo_Compiler::PHP_OPEN.$prepend."\n".'$tmp = ob_get_clean();';
|
||||
if ($params['trim'] !== 'false' && $params['trim'] !== 0) {
|
||||
$out .= "\n".'$tmp = trim($tmp);';
|
||||
}
|
||||
if ($params['cat'] === 'true' || $params['cat'] === 1) {
|
||||
$out .= "\n".'$tmp = $this->readVar(\'dwoo.capture.\'.'.$params['name'].') . $tmp;';
|
||||
}
|
||||
if ($params['assign'] !== 'null') {
|
||||
$out .= "\n".'$this->scope['.$params['assign'].'] = $tmp;';
|
||||
}
|
||||
return $out . "\n".'$this->globals[\'capture\']['.$params['name'].'] = $tmp;'.$append.Dwoo_Compiler::PHP_CLOSE;
|
||||
}
|
||||
}
|
65
system/libs/dwoo/plugins/builtin/blocks/dynamic.php
Normal file
65
system/libs/dwoo/plugins/builtin/blocks/dynamic.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Marks the contents of the block as dynamic. Which means that it will not be cached.
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_dynamic extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$output = Dwoo_Compiler::PHP_OPEN .
|
||||
'if($doCache) {'."\n\t".
|
||||
'echo \'<dwoo:dynamic_\'.$dynamicId.\'>'.
|
||||
str_replace('\'', '\\\'', $content) .
|
||||
'</dwoo:dynamic_\'.$dynamicId.\'>\';'.
|
||||
"\n} else {\n\t";
|
||||
if(substr($content, 0, strlen(Dwoo_Compiler::PHP_OPEN)) == Dwoo_Compiler::PHP_OPEN) {
|
||||
$output .= substr($content, strlen(Dwoo_Compiler::PHP_OPEN));
|
||||
} else {
|
||||
$output .= Dwoo_Compiler::PHP_CLOSE . $content;
|
||||
}
|
||||
if(substr($output, -strlen(Dwoo_Compiler::PHP_CLOSE)) == Dwoo_Compiler::PHP_CLOSE) {
|
||||
$output = substr($output, 0, -strlen(Dwoo_Compiler::PHP_CLOSE));
|
||||
} else {
|
||||
$output .= Dwoo_Compiler::PHP_OPEN;
|
||||
}
|
||||
$output .= "\n}". Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
public static function unescape($output, $dynamicId, $compiledFile)
|
||||
{
|
||||
$output = preg_replace_callback('/<dwoo:dynamic_('.$dynamicId.')>(.+?)<\/dwoo:dynamic_'.$dynamicId.'>/s', array('self', 'unescapePhp'), $output, -1, $count);
|
||||
// re-add the includes on top of the file
|
||||
if ($count && preg_match('#/\* template head \*/(.+?)/\* end template head \*/#s', file_get_contents($compiledFile), $m)) {
|
||||
$output = '<?php '.$m[1].' ?>'.$output;
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
public static function unescapePhp($match)
|
||||
{
|
||||
return preg_replace('{<\?php /\*'.$match[1].'\*/ echo \'(.+?)\'; \?>}s', '$1', $match[2]);
|
||||
}
|
||||
}
|
63
system/libs/dwoo/plugins/builtin/blocks/else.php
Normal file
63
system/libs/dwoo/plugins/builtin/blocks/else.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Generic else block, it supports all builtin optional-display blocks which are if/for/foreach/loop/with
|
||||
*
|
||||
* If any of those block contains an else statement, the content between {else} and {/block} (you do not
|
||||
* need to close the else block) will be shown if the block's condition has no been met
|
||||
*
|
||||
* Example :
|
||||
*
|
||||
* <code>
|
||||
* {foreach $array val}
|
||||
* $array is not empty so we display it's values : {$val}
|
||||
* {else}
|
||||
* if this shows, it means that $array is empty or doesn't exist.
|
||||
* {/foreach}
|
||||
* </code>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_else extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$preContent = '';
|
||||
while (true) {
|
||||
$preContent .= $compiler->removeTopBlock();
|
||||
$block =& $compiler->getCurrentBlock();
|
||||
$interfaces = class_implements($block['class'], false);
|
||||
if (in_array('Dwoo_IElseable', $interfaces) !== false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$params['initialized'] = true;
|
||||
$compiler->injectBlock($type, $params);
|
||||
return $preContent;
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
if (!isset($params['initialized'])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$block =& $compiler->getCurrentBlock();
|
||||
$block['params']['hasElse'] = Dwoo_Compiler::PHP_OPEN."else {\n".Dwoo_Compiler::PHP_CLOSE . $content . Dwoo_Compiler::PHP_OPEN."\n}".Dwoo_Compiler::PHP_CLOSE;
|
||||
return '';
|
||||
}
|
||||
}
|
60
system/libs/dwoo/plugins/builtin/blocks/elseif.php
Normal file
60
system/libs/dwoo/plugins/builtin/blocks/elseif.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Acts as a php elseif block, allowing you to add one more condition
|
||||
* if the previous one(s) didn't match. See the {if} plugin for syntax details
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_elseif extends Dwoo_Plugin_if implements Dwoo_ICompilable_Block, Dwoo_IElseable
|
||||
{
|
||||
public function init(array $rest)
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$preContent = '';
|
||||
while (true) {
|
||||
$preContent .= $compiler->removeTopBlock();
|
||||
$block =& $compiler->getCurrentBlock();
|
||||
$interfaces = class_implements($block['class'], false);
|
||||
if (in_array('Dwoo_IElseable', $interfaces) !== false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$params['initialized'] = true;
|
||||
$compiler->injectBlock($type, $params);
|
||||
return $preContent;
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
if (!isset($params['initialized'])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
|
||||
$pre = Dwoo_Compiler::PHP_OPEN."elseif (".implode(' ', self::replaceKeywords($params['*'], $compiler)).") {\n" . Dwoo_Compiler::PHP_CLOSE;
|
||||
$post = Dwoo_Compiler::PHP_OPEN."\n}".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
if (isset($params['hasElse'])) {
|
||||
$post .= $params['hasElse'];
|
||||
}
|
||||
|
||||
$block =& $compiler->getCurrentBlock();
|
||||
$block['params']['hasElse'] = $pre . $content . $post;
|
||||
return '';
|
||||
}
|
||||
}
|
147
system/libs/dwoo/plugins/builtin/blocks/for.php
Normal file
147
system/libs/dwoo/plugins/builtin/blocks/for.php
Normal file
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Similar to the php for block
|
||||
* <pre>
|
||||
* * name : for name to access it's iterator variables through {$.for.name.var} see {@link http://wiki.dwoo.org/index.php/IteratorVariables} for details
|
||||
* * from : array to iterate from (which equals 0) or a number as a start value
|
||||
* * to : value to stop iterating at (equals count($array) by default if you set an array in from)
|
||||
* * step : defines the incrementation of the pointer at each iteration
|
||||
* </pre>
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.1.0
|
||||
* @date 2009-07-18
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_for extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block, Dwoo_IElseable
|
||||
{
|
||||
public static $cnt=0;
|
||||
|
||||
public function init($name, $from, $to=null, $step=1, $skip=0)
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
// get block params and save the current template pointer to use it in the postProcessing method
|
||||
$currentBlock =& $compiler->getCurrentBlock();
|
||||
$currentBlock['params']['tplPointer'] = $compiler->getPointer();
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
$tpl = $compiler->getTemplateSource($params['tplPointer']);
|
||||
|
||||
// assigns params
|
||||
$from = $params['from'];
|
||||
$name = $params['name'];
|
||||
$step = $params['step'];
|
||||
$to = $params['to'];
|
||||
|
||||
// evaluates which global variables have to be computed
|
||||
$varName = '$dwoo.for.'.trim($name, '"\'').'.';
|
||||
$shortVarName = '$.for.'.trim($name, '"\'').'.';
|
||||
$usesAny = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
|
||||
$usesFirst = strpos($tpl, $varName.'first') !== false || strpos($tpl, $shortVarName.'first') !== false;
|
||||
$usesLast = strpos($tpl, $varName.'last') !== false || strpos($tpl, $shortVarName.'last') !== false;
|
||||
$usesIndex = strpos($tpl, $varName.'index') !== false || strpos($tpl, $shortVarName.'index') !== false;
|
||||
$usesIteration = $usesFirst || $usesLast || strpos($tpl, $varName.'iteration') !== false || strpos($tpl, $shortVarName.'iteration') !== false;
|
||||
$usesShow = strpos($tpl, $varName.'show') !== false || strpos($tpl, $shortVarName.'show') !== false;
|
||||
$usesTotal = $usesLast || strpos($tpl, $varName.'total') !== false || strpos($tpl, $shortVarName.'total') !== false;
|
||||
|
||||
if (strpos($name, '$this->scope[') !== false) {
|
||||
$usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
|
||||
}
|
||||
|
||||
// gets foreach id
|
||||
$cnt = self::$cnt++;
|
||||
|
||||
// builds pre processing output for
|
||||
$out = Dwoo_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));';
|
||||
// adds foreach properties
|
||||
if ($usesAny) {
|
||||
$out .= "\n".'$this->globals["for"]['.$name.'] = array'."\n(";
|
||||
if ($usesIndex) $out .="\n\t".'"index" => 0,';
|
||||
if ($usesIteration) $out .="\n\t".'"iteration" => 1,';
|
||||
if ($usesFirst) $out .="\n\t".'"first" => null,';
|
||||
if ($usesLast) $out .="\n\t".'"last" => null,';
|
||||
if ($usesShow) $out .="\n\t".'"show" => $tmp_shows,';
|
||||
if ($usesTotal) $out .="\n\t".'"total" => $this->isArray($_for'.$cnt.'_from) ? floor(count($_for'.$cnt.'_from) / $_for'.$cnt.'_step) : (is_numeric($_for'.$cnt.'_from) ? abs(($_for'.$cnt.'_to + 1 - $_for'.$cnt.'_from)/$_for'.$cnt.'_step) : 0),';
|
||||
$out.="\n);\n".'$_for'.$cnt.'_glob =& $this->globals["for"]['.$name.'];';
|
||||
}
|
||||
// checks if for must be looped
|
||||
$out .= "\n".'if ($tmp_shows)'."\n{";
|
||||
// set from/to to correct values if an array was given
|
||||
$out .= "\n\t".'if ($this->isArray($_for'.$cnt.'_from, true)) {
|
||||
$_for'.$cnt.'_to = is_numeric($_for'.$cnt.'_to) ? $_for'.$cnt.'_to - $_for'.$cnt.'_step : count($_for'.$cnt.'_from) - 1;
|
||||
$_for'.$cnt.'_from = 0;
|
||||
}';
|
||||
|
||||
// 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
|
||||
$reverse = false;
|
||||
$condition = '<=';
|
||||
$incrementer = '+';
|
||||
|
||||
if (preg_match('{^(["\']?)([0-9]+)\1$}', $from, $mN1) && preg_match('{^(["\']?)([0-9]+)\1$}', $to, $mN2)) {
|
||||
$from = (int) $mN1[2];
|
||||
$to = (int) $mN2[2];
|
||||
if ($from > $to) {
|
||||
$reverse = true;
|
||||
$condition = '>=';
|
||||
$incrementer = '-';
|
||||
}
|
||||
}
|
||||
|
||||
// reverse from and to if needed
|
||||
if (!$reverse) {
|
||||
$out .= "\n\t".'if ($_for'.$cnt.'_from > $_for'.$cnt.'_to) {
|
||||
$tmp = $_for'.$cnt.'_from;
|
||||
$_for'.$cnt.'_from = $_for'.$cnt.'_to;
|
||||
$_for'.$cnt.'_to = $tmp;
|
||||
}';
|
||||
}
|
||||
|
||||
$out .= '
|
||||
for ($this->scope['.$name.'] = $_for'.$cnt.'_from; $this->scope['.$name.'] '.$condition.' $_for'.$cnt.'_to; $this->scope['.$name.'] '.$incrementer.'= $_for'.$cnt.'_step)'."\n\t{";
|
||||
// updates properties
|
||||
if ($usesIndex) {
|
||||
$out .="\n\t\t".'$_for'.$cnt.'_glob["index"] = $this->scope['.$name.'];';
|
||||
}
|
||||
if ($usesFirst) {
|
||||
$out .= "\n\t\t".'$_for'.$cnt.'_glob["first"] = (string) ($_for'.$cnt.'_glob["iteration"] === 1);';
|
||||
}
|
||||
if ($usesLast) {
|
||||
$out .= "\n\t\t".'$_for'.$cnt.'_glob["last"] = (string) ($_for'.$cnt.'_glob["iteration"] === $_for'.$cnt.'_glob["total"]);';
|
||||
}
|
||||
$out .= "\n/* -- for start output */\n".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
|
||||
// build post processing output and cache it
|
||||
$postOut = Dwoo_Compiler::PHP_OPEN . '/* -- for end output */';
|
||||
// update properties
|
||||
if ($usesIteration) {
|
||||
$postOut .= "\n\t\t".'$_for'.$cnt.'_glob["iteration"]+=1;';
|
||||
}
|
||||
// end loop
|
||||
$postOut .= "\n\t}\n}\n".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
if (isset($params['hasElse'])) {
|
||||
$postOut .= $params['hasElse'];
|
||||
}
|
||||
|
||||
return $out . $content . $postOut;
|
||||
}
|
||||
}
|
152
system/libs/dwoo/plugins/builtin/blocks/foreach.php
Normal file
152
system/libs/dwoo/plugins/builtin/blocks/foreach.php
Normal file
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Similar to the php foreach block, loops over an array
|
||||
*
|
||||
* Note that if you don't provide the item parameter, the key will act as item
|
||||
* <pre>
|
||||
* * from : the array that you want to iterate over
|
||||
* * key : variable name for the key (or for the item if item is not defined)
|
||||
* * item : variable name for each item
|
||||
* * name : foreach name to access it's iterator variables through {$.foreach.name.var} see {@link http://wiki.dwoo.org/index.php/IteratorVariables} for details
|
||||
* </pre>
|
||||
* Example :
|
||||
*
|
||||
* <code>
|
||||
* {foreach $array val}
|
||||
* {$val.something}
|
||||
* {/foreach}
|
||||
* </code>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.1.0
|
||||
* @date 2009-07-18
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_foreach extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block, Dwoo_IElseable
|
||||
{
|
||||
public static $cnt=0;
|
||||
|
||||
public function init($from, $key=null, $item=null, $name='default', $implode=null)
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
// get block params and save the current template pointer to use it in the postProcessing method
|
||||
$currentBlock =& $compiler->getCurrentBlock();
|
||||
$currentBlock['params']['tplPointer'] = $compiler->getPointer();
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
$tpl = $compiler->getTemplateSource($params['tplPointer']);
|
||||
|
||||
// assigns params
|
||||
$src = $params['from'];
|
||||
|
||||
if ($params['item'] !== 'null') {
|
||||
if ($params['key'] !== 'null') {
|
||||
$key = $params['key'];
|
||||
}
|
||||
$val = $params['item'];
|
||||
} elseif ($params['key'] !== 'null') {
|
||||
$val = $params['key'];
|
||||
} else {
|
||||
throw new Dwoo_Compilation_Exception($compiler, 'Foreach <em>item</em> parameter missing');
|
||||
}
|
||||
$name = $params['name'];
|
||||
|
||||
if (substr($val, 0, 1) !== '"' && substr($val, 0, 1) !== '\'') {
|
||||
throw new Dwoo_Compilation_Exception($compiler, 'Foreach <em>item</em> parameter must be of type string');
|
||||
}
|
||||
if (isset($key) && substr($val, 0, 1) !== '"' && substr($val, 0, 1) !== '\'') {
|
||||
throw new Dwoo_Compilation_Exception($compiler, 'Foreach <em>key</em> parameter must be of type string');
|
||||
}
|
||||
|
||||
// evaluates which global variables have to be computed
|
||||
$varName = '$dwoo.foreach.'.trim($name, '"\'').'.';
|
||||
$shortVarName = '$.foreach.'.trim($name, '"\'').'.';
|
||||
$usesAny = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
|
||||
$usesFirst = strpos($tpl, $varName.'first') !== false || strpos($tpl, $shortVarName.'first') !== false;
|
||||
$usesLast = strpos($tpl, $varName.'last') !== false || strpos($tpl, $shortVarName.'last') !== false;
|
||||
$usesIndex = $usesFirst || strpos($tpl, $varName.'index') !== false || strpos($tpl, $shortVarName.'index') !== false;
|
||||
$usesIteration = $usesLast || strpos($tpl, $varName.'iteration') !== false || strpos($tpl, $shortVarName.'iteration') !== false;
|
||||
$usesShow = strpos($tpl, $varName.'show') !== false || strpos($tpl, $shortVarName.'show') !== false;
|
||||
$usesTotal = $usesLast || strpos($tpl, $varName.'total') !== false || strpos($tpl, $shortVarName.'total') !== false;
|
||||
|
||||
if (strpos($name, '$this->scope[') !== false) {
|
||||
$usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
|
||||
}
|
||||
|
||||
// override globals vars if implode is used
|
||||
if ($params['implode'] !== 'null') {
|
||||
$implode = $params['implode'];
|
||||
$usesAny = true;
|
||||
$usesLast = true;
|
||||
$usesIteration = true;
|
||||
$usesTotal = true;
|
||||
}
|
||||
|
||||
// gets foreach id
|
||||
$cnt = self::$cnt++;
|
||||
|
||||
// build pre content output
|
||||
$pre = Dwoo_Compiler::PHP_OPEN . "\n".'$_fh'.$cnt.'_data = '.$src.';';
|
||||
// adds foreach properties
|
||||
if ($usesAny) {
|
||||
$pre .= "\n".'$this->globals["foreach"]['.$name.'] = array'."\n(";
|
||||
if ($usesIndex) $pre .="\n\t".'"index" => 0,';
|
||||
if ($usesIteration) $pre .="\n\t".'"iteration" => 1,';
|
||||
if ($usesFirst) $pre .="\n\t".'"first" => null,';
|
||||
if ($usesLast) $pre .="\n\t".'"last" => null,';
|
||||
if ($usesShow) $pre .="\n\t".'"show" => $this->isArray($_fh'.$cnt.'_data, true),';
|
||||
if ($usesTotal) $pre .="\n\t".'"total" => $this->isArray($_fh'.$cnt.'_data) ? count($_fh'.$cnt.'_data) : 0,';
|
||||
$pre.="\n);\n".'$_fh'.$cnt.'_glob =& $this->globals["foreach"]['.$name.'];';
|
||||
}
|
||||
// checks if foreach must be looped
|
||||
$pre .= "\n".'if ($this->isArray($_fh'.$cnt.'_data'.(isset($params['hasElse']) ? ', true' : '').') === true)'."\n{";
|
||||
// iterates over keys
|
||||
$pre .= "\n\t".'foreach ($_fh'.$cnt.'_data as '.(isset($key)?'$this->scope['.$key.']=>':'').'$this->scope['.$val.'])'."\n\t{";
|
||||
// updates properties
|
||||
if ($usesFirst) {
|
||||
$pre .= "\n\t\t".'$_fh'.$cnt.'_glob["first"] = (string) ($_fh'.$cnt.'_glob["index"] === 0);';
|
||||
}
|
||||
if ($usesLast) {
|
||||
$pre .= "\n\t\t".'$_fh'.$cnt.'_glob["last"] = (string) ($_fh'.$cnt.'_glob["iteration"] === $_fh'.$cnt.'_glob["total"]);';
|
||||
}
|
||||
$pre .= "\n/* -- foreach start output */\n".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
// build post content output
|
||||
$post = Dwoo_Compiler::PHP_OPEN . "\n";
|
||||
|
||||
if (isset($implode)) {
|
||||
$post .= '/* -- implode */'."\n".'if (!$_fh'.$cnt.'_glob["last"]) {'.
|
||||
"\n\t".'echo '.$implode.";\n}\n";
|
||||
}
|
||||
$post .= '/* -- foreach end output */';
|
||||
// update properties
|
||||
if ($usesIndex) {
|
||||
$post.="\n\t\t".'$_fh'.$cnt.'_glob["index"]+=1;';
|
||||
}
|
||||
if ($usesIteration) {
|
||||
$post.="\n\t\t".'$_fh'.$cnt.'_glob["iteration"]+=1;';
|
||||
}
|
||||
// end loop
|
||||
$post .= "\n\t}\n}".Dwoo_Compiler::PHP_CLOSE;
|
||||
if (isset($params['hasElse'])) {
|
||||
$post .= $params['hasElse'];
|
||||
}
|
||||
|
||||
return $pre . $content . $post;
|
||||
}
|
||||
}
|
43
system/libs/dwoo/plugins/builtin/blocks/foreachelse.php
Normal file
43
system/libs/dwoo/plugins/builtin/blocks/foreachelse.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This plugin serves as a {else} block specifically for the {foreach} plugin.
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_foreachelse extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$with =& $compiler->findBlock('foreach', true);
|
||||
|
||||
$params['initialized'] = true;
|
||||
$compiler->injectBlock($type, $params);
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
if (!isset($params['initialized'])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$block =& $compiler->getCurrentBlock();
|
||||
$block['params']['hasElse'] = Dwoo_Compiler::PHP_OPEN."else {\n".Dwoo_Compiler::PHP_CLOSE . $content . Dwoo_Compiler::PHP_OPEN."\n}".Dwoo_Compiler::PHP_CLOSE;
|
||||
return '';
|
||||
}
|
||||
}
|
43
system/libs/dwoo/plugins/builtin/blocks/forelse.php
Normal file
43
system/libs/dwoo/plugins/builtin/blocks/forelse.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This plugin serves as a {else} block specifically for the {for} plugin.
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_forelse extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$with =& $compiler->findBlock('for', true);
|
||||
|
||||
$params['initialized'] = true;
|
||||
$compiler->injectBlock($type, $params);
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
if (!isset($params['initialized'])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$block =& $compiler->getCurrentBlock();
|
||||
$block['params']['hasElse'] = Dwoo_Compiler::PHP_OPEN."else {\n".Dwoo_Compiler::PHP_CLOSE . $content . Dwoo_Compiler::PHP_OPEN."\n}".Dwoo_Compiler::PHP_CLOSE;
|
||||
return '';
|
||||
}
|
||||
}
|
180
system/libs/dwoo/plugins/builtin/blocks/if.php
Normal file
180
system/libs/dwoo/plugins/builtin/blocks/if.php
Normal file
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Conditional block, the syntax is very similar to the php one, allowing () || && and
|
||||
* other php operators. Additional operators and their equivalent php syntax are as follow :
|
||||
*
|
||||
* eq -> ==
|
||||
* neq or ne -> !=
|
||||
* gte or ge -> >=
|
||||
* lte or le -> <=
|
||||
* gt -> >
|
||||
* lt -> <
|
||||
* mod -> %
|
||||
* not -> !
|
||||
* X is [not] div by Y -> (X % Y) == 0
|
||||
* X is [not] even [by Y] -> (X % 2) == 0 or ((X/Y) % 2) == 0
|
||||
* X is [not] odd [by Y] -> (X % 2) != 0 or ((X/Y) % 2) != 0
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_if extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block, Dwoo_IElseable
|
||||
{
|
||||
public function init(array $rest)
|
||||
{
|
||||
}
|
||||
|
||||
public static function replaceKeywords(array $params, Dwoo_Compiler $compiler)
|
||||
{
|
||||
$p = array();
|
||||
|
||||
reset($params);
|
||||
while (list($k,$v) = each($params)) {
|
||||
$v = (string) $v;
|
||||
if(substr($v, 0, 1) === '"' || substr($v, 0, 1) === '\'') {
|
||||
$vmod = strtolower(substr($v, 1, -1));
|
||||
} else {
|
||||
$vmod = strtolower($v);
|
||||
}
|
||||
switch($vmod) {
|
||||
|
||||
case 'and':
|
||||
$p[] = '&&';
|
||||
break;
|
||||
case 'or':
|
||||
$p[] = '||';
|
||||
break;
|
||||
case '==':
|
||||
case 'eq':
|
||||
$p[] = '==';
|
||||
break;
|
||||
case '<>':
|
||||
case '!=':
|
||||
case 'ne':
|
||||
case 'neq':
|
||||
$p[] = '!=';
|
||||
break;
|
||||
case '>=':
|
||||
case 'gte':
|
||||
case 'ge':
|
||||
$p[] = '>=';
|
||||
break;
|
||||
case '<=':
|
||||
case 'lte':
|
||||
case 'le':
|
||||
$p[] = '<=';
|
||||
break;
|
||||
case '>':
|
||||
case 'gt':
|
||||
$p[] = '>';
|
||||
break;
|
||||
case '<':
|
||||
case 'lt':
|
||||
$p[] = '<';
|
||||
break;
|
||||
case '===':
|
||||
$p[] = '===';
|
||||
break;
|
||||
case '!==':
|
||||
$p[] = '!==';
|
||||
break;
|
||||
case 'is':
|
||||
if (isset($params[$k+1]) && strtolower(trim($params[$k+1], '"\'')) === 'not') {
|
||||
$negate = true;
|
||||
next($params);
|
||||
} else {
|
||||
$negate = false;
|
||||
}
|
||||
$ptr = 1+(int)$negate;
|
||||
if (!isset($params[$k+$ptr])) {
|
||||
$params[$k+$ptr] = '';
|
||||
} else {
|
||||
$params[$k+$ptr] = trim($params[$k+$ptr], '"\'');
|
||||
}
|
||||
switch($params[$k+$ptr]) {
|
||||
|
||||
case 'div':
|
||||
if (isset($params[$k+$ptr+1]) && strtolower(trim($params[$k+$ptr+1], '"\'')) === 'by') {
|
||||
$p[] = ' % '.$params[$k+$ptr+2].' '.($negate?'!':'=').'== 0';
|
||||
next($params);
|
||||
next($params);
|
||||
next($params);
|
||||
} else {
|
||||
throw new Dwoo_Compilation_Exception($compiler, 'If : Syntax error : syntax should be "if $a is [not] div by $b", found '.$params[$k-1].' is '.($negate?'not ':'').'div '.$params[$k+$ptr+1].' '.$params[$k+$ptr+2]);
|
||||
}
|
||||
break;
|
||||
case 'even':
|
||||
$a = array_pop($p);
|
||||
if (isset($params[$k+$ptr+1]) && strtolower(trim($params[$k+$ptr+1], '"\'')) === 'by') {
|
||||
$b = $params[$k+$ptr+2];
|
||||
$p[] = '('.$a .' / '.$b.') % 2 '.($negate?'!':'=').'== 0';
|
||||
next($params);
|
||||
next($params);
|
||||
} else {
|
||||
$p[] = $a.' % 2 '.($negate?'!':'=').'== 0';
|
||||
}
|
||||
next($params);
|
||||
break;
|
||||
case 'odd':
|
||||
$a = array_pop($p);
|
||||
if (isset($params[$k+$ptr+1]) && strtolower(trim($params[$k+$ptr+1], '"\'')) === 'by') {
|
||||
$b = $params[$k+$ptr+2];
|
||||
$p[] = '('.$a .' / '.$b.') % 2 '.($negate?'=':'!').'== 0';
|
||||
next($params);
|
||||
next($params);
|
||||
} else {
|
||||
$p[] = $a.' % 2 '.($negate?'=':'!').'== 0';
|
||||
}
|
||||
next($params);
|
||||
break;
|
||||
default:
|
||||
throw new Dwoo_Compilation_Exception($compiler, 'If : Syntax error : syntax should be "if $a is [not] (div|even|odd) [by $b]", found '.$params[$k-1].' is '.$params[$k+$ptr+1]);
|
||||
|
||||
}
|
||||
break;
|
||||
case '%':
|
||||
case 'mod':
|
||||
$p[] = '%';
|
||||
break;
|
||||
case '!':
|
||||
case 'not':
|
||||
$p[] = '!';
|
||||
break;
|
||||
default:
|
||||
$p[] = $v;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $p;
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
|
||||
$pre = Dwoo_Compiler::PHP_OPEN.'if ('.implode(' ', self::replaceKeywords($params['*'], $compiler)).") {\n".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
$post = Dwoo_Compiler::PHP_OPEN."\n}".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
if (isset($params['hasElse'])) {
|
||||
$post .= $params['hasElse'];
|
||||
}
|
||||
|
||||
return $pre . $content . $post;
|
||||
}
|
||||
}
|
128
system/libs/dwoo/plugins/builtin/blocks/loop.php
Normal file
128
system/libs/dwoo/plugins/builtin/blocks/loop.php
Normal file
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Loops over an array and moves the scope into each value, allowing for shorter loop constructs
|
||||
*
|
||||
* Note that to access the array key within a loop block, you have to use the {$_key} variable,
|
||||
* you can not specify it yourself.
|
||||
* <pre>
|
||||
* * from : the array that you want to iterate over
|
||||
* * name : loop name to access it's iterator variables through {$.loop.name.var} see {@link http://wiki.dwoo.org/index.php/IteratorVariables} for details
|
||||
* </pre>
|
||||
* Example :
|
||||
*
|
||||
* instead of a foreach block such as :
|
||||
*
|
||||
* <code>
|
||||
* {foreach $variable value}
|
||||
* {$value.foo} {$value.bar}
|
||||
* {/foreach}
|
||||
* </code>
|
||||
*
|
||||
* you can do :
|
||||
*
|
||||
* <code>
|
||||
* {loop $variable}
|
||||
* {$foo} {$bar}
|
||||
* {/loop}
|
||||
* </code>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.1.0
|
||||
* @date 2009-07-18
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_loop extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block, Dwoo_IElseable
|
||||
{
|
||||
public static $cnt=0;
|
||||
|
||||
public function init($from, $name='default')
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
// get block params and save the current template pointer to use it in the postProcessing method
|
||||
$currentBlock =& $compiler->getCurrentBlock();
|
||||
$currentBlock['params']['tplPointer'] = $compiler->getPointer();
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
$tpl = $compiler->getTemplateSource($params['tplPointer']);
|
||||
|
||||
// assigns params
|
||||
$src = $params['from'];
|
||||
$name = $params['name'];
|
||||
|
||||
// evaluates which global variables have to be computed
|
||||
$varName = '$dwoo.loop.'.trim($name, '"\'').'.';
|
||||
$shortVarName = '$.loop.'.trim($name, '"\'').'.';
|
||||
$usesAny = strpos($tpl, $varName) !== false || strpos($tpl, $shortVarName) !== false;
|
||||
$usesFirst = strpos($tpl, $varName.'first') !== false || strpos($tpl, $shortVarName.'first') !== false;
|
||||
$usesLast = strpos($tpl, $varName.'last') !== false || strpos($tpl, $shortVarName.'last') !== false;
|
||||
$usesIndex = $usesFirst || strpos($tpl, $varName.'index') !== false || strpos($tpl, $shortVarName.'index') !== false;
|
||||
$usesIteration = $usesLast || strpos($tpl, $varName.'iteration') !== false || strpos($tpl, $shortVarName.'iteration') !== false;
|
||||
$usesShow = strpos($tpl, $varName.'show') !== false || strpos($tpl, $shortVarName.'show') !== false;
|
||||
$usesTotal = $usesLast || strpos($tpl, $varName.'total') !== false || strpos($tpl, $shortVarName.'total') !== false;
|
||||
|
||||
if (strpos($name, '$this->scope[') !== false) {
|
||||
$usesAny = $usesFirst = $usesLast = $usesIndex = $usesIteration = $usesShow = $usesTotal = true;
|
||||
}
|
||||
|
||||
// gets foreach id
|
||||
$cnt = self::$cnt++;
|
||||
|
||||
// builds pre processing output
|
||||
$pre = Dwoo_Compiler::PHP_OPEN . "\n".'$_loop'.$cnt.'_data = '.$src.';';
|
||||
// adds foreach properties
|
||||
if ($usesAny) {
|
||||
$pre .= "\n".'$this->globals["loop"]['.$name.'] = array'."\n(";
|
||||
if ($usesIndex) $pre .="\n\t".'"index" => 0,';
|
||||
if ($usesIteration) $pre .="\n\t".'"iteration" => 1,';
|
||||
if ($usesFirst) $pre .="\n\t".'"first" => null,';
|
||||
if ($usesLast) $pre .="\n\t".'"last" => null,';
|
||||
if ($usesShow) $pre .="\n\t".'"show" => $this->isArray($_loop'.$cnt.'_data, true),';
|
||||
if ($usesTotal) $pre .="\n\t".'"total" => $this->isArray($_loop'.$cnt.'_data) ? count($_loop'.$cnt.'_data) : 0,';
|
||||
$pre.="\n);\n".'$_loop'.$cnt.'_glob =& $this->globals["loop"]['.$name.'];';
|
||||
}
|
||||
// checks if the loop must be looped
|
||||
$pre .= "\n".'if ($this->isArray($_loop'.$cnt.'_data'.(isset($params['hasElse']) ? ', true' : '').') === true)'."\n{";
|
||||
// iterates over keys
|
||||
$pre .= "\n\t".'foreach ($_loop'.$cnt.'_data as $tmp_key => $this->scope["-loop-"])'."\n\t{";
|
||||
// updates properties
|
||||
if ($usesFirst) {
|
||||
$pre .= "\n\t\t".'$_loop'.$cnt.'_glob["first"] = (string) ($_loop'.$cnt.'_glob["index"] === 0);';
|
||||
}
|
||||
if ($usesLast) {
|
||||
$pre .= "\n\t\t".'$_loop'.$cnt.'_glob["last"] = (string) ($_loop'.$cnt.'_glob["iteration"] === $_loop'.$cnt.'_glob["total"]);';
|
||||
}
|
||||
$pre .= "\n\t\t".'$_loop'.$cnt.'_scope = $this->setScope(array("-loop-"));' . "\n/* -- loop start output */\n".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
// build post processing output and cache it
|
||||
$post = Dwoo_Compiler::PHP_OPEN . "\n".'/* -- loop end output */'."\n\t\t".'$this->setScope($_loop'.$cnt.'_scope, true);';
|
||||
// update properties
|
||||
if ($usesIndex) {
|
||||
$post.="\n\t\t".'$_loop'.$cnt.'_glob["index"]+=1;';
|
||||
}
|
||||
if ($usesIteration) {
|
||||
$post.="\n\t\t".'$_loop'.$cnt.'_glob["iteration"]+=1;';
|
||||
}
|
||||
// end loop
|
||||
$post .= "\n\t}\n}\n" . Dwoo_Compiler::PHP_CLOSE;
|
||||
if (isset($params['hasElse'])) {
|
||||
$post .= $params['hasElse'];
|
||||
}
|
||||
|
||||
return $pre . $content . $post;
|
||||
}
|
||||
}
|
131
system/libs/dwoo/plugins/builtin/blocks/section.php
Normal file
131
system/libs/dwoo/plugins/builtin/blocks/section.php
Normal file
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Compatibility plugin for smarty templates, do not use otherwise, this is deprecated.
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_section extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block, Dwoo_IElseable
|
||||
{
|
||||
public static $cnt=0;
|
||||
|
||||
public function init($name, $loop, $start = null, $step = null, $max = null, $show = true)
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$output = Dwoo_Compiler::PHP_OPEN;
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
|
||||
// assigns params
|
||||
$loop = $params['loop'];
|
||||
$start = $params['start'];
|
||||
$max = $params['max'];
|
||||
$name = $params['name'];
|
||||
$step = $params['step'];
|
||||
$show = $params['show'];
|
||||
|
||||
// gets unique id
|
||||
$cnt = self::$cnt++;
|
||||
|
||||
$output .= '$this->globals[\'section\']['.$name.'] = array();'."\n".
|
||||
'$_section'.$cnt.' =& $this->globals[\'section\']['.$name.'];'."\n";
|
||||
|
||||
if ($loop !== 'null') {
|
||||
$output .= '$_section'.$cnt.'[\'loop\'] = is_array($tmp = '.$loop.') ? count($tmp) : max(0, (int) $tmp);'."\n";
|
||||
} else {
|
||||
$output .= '$_section'.$cnt.'[\'loop\'] = 1;'."\n";
|
||||
}
|
||||
|
||||
if ($show !== 'null') {
|
||||
$output .= '$_section'.$cnt.'[\'show\'] = '.$show.";\n";
|
||||
} else {
|
||||
$output .= '$_section'.$cnt.'[\'show\'] = true;'."\n";
|
||||
}
|
||||
|
||||
if ($name !== 'null') {
|
||||
$output .= '$_section'.$cnt.'[\'name\'] = '.$name.";\n";
|
||||
} else {
|
||||
$output .= '$_section'.$cnt.'[\'name\'] = true;'."\n";
|
||||
}
|
||||
|
||||
if ($max !== 'null') {
|
||||
$output .= '$_section'.$cnt.'[\'max\'] = (int)'.$max.";\n".
|
||||
'if($_section'.$cnt.'[\'max\'] < 0) { $_section'.$cnt.'[\'max\'] = $_section'.$cnt.'[\'loop\']; }'."\n";
|
||||
} else {
|
||||
$output .= '$_section'.$cnt.'[\'max\'] = $_section'.$cnt.'[\'loop\'];'."\n";
|
||||
}
|
||||
|
||||
if ($step !== 'null') {
|
||||
$output .= '$_section'.$cnt.'[\'step\'] = (int)'.$step.' == 0 ? 1 : (int) '.$step.";\n";
|
||||
} else {
|
||||
$output .= '$_section'.$cnt.'[\'step\'] = 1;'."\n";
|
||||
}
|
||||
|
||||
if ($start !== 'null') {
|
||||
$output .= '$_section'.$cnt.'[\'start\'] = (int)'.$start.";\n";
|
||||
} else {
|
||||
$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";
|
||||
}
|
||||
|
||||
/* if ($usesAny) {
|
||||
$output .= "\n".'$this->globals["section"]['.$name.'] = array'."\n(";
|
||||
if ($usesIndex) $output .="\n\t".'"index" => 0,';
|
||||
if ($usesIteration) $output .="\n\t".'"iteration" => 1,';
|
||||
if ($usesFirst) $output .="\n\t".'"first" => null,';
|
||||
if ($usesLast) $output .="\n\t".'"last" => null,';
|
||||
if ($usesShow) $output .="\n\t".'"show" => ($this->isArray($_for'.$cnt.'_from, true)) || (is_numeric($_for'.$cnt.'_from) && $_for'.$cnt.'_from != $_for'.$cnt.'_to),';
|
||||
if ($usesTotal) $output .="\n\t".'"total" => $this->isArray($_for'.$cnt.'_from) ? count($_for'.$cnt.'_from) - $_for'.$cnt.'_skip : (is_numeric($_for'.$cnt.'_from) ? abs(($_for'.$cnt.'_to + 1 - $_for'.$cnt.'_from)/$_for'.$cnt.'_step) : 0),';
|
||||
$out.="\n);\n".'$_section'.$cnt.'[\'glob\'] =& $this->globals["section"]['.$name.'];'."\n\n";
|
||||
}
|
||||
*/
|
||||
|
||||
$output .= 'if ($_section'.$cnt.'[\'show\']) {'."\n";
|
||||
if ($start === 'null' && $step === 'null' && $max === 'null') {
|
||||
$output .= ' $_section'.$cnt.'[\'total\'] = $_section'.$cnt.'[\'loop\'];'."\n";
|
||||
} else {
|
||||
$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";
|
||||
}
|
||||
$output .= ' if ($_section'.$cnt.'[\'total\'] == 0) {'."\n".
|
||||
' $_section'.$cnt.'[\'show\'] = false;'."\n".
|
||||
' }'."\n".
|
||||
'} else {'."\n".
|
||||
' $_section'.$cnt.'[\'total\'] = 0;'."\n}\n";
|
||||
$output .= 'if ($_section'.$cnt.'[\'show\']) {'."\n";
|
||||
$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";
|
||||
$output .= "\t\t".'$_section'.$cnt.'[\'rownum\'] = $_section'.$cnt.'[\'iteration\'];'."\n";
|
||||
$output .= "\t\t".'$_section'.$cnt.'[\'index_prev\'] = $this->scope['.$name.'] - $_section'.$cnt.'[\'step\'];'."\n";
|
||||
$output .= "\t\t".'$_section'.$cnt.'[\'index_next\'] = $this->scope['.$name.'] + $_section'.$cnt.'[\'step\'];'."\n";
|
||||
$output .= "\t\t".'$_section'.$cnt.'[\'first\'] = ($_section'.$cnt.'[\'iteration\'] == 1);'."\n";
|
||||
$output .= "\t\t".'$_section'.$cnt.'[\'last\'] = ($_section'.$cnt.'[\'iteration\'] == $_section'.$cnt.'[\'total\']);'."\n";
|
||||
|
||||
$output .= Dwoo_Compiler::PHP_CLOSE . $content . Dwoo_Compiler::PHP_OPEN;
|
||||
|
||||
$output .= "\n\t}\n} " . Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
if (isset($params['hasElse'])) {
|
||||
$output .= $params['hasElse'];
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
}
|
59
system/libs/dwoo/plugins/builtin/blocks/smartyinterface.php
Normal file
59
system/libs/dwoo/plugins/builtin/blocks/smartyinterface.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Smarty compatibility layer for block plugins, this is used internally and you should not call it
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_smartyinterface extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init($__funcname, $__functype, array $rest=array()) {}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
$func = $params['__funcname'];
|
||||
$pluginType = $params['__functype'];
|
||||
$params = $params['*'];
|
||||
|
||||
if ($pluginType & Dwoo::CUSTOM_PLUGIN) {
|
||||
$customPlugins = $compiler->getDwoo()->getCustomPlugins();
|
||||
$callback = $customPlugins[$func]['callback'];
|
||||
if (is_array($callback)) {
|
||||
if (is_object($callback[0])) {
|
||||
$callback = '$this->customPlugins[\''.$func.'\'][0]->'.$callback[1].'(';
|
||||
} else {
|
||||
$callback = ''.$callback[0].'::'.$callback[1].'(';
|
||||
}
|
||||
} else {
|
||||
$callback = $callback.'(';
|
||||
}
|
||||
} else {
|
||||
$callback = 'smarty_block_'.$func.'(';
|
||||
}
|
||||
|
||||
$paramsOut = '';
|
||||
foreach ($params as $i=>$p) {
|
||||
$paramsOut .= var_export($i, true).' => '.$p.',';
|
||||
}
|
||||
|
||||
$curBlock =& $compiler->getCurrentBlock();
|
||||
$curBlock['params']['postOut'] = Dwoo_Compiler::PHP_OPEN.' $_block_content = ob_get_clean(); $_block_repeat=false; echo '.$callback.'$_tag_stack[count($_tag_stack)-1], $_block_content, $this, $_block_repeat); } array_pop($_tag_stack);'.Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
return Dwoo_Compiler::PHP_OPEN.$prepend.' if (!isset($_tag_stack)){ $_tag_stack = array(); } $_tag_stack[] = array('.$paramsOut.'); $_block_repeat=true; '.$callback.'$_tag_stack[count($_tag_stack)-1], null, $this, $_block_repeat); while ($_block_repeat) { ob_start();'.Dwoo_Compiler::PHP_CLOSE;
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
return $content . $params['postOut'];
|
||||
}
|
||||
}
|
50
system/libs/dwoo/plugins/builtin/blocks/strip.php
Normal file
50
system/libs/dwoo/plugins/builtin/blocks/strip.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Strips the spaces at the beginning and end of each line and also the line breaks
|
||||
* <pre>
|
||||
* * mode : sets the content being stripped, available mode are 'default' or 'js'
|
||||
* for javascript, which strips the comments to prevent syntax errors
|
||||
* </pre>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.1.0
|
||||
* @date 2009-07-18
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_strip extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init($mode = "default")
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
|
||||
$mode = trim($params['mode'], '"\'');
|
||||
switch ($mode) {
|
||||
case 'js':
|
||||
case 'javascript':
|
||||
$content = preg_replace('#(?<!:)//\s[^\r\n]*|/\*.*?\*/#s','', $content);
|
||||
|
||||
case 'default':
|
||||
default:
|
||||
}
|
||||
|
||||
$content = preg_replace(array("/\n/","/\r/",'/(<\?(?:php)?|<%)\s*/'), array('','','$1 '), preg_replace('#^\s*(.+?)\s*$#m', '$1', $content));
|
||||
|
||||
return $content;
|
||||
}
|
||||
}
|
88
system/libs/dwoo/plugins/builtin/blocks/template.php
Normal file
88
system/libs/dwoo/plugins/builtin/blocks/template.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Defines a sub-template that can then be called (even recursively) with the defined arguments
|
||||
* <pre>
|
||||
* * name : template name
|
||||
* * rest : list of arguments and optional default values
|
||||
* </pre>
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.1.0
|
||||
* @date 2009-07-18
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_template extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init($name, array $rest = array())
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$params = $compiler->getCompiledParams($params);
|
||||
$parsedParams = array();
|
||||
if (!isset($params['*']))
|
||||
$params['*'] = array();
|
||||
foreach ($params['*'] as $param=>$defValue) {
|
||||
if (is_numeric($param)) {
|
||||
$param = $defValue;
|
||||
$defValue = null;
|
||||
}
|
||||
$param = trim($param, '\'"');
|
||||
if (!preg_match('#^[a-z0-9_]+$#i', $param)) {
|
||||
throw new Dwoo_Compilation_Exception($compiler, 'Function : parameter names must contain only A-Z, 0-9 or _');
|
||||
}
|
||||
$parsedParams[$param] = $defValue;
|
||||
}
|
||||
$params['name'] = substr($params['name'], 1, -1);
|
||||
$params['*'] = $parsedParams;
|
||||
$params['uuid'] = uniqid();
|
||||
$compiler->addTemplatePlugin($params['name'], $parsedParams, $params['uuid']);
|
||||
$currentBlock =& $compiler->getCurrentBlock();
|
||||
$currentBlock['params'] = $params;
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$paramstr = 'Dwoo $dwoo';
|
||||
$init = 'static $_callCnt = 0;'."\n".
|
||||
'$dwoo->scope[\' '.$params['uuid'].'\'.$_callCnt] = array();'."\n".
|
||||
'$_scope = $dwoo->setScope(array(\' '.$params['uuid'].'\'.($_callCnt++)));'."\n";
|
||||
$cleanup = '/* -- template end output */ $dwoo->setScope($_scope, true);';
|
||||
foreach ($params['*'] as $param=>$defValue) {
|
||||
if ($defValue === null) {
|
||||
$paramstr.=', $'.$param;
|
||||
} else {
|
||||
$paramstr.=', $'.$param.' = '.$defValue;
|
||||
}
|
||||
$init .= '$dwoo->scope[\''.$param.'\'] = $'.$param.";\n";
|
||||
}
|
||||
$init .= '/* -- template start output */';
|
||||
|
||||
$funcName = 'Dwoo_Plugin_'.$params['name'].'_'.$params['uuid'];
|
||||
|
||||
$search = array(
|
||||
'$this->charset',
|
||||
'$this->',
|
||||
'$this,',
|
||||
);
|
||||
$replacement = array(
|
||||
'$dwoo->getCharset()',
|
||||
'$dwoo->',
|
||||
'$dwoo,',
|
||||
);
|
||||
$content = str_replace($search, $replacement, $content);
|
||||
|
||||
$body = 'if (!function_exists(\''.$funcName."')) {\nfunction ".$funcName.'('.$paramstr.') {'."\n$init".Dwoo_Compiler::PHP_CLOSE.
|
||||
$prepend.$content.$append.
|
||||
Dwoo_Compiler::PHP_OPEN.$cleanup."\n}\n}";
|
||||
$compiler->addTemplatePlugin($params['name'], $params['*'], $params['uuid'], $body);
|
||||
}
|
||||
}
|
94
system/libs/dwoo/plugins/builtin/blocks/textformat.php
Normal file
94
system/libs/dwoo/plugins/builtin/blocks/textformat.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Formats a string to the given format, you can wrap lines at a certain
|
||||
* length and indent them
|
||||
* <pre>
|
||||
* * wrap : maximum line length
|
||||
* * wrap_char : the character(s) to use to break the line
|
||||
* * wrap_cut : if true, the words that are longer than $wrap are cut instead of overflowing
|
||||
* * indent : amount of $indent_char to insert before every line
|
||||
* * indent_char : character(s) to insert before every line
|
||||
* * indent_first : amount of additional $indent_char to insert before the first line of each paragraphs
|
||||
* * style : some predefined formatting styles that set up every required variables, can be "email" or "html"
|
||||
* * assign : if set, the formatted text is assigned to that variable instead of being output
|
||||
* </pre>
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_textformat extends Dwoo_Block_Plugin
|
||||
{
|
||||
protected $wrap;
|
||||
protected $wrapChar;
|
||||
protected $wrapCut;
|
||||
protected $indent;
|
||||
protected $indChar;
|
||||
protected $indFirst;
|
||||
protected $assign;
|
||||
|
||||
public function init($wrap=80, $wrap_char="\r\n", $wrap_cut=false, $indent=0, $indent_char=" ", $indent_first=0, $style="", $assign="")
|
||||
{
|
||||
if ($indent_char === 'tab') {
|
||||
$indent_char = "\t";
|
||||
}
|
||||
|
||||
switch($style) {
|
||||
|
||||
case 'email':
|
||||
$wrap = 72;
|
||||
$indent_first = 0;
|
||||
break;
|
||||
case 'html':
|
||||
$wrap_char = '<br />';
|
||||
$indent_char = $indent_char == "\t" ? ' ':' ';
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
$this->wrap = (int) $wrap;
|
||||
$this->wrapChar = (string) $wrap_char;
|
||||
$this->wrapCut = (bool) $wrap_cut;
|
||||
$this->indent = (int) $indent;
|
||||
$this->indChar = (string) $indent_char;
|
||||
$this->indFirst = (int) $indent_first + $this->indent;
|
||||
$this->assign = (string) $assign;
|
||||
}
|
||||
|
||||
public function process()
|
||||
{
|
||||
// gets paragraphs
|
||||
$pgs = explode("\n", str_replace(array("\r\n", "\r"), "\n", $this->buffer));
|
||||
|
||||
while (list($i,) = each($pgs)) {
|
||||
if (empty($pgs[$i])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// removes line breaks and extensive white space
|
||||
$pgs[$i] = preg_replace(array('#\s+#', '#^\s*(.+?)\s*$#m'), array(' ', '$1'), str_replace("\n", '', $pgs[$i]));
|
||||
|
||||
// wordwraps + indents lines
|
||||
$pgs[$i] = str_repeat($this->indChar, $this->indFirst) .
|
||||
wordwrap(
|
||||
$pgs[$i],
|
||||
max($this->wrap - $this->indent, 1),
|
||||
$this->wrapChar . str_repeat($this->indChar, $this->indent),
|
||||
$this->wrapCut
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->assign !== '') {
|
||||
$this->dwoo->assignInScope(implode($this->wrapChar . $this->wrapChar, $pgs), $this->assign);
|
||||
} else {
|
||||
return implode($this->wrapChar . $this->wrapChar, $pgs);
|
||||
}
|
||||
}
|
||||
}
|
32
system/libs/dwoo/plugins/builtin/blocks/topLevelBlock.php
Normal file
32
system/libs/dwoo/plugins/builtin/blocks/topLevelBlock.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Internal plugin used to wrap the template output, do not use in your templates as it will break them
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
final class Dwoo_Plugin_topLevelBlock extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
return '/* end template head */ ob_start(); /* template body */ '.Dwoo_Compiler::PHP_CLOSE;
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
return $content . Dwoo_Compiler::PHP_OPEN.' /* end template body */'."\n".'return $this->buffer . ob_get_clean();';
|
||||
}
|
||||
}
|
76
system/libs/dwoo/plugins/builtin/blocks/with.php
Normal file
76
system/libs/dwoo/plugins/builtin/blocks/with.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Moves the scope down into the provided variable, allowing you to use shorter
|
||||
* variable names if you repeatedly access values into a single array
|
||||
*
|
||||
* The with block won't display anything at all if the provided scope is empty,
|
||||
* so in effect it acts as {if $var}*content*{/if}
|
||||
* <pre>
|
||||
* * var : the variable name to move into
|
||||
* </pre>
|
||||
* Example :
|
||||
*
|
||||
* instead of the following :
|
||||
*
|
||||
* <code>
|
||||
* {if $long.boring.prefix}
|
||||
* {$long.boring.prefix.val} - {$long.boring.prefix.secondVal} - {$long.boring.prefix.thirdVal}
|
||||
* {/if}
|
||||
* </code>
|
||||
*
|
||||
* you can use :
|
||||
*
|
||||
* <code>
|
||||
* {with $long.boring.prefix}
|
||||
* {$val} - {$secondVal} - {$thirdVal}
|
||||
* {/with}
|
||||
* </code>
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_with extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block, Dwoo_IElseable
|
||||
{
|
||||
protected static $cnt=0;
|
||||
|
||||
public function init($var)
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
$rparams = $compiler->getRealParams($params);
|
||||
$cparams = $compiler->getCompiledParams($params);
|
||||
|
||||
$compiler->setScope($rparams['var']);
|
||||
|
||||
|
||||
$pre = Dwoo_Compiler::PHP_OPEN. 'if ('.$cparams['var'].')'."\n{\n".
|
||||
'$_with'.(self::$cnt).' = $this->setScope("'.$rparams['var'].'");'.
|
||||
"\n/* -- start with output */\n".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
$post = Dwoo_Compiler::PHP_OPEN. "\n/* -- end with output */\n".
|
||||
'$this->setScope($_with'.(self::$cnt++).', true);'.
|
||||
"\n}\n".Dwoo_Compiler::PHP_CLOSE;
|
||||
|
||||
if (isset($params['hasElse'])) {
|
||||
$post .= $params['hasElse'];
|
||||
}
|
||||
|
||||
return $pre . $content . $post;
|
||||
}
|
||||
}
|
43
system/libs/dwoo/plugins/builtin/blocks/withelse.php
Normal file
43
system/libs/dwoo/plugins/builtin/blocks/withelse.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This plugin serves as a {else} block specifically for the {with} plugin.
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
*
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @copyright Copyright (c) 2008, Jordi Boggiano
|
||||
* @license http://dwoo.org/LICENSE Modified BSD License
|
||||
* @link http://dwoo.org/
|
||||
* @version 1.0.0
|
||||
* @date 2008-10-23
|
||||
* @package Dwoo
|
||||
*/
|
||||
class Dwoo_Plugin_withelse extends Dwoo_Block_Plugin implements Dwoo_ICompilable_Block
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
}
|
||||
|
||||
public static function preProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $type)
|
||||
{
|
||||
$with =& $compiler->findBlock('with', true);
|
||||
|
||||
$params['initialized'] = true;
|
||||
$compiler->injectBlock($type, $params);
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public static function postProcessing(Dwoo_Compiler $compiler, array $params, $prepend, $append, $content)
|
||||
{
|
||||
if (!isset($params['initialized'])) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$block =& $compiler->getCurrentBlock();
|
||||
$block['params']['hasElse'] = Dwoo_Compiler::PHP_OPEN."else {\n".Dwoo_Compiler::PHP_CLOSE . $content . Dwoo_Compiler::PHP_OPEN."\n}".Dwoo_Compiler::PHP_CLOSE;
|
||||
return '';
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user