From 45a8b5676a8d59ff21a0bcdab5ecf126ae30ed73 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Fri, 07 Feb 2014 07:29:03 -0500
Subject: [PATCH] Improved tpl class from master
---
server/lib/classes/tpl.inc.php | 80 ++++++++++++++-------------------------
1 files changed, 29 insertions(+), 51 deletions(-)
diff --git a/server/lib/classes/tpl.inc.php b/server/lib/classes/tpl.inc.php
index 6dc4913..2a91b06 100644
--- a/server/lib/classes/tpl.inc.php
+++ b/server/lib/classes/tpl.inc.php
@@ -932,7 +932,7 @@
$regex = '/(<|<\/|{|{\/|<!--|<!--\/){1}\s*';
$regex.= 'tmpl_([\w]+)\s*';
- $regex.= '(?:';
+ $regex.= '((?:(?:';
$regex.= '(?:';
$regex.= '(name|format|escape|op|value|file)';
$regex.= '\s*=\s*';
@@ -941,40 +941,9 @@
$regex.= '((?<=[\"\'])';
$regex.= '[^\"\']*|[a-z0-9_\.]*)';
$regex.= '[\"\']?';
- $regex.= ')?\s*';
- $regex.= '(?:';
- $regex.= '(?:';
- $regex.= '(name|format|escape|op|value)';
- $regex.= '\s*=\s*';
- $regex.= ')';
- $regex.= '(?:[\"\'])?';
- $regex.= '((?<=[\"\'])';
- $regex.= '[^\"\']*|[a-z0-9_\.]*)';
- $regex.= '[\"\']?';
- $regex.= ')?\s*';
- $regex.= '(?:';
- $regex.= '(?:';
- $regex.= '(name|format|escape|op|value)';
- $regex.= '\s*=\s*';
- $regex.= ')';
- $regex.= '(?:[\"\'])?';
- $regex.= '((?<=[\"\'])';
- $regex.= '[^\"\']*|[a-z0-9_\.]*)';
- $regex.= '[\"\']?';
- $regex.= ')?\s*';
- $regex.= '(?:';
- $regex.= '(?:';
- $regex.= '(name|format|escape|op|value)';
- $regex.= '\s*=\s*';
- $regex.= ')';
- $regex.= '(?:[\"\'])?';
- $regex.= '((?<=[\"\'])';
- $regex.= '[^\"\']*|[a-z0-9_\.]*)';
- $regex.= '[\"\']?';
- $regex.= ')?\s*';
+ $regex.= ')?\s*)*?)';
$regex.= '(?:>|\/>|}|-->){1}';
$regex.= '/i';
- //$regex.= '([\r\n|\n|\r])?/ie';
$data = preg_replace_callback($regex, array($this, '_parseTag'), $data);
if ($this->_cache) { // add cache if need be
@@ -1300,28 +1269,37 @@
$wholetag = $args[0];
$openclose = $args[1];
$tag = strtolower($args[2]);
- $newline = $args[11];
- //echo "1#$newline#2";
-
- if ($tag == 'else') return '<?php } else { ?>'.$newline;
+
+ if ($tag == 'else') return '<?php } else { ?>';
if ($tag == 'tmpl_include') return $wholetag; // ignore tmpl_include tags
if (preg_match("/^<\/|{\/|<!--\/$/s", $openclose) || preg_match("/^end[if|loop|unless|comment]$/", $tag)) {
if ($tag == 'loop' || $tag == 'endloop') array_pop($this->_namespace);
if ($tag == 'comment' || $tag == 'endcomment') {
- return '<?php */ ?>'.$newline;
+ return '<?php */ ?>';
}
else {
- return '<?php } ?>'.$newline;
+ return '<?php } ?>';
}
}
// arrange attributes
- for ($i=3; $i < 10; $i=($i+2)) {
- if (empty($args[$i]) && empty($args[($i+1)])) break;
- $key = (empty($args[$i])) ? 'name' : strtolower($args[$i]);
- if ($key == 'name' && preg_match('/^(php)?include$/', $tag)) $key = 'file';
- $$key = $args[($i+1)];
+ $tmp_atts = $args[3];
+ $atts = preg_split('/\s+/', $tmp_atts);
+ foreach($atts as $att) {
+ $regex = '/(?:';
+ $regex.= '(name|format|escape|op|value|file)';
+ $regex.= '\s*=\s*';
+ $regex.= ')?';
+ $regex.= '(?:[\"\'])?';
+ $regex.= '((?<=[\"\'])';
+ $regex.= '[^\"\']*|[a-z0-9_\.]*)';
+ $regex.= '[\"\']?/';
+ if(preg_match($regex, $att, $match)) {
+ $key = (empty($match[1])) ? 'name' : strtolower($match[1]);
+ if ($key == 'name' && preg_match('/^(php)?include$/', $tag)) $key = 'file';
+ $$key = $match[2];
+ }
}
$var = ($this->OPTIONS['CASELESS']) ? strtolower($name) : $name;
@@ -1345,28 +1323,28 @@
if (empty($escape) && (!empty($this->OPTIONS['DEFAULT_ESCAPE']) && strtolower($this->OPTIONS['DEFAULT_ESCAPE']) != 'none')) {
$escape = strtolower($this->OPTIONS['DEFAULT_ESCAPE']);
}
- return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace).' ?>'.$newline."\n";
+ return '<?php '.$this->_parseVar ($wholetag, $tag, $var, @$escape, @$format, @$namespace).' ?>'."\n";
break;
case 'if':
- return '<?php if ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>'.$newline;
+ return '<?php if ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
break;
case 'unless':
- return '<?php if (!'. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>'.$newline;
+ return '<?php if (!'. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
break;
case 'elseif':
- return '<?php } elseif ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>'.$newline;
+ return '<?php } elseif ('. $this->_parseIf($var, @$value, @$op, @$namespace, @$format) .') { ?>';
break;
case 'loop':
- return '<?php '. $this->_parseLoop($var) .'?>'.$newline;
+ return '<?php '. $this->_parseLoop($var) .'?>';
break;
case 'comment':
if (empty($var)) { // full open/close style comment
- return '<?php /* ?>'.$newline;
+ return '<?php /* ?>';
}
else { // just ignore tag if it was a one line comment
return;
@@ -1375,7 +1353,7 @@
case 'phpinclude':
if ($this->OPTIONS['ENABLE_PHPINCLUDE']) {
- return '<?php include(\''.$file.'\'); ?>'.$newline;
+ return '<?php include(\''.$file.'\'); ?>';
}
break;
--
Gitblit v1.9.1