diff options
Diffstat (limited to 'vendor/smarty')
-rw-r--r-- | vendor/smarty/smarty/CHANGELOG.md | 3443 | ||||
-rw-r--r-- | vendor/smarty/smarty/lexer/smarty_internal_configfilelexer.plex | 318 | ||||
-rw-r--r-- | vendor/smarty/smarty/lexer/smarty_internal_configfileparser.y | 346 | ||||
-rw-r--r-- | vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex | 696 | ||||
-rw-r--r-- | vendor/smarty/smarty/lexer/smarty_internal_templateparser.y | 1271 |
5 files changed, 0 insertions, 6074 deletions
diff --git a/vendor/smarty/smarty/CHANGELOG.md b/vendor/smarty/smarty/CHANGELOG.md deleted file mode 100644 index 7eb151bf8..000000000 --- a/vendor/smarty/smarty/CHANGELOG.md +++ /dev/null @@ -1,3443 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] - -## [3.1.36] - 2020-04-14 - -### Fixed - - Smarty::SMARTY_VERSION wasn't updated in v3.1.35 https://github.com/smarty-php/smarty/issues/584 - -## [3.1.35] - 2020-04-14 - - remove whitespaces after comments https://github.com/smarty-php/smarty/issues/447 - - fix foreachelse on arrayiterators https://github.com/smarty-php/smarty/issues/506 - - fix files contained in git export archive for package maintainers https://github.com/smarty-php/smarty/issues/325 - - throw SmartyException when setting caching attributes for cacheable plugin https://github.com/smarty-php/smarty/issues/457 - - fix errors that occured where isset was replaced with null check such as https://github.com/smarty-php/smarty/issues/453 - - unit tests are now in the repository - -## 3.1.34 release - 05.11.2019 -13.01.2020 - - fix typo in exception message (JercSi) - - fix typehint warning with callable (bets4breakfast) - - add travis badge and compatability info to readme (matks) - - fix stdClass cast when compiling foreach (carpii) - - fix wrong set/get methods for memcached (IT-Experte) - - fix pborm assigning value to object variables in smarty_internal_compile_assign (Hunman) - - exclude error_reporting.ini from git export (glensc) - -## 3.1.34-dev-6 - -30.10.2018 - - bugfix a nested subblock in an inheritance child template was not replace by - outer level block with same name in same child template https://github.com/smarty-php/smarty/issues/500 - -29.10.2018 - - bugfix Smarty::$php_handling == PHP_PASSTHRU (default) did eat the "\n" (newline) character if it did directly followed - a PHP tag like "?>" or other https://github.com/smarty-php/smarty/issues/501 - -14.10.2018 - - bugfix autoloader exit shortcut https://github.com/smarty-php/smarty/issues/467 - -11.10.2018 - - bugfix {insert} not works when caching is enabled and included template is present - https://github.com/smarty-php/smarty/issues/496 - - bugfix in date-format modifier; NULL at date string or default_date did not produce correct output - https://github.com/smarty-php/smarty/pull/458 - -09.10.2018 - - bugfix fix of 26.8.2017 https://github.com/smarty-php/smarty/issues/327 - modifier is applied to sum expression https://github.com/smarty-php/smarty/issues/491 - - bugfix indexed arrays could not be defined "array(...)"" - -18.09.2018 - - bugfix large plain text template sections without a Smarty tag > 700kB could - could fail in version 3.1.32 and 3.1.33 because PHP preg_match() restrictions - https://github.com/smarty-php/smarty/issues/488 - -## 3.1.33 release - 12.09.2018 -## 3.1.33-dev-12 - -03.09.2018 - - bugfix {foreach} using new style property access like {$item@property} on - Smarty 2 style named foreach loop could produce errors https://github.com/smarty-php/smarty/issues/484 - -31.08.2018 - - bugfix some custom left and right delimiters like '{^' '^}' did not work - https://github.com/smarty-php/smarty/issues/450 https://github.com/smarty-php/smarty/pull/482 - - - reformating for PSR-2 coding standards https://github.com/smarty-php/smarty/pull/483 - - - bugfix on Windows absolute filepathes did fail if the drive letter was followed by a linux DIRECTORY_SEPARATOR - like C:/ at Smarty > 3.1.33-dev-5 https://github.com/smarty-php/smarty/issues/451 - - - PSR-2 code style fixes for config and template file Lexer/Parser generated with - the Smarty Lexer/Parser generator from https://github.com/smarty-php/smarty-lexer - https://github.com/smarty-php/smarty/pull/483 - -26.08.2018 - - bugfix/enhancement {capture} allow variable as capture block name in Smarty special variable - like $smarty.capture.$foo https://github.com/smarty-php/smarty/issues/478 https://github.com/smarty-php/smarty/pull/481 - -## 3.1.33-dev-6 - -19.08.2018 - - fix PSR-2 coding standards and PHPDoc blocks https://github.com/smarty-php/smarty/pull/452 - https://github.com/smarty-php/smarty/pull/475 - https://github.com/smarty-php/smarty/pull/473 - - bugfix PHP5.2 compatibility https://github.com/smarty-php/smarty/pull/472 - -## 3.1.33-dev-4 - -17.05.2018 - - bugfix strip-block produces different output in Smarty v3.1.32 https://github.com/smarty-php/smarty/issues/436 - - bugfix Smarty::compileAllTemplates ignores `$extension` parameter https://github.com/smarty-php/smarty/issues/437 - https://github.com/smarty-php/smarty/pull/438 - - improvement do not compute total property in {foreach} if not needed https://github.com/smarty-php/smarty/issues/443 - - bugfix plugins may not be loaded when setMergeCompiledIncludes is true https://github.com/smarty-php/smarty/issues/435 - -26.04.2018 - - bugfix regarding Security Vulnerability did not solve the problem under Linux. - Security issue CVE-2018-16831 - -## 3.1.32 - (24.04.2018) -24.04.2018 - - bugfix possible Security Vulnerability in Smarty_Security class. - -26.03.2018 - - bugfix plugins may not be loaded if {function} or {block} tags are executed in nocache mode - https://github.com/smarty-php/smarty/issues/371 - -26.03.2018 - - new feature {parent} = {$smarty.block.parent} {child} = {$smarty.block.child} - -23.03.2018 - - bugfix preg_replace could fail on large content resulting in a blank page https://github.com/smarty-php/smarty/issues/417 - -21.03.2018 - - bugfix {$smarty.section...} used outside {section}{/section} showed incorrect values if {section}{/section} was called inside - another loop https://github.com/smarty-php/smarty/issues/422 - - bugfix short form of {section} attributes did not work https://github.com/smarty-php/smarty/issues/428 - -17.03.2018 - - improvement Smarty::compileAllTemplates() exit with a non-zero status code if max errors is reached https://github.com/smarty-php/smarty/pull/402 - -16.03.2018 - - bugfix extends resource did not work with user defined left/right delimiter https://github.com/smarty-php/smarty/issues/419 - -22.11.2017 - - bugfix {break} and {continue} could fail if {foreach}{/foreach} did contain other - looping tags like {for}, {section} and {while} https://github.com/smarty-php/smarty/issues/323 - -20.11.2017 - - bugfix rework of newline spacing between tag code and template text. - now again identical with Smarty2 (forum topic 26878) - - replacement of " by ' - -05.11.2017 - - lexer/parser optimization - - code cleanup and optimizations - - bugfix {$smarty.section.name.loop} used together with {$smarty.section.name.total} could produce - wrong results (forum topic 27041) - -26.10.2017 - - bugfix Smarty version was not filled in header comment of compiled and cached files - - optimization replace internal Smarty::$ds property by DIRECTORY_SEPARATOR - - deprecate functions Smarty::muteExpectedErrors() and Smarty::unmuteExpectedErrors() - as Smarty does no longer use error suppression like @filemtime(). - for backward compatibility code is moved from Smarty class to an external class and still can be - called. - - correction of PHPDoc blocks - - minor code cleanup - -21.10.2017 - - bugfix custom delimiters could fail since modification of version 3.1.32-dev-23 - https://github.com/smarty-php/smarty/issues/394 - -18.10.2017 - - bugfix fix implementation of unclosed block tag in double quoted string of 12.10.2017 - https://github.com/smarty-php/smarty/issues/396 https://github.com/smarty-php/smarty/issues/397 - https://github.com/smarty-php/smarty/issues/391 https://github.com/smarty-php/smarty/issues/392 - -12.10.2017 - - bugfix $smarty.block.child and $smarty.block.parent could not be used like any - $smarty special variable https://github.com/smarty-php/smarty/issues/393 - - unclosed block tag in double quoted string must throw compiler exception. - https://github.com/smarty-php/smarty/issues/391 https://github.com/smarty-php/smarty/issues/392 - -07.10.2017 - - bugfix modification of 9.8.2017 did fail on some recursive - tag nesting. https://github.com/smarty-php/smarty/issues/389 - -26.8.2017 - - bugfix chained modifier failed when last modifier parameter is a signed value - https://github.com/smarty-php/smarty/issues/327 - - bugfix templates filepath with multibyte characters did not work - https://github.com/smarty-php/smarty/issues/385 - - bugfix {make_nocache} did display code if the template did not contain other nocache code - https://github.com/smarty-php/smarty/issues/369 - -09.8.2017 - - improvement repeated delimiter like {{ and }} will be treated as literal - https://groups.google.com/forum/#!topic/smarty-developers/h9r82Bx4KZw - -05.8.2017 - - bugfix wordwrap modifier could fail if used in nocache code. - converted plugin file shared.mb_wordwrap.php into modifier.mb_wordwrap.php - - cleanup of _getSmartyObj() - -31.7.2017 - - Call clearstatcache() after mkdir() failure https://github.com/smarty-php/smarty/pull/379 - -30.7.2017 - - rewrite mkdir() bugfix to retry automatically see https://github.com/smarty-php/smarty/pull/377 - https://github.com/smarty-php/smarty/pull/379 - -21.7.2017 - - security possible PHP code injection on custom resources at display() or fetch() - calls if the resource does not sanitize the template name - - bugfix fix 'mkdir(): File exists' error on create directory from parallel - processes https://github.com/smarty-php/smarty/pull/377 - - bugfix solve preg_match() hhvm parameter problem https://github.com/smarty-php/smarty/pull/372 - -27.5.2017 - - bugfix change compiled code for registered function and modifiers to called as callable to allow closures - https://github.com/smarty-php/smarty/pull/368, https://github.com/smarty-php/smarty/issues/273 - - bugfix https://github.com/smarty-php/smarty/pull/368 did break the default plugin handler - - improvement replace phpversion() by PHP_VERSION constant. - https://github.com/smarty-php/smarty/pull/363 - -21.5.2017 - - performance store flag for already required shared plugin functions in static variable or - Smarty's $_cache to improve performance when plugins are often called - https://github.com/smarty-php/smarty/commit/51e0d5cd405d764a4ea257d1bac1fb1205f74528#commitcomment-22280086 - - bugfix remove special treatment of classes implementing ArrayAccess in {foreach} - https://github.com/smarty-php/smarty/issues/332 - - bugfix remove deleted files by clear_cache() and clear_compiled_template() from - ACP cache if present, add some is_file() checks to avoid possible warnings on filemtime() - caused by above functions. - https://github.com/smarty-php/smarty/issues/341 - - bugfix version 3.1.31 did fail under PHP 5.2 - https://github.com/smarty-php/smarty/issues/365 - -19.5.2017 - - change properties $accessMap and $obsoleteProperties from private to protected - https://github.com/smarty-php/smarty/issues/351 - - new feature The named capture buffers can now be accessed also as array - See NEWS_FEATURES.txt https://github.com/smarty-php/smarty/issues/366 - - improvement check if ini_get() and ini_set() not disabled - https://github.com/smarty-php/smarty/pull/362 - -24.4.2017 - - fix spelling https://github.com/smarty-php/smarty/commit/e3eda8a5f5653d8abb960eb1bc47e3eca679b1b4#commitcomment-21803095 - -17.4.2017 - - correct generated code on empty() and isset() call, observe change PHP behaviour since PHP 5.5 - https://github.com/smarty-php/smarty/issues/347 - -14.4.2017 - - merge pull requests https://github.com/smarty-php/smarty/pull/349, https://github.com/smarty-php/smarty/pull/322 and https://github.com/smarty-php/smarty/pull/337 to fix spelling and annotation - -13.4.2017 - - bugfix array_merge() parameter should be checked https://github.com/smarty-php/smarty/issues/350 - -## 3.1.31 - (14.12.2016) - 23.11.2016 - - move template object cache into static variables - - 19.11.2016 - - bugfix inheritance root child templates containing nested {block}{/block} could call sub-bock content from parent - template https://github.com/smarty-php/smarty/issues/317 - - change version checking - - 11.11.2016 - - bugfix when Smarty is using a cached template object on Smarty::fetch() or Smarty::isCached() the inheritance data - must be removed https://github.com/smarty-php/smarty/issues/312 - - smaller speed optimization - - 08.11.2016 - - add bootstrap file to load and register Smarty_Autoloader. Change composer.json to make it known to composer - - 07.11.2016 - - optimization of lexer speed https://github.com/smarty-php/smarty/issues/311 - - 27.10.2016 - - bugfix template function definitions array has not been cached between Smarty::fetch() and Smarty::display() calls - https://github.com/smarty-php/smarty/issues/301 - - 23.10.2016 - - improvement/bugfix when Smarty::fetch() is called on a template object the inheritance and tplFunctions property - should be copied to the called template object - - 21.10.2016 - - bugfix for compile locking touched timestamp of old compiled file was not restored on compilation error https://github.com/smarty-php/smarty/issues/308 - - 20.10.2016 - - bugfix nocache code was not removed in cache file when subtemplate did contain PHP short tags in text but no other - nocache code https://github.com/smarty-php/smarty/issues/300 - - 19.10.2016 - - bugfix {make_nocache $var} did fail when variable value did contain '\' https://github.com/smarty-php/smarty/issues/305 - - bugfix {make_nocache $var} remove spaces from variable value https://github.com/smarty-php/smarty/issues/304 - - 12.10.2016 - - bugfix {include} with template names including variable or constants could fail after bugfix from - 28.09.2016 https://github.com/smarty-php/smarty/issues/302 - - 08.10.2016 - - optimization move runtime extension for template functions into Smarty objects - - 29.09.2016 - - improvement new Smarty::$extends_recursion property to disable execution of {extends} in templates called by extends resource - https://github.com/smarty-php/smarty/issues/296 - - 28.09.2016 - - bugfix the generated code for calling a subtemplate must pass the template resource name in single quotes https://github.com/smarty-php/smarty/issues/299 - - bugfix nocache hash was not removed for <?xml ?> tags in subtemplates https://github.com/smarty-php/smarty/issues/300 - - 27.09.2016 - - bugfix when Smarty does use an internally cached template object on Smarty::fetch() calls - the template and config variables must be cleared https://github.com/smarty-php/smarty/issues/297 - - 20.09.2016 - - bugfix some $smarty special template variables are no longer accessed as real variable. - using them on calls like {if isset($smarty.foo)} or {if empty($smarty.foo)} will fail - http://www.smarty.net/forums/viewtopic.php?t=26222 - - temporary fix for https://github.com/smarty-php/smarty/issues/293 main reason still under investigation - - improvement new tags {block_parent} {block_child} in template inheritance - - 19.09.2016 - - optimization clear compiled and cached folder completely on detected version change - - cleanup convert cache resource file method clear into runtime extension - - 15.09.2016 - - bugfix assigning a variable in if condition by function like {if $value = array_shift($array)} the function got called twice https://github.com/smarty-php/smarty/issues/291 - - bugfix function plugins called with assign attribute like {foo assign='bar'} did not output returned content because - because assumption was made that it was assigned to a variable https://github.com/smarty-php/smarty/issues/292 - - bugfix calling $smarty->isCached() on a not existing cache file with $smarty->cache_locking = true; could cause a 10 second delay http://www.smarty.net/forums/viewtopic.php?t=26282 - - improvement make Smarty::clearCompiledTemplate() on custom resource independent from changes of templateId computation - - 11.09.2016 - - improvement {math} misleading E_USER_WARNING messages when parameter value = null https://github.com/smarty-php/smarty/issues/288 - - improvement move often used code snippets into methods - - performance Smarty::configLoad() did load unneeded template source object - - 09.09.2016 - - bugfix/optimization {foreach} did not execute the {foreachelse} when iterating empty objects https://github.com/smarty-php/smarty/pull/287 - - bugfix {foreach} must keep the @properties when restoring a saved $item variable as the properties might be used outside {foreach} https://github.com/smarty-php/smarty/issues/267 - - improvement {foreach} observe {break n} and {continue n} nesting levels when restoring saved $item and $key variables - - 08.09.2016 - - bugfix implement wrapper for removed method getConfigVariable() https://github.com/smarty-php/smarty/issues/286 - - 07.09.2016 - - bugfix using nocache like attribute with value true like {plugin nocache=true} did not work https://github.com/smarty-php/smarty/issues/285 - - bugfix uppercase TRUE, FALSE and NULL did not work when security was enabled https://github.com/smarty-php/smarty/issues/282 - - bugfix when {foreach} was looping over an object the total property like {$item@total} did always return 1 https://github.com/smarty-php/smarty/issues/281 - - bugfix {capture}{/capture} did add in 3.1.30 unintended additional blank lines https://github.com/smarty-php/smarty/issues/268 - - 01.09.2016 - - performance require_once should be called only once for shared plugins https://github.com/smarty-php/smarty/issues/280 - - 26.08.2016 - - bugfix change of 23.08.2016 failed on linux when use_include_path = true - - 23.08.2016 - - bugfix remove constant DS as shortcut for DIRECTORY_SEPARATOR as the user may have defined it to something else https://github.com/smarty-php/smarty/issues/277 - - 20.08-2016 - - bugfix {config_load ... scope="global"} shall not throw an arror but fallback to scope="smarty" https://github.com/smarty-php/smarty/issues/274 - - bugfix {make_nocache} failed when using composer autoloader https://github.com/smarty-php/smarty/issues/275 - - 14.08.2016 - - bugfix $smarty_>debugging = true; did E_NOTICE messages when {eval} tag was used https://github.com/smarty-php/smarty/issues/266 - - bugfix Class 'Smarty_Internal_Runtime_ValidateCompiled' not found when upgrading from some older Smarty versions with existing - compiled or cached template files https://github.com/smarty-php/smarty/issues/269 - - optimization remove unneeded call to update acopes when {assign} scope and template scope was local (default) - -## 3.1.30 - (07.08.2016) - - 07.08.2016 - - bugfix update of 04.08.2016 was incomplete - - 05.08.2016 - - bugfix compiling of templates failed when the Smarty delimiter did contain '/' https://github.com/smarty-php/smarty/issues/264 - - updated error checking at template and config default handler - - 04.08.2016 - - improvement move template function source parameter into extension - - 26.07.2016 - - optimization unneeded loading of compiled resource - - 24.07.2016 - - regression this->addPluginsDir('/abs/path/to/dir') adding absolute path without trailing '/' did fail https://github.com/smarty-php/smarty/issues/260 - - 23.07.2016 - - bugfix setTemplateDir('/') and setTemplateDir('') did create wrong absolute filepath https://github.com/smarty-php/smarty/issues/245 - - optimization of filepath normalization - - improvement remove double function declaration in plugin shared.escape_special_cars.php https://github.com/smarty-php/smarty/issues/229 - - 19.07.2016 - - bugfix multiple {include} with relative filepath within {block}{/block} could fail https://github.com/smarty-php/smarty/issues/246 - - bugfix {math} shell injection vulnerability patch provided by Tim Weber - - 18.07.2016 - - bugfix {foreach} if key variable and item@key attribute have been used both the key variable was not updated https://github.com/smarty-php/smarty/issues/254 - - bugfix modifier on plugins like {plugin|modifier ... } did fail when the plugin does return an array https://github.com/smarty-php/smarty/issues/228 - - bugfix avoid opcache_invalidate to result in ErrorException when opcache.restrict_api is not empty https://github.com/smarty-php/smarty/pull/244 - - bugfix multiple {include} with relative filepath within {block}{/block} could fail https://github.com/smarty-php/smarty/issues/246 - - 14.07.2016 - - bugfix wrong parameter on compileAllTemplates() and compileAllConfig() https://github.com/smarty-php/smarty/issues/231 - - 13.07.2016 - - bugfix PHP 7 compatibility on registered compiler plugins https://github.com/smarty-php/smarty/issues/241 - - update testInstall() https://github.com/smarty-php/smarty/issues/248https://github.com/smarty-php/smarty/issues/248 - - bugfix enable debugging could fail when template objects did already exists https://github.com/smarty-php/smarty/issues/237 - - bugfix template function data should be merged when loading subtemplate https://github.com/smarty-php/smarty/issues/240 - - bugfix wrong parameter on compileAllTemplates() https://github.com/smarty-php/smarty/issues/231 - - 12.07.2016 - - bugfix {foreach} item variable must be created also on empty from array https://github.com/smarty-php/smarty/issues/238 and https://github.com/smarty-php/smarty/issues/239 - - bugfix enableSecurity() must init cache flags https://github.com/smarty-php/smarty/issues/247 - - 27.05.2016 - - bugfix/improvement of compileAlltemplates() follow symlinks in template folder (PHP >= 5.3.1) https://github.com/smarty-php/smarty/issues/224 - clear internal cache and expension handler for each template to avoid possible conflicts https://github.com/smarty-php/smarty/issues/231 - - 16.05.2016 - - optimization {foreach} compiler and processing - - broken PHP 5.3 and 5.4 compatibility - - 15.05.2016 - - optimization and cleanup of resource code - - 10.05.2016 - - optimization of inheritance processing - - 07.05.2016 - -bugfix Only variables should be assigned by reference https://github.com/smarty-php/smarty/issues/227 - - 02.05.2016 - - enhancement {block} tag names can now be variable https://github.com/smarty-php/smarty/issues/221 - - 01.05.2016 - - bugfix same relative filepath at {include} called from template in different folders could display wrong sub-template - - 29.04.2016 - - bugfix {strip} remove space on linebreak between html tags https://github.com/smarty-php/smarty/issues/213 - - 24.04.2016 - - bugfix nested {include} with relative file path could fail when called in {block} ... {/block} https://github.com/smarty-php/smarty/issues/218 - - 14.04.2016 - - bugfix special variable {$smarty.capture.name} was not case sensitive on name https://github.com/smarty-php/smarty/issues/210 - - bugfix the default template handler must calculate the source uid https://github.com/smarty-php/smarty/issues/205 - - 13.04.2016 - - bugfix template inheritance status must be saved when calling sub-templates https://github.com/smarty-php/smarty/issues/215 - - 27.03.2016 - - bugfix change of 11.03.2016 cause again {capture} data could not been seen in other templates with {$smarty.capture.name} https://github.com/smarty-php/smarty/issues/153 - - 11.03.2016 - - optimization of capture and security handling - - improvement $smarty->clearCompiledTemplate() should return on recompiled or uncompiled resources - - 10.03.2016 - - optimization of resource processing - - 09.03.2016 - - improvement rework of 'scope' attribute handling see see NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/194 - https://github.com/smarty-php/smarty/issues/186 https://github.com/smarty-php/smarty/issues/179 - - bugfix correct Autoloader update of 2.3.2014 https://github.com/smarty-php/smarty/issues/199 - - 04.03.2016 - - bugfix change from 01.03.2016 will cause $smarty->isCached(..) failure if called multiple time for same template - (forum topic 25935) - - 02.03.2016 - - revert autoloader optimizations because of unexplainable warning when using plugins https://github.com/smarty-php/smarty/issues/199 - - 01.03.2016 - - bugfix template objects must be cached on $smarty->fetch('foo.tpl) calls incase the template is fetched - multiple times (forum topic 25909) - - 25.02.2016 - - bugfix wrong _realpath with 4 or more parent-directories https://github.com/smarty-php/smarty/issues/190 - - optimization of _realpath - - bugfix instanceof expression in template code must be treated as value https://github.com/smarty-php/smarty/issues/191 - - 20.02.2016 - - bugfix {strip} must keep space between hmtl tags. Broken by changes of 10.2.2016 https://github.com/smarty-php/smarty/issues/184 - - new feature/bugfix {foreach}{section} add 'properties' attribute to force compilation of loop properties - see NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/189 - - 19.02.2016 - - revert output buffer flushing on display, echo content again because possible problems when PHP files had - characters (newline} after ?> at file end https://github.com/smarty-php/smarty/issues/187 - - 14.02.2016 - - new tag {make_nocache} read NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/110 - - optimization of sub-template processing - - bugfix using extendsall as default resource and {include} inside {block} tags could produce unexpected results https://github.com/smarty-php/smarty/issues/183 - - optimization of tag attribute compiling - - optimization make compiler tag object cache static for higher compilation speed - - 11.02.2016 - - improvement added KnockoutJS comments to trimwhitespace outputfilter https://github.com/smarty-php/smarty/issues/82 - https://github.com/smarty-php/smarty/pull/181 - - 10.02.2016 - - bugfix {strip} must keep space on output creating smarty tags within html tags https://github.com/smarty-php/smarty/issues/177 - - bugfix wrong precedence on special if conditions like '$foo is ... by $bar' could cause wrong code https://github.com/smarty-php/smarty/issues/178 - - improvement because of ambiguities the inline constant support has been removed from the $foo.bar syntax https://github.com/smarty-php/smarty/issues/149 - - bugfix other {strip} error with output tags between hmtl https://github.com/smarty-php/smarty/issues/180 - - 09.02.2016 - - move some code from parser into compiler - - reformat all code for unique style - - update/bugfix scope attribute handling reworked. Read the newfeatures.txt file - - 05.02.2016 - - improvement internal compiler changes - - 01.02.2016 - - bugfix {foreach} compilation failed when $smarty->merge_compiled_includes = true and pre-filters are used. - - 29.01.2016 - - bugfix implement replacement code for _tag_stack property https://github.com/smarty-php/smarty/issues/151 - - 28.01.2016 - - bugfix allow windows network filepath or wrapper (forum topic 25876) https://github.com/smarty-php/smarty/issues/170 - - bugfix if fetch('foo.tpl') is called on a template object the $parent parameter should default to the calling template object https://github.com/smarty-php/smarty/issues/152 - - 27.01.2016 - - revert bugfix compiling {section} did create warning - - bugfix {$smarty.section.customer.loop} did throw compiler error https://github.com/smarty-php/smarty/issues/161 - update of yesterdays fix - - bugfix string resource could inject code at {block} or inline subtemplates through PHP comments https://github.com/smarty-php/smarty/issues/157 - - bugfix output filters did not observe nocache code flhttps://github.com/smarty-php/smarty/issues/154g https://github.com/smarty-php/smarty/issues/160 - - bugfix {extends} with relative file path did not work https://github.com/smarty-php/smarty/issues/154 - https://github.com/smarty-php/smarty/issues/158 - - bugfix {capture} data could not been seen in other templates with {$smarty.capture.name} https://github.com/smarty-php/smarty/issues/153 - - 26.01.2016 - - improvement observe Smarty::$_CHARSET in debugging console https://github.com/smarty-php/smarty/issues/169 - - bugfix compiling {section} did create warning - - bugfix {$smarty.section.customer.loop} did throw compiler error https://github.com/smarty-php/smarty/issues/161 - - 02.01.2016 - - update scope handling - - optimize block plugin compiler - - improvement runtime checks if registered block plugins are callable - - 01.01.2016 - - remove Smarty::$resource_cache_mode property - - 31.12.2015 - - optimization of {assign}, {if} and {while} compiled code - - 30.12.2015 - - bugfix plugin names starting with "php" did not compile https://github.com/smarty-php/smarty/issues/147 - - 29.12.2015 - - bugfix Smarty::error_reporting was not observed when display() or fetch() was called on template objects https://github.com/smarty-php/smarty/issues/145 - - 28.12.2015 - - optimization of {foreach} code size and processing - - 27.12.2015 - - improve inheritance code - - update external methods - - code fixes - - PHPdoc updates - - 25.12.2015 - - compile {block} tag code and its processing into classes - - optimization replace hhvm extension by inline code - - new feature If ACP is enabled force an apc_compile_file() when compiled or cached template was updated - - 24.12.2015 - - new feature Compiler does now observe the template_dir setting and will create separate compiled files if required - - bugfix post filter did fail on template inheritance https://github.com/smarty-php/smarty/issues/144 - - 23.12.2015 - - optimization move internal method decodeProperties back into template object - - optimization move subtemplate processing back into template object - - new feature Caching does now observe the template_dir setting and will create separate cache files if required - - 22.12.2015 - - change $xxx_dir properties from private to protected in case Smarty class gets extended - - code optimizations - - 21.12.2015 - - bugfix a filepath starting with '/' or '\' on windows should normalize to the root dir - of current working drive https://github.com/smarty-php/smarty/issues/134 - - optimization of filepath normalization - - bugfix {strip} must remove all blanks between html tags https://github.com/smarty-php/smarty/issues/136 - - - 3.1.29 - (21.12.2015) - 21.12.2015 - - optimization improve speed of filetime checks on extends and extendsall resource - - 20.12.2015 - - bugfix failure when the default resource type was set to 'extendsall' https://github.com/smarty-php/smarty/issues/123 - - update compilation of Smarty special variables - - bugfix add addition check for OS type on normalization of file path https://github.com/smarty-php/smarty/issues/134 - - bugfix the source uid of the extendsall resource must contain $template_dir settings https://github.com/smarty-php/smarty/issues/123 - - 19.12.2015 - - bugfix using $smarty.capture.foo in expressions could fail https://github.com/smarty-php/smarty/pull/138 - - bugfix broken PHP 5.2 compatibility https://github.com/smarty-php/smarty/issues/139 - - remove no longer used code - - improvement make sure that compiled and cache templates never can contain a trailing '?>? - - 18.12.2015 - - bugfix regression when modifier parameter was followed by math https://github.com/smarty-php/smarty/issues/132 - - 17.12.2015 - - bugfix {$smarty.capture.nameFail} did lowercase capture name https://github.com/smarty-php/smarty/issues/135 - - bugfix using {block append/prepend} on same block in multiple levels of inheritance templates could fail (forum topic 25827) - - bugfix text content consisting of just a single '0' like in {if true}0{/if} was suppressed (forum topic 25834) - - 16.12.2015 - - bugfix {foreach} did fail if from atrribute is a Generator class https://github.com/smarty-php/smarty/issues/128 - - bugfix direct access $smarty->template_dir = 'foo'; should call Smarty::setTemplateDir() https://github.com/smarty-php/smarty/issues/121 - - 15.12.2015 - - bugfix {$smarty.cookies.foo} did return the $_COOKIE array not the 'foo' value https://github.com/smarty-php/smarty/issues/122 - - bugfix a call to clearAllCache() and other should clear all internal template object caches (forum topic 25828) - - 14.12.2015 - - bugfix {$smarty.config.foo} broken in 3.1.28 https://github.com/smarty-php/smarty/issues/120 - - bugfix multiple calls of {section} with same name droped E_NOTICE error https://github.com/smarty-php/smarty/issues/118 - - - 3.1.28 - (13.12.2015) - 13.12.2015 - - bugfix {foreach} and {section} with uppercase characters in name attribute did not work (forum topic 25819) - - bugfix $smarty->debugging_ctrl = 'URL' did not work (forum topic 25811) - - bugfix Debug Console could display incorrect data when using subtemplates - - 09.12.2015 - - bugfix Smarty did fail under PHP 7.0.0 with use_include_path = true; - - 09.12.2015 - - bugfix {strip} should exclude some html tags from stripping, related to fix for https://github.com/smarty-php/smarty/issues/111 - - 08.12.2015 - - bugfix internal template function data got stored in wrong compiled file https://github.com/smarty-php/smarty/issues/114 - - 05.12.2015 - -bugfix {strip} should insert a single space https://github.com/smarty-php/smarty/issues/111 - - 25.11.2015 - -bugfix a left delimter like '[%' did fail on [%$var_[%$variable%]%] (forum topic 25798) - - 02.11.2015 - - bugfix {include} with variable file name like {include file="foo_`$bar`.tpl"} did fail in 3.1.28-dev https://github.com/smarty-php/smarty/issues/102 - - 01.11.2015 - - update config file processing - - 31.10.2015 - - bugfix add missing $trusted_dir property to SmartyBC class (forum topic 25751) - - 29.10.2015 - - improve template scope handling - - 24.10.2015 - - more optimizations of template processing - - bugfix Error when using {include} within {capture} https://github.com/smarty-php/smarty/issues/100 - - 21.10.2015 - - move some code into runtime extensions - - 18.10.2015 - - optimize filepath normalization - - rework of template inheritance - - speed and size optimizations - - bugfix under HHVM temporary cache file must only be created when caches template was updated - - fix compiled code for new {block} assign attribute - - update code generated by template function call handler - - 18.09.2015 - - bugfix {if $foo instanceof $bar} failed to compile if 2nd value is a variable https://github.com/smarty-php/smarty/issues/92 - - 17.09.2015 - - bugfix {foreach} first attribute was not correctly reset since commit 05a8fa2 of 02.08.2015 https://github.com/smarty-php/smarty/issues/90 - - 16.09.2015 - - update compiler by moving no longer needed properties, code optimizations and other - - 14.09.2015 - - optimize autoloader - - optimize subtemplate handling - - update template inheritance processing - - move code of {call} processing back into Smarty_Internal_Template class - - improvement invalidate OPCACHE for cleared compiled and cached template files (forum topic 25557) - - bugfix unintended multiple debug windows (forum topic 25699) - - 30.08.2015 - - size optimization move some runtime functions into extension - - optimize inline template processing - - optimization merge inheritance child and parent templates into one compiled template file - - 29.08.2015 - - improvement convert template inheritance into runtime processing - - bugfix {$smarty.block.parent} did always reference the root parent block https://github.com/smarty-php/smarty/issues/68 - - 23.08.2015 - - introduce Smarty::$resource_cache_mode and cache template object of {include} inside loop - - load seldom used Smarty API methods dynamically to reduce memory footprint - - cache template object of {include} if same template is included several times - - convert debug console processing to object - - use output buffers for better performance and less memory usage - - optimize nocache hash processing - - remove not really needed properties - - optimize rendering - - move caching to Smarty::_cache - - remove properties with redundant content - - optimize Smarty::templateExists() - - optimize use_include_path processing - - relocate properties for size optimization - - remove redundant code - - bugfix compiling super globals like {$smarty.get.foo} did fail in the master branch https://github.com/smarty-php/smarty/issues/77 - - 06.08.2015 - - avoid possible circular object references caused by parser/lexer objects - - rewrite compileAll... utility methods - - commit several internal improvements - - bugfix Smarty failed when compile_id did contain "|" - - 03.08.2015 - - rework clear cache methods - - bugfix compileAllConfig() was broken since 3.1.22 because of the changes in config file processing - - improve getIncludePath() to return directory if no file was given - - 02.08.2015 - - optimization and code cleanup of {foreach} and {section} compiler - - rework {capture} compiler - - 01.08.2015 - - update DateTime object can be instance of DateTimeImmutable since PHP5.5 https://github.com/smarty-php/smarty/pull/75 - - improvement show resource type and start of template source instead of uid on eval: and string: resource (forum topic 25630) - - 31.07.2015 - - optimize {foreach} and {section} compiler - - 29.07.2015 - - optimize {section} compiler for speed and size of compiled code - - 28.07.2015 - - update for PHP 7 compatibility - - 26.07.2015 - - improvement impement workaround for HHVM PHP incompatibillity https://github.com/facebook/hhvm/issues/4797 - - 25.07.2015 - - bugfix parser did hang on text starting <?something https://github.com/smarty-php/smarty/issues/74 - - 20.07.2015 - - bugfix config files got recompiled on each request - - improvement invalidate PHP 5.5 opcache for recompiled and cached templates https://github.com/smarty-php/smarty/issues/72 - - 12.07.2015 - - optimize {extends} compilation - - 10.07.2015 - - bugfix force file: resource in demo resource.extendsall.php - - 08.07.2015 - - bugfix convert each word of class names to ucfirst in in compiler. (forum topic 25588) - - 07.07.2015 - - improvement allow fetch() or display() called on a template object to get output from other template - like $template->fetch('foo.tpl') https://github.com/smarty-php/smarty/issues/70 - - improvement Added $limit parameter to regex_replace modifier #71 - - new feature multiple indices on file: resource - - 06.07.2015 - - optimize {block} compilation - - optimization get rid of __get and __set in source object - - 01.07.2015 - - optimize compile check handling - - update {foreach} compiler - - bugfix debugging console did not display string values containing \n, \r or \t correctly https://github.com/smarty-php/smarty/issues/66 - - optimize source resources - - 28.06.2015 - - move $smarty->enableSecurity() into Smarty_Security class - - optimize security isTrustedResourceDir() - - move auto load filter methods into extension - - move $smarty->getTemplateVars() into extension - - move getStreamVariable() into extension - - move $smarty->append() and $smarty->appendByRef() into extension - - optimize autoloader - - optimize file path normalization - - bugfix PATH_SEPARATOR was replaced by mistake in autoloader - - remove redundant code - - 27.06.2015 - - bugfix resolve naming conflict between custom Smarty delimiter '<%' and PHP ASP tags https://github.com/smarty-php/smarty/issues/64 - - update $smarty->_realpath for relative path not starting with './' - - update Smarty security with new realpath handling - - update {include_php} with new realpath handling - - move $smarty->loadPlugin() into extension - - minor compiler optimizations - - bugfix allow function plugins with name ending with 'close' https://github.com/smarty-php/smarty/issues/52 - - rework of $smarty->clearCompiledTemplate() and move it to its own extension - - 19.06.2015 - - improvement allow closures as callback at $smarty->registerFilter() https://github.com/smarty-php/smarty/issues/59 - - - 3.1.27- (18.06.2015) - 18.06.2015 - - bugfix another update on file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56 - - - 3.1.26- (18.06.2015) - 18.06.2015 - - bugfix file path normalization failed on path containing something like "/.foo/" https://github.com/smarty-php/smarty/issues/56 - - 17.06.2015 - - bugfix calling a plugin with nocache option but no other attributes like {foo nocache} caused call to undefined function https://github.com/smarty-php/smarty/issues/55 - - - 3.1.25- (15.06.2015) - 15.06.2015 - - optimization of smarty_cachereource_keyvaluestore.php code - - 14.06.2015 - - bugfix a relative sub template path could fail if template_dir path did contain /../ https://github.com/smarty-php/smarty/issues/50 - - optimization rework of path normalization - - bugfix an output tag with variable, modifier followed by an operator like {$foo|modifier+1} did fail https://github.com/smarty-php/smarty/issues/53 - - 13.06.2015 - - bugfix a custom cache resource using smarty_cachereource_keyvaluestore.php did fail if php.ini mbstring.func_overload = 2 (forum topic 25568) - - 11.06.2015 - - bugfix the lexer could hang on very large quoted strings (forum topic 25570) - - 08.06.2015 - - bugfix using {$foo} as array index like $bar.{$foo} or in double quoted string like "some {$foo} thing" failed https://github.com/smarty-php/smarty/issues/49 - - 04.06.2015 - - bugfix possible error message on unset() while compiling {block} tags https://github.com/smarty-php/smarty/issues/46 - - 01.06.2015 - - bugfix <?xml ... ?> including template variables broken since 3.1.22 https://github.com/smarty-php/smarty/issues/47 - - 27.05.2015 - - bugfix {include} with variable file name must not create by default individual cache file (since 3.1.22) https://github.com/smarty-php/smarty/issues/43 - - 24.05.2015 - - bugfix if condition string 'neq' broken due to a typo https://github.com/smarty-php/smarty/issues/42 - - - 3.1.24- (23.05.2015) - 23.05.2015 - - improvement on php_handling to allow very large PHP sections, better error handling - - improvement allow extreme large comment sections (forum 25538) - - 21.05.2015 - - bugfix broken PHP 5.2 compatibility when compiling <?php tags https://github.com/smarty-php/smarty/issues/40 - - bugfix named {foreach} comparison like $smarty.foreach.foobar.index > 1 did compile into wrong code https://github.com/smarty-php/smarty/issues/41 - - 19.05.2015 - - bugfix compiler did overwrite existing variable value when setting the nocache attribute https://github.com/smarty-php/smarty/issues/39 - - bugfix output filter trimwhitespace could run into the pcre.backtrack_limit on large output (code.google issue 220) - - bugfix compiler could run into the pcre.backtrack_limit on larger comment or {php} tag sections (forum 25538) - - 18.05.2015 - - improvement introduce shortcuts in lexer/parser rules for most frequent terms for higher - compilation speed - - 16.05.2015 - - bugfix {php}{/php} did work just for single lines https://github.com/smarty-php/smarty/issues/33 - - improvement remove not needed ?><?php transitions from compiled code - - improvement reduce number of lexer tokens on operators and if conditions - - improvement higher compilation speed by modified lexer/parser generator at "smarty/smarty-lexer" - - 13.05.2015 - - improvement remove not needed ?><?php transitions from compiled code - - improvement of debugging: - - use fresh Smarty object to display the debug console because of possible problems when the Smarty - was extended or Smarty properties had been modified in the class source - - display Smarty version number - - Truncate lenght of Origin display and extend strin value display to 80 character - - bugfix in Smarty_Security 'nl2br' should be a trusted modifier, not PHP function (code.google issue 223) - - 12.05.2015 - - bugfix {$smarty.constant.TEST} did fail on undefined constant https://github.com/smarty-php/smarty/issues/28 - - bugfix access to undefined config variable like {#undef#} did fail https://github.com/smarty-php/smarty/issues/29 - - bugfix in nested {foreach} saved item attributes got overwritten https://github.com/smarty-php/smarty/issues/33 - - - 3.1.23 - (12.05.2015) - 12.05.2015 - - bugfix of smaller performance issue introduce in 3.1.22 when caching is enabled - - bugfix missig entry for smarty-temmplate-config in autoloader - - - 3.1.22 - tag was deleted because 3.1.22 did fail caused by the missing entry for smarty-temmplate-config in autoloader - 10.05.2015 - - bugfix custom cache resource did not observe compile_id and cache_id when $cache_locking == true - - bugfix cache lock was not handled correctly after timeout when $cache_locking == true - - improvement added constants for $debugging - - 07.05.2015 - - improvement of the debugging console. Read NEW_FEATURES.txt - - optimization of resource class loading - - 06.05.2015 - - bugfix in 3.1.22-dev cache resource must not be loaded for subtemplates - - bugfix/improvement in 3.1.22-dev cache locking did not work as expected - - 05.05.2015 - - optimization on cache update when main template is modified - - optimization move <?php ?> handling from parser to new compiler module - - 05.05.2015 - - bugfix code could be messed up when {tags} are used in multiple attributes https://github.com/smarty-php/smarty/issues/23 - - 04.05.2015 - - bugfix Smarty_Resource::parseResourceName incompatible with Google AppEngine (https://github.com/smarty-php/smarty/issues/22) - - improvement use is_file() checks to avoid errors suppressed by @ which could still cause problems (https://github.com/smarty-php/smarty/issues/24) - - 28.04.2015 - - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) 2nd fix - - 28.04.2015 - - bugfix plugins of merged subtemplates not loaded in 3.1.22-dev (forum topic 25508) - - 23.04.2015 - - bugfix a nocache template variable used as parameter at {insert} was by mistake cached - - 20.04.2015 - - bugfix at a template function containing nocache code a parmeter could overwrite a template variable of same name - - 27.03.2015 - - bugfix Smarty_Security->allow_constants=false; did also disable true, false and null (change of 16.03.2015) - - improvement added a whitelist for trusted constants to security Smarty_Security::$trusted_constants (forum topic 25471) - - 20.03.2015 - - bugfix make sure that function properties get saved only in compiled files containing the fuction definition {forum topic 25452} - - bugfix correct update of global variable values on exit of template functions. (reported under Smarty Developers) - - 16.03.2015 - - bugfix problems with {function}{/function} and {call} tags in different subtemplate cache files {forum topic 25452} - - bugfix Smarty_Security->allow_constants=false; did not disallow direct usage of defined constants like {SMARTY_DIR} {forum topic 25457} - - bugfix {block}{/block} tags did not work inside double quoted strings https://github.com/smarty-php/smarty/issues/18 - - - 15.03.2015 - - bugfix $smarty->compile_check must be restored before rendering of a just updated cache file {forum 25452} - - 14.03.2015 - - bugfix {nocache} {/nocache} tags corrupted code when used within a nocache section caused by a nocache template variable. - - - bugfix template functions defined with {function} in an included subtemplate could not be called in nocache - mode with {call... nocache} if the subtemplate had it's own cache file {forum 25452} - - 10.03.2015 - - bugfix {include ... nocache} whith variable file or compile_id attribute was not executed in nocache mode. - - 12.02.2015 - - bugfix multiple Smarty::fetch() of same template when $smarty->merge_compiled_includes = true; could cause function already defined error - - 11.02.2015 - - bugfix recursive {includes} did create E_NOTICE message when $smarty->merge_compiled_includes = true; (github issue #16) - - 22.01.2015 - - new feature security can now control access to static methods and properties - see also NEW_FEATURES.txt - - 21.01.2015 - - bugfix clearCompiledTemplates(), clearAll() and clear() could try to delete whole drive at wrong path permissions because realpath() fail (forum 25397) - - bugfix 'self::' and 'parent::' was interpreted in template syntax as static class - - 04.01.2015 - - push last weeks changes to github - - - different optimizations - - improvement automatically create different versions of compiled templates and config files depending - on property settings. - - optimization restructure template processing by moving code into classes it better belongs to - - optimization restructure config file processing - - 31.12.2014 - - bugfix use function_exists('mb_get_info') for setting Smarty::$_MBSTRING. - Function mb_split could be overloaded depending on php.ini mbstring.func_overload - - - 29.12.2014 - - new feature security can now limit the template nesting level by property $max_template_nesting - see also NEW_FEATURES.txt (forum 25370) - - 29.12.2014 - - new feature security can now disable special $smarty variables listed in property $disabled_special_smarty_vars - see also NEW_FEATURES.txt (forum 25370) - - 27.12.2014 - - bugfix clear internal _is_file_cache when plugins_dir was modified - - 13.12.2014 - - improvement optimization of lexer and parser resulting in a up to 30% higher compiling speed - - 11.12.2014 - - bugfix resolve parser ambiguity between constant print tag {CONST} and other smarty tags after change of 09.12.2014 - - 09.12.2014 - - bugfix variables $null, $true and $false did not work after the change of 12.11.2014 (forum 25342) - - bugfix call of template function by a variable name did not work after latest changes (forum 25342) - - 23.11.2014 - - bugfix a plugin with attached modifier could fail if the tag was immediately followed by another Smarty tag (since 3.1.21) (forum 25326) - - 13.11.2014 - - improvement move autoload code into Autoloader.php. Use Composer autoloader when possible - - 12.11.2014 - - new feature added support of namespaces to template code - - 08.11.2014 - 10.11.2014 - - bugfix subtemplate called in nocache mode could be called with wrong compile_id when it did change on one of the calling templates - - improvement add code of template functions called in nocache mode dynamically to cache file (related to bugfix of 01.11.2014) - - bugfix Debug Console did not include all data from merged compiled subtemplates - - 04.11.2014 - - new feature $smarty->debugging = true; => overwrite existing Debug Console window (old behaviour) - $smarty->debugging = 2; => individual Debug Console window by template name - - 03.11.2014 - - bugfix Debug Console did not show included subtemplates since 3.1.17 (forum 25301) - - bugfix Modifier debug_print_var did not limit recursion or prevent recursive object display at Debug Console - (ATTENTION: parameter order has changed to be able to specify maximum recursion) - - bugfix Debug consol did not include subtemplate information with $smarty->merge_compiled_includes = true - - improvement The template variables are no longer displayed as objects on the Debug Console - - improvement $smarty->createData($parent = null, $name = null) new optional name parameter for display at Debug Console - - addition of some hooks for future extension of Debug Console - - 01.11.2014 - - bugfix and enhancement on subtemplate {include} and template {function} tags. - * Calling a template which has a nocache section could fail if it was called from a cached and a not cached subtemplate. - * Calling the same subtemplate cached and not cached with the $smarty->merge_compiled_includes enabled could cause problems - * Many smaller related changes - - 30.10.2014 - - bugfix access to class constant by object like {$object::CONST} or variable class name {$class::CONST} did not work (forum 25301) - - 26.10.2014 - - bugfix E_NOTICE message was created during compilation when ASP tags '<%' or '%>' are in template source text - - bugfix merge_compiled_includes option failed when caching enables and same subtemplate was included cached and not cached - - - 3.1.21 - (18.10.2014) - 18.10.2014 - - composer moved to github - - 17.10.2014 - - bugfix on $php_handling security and optimization of smarty_internal_parsetree (Thue Kristensen) - - 16.10.2014 - - bugfix composer.json update - - 15.10.2014 - - bugfix calling a new created cache file with fetch() and Smarty::CACHING_LIFETIME_SAVED multiple times did fail (forum 22350) - - 14.10.2014 - - bugfix any tag placed within "<script language=php>" will throw a security exception to close all thinkable holes - - bugfix classmap in root composer.json should start at "libs/..." - - improvement cache is_file(file_exists) results of loadPlugin() to avoid unnecessary calls during compilation (Issue 201} - - 12.10.2014 - - bugfix a comment like "<script{*foo*} language=php>" bypassed $php_handling checking (Thue Kristensen) - - bugfix change of 08.10.2014 could create E_NOTICE meassage when using "<?php" tags - - bugfix "<script language=php>" with $php_handling PHP_PASSTHRU was executed in {nocache} sections - - - 3.1.20 - (09.10.2014) - 08.10.2014 - - bugfix security mode of "<script language=php>" must be controlled by $php_handling property (Thue Kristensen) - - 01.10.2014 - - bugfix template resource of inheritance blocks could get invalid if the default resource type is not 'file'(Issue 202) - - bugfix existing child {block} tag must override parent {block} tag append / prepend setting (topic 25259) - - 02.08.2014 - - bugfix modifier wordwrap did output break string wrong if first word was exceeding length with cut = true (topic 25193) - - 24.07.2014 - - bugfix cache clear when cache folder does not exist - - 16.07.2014 - - enhancement remove BOM automatically from template source (topic 25161) - - 04.07.2014 - - bugfix the bufix of 02.06.2014 broke correct handling of child templates with same name but different template folders in extends resource (issue 194 and topic 25099) - - - 3.1.19 - (30.06.2014) - 20.06.2014 - - bugfix template variables could not be passed as parameter in {include} when the include was in a {nocache} section (topic 25131) - - 17.06.2014 - - bugfix large template text of some charsets could cause parsing errors (topic 24630) - - 08.06.2014 - - bugfix registered objects did not work after spelling fixes of 06.06.2014 - - bugfix {block} tags within {literal} .. {/literal} got not displayed correctly (topic 25024) - - bugfix UNC WINDOWS PATH like "\\psf\path\to\dir" did not work as template directory (Issue 192) - - bugfix {html_image} security check did fail on files relative to basedir (Issue 191) - - 06.06.2014 - - fixed PHPUnit outputFilterTrimWhitespaceTests.php assertion of test result - - fixed spelling, PHPDoc , minor errors, code cleanup - - 02.06.2014 - - using multiple cwd with relative template dirs could result in identical compiled file names. (issue 194 and topic 25099) - - 19.04.2014 - - bugfix calling createTemplate(template, data) with empty data array caused notice of array to string conversion (Issue 189) - - bugfix clearCompiledTemplate() did not delete files on WINDOWS when a compile_id was specified - - 18.04.2014 - - revert bugfix of 5.4.2014 because %-e date format is not supported on all operating systems - - - 3.1.18 - (07.04.2014) - 06.04.2014 - - bugfix template inheritance fail when using custom resource after patch of 8.3.2014 (Issue 187) - - bugfix update of composer file (Issue 168 and 184) - - 05.04.2014 - - bugfix default date format leads to extra spaces when displaying dates with single digit days (Issue 165) - - 26.03.2014 - - bugfix Smart_Resource_Custom should not lowercase the resource name (Issue 183) - - 24.03.2014 - - bugfix using a {foreach} property like @iteration could fail when used in inheritance parent templates (Issue 182) - - 20.03.2014 - - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899) - - 18.03.2014 - - revert change of 17.03.2014 - -17.03.2014 - - bugfix $smarty->auto_literal and mbsting.func_overload 2, 6 or 7 did fail (forum topic 24899) - - 15.03.2014 - - bugfix Smarty_CacheResource_Keyvaluestore did use different keys on read/writes and clearCache() calls (Issue 169) - - 13.03.2014 - - bugfix clearXxx() change of 27.1.2014 did not work when specifing cache_id or compile_id (forum topic 24868 and 24867) - - - 3.1.17 - - 08.03.2014 - - bugfix relative file path {include} within {block} of child templates did throw exception on first call (Issue 177) - - 17.02.2014 - - bugfix Smarty failed when executing PHP on HHVM (Hip Hop 2.4) because uniqid('',true) does return string with ',' (forum topic 20343) - - 16.02.2014 - - bugfix a '//' or '\\' in template_dir path could produce wrong path on relative filepath in {include} (Issue 175) - - 05.02.2014 - - bugfix shared.literal_compiler_param.php did throw an exception when literal did contain a '-' (smarty-developers group) - - 27.01.2014 - - bugfix $smarty->debugging = true; did show the variable of the $smarty object not the variables used in display() call (forum topic 24764) - - bugfix clearCompiledTemplate(), clearAll() and clear() should use realpath to avoid possible exception from RecursiveDirectoryIterator (Issue 171) - - 26.01.2014 - - bugfix undo block nesting checks for {nocache} for reasons like forum topic 23280 (forum topic 24762) - - 18.01.2014 - - bugfix the compiler did fail when using template inheritance and recursive {include} (smarty-developers group) - - 11.01.2014 - - bugfix "* }" (spaces before right delimiter) was interpreted by mistake as comment end tag (Issue 170) - - internals content cache should be clear when updating cache file - - 08.01.2014 - - bugfix Smarty_CacheResource_Custom did not handle template resource type specifications on clearCache() calls (Issue 169) - - bugfix SmartyBC.class.php should use require_once to load Smarty.class.php (forum topic 24683) - - - 3.1.16 - - 15.12.2013 - - bugfix {include} with {block} tag handling (forum topic 24599, 24594, 24682) (Issue 161) - Read 3.1.16_RELEASE_NOTES for more details - - enhancement additional debug output at $smarty->_parserdebug = true; - - 07.11.2013 - - bugfix too restrictive handling of {include} within {block} tags. 3.1.15 did throw errors where 3.1.14 did not (forum topic 24599) - - bugfix compiler could fail if PHP mbstring.func_overload is enabled (Issue 164) - - 28.10.2013 - - bugfix variable resource name at custom resource plugin did not work within {block} tags (Issue 163) - - bugfix notice "Trying to get property of non-object" removed (Issue 163) - - bugfix correction of modifier capitalize fix from 3.10.2013 (issue 159) - - bugfix multiple {block}s with same name in parent did not work (forum topic 24631) - - 20.10.2013 - - bugfix a variable file name at {extends} tag did fail (forum topic 24618) - - 14.10.2013 - - bugfix yesterdays fix could result in an undefined variable - - 13.10.2013 - - bugfix variable names on {include} in template inheritance did unextepted error message (forum topic 24594) (Issue 161) -.- bugfix relative includes with same name like {include './foo.tpl'} from different folder failed (forum topic 24590)(Issue 161) - - 04.10.2013 - - bugfix variable file names at {extends} had been disbabled by mistake with the rewrite of - template inheritance of 24.08.2013 (forum topic 24585) - -03.10.2013 - - bugfix loops using modifier capitalize did eat up memory (issue 159) - - - Smarty 3.1.15 - -01.10.2013 - - use current delimiters in compiler error messages (issue 157) - - improvement on performance when using error handler and multiple template folders (issue 152) - -17.09.2013 - - improvement added patch for additional SmartyCompilerException properties for better access to source information (forum topic 24559) - -16.09.2013 - - bugfix recompiled templates did not show on first request with zend opcache cache (forum topic 24320) - -13.09.2013 - - bugfix html_select_time defaulting error for the Meridian dropdown (forum topic 24549) - -09.09.2012 -- bugfix incorrect compiled code with array(object,method) callback at registered Variable Filter (forum topic 24542) - -27.08.2013 -- bugfix delimiter followed by linebreak did not work as auto literal after update from 24.08.2013 (forum topic 24518) - -24.08.2013 -- bugfix and enhancement - Because several recent problems with template inheritance the {block} tag compiler has been rewriten - - Error messages shown now the correct child template file and line number - - The compiler could fail on some larger UTF-8 text block (forum topic 24455) - - The {strip} tag can now be placed outside {block} tags in child templates (forum topic 24289) -- change SmartyException::$escape is now false by default -- change PHP traceback has been remove for SmartyException and SmartyCompilerException - -14.08.2013 -- bugfix compiled filepath of config file did not observe different config_dir (forum topic 24493) - -13.08.2013 -- bugfix the internal resource cache did not observe config_dir changes (forum topic 24493) - -12.08.2013 -- bugfix internal $tmpx variables must be unique over all inheritance templates (Issue 149) - -10.08.2013 -- bugfix a newline was eaten when a <?xml ... ?> was passed by a Smarty variable and caching was enabled (forum topic 24482) - -29.07.2013 -- bugfix headers already send warning thrown when using 'SMARTY_DEBUG=on' from URL (Issue 148) - -27.07.2013 -- enhancement allow access to properties of registered opjects for Smarty2 BC (forum topic 24344) - -26.07.2013 -- bugfix template inheritance nesting problem (forum topic 24387) - -15.7.2013 -- update code generated by PSR-2 standards fixer which introduced PHP 5.4 incompatibilities of 14.7.2013 - -14.7.2013 -- bugfix increase of internal maximum parser stacksize to allow more complex tag code {forum topic 24426} -- update for PHP 5.4 compatibility -- reformat source to PSR-2 standard - -12.7.2013 -- bugfix Do not remove '//' from file path at normalization (Issue 142) - -2.7.2013 -- bugfix trimwhitespace would replace captured items in wrong order (forum topic 24387) - -## Smarty-3.1.14 - -27.06.2013 -- bugfix removed PHP 5.5 deprecated preg_replace /e option in modifier capitalize (forum topic 24389) - -17.06.2013 -- fixed spelling in sources and documentation (from smarty-developers forum Veres Lajos) -- enhancement added constant SMARTY::CLEAR_EXPIRED for the change of 26.05.2013 (forum topic 24310) -- bugfix added smarty_security.php to composer.json (Issue 135) - -26.05.2013 -- enhancement an expire_time of -1 in clearCache() and clearAllCache() will delete outdated cache files - by their individual cache_lifetime used at creation (forum topic 24310) - -21.05.2013 -- bugfix modifier strip_tags:true was compiled into wrong code (Forum Topic 24287) -- bugfix /n after ?> in Smarty.class.php did start output buffering (Issue 138) - -25.04.2013 -- bugfix escape and wordrap modifier could be compiled into wrong code when used in {nocache}{/nocache} - section but caching is disabled (Forum Topic 24260) - -05.04.2013 -- bugfix post filter must not run when compiling inheritance child blocks (Forum Topic 24094) -- bugfix after the fix for Issue #130 compiler exceptions got double escaped (Forum Topic 24199) - -28.02.2013 -- bugfix nocache blocks could be lost when using CACHING_LIFETIME_SAVED (Issue #133) -- bugfix Compile ID gets nulled when compiling child blocks (Issue #134) - - -24.01.2013 -- bugfix wrong tag type in smarty_internal_templatecompilerbase.php could cause wrong plugin search order (Forum Topic 24028) - -## Smarty-3.1.13 - -13.01.2013 -- enhancement allow to disable exception message escaping by SmartyException::$escape = false; (Issue #130) - -09.01.2013 -- bugfix compilation did fail when a prefilter did modify an {extends} tag c -- bugfix template inheritance could fail if nested {block} tags in childs did contain {$smarty.block.child} (Issue #127) -- bugfix template inheritance could fail if {block} tags in childs did have similar name as used plugins (Issue #128) -- added abstract method declaration doCompile() in Smarty_Internal_TemplateCompilerBase (Forum Topic 23969) - -06.01.2013 -- Allow '://' URL syntax in template names of stream resources (Issue #129) - -27.11.2012 -- bugfix wrong variable usage in smarty_internal_utility.php (Issue #125) - -26.11.2012 -- bugfix global variable assigned within template function are not seen after template function exit (Forum Topic 23800) - -24.11.2012 -- made SmartyBC loadable via composer (Issue #124) - -20.11.2012 -- bugfix assignGlobal() called from plugins did not work (Forum Topic 23771) - -13.11.2012 -- adding attribute "strict" to html_options, html_checkboxes, html_radios to only print disabled/readonly attributes if their values are true or "disabled"/"readonly" (Issue #120) - -01.11.2012 -- bugfix muteExcpetedErrors() would screw up for non-readable paths (Issue #118) - -## Smarty-3.1.12 - -14.09.2012 -- bugfix template inheritance failed to compile with delimiters {/ and /} (Forum Topic 23008) - -11.09.2012 -- bugfix escape Smarty exception messages to avoid possible script execution - -10.09.2012 -- bugfix tag option flags and shorttag attributes did not work when rdel started with '=' (Forum Topic 22979) - -31.08.2012 -- bugfix resolving relative paths broke in some circumstances (Issue #114) - -22.08.2012 -- bugfix test MBString availability through mb_split, as it could've been compiled without regex support (--enable-mbregex). - Either we get MBstring's full package, or we pretend it's not there at all. - -21.08.2012 -- bugfix $auto_literal = false did not work with { block} tags in child templates - (problem was reintroduced after fix in 3.1.7)(Forum Topic 20581) - -17.08.2012 -- bugfix compiled code of nocache sections could contain wrong escaping (Forum Topic 22810) - -15.08.2012 -- bugfix template inheritance did produce wrong code if subtemplates with {block} was - included several times (from smarty-developers forum) - -14.08.2012 -- bugfix PHP5.2 compatibility compromised by SplFileInfo::getBasename() (Issue 110) - -01.08.2012 -- bugfix avoid PHP error on $smarty->configLoad(...) with invalid section specification (Forum Topic 22608) - -30.07.2012 --bugfix {assign} in a nocache section should not overwrite existing variable values - during compilation (issue 109) - -28.07.2012 -- bugfix array access of config variables did not work (Forum Topic 22527) - -19.07.2012 -- bugfix the default plugin handler did create wrong compiled code for static class methods - from external script files (issue 108) - -## Smarty-3.1.11 - -30.06.2012 -- bugfix {block.. hide} did not work as nested child (Forum Topic 22216) - -25.06.2012 -- bugfix the default plugin handler did not allow static class methods for modifier (issue 85) - -24.06.2012 -- bugfix escape modifier support for PHP < 5.2.3 (Forum Topic 21176) - -11.06.2012 -- bugfix the patch for Topic 21856 did break tabs between tag attributes (Forum Topic 22124) - -## Smarty-3.1.10 - -09.06.2012 -- bugfix the compiler did ignore registered compiler plugins for closing tags (Forum Topic 22094) -- bugfix the patch for Topic 21856 did break multiline tags (Forum Topic 22124) - -## Smarty-3.1.9 - -07.06.2012 -- bugfix fetch() and display() with relative paths (Issue 104) -- bugfix treat "0000-00-00" as 0 in modifier.date_format (Issue 103) - -24.05.2012 -- bugfix Smarty_Internal_Write_File::writeFile() could cause race-conditions on linux systems (Issue 101) -- bugfix attribute parameter names of plugins may now contain also "-" and ":" (Forum Topic 21856) -- bugfix add compile_id to cache key of of source (Issue 97) - -22.05.2012 -- bugfix recursive {include} within {section} did fail (Smarty developer group) - -12.05.2012 -- bugfix {html_options} did not properly escape values (Issue 98) - -03.05.2012 -- bugfix make HTTP protocall version variable (issue 96) - -02.05.2012 -- bugfix {nocache}{block}{plugin}... did produce wrong compiled code when caching is disabled (Forum Topic 21572, issue 95) - -12.04.2012 -- bugfix Smarty did eat the linebreak after the <?xml...?> closing tag (Issue 93) -- bugfix concurrent cache updates could create a warning (Forum Topic 21403) - -08.04.2012 -- bugfix "\\" was not escaped correctly when generating nocache code (Forum Topic 21364) - -30.03.2012 -- bugfix template inheritance did not throw exception when a parent template was deleted (issue 90) - -27.03.2012 -- bugfix prefilter did run multiple times on inline subtemplates compiled into several main templates (Forum Topic 21325) -- bugfix implement Smarty2's behaviour of variables assigned by reference in SmartyBC. {assign} will affect all references. - (issue 88) - -21.03.2012 -- bugfix compileAllTemplates() and compileAllConfig() did not return the number of compiled files (Forum Topic 21286) - -13.03.2012 -- correction of yesterdays bugfix (Forum Topic 21175 and 21182) - -12.03.2012 -- bugfix a double quoted string of "$foo" did not compile into PHP "$foo" (Forum Topic 21175) -- bugfix template inheritance did set $merge_compiled_includes globally true - -03.03.2012 -- optimization of compiling speed when same modifier was used several times - -02.03.2012 -- enhancement the default plugin handler can now also resolve undefined modifier (Smarty::PLUGIN_MODIFIER) - (Issue 85) - -## Smarty-3.1.8 - -19.02.2012 -- bugfix {include} could result in a fatal error if used in appended or prepended nested {block} tags - (reported by mh and Issue 83) -- enhancement added Smarty special variable $smarty.template_object to return the current template object (Forum Topic 20289) - - -07.02.2012 -- bugfix increase entropy of internal function names in compiled and cached template files (Forum Topic 20996) -- enhancement cacheable parameter added to default plugin handler, same functionality as in registerPlugin (request by calguy1000) - -06.02.2012 -- improvement stream_resolve_include_path() added to Smarty_Internal_Get_Include_Path (Forum Topic 20980) -- bugfix fetch('extends:foo.tpl') always yielded $source->exists == true (Forum Topic 20980) -- added modifier unescape:"url", fix (Forum Topic 20980) -- improvement replaced some calls of preg_replace with str_replace (Issue 73) - -30.01.2012 -- bugfix Smarty_Security internal $_resource_dir cache wasn't properly propagated - -27.01.2012 -- bugfix Smarty did not a template name of "0" (Forum Topic 20895) - -20.01.2012 -- bugfix typo in Smarty_Internal_Get_IncludePath did cause runtime overhead (Issue 74) -- improvment remove unneeded assigments (Issue 75 and 76) -- fixed typo in template parser -- bugfix output filter must not run before writing cache when template does contain nocache code (Issue 71) - -02.01.2012 -- bugfix {block foo nocache} did not load plugins within child {block} in nocache mode (Forum Topic 20753) - -29.12.2011 -- bugfix enable more entropy in Smarty_Internal_Write_File for "more uniqueness" and Cygwin compatibility (Forum Topic 20724) -- bugfix embedded quotes in single quoted strings did not compile correctly in {nocache} sections (Forum Topic 20730) - -28.12.2011 -- bugfix Smarty's internal header code must be excluded from postfilters (issue 71) - -22.12.2011 -- bugfix the new lexer of 17.12.2011 did fail if mbstring.func_overload != 0 (issue 70) (Forum Topic 20680) -- bugfix template inheritace did fail if mbstring.func_overload != 0 (issue 70) (Forum Topic 20680) - -20.12.2011 -- bugfix template inheritance: {$smarty.block.child} in nested child {block} tags did not return - content after {$smarty.block.child} (Forum Topic 20564) - -## Smarty-3.1.7 - -18.12.2011 -- bugfix strings ending with " in multiline strings of config files failed to compile (issue #67) -- added chaining to Smarty_Internal_Templatebase -- changed unloadFilter() to not return a boolean in favor of chaining and API conformity -- bugfix unregisterObject() raised notice when object to unregister did not exist -- changed internals to use Smarty::$_MBSTRING ($_CHARSET, $_DATE_FORMAT) for better unit testing -- added Smarty::$_UTF8_MODIFIER for proper PCRE charset handling (Forum Topic 20452) -- added Smarty_Security::isTrustedUri() and Smarty_Security::$trusted_uri to validate - remote resource calls through {fetch} and {html_image} (Forum Topic 20627) - -17.12.2011 -- improvement of compiling speed by new handling of plain text blocks in the lexer/parser (issue #68) - -16.12.2011 -- bugfix the source exits flag and timestamp was not setup when template was in php include path (issue #69) - -9.12.2011 -- bugfix {capture} tags around recursive {include} calls did throw exception (Forum Topic 20549) -- bugfix $auto_literal = false did not work with { block} tags in child templates (Forum Topic 20581) -- bugfix template inheritance: do not include code of {include} in overloaded {block} into compiled - parent template (Issue #66} -- bugfix template inheritance: {$smarty.block.child} in nested child {block} tags did not return expected - result (Forum Topic 20564) - -## Smarty-3.1.6 - -30.11.2011 -- bugfix is_cache() for individual cached subtemplates with $smarty->caching = CACHING_OFF did produce - an exception (Forum Topic 20531) - -29.11.2011 -- bugfix added exception if the default plugin handler did return a not static callback (Forum Topic 20512) - -25.11.2011 -- bugfix {html_select_date} and {html_slecet_time} did not default to current time if "time" was not specified - since r4432 (issue 60) - -24.11.2011 -- bugfix a subtemplate later used as main template did use old variable values - -21.11.2011 -- bugfix cache file could include unneeded modifier plugins under certain condition - -18.11.2011 -- bugfix declare all directory properties private to map direct access to getter/setter also on extended Smarty class - -16.11.2011 -- bugfix Smarty_Resource::load() did not always return a proper resource handler (Forum Topic 20414) -- added escape argument to html_checkboxes and html_radios (Forum Topic 20425) - -## Smarty-3.1.5 - -14.11.2011 -- bugfix allow space between function name and open bracket (forum topic 20375) - -09.11.2011 -- bugfix different behaviour of uniqid() on cygwin. See https://bugs.php.net/bug.php?id=34908 - (forum topic 20343) - -01.11.2011 -- bugfix {if} and {while} tags without condition did not throw a SmartyCompilerException (Issue #57) -- bugfix multiline strings in config files could fail on longer strings (reopened Issue #55) - -22.10.2011 -- bugfix smarty_mb_from_unicode() would not decode unicode-points properly -- bugfix use catch Exception instead UnexpectedValueException in - clearCompiledTemplate to be PHP 5.2 compatible - -21.10.2011 -- bugfix apostrophe in plugins_dir path name failed (forum topic 20199) -- improvement sha1() for array keys longer than 150 characters -- add Smarty::$allow_ambiguous_resources to activate unique resource handling (Forum Topic 20128) - -20.10.2011 -- @silenced unlink() in Smarty_Internal_Write_File since debuggers go haywire without it. -- bugfix Smarty::clearCompiledTemplate() threw an Exception if $cache_id was not present in $compile_dir when $use_sub_dirs = true. -- bugfix {html_select_date} and {html_select_time} did not properly handle empty time arguments (Forum Topic 20190) -- improvement removed unnecessary sha1() - -19.10.2011 -- revert PHP4 constructor message -- fixed PHP4 constructor message - -## Smarty-3.1.4 - -19.10.2011 -- added exception when using PHP4 style constructor - -16.10.2011 -- bugfix testInstall() did not propery check cache_dir and compile_dir - -15.10.2011 -- bugfix Smarty_Resource and Smarty_CacheResource runtime caching (Forum Post 75264) - -14.10.2011 -- bugfix unique_resource did not properly apply to compiled resources (Forum Topic 20128) -- add locking to custom resources (Forum Post 75252) -- add Smarty_Internal_Template::clearCache() to accompany isCached() fetch() etc. - -13.10.2011 -- add caching for config files in Smarty_Resource -- bugfix disable of caching after isCached() call did not work (Forum Topic 20131) -- add concept unique_resource to combat potentially ambiguous template_resource values when custom resource handlers are used (Forum Topic 20128) -- bugfix multiline strings in config files could fail on longer strings (Issue #55) - -11.10.2011 -- add runtime checks for not matching {capture}/{/capture} calls (Forum Topic 20120) - -10.10.2011 -- bugfix variable name typo in {html_options} and {html_checkboxes} (Issue #54) -- bugfix <?xml> tag did create wrong output when caching enabled and the tag was in included subtemplate -- bugfix Smarty_CacheResource_mysql example was missing strtotime() calls - -## Smarty-3.1.3 - -07.10.2011 -- improvement removed html comments from {mailto} (Forum Topic 20092) -- bugfix testInstall() would not show path to internal plugins_dir (Forum Post 74627) -- improvement testInstall() now showing resolved paths and checking the include_path if necessary -- bugfix html_options plugin did not handle object values properly (Issue #49, Forum Topic 20049) -- improvement html_checkboxes and html_radios to accept null- and object values, and label_ids attribute -- improvement removed some unnecessary count()s -- bugfix parent pointer was not set when fetch() for other template was called on template object - -06.10.2011 -- bugfix switch lexer internals depending on mbstring.func_overload -- bugfix start_year and end_year of {html_select_date} did not use current year as offset base (Issue #53) - -05.10.2011 -- bugfix of problem introduced with r4342 by replacing strlen() with isset() -- add environment configuration issue with mbstring.func_overload Smarty cannot compensate for (Issue #45) -- bugfix nofilter tag option did not disable default modifier -- bugfix html_options plugin did not handle null- and object values properly (Issue #49, Forum Topic 20049) - -04.10.2011 -- bugfix assign() in plugins called in subtemplates did change value also in parent template -- bugfix of problem introduced with r4342 on math plugin -- bugfix output filter should not run on individually cached subtemplates -- add unloadFilter() method -- bugfix has_nocache_code flag was not reset before compilation - -## Smarty-3.1.2 - -03.10.2011 -- improvement add internal $joined_template_dir property instead computing it on the fly several times - -01.10.2011 -- improvement replaced most in_array() calls by more efficient isset() on array_flip()ed haystacks -- improvement replaced some strlen($foo) > 3 calls by isset($foo[3]) -- improvement Smarty_Internal_Utility::clearCompiledTemplate() removed redundant strlen()s - -29.09.2011 -- improvement of Smarty_Internal_Config::loadConfigVars() dropped the in_array for index look up - -28.09.2011 -- bugfix on template functions called nocache calling other template functions - -27.09.2011 -- bugfix possible warning "attempt to modify property of non-object" in {section} (issue #34) -- added chaining to Smarty_Internal_Data so $smarty->assign('a',1)->assign('b',2); is possible now -- bugfix remove race condition when a custom resource did change timestamp during compilation -- bugfix variable property did not work on objects variable in template -- bugfix smarty_make_timestamp() failed to process DateTime objects properly -- bugfix wrong resource could be used on compile check of custom resource - -26.09.2011 -- bugfix repeated calls to same subtemplate did not make use of cached template object - -24.09.2011 -- removed internal muteExpectedErrors() calls in favor of having the implementor call this once from his application -- optimized muteExpectedErrors() to pass errors to the latest registered error handler, if appliccable -- added compile_dir and cache_dir to list of muted directories -- improvment better error message for undefined templates at {include} - -23.09.2011 -- remove unused properties -- optimization use real function instead anonymous function for preg_replace_callback -- bugfix a relative {include} in child template blocks failed -- bugfix direct setting of $template_dir, $config_dir, $plugins_dir in __construct() of an - extended Smarty class created problems -- bugfix error muting was not implemented for cache locking - -## Smarty 3.1.1 - -22.09.2011 -- bugfix {foreachelse} does fail if {section} was nested inside {foreach} -- bugfix debug.tpl did not display correctly when it was compiled with escape_html = true - -21.09.2011 -- bugfix look for mixed case plugin file names as in 3.0 if not found try all lowercase -- added $error_muting to suppress error messages even for badly implemented error_handlers -- optimized autoloader -- reverted ./ and ../ handling in fetch() and display() - they're allowed again - -20.09.2011 -- bugfix removed debug echo output while compiling template inheritance -- bugfix relative paths in $template_dir broke relative path resolving in {include "../foo.tpl"} -- bugfix {include} did not work inside nested {block} tags -- bugfix {assign} with scope root and global did not work in all cases - -19.09.2011 -- bugfix regression in Smarty_CacheReource_KeyValueStore introduced by r4261 -- bugfix output filter shall not run on included subtemplates - -18.09.2011 -- bugfix template caching did not care about file.tpl in different template_dir -- bugfix {include $file} was broken when merge_compiled_incluges = true -- bugfix {include} was broken when merge_compiled_incluges = true and same indluded template - was used in different main templates in one compilation run -- bugfix for Smarty2 style compiler plugins on unnamed attribute passing like {tag $foo $bar} -- bugfix debug.tpl did not display correctly when it was compiled with escape_html = true - -17.09.2011 -- bugfix lock_id for file resource would create invalid filepath -- bugfix resource caching did not care about file.tpl in different template_dir - -## Smarty 3.1.0 - -15/09/2011 -- optimization of {foreach}; call internal _count() method only when "total" or "last" {foreach} properties are used - -11/09/2011 -- added unregisterObject() method - -06/09/2011 -- bugfix isset() did not work in templates on config variables - -03/09/2011 -- bugfix createTemplate() must default to cache_id and compile_id of Smarty object -- bugfix Smarty_CacheResource_KeyValueStore must include $source->uid in cache filepath to keep templates with same - name but different folders separated -- added cacheresource.apc.php example in demo folder - -02/09/2011 -- bugfix cache lock file must use absolute filepath - -01/09/2011 -- update of cache locking - -30/08/2011 -- added locking mechanism to CacheResource API (implemented with File and KeyValueStores) - -28/08/2011 -- bugfix clearCompileTemplate() did not work for specific template subfolder or resource - -27/08/2011 -- bugfix {$foo|bar+1} did create syntax error - -26/08/2011 -- bugfix when generating nocache code which contains double \ -- bugfix handle race condition if cache file was deleted between filemtime and include - -17/08/2011 -- bugfix CacheResource_Custom bad internal fetch() call - -15/08/2011 -- bugfix CacheResource would load content twice for KeyValueStore and Custom handlers - -06/08/2011 -- bugfix {include} with scope attribute could execute in wrong scope -- optimization of compile_check processing - -03/08/2011 -- allow comment tags to comment {block} tags out in child templates - -26/07/2011 -- bugfix experimental getTags() method did not work - -24/07/2011 -- sure opened output buffers are closed on exception -- bugfix {foreach} did not work on IteratorAggregate - -22/07/2011 -- clear internal caches on clearAllCache(), clearCache(), clearCompiledTemplate() - -21/07/2011 -- bugfix value changes of variable values assigned to Smarty object could not be seen on repeated $smarty->fetch() calls - -17/07/2011 -- bugfix {$smarty.block.child} did drop a notice at undefined child - -15/07/2011 -- bugfix individual cache_lifetime of {include} did not work correctly inside {block} tags -- added caches for Smarty_Internal_TemplateSource and Smarty_Internal_TemplateCompiled to reduce I/O for multiple cache_id rendering - -14/07/2011 -- made Smarty::loadPlugin() respect the include_path if required - -13/07/2011 -- optimized internal file write functionality -- bugfix PHP did eat line break on nocache sections -- fixed typo of Smarty_Security properties $allowed_modifiers and $disabled_modifiers - -06/07/2011 -- bugfix variable modifier must run befor gereral filtering/escaping - -04/07/2011 -- bugfix use (?P<name>) syntax at preg_match as some pcre libraries failed on (?<name>) -- some performance improvement when using generic getter/setter on template objects - -30/06/2011 -- bugfix generic getter/setter of Smarty properties used on template objects did throw exception -- removed is_dir and is_readable checks from directory setters for better performance - -28/06/2011 -- added back support of php template resource as undocumented feature -- bugfix automatic recompilation on version change could drop undefined index notice on old 3.0 cache and compiled files -- update of README_3_1_DEV.txt and moved into the distribution folder -- improvement show first characters of eval and string templates instead sha1 Uid in debug window - -## Smarty 3.1-RC1 - -25/06/2011 -- revert change of 17/06/2011. $_smarty varibale removed. call loadPlugin() from inside plugin code if required -- code cleanup, remove no longer used properties and methods -- update of PHPdoc comments - -23/06/2011 -- bugfix {html_select_date} would not respect current time zone - -19/06/2011 -- added $errors argument to testInstall() functions to suppress output. -- added plugin-file checks to testInstall() - -18/06/2011 -- bugfix mixed use of same subtemplate inline and not inline in same script could cause a warning during compilation - -17/06/2011 -- bugfix/change use $_smarty->loadPlugin() when loading nested depending plugins via loadPlugin -- bugfix {include ... inline} within {block}...{/block} did fail - -16/06/2011 -- bugfix do not overwrite '$smarty' template variable when {include ... scope=parent} is called -- bugfix complete empty inline subtemplates did fail - -15/06/2011 -- bugfix template variables where not accessable within inline subtemplates - -12/06/2011 -- bugfix removed unneeded merging of template variable when fetching includled subtemplates - -10/06/2011 -- made protected properties $template_dir, $plugins_dir, $cache_dir, $compile_dir, $config_dir accessible via magic methods - -09/06/2011 -- fix smarty security_policy issue in plugins {html_image} and {fetch} - -05/06/2011 -- update of SMARTY_VERSION -- bugfix made getTags() working again - -04/06/2011 -- allow extends resource in file attribute of {extends} tag - -03/06/2011 -- added {setfilter} tag to set filters for variable output -- added escape_html property to control autoescaping of variable output - -27/05/2011 -- added allowed/disabled tags and modifiers in security for sandboxing - -23/05/2011 -- added base64: and urlencode: arguments to eval and string resource types - -22/05/2011 -- made time-attribute of {html_select_date} and {html_select_time} accept arrays as defined by attributes prefix and field_array - -13/05/2011 -- remove setOption / getOption calls from SamrtyBC class - -02/05/2011 -- removed experimental setOption() getOption() methods -- output returned content also on opening tag calls of block plugins -- rewrite of default plugin handler -- compile code of variable filters for better performance - -20/04/2011 -- allow {php} {include_php} tags and PHP_ALLOW handling only with the SmartyBC class -- removed support of php template resource - -20/04/2011 -- added extendsall resource example -- optimization of template variable access -- optimization of subtemplate handling {include} -- optimization of template class - -01/04/2011 -- bugfix quote handling in capitalize modifier - -28/03/2011 -- bugfix stripslashes() requried when using PCRE e-modifier - -04/03/2011 -- upgrade to new PHP_LexerGenerator version 0.4.0 for better performance - -27/02/2011 -- ignore .svn folders when clearing cache and compiled files -- string resources do not need a modify check - -26/02/2011 -- replaced smarty_internal_wrapper by SmartyBC class -- load utility functions as static methods instead through __call() -- bugfix in extends resource when subresources are used -- optimization of modify checks - -25/02/2011 -- use $smarty->error_unassigned to control NOTICE handling on unassigned variables - -21/02/2011 -- added new new compile_check mode COMPILECHECK_CACHEMISS -- corrected new cloning behaviour of createTemplate() -- do no longer store the compiler object as property in the compile_tag classes to avoid possible memory leaks - during compilation - -19/02/2011 -- optimizations on merge_compiled_includes handling -- a couple of optimizations and bugfixes related to new resource structure - -17/02/2011 -- changed ./ and ../ behaviour - -14/02/2011 -- added {block ... hide} option to suppress block if no child is defined - -13/02/2011 -- update handling of recursive subtemplate calls -- bugfix replace $smarty->triggerError() by exception in smarty_internal_resource_extends.php - -12/02/2011 -- new class Smarty_Internal_TemplateBase with shared methods of Smarty and Template objects -- optimizations of template processing -- made register... methods permanet -- code for default_plugin_handler -- add automatic recompilation at version change - -04/02/2011 -- change in Smarty_CacheResource_Custom -- bugfix cache_lifetime did not compile correctly at {include} after last update -- moved isCached processing into CacheResource class -- bugfix new CacheResource API did not work with disabled compile_check - -03/02/2011 -- handle template content as function to improve speed on multiple calls of same subtemplate and isCached()/display() calls -- bugfixes and improvents in the new resource API -- optimizations of template class code - -25/01/2011 -- optimized function html_select_time - -22/01/2011 -- added Smarty::$use_include_path configuration directive for Resource API - -21/01/2011 -- optimized function html_select_date - -19/01/2011 -- optimized outputfilter trimwhitespace - -18/01/2011 -- bugfix Config to use Smarty_Resource to fetch sources -- optimized Smarty_Security's isTrustedDir() and isTrustedPHPDir() - -17/01/2011 -- bugfix HTTP headers for CGI SAPIs - -16/01/2011 -- optimized internals of Smarty_Resource and Smarty_CacheResource - -14/01/2011 -- added modifiercompiler escape to improve performance of escaping html, htmlall, url, urlpathinfo, quotes, javascript -- added support to choose template_dir to load from: [index]filename.tpl - -12/01/2011 -- added unencode modifier to revert results of encode modifier -- added to_charset and from_charset modifier for character encoding - -11/01/2011 -- added SMARTY_MBSTRING to generalize MBString detection -- added argument $lc_rest to modifier.capitalize to lower-case anything but the first character of a word -- changed strip modifier to consider unicode white-space, too -- changed wordwrap modifier to accept UTF-8 strings -- changed count_sentences modifier to consider unicode characters and treat sequences delimited by ? and ! as sentences, too -- added argument $double_encode to modifier.escape (applies to html and htmlall only) -- changed escape modifier to be UTF-8 compliant -- changed textformat block to be UTF-8 compliant -- optimized performance of mailto function -- fixed spacify modifier so characters are not prepended and appended, made it unicode compatible -- fixed truncate modifier to properly use mb_string if possible -- removed UTF-8 frenzy from count_characters modifier -- fixed count_words modifier to treat "hello-world" as a single word like str_count_words() does -- removed UTF-8 frenzy from upper modifier -- removed UTF-8 frenzy from lower modifier - -01/01/2011 -- optimize smarty_modified_escape for hex, hexentity, decentity. - -28/12/2010 -- changed $tpl_vars, $config_vars and $parent to belong to Smarty_Internal_Data -- added Smarty::registerCacheResource() for dynamic cache resource object registration - -27/12/2010 -- added Smarty_CacheResource API and refactored existing cache resources accordingly -- added Smarty_CacheResource_Custom and Smarty_CacheResource_Mysql - -26/12/2010 -- added Smarty_Resource API and refactored existing resources accordingly -- added Smarty_Resource_Custom and Smarty_Resource_Mysql -- bugfix Smarty::createTemplate() to return properly cloned template instances - -24/12/2010 -- optimize smarty_function_escape_special_chars() for PHP >= 5.2.3 - -## SVN 3.0 trunk - -14/05/2011 -- bugfix error handling at stream resources - -13/05/2011 -- bugfix condition starting with "-" did fail at {if} and {while} tags - -22/04/2011 -- bugfix allow only fixed string as file attribute at {extends} tag - -01/04/2011 -- bugfix do not run filters and default modifier when displaying the debug template -- bugfix of embedded double quotes within multi line strings (""") - -29/03/2011 -- bugfix on error message in smarty_internal_compile_block.php -- bugfix mb handling in strip modifier -- bugfix for Smarty2 style registered compiler function on unnamed attribute passing like {tag $foo $bar} - -17/03/2011 -- bugfix on default {function} parameters when {function} was used in nocache sections -- bugfix on compiler object destruction. compiler_object property was by mistake unset. - -09/03/2011 --bugfix a variable filter should run before modifiers on an output tag (see change of 23/07/2010) - -08/03/2011 -- bugfix loading config file without section should load only defaults - -03/03/2011 -- bugfix "smarty" template variable was not recreated when cached templated had expired -- bugfix internal rendered_content must be cleared after subtemplate was included - -01/03/2011 -- bugfix replace modifier did not work in 3.0.7 on systems without multibyte support -- bugfix {$smarty.template} could return in 3.0.7 parent template name instead of - child name when it needed to compile - -25/02/2011 -- bugfix for Smarty2 style compiler plugins on unnamed attribute passing like {tag $foo $bar} - -24/02/2011 -- bugfix $smarty->clearCache('some.tpl') did by mistake cache the template object - -18/02/2011 -- bugfix removed possible race condition when isCached() was called for an individually cached subtemplate -- bugfix force default debug.tpl to be loaded by the file resource - -17/02/2011 --improvement not to delete files starting with '.' from cache and template_c folders on clearCompiledTemplate() and clearCache() - -16/02/2011 --fixed typo in exception message of Smarty_Internal_Template --improvement allow leading spaces on } tag closing if auto_literal is enabled - -13/02/2011 -- bufix replace $smarty->triggerError() by exception -- removed obsolete {popup_init..} plugin from demo templates -- bugfix replace $smarty->triggerError() by exception in smarty_internal_resource_extends.php - -## Smarty 3.0.7 - -09/02/2011 -- patched vulnerability when using {$smarty.template} - -01/02/2011 -- removed assert() from config and template parser - -31/01/2011 -- bugfix the lexer/parser did fail on special characters like VT - -16/01/2011 --bugfix of ArrayAccess object handling in internal _count() method --bugfix of Iterator object handling in internal _count() method - -14/01/2011 --bugfix removed memory leak while processing compileAllTemplates - -12/01/2011 -- bugfix in {if} and {while} tag compiler when using assignments as condition and nocache mode - -10/01/2011 -- bugfix when using {$smarty.block.child} and name of {block} was in double quoted string -- bugfix updateParentVariables() was called twice when leaving {include} processing - -- bugfix mb_str_replace in replace and escape modifiers work with utf8 - -31/12/2010 -- bugfix dynamic configuration of $debugging_crtl did not work -- bugfix default value of $config_read_hidden changed to false -- bugfix format of attribute array on compiler plugins -- bugfix getTemplateVars() could return value from wrong scope - -28/12/2010 -- bugfix multiple {append} tags failed to compile. - -22/12/2010 -- update do not clone the Smarty object an internal createTemplate() calls to increase performance - -21/12/2010 -- update html_options to support class and id attrs - -17/12/2010 -- bugfix added missing support of $cache_attrs for registered plugins - -15/12/2010 -- bugfix assignment as condition in {while} did drop an E_NOTICE - -14/12/2010 -- bugfix when passing an array as default parameter at {function} tag - -13/12/2010 -- bugfix {$smarty.template} in child template did not return right content -- bugfix Smarty3 did not search the PHP include_path for template files - -## Smarty 3.0.6 - - -12/12/2010 -- bugfix fixed typo regarding yesterdays change to allow streamWrapper - -11/12/2010 -- bugfix nested block tags in template inheritance child templates did not work correctly -- bugfix {$smarty.current_dir} in child template did not point to dir of child template -- bugfix changed code when writing temporary compiled files to allow stream_wrapper - -06/12/2010 -- bugfix getTemplateVars() should return 'null' instead dropping E_NOTICE on an unassigned variable - -05/12/2010 -- bugfix missing declaration of $smarty in Smarty class -- bugfix empty($foo) in {if} did drop a notice when $foo was not assigned - -01/12/2010 -- improvement of {debug} tag output - -27/11/2010 --change run output filter before cache file is written. (same as in Smarty2) - -24/11/2011 --bugfix on parser at !$foo|modifier --change parser logic when assignments used as condition in {if] and {while} to allow assign to array element - -23/11/2011 --bugfix allow integer as attribute name in plugin calls --change trimm whitespace from error message, removed long list of expected tokens - -22/11/2010 -- bugfix on template inheritance when an {extends} tag was inserted by a prefilter -- added error message for illegal variable file attributes at {extends...} tags - -## Smarty 3.0.5 - - - -19/11/2010 -- bugfix on block plugins with modifiers - -18/11/2010 -- change on handling of unassigned template variable -- default will drop E_NOTICE -- bugfix on Smarty2 wrapper load_filter() did not work - -17/11/2010 -- bugfix on {call} with variable function name -- bugfix on {block} if name did contain '-' -- bugfix in function.fetch.php , referece to undefined $smarty - -16/11/2010 -- bugfix whitespace in front of "<?php" in smarty_internal_compile_private_block_plugin.php -- bugfix {$smarty.now} did compile incorrectly -- bugfix on reset(),end(),next(),prev(),current() within templates -- bugfix on default parameter for {function} - -15/11/2010 -- bugfix when using {$smarty.session} as object -- bugfix scoping problem on $smarty object passed to filters -- bugfix captured content could not be accessed globally -- bugfix Smarty2 wrapper functions could not be call from within plugins - -## Smarty 3.0.4 - - -14/11/2010 -- bugfix isset() did not allow multiple parameter -- improvment of some error messages -- bugfix html_image did use removed property $request_use_auto_globals -- small performace patch in Smarty class - -13/11/2010 -- bugfix overloading problem when $smarty->fetch()/display() have been used in plugins - (introduced with 3.0.2) -- code cleanup - -## Smarty 3.0.3 - - -13/11/2010 -- bugfix on {debug} -- reverted location of loadPlugin() to Smarty class -- fixed comments in plugins -- fixed internal_config (removed unwanted code line) -- improvement remove last linebreak from {function} definition - -## Smarty 3.0.2 - - -12/11/2010 -- reactivated $error_reporting property handling -- fixed typo in compile_continue -- fixed security in {fetch} plugin -- changed back plugin parameters to two. second is template object - with transparent access to Smarty object -- fixed {config_load} scoping form compile time to run time - -## Smarty 3.0.0 - - - - -11/11/2010 -- major update including some API changes - -10/11/2010 -- observe compile_id also for config files - -09/11/2010 --bugfix on complex expressions as start value for {for} tag -request_use_auto_globals -04/11/2010 -- bugfix do not allow access of dynamic and private object members of assigned objects when - security is enabled. - -01/11/2010 -- bugfix related to E_NOTICE change. {if empty($foo)} did fail when $foo contained a string - -28/10/2010 -- bugfix on compiling modifiers within $smarty special vars like {$smarty.post.{$foo|lower}} - -27/10/2010 -- bugfix default parameter values did not work for template functions included with {include} - -25/10/2010 -- bugfix for E_NOTICE change, array elements did not work as modifier parameter - -20/10/2010 -- bugfix for the E_NOTICE change - -19/10/2010 -- change Smarty does no longer mask out E_NOTICE by default during template processing - -13/10/2010 -- bugfix removed ambiguity between ternary and stream variable in template syntax -- bugfix use caching properties of template instead of smarty object when compiling child {block} -- bugfix {*block}...{/block*} did throw an exception in template inheritance -- bugfix on template inheritance using nested eval or string resource in {extends} tags -- bugfix on output buffer handling in isCached() method - -## RC4 - - -01/10/2010 -- added {break} and {continue} tags for flow control of {foreach},{section},{for} and {while} loops -- change of 'string' resource. It's no longer evaluated and compiled files are now stored -- new 'eval' resource which evaluates a template without saving the compiled file -- change in isCached() method to allow multiple calls for the same template - -25/09/2010 -- bugfix on some compiling modifiers - -24/09/2010 -- bugfix merge_compiled_includes flag was not restored correctly in {block} tag - -22/09/2010 -- bugfix on default modifier - -18/09/2010 -- bugfix untility compileAllConfig() did not create sha1 code for compiled template file names if template_dir was defined with no trailing DS -- bugfix on templateExists() for extends resource - -17/09/2010 -- bugfix {$smarty.template} and {$smarty.current_dir} did not compile correctly within {block} tags -- bugfix corrected error message on missing template files in extends resource -- bugfix untility compileAllTemplates() did not create sha1 code for compiled template file names if template_dir was defined with no trailing DS - -16/09/2010 -- bugfix when a doublequoted modifier parameter did contain Smarty tags and ':' - -15/09/2010 -- bugfix resolving conflict between '<%'/'%>' as custom Smarty delimiter and ASP tags -- use ucfirst for resource name on internal resource class names - -12/09/2010 -- bugfix for change of 08/09/2010 (final {block} tags in subtemplates did not produce correct results) - -10/09/2010 -- bugfix for change of 08/09/2010 (final {block} tags in subtemplates did not produce correct results) - -08/09/2010 -- allow multiple template inheritance branches starting in subtemplates - -07/09/2010 -- bugfix {counter} and {cycle} plugin assigned result to smarty variable not in local(template) scope -- bugfix templates containing just {strip} {/strip} tags did produce an error - - -23/08/2010 -- fixed E_STRICT errors for uninitialized variables - -22/08/2010 -- added attribute cache_id to {include} tag - -13/08/2010 -- remove exception_handler property from Smarty class -- added Smarty's own exceptions SmartyException and SmartyCompilerException - -09/08/2010 -- bugfix on modifier with doublequoted strings as parameter containing embedded tags - -06/08/2010 -- bugfix when cascading some modifier like |strip|strip_tags modifier - -05/08/2010 -- added plugin type modifiercompiler to produce compiled modifier code -- changed standard modifier plugins to the compiling versions whenever possible -- bugfix in nocache sections {include} must not cache the subtemplate - -02/08/2010 -- bugfix strip did not work correctly in conjunction with comment lines - -31/07/2010 -- bugfix on nocache attribute at {assign} and {append} - -30/07/2010 -- bugfix passing scope attributes in doublequoted strings did not work at {include} {assign} and {append} - -25/07/2010 -- another bugfix of change from 23/07/2010 when compiling modifier - -24/07/2010 -- bugfix of change from 23/07/2010 when compiling modifier - -23/07/2010 -- changed execution order. A variable filter does now run before modifiers on output of variables -- bugfix use always { and } as delimiter for debug.tpl - - -22/07/2010 -- bugfix in templateExists() method - -20/07/2010 -- fixed handling of { strip } tag with whitespaces - -15/07/2010 -- bufix {$smarty.template} does include now the relative path, not just filename - -## RC3 - - - - - -15/07/2010 -- make the date_format modifier work also on objects of the DateTime class -- implementation of parsetrees in the parser to close security holes and remove unwanted empty line in HTML output - -08/07/2010 -- bugfix on assigning multidimensional arrays within templates -- corrected bugfix for truncate modifier - -07/07/2010 -- bugfix the truncate modifier needs to check if the string is utf-8 encoded or not -- bugfix support of script files relative to trusted_dir - -06/07/2010 -- create exception on recursive {extends} calls -- fixed reported line number at "unexpected closing tag " exception -- bugfix on escape:'mail' modifier -- drop exception if 'item' variable is equal 'from' variable in {foreach} tag - -01/07/2010 -- removed call_user_func_array calls for optimization of compiled code when using registered modifiers and plugins - -25/06/2010 -- bugfix escaping " when block tags are used within doublequoted strings - -24/06/2010 -- replace internal get_time() calls with standard PHP5 microtime(true) calls in Smarty_Internal_Utility -- added $smarty->register->templateClass() and $smarty->unregister->templateClass() methods for supporting static classes with namespace - - -22/06/2010 -- allow spaces between typecast and value in template syntax -- bugfix get correct count of traversables in {foreach} tag - -21/06/2010 -- removed use of PHP shortags SMARTY_PHP_PASSTHRU mode -- improved speed of cache->clear() when a compile_id was specified and use_sub_dirs is true - -20/06/2010 -- replace internal get_time() calls with standard PHP5 microtime(true) calls -- closed security hole when php.ini asp_tags = on - -18/06/2010 -- added __toString method to the Smarty_Variable class - - -14/06/2010 -- make handling of Smarty comments followed by newline BC to Smarty2 - - -## RC2 - - - - -13/06/2010 -- bugfix Smarty3 did not handle hexadecimals like 0x0F as numerical value -- bugifx Smarty3 did not accept numerical constants like .1 or 2. (without a leading or trailing digit) - -11/06/2010 -- bugfix the lexer did fail on larger {literal} ... {/literal} sections - -03/06/2010 -- bugfix on calling template functions like Smarty tags - -01/06/2010 -- bugfix on template functions used with template inheritance -- removed /* vim: set expandtab: */ comments -- bugfix of auto literal problem introduce with fix of 31/05/2010 - -31/05/2010 -- bugfix the parser did not allow some smarty variables with special name like $for, $if, $else and others. - -27/05/2010 -- bugfix on object chaining using variable properties -- make scope of {counter} and {cycle} tags again global as in Smarty2 - -26/05/2010 -- bugfix removed decrepated register_resource call in smarty_internal_template.php - -25/05/2010 -- rewrite of template function handling to improve speed -- bugfix on file dependency when merge_compiled_includes = true - - -16/05/2010 -- bugfix when passing parameter with numeric name like {foo 1='bar' 2='blar'} - -14/05/2010 -- bugfix compile new config files if compile_check and force_compile = false -- added variable static classes names to template syntax - -11/05/2010 -- bugfix make sure that the cache resource is loaded in all conditions when template methods getCached... are called externally -- reverted the change 0f 30/04/2010. With the exception of forward references template functions can be again called by a standard tag. - -10/05/2010 -- bugfix on {foreach} and {for} optimizations of 27/04/2010 - -09/05/2010 -- update of template and config file parser because of minor parser generator bugs - -07/05/2010 -- bugfix on {insert} - -06/05/2010 -- bugfix when merging compiled templates and objects are passed as parameter of the {include} tag - -05/05/2010 -- bugfix on {insert} to cache parameter -- implementation of $smarty->default_modifiers as in Smarty2 -- bugfix on getTemplateVars method - -01/05/2010 -- bugfix on handling of variable method names at object chaning - -30/04/2010 -- bugfix when comparing timestamps in sysplugins/smarty_internal_config.php -- work around of a substr_compare bug in older PHP5 versions -- bugfix on template inheritance for tag names starting with "block" -- bugfix on {function} tag with name attribute in doublequoted strings -- fix to make calling of template functions unambiguously by madatory usage of the {call} tag - -## RC1 - - -27/04/2010 -- change default of $debugging_ctrl to 'NONE' -- optimization of compiled code of {foreach} and {for} loops -- change of compiler for config variables - -27/04/2010 -- bugfix in $smarty->cache->clear() method. (do not cache template object) - - -17/04/2010 -- security fix in {math} plugin - - -12/04/2010 -- bugfix in smarty_internal_templatecompilerbase (overloaded property) -- removed parser restrictions in using true,false and null as ID - -07/04/2010 -- bugfix typo in smarty_internal_templatecompilerbase - -31/03/2010 -- compile locking by touching old compiled files to avoid concurrent compilations - -29/03/2010 -- bugfix allow array definitions as modifier parameter -- bugfix observe compile_check property when loading config files -- added the template object as third filter parameter - -25/03/2010 -- change of utility->compileAllTemplates() log messages -- bugfix on nocache code in {function} tags -- new method utility->compileAllConfig() to compile all config files - -24/03/2010 -- bugfix on register->modifier() error messages - -23/03/2010 -- bugfix on template inheritance when calling multiple child/parent relations -- bugfix on caching mode SMARTY_CACHING_LIFETIME_SAVED and cache_lifetime = 0 - -22/03/2010 -- bugfix make directory separator operating system independend in compileAllTemplates() - -21/03/2010 -- removed unused code in compileAllTemplates() - -19/03/2010 -- bugfix for multiple {/block} tags on same line - -17/03/2010 -- bugfix make $smarty->cache->clear() function independent from caching status - -16/03/2010 -- bugfix on assign attribute at registered template objects -- make handling of modifiers on expression BC to Smarty2 - -15/03/2010 -- bugfix on block plugin calls - -11/03/2010 -- changed parsing of <?php and ?> back to Smarty2 behaviour - -08/03/2010 -- bugfix on uninitialized properties in smarty_internal_template -- bugfix on $smarty->disableSecurity() - -04/03/2010 -- bugfix allow uppercase chars in registered resource names -- bugfix on accessing chained objects of static classes - -01/03/2010 -- bugfix on nocache code in {block} tags if child template was included by {include} - -27/02/2010 -- allow block tags inside double quoted string - -26/02/2010 -- cache modified check implemented -- support of access to a class constant from an object (since PHP 5.3) - -24/02/2010 -- bugfix on expressions in doublequoted string enclosed in backticks -- added security property $static_classes for static class security - -18/02/2010 -- bugfix on parsing Smarty tags inside <?xml ... ?> -- bugfix on truncate modifier - -17/02/2010 -- removed restriction that modifiers did require surrounding parenthesis in some cases -- added {$smarty.block.child} special variable for template inheritance - -16/02/2010 -- bugfix on <?xml ... ?> tags for all php_handling modes -- bugfix on parameter of variablefilter.htmlspecialchars.php plugin - -14/02/2010 -- added missing _plugins property in smarty.class.php -- bugfix $smarty.const... inside doublequoted strings and backticks was compiled into wrong PHP code - -12/02/2010 -- bugfix on nested {block} tags -- changed Smarty special variable $smarty.parent to $smarty.block.parent -- added support of nested {bock} tags - -10/02/2010 -- avoid possible notice on $smarty->cache->clear(...), $smarty->clear_cache(....) -- allow Smarty tags inside <? ... ?> tags in SMARTY_PHP_QUOTE and SMARTY_PHP_PASSTHRU mode -- bugfix at new "for" syntax like {for $x=1 to 10 step 2} - -09/02/2010 -- added $smarty->_tag_stack for tracing block tag hierarchy - -08/02/2010 -- bugfix use template fullpath at §smarty->cache->clear(...), $smarty->clear_cache(....) -- bugfix of cache filename on extended templates when force_compile=true - -07/02/2010 -- bugfix on changes of 05/02/2010 -- preserve line endings type form template source -- API changes (see README file) - -05/02/2010 -- bugfix on modifier and block plugins with same name - -02/02/2010 -- retaining newlines at registered functions and function plugins - -01/25/2010 -- bugfix cache resource was not loaded when caching was globally off but enabled at a template object -- added test that $_SERVER['SCRIPT_NAME'] does exist in Smarty.class.php - -01/22/2010 -- new method $smarty->createData([$parent]) for creating a data object (required for bugfixes below) -- bugfix config_load() method now works also on a data object -- bugfix get_config_vars() method now works also on a data and template objects -- bugfix clear_config() method now works also on a data and template objects - -01/19/2010 -- bugfix on plugins if same plugin was called from a nocache section first and later from a cached section - - -###beta 7### - - -01/17/2010 -- bugfix on $smarty.const... in double quoted strings - -01/16/2010 -- internal change of config file lexer/parser on handling of section names -- bugfix on registered objects (format parameter of register_object was not handled correctly) - -01/14/2010 -- bugfix on backslash within single quoted strings -- bugfix allow absolute filepath for config files -- bugfix on special Smarty variable $smarty.cookies -- revert handling of newline on no output tags like {if...} -- allow special characters in config file section names for Smarty2 BC - -01/13/2010 -- bugfix on {if} tags - -01/12/2010 -- changed back modifier handling in parser. Some restrictions still apply: - if modifiers are used in side {if...} expression or in mathematical expressions - parentheses must be used. -- bugfix the {function..} tag did not accept the name attribute in double quotes -- closed possible security hole at <?php ... ?> tags -- bugfix of config file parser on large config files - - -###beta 6#### - -01/11/2010 -- added \n to the compiled code of the {if},{else},{elseif},{/if} tags to get output of newlines as expected by the template source -- added missing support of insert plugins -- added optional nocache attribute to {block} tags in parent template -- updated <?php...?> handling supporting now heredocs and newdocs. (thanks to Thue Jnaus Kristensen) - -01/09/2010 -- bugfix on nocache {block} tags in parent templates - -01/08/2010 -- bugfix on variable filters. filter/nofilter attributes did not work on output statements - -01/07/2010 -- bugfix on file dependency at template inheritance -- bugfix on nocache code at template inheritance - -01/06/2010 -- fixed typo in smarty_internal_resource_registered -- bugfix for custom delimiter at extends resource and {extends} tag - -01/05/2010 -- bugfix sha1() calculations at extends resource and some general improvments on sha1() handling - - -01/03/2010 -- internal change on building cache files - -01/02/2010 -- update cached_timestamp at the template object after cache file is written to avoid possible side effects -- use internally always SMARTY_CACHING_LIFETIME_* constants - -01/01/2010 -- bugfix for obtaining plugins which must be included (related to change of 12/30/2009) -- bugfix for {php} tag (trow an exception if allow_php_tag = false) - -12/31/2009 -- optimization of generated code for doublequoted strings containing variables -- rewrite of {function} tag handling - - can now be declared in an external subtemplate - - can contain nocache sections (nocache_hash handling) - - can be called in noccache sections (nocache_hash handling) - - new {call..} tag to call template functions with a variable name {call name=$foo} -- fixed nocache_hash handling in merged compiled templates - -12/30/2009 -- bugfix for plugins defined in the script as smarty_function_foo - -12/29/2009 -- use sha1() for filepath encoding -- updates on nocache_hash handling -- internal change on merging some data -- fixed cache filename for custom resources - -12/28/2009 -- update for security fixes -- make modifier plugins always trusted -- fixed bug loading modifiers in child template at template inheritance - -12/27/2009 ---- this is a major update with a couple of internal changes --- -- new config file lexer/parser (thanks to Thue Jnaus Kristensen) -- template lexer/parser fixes for PHP and {literal} handing (thanks to Thue Jnaus Kristensen) -- fix on registered plugins with different type but same name -- rewrite of plugin handling (optimized execution speed) -- closed a security hole regarding PHP code injection into cache files -- fixed bug in clear cache handling -- Renamed a couple of internal classes -- code cleanup for merging compiled templates -- couple of runtime optimizations (still not all done) -- update of getCachedTimestamp() -- fixed bug on modifier plugins at nocache output - -12/19/2009 -- bugfix on comment lines in config files - -12/17/2009 -- bugfix of parent/global variable update at included/merged subtemplates -- encode final template filepath into filename of compiled and cached files -- fixed {strip} handling in auto literals - -12/16/2009 -- update of changelog -- added {include file='foo.tpl' inline} inline option to merge compiled code of subtemplate into the calling template - -12/14/2009 -- fixed sideefect of last modification (objects in array index did not work anymore) - -12/13/2009 -- allow boolean negation ("!") as operator on variables outside {if} tag - -12/12/2009 -- bugfix on single quotes inside {function} tag -- fix short append/prepend attributes in {block} tags - -12/11/2009 -- bugfix on clear_compiled_tpl (avoid possible warning) - -12/10/2009 -- bugfix on {function} tags and template inheritance - -12/05/2009 -- fixed problem when a cached file was fetched several times -- removed unneeded lexer code - -12/04/2009 -- added max attribute to for loop -- added security mode allow_super_globals - -12/03/2009 -- template inheritance: child templates can now call functions defined by the {function} tag in the parent template -- added {for $foo = 1 to 5 step 2} syntax -- bugfix for {$foo.$x.$y.$z} - -12/01/2009 -- fixed parsing of names of special formated tags like if,elseif,while,for,foreach -- removed direct access to constants in templates because of some syntax problems -- removed cache resource plugin for mysql from the distribution -- replaced most hard errors (exceptions) by softerrors(trigger_error) in plugins -- use $template_class property for template class name when compiling {include},{eval} and {extends} tags - -11/30/2009 -- map 'true' to SMARTY_CACHING_LIFETIME_CURRENT for the $smarty->caching parameter -- allow {function} tags within {block} tags - -11/28/2009 -- ignore compile_id at debug template -- added direct access to constants in templates -- some lexer/parser optimizations - -11/27/2009 -- added cache resource MYSQL plugin - -11/26/2009 -- bugfix on nested doublequoted strings -- correct line number on unknown tag error message -- changed {include} compiled code -- fix on checking dynamic varibales with error_unassigned = true - -11/25/2009 -- allow the following writing for boolean: true, TRUE, True, false, FALSE, False -- {strip} tag functionality rewritten - -11/24/2009 -- bugfix for $smarty->config_overwrite = false - -11/23/2009 -- suppress warnings on unlink caused by race conditions -- correct line number on unknown tag error message - -------- beta 5 -11/23/2009 -- fixed configfile parser for text starting with a numeric char -- the default_template_handler_func may now return a filepath to a template source - -11/20/2009 -- bugfix for empty config files -- convert timestamps of registered resources to integer - -11/19/2009 -- compiled templates are no longer touched with the filemtime of template source - -11/18/2009 -- allow integer as attribute name in plugin calls - -------- beta 4 -11/18/2009 -- observe umask settings when setting file permissions -- avoide unneeded cache file creation for subtemplates which did occur in some situations -- make $smarty->_current_file available during compilation for Smarty2 BC - -11/17/2009 -- sanitize compile_id and cache_id (replace illegal chars with _) -- use _dir_perms and _file_perms properties at file creation -- new constant SMARTY_RESOURCE_DATE_FORMAT (default '%b %e, %Y') which is used as default format in modifier date_format -- added {foreach $array as $key=>$value} syntax -- renamed extend tag and resource to extends: {extends file='foo.tol'} , $smarty->display('extends:foo.tpl|bar.tpl); -- bugfix cycle plugin - -11/15/2009 -- lexer/parser optimizations on quoted strings - -11/14/2009 -- bugfix on merging compiled templates when source files got removed or renamed. -- bugfix modifiers on registered object tags -- fixed locaion where outputfilters are running -- fixed config file definitions at EOF -- fix on merging compiled templates with nocache sections in nocache includes -- parser could run into a PHP error on wrong file attribute - -11/12/2009 -- fixed variable filenames in {include_php} and {insert} -- added scope to Smarty variables in the {block} tag compiler -- fix on nocache code in child {block} tags - -11/11/2009 -- fixed {foreachelse}, {forelse}, {sectionelse} compiled code at nocache variables -- removed checking for reserved variables -- changed debugging handling - -11/10/2009 -- fixed preg_qoute on delimiters - -11/09/2009 -- lexer/parser bugfix -- new SMARTY_SPL_AUTOLOAD constant to control the autoloader option -- bugfix for {function} block tags in included templates - -11/08/2009 -- fixed alphanumeric array index -- bugfix on complex double quoted strings - -11/05/2009 -- config_load method can now be called on data and template objects - -11/04/2009 -- added typecasting support for template variables -- bugfix on complex indexed special Smarty variables - -11/03/2009 -- fixed parser error on objects with special smarty vars -- fixed file dependency for {incude} inside {block} tag -- fixed not compiling on non existing compiled templates when compile_check = false -- renamed function names of autoloaded Smarty methods to Smarty_Method_.... -- new security_class property (default is Smarty_Security) - -11/02/2009 -- added neq,lte,gte,mod as aliases to if conditions -- throw exception on illegal Smarty() constructor calls - -10/31/2009 -- change of filenames in sysplugins folder for internal spl_autoload function -- lexer/parser changed for increased compilation speed - -10/27/2009 -- fixed missing quotes in include_php.php - -10/27/2009 -- fixed typo in method.register_resource -- pass {} through as literal - -10/26/2009 -- merge only compiled subtemplates into the compiled code of the main template - -10/24/2009 -- fixed nocache vars at internal block tags -- fixed merging of recursive includes - -10/23/2009 -- fixed nocache var problem - -10/22/2009 -- fix trimwhitespace outputfilter parameter - -10/21/2009 -- added {$foo++}{$foo--} syntax -- buxfix changed PHP "if (..):" to "if (..){" because of possible bad code when concenating PHP tags -- autoload Smarty internal classes -- fixed file dependency for config files -- some code optimizations -- fixed function definitions on some autoloaded methods -- fixed nocache variable inside if condition of {if} tag - -10/20/2009 -- check at compile time for variable filter to improve rendering speed if no filter is used -- fixed bug at combination of {elseif} tag and {...} in double quoted strings of static class parameter - -10/19/2009 -- fixed compiled template merging on variable double quoted strings as name -- fixed bug in caching mode 2 and cache_lifetime -1 -- fixed modifier support on block tags - -10/17/2009 -- remove ?>\n<?php and ?><?php sequences from compiled template - -10/15/2009 -- buxfix on assigning array elements inside templates -- parser bugfix on array access - -10/15/2009 -- allow bit operator '&' inside {if} tag -- implementation of ternary operator - -10/13/2009 -- do not recompile evaluated templates if reused just with other data -- recompile config files when config properties did change -- some lexer/parser otimizations - -10/11/2009 -- allow {block} tags inside included templates -- bugfix for resource plugins in Smarty2 format -- some optimizations of internal.template.php - -10/11/2009 -- fixed bug when template with same name is used with different data objects -- fixed bug with double quoted name attribute at {insert} tag -- reenabled assign_by_ref and append_by_ref methods - -10/07/2009 -- removed block nesting checks for {capture} - -10/05/2009 -- added support of "isinstance" to {if} tag - -10/03/2009 -- internal changes to improve performance -- fix registering of filters for classes - -10/01/2009 -- removed default timezone setting -- reactivated PHP resource for simple PHP templates. Must set allow_php_templates = true to enable -- {PHP} tag can be enabled by allow_php_tag = true - -09/30/2009 -- fixed handling template_exits method for all resource types -- bugfix for other cache resources than file -- the methods assign_by_ref is now wrapped to assign, append_by_ref to append -- allow arrays of variables pass in display, fetch and createTemplate calls - $data = array('foo'=>'bar','foo2'=>'blar'); - $smarty->display('my.tpl',$data); - -09/29/2009 -- changed {php} tag handling -- removed support of Smarty::instance() -- removed support of PHP resource type -- improved execution speed of {foreach} tags -- fixed bug in {section} tag - -09/23/2009 -- improvements and bugfix on {include} tag handling -NOTICE: existing compiled template and cache files must be deleted - -09/19/2009 -- replace internal "eval()" calls by "include" during rendering process -- speed improvment for templates which have included subtemplates - the compiled code of included templates is merged into the compiled code of the parent template -- added logical operator "xor" for {if} tag -- changed parameter ordering for Smarty2 BC - fetch($template, $cache_id = null, $compile_id = null, $parent = null) - display($template, $cache_id = null, $compile_id = null, $parent = null) - createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) -- property resource_char_set is now replaced by constant SMARTY_RESOURCE_CHAR_SET -- fixed handling of classes in registered blocks -- speed improvement of lexer on text sections - -09/01/2009 -- dropped nl2br as plugin -- added '<>' as comparission operator in {if} tags -- cached caching_lifetime property to cache_liftime for backward compatibility with Smarty2. - {include} optional attribute is also now cache_lifetime -- fixed trigger_error method (moved into Smarty class) -- version is now Beta!!! - - -08/30/2009 -- some speed optimizations on loading internal plugins - - -08/29/2009 -- implemented caching of registered Resources -- new property 'auto_literal'. if true(default) '{ ' and ' }' interpreted as literal, not as Smarty delimiter - - -08/28/2009 -- Fix on line breaks inside {if} tags - -08/26/2009 -- implemented registered resources as in Smarty2. NOTE: caching does not work yet -- new property 'force_cache'. if true it forces the creation of a new cache file -- fixed modifiers on arrays -- some speed optimization on loading internal classes - - -08/24/2009 -- fixed typo in lexer definition for '!==' operator -- bugfix - the ouput of plugins was not cached -- added global variable SCRIPT_NAME - -08/21/2009 -- fixed problems whitespace in conjuction with custom delimiters -- Smarty tags can now be used as value anywhere - -08/18/2009 -- definition of template class name moded in internal.templatebase.php -- whitespace parser changes - -08/12/2009 -- fixed parser problems - -08/11/2009 -- fixed parser problems with custom delimiter - -08/10/2009 -- update of mb support in plugins - - -08/09/2009 -- fixed problems with doublequoted strings at name attribute of {block} tag -- bugfix at scope attribute of {append} tag - -08/08/2009 -- removed all internal calls of Smarty::instance() -- fixed code in double quoted strings - -08/05/2009 -- bugfix mb_string support -- bugfix of \n.\t etc in double quoted strings - -07/29/2009 -- added syntax for variable config vars like #$foo# - -07/28/2009 -- fixed parsing of $smarty.session vars containing objects - -07/22/2009 -- fix of "$" handling in double quoted strings - -07/21/2009 -- fix that {$smarty.current_dir} return correct value within {block} tags. - -07/20/2009 -- drop error message on unmatched {block} {/block} pairs - -07/01/2009 -- fixed smarty_function_html_options call in plugin function.html_select_date.php (missing ,) - -06/24/2009 -- fixed smarty_function_html_options call in plugin function.html_select_date.php - -06/22/2009 -- fix on \n and spaces inside smarty tags -- removed request_use_auto_globals propert as it is no longer needed because Smarty 3 will always run under PHP 5 - - -06/18/2009 -- fixed compilation of block plugins when caching enabled -- added $smarty.current_dir which returns the current working directory - -06/14/2009 -- fixed array access on super globals -- allow smarty tags within xml tags - -06/13/2009 -- bugfix at extend resource: create unique files for compiled template and cache for each combination of template files -- update extend resource to handle appen and prepend block attributes -- instantiate classes of plugins instead of calling them static - -06/03/2009 -- fixed repeat at block plugins - -05/25/2009 -- fixed problem with caching of compiler plugins - -05/14/2009 -- fixed directory separator handling - -05/09/2009 -- syntax change for stream variables -- fixed bug when using absolute template filepath and caching - -05/08/2009 -- fixed bug of {nocache} tag in included templates - -05/06/2009 -- allow that plugins_dir folder names can end without directory separator - -05/05/2009 -- fixed E_STRICT incompabilities -- {function} tag bug fix -- security policy definitions have been moved from plugins folder to file Security.class.php in libs folder -- added allow_super_global configuration to security - -04/30/2009 -- functions defined with the {function} tag now always have global scope - -04/29/2009 -- fixed problem with directory setter methods -- allow that cache_dir can end without directory separator - -04/28/2009 -- the {function} tag can no longer overwrite standard smarty tags -- inherit functions defined by the {fuction} tag into subtemplates -- added {while <statement>} sytax to while tag - -04/26/2009 -- added trusted stream checking to security -- internal changes at file dependency check for caching - -04/24/2009 -- changed name of {template} tag to {function} -- added new {template} tag - -04/23/2009 -- fixed access of special smarty variables from included template - -04/22/2009 -- unified template stream syntax with standard Smarty resource syntax $smarty->display('mystream:mytemplate') - -04/21/2009 -- change of new style syntax for forach. Now: {foreach $array as $var} like in PHP - -04/20/2009 -- fixed "$foo.bar ..." variable replacement in double quoted strings -- fixed error in {include} tag with variable file attribute - -04/18/2009 -- added stream resources ($smarty->display('mystream://mytemplate')) -- added stream variables {$mystream:myvar} - -04/14/2009 -- fixed compile_id handling on {include} tags -- fixed append/prepend attributes in {block} tag -- added {if 'expression' is in 'array'} syntax -- use crc32 as hash for compiled config files. - -04/13/2009 -- fixed scope problem with parent variables when appending variables within templates. -- fixed code for {block} without childs (possible sources for notice errors removed) - -04/12/2009 -- added append and prepend attribute to {block} tag - -04/11/2009 -- fixed variables in 'file' attribute of {extend} tag -- fixed problems in modifiers (if mb string functions not present) - -04/10/2009 -- check if mb string functions available otherwise fallback to normal string functions -- added global variable scope SMARTY_GLOBAL_SCOPE -- enable 'variable' filter by default -- fixed {$smarty.block.parent.foo} -- implementation of a 'variable' filter as replacement for default modifier - -04/09/2009 -- fixed execution of filters defined by classes -- compile the always the content of {block} tags to make shure that the filters are running over it -- syntax corrections on variable object property -- syntax corrections on array access in dot syntax - -04/08/2009 -- allow variable object property - -04/07/2009 -- changed variable scopes to SMARTY_LOCAL_SCOPE, SMARTY_PARENT_SCOPE, SMARTY_ROOT_SCOPE to avoid possible conflicts with user constants -- Smarty variable global attribute replaced with scope attribute - -04/06/2009 -- variable scopes LOCAL_SCOPE, PARENT_SCOPE, ROOT_SCOPE -- more getter/setter methods - -04/05/2009 -- replaced new array looping syntax {for $foo in $array} with {foreach $foo in $array} to avoid confusion -- added append array for short form of assign {$foo[]='bar'} and allow assignments to nested arrays {$foo['bla']['blue']='bar'} - -04/04/2009 -- make output of template default handlers cachable and save compiled source -- some fixes on yesterdays update - -04/03/2006 -- added registerDefaultTemplateHandler method and functionallity -- added registerDefaultPluginHandler method and functionallity -- added {append} tag to extend Smarty array variabled - -04/02/2009 -- added setter/getter methods -- added $foo@first and $foo@last properties at {for} tag -- added $set_timezone (true/false) property to setup optionally the default time zone - -03/31/2009 -- bugfix smarty.class and internal.security_handler -- added compile_check configuration -- added setter/getter methods - -03/30/2009 -- added all major setter/getter methods - -03/28/2009 -- {block} tags can be nested now -- md5 hash function replace with crc32 for speed optimization -- file order for exted resource inverted -- clear_compiled_tpl and clear_cache_all will not touch .svn folder any longer - -03/27/2009 -- added extend resource - -03/26/2009 -- fixed parser not to create error on `word` in double quoted strings -- allow PHP array(...) -- implemented $smarty.block.name.parent to access parent block content -- fixed smarty.class - - -03/23/2009 -- fixed {foreachelse} and {forelse} tags - -03/22/2009 -- fixed possible sources for notice errors -- rearrange SVN into distribution and development folders - -03/21/2009 -- fixed exceptions in function plugins -- fixed notice error in Smarty.class.php -- allow chained objects to span multiple lines -- fixed error in modifiers - -03/20/2009 -- moved /plugins folder into /libs folder -- added noprint modifier -- autoappend a directory separator if the xxxxx_dir definition have no trailing one - -03/19/2009 -- allow array definition as modifier parameter -- changed modifier to use multi byte string funktions. - -03/17/2009 -- bugfix - -03/15/2009 -- added {include_php} tag for BC -- removed @ error suppression -- bugfix fetch did always repeat output of first call when calling same template several times -- PHPunit tests extended - -03/13/2009 -- changed block syntax to be Smarty like {block:titel} -> {block name=titel} -- compiling of {block} and {extend} tags rewriten for better performance -- added special Smarty variable block ($smarty.block.foo} returns the parent definition of block foo -- optimization of {block} tag compiled code. -- fixed problem with escaped double quotes in double quoted strings - -03/12/2009 -- added support of template inheritance by {extend } and {block } tags. -- bugfix comments within literals -- added scope attribuie to {include} tag - -03/10/2009 -- couple of bugfixes and improvements -- PHPunit tests extended - -03/09/2009 -- added support for global template vars. {assign_global...} $smarty->assign_global(...) -- added direct_access_security -- PHPunit tests extended -- added missing {if} tag conditions like "is div by" etc. - -03/08/2009 -- splitted up the Compiler class to make it easier to use a coustom compiler -- made default plugins_dir relative to Smarty root and not current working directory -- some changes to make the lexer parser better configurable -- implemented {section} tag for Smarty2 BC - -03/07/2009 -- fixed problem with comment tags -- fixed problem with #xxxx in double quoted string -- new {while} tag implemented -- made lexer and paser class configurable as $smarty property -- Smarty method get_template_vars implemented -- Smarty method get_registered_object implemented -- Smarty method trigger_error implemented -- PHPunit tests extended - -03/06/2009 -- final changes on config variable handling -- parser change - unquoted strings will by be converted into single quoted strings -- PHPunit tests extended -- some code cleanup -- fixed problem on catenate strings with expression -- update of count_words modifier -- bugfix on comment tags - - -03/05/2009 -- bugfix on <?xml...> tag with caching enabled -- changes on exception handling (by Monte) - -03/04/2009 -- added support for config variables -- bugfix on <?xml...> tag - -03/02/2009 -- fixed unqouted strings within modifier parameter -- bugfix parsing of mofifier parameter - -03/01/2009 -- modifier chaining works now as in Smarty2 - -02/28/2009 -- changed handling of unqouted strings - -02/26/2009 -- bugfix -- changed $smarty.capture.foo to be global for Smarty2 BC. - -02/24/2009 -- bugfix {php} {/php} tags for backward compatibility -- bugfix for expressions on arrays -- fixed usage of "null" value -- added $smarty.foreach.foo.first and $smarty.foreach.foo.last - -02/06/2009 -- bugfix for request variables without index for example $smarty.get -- experimental solution for variable functions in static class - -02/05/2009 -- update of popup plugin -- added config variables to template parser (load config functions still missing) -- parser bugfix for empty quoted strings - -02/03/2009 -- allow array of objects as static class variabales. -- use htmlentities at source output at template errors. - -02/02/2009 -- changed search order on modifiers to look at plugins folder first -- parser bug fix for modifier on array elements $foo.bar|modifier -- parser bug fix on single quoted srings -- internal: splitted up compiler plugin files - -02/01/2009 -- allow method chaining on static classes -- special Smarty variables $smarty.... implemented -- added {PHP} {/PHP} tags for backward compatibility - -01/31/2009 -- added {math} plugin for Smarty2 BC -- added template_exists method -- changed Smarty3 method enable_security() to enableSecurity() to follow camelCase standards - -01/30/2009 -- bugfix in single quoted strings -- changed syntax for variable property access from $foo:property to $foo@property because of ambiguous syntax at modifiers - -01/29/2009 -- syntax for array definition changed from (1,2,3) to [1,2,3] to remove ambiguous syntax -- allow {for $foo in [1,2,3]} syntax -- bugfix in double quoted strings -- allow <?xml...?> tags in template even if short_tags are enabled - -01/28/2009 -- fixed '!==' if condition. - -01/28/2009 -- added support of {strip} {/strip} tag. - -01/27/2009 -- bug fix on backticks in double quoted strings at objects - -01/25/2009 -- Smarty2 modfiers added to SVN - -01/25/2009 -- bugfix allow arrays at object properties in Smarty syntax -- the template object is now passed as additional parameter at plugin calls -- clear_compiled_tpl method completed - -01/20/2009 -- access to class constants implemented ( class::CONSTANT ) -- access to static class variables implemented ( class::$variable ) -- call of static class methods implemented ( class::method() ) - -01/16/2009 -- reallow leading _ in variable names {$_var} -- allow array of objects {$array.index->method()} syntax -- finished work on clear_cache and clear_cache_all methods - -01/11/2009 -- added support of {literal} tag -- added support of {ldelim} and {rdelim} tags -- make code compatible to run with E_STRICT error setting - -01/08/2009 -- moved clear_assign and clear_all_assign to internal.templatebase.php -- added assign_by_ref, append and append_by_ref methods - -01/02/2009 -- added load_filter method -- fished work on filter handling -- optimization of plugin loading - -12/30/2008 -- added compiler support of registered object -- added backtick support in doubled quoted strings for backward compatibility -- some minor bug fixes and improvments - -12/23/2008 -- fixed problem of not working "not" operator in if-expressions -- added handling of compiler function plugins -- finished work on (un)register_compiler_function method -- finished work on (un)register_modifier method -- plugin handling from plugins folder changed for modifier plugins - deleted - internal.modifier.php -- added modifier chaining to parser - -12/17/2008 -- finished (un)register_function method -- finished (un)register_block method -- added security checking for PHP functions in PHP templates -- plugin handling from plugins folder rewritten - new - internal.plugin_handler.php - deleted - internal.block.php - deleted - internal.function.php -- removed plugin checking from security handler - -12/16/2008 - -- new start of this change_log file diff --git a/vendor/smarty/smarty/lexer/smarty_internal_configfilelexer.plex b/vendor/smarty/smarty/lexer/smarty_internal_configfilelexer.plex deleted file mode 100644 index 7a86fadc4..000000000 --- a/vendor/smarty/smarty/lexer/smarty_internal_configfilelexer.plex +++ /dev/null @@ -1,318 +0,0 @@ -<?php -/** -* Smarty Internal Plugin Configfilelexer -* -* This is the lexer to break the config file source into tokens -* @package Smarty -* @subpackage Config -* @author Uwe Tews -*/ -/** -* Smarty_Internal_Configfilelexer -* -* This is the config file lexer. -* It is generated from the smarty_internal_configfilelexer.plex file -* -* @package Smarty -* @subpackage Compiler -* @author Uwe Tews -*/ -class Smarty_Internal_Configfilelexer -{ - /** - * Source - * - * @var string - */ - public $data; - /** - * Source length - * - * @var int - */ - public $dataLength = null; - /** - * byte counter - * - * @var int - */ - public $counter; - /** - * token number - * - * @var int - */ - public $token; - /** - * token value - * - * @var string - */ - public $value; - /** - * current line - * - * @var int - */ - public $line; - /** - * state number - * - * @var int - */ - public $state = 1; - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - /** - * compiler object - * - * @var Smarty_Internal_Config_File_Compiler - */ - private $compiler = null; - /** - * copy of config_booleanize - * - * @var bool - */ - private $configBooleanize = false; - /** - * trace file - * - * @var resource - */ - public $yyTraceFILE; - /** - * trace prompt - * - * @var string - */ - public $yyTracePrompt; - /** - * state names - * - * @var array - */ - public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE'); - - /** - * storage for assembled token patterns - * - * @var string - */ - private $yy_global_pattern1 = null; - private $yy_global_pattern2 = null; - private $yy_global_pattern3 = null; - private $yy_global_pattern4 = null; - private $yy_global_pattern5 = null; - private $yy_global_pattern6 = null; - - /** - * token names - * - * @var array - */ - public $smarty_token_names = array( // Text for parser error messages - ); - - /** - * constructor - * - * @param string $data template source - * @param Smarty_Internal_Config_File_Compiler $compiler - */ - public function __construct($data, Smarty_Internal_Config_File_Compiler $compiler) - { - $this->data = $data . "\n"; //now all lines are \n-terminated - $this->dataLength = strlen($data); - $this->counter = 0; - if (preg_match('/^\xEF\xBB\xBF/', $this->data, $match)) { - $this->counter += strlen($match[0]); - } - $this->line = 1; - $this->compiler = $compiler; - $this->smarty = $compiler->smarty; - $this->configBooleanize = $this->smarty->config_booleanize; - } - - public function replace ($input) { - return $input; - } - - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - -/*!lex2php -%input $this->data -%counter $this->counter -%token $this->token -%value $this->value -%line $this->line -commentstart = /#|;/ -openB = /\[/ -closeB = /\]/ -section = /.*?(?=[\.=\[\]\r\n])/ -equal = /=/ -whitespace = /[ \t\r]+/ -dot = /\./ -id = /[0-9]*[a-zA-Z_]\w*/ -newline = /\n/ -single_quoted_string = /'[^'\\]*(?:\\.[^'\\]*)*'(?=[ \t\r]*[\n#;])/ -double_quoted_string = /"[^"\\]*(?:\\.[^"\\]*)*"(?=[ \t\r]*[\n#;])/ -tripple_quotes = /"""/ -tripple_quotes_end = /"""(?=[ \t\r]*[\n#;])/ -text = /[\S\s]/ -float = /\d+\.\d+(?=[ \t\r]*[\n#;])/ -int = /\d+(?=[ \t\r]*[\n#;])/ -maybe_bool = /[a-zA-Z]+(?=[ \t\r]*[\n#;])/ -naked_string = /[^\n]+?(?=[ \t\r]*\n)/ -*/ - -/*!lex2php -%statename START - -commentstart { - $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART; - $this->yypushstate(self::COMMENT); -} -openB { - $this->token = Smarty_Internal_Configfileparser::TPC_OPENB; - $this->yypushstate(self::SECTION); -} -closeB { - $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB; -} -equal { - $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL; - $this->yypushstate(self::VALUE); -} -whitespace { - return false; -} -newline { - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; -} -id { - $this->token = Smarty_Internal_Configfileparser::TPC_ID; -} -text { - $this->token = Smarty_Internal_Configfileparser::TPC_OTHER; -} - -*/ - -/*!lex2php -%statename VALUE - -whitespace { - return false; -} -float { - $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT; - $this->yypopstate(); -} -int { - $this->token = Smarty_Internal_Configfileparser::TPC_INT; - $this->yypopstate(); -} -tripple_quotes { - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES; - $this->yypushstate(self::TRIPPLE); -} -single_quoted_string { - $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING; - $this->yypopstate(); -} -double_quoted_string { - $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING; - $this->yypopstate(); -} -maybe_bool { - if (!$this->configBooleanize || !in_array(strtolower($this->value), array('true', 'false', 'on', 'off', 'yes', 'no')) ) { - $this->yypopstate(); - $this->yypushstate(self::NAKED_STRING_VALUE); - return true; //reprocess in new state - } else { - $this->token = Smarty_Internal_Configfileparser::TPC_BOOL; - $this->yypopstate(); - } -} -naked_string { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); -} -newline { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->value = ''; - $this->yypopstate(); -} - -*/ - -/*!lex2php -%statename NAKED_STRING_VALUE - -naked_string { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; - $this->yypopstate(); -} - -*/ - -/*!lex2php -%statename COMMENT - -whitespace { - return false; -} -naked_string { - $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING; -} -newline { - $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE; - $this->yypopstate(); -} - -*/ - -/*!lex2php -%statename SECTION - -dot { - $this->token = Smarty_Internal_Configfileparser::TPC_DOT; -} -section { - $this->token = Smarty_Internal_Configfileparser::TPC_SECTION; - $this->yypopstate(); -} - -*/ -/*!lex2php -%statename TRIPPLE - -tripple_quotes_end { - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END; - $this->yypopstate(); - $this->yypushstate(self::START); -} -text { - $to = strlen($this->data); - preg_match("/\"\"\"[ \t\r]*[\n#;]/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_config_file_error ('missing or misspelled literal closing tag'); - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_TEXT; -} -*/ - -} diff --git a/vendor/smarty/smarty/lexer/smarty_internal_configfileparser.y b/vendor/smarty/smarty/lexer/smarty_internal_configfileparser.y deleted file mode 100644 index c981b58e9..000000000 --- a/vendor/smarty/smarty/lexer/smarty_internal_configfileparser.y +++ /dev/null @@ -1,346 +0,0 @@ -/** -* Smarty Internal Plugin Configfileparser -* -* This is the config file parser -* -* -* @package Smarty -* @subpackage Config -* @author Uwe Tews -*/ -%name TPC_ -%declare_class { -/** -* Smarty Internal Plugin Configfileparse -* -* This is the config file parser. -* It is generated from the smarty_internal_configfileparser.y file -* @package Smarty -* @subpackage Compiler -* @author Uwe Tews -*/ -class Smarty_Internal_Configfileparser -} -%include_class -{ - /** - * result status - * - * @var bool - */ - public $successful = true; - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - /** - * @var - */ - public $yymajor; - /** - * lexer object - * - * @var Smarty_Internal_Configfilelexer - */ - private $lex; - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - /** - * compiler object - * - * @var Smarty_Internal_Config_File_Compiler - */ - public $compiler = null; - /** - * smarty object - * - * @var Smarty - */ - public $smarty = null; - /** - * copy of config_overwrite property - * - * @var bool - */ - private $configOverwrite = false; - /** - * copy of config_read_hidden property - * - * @var bool - */ - private $configReadHidden = false; - /** - * helper map - * - * @var array - */ - private static $escapes_single = array('\\' => '\\', - '\'' => '\''); - - /** - * constructor - * - * @param Smarty_Internal_Configfilelexer $lex - * @param Smarty_Internal_Config_File_Compiler $compiler - */ - public function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Internal_Config_File_Compiler $compiler) - { - $this->lex = $lex; - $this->smarty = $compiler->smarty; - $this->compiler = $compiler; - $this->configOverwrite = $this->smarty->config_overwrite; - $this->configReadHidden = $this->smarty->config_read_hidden; - } - - /** - * parse optional boolean keywords - * - * @param string $str - * - * @return bool - */ - private function parse_bool($str) - { - $str = strtolower($str); - if (in_array($str, array('on', 'yes', 'true'))) { - $res = true; - } else { - $res = false; - } - return $res; - } - - /** - * parse single quoted string - * remove outer quotes - * unescape inner quotes - * - * @param string $qstr - * - * @return string - */ - private static function parse_single_quoted_string($qstr) - { - $escaped_string = substr($qstr, 1, strlen($qstr) - 2); //remove outer quotes - - $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE); - - $str = ''; - foreach ($ss as $s) { - if (strlen($s) === 2 && $s[0] === '\\') { - if (isset(self::$escapes_single[$s[1]])) { - $s = self::$escapes_single[$s[1]]; - } - } - $str .= $s; - } - return $str; - } - - /** - * parse double quoted string - * - * @param string $qstr - * - * @return string - */ - private static function parse_double_quoted_string($qstr) - { - $inner_str = substr($qstr, 1, strlen($qstr) - 2); - return stripcslashes($inner_str); - } - - /** - * parse triple quoted string - * - * @param string $qstr - * - * @return string - */ - private static function parse_tripple_double_quoted_string($qstr) - { - return stripcslashes($qstr); - } - - /** - * set a config variable in target array - * - * @param array $var - * @param array $target_array - */ - private function set_var(array $var, array &$target_array) - { - $key = $var['key']; - $value = $var['value']; - - if ($this->configOverwrite || !isset($target_array['vars'][$key])) { - $target_array['vars'][$key] = $value; - } else { - settype($target_array['vars'][$key], 'array'); - $target_array['vars'][$key][] = $value; - } - } - - /** - * add config variable to global vars - * - * @param array $vars - */ - private function add_global_vars(array $vars) - { - if (!isset($this->compiler->config_data['vars'])) { - $this->compiler->config_data['vars'] = array(); - } - foreach ($vars as $var) { - $this->set_var($var, $this->compiler->config_data); - } - } - - /** - * add config variable to section - * - * @param string $section_name - * @param array $vars - */ - private function add_section_vars($section_name, array $vars) - { - if (!isset($this->compiler->config_data['sections'][$section_name]['vars'])) { - $this->compiler->config_data['sections'][$section_name]['vars'] = array(); - } - foreach ($vars as $var) { - $this->set_var($var, $this->compiler->config_data['sections'][$section_name]); - } - } -} - -%token_prefix TPC_ - -%parse_accept -{ - $this->successful = !$this->internalError; - $this->internalError = false; - $this->retvalue = $this->_retvalue; -} - -%syntax_error -{ - $this->internalError = true; - $this->yymajor = $yymajor; - $this->compiler->trigger_config_file_error(); -} - -%stack_overflow -{ - $this->internalError = true; - $this->compiler->trigger_config_file_error('Stack overflow in configfile parser'); -} - -// Complete config file -start(res) ::= global_vars sections. { - res = null; -} - -// Global vars -global_vars(res) ::= var_list(vl). { - $this->add_global_vars(vl); - res = null; -} - -// Sections -sections(res) ::= sections section. { - res = null; -} - -sections(res) ::= . { - res = null; -} - -section(res) ::= OPENB SECTION(i) CLOSEB newline var_list(vars). { - $this->add_section_vars(i, vars); - res = null; -} - -section(res) ::= OPENB DOT SECTION(i) CLOSEB newline var_list(vars). { - if ($this->configReadHidden) { - $this->add_section_vars(i, vars); - } - res = null; -} - -// Var list -var_list(res) ::= var_list(vl) newline. { - res = vl; -} - -var_list(res) ::= var_list(vl) var(v). { - res = array_merge(vl, array(v)); -} - -var_list(res) ::= . { - res = array(); -} - - -// Var -var(res) ::= ID(id) EQUAL value(v). { - res = array('key' => id, 'value' => v); -} - - -value(res) ::= FLOAT(i). { - res = (float) i; -} - -value(res) ::= INT(i). { - res = (int) i; -} - -value(res) ::= BOOL(i). { - res = $this->parse_bool(i); -} - -value(res) ::= SINGLE_QUOTED_STRING(i). { - res = self::parse_single_quoted_string(i); -} - -value(res) ::= DOUBLE_QUOTED_STRING(i). { - res = self::parse_double_quoted_string(i); -} - -value(res) ::= TRIPPLE_QUOTES(i) TRIPPLE_TEXT(c) TRIPPLE_QUOTES_END(ii). { - res = self::parse_tripple_double_quoted_string(c); -} - -value(res) ::= TRIPPLE_QUOTES(i) TRIPPLE_QUOTES_END(ii). { - res = ''; -} - -value(res) ::= NAKED_STRING(i). { - res = i; -} - -// NOTE: this is not a valid rule -// It is added hier to produce a usefull error message on a missing '='; -value(res) ::= OTHER(i). { - res = i; -} - - -// Newline and comments -newline(res) ::= NEWLINE. { - res = null; -} - -newline(res) ::= COMMENTSTART NEWLINE. { - res = null; -} - -newline(res) ::= COMMENTSTART NAKED_STRING NEWLINE. { - res = null; -} diff --git a/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex b/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex deleted file mode 100644 index ac1250255..000000000 --- a/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex +++ /dev/null @@ -1,696 +0,0 @@ -<?php -/* - * This file is part of Smarty. - * - * (c) 2015 Uwe Tews - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Smarty_Internal_Templatelexer - * This is the template file lexer. - * It is generated from the smarty_internal_templatelexer.plex file - * - * - * @author Uwe Tews <uwe.tews@googlemail.com> - */ -class Smarty_Internal_Templatelexer -{ - /** - * Source - * - * @var string - */ - public $data; - - /** - * Source length - * - * @var int - */ - public $dataLength = null; - - /** - * byte counter - * - * @var int - */ - public $counter; - - /** - * token number - * - * @var int - */ - public $token; - - /** - * token value - * - * @var string - */ - public $value; - - /** - * current line - * - * @var int - */ - public $line; - - /** - * tag start line - * - * @var - */ - public $taglineno; - - /** - * php code type - * - * @var string - */ - public $phpType = ''; - - /** - * state number - * - * @var int - */ - public $state = 1; - - /** - * Smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - - /** - * trace file - * - * @var resource - */ - public $yyTraceFILE; - - /** - * trace prompt - * - * @var string - */ - public $yyTracePrompt; - - /** - * XML flag true while processing xml - * - * @var bool - */ - public $is_xml = false; - - /** - * state names - * - * @var array - */ - public $state_name = array(1 => 'TEXT', 2 => 'TAG', 3 => 'TAGBODY', 4 => 'LITERAL', 5 => 'DOUBLEQUOTEDSTRING',); - - /** - * token names - * - * @var array - */ - public $smarty_token_names = array( // Text for parser error messages - 'NOT' => '(!,not)', - 'OPENP' => '(', - 'CLOSEP' => ')', - 'OPENB' => '[', - 'CLOSEB' => ']', - 'PTR' => '->', - 'APTR' => '=>', - 'EQUAL' => '=', - 'NUMBER' => 'number', - 'UNIMATH' => '+" , "-', - 'MATH' => '*" , "/" , "%', - 'INCDEC' => '++" , "--', - 'SPACE' => ' ', - 'DOLLAR' => '$', - 'SEMICOLON' => ';', - 'COLON' => ':', - 'DOUBLECOLON' => '::', - 'AT' => '@', - 'HATCH' => '#', - 'QUOTE' => '"', - 'BACKTICK' => '`', - 'VERT' => '"|" modifier', - 'DOT' => '.', - 'COMMA' => '","', - 'QMARK' => '"?"', - 'ID' => 'id, name', - 'TEXT' => 'text', - 'LDELSLASH' => '{/..} closing tag', - 'LDEL' => '{...} Smarty tag', - 'COMMENT' => 'comment', - 'AS' => 'as', - 'TO' => 'to', - 'PHP' => '"<?php", "<%", "{php}" tag', - 'LOGOP' => '"<", "==" ... logical operator', - 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', - 'SCOND' => '"is even" ... if condition', - ); - - /** - * literal tag nesting level - * - * @var int - */ - private $literal_cnt = 0; - - /** - * preg token pattern for state TEXT - * - * @var string - */ - private $yy_global_pattern1 = null; - - /** - * preg token pattern for state TAG - * - * @var string - */ - private $yy_global_pattern2 = null; - - /** - * preg token pattern for state TAGBODY - * - * @var string - */ - private $yy_global_pattern3 = null; - - /** - * preg token pattern for state LITERAL - * - * @var string - */ - private $yy_global_pattern4 = null; - - /** - * preg token pattern for state DOUBLEQUOTEDSTRING - * - * @var null - */ - private $yy_global_pattern5 = null; - - /** - * preg token pattern for text - * - * @var null - */ - private $yy_global_text = null; - - /** - * preg token pattern for literal - * - * @var null - */ - private $yy_global_literal = null; - - /** - * constructor - * - * @param string $source template source - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - public function __construct($source, Smarty_Internal_TemplateCompilerBase $compiler) - { - $this->data = $source; - $this->dataLength = strlen($this->data); - $this->counter = 0; - if (preg_match('/^\xEF\xBB\xBF/i', $this->data, $match)) { - $this->counter += strlen($match[0]); - } - $this->line = 1; - $this->smarty = $compiler->template->smarty; - $this->compiler = $compiler; - $this->compiler->initDelimiterPreg(); - $this->smarty_token_names['LDEL'] = $this->smarty->getLeftDelimiter(); - $this->smarty_token_names['RDEL'] = $this->smarty->getRightDelimiter(); - } - - /** - * open lexer/parser trace file - * - */ - public function PrintTrace() - { - $this->yyTraceFILE = fopen('php://output', 'w'); - $this->yyTracePrompt = '<br>'; - } - - /** - * replace placeholders with runtime preg code - * - * @param string $preg - * - * @return string - */ - public function replace($preg) - { - return $this->compiler->replaceDelimiter($preg); - } - - /** - * check if current value is an autoliteral left delimiter - * - * @return bool - */ - public function isAutoLiteral() - { - return $this->smarty->getAutoLiteral() && isset($this->value[ $this->compiler->getLdelLength() ]) ? - strpos(" \n\t\r", $this->value[ $this->compiler->getLdelLength() ]) !== false : false; - } - - /*!lex2php - %input $this->data - %counter $this->counter - %token $this->token - %value $this->value - %line $this->line - userliteral = ~(SMARTYldel)SMARTYautoliteral\s+SMARTYliteral~ - char = ~[\S\s]~ - textdoublequoted = ~([^"\\]*?)((?:\\.[^"\\]*?)*?)(?=((SMARTYldel)SMARTYal|\$|`\$|"SMARTYliteral))~ - namespace = ~([0-9]*[a-zA-Z_]\w*)?(\\[0-9]*[a-zA-Z_]\w*)+~ - emptyjava = ~[{][}]~ - phptag = ~(SMARTYldel)SMARTYalphp([ ].*?)?SMARTYrdel|(SMARTYldel)SMARTYal[/]phpSMARTYrdel~ - phpstart = ~[<][?]((php\s+|=)|\s+)|[<][%]|[<][?]xml\s+|[<]script\s+language\s*=\s*["']?\s*php\s*["']?\s*[>]|[?][>]|[%][>]~ - slash = ~[/]~ - ldel = ~(SMARTYldel)SMARTYal~ - rdel = ~\s*SMARTYrdel~ - nocacherdel = ~(\s+nocache)?\s*SMARTYrdel~ - smartyblockchildparent = ~[\$]smarty\.block\.(child|parent)~ - integer = ~\d+~ - hex = ~0[xX][0-9a-fA-F]+~ - math = ~\s*([*]{1,2}|[%/^&]|[<>]{2})\s*~ - comment = ~(SMARTYldel)SMARTYal[*]~ - incdec = ~([+]|[-]){2}~ - unimath = ~\s*([+]|[-])\s*~ - openP = ~\s*[(]\s*~ - closeP = ~\s*[)]~ - openB = ~\[\s*~ - closeB = ~\s*\]~ - dollar = ~[$]~ - dot = ~[.]~ - comma = ~\s*[,]\s*~ - doublecolon = ~[:]{2}~ - colon = ~\s*[:]\s*~ - at = ~[@]~ - hatch = ~[#]~ - semicolon = ~\s*[;]\s*~ - equal = ~\s*[=]\s*~ - space = ~\s+~ - ptr = ~\s*[-][>]\s*~ - aptr = ~\s*[=][>]\s*~ - singlequotestring = ~'[^'\\]*(?:\\.[^'\\]*)*'~ - backtick = ~[`]~ - vert = ~[|][@]?~ - qmark = ~\s*[?]\s*~ - constant = ~[_]+[A-Z0-9][0-9A-Z_]*|[A-Z][0-9A-Z_]*(?![0-9A-Z_]*[a-z])~ - attr = ~\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\s*[=]\s*~ - id = ~[0-9]*[a-zA-Z_]\w*~ - literal = ~literal~ - strip = ~strip~ - lop = ~\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\s*~ - slop = ~\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\s+~ - tlop = ~\s+is\s+(not\s+)?(odd|even|div)\s+by\s+~ - scond = ~\s+is\s+(not\s+)?(odd|even)~ - isin = ~\s+is\s+in\s+~ - as = ~\s+as\s+~ - to = ~\s+to\s+~ - step = ~\s+step\s+~ - if = ~(if|elseif|else if|while)\s+~ - for = ~for\s+~ - makenocache = ~make_nocache\s+~ - array = ~array~ - foreach = ~foreach(?![^\s])~ - setfilter = ~setfilter\s+~ - instanceof = ~\s+instanceof\s+~ - not = ~[!]\s*|not\s+~ - typecast = ~[(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\s*~ - double_quote = ~["]~ - */ - /*!lex2php - %statename TEXT - emptyjava { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - comment { - $to = $this->dataLength; - preg_match("/[*]{$this->compiler->getRdelPreg()}[\n]?/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1] + strlen($match[0][0]); - } else { - $this->compiler->trigger_template_error ("missing or misspelled comment closing tag '{$this->smarty->getRightDelimiter()}'"); - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - return false; - } - phptag { - $this->compiler->getTagCompiler('private_php')->parsePhp($this); - } - userliteral { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - ldel literal rdel { - $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART; - $this->yypushstate(self::LITERAL); - } - ldel slash literal rdel { - $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; - $this->yypushstate(self::LITERAL); - } - ldel { - $this->yypushstate(self::TAG); - return true; - } - phpstart { - $this->compiler->getTagCompiler('private_php')->parsePhp($this); - } - char { - if (!isset($this->yy_global_text)) { - $this->yy_global_text = $this->replace('/(SMARTYldel)SMARTYal|[<][?]((php\s+|=)|\s+)|[<][%]|[<][?]xml\s+|[<]script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*[>]|[?][>]|[%][>]SMARTYliteral/isS'); - } - $to = $this->dataLength; - preg_match($this->yy_global_text, $this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - */ - /*!lex2php - %statename TAG - ldel if { - $this->token = Smarty_Internal_Templateparser::TP_LDELIF; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel for { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOR; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel foreach { - $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel setfilter { - $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel makenocache { - $this->token = Smarty_Internal_Templateparser::TP_LDELMAKENOCACHE; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel id nocacherdel { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SIMPLETAG; - $this->taglineno = $this->line; - } - ldel smartyblockchildparent rdel { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT; - $this->taglineno = $this->line; - } - ldel slash id rdel { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_CLOSETAG; - $this->taglineno = $this->line; - } - ldel dollar id nocacherdel { - if ($this->_yy_stack[count($this->_yy_stack)-1] === self::TEXT) { - $this->yypopstate(); - $this->token = Smarty_Internal_Templateparser::TP_SIMPELOUTPUT; - $this->taglineno = $this->line; - } else { - $this->value = $this->smarty->getLeftDelimiter(); - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - } - ldel slash { - $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - ldel { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->yybegin(self::TAGBODY); - $this->taglineno = $this->line; - } - */ - /*!lex2php - %statename TAGBODY - rdel { - $this->token = Smarty_Internal_Templateparser::TP_RDEL; - $this->yypopstate(); - } - ldel { - $this->yypushstate(self::TAG); - return true; - } - double_quote { - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypushstate(self::DOUBLEQUOTEDSTRING); - $this->compiler->enterDoubleQuote(); - } - singlequotestring { - $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING; - } - dollar id { - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - dollar { - $this->token = Smarty_Internal_Templateparser::TP_DOLLAR; - } - isin { - $this->token = Smarty_Internal_Templateparser::TP_ISIN; - } - as { - $this->token = Smarty_Internal_Templateparser::TP_AS; - } - to { - $this->token = Smarty_Internal_Templateparser::TP_TO; - } - step { - $this->token = Smarty_Internal_Templateparser::TP_STEP; - } - instanceof { - $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF; - } - lop { - $this->token = Smarty_Internal_Templateparser::TP_LOGOP; - } - slop { - $this->token = Smarty_Internal_Templateparser::TP_SLOGOP; - } - tlop { - $this->token = Smarty_Internal_Templateparser::TP_TLOGOP; - } - scond { - $this->token = Smarty_Internal_Templateparser::TP_SINGLECOND; - } - not{ - $this->token = Smarty_Internal_Templateparser::TP_NOT; - } - typecast { - $this->token = Smarty_Internal_Templateparser::TP_TYPECAST; - } - openP { - $this->token = Smarty_Internal_Templateparser::TP_OPENP; - } - closeP { - $this->token = Smarty_Internal_Templateparser::TP_CLOSEP; - } - openB { - $this->token = Smarty_Internal_Templateparser::TP_OPENB; - } - closeB { - $this->token = Smarty_Internal_Templateparser::TP_CLOSEB; - } - ptr { - $this->token = Smarty_Internal_Templateparser::TP_PTR; - } - aptr { - $this->token = Smarty_Internal_Templateparser::TP_APTR; - } - equal { - $this->token = Smarty_Internal_Templateparser::TP_EQUAL; - } - incdec { - $this->token = Smarty_Internal_Templateparser::TP_INCDEC; - } - unimath { - $this->token = Smarty_Internal_Templateparser::TP_UNIMATH; - } - math { - $this->token = Smarty_Internal_Templateparser::TP_MATH; - } - at { - $this->token = Smarty_Internal_Templateparser::TP_AT; - } - array openP { - $this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN; - } - hatch { - $this->token = Smarty_Internal_Templateparser::TP_HATCH; - } - attr { - // resolve conflicts with shorttag and right_delimiter starting with '=' - if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) === $this->smarty->getRightDelimiter()) { - preg_match('/\s+/',$this->value,$match); - $this->value = $match[0]; - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } else { - $this->token = Smarty_Internal_Templateparser::TP_ATTR; - } - } - namespace { - $this->token = Smarty_Internal_Templateparser::TP_NAMESPACE; - } - id { - $this->token = Smarty_Internal_Templateparser::TP_ID; - } - integer { - $this->token = Smarty_Internal_Templateparser::TP_INTEGER; - } - backtick { - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->yypopstate(); - } - vert { - $this->token = Smarty_Internal_Templateparser::TP_VERT; - } - dot { - $this->token = Smarty_Internal_Templateparser::TP_DOT; - } - comma { - $this->token = Smarty_Internal_Templateparser::TP_COMMA; - } - semicolon { - $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON; - } - doublecolon { - $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON; - } - colon { - $this->token = Smarty_Internal_Templateparser::TP_COLON; - } - qmark { - $this->token = Smarty_Internal_Templateparser::TP_QMARK; - } - hex { - $this->token = Smarty_Internal_Templateparser::TP_HEX; - } - space { - $this->token = Smarty_Internal_Templateparser::TP_SPACE; - } - char { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - */ - - /*!lex2php - %statename LITERAL - ldel literal rdel { - $this->literal_cnt++; - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - ldel slash literal rdel { - if ($this->literal_cnt) { - $this->literal_cnt--; - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } else { - $this->token = Smarty_Internal_Templateparser::TP_LITERALEND; - $this->yypopstate(); - } - } - char { - if (!isset($this->yy_global_literal)) { - $this->yy_global_literal = $this->replace('/(SMARTYldel)SMARTYal[\/]?literalSMARTYrdel/isS'); - } - $to = $this->dataLength; - preg_match($this->yy_global_literal, $this->data,$match,PREG_OFFSET_CAPTURE,$this->counter); - if (isset($match[0][1])) { - $to = $match[0][1]; - } else { - $this->compiler->trigger_template_error ("missing or misspelled literal closing tag"); - } - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Templateparser::TP_LITERAL; - } - */ - /*!lex2php - %statename DOUBLEQUOTEDSTRING - userliteral { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - ldel literal rdel { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - ldel slash literal rdel { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - ldel slash { - $this->yypushstate(self::TAG); - return true; - } - ldel id { - $this->yypushstate(self::TAG); - return true; - } - ldel { - $this->token = Smarty_Internal_Templateparser::TP_LDEL; - $this->taglineno = $this->line; - $this->yypushstate(self::TAGBODY); - } - double_quote { - $this->token = Smarty_Internal_Templateparser::TP_QUOTE; - $this->yypopstate(); - } - backtick dollar { - $this->token = Smarty_Internal_Templateparser::TP_BACKTICK; - $this->value = substr($this->value,0,-1); - $this->yypushstate(self::TAGBODY); - $this->taglineno = $this->line; - } - dollar id { - $this->token = Smarty_Internal_Templateparser::TP_DOLLARID; - } - dollar { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - textdoublequoted { - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - char { - $to = $this->dataLength; - $this->value = substr($this->data,$this->counter,$to-$this->counter); - $this->token = Smarty_Internal_Templateparser::TP_TEXT; - } - */ - } - -
\ No newline at end of file diff --git a/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y b/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y deleted file mode 100644 index b8c00e5d9..000000000 --- a/vendor/smarty/smarty/lexer/smarty_internal_templateparser.y +++ /dev/null @@ -1,1271 +0,0 @@ -/* - * This file is part of Smarty. - * - * (c) 2015 Uwe Tews - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -%stack_size 500 -%name TP_ -%declare_class { -/** -* Smarty Template Parser Class -* -* This is the template parser. -* It is generated from the smarty_internal_templateparser.y file -* -* @author Uwe Tews <uwe.tews@googlemail.com> -*/ -class Smarty_Internal_Templateparser -} -%include_class -{ - const ERR1 = 'Security error: Call to private object member not allowed'; - const ERR2 = 'Security error: Call to dynamic object member not allowed'; - const ERR3 = 'PHP in template not allowed. Use SmartyBC to enable it'; - - /** - * result status - * - * @var bool - */ - public $successful = true; - - /** - * return value - * - * @var mixed - */ - public $retvalue = 0; - - /** - * @var - */ - public $yymajor; - - /** - * last index of array variable - * - * @var mixed - */ - public $last_index; - - /** - * last variable name - * - * @var string - */ - public $last_variable; - - /** - * root parse tree buffer - * - * @var Smarty_Internal_ParseTree_Template - */ - public $root_buffer; - - /** - * current parse tree object - * - * @var Smarty_Internal_ParseTree - */ - public $current_buffer; - - /** - * lexer object - * - * @var Smarty_Internal_Templatelexer - */ - public $lex; - - /** - * internal error flag - * - * @var bool - */ - private $internalError = false; - - /** - * {strip} status - * - * @var bool - */ - public $strip = false; - /** - * compiler object - * - * @var Smarty_Internal_TemplateCompilerBase - */ - public $compiler = null; - - /** - * smarty object - * - * @var Smarty - */ - public $smarty = null; - - /** - * template object - * - * @var Smarty_Internal_Template - */ - public $template = null; - - /** - * block nesting level - * - * @var int - */ - public $block_nesting_level = 0; - - /** - * security object - * - * @var Smarty_Security - */ - public $security = null; - - /** - * template prefix array - * - * @var \Smarty_Internal_ParseTree[] - */ - public $template_prefix = array(); - - /** - * template prefix array - * - * @var \Smarty_Internal_ParseTree[] - */ - public $template_postfix = array(); - - /** - * constructor - * - * @param Smarty_Internal_Templatelexer $lex - * @param Smarty_Internal_TemplateCompilerBase $compiler - */ - public function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler) - { - $this->lex = $lex; - $this->compiler = $compiler; - $this->template = $this->compiler->template; - $this->smarty = $this->template->smarty; - $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false; - $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template(); - } - - /** - * insert PHP code in current buffer - * - * @param string $code - */ - public function insertPhpCode($code) - { - $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code)); - } - - /** - * error rundown - * - */ - public function errorRunDown() - { - while ($this->yystack !== array()) { - $this->yy_pop_parser_stack(); - } - if (is_resource($this->yyTraceFILE)) { - fclose($this->yyTraceFILE); - } - } - - /** - * merge PHP code with prefix code and return parse tree tag object - * - * @param string $code - * - * @return Smarty_Internal_ParseTree_Tag - */ - public function mergePrefixCode($code) - { - $tmp = ''; - foreach ($this->compiler->prefix_code as $preCode) { - $tmp .= $preCode; - } - $this->compiler->prefix_code = array(); - $tmp .= $code; - return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true)); - } - -} - -%token_prefix TP_ - -%parse_accept -{ - $this->successful = !$this->internalError; - $this->internalError = false; - $this->retvalue = $this->_retvalue; -} - -%syntax_error -{ - $this->internalError = true; - $this->yymajor = $yymajor; - $this->compiler->trigger_template_error(); -} - -%stack_overflow -{ - $this->internalError = true; - $this->compiler->trigger_template_error('Stack overflow in template parser'); -} - - -%right VERT. -%left COLON. - - - // - // complete template - // -start(res) ::= template. { - $this->root_buffer->prepend_array($this, $this->template_prefix); - $this->root_buffer->append_array($this, $this->template_postfix); - res = $this->root_buffer->to_smarty_php($this); -} - - - // php tags -template ::= template PHP(B). { - $code = $this->compiler->compileTag('private_php',array(array('code' => B), array('type' => $this->lex->phpType )),array()); - if ($this->compiler->has_code && !empty($code)) { - $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array(); - $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp.$code,true))); - } -} - - // template text -template ::= template TEXT(B). { - $this->current_buffer->append_subtree($this, $this->compiler->processText(B)); -} - // strip on -template ::= template STRIPON. { - $this->strip = true; -} - // strip off -template ::= template STRIPOFF. { - $this->strip = false; -} - - // Literal -template ::= template LITERALSTART literal_e2(B) LITERALEND. { - $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text(B)); -} - - -literal_e2(A) ::= literal_e1(B) LITERALSTART literal_e1(C) LITERALEND. { - A = B.C; -} -literal_e2(A) ::= literal_e1(B). { - A = B; -} - -literal_e1(A) ::= literal_e1(B) LITERAL(C). { - A = B.C; - -} - -literal_e1(A) ::= . { - A = ''; -} - // Smarty tag -template ::= template smartytag(B). { - if ($this->compiler->has_code) { - $this->current_buffer->append_subtree($this, $this->mergePrefixCode(B)); - } - $this->compiler->has_variable_string = false; - $this->block_nesting_level = count($this->compiler->_tag_stack); -} - - - // empty template -template ::= . - -smartytag(A) ::= SIMPELOUTPUT(B). { - $var = trim(substr(B, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $'); - if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) { - A = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\''))); - } else { - A = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\''))); - } -} - -// simple tag like {name} -smartytag(A)::= SIMPLETAG(B). { - $tag = trim(substr(B, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength())); - if ($tag == 'strip') { - $this->strip = true; - A = null;; - } else { - if (defined($tag)) { - if ($this->security) { - $this->security->isTrustedConstant($tag, $this->compiler); - } - A = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag)); - } else { - if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) { - A = $this->compiler->compileTag($match[1],array('\'nocache\'')); - } else { - A = $this->compiler->compileTag($tag,array()); - } - } - } -} - // {$smarty.block.child} or {$smarty.block.parent} -smartytag(A) ::= SMARTYBLOCKCHILDPARENT(i). { - $j = strrpos(i,'.'); - if (i[$j+1] == 'c') { - // {$smarty.block.child} - A = $this->compiler->compileTag('child',array(),array(i)); - } else { - // {$smarty.block.parent} - A = $this->compiler->compileTag('parent',array(),array(i)); - } -} - -smartytag(A) ::= LDEL tagbody(B) RDEL. { - A = B; -} - - smartytag(A) ::= tag(B) RDEL. { - A = B; - } - // output with optional attributes -tagbody(A) ::= outattr(B). { - A = $this->compiler->compileTag('private_print_expression',B[1],array('value'=>B[0])); -} - -// -// Smarty tags start here -// - - // assign new style -tagbody(A) ::= DOLLARID(B) eqoutattr(C). { - A = $this->compiler->compileTag('assign',array_merge(array(array('value'=>C[0]),array('var'=>'\''.substr(B,1).'\'')),C[1])); -} - -tagbody(A) ::= varindexed(B) eqoutattr(C). { - A = $this->compiler->compileTag('assign',array_merge(array(array('value'=>C[0]),array('var'=>B['var'])),C[1]),array('smarty_internal_index'=>B['smarty_internal_index'])); -} - -eqoutattr(A) ::= EQUAL outattr(B). { - A = B; -} - -outattr(A) ::= output(B) attributes(C). { - A = array(B,C); -} - -output(A) ::= variable(B). { - A = B; -} -output(A) ::= value(B). { - A = B; -} -output(A) ::= expr(B). { - A = B; -} - - // tag with optional Smarty2 style attributes -tag(res) ::= LDEL ID(i) attributes(a). { - if (defined(i)) { - if ($this->security) { - $this->security->isTrustedConstant(i, $this->compiler); - } - res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i)); - } else { - res = $this->compiler->compileTag(i,a); - } -} -tag(res) ::= LDEL ID(i). { - if (defined(i)) { - if ($this->security) { - $this->security->isTrustedConstant(i, $this->compiler); - } - res = $this->compiler->compileTag('private_print_expression',array(),array('value'=>i)); - } else { - res = $this->compiler->compileTag(i,array()); - } -} - - - // tag with modifier and optional Smarty2 style attributes -tag(res) ::= LDEL ID(i) modifierlist(l)attributes(a). { - if (defined(i)) { - if ($this->security) { - $this->security->isTrustedConstant(i, $this->compiler); - } - res = $this->compiler->compileTag('private_print_expression',a,array('value'=>i, 'modifierlist'=>l)); - } else { - res = $this->compiler->compileTag(i,a, array('modifierlist'=>l)); - } -} - - // registered object tag -tag(res) ::= LDEL ID(i) PTR ID(m) attributes(a). { - res = $this->compiler->compileTag(i,a,array('object_method'=>m)); -} - - // registered object tag with modifiers -tag(res) ::= LDEL ID(i) PTR ID(me) modifierlist(l) attributes(a). { - res = $this->compiler->compileTag(i,a,array('modifierlist'=>l, 'object_method'=>me)); -} - - // nocache tag -tag(res) ::= LDELMAKENOCACHE DOLLARID(i). { - res = $this->compiler->compileTag('make_nocache',array(array('var'=>'\''.substr(i,1).'\''))); -} - - // {if}, {elseif} and {while} tag -tag(res) ::= LDELIF(i) expr(ie). { - $tag = trim(substr(i,$this->compiler->getLdelLength())); - res = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>ie)); -} - -tag(res) ::= LDELIF(i) expr(ie) attributes(a). { - $tag = trim(substr(i,$this->compiler->getLdelLength())); - res = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,a,array('if condition'=>ie)); -} - -tag(res) ::= LDELIF(i) statement(ie). { - $tag = trim(substr(i,$this->compiler->getLdelLength())); - res = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>ie)); -} - -tag(res) ::= LDELIF(i) statement(ie) attributes(a). { - $tag = trim(substr(i,$this->compiler->getLdelLength())); - res = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,a,array('if condition'=>ie)); -} - - // {for} tag -tag(res) ::= LDELFOR statements(st) SEMICOLON expr(ie) SEMICOLON varindexed(v2) foraction(e2) attributes(a). { - res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('ifexp'=>ie),array('var'=>v2),array('step'=>e2))),1); -} - - foraction(res) ::= EQUAL expr(e). { - res = '='.e; -} - - foraction(res) ::= INCDEC(e). { - res = e; -} - -tag(res) ::= LDELFOR statement(st) TO expr(v) attributes(a). { - res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('to'=>v))),0); -} - -tag(res) ::= LDELFOR statement(st) TO expr(v) STEP expr(v2) attributes(a). { - res = $this->compiler->compileTag('for',array_merge(a,array(array('start'=>st),array('to'=>v),array('step'=>v2))),0); -} - - // {foreach} tag -tag(res) ::= LDELFOREACH SPACE expr(e) AS varvar(v0) attributes(a). { - res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>e),array('item'=>v0)))); -} - -tag(res) ::= LDELFOREACH SPACE expr(e) AS varvar(v1) APTR varvar(v0) attributes(a). { - res = $this->compiler->compileTag('foreach',array_merge(a,array(array('from'=>e),array('item'=>v0),array('key'=>v1)))); -} -tag(res) ::= LDELFOREACH attributes(a). { - res = $this->compiler->compileTag('foreach',a); -} - - // {setfilter} -tag(res) ::= LDELSETFILTER ID(m) modparameters(p). { - res = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array(m),p)))); -} - -tag(res) ::= LDELSETFILTER ID(m) modparameters(p) modifierlist(l). { - res = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array(m),p)),l))); -} - - - // end of block tag {/....} -smartytag(res)::= CLOSETAG(t). { - $tag = trim(substr(t, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' /'); - if ($tag === 'strip') { - $this->strip = false; - res = null; - } else { - res = $this->compiler->compileTag($tag.'close',array()); - } - } -tag(res) ::= LDELSLASH ID(i). { - res = $this->compiler->compileTag(i.'close',array()); -} - -tag(res) ::= LDELSLASH ID(i) modifierlist(l). { - res = $this->compiler->compileTag(i.'close',array(),array('modifier_list'=>l)); -} - - // end of block object tag {/....} -tag(res) ::= LDELSLASH ID(i) PTR ID(m). { - res = $this->compiler->compileTag(i.'close',array(),array('object_method'=>m)); -} - -tag(res) ::= LDELSLASH ID(i) PTR ID(m) modifierlist(l). { - res = $this->compiler->compileTag(i.'close',array(),array('object_method'=>m, 'modifier_list'=>l)); -} - -// -//Attributes of Smarty tags -// - // list of attributes -attributes(res) ::= attributes(a1) attribute(a2). { - res = a1; - res[] = a2; -} - - // single attribute -attributes(res) ::= attribute(a). { - res = array(a); -} - - // no attributes -attributes(res) ::= . { - res = array(); -} - - // attribute -attribute(res) ::= SPACE ID(v) EQUAL ID(id). { - if (defined(id)) { - if ($this->security) { - $this->security->isTrustedConstant(id, $this->compiler); - } - res = array(v=>id); - } else { - res = array(v=>'\''.id.'\''); - } -} - -attribute(res) ::= ATTR(v) expr(e). { - res = array(trim(v," =\n\r\t")=>e); -} - -attribute(res) ::= ATTR(v) value(e). { - res = array(trim(v," =\n\r\t")=>e); -} - -attribute(res) ::= SPACE ID(v). { - res = '\''.v.'\''; -} - -attribute(res) ::= SPACE expr(e). { - res = e; -} - -attribute(res) ::= SPACE value(v). { - res = v; -} - -attribute(res) ::= SPACE INTEGER(i) EQUAL expr(e). { - res = array(i=>e); -} - - - -// -// statement -// -statements(res) ::= statement(s). { - res = array(s); -} - -statements(res) ::= statements(s1) COMMA statement(s). { - s1[]=s; - res = s1; -} - -statement(res) ::= DOLLARID(i) EQUAL INTEGER(e). { - res = array('var' => '\''.substr(i,1).'\'', 'value'=>e); -} -statement(res) ::= DOLLARID(i) EQUAL expr(e). { - res = array('var' => '\''.substr(i,1).'\'', 'value'=>e); -} - -statement(res) ::= varindexed(vi) EQUAL expr(e). { - res = array('var' => vi, 'value'=>e); -} - -statement(res) ::= OPENP statement(st) CLOSEP. { - res = st; -} - - -// -// expressions -// - - // single value -expr(res) ::= value(v). { - res = v; -} - - // ternary -expr(res) ::= ternary(v). { - res = v; -} - - // resources/streams -expr(res) ::= DOLLARID(i) COLON ID(i2). { - res = '$_smarty_tpl->getStreamVariable(\''.substr(i,1).'://' . i2 . '\')'; -} - - // arithmetic expression -expr(res) ::= expr(e) MATH(m) value(v). { - res = e . trim(m) . v; -} - -expr(res) ::= expr(e) UNIMATH(m) value(v). { - res = e . trim(m) . v; -} - -// if expression - // special conditions -expr(res) ::= expr(e1) tlop(c) value(e2). { - res = c['pre']. e1.c['op'].e2 .')'; -} - // simple expression -expr(res) ::= expr(e1) lop(c) expr(e2). { - res = e1.c.e2; -} - -expr(res) ::= expr(e1) scond(c). { - res = c . e1 . ')'; -} - -expr(res) ::= expr(e1) ISIN array(a). { - res = 'in_array('.e1.','.a.')'; -} - -expr(res) ::= expr(e1) ISIN value(v). { - res = 'in_array('.e1.',(array)'.v.')'; -} - - -// -// ternary -// -ternary(res) ::= OPENP expr(v) CLOSEP QMARK DOLLARID(e1) COLON expr(e2). { - res = v.' ? '. $this->compiler->compileVariable('\''.substr(e1,1).'\'') . ' : '.e2; -} - -ternary(res) ::= OPENP expr(v) CLOSEP QMARK expr(e1) COLON expr(e2). { - res = v.' ? '.e1.' : '.e2; -} - - // value -value(res) ::= variable(v). { - res = v; -} - - // +/- value -value(res) ::= UNIMATH(m) value(v). { - res = m.v; -} - - // logical negation -value(res) ::= NOT value(v). { - res = '!'.v; -} - -value(res) ::= TYPECAST(t) value(v). { - res = t.v; -} - -value(res) ::= variable(v) INCDEC(o). { - res = v.o; -} - - // numeric -value(res) ::= HEX(n). { - res = n; -} - -value(res) ::= INTEGER(n). { - res = n; -} - -value(res) ::= INTEGER(n1) DOT INTEGER(n2). { - res = n1.'.'.n2; -} - -value(res) ::= INTEGER(n1) DOT. { - res = n1.'.'; -} - -value(res) ::= DOT INTEGER(n1). { - res = '.'.n1; -} - - // ID, true, false, null -value(res) ::= ID(id). { - if (defined(id)) { - if ($this->security) { - $this->security->isTrustedConstant(id, $this->compiler); - } - res = id; - } else { - res = '\''.id.'\''; - } -} - - // function call -value(res) ::= function(f). { - res = f; -} - - // expression -value(res) ::= OPENP expr(e) CLOSEP. { - res = '('. e .')'; -} - -value(res) ::= variable(v1) INSTANCEOF(i) ns1(v2). { - res = v1.i.v2; -} -value(res) ::= variable(v1) INSTANCEOF(i) variable(v2). { - res = v1.i.v2; -} - - // singele quoted string -value(res) ::= SINGLEQUOTESTRING(t). { - res = t; -} - - // double quoted string -value(res) ::= doublequoted_with_quotes(s). { - res = s; -} - - -value(res) ::= varindexed(vi) DOUBLECOLON static_class_access(r). { - $prefixVar = $this->compiler->getNewPrefixVariable(); - if (vi['var'] === '\'smarty\'') { - $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).';?>'); - } else { - $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].';?>'); - } - res = $prefixVar .'::'.r[0].r[1]; -} - - // Smarty tag -value(res) ::= smartytag(st). { - $prefixVar = $this->compiler->getNewPrefixVariable(); - $tmp = $this->compiler->appendCode('<?php ob_start();?>', st); - $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "<?php {$prefixVar} = ob_get_clean();?>")); - res = $prefixVar; -} - -value(res) ::= value(v) modifierlist(l). { - res = $this->compiler->compileTag('private_modifier',array(),array('value'=>v,'modifierlist'=>l)); -} - // name space constant -value(res) ::= NAMESPACE(c). { - res = c; -} - - // array -value(res) ::= arraydef(a). { - res = a; -} - // static class access -value(res) ::= ns1(c)DOUBLECOLON static_class_access(s). { - if (!in_array(strtolower(c), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess(c, s, $this->compiler))) { - if (isset($this->smarty->registered_classes[c])) { - res = $this->smarty->registered_classes[c].'::'.s[0].s[1]; - } else { - res = c.'::'.s[0].s[1]; - } - } else { - $this->compiler->trigger_template_error ('static class \''.c.'\' is undefined or not allowed by security setting'); - } -} -// -// namespace stuff -// - -ns1(res) ::= ID(i). { - res = i; -} - -ns1(res) ::= NAMESPACE(i). { - res = i; - } - - - - -// -// variables -// - // Smarty variable (optional array) -variable(res) ::= DOLLARID(i). { - res = $this->compiler->compileVariable('\''.substr(i,1).'\''); -} -variable(res) ::= varindexed(vi). { - if (vi['var'] === '\'smarty\'') { - $smarty_var = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']); - res = $smarty_var; - } else { - // used for array reset,next,prev,end,current - $this->last_variable = vi['var']; - $this->last_index = vi['smarty_internal_index']; - res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index']; - } -} - - // variable with property -variable(res) ::= varvar(v) AT ID(p). { - res = '$_smarty_tpl->tpl_vars['. v .']->'.p; -} - - // object -variable(res) ::= object(o). { - res = o; -} - - // config variable -variable(res) ::= HATCH ID(i) HATCH. { - res = $this->compiler->compileConfigVariable('\'' . i . '\''); -} - -variable(res) ::= HATCH ID(i) HATCH arrayindex(a). { - res = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . i . '\'') . ') ? $tmp'.a.' :null)'; -} - -variable(res) ::= HATCH variable(v) HATCH. { - res = $this->compiler->compileConfigVariable(v); -} - -variable(res) ::= HATCH variable(v) HATCH arrayindex(a). { - res = '(is_array($tmp = ' . $this->compiler->compileConfigVariable(v) . ') ? $tmp'.a.' : null)'; -} - -varindexed(res) ::= DOLLARID(i) arrayindex(a). { - res = array('var'=>'\''.substr(i,1).'\'', 'smarty_internal_index'=>a); -} -varindexed(res) ::= varvar(v) arrayindex(a). { - res = array('var'=>v, 'smarty_internal_index'=>a); -} - -// -// array index -// - // multiple array index -arrayindex(res) ::= arrayindex(a1) indexdef(a2). { - res = a1.a2; -} - - // no array index -arrayindex ::= . { - return; -} - -// single index definition - // Smarty2 style index -indexdef(res) ::= DOT DOLLARID(i). { - res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']'; -} -indexdef(res) ::= DOT varvar(v). { - res = '['.$this->compiler->compileVariable(v).']'; -} - -indexdef(res) ::= DOT varvar(v) AT ID(p). { - res = '['.$this->compiler->compileVariable(v).'->'.p.']'; -} - -indexdef(res) ::= DOT ID(i). { - res = '[\''. i .'\']'; -} - -indexdef(res) ::= DOT INTEGER(n). { - res = '['. n .']'; -} - - -indexdef(res) ::= DOT LDEL expr(e) RDEL. { - res = '['. e .']'; -} - - // section tag index -indexdef(res) ::= OPENB ID(i)CLOSEB. { - res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\'index\']').']'; -} - -indexdef(res) ::= OPENB ID(i) DOT ID(i2) CLOSEB. { - res = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.i.'\'][\''.i2.'\']').']'; -} -indexdef(res) ::= OPENB SINGLEQUOTESTRING(s) CLOSEB. { - res = '['.s.']'; -} -indexdef(res) ::= OPENB INTEGER(n) CLOSEB. { - res = '['.n.']'; -} -indexdef(res) ::= OPENB DOLLARID(i) CLOSEB. { - res = '['.$this->compiler->compileVariable('\''.substr(i,1).'\'').']'; -} -indexdef(res) ::= OPENB variable(v) CLOSEB. { - res = '['.v.']'; -} -indexdef(res) ::= OPENB value(v) CLOSEB. { - res = '['.v.']'; -} - - // PHP style index -indexdef(res) ::= OPENB expr(e) CLOSEB. { - res = '['. e .']'; -} - - // for assign append array -indexdef(res) ::= OPENB CLOSEB. { - res = '[]'; -} - - -// -// variable variable names -// - - // singel identifier element -varvar(res) ::= DOLLARID(i). { - res = '\''.substr(i,1).'\''; -} - // single $ -varvar(res) ::= DOLLAR. { - res = '\'\''; -} - - // sequence of identifier elements -varvar(res) ::= varvar(v1) varvarele(v2). { - res = v1.'.'.v2; -} - - // fix sections of element -varvarele(res) ::= ID(s). { - res = '\''.s.'\''; -} -varvarele(res) ::= SIMPELOUTPUT(i). { - $var = trim(substr(i, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $'); - res = $this->compiler->compileVariable('\''.$var.'\''); -} - - // variable sections of element -varvarele(res) ::= LDEL expr(e) RDEL. { - res = '('.e.')'; -} - -// -// objects -// -object(res) ::= varindexed(vi) objectchain(oc). { - if (vi['var'] === '\'smarty\'') { - res = $this->compiler->compileTag('private_special_variable',array(),vi['smarty_internal_index']).oc; - } else { - res = $this->compiler->compileVariable(vi['var']).vi['smarty_internal_index'].oc; - } -} - - // single element -objectchain(res) ::= objectelement(oe). { - res = oe; -} - - // chain of elements -objectchain(res) ::= objectchain(oc) objectelement(oe). { - res = oc.oe; -} - - // variable -objectelement(res)::= PTR ID(i) arrayindex(a). { - if ($this->security && substr(i,0,1) === '_') { - $this->compiler->trigger_template_error (self::ERR1); - } - res = '->'.i.a; -} - -objectelement(res)::= PTR varvar(v) arrayindex(a). { - if ($this->security) { - $this->compiler->trigger_template_error (self::ERR2); - } - res = '->{'.$this->compiler->compileVariable(v).a.'}'; -} - -objectelement(res)::= PTR LDEL expr(e) RDEL arrayindex(a). { - if ($this->security) { - $this->compiler->trigger_template_error (self::ERR2); - } - res = '->{'.e.a.'}'; -} - -objectelement(res)::= PTR ID(ii) LDEL expr(e) RDEL arrayindex(a). { - if ($this->security) { - $this->compiler->trigger_template_error (self::ERR2); - } - res = '->{\''.ii.'\'.'.e.a.'}'; -} - - // method -objectelement(res)::= PTR method(f). { - res = '->'.f; -} - - -// -// function -// -function(res) ::= ns1(f) OPENP params(p) CLOSEP. { - res = $this->compiler->compilePHPFunctionCall(f, p); -} - - -// -// method -// -method(res) ::= ID(f) OPENP params(p) CLOSEP. { - if ($this->security && substr(f,0,1) === '_') { - $this->compiler->trigger_template_error (self::ERR1); - } - res = f . '('. implode(',',p) .')'; -} - -method(res) ::= DOLLARID(f) OPENP params(p) CLOSEP. { - if ($this->security) { - $this->compiler->trigger_template_error (self::ERR2); - } - $prefixVar = $this->compiler->getNewPrefixVariable(); - $this->compiler->appendPrefixCode("<?php {$prefixVar} = ".$this->compiler->compileVariable('\''.substr(f,1).'\'').';?>'); - res = $prefixVar .'('. implode(',',p) .')'; -} - -// function/method parameter - // multiple parameters -params(res) ::= params(p) COMMA expr(e). { - res = array_merge(p,array(e)); -} - - // single parameter -params(res) ::= expr(e). { - res = array(e); -} - - // kein parameter -params(res) ::= . { - res = array(); -} - -// -// modifier -// -modifierlist(res) ::= modifierlist(l) modifier(m) modparameters(p). { - res = array_merge(l,array(array_merge(m,p))); -} - -modifierlist(res) ::= modifier(m) modparameters(p). { - res = array(array_merge(m,p)); -} - -modifier(res) ::= VERT AT ID(m). { - res = array(m); -} - -modifier(res) ::= VERT ID(m). { - res = array(m); -} - -// -// modifier parameter -// - // multiple parameter -modparameters(res) ::= modparameters(mps) modparameter(mp). { - res = array_merge(mps,mp); -} - - // no parameter -modparameters(res) ::= . { - res = array(); -} - - // parameter expression -modparameter(res) ::= COLON value(mp). { - res = array(mp); -} -modparameter(res) ::= COLON UNIMATH(m) value(mp). { - res = array(trim(m).mp); -} - -modparameter(res) ::= COLON array(mp). { - res = array(mp); -} - - // static class methode call -static_class_access(res) ::= method(m). { - res = array(m, '', 'method'); -} - - // static class methode call with object chainig -static_class_access(res) ::= method(m) objectchain(oc). { - res = array(m, oc, 'method'); -} - - // static class constant -static_class_access(res) ::= ID(v). { - res = array(v, ''); -} - - // static class variables -static_class_access(res) ::= DOLLARID(v) arrayindex(a). { - res = array(v, a, 'property'); -} - - // static class variables with object chain -static_class_access(res) ::= DOLLARID(v) arrayindex(a) objectchain(oc). { - res = array(v, a.oc, 'property'); -} - - -// if conditions and operators -lop(res) ::= LOGOP(o). { - res = ' '. trim(o) . ' '; -} - -lop(res) ::= SLOGOP(o). { - static $lops = array( - 'eq' => ' == ', - 'ne' => ' != ', - 'neq' => ' != ', - 'gt' => ' > ', - 'ge' => ' >= ', - 'gte' => ' >= ', - 'lt' => ' < ', - 'le' => ' <= ', - 'lte' => ' <= ', - 'mod' => ' % ', - 'and' => ' && ', - 'or' => ' || ', - 'xor' => ' xor ', - ); - $op = strtolower(preg_replace('/\s*/', '', o)); - res = $lops[$op]; -} -tlop(res) ::= TLOGOP(o). { - static $tlops = array( - 'isdivby' => array('op' => ' % ', 'pre' => '!('), - 'isnotdivby' => array('op' => ' % ', 'pre' => '('), - 'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '), - 'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '), - 'isoddby' => array('op' => ' / ', 'pre' => '(1 & '), - 'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '), - ); - $op = strtolower(preg_replace('/\s*/', '', o)); - res = $tlops[$op]; - } - -scond(res) ::= SINGLECOND(o). { - static $scond = array ( - 'iseven' => '!(1 & ', - 'isnoteven' => '(1 & ', - 'isodd' => '(1 & ', - 'isnotodd' => '!(1 & ', - ); - $op = strtolower(str_replace(' ', '', o)); - res = $scond[$op]; -} - -// -// ARRAY element assignment -// -arraydef(res) ::= OPENB arrayelements(a) CLOSEB. { - res = 'array('.a.')'; -} -arraydef(res) ::= ARRAYOPEN arrayelements(a) CLOSEP. { - res = 'array('.a.')'; -} - -arrayelements(res) ::= arrayelement(a). { - res = a; -} - -arrayelements(res) ::= arrayelements(a1) COMMA arrayelement(a). { - res = a1.','.a; -} - -arrayelements ::= . { - return; -} - -arrayelement(res) ::= value(e1) APTR expr(e2). { - res = e1.'=>'.e2; -} - -arrayelement(res) ::= ID(i) APTR expr(e2). { - res = '\''.i.'\'=>'.e2; -} - -arrayelement(res) ::= expr(e). { - res = e; -} - - -// -// double quoted strings -// -doublequoted_with_quotes(res) ::= QUOTE QUOTE. { - res = '\'\''; -} - -doublequoted_with_quotes(res) ::= QUOTE doublequoted(s) QUOTE. { - $this->compiler->leaveDoubleQuote(); - res = s->to_smarty_php($this); -} - - -doublequoted(res) ::= doublequoted(o1) doublequotedcontent(o2). { - o1->append_subtree($this, o2); - res = o1; -} - -doublequoted(res) ::= doublequotedcontent(o). { - res = new Smarty_Internal_ParseTree_Dq($this, o); -} - -doublequotedcontent(res) ::= BACKTICK variable(v) BACKTICK. { - res = new Smarty_Internal_ParseTree_Code('(string)'.v); -} - -doublequotedcontent(res) ::= BACKTICK expr(e) BACKTICK. { - res = new Smarty_Internal_ParseTree_Code('(string)('.e.')'); -} - -doublequotedcontent(res) ::= DOLLARID(i). { - res = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\''. substr(i,1) .'\']->value'); -} - -doublequotedcontent(res) ::= LDEL variable(v) RDEL. { - res = new Smarty_Internal_ParseTree_Code('(string)'.v); -} - -doublequotedcontent(res) ::= LDEL expr(e) RDEL. { - res = new Smarty_Internal_ParseTree_Code('(string)('.e.')'); -} - -doublequotedcontent(res) ::= smartytag(st). { - res = new Smarty_Internal_ParseTree_Tag($this, st); -} - -doublequotedcontent(res) ::= TEXT(o). { - res = new Smarty_Internal_ParseTree_DqContent(o); -} - |