issue 512 : Template engine does not handle <marquee> from now.

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@9691 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
taggon 2011-10-20 03:07:39 +00:00
parent 8ef97b7618
commit 59b7ce4d96
2 changed files with 22 additions and 4 deletions

View file

@ -18,6 +18,7 @@
var $xe_path = null; ///< XpressEngine base path
var $web_path = null; ///< tpl file web path
var $compiled_file = null; ///< tpl file web path
var $skipTags = null;
var $handler_mtime = 0;
@ -74,6 +75,8 @@
// compare various file's modified time for check changed
$this->handler_mtime = filemtime(__FILE__);
$skip = array('');
}
/**
@ -169,6 +172,11 @@
$buff = FileHandler::readFile($this->file);
}
// HTML tags to skip
if(is_null($this->skipTags)) {
$this->skipTags = array('marquee');
}
// replace comments
$buff = preg_replace('@<!--//.*?-->@s', '', $buff);
@ -297,7 +305,11 @@
{
if(preg_match_all('/<([a-zA-Z]+\d?)(?>(?!<[a-z]+\d?[\s>]).)*?(?:[ \|]cond| loop)="/s', $buff, $match) === false) return $buff;
$tags = '(?:'.implode('|',array_unique($match[1])).')';
$tags = array_diff(array_unique($match[1]), $this->skipTags);
if(!count($tags)) return $buff;
$tags = '(?:'.implode('|',$tags).')';
$split_regex = "@(<(?>/?{$tags})(?>[^<>\{\}\"']+|<!--.*?-->|{[^}]+}|\".*?\"|'.*?'|.)*?>)@s";
$nodes = preg_split($split_regex, $buff, -1, PREG_SPLIT_DELIM_CAPTURE);
@ -309,6 +321,10 @@
if(!($node=$nodes[$idx])) continue;
if(preg_match_all('@\s(loop|cond)="([^"]+)"@', $node, $matches)) {
// this tag
$tag = substr($node, 1, strpos($node, ' ')-1);
// if the vale of $closing is 0, it means 'skipping'
$closing = 0;
// process opening tag
@ -338,9 +354,6 @@
}
$node = preg_replace('@\s(loop|cond)="([^"]+)"@', '', $node);
// this tag
$tag = substr($node, 1, strpos($node, ' ')-1);
// find closing tag
$close_php = '<?php '.str_repeat('}', $closing).' ?>';
if($node{1} == '!' || substr($node,-2,1) == '/' || in_array($tag, $self_closing)) { // self closing tag

View file

@ -209,6 +209,11 @@ class TemplateHandlerTest extends PHPUnit_Framework_TestCase
'<table><thead><tr><th loop="$vvvls => $vvv">{$vvv}</th></tr></thead>'."\n".'<tbody><tr><td>C</td><td>D</td></tr></tbody></table>',
'<table><thead><tr><?php if($__Context->vvvls&&count($__Context->vvvls))foreach($__Context->vvvls as $__Context->vvv){ ?><th><?php echo $__Context->vvv ?></th><?php } ?></tr></thead>'."\n".'<tbody><tr><td>C</td><td>D</td></tr></tbody></table>'
),
// issue 512 - ignores <marquee>
array(
'<div class="topimgContex"><marquee direction="up" scrollamount="1" height="130" loop="infinity" behavior="lscro">{$lang->sl_show_topimgtext}</marquee></div>',
'<div class="topimgContex"><marquee direction="up" scrollamount="1" height="130" loop="infinity" behavior="lscro"><?php echo $__Context->lang->sl_show_topimgtext ?></marquee></div>'
),
);
}