Add new directory structure. Tags will contain current and past releases, and stable will contain any bug fixes to the current stable release so users won't have to get the potentially broken trunk build to fix a screwup in stable.
Trunk updated to 0.9 git-svn-id: http://kusabax.cultnet.net/svn/repo/stable@176 73d99b7e-4f53-4972-b7b7-2ecd3c4d89ee
This commit is contained in:
commit
88bacfad9c
316 files changed
+79806
No files matched your search
@@ -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>';
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?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)
|
||||
{
|
||||
return preg_replace_callback('/<dwoo:dynamic_('.$dynamicId.')>(.+?)<\/dwoo:dynamic_'.$dynamicId.'>/', array('self', 'unescapePhp'), $output);
|
||||
}
|
||||
|
||||
public static function unescapePhp($match)
|
||||
{
|
||||
return preg_replace('{<\?php /\*'.$match[1].'\*/ echo \'(.+?)\'; \?>}', '$1', $match[2]);
|
||||
}
|
||||
}
|
||||
@@ -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 '';
|
||||
}
|
||||
}
|
||||
@@ -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 '';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
<?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.0.0
|
||||
* @date 2008-10-23
|
||||
* @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;
|
||||
|
||||
// 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;
|
||||
}';
|
||||
// reverse from and to if needed
|
||||
$out .= "\n\t".'if ($_for'.$cnt.'_from > $_for'.$cnt.'_to) {
|
||||
$tmp = $_for'.$cnt.'_from;
|
||||
$_for'.$cnt.'_from = $_for'.$cnt.'_to;
|
||||
$_for'.$cnt.'_to = $tmp;
|
||||
}
|
||||
for ($this->scope['.$name.'] = $_for'.$cnt.'_from; $this->scope['.$name.'] <= $_for'.$cnt.'_to; $this->scope['.$name.'] += $_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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
<?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.0.1
|
||||
* @date 2008-12-24
|
||||
* @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;
|
||||
|
||||
// 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, 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' : '').') === 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;
|
||||
}
|
||||
}
|
||||
@@ -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 '';
|
||||
}
|
||||
}
|
||||
@@ -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 '';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Conditional block, the syntax is very similar to the php one, allowing () || && and
|
||||
* other php operators. Additional operators && their equivalent php syntax are as follow :
|
||||
*
|
||||
* eq -> ==
|
||||
* neq || ne -> !=
|
||||
* >= || ge -> >=
|
||||
* <= || le -> <=
|
||||
* > -> >
|
||||
* < -> <
|
||||
* mod -> %
|
||||
* not -> !
|
||||
* X is [not] div by Y -> (X % Y) == 0
|
||||
* X is [not] even [by Y] -> (X % 2) == 0 || ((X/Y) % 2) == 0
|
||||
* X is [not] odd [by Y] -> (X % 2) != 0 || ((X/Y) % 2) != 0
|
||||
*
|
||||
* This software is provided 'as-is', without any express || 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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<?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.0.0
|
||||
* @date 2008-10-23
|
||||
* @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;
|
||||
|
||||
// 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, 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' : '').') === 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
<?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'];
|
||||
$paramsOut = '';
|
||||
if(isset($params['*'])) {
|
||||
$params = $params['*'];
|
||||
foreach ($params as $i=>$p) {
|
||||
$paramsOut .= var_export($i, true).' => '.$p.',';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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.'(';
|
||||
}
|
||||
|
||||
$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'];
|
||||
}
|
||||
}
|
||||
@@ -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.0.0
|
||||
* @date 2008-10-23
|
||||
* @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]*|/\*.*?\*/#','', $content);
|
||||
|
||||
case 'default':
|
||||
default:
|
||||
}
|
||||
|
||||
$content = preg_replace(array("/\n/","/\r/",'/(<\?(?:php)?|<%)\s*/'), array('','','$1 '), preg_replace('#^\s*(.+?)\s*$#m', '$1', $content));
|
||||
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 '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();';
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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