]> git.mxchange.org Git - friendica.git/commitdiff
reverting tinymce changes, updating smarty to 3.1.19
authorhauke <hauke@grlg.org>
Sun, 7 Sep 2014 11:38:28 +0000 (13:38 +0200)
committerhauke <hauke@grlg.org>
Sun, 7 Sep 2014 11:38:28 +0000 (13:38 +0200)
155 files changed:
library/Smarty/README
library/Smarty/SMARTY_3.1_NOTES.txt
library/Smarty/change_log.txt
library/Smarty/demo/index.php
library/Smarty/demo/plugins/cacheresource.apc.php
library/Smarty/demo/plugins/cacheresource.memcache.php
library/Smarty/demo/plugins/cacheresource.mysql.php
library/Smarty/demo/plugins/resource.extendsall.php
library/Smarty/demo/plugins/resource.mysql.php
library/Smarty/demo/plugins/resource.mysqls.php
library/Smarty/demo/templates/header.tpl
library/Smarty/demo/templates/index.tpl
library/Smarty/libs/Smarty.class.php
library/Smarty/libs/SmartyBC.class.php
library/Smarty/libs/debug.tpl
library/Smarty/libs/plugins/block.textformat.php
library/Smarty/libs/plugins/function.counter.php
library/Smarty/libs/plugins/function.cycle.php
library/Smarty/libs/plugins/function.fetch.php
library/Smarty/libs/plugins/function.html_checkboxes.php
library/Smarty/libs/plugins/function.html_image.php
library/Smarty/libs/plugins/function.html_options.php
library/Smarty/libs/plugins/function.html_radios.php
library/Smarty/libs/plugins/function.html_select_date.php
library/Smarty/libs/plugins/function.html_select_time.php
library/Smarty/libs/plugins/function.html_table.php
library/Smarty/libs/plugins/function.mailto.php
library/Smarty/libs/plugins/function.math.php
library/Smarty/libs/plugins/modifier.capitalize.php
library/Smarty/libs/plugins/modifier.date_format.php
library/Smarty/libs/plugins/modifier.debug_print_var.php
library/Smarty/libs/plugins/modifier.escape.php
library/Smarty/libs/plugins/modifier.regex_replace.php
library/Smarty/libs/plugins/modifier.replace.php
library/Smarty/libs/plugins/modifier.spacify.php
library/Smarty/libs/plugins/modifier.truncate.php
library/Smarty/libs/plugins/modifiercompiler.cat.php
library/Smarty/libs/plugins/modifiercompiler.count_characters.php
library/Smarty/libs/plugins/modifiercompiler.count_paragraphs.php
library/Smarty/libs/plugins/modifiercompiler.count_sentences.php
library/Smarty/libs/plugins/modifiercompiler.count_words.php
library/Smarty/libs/plugins/modifiercompiler.default.php
library/Smarty/libs/plugins/modifiercompiler.escape.php
library/Smarty/libs/plugins/modifiercompiler.from_charset.php
library/Smarty/libs/plugins/modifiercompiler.indent.php
library/Smarty/libs/plugins/modifiercompiler.lower.php
library/Smarty/libs/plugins/modifiercompiler.noprint.php
library/Smarty/libs/plugins/modifiercompiler.string_format.php
library/Smarty/libs/plugins/modifiercompiler.strip.php
library/Smarty/libs/plugins/modifiercompiler.strip_tags.php
library/Smarty/libs/plugins/modifiercompiler.to_charset.php
library/Smarty/libs/plugins/modifiercompiler.unescape.php
library/Smarty/libs/plugins/modifiercompiler.upper.php
library/Smarty/libs/plugins/modifiercompiler.wordwrap.php
library/Smarty/libs/plugins/outputfilter.trimwhitespace.php
library/Smarty/libs/plugins/shared.escape_special_chars.php
library/Smarty/libs/plugins/shared.literal_compiler_param.php
library/Smarty/libs/plugins/shared.make_timestamp.php
library/Smarty/libs/plugins/shared.mb_str_replace.php
library/Smarty/libs/plugins/shared.mb_unicode.php
library/Smarty/libs/plugins/shared.mb_wordwrap.php
library/Smarty/libs/plugins/variablefilter.htmlspecialchars.php
library/Smarty/libs/sysplugins/smarty_cacheresource.php
library/Smarty/libs/sysplugins/smarty_cacheresource_custom.php
library/Smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
library/Smarty/libs/sysplugins/smarty_config_source.php
library/Smarty/libs/sysplugins/smarty_internal_cacheresource_file.php
library/Smarty/libs/sysplugins/smarty_internal_compile_append.php
library/Smarty/libs/sysplugins/smarty_internal_compile_assign.php
library/Smarty/libs/sysplugins/smarty_internal_compile_block.php
library/Smarty/libs/sysplugins/smarty_internal_compile_break.php
library/Smarty/libs/sysplugins/smarty_internal_compile_call.php
library/Smarty/libs/sysplugins/smarty_internal_compile_capture.php
library/Smarty/libs/sysplugins/smarty_internal_compile_config_load.php
library/Smarty/libs/sysplugins/smarty_internal_compile_continue.php
library/Smarty/libs/sysplugins/smarty_internal_compile_debug.php
library/Smarty/libs/sysplugins/smarty_internal_compile_eval.php
library/Smarty/libs/sysplugins/smarty_internal_compile_extends.php
library/Smarty/libs/sysplugins/smarty_internal_compile_for.php
library/Smarty/libs/sysplugins/smarty_internal_compile_foreach.php
library/Smarty/libs/sysplugins/smarty_internal_compile_function.php
library/Smarty/libs/sysplugins/smarty_internal_compile_if.php
library/Smarty/libs/sysplugins/smarty_internal_compile_include.php
library/Smarty/libs/sysplugins/smarty_internal_compile_include_php.php
library/Smarty/libs/sysplugins/smarty_internal_compile_insert.php
library/Smarty/libs/sysplugins/smarty_internal_compile_ldelim.php
library/Smarty/libs/sysplugins/smarty_internal_compile_nocache.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_object_function.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_print_expression.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_block.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_registered_function.php
library/Smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
library/Smarty/libs/sysplugins/smarty_internal_compile_rdelim.php
library/Smarty/libs/sysplugins/smarty_internal_compile_section.php
library/Smarty/libs/sysplugins/smarty_internal_compile_setfilter.php
library/Smarty/libs/sysplugins/smarty_internal_compile_while.php
library/Smarty/libs/sysplugins/smarty_internal_compilebase.php
library/Smarty/libs/sysplugins/smarty_internal_config.php
library/Smarty/libs/sysplugins/smarty_internal_config_file_compiler.php
library/Smarty/libs/sysplugins/smarty_internal_configfilelexer.php
library/Smarty/libs/sysplugins/smarty_internal_configfileparser.php
library/Smarty/libs/sysplugins/smarty_internal_data.php
library/Smarty/libs/sysplugins/smarty_internal_debug.php
library/Smarty/libs/sysplugins/smarty_internal_filter_handler.php
library/Smarty/libs/sysplugins/smarty_internal_function_call_handler.php
library/Smarty/libs/sysplugins/smarty_internal_get_include_path.php
library/Smarty/libs/sysplugins/smarty_internal_nocache_insert.php
library/Smarty/libs/sysplugins/smarty_internal_parsetree.php
library/Smarty/libs/sysplugins/smarty_internal_resource_eval.php
library/Smarty/libs/sysplugins/smarty_internal_resource_extends.php
library/Smarty/libs/sysplugins/smarty_internal_resource_file.php
library/Smarty/libs/sysplugins/smarty_internal_resource_php.php
library/Smarty/libs/sysplugins/smarty_internal_resource_registered.php
library/Smarty/libs/sysplugins/smarty_internal_resource_stream.php
library/Smarty/libs/sysplugins/smarty_internal_resource_string.php
library/Smarty/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
library/Smarty/libs/sysplugins/smarty_internal_template.php
library/Smarty/libs/sysplugins/smarty_internal_templatebase.php
library/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
library/Smarty/libs/sysplugins/smarty_internal_templatelexer.php
library/Smarty/libs/sysplugins/smarty_internal_templateparser.php
library/Smarty/libs/sysplugins/smarty_internal_utility.php
library/Smarty/libs/sysplugins/smarty_internal_write_file.php
library/Smarty/libs/sysplugins/smarty_resource.php
library/Smarty/libs/sysplugins/smarty_resource_custom.php
library/Smarty/libs/sysplugins/smarty_resource_recompiled.php
library/Smarty/libs/sysplugins/smarty_resource_uncompiled.php
library/Smarty/libs/sysplugins/smarty_security.php
library/tinymce/changelog.txt
library/tinymce/jscripts/tiny_mce/license.txt
library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js
library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
library/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js
library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
library/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js
library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
library/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
library/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js
library/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
library/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js
library/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js
library/tinymce/jscripts/tiny_mce/plugins/table/js/table.js
library/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js
library/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js
library/tinymce/jscripts/tiny_mce/tiny_mce.js
library/tinymce/jscripts/tiny_mce/tiny_mce_popup.js
library/tinymce/jscripts/tiny_mce/tiny_mce_src.js

index 167462823f2a3a0a1839a152eefbcf273d574e3c..50e0d60e5983523a0833496fa76a8e51ea88b016 100644 (file)
@@ -1,4 +1,4 @@
-Smarty 3.1.11
+Smarty 3.1.19
 
 Author: Monte Ohrt <monte at ohrt dot com >
 Author: Uwe Tews
@@ -120,7 +120,7 @@ $smarty->unregisterObject($object_name)
 $smarty->unregisterFilter($type, $function_name)
 $smarty->unregisterResource($resource_type)
 
-$smarty->compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
+$smarty->compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
 $smarty->clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
 $smarty->testInstall()
 
index e56e56f67fb70a3f058172b2f3ab0054f9798f27..57709f0d722ad8597d22f1b975c5a0daa5caea07 100644 (file)
@@ -199,7 +199,7 @@ Relative paths are available with {include file="..."} and
 $smarty->fetch('./foo.tpl') cannot be relative to a template, an
 exception is thrown.
 
-  Adressing a specific $template_dir
+  Addressing a specific $template_dir
 
 Smarty 3.1 introduces the $template_dir index notation.
 $smarty->fetch('[foo]bar.tpl') and {include file="[foo]bar.tpl"}
index 27c506db69fa29a6b9d57d3e56c5ba72a2b62576..7eb58320d08bccd89817704ce03706023f0ddb41 100644 (file)
@@ -1,5 +1,298 @@
-===== trunk  =====
-===== Smarty-3.1.11  =====
+ ===== 3.1.20-dev ===== (xx.xx.2014)
+ ===== 3.1.19 ===== (06.30.2014)
+ 20.06.2014
+ - bugfix template variables could not be passed as paramter 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 scource 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)
 
 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 seperated
+  name but different folders separated
 - added cacheresource.apc.php example in demo folder
 
 02/09/2011
 - changed ./ and ../ behaviour
 
 14/02/2011
-- added {block ... hide} option to supress block if no child is defined
+- added {block ... hide} option to suppress block if no child is defined
 
 13/02/2011
 - update handling of recursive subtemplate calls
 - bugfix on compiler object destruction. compiler_object property was by mistake unset.
 
 09/03/2011
--bugfix a variable filter should run before modifers on an output tag (see change of 23/07/2010)
+-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
@@ -951,10 +1244,10 @@ request_use_auto_globals
 - 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 modifer
+- another bugfix of change from 23/07/2010 when compiling modifier
 
 24/07/2010
-- bugfix of change from 23/07/2010 when compiling modifer
+- 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
@@ -1261,7 +1554,7 @@ request_use_auto_globals
 - bugfix on {if} tags 
 
 01/12/2010
-- changed back modifer handling in parser. Some restrictions still apply:
+- 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
@@ -1873,7 +2166,7 @@ NOTICE: existing compiled template and cache files must be deleted
 - fixed exceptions in function plugins
 - fixed notice error in Smarty.class.php
 - allow chained objects to span multiple lines
-- fixed error in modifers 
+- fixed error in modifiers 
 
 03/20/2009
 - moved /plugins folder into /libs folder
@@ -1881,7 +2174,7 @@ NOTICE: existing compiled template and cache files must be deleted
 - autoappend a directory separator if the xxxxx_dir definition have no trailing one
 
 03/19/2009
-- allow array definition as modifer parameter
+- allow array definition as modifier parameter
 - changed modifier to use multi byte string funktions. 
 
 03/17/2009
index 74c8e8971291e0a452389d9a9fb70b2db817a276..33f3035c5bf623cd2d107224acc59ac484eadef5 100644 (file)
@@ -1,33 +1,30 @@
 <?php
- /**
+/**
  * Example Application
-
+ *
  * @package Example-application
  */
 
-require('../libs/Smarty.class.php');
+require '../libs/Smarty.class.php';
 
 $smarty = new Smarty;
 
-
-
 //$smarty->force_compile = true;
 $smarty->debugging = true;
 $smarty->caching = true;
 $smarty->cache_lifetime = 120;
 
-$smarty->assign("Name","Fred Irving Johnathan Bradley Peppergill",true);
-$smarty->assign("FirstName",array("John","Mary","James","Henry"));
-$smarty->assign("LastName",array("Doe","Smith","Johnson","Case"));
-$smarty->assign("Class",array(array("A","B","C","D"), array("E", "F", "G", "H"),
-         array("I", "J", "K", "L"), array("M", "N", "O", "P")));
+$smarty->assign("Name", "Fred Irving Johnathan Bradley Peppergill", true);
+$smarty->assign("FirstName", array("John", "Mary", "James", "Henry"));
+$smarty->assign("LastName", array("Doe", "Smith", "Johnson", "Case"));
+$smarty->assign("Class", array(array("A", "B", "C", "D"), array("E", "F", "G", "H"),
+                               array("I", "J", "K", "L"), array("M", "N", "O", "P")));
 
 $smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
-         array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
+                                  array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
 
-$smarty->assign("option_values", array("NY","NE","KS","IA","OK","TX"));
-$smarty->assign("option_output", array("New York","Nebraska","Kansas","Iowa","Oklahoma","Texas"));
+$smarty->assign("option_values", array("NY", "NE", "KS", "IA", "OK", "TX"));
+$smarty->assign("option_output", array("New York", "Nebraska", "Kansas", "Iowa", "Oklahoma", "Texas"));
 $smarty->assign("option_selected", "NE");
 
 $smarty->display('index.tpl');
-?>
index 00ba598178aca9992b1bdbf08ab07cb1f10d4dde..d7336f2bf798968066500306e464902dcf6f6687 100644 (file)
@@ -2,19 +2,19 @@
 
 /**
  * APC CacheResource
- *
  * CacheResource Implementation based on the KeyValueStore API to use
  * memcache as the storage resource for Smarty's output caching.
  * *
+ *
  * @package CacheResource-examples
- * @author Uwe Tews
+ * @author  Uwe Tews
  */
-class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore {
-
+class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore
+{
     public function __construct()
     {
         // test if APC is present
-        if(!function_exists('apc_cache_info')) {
+        if (!function_exists('apc_cache_info')) {
             throw new Exception('APC Template Caching Error: APC is not installed');
         }
     }
@@ -22,8 +22,9 @@ class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore {
     /**
      * Read values for a set of keys from cache
      *
-     * @param array $keys list of keys to fetch
-     * @return array list of values with the given keys used as indexes
+     * @param  array $keys list of keys to fetch
+     *
+     * @return array   list of values with the given keys used as indexes
      * @return boolean true on success, false on failure
      */
     protected function read(array $keys)
@@ -33,28 +34,32 @@ class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore {
         foreach ($res as $k => $v) {
             $_res[$k] = $v;
         }
+
         return $_res;
     }
 
     /**
      * Save values for a set of keys to cache
      *
-     * @param array $keys list of values to save
-     * @param int $expire expiration time
+     * @param  array $keys   list of values to save
+     * @param  int   $expire expiration time
+     *
      * @return boolean true on success, false on failure
      */
-    protected function write(array $keys, $expire=null)
+    protected function write(array $keys, $expire = null)
     {
         foreach ($keys as $k => $v) {
             apc_store($k, $v, $expire);
         }
+
         return true;
     }
 
     /**
      * Remove values from cache
      *
-     * @param array $keys list of keys to delete
+     * @param  array $keys list of keys to delete
+     *
      * @return boolean true on success, false on failure
      */
     protected function delete(array $keys)
@@ -62,6 +67,7 @@ class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore {
         foreach ($keys as $k) {
             apc_delete($k);
         }
+
         return true;
     }
 
index 230607d6965d646ffca71fc0dd6ec0b9e9af8dbf..e265365fbbf2a098a84ceecc7e6b97ef5560f3d3 100644 (file)
@@ -2,34 +2,35 @@
 
 /**
  * Memcache CacheResource
- *
  * CacheResource Implementation based on the KeyValueStore API to use
  * memcache as the storage resource for Smarty's output caching.
- *
  * Note that memcache has a limitation of 256 characters per cache-key.
  * To avoid complications all cache-keys are translated to a sha1 hash.
  *
  * @package CacheResource-examples
- * @author Rodney Rehm
+ * @author  Rodney Rehm
  */
-class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
+class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore
+{
     /**
      * memcache instance
+     *
      * @var Memcache
      */
     protected $memcache = null;
-    
+
     public function __construct()
     {
         $this->memcache = new Memcache();
-        $this->memcache->addServer( '127.0.0.1', 11211 );
+        $this->memcache->addServer('127.0.0.1', 11211);
     }
-    
+
     /**
      * Read values for a set of keys from cache
      *
-     * @param array $keys list of keys to fetch
-     * @return array list of values with the given keys used as indexes
+     * @param  array $keys list of keys to fetch
+     *
+     * @return array   list of values with the given keys used as indexes
      * @return boolean true on success, false on failure
      */
     protected function read(array $keys)
@@ -45,29 +46,33 @@ class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
         foreach ($res as $k => $v) {
             $_res[$lookup[$k]] = $v;
         }
+
         return $_res;
     }
-    
+
     /**
      * Save values for a set of keys to cache
      *
-     * @param array $keys list of values to save
-     * @param int $expire expiration time
+     * @param  array $keys   list of values to save
+     * @param  int   $expire expiration time
+     *
      * @return boolean true on success, false on failure
      */
-    protected function write(array $keys, $expire=null)
+    protected function write(array $keys, $expire = null)
     {
         foreach ($keys as $k => $v) {
             $k = sha1($k);
             $this->memcache->set($k, $v, 0, $expire);
         }
+
         return true;
     }
 
     /**
      * Remove values from cache
      *
-     * @param array $keys list of keys to delete
+     * @param  array $keys list of keys to delete
+     *
      * @return boolean true on success, false on failure
      */
     protected function delete(array $keys)
@@ -76,6 +81,7 @@ class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
             $k = sha1($k);
             $this->memcache->delete($k);
         }
+
         return true;
     }
 
@@ -86,6 +92,6 @@ class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
      */
     protected function purge()
     {
-        return $this->memcache->flush();
+        $this->memcache->flush();
     }
 }
index ab8c475164fd5393c35d4a8831e7c15713246bca..d8d00ab261b94c84bdced7c66a0faea090815763 100644 (file)
@@ -2,10 +2,8 @@
 
 /**
  * MySQL CacheResource
- *
  * CacheResource Implementation based on the Custom API to use
  * MySQL as the storage resource for Smarty's output caching.
- *
  * Table definition:
  * <pre>CREATE TABLE IF NOT EXISTS `output_cache` (
  *   `id` CHAR(40) NOT NULL COMMENT 'sha1 hash',
  * ) ENGINE = InnoDB;</pre>
  *
  * @package CacheResource-examples
- * @author Rodney Rehm
+ * @author  Rodney Rehm
  */
-class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
+class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom
+{
     // PDO instance
     protected $db;
     protected $fetch;
     protected $fetchTimestamp;
     protected $save;
-    
-    public function __construct() {
+
+    public function __construct()
+    {
         try {
-            $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
-        } catch (PDOException $e) {
+            $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+        }
+        catch (PDOException $e) {
             throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
         }
         $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id');
@@ -46,19 +47,20 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
     /**
      * fetch cached content and its modification time from data source
      *
-     * @param string $id unique cache content identifier
-     * @param string $name template name
-     * @param string $cache_id cache id
-     * @param string $compile_id compile id
-     * @param string $content cached content
-     * @param integer $mtime cache modification timestamp (epoch)
+     * @param  string  $id         unique cache content identifier
+     * @param  string  $name       template name
+     * @param  string  $cache_id   cache id
+     * @param  string  $compile_id compile id
+     * @param  string  $content    cached content
+     * @param  integer $mtime      cache modification timestamp (epoch)
+     *
      * @return void
      */
     protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime)
     {
         $this->fetch->execute(array('id' => $id));
         $row = $this->fetch->fetch();
-        $this->fetch->closeCursor();        
+        $this->fetch->closeCursor();
         if ($row) {
             $content = $row['content'];
             $mtime = strtotime($row['modified']);
@@ -67,15 +69,17 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
             $mtime = null;
         }
     }
-    
+
     /**
      * Fetch cached content's modification timestamp from data source
      *
      * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the complete cached content.
-     * @param string $id unique cache content identifier
-     * @param string $name template name
-     * @param string $cache_id cache id
-     * @param string $compile_id compile id
+     *
+     * @param  string $id         unique cache content identifier
+     * @param  string $name       template name
+     * @param  string $cache_id   cache id
+     * @param  string $compile_id compile id
+     *
      * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
      */
     protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
@@ -83,40 +87,44 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
         $this->fetchTimestamp->execute(array('id' => $id));
         $mtime = strtotime($this->fetchTimestamp->fetchColumn());
         $this->fetchTimestamp->closeCursor();
+
         return $mtime;
     }
-    
+
     /**
      * Save content to cache
      *
-     * @param string $id unique cache content identifier
-     * @param string $name template name
-     * @param string $cache_id cache id
-     * @param string $compile_id compile id
-     * @param integer|null $exp_time seconds till expiration time in seconds or null
-     * @param string $content content to cache
-     * @return boolean success
+     * @param  string       $id         unique cache content identifier
+     * @param  string       $name       template name
+     * @param  string       $cache_id   cache id
+     * @param  string       $compile_id compile id
+     * @param  integer|null $exp_time   seconds till expiration time in seconds or null
+     * @param  string       $content    content to cache
+     *
+     * @return boolean      success
      */
     protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
     {
         $this->save->execute(array(
-            'id' => $id,
-            'name' => $name,
-            'cache_id' => $cache_id,
-            'compile_id' => $compile_id,
-            'content' => $content,
-        ));
+                                 'id'         => $id,
+                                 'name'       => $name,
+                                 'cache_id'   => $cache_id,
+                                 'compile_id' => $compile_id,
+                                 'content'    => $content,
+                             ));
+
         return !!$this->save->rowCount();
     }
-    
+
     /**
      * Delete content from cache
      *
-     * @param string $name template name
-     * @param string $cache_id cache id
-     * @param string $compile_id compile id
-     * @param integer|null $exp_time seconds till expiration or null
-     * @return integer number of deleted caches
+     * @param  string       $name       template name
+     * @param  string       $cache_id   cache id
+     * @param  string       $compile_id compile id
+     * @param  integer|null $exp_time   seconds till expiration or null
+     *
+     * @return integer      number of deleted caches
      */
     protected function delete($name, $cache_id, $compile_id, $exp_time)
     {
@@ -124,7 +132,8 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
         if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) {
             // returning the number of deleted caches would require a second query to count them
             $query = $this->db->query('TRUNCATE TABLE output_cache');
-            return -1;
+
+            return - 1;
         }
         // build the filter
         $where = array();
@@ -142,11 +151,12 @@ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
         }
         // equal test cache_id and match sub-groups
         if ($cache_id !== null) {
-            $where[] = '(cache_id = '. $this->db->quote($cache_id)
-                . ' OR cache_id LIKE '. $this->db->quote($cache_id .'|%') .')';
+            $where[] = '(cache_id = ' . $this->db->quote($cache_id)
+                . ' OR cache_id LIKE ' . $this->db->quote($cache_id . '|%') . ')';
         }
         // run delete query
         $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where));
+
         return $query->rowCount();
     }
 }
index d8c40b5bae8267b4d9dc01a44abe9051aa4802ca..500b3c8623fe78264fa7b5a2d57bec35772df9cb 100644 (file)
@@ -2,49 +2,51 @@
 
 /**
  * Extends All Resource
- * 
  * Resource Implementation modifying the extends-Resource to walk
  * through the template_dirs and inherit all templates of the same name
- * 
+ *
  * @package Resource-examples
- * @author Rodney Rehm
+ * @author  Rodney Rehm
  */
-class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends {
-    
+class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends
+{
     /**
      * populate Source Object with meta data from Resource
      *
-     * @param Smarty_Template_Source $source source object
-     * @param Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Source   $source    source object
+     * @param  Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
         $uid = '';
         $sources = array();
         $exists = true;
         foreach ($_template->smarty->getTemplateDir() as $key => $directory) {
             try {
-                $s = Smarty_Resource::source(null, $source->smarty, '[' . $key . ']' . $source->name );
+                $s = Smarty_Resource::source(null, $source->smarty, '[' . $key . ']' . $source->name);
                 if (!$s->exists) {
                     continue;
                 }
                 $sources[$s->uid] = $s;
                 $uid .= $s->filepath;
             }
-            catch (SmartyException $e) {}
+            catch (SmartyException $e) {
+            }
         }
-        
+
         if (!$sources) {
             $source->exists = false;
             $source->template = $_template;
+
             return;
         }
-        
+
         $sources = array_reverse($sources, true);
         reset($sources);
         $s = current($sources);
-        
+
         $source->components = $sources;
         $source->filepath = $s->filepath;
         $source->uid = sha1($uid);
@@ -55,6 +57,4 @@ class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends {
         // need the template at getContent()
         $source->template = $_template;
     }
-} 
-
-?>
\ No newline at end of file
+}
index 312f3fc73cffb41636ae307a66f4dec465506a7a..dfc9606b4e7b3e6a09f781cb01afdf56ed7557b2 100644 (file)
@@ -2,10 +2,8 @@
 
 /**
  * MySQL Resource
- *
  * Resource Implementation based on the Custom API to use
  * MySQL as the storage resource for Smarty's templates and configs.
- *
  * Table definition:
  * <pre>CREATE TABLE IF NOT EXISTS `templates` (
  *   `name` varchar(100) NOT NULL,
  *   `source` text,
  *   PRIMARY KEY (`name`)
  * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- *
  * Demo data:
  * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
  *
  * @package Resource-examples
- * @author Rodney Rehm
+ * @author  Rodney Rehm
  */
-class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
+class Smarty_Resource_Mysql extends Smarty_Resource_Custom
+{
     // PDO instance
     protected $db;
     // prepared fetch() statement
@@ -28,22 +26,25 @@ class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
     // prepared fetchTimestamp() statement
     protected $mtime;
 
-    public function __construct() {
+    public function __construct()
+    {
         try {
-            $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
-        } catch (PDOException $e) {
+            $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+        }
+        catch (PDOException $e) {
             throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
         }
         $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
         $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
     }
-    
+
     /**
      * Fetch a template and its modification time from database
      *
-     * @param string $name template name
-     * @param string $source template source
-     * @param integer $mtime template modification timestamp (epoch)
+     * @param  string  $name   template name
+     * @param  string  $source template source
+     * @param  integer $mtime  template modification timestamp (epoch)
+     *
      * @return void
      */
     protected function fetch($name, &$source, &$mtime)
@@ -59,18 +60,22 @@ class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
             $mtime = null;
         }
     }
-    
+
     /**
      * Fetch a template's modification time from database
      *
      * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source.
-     * @param string $name template name
+     *
+     * @param  string $name template name
+     *
      * @return integer timestamp (epoch) the template was modified
      */
-    protected function fetchTimestamp($name) {
+    protected function fetchTimestamp($name)
+    {
         $this->mtime->execute(array('name' => $name));
         $mtime = $this->mtime->fetchColumn();
         $this->mtime->closeCursor();
+
         return strtotime($mtime);
     }
 }
index f9fe1c2f218ce8276f3c55dff841410674e98b59..f694ddf11ab677ba93dbaba64c70177803e1b767 100644 (file)
@@ -2,13 +2,10 @@
 
 /**
  * MySQL Resource
- *
  * Resource Implementation based on the Custom API to use
  * MySQL as the storage resource for Smarty's templates and configs.
- *
  * Note that this MySQL implementation fetches the source and timestamps in
- * a single database query, instead of two seperate like resource.mysql.php does.
- *
+ * a single database query, instead of two separate like resource.mysql.php does.
  * Table definition:
  * <pre>CREATE TABLE IF NOT EXISTS `templates` (
  *   `name` varchar(100) NOT NULL,
  *   `source` text,
  *   PRIMARY KEY (`name`)
  * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
- *
  * Demo data:
  * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
  *
  * @package Resource-examples
- * @author Rodney Rehm
+ * @author  Rodney Rehm
  */
-class Smarty_Resource_Mysqls extends Smarty_Resource_Custom {
+class Smarty_Resource_Mysqls extends Smarty_Resource_Custom
+{
     // PDO instance
     protected $db;
     // prepared fetch() statement
     protected $fetch;
 
-    public function __construct() {
+    public function __construct()
+    {
         try {
-            $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
-        } catch (PDOException $e) {
+            $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+        }
+        catch (PDOException $e) {
             throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
         }
         $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
     }
-    
+
     /**
      * Fetch a template and its modification time from database
      *
-     * @param string $name template name
-     * @param string $source template source
-     * @param integer $mtime template modification timestamp (epoch)
+     * @param  string  $name   template name
+     * @param  string  $source template source
+     * @param  integer $mtime  template modification timestamp (epoch)
+     *
      * @return void
      */
     protected function fetch($name, &$source, &$mtime)
index 783210a187572177d27edafceb0073577317555e..13fa6cb5a7d36e24f693e4e11b0160a4763df1eb 100644 (file)
@@ -1,5 +1,5 @@
 <HTML>
 <HEAD>
-<TITLE>{$title} - {$Name}</TITLE>
+    <TITLE>{$title} - {$Name}</TITLE>
 </HEAD>
 <BODY bgcolor="#ffffff">
index 38d23341212f815a7d5975e611d7618359b5da43..1fbb6d379451d5412dffa6b199fcacb1bfd89188 100644 (file)
@@ -4,18 +4,18 @@
 <PRE>
 
 {* bold and title are read from the config file *}
-{if #bold#}<b>{/if}
-{* capitalize the first letters of each word of the title *}
-Title: {#title#|capitalize}
-{if #bold#}</b>{/if}
+    {if #bold#}<b>{/if}
+        {* capitalize the first letters of each word of the title *}
+        Title: {#title#|capitalize}
+        {if #bold#}</b>{/if}
 
-The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
+    The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
 
-The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME}
+    The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME}
 
-Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME}
+    Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME}
 
-The value of {ldelim}$Name{rdelim} is <b>{$Name}</b>
+    The value of {ldelim}$Name{rdelim} is <b>{$Name}</b>
 
 variable modifier example of {ldelim}$Name|upper{rdelim}
 
@@ -24,59 +24,64 @@ variable modifier example of {ldelim}$Name|upper{rdelim}
 
 An example of a section loop:
 
-{section name=outer 
-loop=$FirstName}
-{if $smarty.section.outer.index is odd by 2}
-       {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]}
-{else}
-       {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]}
-{/if}
-{sectionelse}
-       none
-{/section}
-
-An example of section looped key values:
-
-{section name=sec1 loop=$contacts}
-       phone: {$contacts[sec1].phone}<br>
-       fax: {$contacts[sec1].fax}<br>
-       cell: {$contacts[sec1].cell}<br>
-{/section}
-<p>
-
-testing strip tags
-{strip}
+    {section name=outer
+    loop=$FirstName}
+        {if $smarty.section.outer.index is odd by 2}
+            {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]}
+        {else}
+            {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]}
+        {/if}
+        {sectionelse}
+        none
+    {/section}
+
+    An example of section looped key values:
+
+    {section name=sec1 loop=$contacts}
+        phone: {$contacts[sec1].phone}
+        <br>
+
+            fax: {$contacts[sec1].fax}
+        <br>
+
+            cell: {$contacts[sec1].cell}
+        <br>
+    {/section}
+    <p>
+
+        testing strip tags
+        {strip}
 <table border=0>
-       <tr>
-               <td>
-                       <A HREF="{$SCRIPT_NAME}">
-                       <font color="red">This is a  test     </font>
-                       </A>
-               </td>
-       </tr>
+    <tr>
+        <td>
+            <A HREF="{$SCRIPT_NAME}">
+                <font color="red">This is a test </font>
+            </A>
+        </td>
+    </tr>
 </table>
-{/strip}
+    {/strip}
 
 </PRE>
 
 This is an example of the html_select_date function:
 
 <form>
-{html_select_date start_year=1998 end_year=2010}
+    {html_select_date start_year=1998 end_year=2010}
 </form>
 
 This is an example of the html_select_time function:
 
 <form>
-{html_select_time use_24_hours=false}
+    {html_select_time use_24_hours=false}
 </form>
 
 This is an example of the html_options function:
 
 <form>
-<select name=states>
-{html_options values=$option_values selected=$option_selected output=$option_output}
-</select>
+    <select name=states>
+        {html_options values=$option_values selected=$option_selected output=$option_output}
+    </select>
 </form>
 
 {include file="footer.tpl"}
index f776aaf7cc7bfe6b58631baa8e7d3b96c36cc2c3..6291e4cd5ef0cc5a278461d66d663a6008eb732e 100644 (file)
@@ -2,33 +2,29 @@
 /**
  * Project:     Smarty: the PHP compiling template engine
  * File:        Smarty.class.php
- * SVN:         $Id: Smarty.class.php 4614 2012-05-24 15:13:19Z rodneyrehm $
- *
+ * SVN:         $Id: Smarty.class.php 4848 2014-06-08 18:12:09Z Uwe.Tews@googlemail.com $
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
  * For questions, help, comments, discussion, etc., please join the
  * Smarty mailing list. Send a blank e-mail to
  * smarty-discussion-subscribe@googlegroups.com
  *
- * @link http://www.smarty.net/
+ * @link      http://www.smarty.net/
  * @copyright 2008 New Digital Group, Inc.
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @author Rodney Rehm
- * @package Smarty
- * @version 3.1-DEV
+ * @author    Monte Ohrt <monte at ohrt dot com>
+ * @author    Uwe Tews
+ * @author    Rodney Rehm
+ * @package   Smarty
+ * @version   3.1.19
  */
 
 /**
@@ -57,7 +53,7 @@ if (!defined('SMARTY_PLUGINS_DIR')) {
     define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DS);
 }
 if (!defined('SMARTY_MBSTRING')) {
-    define('SMARTY_MBSTRING', function_exists('mb_strlen'));
+    define('SMARTY_MBSTRING', function_exists('mb_split'));
 }
 if (!defined('SMARTY_RESOURCE_CHAR_SET')) {
     // UTF-8 can only be done properly when mbstring is available!
@@ -92,20 +88,21 @@ if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR
 /**
  * Load always needed external class files
  */
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_data.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_templatebase.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_template.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_resource.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_resource_file.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_cacheresource.php';
-include_once SMARTY_SYSPLUGINS_DIR.'smarty_internal_cacheresource_file.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_resource_file.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
+include_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_cacheresource_file.php';
 
 /**
  * This is the main Smarty class
+ *
  * @package Smarty
  */
-class Smarty extends Smarty_Internal_TemplateBase {
-
+class Smarty extends Smarty_Internal_TemplateBase
+{
     /**#@+
      * constant definitions
      */
@@ -113,7 +110,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * smarty version
      */
-    const SMARTY_VERSION = 'Smarty-3.1.11';
+    const SMARTY_VERSION = 'Smarty-3.1.19';
 
     /**
      * define variable scopes
@@ -128,6 +125,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
     const CACHING_OFF = 0;
     const CACHING_LIFETIME_CURRENT = 1;
     const CACHING_LIFETIME_SAVED = 2;
+    /**
+     * define constant for clearing cache files be saved expiration datees
+     */
+    const CLEAR_EXPIRED = - 1;
+
     /**
      * define compile check modes
      */
@@ -189,118 +191,145 @@ class Smarty extends Smarty_Internal_TemplateBase {
      * Flag denoting if PCRE should run in UTF-8 mode
      */
     public static $_UTF8_MODIFIER = 'u';
-    
+
     /**
      * Flag denoting if operating system is windows
      */
     public static $_IS_WINDOWS = false;
-    
+
     /**#@+
      * variables
      */
 
     /**
      * auto literal on delimiters with whitspace
+     *
      * @var boolean
      */
     public $auto_literal = true;
     /**
      * display error on not assigned variables
+     *
      * @var boolean
      */
     public $error_unassigned = false;
     /**
      * look up relative filepaths in include_path
+     *
      * @var boolean
      */
     public $use_include_path = false;
     /**
      * template directory
+     *
      * @var array
      */
     private $template_dir = array();
     /**
      * joined template directory string used in cache keys
+     *
      * @var string
      */
     public $joined_template_dir = null;
     /**
      * joined config directory string used in cache keys
+     *
      * @var string
      */
     public $joined_config_dir = null;
     /**
      * default template handler
+     *
      * @var callable
      */
     public $default_template_handler_func = null;
     /**
      * default config handler
+     *
      * @var callable
      */
     public $default_config_handler_func = null;
     /**
      * default plugin handler
+     *
      * @var callable
      */
     public $default_plugin_handler_func = null;
     /**
      * compile directory
+     *
      * @var string
      */
     private $compile_dir = null;
     /**
      * plugins directory
+     *
      * @var array
      */
     private $plugins_dir = array();
     /**
      * cache directory
+     *
      * @var string
      */
     private $cache_dir = null;
     /**
      * config directory
+     *
      * @var array
      */
     private $config_dir = array();
     /**
      * force template compiling?
+     *
      * @var boolean
      */
     public $force_compile = false;
     /**
      * check template for modifications?
+     *
      * @var boolean
      */
     public $compile_check = true;
     /**
      * use sub dirs for compiled/cached files?
+     *
      * @var boolean
      */
     public $use_sub_dirs = false;
     /**
      * allow ambiguous resources (that are made unique by the resource handler)
+     *
      * @var boolean
      */
     public $allow_ambiguous_resources = false;
     /**
      * caching enabled
+     *
      * @var boolean
      */
     public $caching = false;
     /**
      * merge compiled includes
+     *
      * @var boolean
      */
     public $merge_compiled_includes = false;
+    /**
+     * template inheritance merge compiled includes
+     *
+     * @var boolean
+     */
+    public $inheritance_merge_compiled_includes = true;
     /**
      * cache lifetime in seconds
+     *
      * @var integer
      */
     public $cache_lifetime = 3600;
     /**
      * force cache file creation
+     *
      * @var boolean
      */
     public $force_cache = false;
@@ -320,11 +349,13 @@ class Smarty extends Smarty_Internal_TemplateBase {
     public $compile_id = null;
     /**
      * template left-delimiter
+     *
      * @var string
      */
     public $left_delimiter = "{";
     /**
      * template right-delimiter
+     *
      * @var string
      */
     public $right_delimiter = "}";
@@ -333,7 +364,6 @@ class Smarty extends Smarty_Internal_TemplateBase {
      */
     /**
      * class name
-     *
      * This should be instance of Smarty_Security.
      *
      * @var string
@@ -360,7 +390,6 @@ class Smarty extends Smarty_Internal_TemplateBase {
     public $allow_php_templates = false;
     /**
      * Should compiled-templates be prevented from being called directly?
-     *
      * {@internal
      * Currently used by Smarty_Internal_Template only.
      * }}
@@ -371,7 +400,6 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**#@-*/
     /**
      * debug mode
-     *
      * Setting this to true enables the debug-console.
      *
      * @var boolean
@@ -383,12 +411,12 @@ class Smarty extends Smarty_Internal_TemplateBase {
      *  <li>NONE => no debugging control allowed</li>
      *  <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li>
      * </ul>
+     *
      * @var string
      */
     public $debugging_ctrl = 'NONE';
     /**
      * Name of debugging URL-param.
-     *
      * Only used when $debugging_ctrl is set to 'URL'.
      * The name of the URL-parameter that activates debugging.
      *
@@ -397,16 +425,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
     public $smarty_debug_id = 'SMARTY_DEBUG';
     /**
      * Path of debug template.
+     *
      * @var string
      */
     public $debug_tpl = null;
     /**
      * When set, smarty uses this value as error_reporting-level.
+     *
      * @var int
      */
     public $error_reporting = null;
     /**
      * Internal flag for getTags()
+     *
      * @var boolean
      */
     public $get_used_tags = false;
@@ -417,16 +448,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
 
     /**
      * Controls whether variables with the same name overwrite each other.
+     *
      * @var boolean
      */
     public $config_overwrite = true;
     /**
      * Controls whether config values of on/true/yes and off/false/no get converted to boolean.
+     *
      * @var boolean
      */
     public $config_booleanize = true;
     /**
      * Controls whether hidden config sections/vars are read from the file.
+     *
      * @var boolean
      */
     public $config_read_hidden = false;
@@ -439,16 +473,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
 
     /**
      * locking concurrent compiles
+     *
      * @var boolean
      */
     public $compile_locking = true;
     /**
      * Controls whether cache resources should emply locking mechanism
+     *
      * @var boolean
      */
     public $cache_locking = false;
     /**
      * seconds to wait for acquiring a lock before ignoring the write lock
+     *
      * @var float
      */
     public $locking_timeout = 10;
@@ -457,19 +494,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
 
     /**
      * global template functions
+     *
      * @var array
      */
     public $template_functions = array();
     /**
      * resource type used if none given
-     *
      * Must be an valid key of $registered_resources.
+     *
      * @var string
      */
     public $default_resource_type = 'file';
     /**
      * caching type
-     *
      * Must be an element of $cache_resource_types.
      *
      * @var string
@@ -477,121 +514,145 @@ class Smarty extends Smarty_Internal_TemplateBase {
     public $caching_type = 'file';
     /**
      * internal config properties
+     *
      * @var array
      */
     public $properties = array();
     /**
      * config type
+     *
      * @var string
      */
     public $default_config_type = 'file';
     /**
      * cached template objects
+     *
      * @var array
      */
     public $template_objects = array();
     /**
      * check If-Modified-Since headers
+     *
      * @var boolean
      */
     public $cache_modified_check = false;
     /**
      * registered plugins
+     *
      * @var array
      */
     public $registered_plugins = array();
     /**
      * plugin search order
+     *
      * @var array
      */
     public $plugin_search_order = array('function', 'block', 'compiler', 'class');
     /**
      * registered objects
+     *
      * @var array
      */
     public $registered_objects = array();
     /**
      * registered classes
+     *
      * @var array
      */
     public $registered_classes = array();
     /**
      * registered filters
+     *
      * @var array
      */
     public $registered_filters = array();
     /**
      * registered resources
+     *
      * @var array
      */
     public $registered_resources = array();
     /**
      * resource handler cache
+     *
      * @var array
      */
     public $_resource_handlers = array();
     /**
      * registered cache resources
+     *
      * @var array
      */
     public $registered_cache_resources = array();
     /**
      * cache resource handler cache
+     *
      * @var array
      */
     public $_cacheresource_handlers = array();
     /**
      * autoload filter
+     *
      * @var array
      */
     public $autoload_filters = array();
     /**
      * default modifier
+     *
      * @var array
      */
     public $default_modifiers = array();
     /**
      * autoescape variable output
+     *
      * @var boolean
      */
     public $escape_html = false;
     /**
      * global internal smarty vars
+     *
      * @var array
      */
     public static $_smarty_vars = array();
     /**
      * start time for execution time calculation
+     *
      * @var int
      */
     public $start_time = 0;
     /**
      * default file permissions
+     *
      * @var int
      */
     public $_file_perms = 0644;
     /**
      * default dir permissions
+     *
      * @var int
      */
     public $_dir_perms = 0771;
     /**
      * block tag hierarchy
+     *
      * @var array
      */
     public $_tag_stack = array();
     /**
      * self pointer to Smarty object
+     *
      * @var Smarty
      */
     public $smarty;
     /**
      * required by the compiler for BC
+     *
      * @var string
      */
     public $_current_file = null;
     /**
      * internal flag to enable parser debugging
+     *
      * @var bool
      */
     public $_parserdebug = false;
@@ -605,7 +666,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
 
     /**
      * Initialize new Smarty object
-     *
+
      */
     public function __construct()
     {
@@ -628,7 +689,6 @@ class Smarty extends Smarty_Internal_TemplateBase {
         }
     }
 
-
     /**
      * Class destructor
      */
@@ -645,36 +705,34 @@ class Smarty extends Smarty_Internal_TemplateBase {
         $this->smarty = $this;
     }
 
-
     /**
      * <<magic>> Generic getter.
-     *
      * Calls the appropriate getter function.
      * Issues an E_USER_NOTICE if no valid getter is found.
      *
-     * @param string $name property name
+     * @param  string $name property name
+     *
      * @return mixed
      */
     public function __get($name)
     {
         $allowed = array(
-        'template_dir' => 'getTemplateDir',
-        'config_dir' => 'getConfigDir',
-        'plugins_dir' => 'getPluginsDir',
-        'compile_dir' => 'getCompileDir',
-        'cache_dir' => 'getCacheDir',
+            'template_dir' => 'getTemplateDir',
+            'config_dir'   => 'getConfigDir',
+            'plugins_dir'  => 'getPluginsDir',
+            'compile_dir'  => 'getCompileDir',
+            'cache_dir'    => 'getCacheDir',
         );
 
         if (isset($allowed[$name])) {
             return $this->{$allowed[$name]}();
         } else {
-            trigger_error('Undefined property: '. get_class($this) .'::$'. $name, E_USER_NOTICE);
+            trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
         }
     }
 
     /**
      * <<magic>> Generic setter.
-     *
      * Calls the appropriate setter function.
      * Issues an E_USER_NOTICE if no valid setter is found.
      *
@@ -684,11 +742,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
     public function __set($name, $value)
     {
         $allowed = array(
-        'template_dir' => 'setTemplateDir',
-        'config_dir' => 'setConfigDir',
-        'plugins_dir' => 'setPluginsDir',
-        'compile_dir' => 'setCompileDir',
-        'cache_dir' => 'setCacheDir',
+            'template_dir' => 'setTemplateDir',
+            'config_dir'   => 'setConfigDir',
+            'plugins_dir'  => 'setPluginsDir',
+            'compile_dir'  => 'setCompileDir',
+            'cache_dir'    => 'setCacheDir',
         );
 
         if (isset($allowed[$name])) {
@@ -701,7 +759,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Check if a template resource exists
      *
-     * @param string $resource_name template name
+     * @param  string $resource_name template name
+     *
      * @return boolean status
      */
     public function templateExists($resource_name)
@@ -712,14 +771,15 @@ class Smarty extends Smarty_Internal_TemplateBase {
         // check if it does exists
         $result = $tpl->source->exists;
         $this->template_objects = $save;
+
         return $result;
     }
 
     /**
      * Returns a single or all global  variables
      *
-     * @param object $smarty
-     * @param string $varname variable name or null
+     * @param  string $varname variable name or null
+     *
      * @return string variable value or or array of variables
      */
     public function getGlobal($varname = null)
@@ -735,6 +795,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
             foreach (self::$global_tpl_vars AS $key => $var) {
                 $_result[$key] = $var->value;
             }
+
             return $_result;
         }
     }
@@ -742,26 +803,29 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Empty cache folder
      *
-     * @param integer $exp_time expiration time
-     * @param string  $type     resource type
+     * @param  integer $exp_time expiration time
+     * @param  string  $type     resource type
+     *
      * @return integer number of cache files deleted
      */
-    function clearAllCache($exp_time = null, $type = null)
+    public function clearAllCache($exp_time = null, $type = null)
     {
         // load cache resource and call clearAll
         $_cache_resource = Smarty_CacheResource::load($this, $type);
         Smarty_CacheResource::invalidLoadedCache($this);
+
         return $_cache_resource->clearAll($this, $exp_time);
     }
 
     /**
      * Empty cache for a specific template
      *
-     * @param string  $template_name template name
-     * @param string  $cache_id      cache id
-     * @param string  $compile_id    compile id
-     * @param integer $exp_time      expiration time
-     * @param string  $type          resource type
+     * @param  string  $template_name template name
+     * @param  string  $cache_id      cache id
+     * @param  string  $compile_id    compile id
+     * @param  integer $exp_time      expiration time
+     * @param  string  $type          resource type
+     *
      * @return integer number of cache files deleted
      */
     public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)
@@ -769,20 +833,23 @@ class Smarty extends Smarty_Internal_TemplateBase {
         // load cache resource and call clear
         $_cache_resource = Smarty_CacheResource::load($this, $type);
         Smarty_CacheResource::invalidLoadedCache($this);
+
         return $_cache_resource->clear($this, $template_name, $cache_id, $compile_id, $exp_time);
     }
 
     /**
      * Loads security class and enables security
      *
-     * @param string|Smarty_Security $security_class if a string is used, it must be class-name
-     * @return Smarty current Smarty instance for chaining
-     * @throws SmartyException when an invalid class name is provided
+     * @param  string|Smarty_Security $security_class if a string is used, it must be class-name
+     *
+     * @return Smarty                 current Smarty instance for chaining
+     * @throws SmartyException        when an invalid class name is provided
      */
     public function enableSecurity($security_class = null)
     {
         if ($security_class instanceof Smarty_Security) {
             $this->security_policy = $security_class;
+
             return $this;
         } elseif (is_object($security_class)) {
             throw new SmartyException("Class '" . get_class($security_class) . "' must extend Smarty_Security.");
@@ -803,6 +870,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
 
     /**
      * Disable security
+     *
      * @return Smarty current Smarty instance for chaining
      */
     public function disableSecurity()
@@ -815,145 +883,164 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Set template directory
      *
-     * @param string|array $template_dir directory(s) of template sources
-     * @return Smarty current Smarty instance for chaining
+     * @param  string|array $template_dir directory(s) of template sources
+     *
+     * @return Smarty       current Smarty instance for chaining
      */
     public function setTemplateDir($template_dir)
     {
         $this->template_dir = array();
         foreach ((array) $template_dir as $k => $v) {
-            $this->template_dir[$k] = rtrim($v, '/\\') . DS;
+            $this->template_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
         }
 
         $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
+
         return $this;
     }
 
     /**
      * Add template directory(s)
      *
-     * @param string|array $template_dir directory(s) of template sources
-     * @param string       $key          of the array element to assign the template dir to
-     * @return Smarty current Smarty instance for chaining
+     * @param  string|array $template_dir directory(s) of template sources
+     * @param  string       $key          of the array element to assign the template dir to
+     *
+     * @return Smarty          current Smarty instance for chaining
      * @throws SmartyException when the given template directory is not valid
      */
-    public function addTemplateDir($template_dir, $key=null)
+    public function addTemplateDir($template_dir, $key = null)
     {
         // make sure we're dealing with an array
         $this->template_dir = (array) $this->template_dir;
 
         if (is_array($template_dir)) {
             foreach ($template_dir as $k => $v) {
+                $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
                 if (is_int($k)) {
                     // indexes are not merged but appended
-                    $this->template_dir[] = rtrim($v, '/\\') . DS;
+                    $this->template_dir[] = $v;
                 } else {
                     // string indexes are overridden
-                    $this->template_dir[$k] = rtrim($v, '/\\') . DS;
+                    $this->template_dir[$k] = $v;
                 }
             }
-        } elseif ($key !== null) {
-            // override directory at specified index
-            $this->template_dir[$key] = rtrim($template_dir, '/\\') . DS;
         } else {
-            // append new directory
-            $this->template_dir[] = rtrim($template_dir, '/\\') . DS;
+            $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($template_dir, '/\\')) . DS;
+            if ($key !== null) {
+                // override directory at specified index
+                $this->template_dir[$key] = $v;
+            } else {
+                // append new directory
+                $this->template_dir[] = $v;
+            }
         }
         $this->joined_template_dir = join(DIRECTORY_SEPARATOR, $this->template_dir);
+
         return $this;
     }
 
     /**
      * Get template directories
      *
-     * @param mixed index of directory to get, null to get all
+     * @param mixed $index index of directory to get, null to get all
+     *
      * @return array|string list of template directories, or directory of $index
      */
-    public function getTemplateDir($index=null)
+    public function getTemplateDir($index = null)
     {
         if ($index !== null) {
             return isset($this->template_dir[$index]) ? $this->template_dir[$index] : null;
         }
 
-        return (array)$this->template_dir;
+        return (array) $this->template_dir;
     }
 
     /**
      * Set config directory
      *
-     * @param string|array $template_dir directory(s) of configuration sources
-     * @return Smarty current Smarty instance for chaining
+     * @param $config_dir
+     *
+     * @return Smarty       current Smarty instance for chaining
      */
     public function setConfigDir($config_dir)
     {
         $this->config_dir = array();
         foreach ((array) $config_dir as $k => $v) {
-            $this->config_dir[$k] = rtrim($v, '/\\') . DS;
+            $this->config_dir[$k] = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
         }
 
         $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
+
         return $this;
     }
 
     /**
      * Add config directory(s)
      *
-     * @param string|array $config_dir directory(s) of config sources
-     * @param string key of the array element to assign the config dir to
+     * @param string|array        $config_dir directory(s) of config sources
+     * @param mixed $key        key of the array element to assign the config dir to
+     *
      * @return Smarty current Smarty instance for chaining
      */
-    public function addConfigDir($config_dir, $key=null)
+    public function addConfigDir($config_dir, $key = null)
     {
         // make sure we're dealing with an array
         $this->config_dir = (array) $this->config_dir;
 
         if (is_array($config_dir)) {
             foreach ($config_dir as $k => $v) {
+                $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($v, '/\\')) . DS;
                 if (is_int($k)) {
                     // indexes are not merged but appended
-                    $this->config_dir[] = rtrim($v, '/\\') . DS;
+                    $this->config_dir[] = $v;
                 } else {
                     // string indexes are overridden
-                    $this->config_dir[$k] = rtrim($v, '/\\') . DS;
+                    $this->config_dir[$k] = $v;
                 }
             }
-        } elseif( $key !== null ) {
-            // override directory at specified index
-            $this->config_dir[$key] = rtrim($config_dir, '/\\') . DS;
         } else {
-            // append new directory
-            $this->config_dir[] = rtrim($config_dir, '/\\') . DS;
+            $v = preg_replace('#(\w+)(/|\\\\){1,}#', '$1$2', rtrim($config_dir, '/\\')) . DS;
+            if ($key !== null) {
+                // override directory at specified index
+                $this->config_dir[$key] = rtrim($v, '/\\') . DS;
+            } else {
+                // append new directory
+                $this->config_dir[] = rtrim($v, '/\\') . DS;
+            }
         }
 
         $this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
+
         return $this;
     }
 
     /**
      * Get config directory
      *
-     * @param mixed index of directory to get, null to get all
+     * @param mixed $index index of directory to get, null to get all
+     *
      * @return array|string configuration directory
      */
-    public function getConfigDir($index=null)
+    public function getConfigDir($index = null)
     {
         if ($index !== null) {
             return isset($this->config_dir[$index]) ? $this->config_dir[$index] : null;
         }
 
-        return (array)$this->config_dir;
+        return (array) $this->config_dir;
     }
 
     /**
      * Set plugins directory
      *
-     * @param string|array $plugins_dir directory(s) of plugins
-     * @return Smarty current Smarty instance for chaining
+     * @param  string|array $plugins_dir directory(s) of plugins
+     *
+     * @return Smarty       current Smarty instance for chaining
      */
     public function setPluginsDir($plugins_dir)
     {
         $this->plugins_dir = array();
-        foreach ((array)$plugins_dir as $k => $v) {
+        foreach ((array) $plugins_dir as $k => $v) {
             $this->plugins_dir[$k] = rtrim($v, '/\\') . DS;
         }
 
@@ -963,8 +1050,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Adds directory of plugin files
      *
-     * @param object $smarty
-     * @param string $ |array $ plugins folder
+     * @param $plugins_dir
+     *
      * @return Smarty current Smarty instance for chaining
      */
     public function addPluginsDir($plugins_dir)
@@ -988,6 +1075,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
         }
 
         $this->plugins_dir = array_unique($this->plugins_dir);
+
         return $this;
     }
 
@@ -998,13 +1086,14 @@ class Smarty extends Smarty_Internal_TemplateBase {
      */
     public function getPluginsDir()
     {
-        return (array)$this->plugins_dir;
+        return (array) $this->plugins_dir;
     }
 
     /**
      * Set compile directory
      *
-     * @param string $compile_dir directory to store compiled templates in
+     * @param  string $compile_dir directory to store compiled templates in
+     *
      * @return Smarty current Smarty instance for chaining
      */
     public function setCompileDir($compile_dir)
@@ -1013,6 +1102,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
         if (!isset(Smarty::$_muted_directories[$this->compile_dir])) {
             Smarty::$_muted_directories[$this->compile_dir] = null;
         }
+
         return $this;
     }
 
@@ -1029,7 +1119,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Set cache directory
      *
-     * @param string $cache_dir directory to store cached templates in
+     * @param  string $cache_dir directory to store cached templates in
+     *
      * @return Smarty current Smarty instance for chaining
      */
     public function setCacheDir($cache_dir)
@@ -1038,6 +1129,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
         if (!isset(Smarty::$_muted_directories[$this->cache_dir])) {
             Smarty::$_muted_directories[$this->cache_dir] = null;
         }
+
         return $this;
     }
 
@@ -1054,20 +1146,23 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Set default modifiers
      *
-     * @param array|string $modifiers modifier or list of modifiers to set
-     * @return Smarty current Smarty instance for chaining
+     * @param  array|string $modifiers modifier or list of modifiers to set
+     *
+     * @return Smarty       current Smarty instance for chaining
      */
     public function setDefaultModifiers($modifiers)
     {
         $this->default_modifiers = (array) $modifiers;
+
         return $this;
     }
 
     /**
      * Add default modifiers
      *
-     * @param array|string $modifiers modifier or list of modifiers to add
-     * @return Smarty current Smarty instance for chaining
+     * @param  array|string $modifiers modifier or list of modifiers to add
+     *
+     * @return Smarty       current Smarty instance for chaining
      */
     public function addDefaultModifiers($modifiers)
     {
@@ -1090,15 +1185,15 @@ class Smarty extends Smarty_Internal_TemplateBase {
         return $this->default_modifiers;
     }
 
-
     /**
      * Set autoload filters
      *
-     * @param array $filters filters to load automatically
-     * @param string $type "pre", "output", â€¦ specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
+     * @param  array  $filters filters to load automatically
+     * @param  string $type    "pre", "output", â€¦ specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
+     *
      * @return Smarty current Smarty instance for chaining
      */
-    public function setAutoloadFilters($filters, $type=null)
+    public function setAutoloadFilters($filters, $type = null)
     {
         if ($type !== null) {
             $this->autoload_filters[$type] = (array) $filters;
@@ -1112,11 +1207,12 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Add autoload filters
      *
-     * @param array $filters filters to load automatically
-     * @param string $type "pre", "output", â€¦ specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
+     * @param  array  $filters filters to load automatically
+     * @param  string $type    "pre", "output", â€¦ specify the filter type to set. Defaults to none treating $filters' keys as the appropriate types
+     *
      * @return Smarty current Smarty instance for chaining
      */
-    public function addAutoloadFilters($filters, $type=null)
+    public function addAutoloadFilters($filters, $type = null)
     {
         if ($type !== null) {
             if (!empty($this->autoload_filters[$type])) {
@@ -1140,10 +1236,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Get autoload filters
      *
-     * @param string $type type of filter to get autoloads for. Defaults to all autoload filters
-     * @return array array( 'type1' => array( 'filter1', 'filter2', â€¦ ) ) or array( 'filter1', 'filter2', â€¦) if $type was specified
+     * @param  string $type type of filter to get autoloads for. Defaults to all autoload filters
+     *
+     * @return array  array( 'type1' => array( 'filter1', 'filter2', â€¦ ) ) or array( 'filter1', 'filter2', â€¦) if $type was specified
      */
-    public function getAutoloadFilters($type=null)
+    public function getAutoloadFilters($type = null)
     {
         if ($type !== null) {
             return isset($this->autoload_filters[$type]) ? $this->autoload_filters[$type] : array();
@@ -1165,8 +1262,9 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * set the debug template
      *
-     * @param string $tpl_name
-     * @return Smarty current Smarty instance for chaining
+     * @param  string $tpl_name
+     *
+     * @return Smarty          current Smarty instance for chaining
      * @throws SmartyException if file is not readable
      */
     public function setDebugTemplate($tpl_name)
@@ -1182,20 +1280,21 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * creates a template object
      *
-     * @param string $template the resource handle of the template file
-     * @param mixed $cache_id cache id to be used with this template
-     * @param mixed $compile_id compile id to be used with this template
-     * @param object $parent next higher level of Smarty variables
-     * @param boolean $do_clone flag is Smarty object shall be cloned
-     * @return object template object
+     * @param  string  $template   the resource handle of the template file
+     * @param  mixed   $cache_id   cache id to be used with this template
+     * @param  mixed   $compile_id compile id to be used with this template
+     * @param  object  $parent     next higher level of Smarty variables
+     * @param  boolean $do_clone   flag is Smarty object shall be cloned
+     *
+     * @return object  template object
      */
     public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true)
     {
-        if (!empty($cache_id) && (is_object($cache_id) || is_array($cache_id))) {
+        if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) {
             $parent = $cache_id;
             $cache_id = null;
         }
-        if (!empty($parent) && is_array($parent)) {
+        if ($parent !== null && is_array($parent)) {
             $data = $parent;
             $parent = null;
         } else {
@@ -1242,17 +1341,19 @@ class Smarty extends Smarty_Internal_TemplateBase {
                 $tpl->tpl_vars[$_key] = new Smarty_variable($_val);
             }
         }
+
         return $tpl;
     }
 
-
     /**
      * Takes unknown classes and loads plugin files for them
      * class name format: Smarty_PluginType_PluginName
      * plugin filename format: plugintype.pluginname.php
      *
-     * @param string $plugin_name    class plugin name to load
-     * @param bool   $check          check if already loaded
+     * @param  string $plugin_name class plugin name to load
+     * @param  bool   $check       check if already loaded
+     *
+     * @throws SmartyException
      * @return string |boolean filepath of loaded file or false
      */
     public function loadPlugin($plugin_name, $check = true)
@@ -1267,13 +1368,13 @@ class Smarty extends Smarty_Internal_TemplateBase {
         // count($_name_parts) < 3 === !isset($_name_parts[2])
         if (!isset($_name_parts[2]) || strtolower($_name_parts[0]) !== 'smarty') {
             throw new SmartyException("plugin {$plugin_name} is not a valid name format");
-            return false;
         }
         // if type is "internal", get plugin from sysplugins
         if (strtolower($_name_parts[1]) == 'internal') {
             $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php';
             if (file_exists($file)) {
                 require_once($file);
+
                 return $file;
             } else {
                 return false;
@@ -1281,11 +1382,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
         }
         // plugin filename is expected to be: [type].[name].php
         $_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php";
-        
+
         $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
 
         // loop through plugin dirs and find the plugin
-        foreach($this->getPluginsDir() as $_plugin_dir) {
+        foreach ($this->getPluginsDir() as $_plugin_dir) {
             $names = array(
                 $_plugin_dir . $_plugin_filename,
                 $_plugin_dir . strtolower($_plugin_filename),
@@ -1293,6 +1394,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
             foreach ($names as $file) {
                 if (file_exists($file)) {
                     require_once($file);
+
                     return $file;
                 }
                 if ($this->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
@@ -1302,9 +1404,10 @@ class Smarty extends Smarty_Internal_TemplateBase {
                     } else {
                         $file = Smarty_Internal_Get_Include_Path::getIncludePath($file);
                     }
-                    
+
                     if ($file !== false) {
                         require_once($file);
+
                         return $file;
                     }
                 }
@@ -1317,37 +1420,40 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Compile all template files
      *
-     * @param string $extension file extension
-     * @param bool $force_compile force all to recompile
-     * @param int $time_limit
-     * @param int $max_errors
+     * @param  string $extension     file extension
+     * @param  bool   $force_compile force all to recompile
+     * @param  int    $time_limit
+     * @param  int    $max_errors
+     *
      * @return integer number of template files recompiled
      */
-    public function compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
+    public function compileAllTemplates($extension = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
     {
-        return Smarty_Internal_Utility::compileAllTemplates($extention, $force_compile, $time_limit, $max_errors, $this);
+        return Smarty_Internal_Utility::compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, $this);
     }
 
     /**
      * Compile all config files
      *
-     * @param string $extension file extension
-     * @param bool $force_compile force all to recompile
-     * @param int $time_limit
-     * @param int $max_errors
+     * @param  string $extension     file extension
+     * @param  bool   $force_compile force all to recompile
+     * @param  int    $time_limit
+     * @param  int    $max_errors
+     *
      * @return integer number of template files recompiled
      */
-    public function compileAllConfig($extention = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
+    public function compileAllConfig($extension = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
     {
-        return Smarty_Internal_Utility::compileAllConfig($extention, $force_compile, $time_limit, $max_errors, $this);
+        return Smarty_Internal_Utility::compileAllConfig($extension, $force_compile, $time_limit, $max_errors, $this);
     }
 
     /**
      * Delete compiled template file
      *
-     * @param string $resource_name template name
-     * @param string $compile_id compile id
-     * @param integer $exp_time expiration time
+     * @param  string  $resource_name template name
+     * @param  string  $compile_id    compile id
+     * @param  integer $exp_time      expiration time
+     *
      * @return integer number of template files deleted
      */
     public function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
@@ -1355,12 +1461,12 @@ class Smarty extends Smarty_Internal_TemplateBase {
         return Smarty_Internal_Utility::clearCompiledTemplate($resource_name, $compile_id, $exp_time, $this);
     }
 
-
     /**
      * Return array of tag/attributes of all tags used by an template
      *
-     * @param object $templae template object
-     * @return array of tag/attributes
+     * @param Smarty_Internal_Template $template
+     *
+     * @return array  of tag/attributes
      */
     public function getTags(Smarty_Internal_Template $template)
     {
@@ -1370,10 +1476,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
     /**
      * Run installation test
      *
-     * @param array $errors Array to write errors into, rather than outputting them
+     * @param  array $errors Array to write errors into, rather than outputting them
+     *
      * @return boolean true if setup is fine, false if something is wrong
      */
-    public function testInstall(&$errors=null)
+    public function testInstall(&$errors = null)
     {
         return Smarty_Internal_Utility::testInstall($this, $errors);
     }
@@ -1382,7 +1489,13 @@ class Smarty extends Smarty_Internal_TemplateBase {
      * Error Handler to mute expected messages
      *
      * @link http://php.net/set_error_handler
-     * @param integer $errno Error level
+     *
+     * @param  integer $errno Error level
+     * @param          $errstr
+     * @param          $errfile
+     * @param          $errline
+     * @param          $errcontext
+     *
      * @return boolean
      */
     public static function mutingErrorHandler($errno, $errstr, $errfile, $errline, $errcontext)
@@ -1392,10 +1505,12 @@ class Smarty extends Smarty_Internal_TemplateBase {
         // add the SMARTY_DIR to the list of muted directories
         if (!isset(Smarty::$_muted_directories[SMARTY_DIR])) {
             $smarty_dir = realpath(SMARTY_DIR);
-            Smarty::$_muted_directories[SMARTY_DIR] = array(
-                'file' => $smarty_dir,
-                'length' => strlen($smarty_dir),
-            );
+            if ($smarty_dir !== false) {
+                Smarty::$_muted_directories[SMARTY_DIR] = array(
+                    'file'   => $smarty_dir,
+                    'length' => strlen($smarty_dir),
+                );
+            }
         }
 
         // walk the muted directories and test against $errfile
@@ -1403,8 +1518,13 @@ class Smarty extends Smarty_Internal_TemplateBase {
             if (!$dir) {
                 // resolve directory and length for speedy comparisons
                 $file = realpath($key);
+                if ($file === false) {
+                    // this directory does not exist, remove and skip it
+                    unset(Smarty::$_muted_directories[$key]);
+                    continue;
+                }
                 $dir = array(
-                    'file' => $file,
+                    'file'   => $file,
                     'length' => strlen($file),
                 );
             }
@@ -1478,16 +1598,55 @@ if (Smarty::$_CHARSET !== 'UTF-8') {
 
 /**
  * Smarty exception class
+ *
  * @package Smarty
  */
-class SmartyException extends Exception {
+class SmartyException extends Exception
+{
+    public static $escape = false;
+
+    public function __toString()
+    {
+        return ' --> Smarty: ' . (self::$escape ? htmlentities($this->message) : $this->message) . ' <-- ';
+    }
 }
 
 /**
  * Smarty compiler exception class
+ *
  * @package Smarty
  */
-class SmartyCompilerException extends SmartyException  {
+class SmartyCompilerException extends SmartyException
+{
+    public function __toString()
+    {
+        return ' --> Smarty Compiler: ' . $this->message . ' <-- ';
+    }
+
+    /**
+     * The line number of the template error
+     *
+     * @type int|null
+     */
+    public $line = null;
+    /**
+     * The template source snippet relating to the error
+     *
+     * @type string|null
+     */
+    public $source = null;
+    /**
+     * The raw text of the error message
+     *
+     * @type string|null
+     */
+    public $desc = null;
+    /**
+     * The resource identifier or template name
+     *
+     * @type string|null
+     */
+    public $template = null;
 }
 
 /**
@@ -1496,22 +1655,20 @@ class SmartyCompilerException extends SmartyException  {
 function smartyAutoload($class)
 {
     $_class = strtolower($class);
-    $_classes = array(
-        'smarty_config_source' => true,
-        'smarty_config_compiled' => true,
-        'smarty_security' => true,
-        'smarty_cacheresource' => true,
-        'smarty_cacheresource_custom' => true,
+    static $_classes = array(
+        'smarty_config_source'               => true,
+        'smarty_config_compiled'             => true,
+        'smarty_security'                    => true,
+        'smarty_cacheresource'               => true,
+        'smarty_cacheresource_custom'        => true,
         'smarty_cacheresource_keyvaluestore' => true,
-        'smarty_resource' => true,
-        'smarty_resource_custom' => true,
-        'smarty_resource_uncompiled' => true,
-        'smarty_resource_recompiled' => true,
+        'smarty_resource'                    => true,
+        'smarty_resource_custom'             => true,
+        'smarty_resource_uncompiled'         => true,
+        'smarty_resource_recompiled'         => true,
     );
 
     if (!strncmp($_class, 'smarty_internal_', 16) || isset($_classes[$_class])) {
         include SMARTY_SYSPLUGINS_DIR . $_class . '.php';
     }
 }
-
-?>
index f8f0a138f8499abb6bf164ba7e854ced09735e39..cec9467463a838e06fa81304c3b465b6bbeee8af 100644 (file)
-<?php\r
-/**\r
- * Project:     Smarty: the PHP compiling template engine\r
- * File:        SmartyBC.class.php\r
- * SVN:         $Id: $\r
- *\r
- * This library is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU Lesser General Public\r
- * License as published by the Free Software Foundation; either\r
- * version 2.1 of the License, or (at your option) any later version.\r
- *\r
- * This library is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
- * Lesser General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Lesser General Public\r
- * License along with this library; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
- *\r
- * For questions, help, comments, discussion, etc., please join the\r
- * Smarty mailing list. Send a blank e-mail to\r
- * smarty-discussion-subscribe@googlegroups.com\r
- *\r
- * @link http://www.smarty.net/\r
- * @copyright 2008 New Digital Group, Inc.\r
- * @author Monte Ohrt <monte at ohrt dot com>\r
- * @author Uwe Tews\r
- * @author Rodney Rehm\r
- * @package Smarty\r
- */\r
-/**\r
- * @ignore\r
- */\r
-require(dirname(__FILE__) . '/Smarty.class.php');\r
-\r
-/**\r
- * Smarty Backward Compatability Wrapper Class\r
- *\r
- * @package Smarty\r
- */\r
-class SmartyBC extends Smarty {\r
-\r
-    /**\r
-     * Smarty 2 BC\r
-     * @var string\r
-     */\r
-    public $_version = self::SMARTY_VERSION;\r
-\r
-    /**\r
-     * Initialize new SmartyBC object\r
-     *\r
-     * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false )\r
-     */\r
-    public function __construct(array $options=array())\r
-    {\r
-        parent::__construct($options);\r
-        // register {php} tag\r
-        $this->registerPlugin('block', 'php', 'smarty_php_tag');\r
-    }\r
-\r
-    /**\r
-     * wrapper for assign_by_ref\r
-     *\r
-     * @param string $tpl_var the template variable name\r
-     * @param mixed  &$value  the referenced value to assign\r
-     */\r
-    public function assign_by_ref($tpl_var, &$value)\r
-    {\r
-        $this->assignByRef($tpl_var, $value);\r
-    }\r
-\r
-    /**\r
-     * wrapper for append_by_ref\r
-     *\r
-     * @param string  $tpl_var the template variable name\r
-     * @param mixed   &$value  the referenced value to append\r
-     * @param boolean $merge   flag if array elements shall be merged\r
-     */\r
-    public function append_by_ref($tpl_var, &$value, $merge = false)\r
-    {\r
-        $this->appendByRef($tpl_var, $value, $merge);\r
-    }\r
-\r
-    /**\r
-     * clear the given assigned template variable.\r
-     *\r
-     * @param string $tpl_var the template variable to clear\r
-     */\r
-    public function clear_assign($tpl_var)\r
-    {\r
-        $this->clearAssign($tpl_var);\r
-    }\r
-\r
-    /**\r
-     * Registers custom function to be used in templates\r
-     *\r
-     * @param string $function      the name of the template function\r
-     * @param string $function_impl the name of the PHP function to register\r
-     * @param bool   $cacheable\r
-     * @param mixed  $cache_attrs\r
-     */\r
-    public function register_function($function, $function_impl, $cacheable=true, $cache_attrs=null)\r
-    {\r
-        $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs);\r
-    }\r
-\r
-    /**\r
-     * Unregisters custom function\r
-     *\r
-     * @param string $function name of template function\r
-     */\r
-    public function unregister_function($function)\r
-    {\r
-        $this->unregisterPlugin('function', $function);\r
-    }\r
-\r
-    /**\r
-     * Registers object to be used in templates\r
-     *\r
-     * @param string  $object      name of template object\r
-     * @param object  $object_impl the referenced PHP object to register\r
-     * @param array   $allowed     list of allowed methods (empty = all)\r
-     * @param boolean $smarty_args smarty argument format, else traditional\r
-     * @param array   $block_functs list of methods that are block format\r
-     */\r
-    public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())\r
-    {\r
-        settype($allowed, 'array');\r
-        settype($smarty_args, 'boolean');\r
-        $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods);\r
-    }\r
-\r
-    /**\r
-     * Unregisters object\r
-     *\r
-     * @param string $object name of template object\r
-     */\r
-    public function unregister_object($object)\r
-    {\r
-        $this->unregisterObject($object);\r
-    }\r
-\r
-    /**\r
-     * Registers block function to be used in templates\r
-     *\r
-     * @param string $block      name of template block\r
-     * @param string $block_impl PHP function to register\r
-     * @param bool   $cacheable\r
-     * @param mixed  $cache_attrs\r
-     */\r
-    public function register_block($block, $block_impl, $cacheable=true, $cache_attrs=null)\r
-    {\r
-        $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs);\r
-    }\r
-\r
-    /**\r
-     * Unregisters block function\r
-     *\r
-     * @param string $block name of template function\r
-     */\r
-    public function unregister_block($block)\r
-    {\r
-        $this->unregisterPlugin('block', $block);\r
-    }\r
-\r
-    /**\r
-     * Registers compiler function\r
-     *\r
-     * @param string $function      name of template function\r
-     * @param string $function_impl name of PHP function to register\r
-     * @param bool   $cacheable\r
-     */\r
-    public function register_compiler_function($function, $function_impl, $cacheable=true)\r
-    {\r
-        $this->registerPlugin('compiler', $function, $function_impl, $cacheable);\r
-    }\r
-\r
-    /**\r
-     * Unregisters compiler function\r
-     *\r
-     * @param string $function name of template function\r
-     */\r
-    public function unregister_compiler_function($function)\r
-    {\r
-        $this->unregisterPlugin('compiler', $function);\r
-    }\r
-\r
-    /**\r
-     * Registers modifier to be used in templates\r
-     *\r
-     * @param string $modifier name of template modifier\r
-     * @param string $modifier_impl name of PHP function to register\r
-     */\r
-    public function register_modifier($modifier, $modifier_impl)\r
-    {\r
-        $this->registerPlugin('modifier', $modifier, $modifier_impl);\r
-    }\r
-\r
-    /**\r
-     * Unregisters modifier\r
-     *\r
-     * @param string $modifier name of template modifier\r
-     */\r
-    public function unregister_modifier($modifier)\r
-    {\r
-        $this->unregisterPlugin('modifier', $modifier);\r
-    }\r
-\r
-    /**\r
-     * Registers a resource to fetch a template\r
-     *\r
-     * @param string $type      name of resource\r
-     * @param array  $functions array of functions to handle resource\r
-     */\r
-    public function register_resource($type, $functions)\r
-    {\r
-        $this->registerResource($type, $functions);\r
-    }\r
-\r
-    /**\r
-     * Unregisters a resource\r
-     *\r
-     * @param string $type name of resource\r
-     */\r
-    public function unregister_resource($type)\r
-    {\r
-        $this->unregisterResource($type);\r
-    }\r
-\r
-    /**\r
-     * Registers a prefilter function to apply\r
-     * to a template before compiling\r
-     *\r
-     * @param callable $function\r
-     */\r
-    public function register_prefilter($function)\r
-    {\r
-        $this->registerFilter('pre', $function);\r
-    }\r
-\r
-    /**\r
-     * Unregisters a prefilter function\r
-     *\r
-     * @param callable $function\r
-     */\r
-    public function unregister_prefilter($function)\r
-    {\r
-        $this->unregisterFilter('pre', $function);\r
-    }\r
-\r
-    /**\r
-     * Registers a postfilter function to apply\r
-     * to a compiled template after compilation\r
-     *\r
-     * @param callable $function\r
-     */\r
-    public function register_postfilter($function)\r
-    {\r
-        $this->registerFilter('post', $function);\r
-    }\r
-\r
-    /**\r
-     * Unregisters a postfilter function\r
-     *\r
-     * @param callable $function\r
-     */\r
-    public function unregister_postfilter($function)\r
-    {\r
-        $this->unregisterFilter('post', $function);\r
-    }\r
-\r
-    /**\r
-     * Registers an output filter function to apply\r
-     * to a template output\r
-     *\r
-     * @param callable $function\r
-     */\r
-    public function register_outputfilter($function)\r
-    {\r
-        $this->registerFilter('output', $function);\r
-    }\r
-\r
-    /**\r
-     * Unregisters an outputfilter function\r
-     *\r
-     * @param callable $function\r
-     */\r
-    public function unregister_outputfilter($function)\r
-    {\r
-        $this->unregisterFilter('output', $function);\r
-    }\r
-\r
-    /**\r
-     * load a filter of specified type and name\r
-     *\r
-     * @param string $type filter type\r
-     * @param string $name filter name\r
-     */\r
-    public function load_filter($type, $name)\r
-    {\r
-        $this->loadFilter($type, $name);\r
-    }\r
-\r
-    /**\r
-     * clear cached content for the given template and cache id\r
-     *\r
-     * @param string $tpl_file   name of template file\r
-     * @param string $cache_id   name of cache_id\r
-     * @param string $compile_id name of compile_id\r
-     * @param string $exp_time   expiration time\r
-     * @return boolean\r
-     */\r
-    public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)\r
-    {\r
-        return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time);\r
-    }\r
-\r
-    /**\r
-     * clear the entire contents of cache (all templates)\r
-     *\r
-     * @param string $exp_time expire time\r
-     * @return boolean\r
-     */\r
-    public function clear_all_cache($exp_time = null)\r
-    {\r
-        return $this->clearCache(null, null, null, $exp_time);\r
-    }\r
-\r
-    /**\r
-     * test to see if valid cache exists for this template\r
-     *\r
-     * @param string $tpl_file name of template file\r
-     * @param string $cache_id\r
-     * @param string $compile_id\r
-     * @return boolean\r
-     */\r
-    public function is_cached($tpl_file, $cache_id = null, $compile_id = null)\r
-    {\r
-        return $this->isCached($tpl_file, $cache_id, $compile_id);\r
-    }\r
-\r
-    /**\r
-     * clear all the assigned template variables.\r
-     */\r
-    public function clear_all_assign()\r
-    {\r
-        $this->clearAllAssign();\r
-    }\r
-\r
-    /**\r
-     * clears compiled version of specified template resource,\r
-     * or all compiled template files if one is not specified.\r
-     * This function is for advanced use only, not normally needed.\r
-     *\r
-     * @param string $tpl_file\r
-     * @param string $compile_id\r
-     * @param string $exp_time\r
-     * @return boolean results of {@link smarty_core_rm_auto()}\r
-     */\r
-    public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null)\r
-    {\r
-        return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time);\r
-    }\r
-\r
-    /**\r
-     * Checks whether requested template exists.\r
-     *\r
-     * @param string $tpl_file\r
-     * @return boolean\r
-     */\r
-    public function template_exists($tpl_file)\r
-    {\r
-        return $this->templateExists($tpl_file);\r
-    }\r
-\r
-    /**\r
-     * Returns an array containing template variables\r
-     *\r
-     * @param string $name\r
-     * @return array\r
-     */\r
-    public function get_template_vars($name=null)\r
-    {\r
-        return $this->getTemplateVars($name);\r
-    }\r
-\r
-    /**\r
-     * Returns an array containing config variables\r
-     *\r
-     * @param string $name\r
-     * @return array\r
-     */\r
-    public function get_config_vars($name=null)\r
-    {\r
-        return $this->getConfigVars($name);\r
-    }\r
-\r
-    /**\r
-     * load configuration values\r
-     *\r
-     * @param string $file\r
-     * @param string $section\r
-     * @param string $scope\r
-     */\r
-    public function config_load($file, $section = null, $scope = 'global')\r
-    {\r
-        $this->ConfigLoad($file, $section, $scope);\r
-    }\r
-\r
-    /**\r
-     * return a reference to a registered object\r
-     *\r
-     * @param string $name\r
-     * @return object\r
-     */\r
-    public function get_registered_object($name)\r
-    {\r
-        return $this->getRegisteredObject($name);\r
-    }\r
-\r
-    /**\r
-     * clear configuration values\r
-     *\r
-     * @param string $var\r
-     */\r
-    public function clear_config($var = null)\r
-    {\r
-        $this->clearConfig($var);\r
-    }\r
-\r
-    /**\r
-     * trigger Smarty error\r
-     *\r
-     * @param string $error_msg\r
-     * @param integer $error_type\r
-     */\r
-    public function trigger_error($error_msg, $error_type = E_USER_WARNING)\r
-    {\r
-        trigger_error("Smarty error: $error_msg", $error_type);\r
-    }\r
-\r
-}\r
-\r
-/**\r
- * Smarty {php}{/php} block function\r
- *\r
- * @param array   $params   parameter list\r
- * @param string  $content  contents of the block\r
- * @param object  $template template object\r
- * @param boolean &$repeat  repeat flag\r
- * @return string content re-formatted\r
- */\r
-function smarty_php_tag($params, $content, $template, &$repeat)\r
-{\r
-    eval($content);\r
-    return '';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Project:     Smarty: the PHP compiling template engine
+ * File:        SmartyBC.class.php
+ * SVN:         $Id: $
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * For questions, help, comments, discussion, etc., please join the
+ * Smarty mailing list. Send a blank e-mail to
+ * smarty-discussion-subscribe@googlegroups.com
+ *
+ * @link      http://www.smarty.net/
+ * @copyright 2008 New Digital Group, Inc.
+ * @author    Monte Ohrt <monte at ohrt dot com>
+ * @author    Uwe Tews
+ * @author    Rodney Rehm
+ * @package   Smarty
+ */
+/**
+ * @ignore
+ */
+require_once(dirname(__FILE__) . '/Smarty.class.php');
+
+/**
+ * Smarty Backward Compatability Wrapper Class
+ *
+ * @package Smarty
+ */
+class SmartyBC extends Smarty
+{
+    /**
+     * Smarty 2 BC
+     *
+     * @var string
+     */
+    public $_version = self::SMARTY_VERSION;
+
+    /**
+     * Initialize new SmartyBC object
+     *
+     * @param array $options options to set during initialization, e.g. array( 'forceCompile' => false )
+     */
+    public function __construct(array $options = array())
+    {
+        parent::__construct($options);
+        // register {php} tag
+        $this->registerPlugin('block', 'php', 'smarty_php_tag');
+    }
+
+    /**
+     * wrapper for assign_by_ref
+     *
+     * @param string $tpl_var the template variable name
+     * @param mixed  &$value  the referenced value to assign
+     */
+    public function assign_by_ref($tpl_var, &$value)
+    {
+        $this->assignByRef($tpl_var, $value);
+    }
+
+    /**
+     * wrapper for append_by_ref
+     *
+     * @param string  $tpl_var the template variable name
+     * @param mixed   &$value  the referenced value to append
+     * @param boolean $merge   flag if array elements shall be merged
+     */
+    public function append_by_ref($tpl_var, &$value, $merge = false)
+    {
+        $this->appendByRef($tpl_var, $value, $merge);
+    }
+
+    /**
+     * clear the given assigned template variable.
+     *
+     * @param string $tpl_var the template variable to clear
+     */
+    public function clear_assign($tpl_var)
+    {
+        $this->clearAssign($tpl_var);
+    }
+
+    /**
+     * Registers custom function to be used in templates
+     *
+     * @param string $function      the name of the template function
+     * @param string $function_impl the name of the PHP function to register
+     * @param bool   $cacheable
+     * @param mixed  $cache_attrs
+     */
+    public function register_function($function, $function_impl, $cacheable = true, $cache_attrs = null)
+    {
+        $this->registerPlugin('function', $function, $function_impl, $cacheable, $cache_attrs);
+    }
+
+    /**
+     * Unregisters custom function
+     *
+     * @param string $function name of template function
+     */
+    public function unregister_function($function)
+    {
+        $this->unregisterPlugin('function', $function);
+    }
+
+    /**
+     * Registers object to be used in templates
+     *
+     * @param string  $object      name of template object
+     * @param object  $object_impl the referenced PHP object to register
+     * @param array   $allowed     list of allowed methods (empty = all)
+     * @param boolean $smarty_args smarty argument format, else traditional
+     * @param array   $block_methods list of methods that are block format
+     *
+     * @throws SmartyException
+     * @internal param array $block_functs list of methods that are block format
+     */
+    public function register_object($object, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
+    {
+        settype($allowed, 'array');
+        settype($smarty_args, 'boolean');
+        $this->registerObject($object, $object_impl, $allowed, $smarty_args, $block_methods);
+    }
+
+    /**
+     * Unregisters object
+     *
+     * @param string $object name of template object
+     */
+    public function unregister_object($object)
+    {
+        $this->unregisterObject($object);
+    }
+
+    /**
+     * Registers block function to be used in templates
+     *
+     * @param string $block      name of template block
+     * @param string $block_impl PHP function to register
+     * @param bool   $cacheable
+     * @param mixed  $cache_attrs
+     */
+    public function register_block($block, $block_impl, $cacheable = true, $cache_attrs = null)
+    {
+        $this->registerPlugin('block', $block, $block_impl, $cacheable, $cache_attrs);
+    }
+
+    /**
+     * Unregisters block function
+     *
+     * @param string $block name of template function
+     */
+    public function unregister_block($block)
+    {
+        $this->unregisterPlugin('block', $block);
+    }
+
+    /**
+     * Registers compiler function
+     *
+     * @param string $function      name of template function
+     * @param string $function_impl name of PHP function to register
+     * @param bool   $cacheable
+     */
+    public function register_compiler_function($function, $function_impl, $cacheable = true)
+    {
+        $this->registerPlugin('compiler', $function, $function_impl, $cacheable);
+    }
+
+    /**
+     * Unregisters compiler function
+     *
+     * @param string $function name of template function
+     */
+    public function unregister_compiler_function($function)
+    {
+        $this->unregisterPlugin('compiler', $function);
+    }
+
+    /**
+     * Registers modifier to be used in templates
+     *
+     * @param string $modifier      name of template modifier
+     * @param string $modifier_impl name of PHP function to register
+     */
+    public function register_modifier($modifier, $modifier_impl)
+    {
+        $this->registerPlugin('modifier', $modifier, $modifier_impl);
+    }
+
+    /**
+     * Unregisters modifier
+     *
+     * @param string $modifier name of template modifier
+     */
+    public function unregister_modifier($modifier)
+    {
+        $this->unregisterPlugin('modifier', $modifier);
+    }
+
+    /**
+     * Registers a resource to fetch a template
+     *
+     * @param string $type      name of resource
+     * @param array  $functions array of functions to handle resource
+     */
+    public function register_resource($type, $functions)
+    {
+        $this->registerResource($type, $functions);
+    }
+
+    /**
+     * Unregisters a resource
+     *
+     * @param string $type name of resource
+     */
+    public function unregister_resource($type)
+    {
+        $this->unregisterResource($type);
+    }
+
+    /**
+     * Registers a prefilter function to apply
+     * to a template before compiling
+     *
+     * @param callable $function
+     */
+    public function register_prefilter($function)
+    {
+        $this->registerFilter('pre', $function);
+    }
+
+    /**
+     * Unregisters a prefilter function
+     *
+     * @param callable $function
+     */
+    public function unregister_prefilter($function)
+    {
+        $this->unregisterFilter('pre', $function);
+    }
+
+    /**
+     * Registers a postfilter function to apply
+     * to a compiled template after compilation
+     *
+     * @param callable $function
+     */
+    public function register_postfilter($function)
+    {
+        $this->registerFilter('post', $function);
+    }
+
+    /**
+     * Unregisters a postfilter function
+     *
+     * @param callable $function
+     */
+    public function unregister_postfilter($function)
+    {
+        $this->unregisterFilter('post', $function);
+    }
+
+    /**
+     * Registers an output filter function to apply
+     * to a template output
+     *
+     * @param callable $function
+     */
+    public function register_outputfilter($function)
+    {
+        $this->registerFilter('output', $function);
+    }
+
+    /**
+     * Unregisters an outputfilter function
+     *
+     * @param callable $function
+     */
+    public function unregister_outputfilter($function)
+    {
+        $this->unregisterFilter('output', $function);
+    }
+
+    /**
+     * load a filter of specified type and name
+     *
+     * @param string $type filter type
+     * @param string $name filter name
+     */
+    public function load_filter($type, $name)
+    {
+        $this->loadFilter($type, $name);
+    }
+
+    /**
+     * clear cached content for the given template and cache id
+     *
+     * @param  string $tpl_file   name of template file
+     * @param  string $cache_id   name of cache_id
+     * @param  string $compile_id name of compile_id
+     * @param  string $exp_time   expiration time
+     *
+     * @return boolean
+     */
+    public function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)
+    {
+        return $this->clearCache($tpl_file, $cache_id, $compile_id, $exp_time);
+    }
+
+    /**
+     * clear the entire contents of cache (all templates)
+     *
+     * @param  string $exp_time expire time
+     *
+     * @return boolean
+     */
+    public function clear_all_cache($exp_time = null)
+    {
+        return $this->clearCache(null, null, null, $exp_time);
+    }
+
+    /**
+     * test to see if valid cache exists for this template
+     *
+     * @param  string $tpl_file name of template file
+     * @param  string $cache_id
+     * @param  string $compile_id
+     *
+     * @return boolean
+     */
+    public function is_cached($tpl_file, $cache_id = null, $compile_id = null)
+    {
+        return $this->isCached($tpl_file, $cache_id, $compile_id);
+    }
+
+    /**
+     * clear all the assigned template variables.
+     */
+    public function clear_all_assign()
+    {
+        $this->clearAllAssign();
+    }
+
+    /**
+     * clears compiled version of specified template resource,
+     * or all compiled template files if one is not specified.
+     * This function is for advanced use only, not normally needed.
+     *
+     * @param  string $tpl_file
+     * @param  string $compile_id
+     * @param  string $exp_time
+     *
+     * @return boolean results of {@link smarty_core_rm_auto()}
+     */
+    public function clear_compiled_tpl($tpl_file = null, $compile_id = null, $exp_time = null)
+    {
+        return $this->clearCompiledTemplate($tpl_file, $compile_id, $exp_time);
+    }
+
+    /**
+     * Checks whether requested template exists.
+     *
+     * @param  string $tpl_file
+     *
+     * @return boolean
+     */
+    public function template_exists($tpl_file)
+    {
+        return $this->templateExists($tpl_file);
+    }
+
+    /**
+     * Returns an array containing template variables
+     *
+     * @param  string $name
+     *
+     * @return array
+     */
+    public function get_template_vars($name = null)
+    {
+        return $this->getTemplateVars($name);
+    }
+
+    /**
+     * Returns an array containing config variables
+     *
+     * @param  string $name
+     *
+     * @return array
+     */
+    public function get_config_vars($name = null)
+    {
+        return $this->getConfigVars($name);
+    }
+
+    /**
+     * load configuration values
+     *
+     * @param string $file
+     * @param string $section
+     * @param string $scope
+     */
+    public function config_load($file, $section = null, $scope = 'global')
+    {
+        $this->ConfigLoad($file, $section, $scope);
+    }
+
+    /**
+     * return a reference to a registered object
+     *
+     * @param  string $name
+     *
+     * @return object
+     */
+    public function get_registered_object($name)
+    {
+        return $this->getRegisteredObject($name);
+    }
+
+    /**
+     * clear configuration values
+     *
+     * @param string $var
+     */
+    public function clear_config($var = null)
+    {
+        $this->clearConfig($var);
+    }
+
+    /**
+     * trigger Smarty error
+     *
+     * @param string  $error_msg
+     * @param integer $error_type
+     */
+    public function trigger_error($error_msg, $error_type = E_USER_WARNING)
+    {
+        trigger_error("Smarty error: $error_msg", $error_type);
+    }
+}
+
+/**
+ * Smarty {php}{/php} block function
+ *
+ * @param array   $params   parameter list
+ * @param string  $content  contents of the block
+ * @param object  $template template object
+ * @param boolean &$repeat  repeat flag
+ *
+ * @return string content re-formatted
+ */
+function smarty_php_tag($params, $content, $template, &$repeat)
+{
+    eval($content);
+
+    return '';
+}
index 12eef0ffdbf046fb9daf2b6189ed35f2148b654f..61b8876a49f19dbc37a75c2b83b7553b20753488 100644 (file)
 {capture name='_smarty_debug' assign=debug_output}
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
-    <title>Smarty Debug Console</title>
-<style type="text/css">
-{literal}
-body, h1, h2, td, th, p {
-    font-family: sans-serif;
-    font-weight: normal;
-    font-size: 0.9em;
-    margin: 1px;
-    padding: 0;
-}
-
-h1 {
-    margin: 0;
-    text-align: left;
-    padding: 2px;
-    background-color: #f0c040;
-    color:  black;
-    font-weight: bold;
-    font-size: 1.2em;
- }
-
-h2 {
-    background-color: #9B410E;
-    color: white;
-    text-align: left;
-    font-weight: bold;
-    padding: 2px;
-    border-top: 1px solid black;
-}
-
-body {
-    background: black; 
-}
-
-p, table, div {
-    background: #f0ead8;
-} 
-
-p {
-    margin: 0;
-    font-style: italic;
-    text-align: center;
-}
-
-table {
-    width: 100%;
-}
-
-th, td {
-    font-family: monospace;
-    vertical-align: top;
-    text-align: left;
-    width: 50%;
-}
-
-td {
-    color: green;
-}
-
-.odd {
-    background-color: #eeeeee;
-}
-
-.even {
-    background-color: #fafafa;
-}
-
-.exectime {
-    font-size: 0.8em;
-    font-style: italic;
-}
-
-#table_assigned_vars th {
-    color: blue;
-}
-
-#table_config_vars th {
-    color: maroon;
-}
-{/literal}
-</style>
-</head>
-<body>
-
-<h1>Smarty Debug Console  -  {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
-
-{if !empty($template_data)}
-<h2>included templates &amp; config files (load time in seconds)</h2>
-
-<div>
-{foreach $template_data as $template}
-  <font color=brown>{$template.name}</font>
-  <span class="exectime">
-   (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"})
+    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+    <head>
+        <title>Smarty Debug Console</title>
+        <style type="text/css">
+            {literal}
+            body, h1, h2, td, th, p {
+                font-family: sans-serif;
+                font-weight: normal;
+                font-size: 0.9em;
+                margin: 1px;
+                padding: 0;
+            }
+
+            h1 {
+                margin: 0;
+                text-align: left;
+                padding: 2px;
+                background-color: #f0c040;
+                color: black;
+                font-weight: bold;
+                font-size: 1.2em;
+            }
+
+            h2 {
+                background-color: #9B410E;
+                color: white;
+                text-align: left;
+                font-weight: bold;
+                padding: 2px;
+                border-top: 1px solid black;
+            }
+
+            body {
+                background: black;
+            }
+
+            p, table, div {
+                background: #f0ead8;
+            }
+
+            p {
+                margin: 0;
+                font-style: italic;
+                text-align: center;
+            }
+
+            table {
+                width: 100%;
+            }
+
+            th, td {
+                font-family: monospace;
+                vertical-align: top;
+                text-align: left;
+                width: 50%;
+            }
+
+            td {
+                color: green;
+            }
+
+            .odd {
+                background-color: #eeeeee;
+            }
+
+            .even {
+                background-color: #fafafa;
+            }
+
+            .exectime {
+                font-size: 0.8em;
+                font-style: italic;
+            }
+
+            #table_assigned_vars th {
+                color: blue;
+            }
+
+            #table_config_vars th {
+                color: maroon;
+            }
+
+            {/literal}
+        </style>
+    </head>
+    <body>
+
+    <h1>Smarty Debug Console
+        -  {if isset($template_name)}{$template_name|debug_print_var nofilter}{else}Total Time {$execution_time|string_format:"%.5f"}{/if}</h1>
+
+    {if !empty($template_data)}
+        <h2>included templates &amp; config files (load time in seconds)</h2>
+        <div>
+            {foreach $template_data as $template}
+                <font color=brown>{$template.name}</font>
+                <span class="exectime">
+   (compile {$template['compile_time']|string_format:"%.5f"}) (render {$template['render_time']|string_format:"%.5f"}) (cache {$template['cache_time']|string_format:"%.5f"}
+                    )
   </span>
-  <br>
-{/foreach}
-</div>
-{/if}
-
-<h2>assigned template variables</h2>
-
-<table id="table_assigned_vars">
-    {foreach $assigned_vars as $vars}
-       <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">   
-       <th>${$vars@key|escape:'html'}</th>
-       <td>{$vars|debug_print_var nofilter}</td></tr>
-    {/foreach}
-</table>
-
-<h2>assigned config file variables (outer template scope)</h2>
-
-<table id="table_config_vars">
-    {foreach $config_vars as $vars}
-       <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">   
-       <th>{$vars@key|escape:'html'}</th>
-       <td>{$vars|debug_print_var nofilter}</td></tr>
-    {/foreach}
-
-</table>
-</body>
-</html>
+                <br>
+            {/foreach}
+        </div>
+    {/if}
+
+    <h2>assigned template variables</h2>
+
+    <table id="table_assigned_vars">
+        {foreach $assigned_vars as $vars}
+            <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
+                <th>${$vars@key|escape:'html'}</th>
+                <td>{$vars|debug_print_var nofilter}</td>
+            </tr>
+        {/foreach}
+    </table>
+
+    <h2>assigned config file variables (outer template scope)</h2>
+
+    <table id="table_config_vars">
+        {foreach $config_vars as $vars}
+            <tr class="{if $vars@iteration % 2 eq 0}odd{else}even{/if}">
+                <th>{$vars@key|escape:'html'}</th>
+                <td>{$vars|debug_print_var nofilter}</td>
+            </tr>
+        {/foreach}
+
+    </table>
+    </body>
+    </html>
 {/capture}
 <script type="text/javascript">
-{$id = $template_name|default:''|md5}
-    _smarty_console = window.open("","console{$id}","width=680,height=600,resizable,scrollbars=yes");
+    {$id = $template_name|default:''|md5}
+    _smarty_console = window.open("", "console{$id}", "width=680,height=600,resizable,scrollbars=yes");
     _smarty_console.document.write("{$debug_output|escape:'javascript' nofilter}");
     _smarty_console.document.close();
 </script>
index b22b104a55c8feb2355e7d8891a23a2ea4bfa852..abf544939f21ea42c7c9710434bdcbe7582ff1e5 100644 (file)
@@ -2,13 +2,12 @@
 /**
  * Smarty plugin to format text blocks
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsBlock
  */
 
 /**
  * Smarty {textformat}{/textformat} block plugin
- *
  * Type:     block function<br>
  * Name:     textformat<br>
  * Purpose:  format text a certain way with preset styles
  * - wrap_boundary - boolean (true)
  * </pre>
  *
- * @link http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
- *       (Smarty online manual)
+ * @link   http://www.smarty.net/manual/en/language.function.textformat.php {textformat}
+ *         (Smarty online manual)
+ *
  * @param array                    $params   parameters
  * @param string                   $content  contents of the block
  * @param Smarty_Internal_Template $template template object
  * @param boolean                  &$repeat  repeat flag
+ *
  * @return string content re-formatted
  * @author Monte Ohrt <monte at ohrt dot com>
  */
@@ -53,17 +54,17 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
             case 'indent_char':
             case 'wrap_char':
             case 'assign':
-                $$_key = (string)$_val;
+                $$_key = (string) $_val;
                 break;
 
             case 'indent':
             case 'indent_first':
             case 'wrap':
-                $$_key = (int)$_val;
+                $$_key = (int) $_val;
                 break;
 
             case 'wrap_cut':
-                $$_key = (bool)$_val;
+                $$_key = (bool) $_val;
                 break;
 
             default:
@@ -76,8 +77,6 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
     }
     // split into paragraphs
     $_paragraphs = preg_split('![\r\n]{2}!', $content);
-    $_output = '';
-
 
     foreach ($_paragraphs as &$_paragraph) {
         if (!$_paragraph) {
@@ -102,12 +101,10 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
         }
     }
     $_output = implode($wrap_char . $wrap_char, $_paragraphs);
-    
+
     if ($assign) {
         $template->assign($assign, $_output);
     } else {
         return $_output;
     }
 }
-
-?>
\ No newline at end of file
index 3906badf0f680fee6974a1fdb1a8ff0bc139a476..4da85a14e55aefc8f16cb6a3496b8caa5320a986 100644 (file)
@@ -1,22 +1,24 @@
 <?php
 /**
  * Smarty plugin
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {counter} function plugin
- *
  * Type:     function<br>
  * Name:     counter<br>
  * Purpose:  print out a counter value
  *
  * @author Monte Ohrt <monte at ohrt dot com>
- * @link http://www.smarty.net/manual/en/language.function.counter.php {counter}
- *       (Smarty online manual)
+ * @link   http://www.smarty.net/manual/en/language.function.counter.php {counter}
+ *         (Smarty online manual)
+ *
  * @param array                    $params   parameters
  * @param Smarty_Internal_Template $template template object
+ *
  * @return string|null
  */
 function smarty_function_counter($params, $template)
@@ -26,16 +28,16 @@ function smarty_function_counter($params, $template)
     $name = (isset($params['name'])) ? $params['name'] : 'default';
     if (!isset($counters[$name])) {
         $counters[$name] = array(
-            'start'=>1,
-            'skip'=>1,
-            'direction'=>'up',
-            'count'=>1
-            );
+            'start'     => 1,
+            'skip'      => 1,
+            'direction' => 'up',
+            'count'     => 1
+        );
     }
     $counter =& $counters[$name];
 
     if (isset($params['start'])) {
-        $counter['start'] = $counter['count'] = (int)$params['start'];
+        $counter['start'] = $counter['count'] = (int) $params['start'];
     }
 
     if (!empty($params['assign'])) {
@@ -45,9 +47,9 @@ function smarty_function_counter($params, $template)
     if (isset($counter['assign'])) {
         $template->assign($counter['assign'], $counter['count']);
     }
-    
+
     if (isset($params['print'])) {
-        $print = (bool)$params['print'];
+        $print = (bool) $params['print'];
     } else {
         $print = empty($counter['assign']);
     }
@@ -61,18 +63,16 @@ function smarty_function_counter($params, $template)
     if (isset($params['skip'])) {
         $counter['skip'] = $params['skip'];
     }
-    
+
     if (isset($params['direction'])) {
         $counter['direction'] = $params['direction'];
     }
 
-    if ($counter['direction'] == "down")
+    if ($counter['direction'] == "down") {
         $counter['count'] -= $counter['skip'];
-    else
+    } else {
         $counter['count'] += $counter['skip'];
-    
+    }
+
     return $retval;
-    
 }
-
-?>
\ No newline at end of file
index 1778ffb538c3d7265fd18cb564cc317549996f33..8dc5cd9d510a96415468c79cc2c2f9cba960f30d 100644 (file)
@@ -2,13 +2,12 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {cycle} function plugin
- *
  * Type:     function<br>
  * Name:     cycle<br>
  * Date:     May 3, 2002<br>
  * {cycle name=row}
  * </pre>
  *
- * @link http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
- *       (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credit to Mark Priatel <mpriatel@rogers.com>
- * @author credit to Gerard <gerard@interfold.com>
- * @author credit to Jason Sweat <jsweat_php@yahoo.com>
+ * @link     http://www.smarty.net/manual/en/language.function.cycle.php {cycle}
+ *           (Smarty online manual)
+ * @author   Monte Ohrt <monte at ohrt dot com>
+ * @author   credit to Mark Priatel <mpriatel@rogers.com>
+ * @author   credit to Gerard <gerard@interfold.com>
+ * @author   credit to Jason Sweat <jsweat_php@yahoo.com>
  * @version  1.3
+ *
  * @param array                    $params   parameters
  * @param Smarty_Internal_Template $template template object
+ *
  * @return string|null
  */
 
@@ -48,18 +49,20 @@ function smarty_function_cycle($params, $template)
     static $cycle_vars;
 
     $name = (empty($params['name'])) ? 'default' : $params['name'];
-    $print = (isset($params['print'])) ? (bool)$params['print'] : true;
-    $advance = (isset($params['advance'])) ? (bool)$params['advance'] : true;
-    $reset = (isset($params['reset'])) ? (bool)$params['reset'] : false;
+    $print = (isset($params['print'])) ? (bool) $params['print'] : true;
+    $advance = (isset($params['advance'])) ? (bool) $params['advance'] : true;
+    $reset = (isset($params['reset'])) ? (bool) $params['reset'] : false;
 
     if (!isset($params['values'])) {
-        if(!isset($cycle_vars[$name]['values'])) {
+        if (!isset($cycle_vars[$name]['values'])) {
             trigger_error("cycle: missing 'values' parameter");
+
             return;
         }
     } else {
-        if(isset($cycle_vars[$name]['values'])
-            && $cycle_vars[$name]['values'] != $params['values'] ) {
+        if (isset($cycle_vars[$name]['values'])
+            && $cycle_vars[$name]['values'] != $params['values']
+        ) {
             $cycle_vars[$name]['index'] = 0;
         }
         $cycle_vars[$name]['values'] = $params['values'];
@@ -71,13 +74,13 @@ function smarty_function_cycle($params, $template)
         $cycle_vars[$name]['delimiter'] = ',';
     }
 
-    if(is_array($cycle_vars[$name]['values'])) {
+    if (is_array($cycle_vars[$name]['values'])) {
         $cycle_array = $cycle_vars[$name]['values'];
     } else {
-        $cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']);
+        $cycle_array = explode($cycle_vars[$name]['delimiter'], $cycle_vars[$name]['values']);
     }
 
-    if(!isset($cycle_vars[$name]['index']) || $reset ) {
+    if (!isset($cycle_vars[$name]['index']) || $reset) {
         $cycle_vars[$name]['index'] = 0;
     }
 
@@ -86,21 +89,19 @@ function smarty_function_cycle($params, $template)
         $template->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
     }
 
-    if($print) {
+    if ($print) {
         $retval = $cycle_array[$cycle_vars[$name]['index']];
     } else {
         $retval = null;
     }
 
-    if($advance) {
-        if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) {
+    if ($advance) {
+        if ($cycle_vars[$name]['index'] >= count($cycle_array) - 1) {
             $cycle_vars[$name]['index'] = 0;
         } else {
-            $cycle_vars[$name]['index']++;
+            $cycle_vars[$name]['index'] ++;
         }
     }
 
     return $retval;
 }
-
-?>
\ No newline at end of file
index eca1182d503ba8da7ef5599922bb869b8b068c42..3506d4a8d6eda2c86d12f9e50cf6355120540793 100644 (file)
@@ -2,50 +2,53 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {fetch} plugin
- *
  * Type:     function<br>
  * Name:     fetch<br>
  * Purpose:  fetch file, web or ftp data and display results
  *
- * @link http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
- *       (Smarty online manual)
+ * @link   http://www.smarty.net/manual/en/language.function.fetch.php {fetch}
+ *         (Smarty online manual)
  * @author Monte Ohrt <monte at ohrt dot com>
+ *
  * @param array                    $params   parameters
  * @param Smarty_Internal_Template $template template object
+ *
+ * @throws SmartyException
  * @return string|null if the assign parameter is passed, Smarty assigns the result to a template variable
  */
 function smarty_function_fetch($params, $template)
 {
     if (empty($params['file'])) {
-        trigger_error("[plugin] fetch parameter 'file' cannot be empty",E_USER_NOTICE);
+        trigger_error("[plugin] fetch parameter 'file' cannot be empty", E_USER_NOTICE);
+
         return;
     }
-    
+
     // strip file protocol
     if (stripos($params['file'], 'file://') === 0) {
         $params['file'] = substr($params['file'], 7);
     }
-    
+
     $protocol = strpos($params['file'], '://');
     if ($protocol !== false) {
         $protocol = strtolower(substr($params['file'], 0, $protocol));
     }
-    
+
     if (isset($template->smarty->security_policy)) {
         if ($protocol) {
             // remote resource (or php stream, â€¦)
-            if(!$template->smarty->security_policy->isTrustedUri($params['file'])) {
+            if (!$template->smarty->security_policy->isTrustedUri($params['file'])) {
                 return;
             }
         } else {
             // local file
-            if(!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
+            if (!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
                 return;
             }
         }
@@ -54,53 +57,54 @@ function smarty_function_fetch($params, $template)
     $content = '';
     if ($protocol == 'http') {
         // http fetch
-        if($uri_parts = parse_url($params['file'])) {
+        if ($uri_parts = parse_url($params['file'])) {
             // set defaults
             $host = $server_name = $uri_parts['host'];
             $timeout = 30;
             $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
-            $agent = "Smarty Template Engine ". Smarty::SMARTY_VERSION;
+            $agent = "Smarty Template Engine " . Smarty::SMARTY_VERSION;
             $referer = "";
             $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
             $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
             $_is_proxy = false;
-            if(empty($uri_parts['port'])) {
+            if (empty($uri_parts['port'])) {
                 $port = 80;
             } else {
                 $port = $uri_parts['port'];
             }
-            if(!empty($uri_parts['user'])) {
+            if (!empty($uri_parts['user'])) {
                 $user = $uri_parts['user'];
             }
-            if(!empty($uri_parts['pass'])) {
+            if (!empty($uri_parts['pass'])) {
                 $pass = $uri_parts['pass'];
             }
             // loop through parameters, setup headers
-            foreach($params as $param_key => $param_value) {
-                switch($param_key) {
+            foreach ($params as $param_key => $param_value) {
+                switch ($param_key) {
                     case "file":
                     case "assign":
                     case "assign_headers":
                         break;
                     case "user":
-                        if(!empty($param_value)) {
+                        if (!empty($param_value)) {
                             $user = $param_value;
                         }
                         break;
                     case "pass":
-                        if(!empty($param_value)) {
+                        if (!empty($param_value)) {
                             $pass = $param_value;
                         }
                         break;
                     case "accept":
-                        if(!empty($param_value)) {
+                        if (!empty($param_value)) {
                             $accept = $param_value;
                         }
                         break;
                     case "header":
-                        if(!empty($param_value)) {
-                            if(!preg_match('![\w\d-]+: .+!',$param_value)) {
-                                trigger_error("[plugin] invalid header format '".$param_value."'",E_USER_NOTICE);
+                        if (!empty($param_value)) {
+                            if (!preg_match('![\w\d-]+: .+!', $param_value)) {
+                                trigger_error("[plugin] invalid header format '" . $param_value . "'", E_USER_NOTICE);
+
                                 return;
                             } else {
                                 $extra_headers[] = $param_value;
@@ -108,99 +112,104 @@ function smarty_function_fetch($params, $template)
                         }
                         break;
                     case "proxy_host":
-                        if(!empty($param_value)) {
+                        if (!empty($param_value)) {
                             $proxy_host = $param_value;
                         }
                         break;
                     case "proxy_port":
-                        if(!preg_match('!\D!', $param_value)) {
+                        if (!preg_match('!\D!', $param_value)) {
                             $proxy_port = (int) $param_value;
                         } else {
-                            trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE);
+                            trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
+
                             return;
                         }
                         break;
                     case "agent":
-                        if(!empty($param_value)) {
+                        if (!empty($param_value)) {
                             $agent = $param_value;
                         }
                         break;
                     case "referer":
-                        if(!empty($param_value)) {
+                        if (!empty($param_value)) {
                             $referer = $param_value;
                         }
                         break;
                     case "timeout":
-                        if(!preg_match('!\D!', $param_value)) {
+                        if (!preg_match('!\D!', $param_value)) {
                             $timeout = (int) $param_value;
                         } else {
-                            trigger_error("[plugin] invalid value for attribute '".$param_key."'",E_USER_NOTICE);
+                            trigger_error("[plugin] invalid value for attribute '" . $param_key . "'", E_USER_NOTICE);
+
                             return;
                         }
                         break;
                     default:
-                        trigger_error("[plugin] unrecognized attribute '".$param_key."'",E_USER_NOTICE);
+                        trigger_error("[plugin] unrecognized attribute '" . $param_key . "'", E_USER_NOTICE);
+
                         return;
                 }
             }
-            if(!empty($proxy_host) && !empty($proxy_port)) {
+            if (!empty($proxy_host) && !empty($proxy_port)) {
                 $_is_proxy = true;
-                $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout);
+                $fp = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);
             } else {
-                $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout);
+                $fp = fsockopen($server_name, $port, $errno, $errstr, $timeout);
             }
 
-            if(!$fp) {
-                trigger_error("[plugin] unable to fetch: $errstr ($errno)",E_USER_NOTICE);
+            if (!$fp) {
+                trigger_error("[plugin] unable to fetch: $errstr ($errno)", E_USER_NOTICE);
+
                 return;
             } else {
-                if($_is_proxy) {
+                if ($_is_proxy) {
                     fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");
                 } else {
                     fputs($fp, "GET $uri HTTP/1.0\r\n");
                 }
-                if(!empty($host)) {
+                if (!empty($host)) {
                     fputs($fp, "Host: $host\r\n");
                 }
-                if(!empty($accept)) {
+                if (!empty($accept)) {
                     fputs($fp, "Accept: $accept\r\n");
                 }
-                if(!empty($agent)) {
+                if (!empty($agent)) {
                     fputs($fp, "User-Agent: $agent\r\n");
                 }
-                if(!empty($referer)) {
+                if (!empty($referer)) {
                     fputs($fp, "Referer: $referer\r\n");
                 }
-                if(isset($extra_headers) && is_array($extra_headers)) {
-                    foreach($extra_headers as $curr_header) {
-                        fputs($fp, $curr_header."\r\n");
+                if (isset($extra_headers) && is_array($extra_headers)) {
+                    foreach ($extra_headers as $curr_header) {
+                        fputs($fp, $curr_header . "\r\n");
                     }
                 }
-                if(!empty($user) && !empty($pass)) {
-                    fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
+                if (!empty($user) && !empty($pass)) {
+                    fputs($fp, "Authorization: BASIC " . base64_encode("$user:$pass") . "\r\n");
                 }
 
                 fputs($fp, "\r\n");
-                while(!feof($fp)) {
-                    $content .= fgets($fp,4096);
+                while (!feof($fp)) {
+                    $content .= fgets($fp, 4096);
                 }
                 fclose($fp);
-                $csplit = preg_split("!\r\n\r\n!",$content,2);
+                $csplit = preg_split("!\r\n\r\n!", $content, 2);
 
                 $content = $csplit[1];
 
-                if(!empty($params['assign_headers'])) {
-                    $template->assign($params['assign_headers'],preg_split("!\r\n!",$csplit[0]));
+                if (!empty($params['assign_headers'])) {
+                    $template->assign($params['assign_headers'], preg_split("!\r\n!", $csplit[0]));
                 }
             }
         } else {
-            trigger_error("[plugin fetch] unable to parse URL, check syntax",E_USER_NOTICE);
+            trigger_error("[plugin fetch] unable to parse URL, check syntax", E_USER_NOTICE);
+
             return;
         }
     } else {
         $content = @file_get_contents($params['file']);
         if ($content === false) {
-            throw new SmartyException("{fetch} cannot read resource '" . $params['file'] ."'");
+            throw new SmartyException("{fetch} cannot read resource '" . $params['file'] . "'");
         }
     }
 
@@ -210,5 +219,3 @@ function smarty_function_fetch($params, $template)
         return $content;
     }
 }
-
-?>
\ No newline at end of file
index fb9584bbd42260802936efc739f46b9d228e4b92..d7868036864aa2c92aa5da9f38e7823bfd7a5e9a 100644 (file)
@@ -2,13 +2,12 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {html_checkboxes} function plugin
- *
  * File:       function.html_checkboxes.php<br>
  * Type:       function<br>
  * Name:       html_checkboxes<br>
  * - escape     (optional) - escape the content (not value), defaults to true
  * </pre>
  *
- * @link http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
- *      (Smarty online manual)
+ * @link       http://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
+ *             (Smarty online manual)
  * @author     Christopher Kvarme <christopher.kvarme@flashjab.com>
- * @author credits to Monte Ohrt <monte at ohrt dot com>
+ * @author     credits to Monte Ohrt <monte at ohrt dot com>
  * @version    1.0
- * @param array $params parameters
+ *
+ * @param array  $params   parameters
  * @param object $template template object
+ *
  * @return string
- * @uses smarty_function_escape_special_chars()
+ * @uses       smarty_function_escape_special_chars()
  */
 function smarty_function_html_checkboxes($params, $template)
 {
@@ -58,8 +59,8 @@ function smarty_function_html_checkboxes($params, $template)
 
     $extra = '';
 
-    foreach($params as $_key => $_val) {
-        switch($_key) {
+    foreach ($params as $_key => $_val) {
+        switch ($_key) {
             case 'name':
             case 'separator':
                 $$_key = (string) $_val;
@@ -89,7 +90,7 @@ function smarty_function_html_checkboxes($params, $template)
                             if (method_exists($_sel, "__toString")) {
                                 $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
                             } else {
-                                trigger_error("html_checkboxes: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE);
+                                trigger_error("html_checkboxes: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
                                 continue;
                             }
                         } else {
@@ -101,7 +102,7 @@ function smarty_function_html_checkboxes($params, $template)
                     if (method_exists($_val, "__toString")) {
                         $selected = smarty_function_escape_special_chars((string) $_val->__toString());
                     } else {
-                        trigger_error("html_checkboxes: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+                        trigger_error("html_checkboxes: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
                     }
                 } else {
                     $selected = smarty_function_escape_special_chars((string) $_val);
@@ -116,9 +117,27 @@ function smarty_function_html_checkboxes($params, $template)
             case 'assign':
                 break;
 
+            case 'strict':
+                break;
+
+            case 'disabled':
+            case 'readonly':
+                if (!empty($params['strict'])) {
+                    if (!is_scalar($_val)) {
+                        trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE);
+                    }
+
+                    if ($_val === true || $_val === $_key) {
+                        $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+                    }
+
+                    break;
+                }
+            // omit break; to fall through!
+
             default:
-                if(!is_array($_val)) {
-                    $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
+                if (!is_array($_val)) {
+                    $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
                 } else {
                     trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
                 }
@@ -126,76 +145,79 @@ function smarty_function_html_checkboxes($params, $template)
         }
     }
 
-    if (!isset($options) && !isset($values))
-        return ''; /* raise error here? */
+    if (!isset($options) && !isset($values)) {
+        return '';
+    } /* raise error here? */
 
     $_html_result = array();
 
     if (isset($options)) {
-        foreach ($options as $_key=>$_val) {
+        foreach ($options as $_key => $_val) {
             $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
         }
     } else {
-        foreach ($values as $_i=>$_key) {
+        foreach ($values as $_i => $_key) {
             $_val = isset($output[$_i]) ? $output[$_i] : '';
             $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
         }
     }
 
-    if(!empty($params['assign'])) {
+    if (!empty($params['assign'])) {
         $template->assign($params['assign'], $_html_result);
     } else {
         return implode("\n", $_html_result);
     }
-
 }
 
-function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape=true) {
+function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape = true)
+{
     $_output = '';
-    
+
     if (is_object($value)) {
         if (method_exists($value, "__toString")) {
             $value = (string) $value->__toString();
         } else {
-            trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+            trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
             return '';
         }
     } else {
         $value = (string) $value;
     }
-    
+
     if (is_object($output)) {
         if (method_exists($output, "__toString")) {
             $output = (string) $output->__toString();
         } else {
-            trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE);
+            trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
+
             return '';
         }
     } else {
         $output = (string) $output;
     }
-    
+
     if ($labels) {
         if ($label_ids) {
             $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
             $_output .= '<label for="' . $_id . '">';
         } else {
             $_output .= '<label>';
-        } 
+        }
     }
-    
+
     $name = smarty_function_escape_special_chars($name);
     $value = smarty_function_escape_special_chars($value);
     if ($escape) {
         $output = smarty_function_escape_special_chars($output);
     }
-    
+
     $_output .= '<input type="checkbox" name="' . $name . '[]" value="' . $value . '"';
-    
+
     if ($labels && $label_ids) {
         $_output .= ' id="' . $_id . '"';
     }
-    
+
     if (is_array($selected)) {
         if (isset($selected[$value])) {
             $_output .= ' checked="checked"';
@@ -203,14 +225,13 @@ function smarty_function_html_checkboxes_output($name, $value, $output, $selecte
     } elseif ($value === $selected) {
         $_output .= ' checked="checked"';
     }
-    
+
     $_output .= $extra . ' />' . $output;
     if ($labels) {
         $_output .= '</label>';
     }
-    
-    $_output .=  $separator;
+
+    $_output .= $separator;
+
     return $_output;
 }
-
-?>
\ No newline at end of file
index 6521966bb2853dae9800d87d0f6137794be79528..5037e8bd1475c9fb6384188cdba4987c00381462 100644 (file)
@@ -1,14 +1,13 @@
 <?php
 /**
  * Smarty plugin
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {html_image} function plugin
- * 
  * Type:     function<br>
  * Name:     html_image<br>
  * Date:     Feb 24, 2003<br>
  * - basedir     - (optional) - base directory for absolute paths, default is environment variable DOCUMENT_ROOT
  * - path_prefix - prefix for path output (optional, default empty)
  * </pre>
- * 
- * @link http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
- *      (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com> 
- * @author credits to Duda <duda@big.hu> 
+ *
+ * @link    http://www.smarty.net/manual/en/language.function.html.image.php {html_image}
+ *          (Smarty online manual)
+ * @author  Monte Ohrt <monte at ohrt dot com>
+ * @author  credits to Duda <duda@big.hu>
  * @version 1.0
+ *
  * @param array                    $params   parameters
  * @param Smarty_Internal_Template $template template object
- * @return string 
- * @uses smarty_function_escape_special_chars()
+ *
+ * @throws SmartyException
+ * @return string
+ * @uses    smarty_function_escape_special_chars()
  */
 function smarty_function_html_image($params, $template)
 {
     require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
+
     $alt = '';
     $file = '';
     $height = '';
@@ -47,7 +49,7 @@ function smarty_function_html_image($params, $template)
     $suffix = '';
     $path_prefix = '';
     $basedir = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '';
-    foreach($params as $_key => $_val) {
+    foreach ($params as $_key => $_val) {
         switch ($_key) {
             case 'file':
             case 'height':
@@ -63,7 +65,7 @@ function smarty_function_html_image($params, $template)
                     $$_key = smarty_function_escape_special_chars($_val);
                 } else {
                     throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
-                } 
+                }
                 break;
 
             case 'link':
@@ -77,41 +79,42 @@ function smarty_function_html_image($params, $template)
                     $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
                 } else {
                     throw new SmartyException ("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
-                } 
+                }
                 break;
-        } 
-    } 
+        }
+    }
 
     if (empty($file)) {
         trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE);
+
         return;
-    } 
+    }
 
     if ($file[0] == '/') {
         $_image_path = $basedir . $file;
     } else {
         $_image_path = $file;
     }
-    
+
     // strip file protocol
     if (stripos($params['file'], 'file://') === 0) {
         $params['file'] = substr($params['file'], 7);
     }
-    
+
     $protocol = strpos($params['file'], '://');
     if ($protocol !== false) {
         $protocol = strtolower(substr($params['file'], 0, $protocol));
     }
-    
+
     if (isset($template->smarty->security_policy)) {
         if ($protocol) {
             // remote resource (or php stream, â€¦)
-            if(!$template->smarty->security_policy->isTrustedUri($params['file'])) {
+            if (!$template->smarty->security_policy->isTrustedUri($params['file'])) {
                 return;
             }
         } else {
             // local file
-            if(!$template->smarty->security_policy->isTrustedResourceDir($params['file'])) {
+            if (!$template->smarty->security_policy->isTrustedResourceDir($_image_path)) {
                 return;
             }
         }
@@ -122,23 +125,26 @@ function smarty_function_html_image($params, $template)
         if (!$_image_data = @getimagesize($_image_path)) {
             if (!file_exists($_image_path)) {
                 trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE);
+
                 return;
-            } else if (!is_readable($_image_path)) {
+            } elseif (!is_readable($_image_path)) {
                 trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE);
+
                 return;
             } else {
                 trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE);
+
                 return;
-            } 
+            }
         }
 
         if (!isset($params['width'])) {
             $width = $_image_data[0];
-        } 
+        }
         if (!isset($params['height'])) {
             $height = $_image_data[1];
-        } 
-    } 
+        }
+    }
 
     if (isset($params['dpi'])) {
         if (strstr($_SERVER['HTTP_USER_AGENT'], 'Mac')) {
@@ -147,13 +153,11 @@ function smarty_function_html_image($params, $template)
             $dpi_default = 72;
         } else {
             $dpi_default = 96;
-        } 
+        }
         $_resize = $dpi_default / $params['dpi'];
         $width = round($width * $_resize);
         $height = round($height * $_resize);
-    } 
+    }
 
     return $prefix . '<img src="' . $path_prefix . $file . '" alt="' . $alt . '" width="' . $width . '" height="' . $height . '"' . $extra . ' />' . $suffix;
-} 
-
-?>
\ No newline at end of file
+}
index 46330e8960de83a2eda059f0a3b4768b5a8cbb15..7ec3e065cdd26ebdd0641d6020d033d27c5c8277 100644 (file)
@@ -1,14 +1,13 @@
 <?php
 /**
  * Smarty plugin
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {html_options} function plugin
- * 
  * Type:     function<br>
  * Name:     html_options<br>
  * Purpose:  Prints the list of <option> tags generated from
  * - id         (optional) - string default not set
  * - class      (optional) - string default not set
  * </pre>
- * 
- * @link http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
- *      (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com> 
- * @author Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de>
- * @param array                    $params   parameters
- * @param Smarty_Internal_Template $template template object
- * @return string 
- * @uses smarty_function_escape_special_chars()
+ *
+ * @link     http://www.smarty.net/manual/en/language.function.html.options.php {html_image}
+ *           (Smarty online manual)
+ * @author   Monte Ohrt <monte at ohrt dot com>
+ * @author   Ralf Strehle (minor optimization) <ralf dot strehle at yahoo dot de>
+ *
+ * @param array $params parameters
+ *
+ * @return string
+ * @uses     smarty_function_escape_special_chars()
  */
-function smarty_function_html_options($params, $template)
+function smarty_function_html_options($params)
 {
     require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
 
@@ -72,7 +72,7 @@ function smarty_function_html_options($params, $template)
                             if (method_exists($_sel, "__toString")) {
                                 $_sel = smarty_function_escape_special_chars((string) $_sel->__toString());
                             } else {
-                                trigger_error("html_options: selected attribute contains an object of class '". get_class($_sel) ."' without __toString() method", E_USER_NOTICE);
+                                trigger_error("html_options: selected attribute contains an object of class '" . get_class($_sel) . "' without __toString() method", E_USER_NOTICE);
                                 continue;
                             }
                         } else {
@@ -84,25 +84,44 @@ function smarty_function_html_options($params, $template)
                     if (method_exists($_val, "__toString")) {
                         $selected = smarty_function_escape_special_chars((string) $_val->__toString());
                     } else {
-                        trigger_error("html_options: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+                        trigger_error("html_options: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
                     }
                 } else {
                     $selected = smarty_function_escape_special_chars((string) $_val);
                 }
                 break;
 
+            case 'strict':
+                break;
+
+            case 'disabled':
+            case 'readonly':
+                if (!empty($params['strict'])) {
+                    if (!is_scalar($_val)) {
+                        trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE);
+                    }
+
+                    if ($_val === true || $_val === $_key) {
+                        $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+                    }
+
+                    break;
+                }
+            // omit break; to fall through!
+
             default:
                 if (!is_array($_val)) {
                     $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
                 } else {
                     trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
-                } 
+                }
                 break;
-        } 
+        }
     }
 
     if (!isset($options) && !isset($values)) {
         /* raise error here? */
+
         return '';
     }
 
@@ -117,14 +136,14 @@ function smarty_function_html_options($params, $template)
         foreach ($values as $_i => $_key) {
             $_val = isset($output[$_i]) ? $output[$_i] : '';
             $_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected, $id, $class, $_idx);
-        } 
+        }
     }
 
     if (!empty($name)) {
-        $_html_class = !empty($class) ? ' class="'.$class.'"' : '';
-        $_html_id = !empty($id) ? ' id="'.$id.'"' : '';
+        $_html_class = !empty($class) ? ' class="' . $class . '"' : '';
+        $_html_id = !empty($id) ? ' id="' . $id . '"' : '';
         $_html_result = '<select name="' . $name . '"' . $_html_class . $_html_id . $extra . '>' . "\n" . $_html_result . '</select>' . "\n";
-    } 
+    }
 
     return $_html_result;
 }
@@ -141,36 +160,37 @@ function smarty_function_html_options_optoutput($key, $value, $selected, $id, $c
         } elseif ($_key === $selected) {
             $_html_result .= ' selected="selected"';
         }
-        $_html_class = !empty($class) ? ' class="'.$class.' option"' : '';
-        $_html_id = !empty($id) ? ' id="'.$id.'-'.$idx.'"' : '';
+        $_html_class = !empty($class) ? ' class="' . $class . ' option"' : '';
+        $_html_id = !empty($id) ? ' id="' . $id . '-' . $idx . '"' : '';
         if (is_object($value)) {
             if (method_exists($value, "__toString")) {
                 $value = smarty_function_escape_special_chars((string) $value->__toString());
             } else {
-                trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+                trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
                 return '';
             }
         } else {
             $value = smarty_function_escape_special_chars((string) $value);
         }
         $_html_result .= $_html_class . $_html_id . '>' . $value . '</option>' . "\n";
-        $idx++;
+        $idx ++;
     } else {
         $_idx = 0;
-        $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id.'-'.$idx) : null, $class, $_idx);
-        $idx++;
+        $_html_result = smarty_function_html_options_optgroup($key, $value, $selected, !empty($id) ? ($id . '-' . $idx) : null, $class, $_idx);
+        $idx ++;
     }
+
     return $_html_result;
-} 
+}
 
 function smarty_function_html_options_optgroup($key, $values, $selected, $id, $class, &$idx)
 {
     $optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n";
     foreach ($values as $key => $value) {
         $optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected, $id, $class, $idx);
-    } 
+    }
     $optgroup_html .= "</optgroup>\n";
-    return $optgroup_html;
-} 
 
-?>
\ No newline at end of file
+    return $optgroup_html;
+}
index 7c830724ae0f8ef8606155569911695f92428e92..f121d5eaea45ac92166ceee8b3b8bebfa897b3e1 100644 (file)
@@ -1,14 +1,13 @@
 <?php
 /**
  * Smarty plugin
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {html_radios} function plugin
- * 
  * File:       function.html_radios.php<br>
  * Type:       function<br>
  * Name:       html_radios<br>
  * {html_radios values=$ids name='box' separator='<br>' output=$names}
  * {html_radios values=$ids checked=$checked separator='<br>' output=$names}
  * </pre>
- * 
- * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
- *      (Smarty online manual)
- * @author Christopher Kvarme <christopher.kvarme@flashjab.com> 
- * @author credits to Monte Ohrt <monte at ohrt dot com> 
+ *
+ * @link    http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
+ *          (Smarty online manual)
+ * @author  Christopher Kvarme <christopher.kvarme@flashjab.com>
+ * @author  credits to Monte Ohrt <monte at ohrt dot com>
  * @version 1.0
+ *
  * @param array                    $params   parameters
  * @param Smarty_Internal_Template $template template object
- * @return string 
- * @uses smarty_function_escape_special_chars()
+ *
+ * @return string
+ * @uses    smarty_function_escape_special_chars()
  */
 function smarty_function_html_radios($params, $template)
 {
@@ -57,7 +58,7 @@ function smarty_function_html_radios($params, $template)
     $output = null;
     $extra = '';
 
-    foreach($params as $_key => $_val) {
+    foreach ($params as $_key => $_val) {
         switch ($_key) {
             case 'name':
             case 'separator':
@@ -72,11 +73,11 @@ function smarty_function_html_radios($params, $template)
                     if (method_exists($_val, "__toString")) {
                         $selected = smarty_function_escape_special_chars((string) $_val->__toString());
                     } else {
-                        trigger_error("html_radios: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
+                        trigger_error("html_radios: selected attribute is an object of class '" . get_class($_val) . "' without __toString() method", E_USER_NOTICE);
                     }
                 } else {
                     $selected = (string) $_val;
-                } 
+                }
                 break;
 
             case 'escape':
@@ -102,18 +103,37 @@ function smarty_function_html_radios($params, $template)
             case 'assign':
                 break;
 
+            case 'strict':
+                break;
+
+            case 'disabled':
+            case 'readonly':
+                if (!empty($params['strict'])) {
+                    if (!is_scalar($_val)) {
+                        trigger_error("html_options: $_key attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute", E_USER_NOTICE);
+                    }
+
+                    if ($_val === true || $_val === $_key) {
+                        $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
+                    }
+
+                    break;
+                }
+            // omit break; to fall through!
+
             default:
                 if (!is_array($_val)) {
                     $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
                 } else {
                     trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
-                } 
+                }
                 break;
-        } 
-    } 
+        }
+    }
 
     if (!isset($options) && !isset($values)) {
         /* raise error here? */
+
         return '';
     }
 
@@ -127,57 +147,59 @@ function smarty_function_html_radios($params, $template)
         foreach ($values as $_i => $_key) {
             $_val = isset($output[$_i]) ? $output[$_i] : '';
             $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
-        } 
-    } 
+        }
+    }
 
     if (!empty($params['assign'])) {
         $template->assign($params['assign'], $_html_result);
     } else {
         return implode("\n", $_html_result);
-    } 
-} 
+    }
+}
 
 function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape)
 {
     $_output = '';
-    
+
     if (is_object($value)) {
         if (method_exists($value, "__toString")) {
             $value = (string) $value->__toString();
         } else {
-            trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
+            trigger_error("html_options: value is an object of class '" . get_class($value) . "' without __toString() method", E_USER_NOTICE);
+
             return '';
         }
     } else {
         $value = (string) $value;
     }
-    
+
     if (is_object($output)) {
         if (method_exists($output, "__toString")) {
             $output = (string) $output->__toString();
         } else {
-            trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE);
+            trigger_error("html_options: output is an object of class '" . get_class($output) . "' without __toString() method", E_USER_NOTICE);
+
             return '';
         }
     } else {
         $output = (string) $output;
     }
-    
+
     if ($labels) {
         if ($label_ids) {
             $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
             $_output .= '<label for="' . $_id . '">';
         } else {
             $_output .= '<label>';
-        } 
+        }
     }
-    
+
     $name = smarty_function_escape_special_chars($name);
     $value = smarty_function_escape_special_chars($value);
     if ($escape) {
         $output = smarty_function_escape_special_chars($output);
     }
-    
+
     $_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"';
 
     if ($labels && $label_ids) {
@@ -187,14 +209,13 @@ function smarty_function_html_radios_output($name, $value, $output, $selected, $
     if ($value === $selected) {
         $_output .= ' checked="checked"';
     }
-    
+
     $_output .= $extra . ' />' . $output;
     if ($labels) {
         $_output .= '</label>';
     }
-    
+
     $_output .= $separator;
-    return $_output;
-} 
 
-?>
\ No newline at end of file
+    return $_output;
+}
index 13c5003545d53e5c5ba70d66571c310f6b154fb7..d6625665154d2819ed719856385facc7dfffb0cb 100644 (file)
@@ -1,8 +1,8 @@
 <?php
 /**
  * Smarty plugin
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
@@ -17,11 +17,9 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
 
 /**
  * Smarty {html_select_date} plugin
- * 
  * Type:     function<br>
  * Name:     html_select_date<br>
  * Purpose:  Prints the dropdowns for date selection.
- * 
  * ChangeLog:
  * <pre>
  *            - 1.0 initial release
@@ -37,21 +35,22 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
  *              dropdown to include given date unless explicitly set (Monte)
  *            - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
  *              of 0000-00-00 dates (cybot, boots)
- *            - 2.0 complete rewrite for performance,  
+ *            - 2.0 complete rewrite for performance,
  *              added attributes month_names, *_id
  * </pre>
- * 
- * @link http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
- *      (Smarty online manual)
- * @version 2.0
- * @author Andrei Zmievski 
- * @author Monte Ohrt <monte at ohrt dot com> 
- * @author Rodney Rehm
- * @param array                    $params   parameters
- * @param Smarty_Internal_Template $template template object
- * @return string 
+ *
+ * @link     http://www.smarty.net/manual/en/language.function.html.select.date.php {html_select_date}
+ *           (Smarty online manual)
+ * @version  2.0
+ * @author   Andrei Zmievski
+ * @author   Monte Ohrt <monte at ohrt dot com>
+ * @author   Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string
  */
-function smarty_function_html_select_date($params, $template)
+function smarty_function_html_select_date($params)
 {
     // generate timestamps used for month names only
     static $_month_timestamps = null;
@@ -59,7 +58,7 @@ function smarty_function_html_select_date($params, $template)
     if ($_month_timestamps === null) {
         $_current_year = date('Y');
         $_month_timestamps = array();
-        for ($i = 1; $i <= 12; $i++) {
+        for ($i = 1; $i <= 12; $i ++) {
             $_month_timestamps[$i] = mktime(0, 0, 0, $i, 1, 2000);
         }
     }
@@ -120,7 +119,7 @@ function smarty_function_html_select_date($params, $template)
                     $time = smarty_make_timestamp($_value);
                 }
                 break;
-                
+
             case 'month_names':
                 if (is_array($_value) && count($_value) == 12) {
                     $$_key = $_value;
@@ -128,7 +127,7 @@ function smarty_function_html_select_date($params, $template)
                     trigger_error("html_select_date: month_names must be an array of 12 strings", E_USER_NOTICE);
                 }
                 break;
-                
+
             case 'prefix':
             case 'field_array':
             case 'start_year':
@@ -155,7 +154,7 @@ function smarty_function_html_select_date($params, $template)
             case 'month_id':
             case 'day_id':
             case 'year_id':
-                $$_key = (string)$_value;
+                $$_key = (string) $_value;
                 break;
 
             case 'display_days':
@@ -163,7 +162,7 @@ function smarty_function_html_select_date($params, $template)
             case 'display_years':
             case 'year_as_text':
             case 'reverse_years':
-                $$_key = (bool)$_value;
+                $$_key = (bool) $_value;
                 break;
 
             default:
@@ -171,32 +170,30 @@ function smarty_function_html_select_date($params, $template)
                     $extra_attrs .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_value) . '"';
                 } else {
                     trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
-                } 
+                }
                 break;
-        } 
+        }
     }
-    
+
     // Note: date() is faster than strftime()
     // Note: explode(date()) is faster than date() date() date()
     if (isset($params['time']) && is_array($params['time'])) {
         if (isset($params['time'][$prefix . 'Year'])) {
             // $_REQUEST[$field_array] given
-            foreach (array('Y' => 'Year',  'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
+            foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
                 $_variableName = '_' . strtolower($_elementName);
                 $$_variableName = isset($params['time'][$prefix . $_elementName])
                     ? $params['time'][$prefix . $_elementName]
                     : date($_elementKey);
             }
-            $time = mktime(0, 0, 0, $_month, $_day, $_year);
         } elseif (isset($params['time'][$field_array][$prefix . 'Year'])) {
             // $_REQUEST given
-            foreach (array('Y' => 'Year',  'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
+            foreach (array('Y' => 'Year', 'm' => 'Month', 'd' => 'Day') as $_elementKey => $_elementName) {
                 $_variableName = '_' . strtolower($_elementName);
                 $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
                     ? $params['time'][$field_array][$prefix . $_elementName]
                     : date($_elementKey);
             }
-            $time = mktime(0, 0, 0, $_month, $_day, $_year);
         } else {
             // no date found, use NOW
             list($_year, $_month, $_day) = $time = explode('-', date('Y-m-d'));
@@ -217,13 +214,13 @@ function smarty_function_html_select_date($params, $template)
         $key .= '_year';
         $t = $$key;
         if ($t === null) {
-            $$key = (int)$_current_year;
-        } else if ($t[0] == '+') {
-            $$key = (int)($_current_year + trim(substr($t, 1)));
-        } else if ($t[0] == '-') {
-            $$key = (int)($_current_year - trim(substr($t, 1)));
+            $$key = (int) $_current_year;
+        } elseif ($t[0] == '+') {
+            $$key = (int) ($_current_year + (int)trim(substr($t, 1)));
+        } elseif ($t[0] == '-') {
+            $$key = (int) ($_current_year - (int)trim(substr($t, 1)));
         } else {
-            $$key = (int)$$key;
+            $$key = (int) $$key;
         }
     }
 
@@ -236,73 +233,71 @@ function smarty_function_html_select_date($params, $template)
 
     // generate year <select> or <input>
     if ($display_years) {
-        $_html_years = '';
         $_extra = '';
         $_name = $field_array ? ($field_array . '[' . $prefix . 'Year]') : ($prefix . 'Year');
         if ($all_extra) {
             $_extra .= ' ' . $all_extra;
-        } 
+        }
         if ($year_extra) {
             $_extra .= ' ' . $year_extra;
         }
-        
+
         if ($year_as_text) {
             $_html_years = '<input type="text" name="' . $_name . '" value="' . $_year . '" size="4" maxlength="4"' . $_extra . $extra_attrs . ' />';
         } else {
             $_html_years = '<select name="' . $_name . '"';
             if ($year_id !== null || $all_id !== null) {
-                $_html_years .= ' id="' . smarty_function_escape_special_chars( 
-                    $year_id !== null ? ( $year_id ? $year_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) 
-                ) . '"';
+                $_html_years .= ' id="' . smarty_function_escape_special_chars(
+                        $year_id !== null ? ($year_id ? $year_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+                    ) . '"';
             }
             if ($year_size) {
                 $_html_years .= ' size="' . $year_size . '"';
-            } 
+            }
             $_html_years .= $_extra . $extra_attrs . '>' . $option_separator;
-            
+
             if (isset($year_empty) || isset($all_empty)) {
-                $_html_years .= '<option value="">' . ( isset($year_empty) ? $year_empty : $all_empty ) . '</option>' . $option_separator;
+                $_html_years .= '<option value="">' . (isset($year_empty) ? $year_empty : $all_empty) . '</option>' . $option_separator;
             }
-            
-            $op = $start_year > $end_year ? -1 : 1;
-            for ($i=$start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
+
+            $op = $start_year > $end_year ? - 1 : 1;
+            for ($i = $start_year; $op > 0 ? $i <= $end_year : $i >= $end_year; $i += $op) {
                 $_html_years .= '<option value="' . $i . '"'
                     . ($_year == $i ? ' selected="selected"' : '')
                     . '>' . $i . '</option>' . $option_separator;
             }
-            
+
             $_html_years .= '</select>';
         }
     }
-    
+
     // generate month <select> or <input>
     if ($display_months) {
-        $_html_month = '';
         $_extra = '';
         $_name = $field_array ? ($field_array . '[' . $prefix . 'Month]') : ($prefix . 'Month');
         if ($all_extra) {
             $_extra .= ' ' . $all_extra;
-        } 
+        }
         if ($month_extra) {
             $_extra .= ' ' . $month_extra;
         }
-        
+
         $_html_months = '<select name="' . $_name . '"';
         if ($month_id !== null || $all_id !== null) {
-            $_html_months .= ' id="' . smarty_function_escape_special_chars( 
-                $month_id !== null ? ( $month_id ? $month_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) 
-            ) . '"';
+            $_html_months .= ' id="' . smarty_function_escape_special_chars(
+                    $month_id !== null ? ($month_id ? $month_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+                ) . '"';
         }
         if ($month_size) {
             $_html_months .= ' size="' . $month_size . '"';
-        } 
+        }
         $_html_months .= $_extra . $extra_attrs . '>' . $option_separator;
-        
+
         if (isset($month_empty) || isset($all_empty)) {
-            $_html_months .= '<option value="">' . ( isset($month_empty) ? $month_empty : $all_empty ) . '</option>' . $option_separator;
+            $_html_months .= '<option value="">' . (isset($month_empty) ? $month_empty : $all_empty) . '</option>' . $option_separator;
         }
-        
-        for ($i = 1; $i <= 12; $i++) {
+
+        for ($i = 1; $i <= 12; $i ++) {
             $_val = sprintf('%02d', $i);
             $_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[$i]) : ($month_format == "%m" ? $_val : strftime($month_format, $_month_timestamps[$i]));
             $_value = $month_value_format == "%m" ? $_val : strftime($month_value_format, $_month_timestamps[$i]);
@@ -310,52 +305,51 @@ function smarty_function_html_select_date($params, $template)
                 . ($_val == $_month ? ' selected="selected"' : '')
                 . '>' . $_text . '</option>' . $option_separator;
         }
-        
+
         $_html_months .= '</select>';
     }
-    
+
     // generate day <select> or <input>
     if ($display_days) {
-        $_html_day = '';
         $_extra = '';
         $_name = $field_array ? ($field_array . '[' . $prefix . 'Day]') : ($prefix . 'Day');
         if ($all_extra) {
             $_extra .= ' ' . $all_extra;
-        } 
+        }
         if ($day_extra) {
             $_extra .= ' ' . $day_extra;
         }
-        
+
         $_html_days = '<select name="' . $_name . '"';
         if ($day_id !== null || $all_id !== null) {
-            $_html_days .= ' id="' . smarty_function_escape_special_chars( 
-                $day_id !== null ? ( $day_id ? $day_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name ) 
-            ) . '"';
+            $_html_days .= ' id="' . smarty_function_escape_special_chars(
+                    $day_id !== null ? ($day_id ? $day_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+                ) . '"';
         }
         if ($day_size) {
             $_html_days .= ' size="' . $day_size . '"';
-        } 
+        }
         $_html_days .= $_extra . $extra_attrs . '>' . $option_separator;
-        
+
         if (isset($day_empty) || isset($all_empty)) {
-            $_html_days .= '<option value="">' . ( isset($day_empty) ? $day_empty : $all_empty ) . '</option>' . $option_separator;
+            $_html_days .= '<option value="">' . (isset($day_empty) ? $day_empty : $all_empty) . '</option>' . $option_separator;
         }
-        
-        for ($i = 1; $i <= 31; $i++) {
+
+        for ($i = 1; $i <= 31; $i ++) {
             $_val = sprintf('%02d', $i);
             $_text = $day_format == '%02d' ? $_val : sprintf($day_format, $i);
-            $_value = $day_value_format ==  '%02d' ? $_val : sprintf($day_value_format, $i);
+            $_value = $day_value_format == '%02d' ? $_val : sprintf($day_value_format, $i);
             $_html_days .= '<option value="' . $_value . '"'
                 . ($_val == $_day ? ' selected="selected"' : '')
                 . '>' . $_text . '</option>' . $option_separator;
         }
-        
+
         $_html_days .= '</select>';
     }
 
     // order the fields for output
     $_html = '';
-    for ($i=0; $i <= 2; $i++) {
+    for ($i = 0; $i <= 2; $i ++) {
         switch ($field_order[$i]) {
             case 'Y':
             case 'y':
@@ -365,8 +359,8 @@ function smarty_function_html_select_date($params, $template)
                     }
                     $_html .= $_html_years;
                 }
-            break;
-            
+                break;
+
             case 'm':
             case 'M':
                 if (isset($_html_months)) {
@@ -375,8 +369,8 @@ function smarty_function_html_select_date($params, $template)
                     }
                     $_html .= $_html_months;
                 }
-            break;
-            
+                break;
+
             case 'd':
             case 'D':
                 if (isset($_html_days)) {
@@ -385,10 +379,9 @@ function smarty_function_html_select_date($params, $template)
                     }
                     $_html .= $_html_days;
                 }
-            break;
+                break;
         }
     }
+
     return $_html;
 }
-
-?>
\ No newline at end of file
index 9fb8038e4690d32cfb065edcb33a425cb2c98298..9af6aad5bf898b5e5828ab43e8be6c992a41bd1b 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
@@ -17,21 +17,21 @@ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
 
 /**
  * Smarty {html_select_time} function plugin
- *
  * Type:     function<br>
  * Name:     html_select_time<br>
  * Purpose:  Prints the dropdowns for time selection
  *
- * @link http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
- *          (Smarty online manual)
- * @author Roberto Berto <roberto@berto.net>
- * @author Monte Ohrt <monte AT ohrt DOT com>
- * @param array                    $params   parameters
- * @param Smarty_Internal_Template $template template object
+ * @link     http://www.smarty.net/manual/en/language.function.html.select.time.php {html_select_time}
+ *           (Smarty online manual)
+ * @author   Roberto Berto <roberto@berto.net>
+ * @author   Monte Ohrt <monte AT ohrt DOT com>
+ *
+ * @param array $params parameters
+ *
  * @return string
- * @uses smarty_make_timestamp()
+ * @uses     smarty_make_timestamp()
  */
-function smarty_function_html_select_time($params, $template)
+function smarty_function_html_select_time($params)
 {
     $prefix = "Time_";
     $field_array = null;
@@ -117,7 +117,7 @@ function smarty_function_html_select_time($params, $template)
             case 'minute_value_format':
             case 'second_format':
             case 'second_value_format':
-                $$_key = (string)$_value;
+                $$_key = (string) $_value;
                 break;
 
             case 'display_hours':
@@ -125,7 +125,7 @@ function smarty_function_html_select_time($params, $template)
             case 'display_seconds':
             case 'display_meridian':
             case 'use_24_hours':
-                $$_key = (bool)$_value;
+                $$_key = (bool) $_value;
                 break;
 
             case 'minute_interval':
@@ -135,7 +135,7 @@ function smarty_function_html_select_time($params, $template)
             case 'minute_size':
             case 'second_size':
             case 'meridian_size':
-                $$_key = (int)$_value;
+                $$_key = (int) $_value;
                 break;
 
             default:
@@ -151,7 +151,7 @@ function smarty_function_html_select_time($params, $template)
     if (isset($params['time']) && is_array($params['time'])) {
         if (isset($params['time'][$prefix . 'Hour'])) {
             // $_REQUEST[$field_array] given
-            foreach (array('H' => 'Hour',  'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
+            foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
                 $_variableName = '_' . strtolower($_elementName);
                 $$_variableName = isset($params['time'][$prefix . $_elementName])
                     ? $params['time'][$prefix . $_elementName]
@@ -160,11 +160,11 @@ function smarty_function_html_select_time($params, $template)
             $_meridian = isset($params['time'][$prefix . 'Meridian'])
                 ? (' ' . $params['time'][$prefix . 'Meridian'])
                 : '';
-            $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
+            $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
             list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
         } elseif (isset($params['time'][$field_array][$prefix . 'Hour'])) {
             // $_REQUEST given
-            foreach (array('H' => 'Hour',  'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
+            foreach (array('H' => 'Hour', 'i' => 'Minute', 's' => 'Second') as $_elementKey => $_elementName) {
                 $_variableName = '_' . strtolower($_elementName);
                 $$_variableName = isset($params['time'][$field_array][$prefix . $_elementName])
                     ? $params['time'][$field_array][$prefix . $_elementName]
@@ -173,7 +173,7 @@ function smarty_function_html_select_time($params, $template)
             $_meridian = isset($params['time'][$field_array][$prefix . 'Meridian'])
                 ? (' ' . $params['time'][$field_array][$prefix . 'Meridian'])
                 : '';
-            $time = strtotime( $_hour . ':' . $_minute . ':' . $_second . $_meridian );
+            $time = strtotime($_hour . ':' . $_minute . ':' . $_second . $_meridian);
             list($_hour, $_minute, $_second) = $time = explode('-', date('H-i-s', $time));
         } else {
             // no date found, use NOW
@@ -204,8 +204,8 @@ function smarty_function_html_select_time($params, $template)
         $_html_hours = '<select name="' . $_name . '"';
         if ($hour_id !== null || $all_id !== null) {
             $_html_hours .= ' id="' . smarty_function_escape_special_chars(
-                $hour_id !== null ? ( $hour_id ? $hour_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
-            ) . '"';
+                    $hour_id !== null ? ($hour_id ? $hour_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+                ) . '"';
         }
         if ($hour_size) {
             $_html_hours .= ' size="' . $hour_size . '"';
@@ -213,12 +213,12 @@ function smarty_function_html_select_time($params, $template)
         $_html_hours .= $_extra . $extra_attrs . '>' . $option_separator;
 
         if (isset($hour_empty) || isset($all_empty)) {
-            $_html_hours .= '<option value="">' . ( isset($hour_empty) ? $hour_empty : $all_empty ) . '</option>' . $option_separator;
+            $_html_hours .= '<option value="">' . (isset($hour_empty) ? $hour_empty : $all_empty) . '</option>' . $option_separator;
         }
 
         $start = $use_24_hours ? 0 : 1;
         $end = $use_24_hours ? 23 : 12;
-        for ($i=$start; $i <= $end; $i++) {
+        for ($i = $start; $i <= $end; $i ++) {
             $_val = sprintf('%02d', $i);
             $_text = $hour_format == '%02d' ? $_val : sprintf($hour_format, $i);
             $_value = $hour_value_format == '%02d' ? $_val : sprintf($hour_value_format, $i);
@@ -226,7 +226,7 @@ function smarty_function_html_select_time($params, $template)
             if (!$use_24_hours) {
                 $_hour12 = $_hour == 0
                     ? 12
-                    : ($_hour <= 12 ? $_hour : $_hour -12);
+                    : ($_hour <= 12 ? $_hour : $_hour - 12);
             }
 
             $selected = $_hour !== null ? ($use_24_hours ? $_hour == $_val : $_hour12 == $_val) : null;
@@ -253,8 +253,8 @@ function smarty_function_html_select_time($params, $template)
         $_html_minutes = '<select name="' . $_name . '"';
         if ($minute_id !== null || $all_id !== null) {
             $_html_minutes .= ' id="' . smarty_function_escape_special_chars(
-                $minute_id !== null ? ( $minute_id ? $minute_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
-            ) . '"';
+                    $minute_id !== null ? ($minute_id ? $minute_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+                ) . '"';
         }
         if ($minute_size) {
             $_html_minutes .= ' size="' . $minute_size . '"';
@@ -262,11 +262,11 @@ function smarty_function_html_select_time($params, $template)
         $_html_minutes .= $_extra . $extra_attrs . '>' . $option_separator;
 
         if (isset($minute_empty) || isset($all_empty)) {
-            $_html_minutes .= '<option value="">' . ( isset($minute_empty) ? $minute_empty : $all_empty ) . '</option>' . $option_separator;
+            $_html_minutes .= '<option value="">' . (isset($minute_empty) ? $minute_empty : $all_empty) . '</option>' . $option_separator;
         }
 
         $selected = $_minute !== null ? ($_minute - $_minute % $minute_interval) : null;
-        for ($i=0; $i <= 59; $i += $minute_interval) {
+        for ($i = 0; $i <= 59; $i += $minute_interval) {
             $_val = sprintf('%02d', $i);
             $_text = $minute_format == '%02d' ? $_val : sprintf($minute_format, $i);
             $_value = $minute_value_format == '%02d' ? $_val : sprintf($minute_value_format, $i);
@@ -293,8 +293,8 @@ function smarty_function_html_select_time($params, $template)
         $_html_seconds = '<select name="' . $_name . '"';
         if ($second_id !== null || $all_id !== null) {
             $_html_seconds .= ' id="' . smarty_function_escape_special_chars(
-                $second_id !== null ? ( $second_id ? $second_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
-            ) . '"';
+                    $second_id !== null ? ($second_id ? $second_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+                ) . '"';
         }
         if ($second_size) {
             $_html_seconds .= ' size="' . $second_size . '"';
@@ -302,11 +302,11 @@ function smarty_function_html_select_time($params, $template)
         $_html_seconds .= $_extra . $extra_attrs . '>' . $option_separator;
 
         if (isset($second_empty) || isset($all_empty)) {
-            $_html_seconds .= '<option value="">' . ( isset($second_empty) ? $second_empty : $all_empty ) . '</option>' . $option_separator;
+            $_html_seconds .= '<option value="">' . (isset($second_empty) ? $second_empty : $all_empty) . '</option>' . $option_separator;
         }
 
         $selected = $_second !== null ? ($_second - $_second % $second_interval) : null;
-        for ($i=0; $i <= 59; $i += $second_interval) {
+        for ($i = 0; $i <= 59; $i += $second_interval) {
             $_val = sprintf('%02d', $i);
             $_text = $second_format == '%02d' ? $_val : sprintf($second_format, $i);
             $_value = $second_value_format == '%02d' ? $_val : sprintf($second_value_format, $i);
@@ -333,8 +333,8 @@ function smarty_function_html_select_time($params, $template)
         $_html_meridian = '<select name="' . $_name . '"';
         if ($meridian_id !== null || $all_id !== null) {
             $_html_meridian .= ' id="' . smarty_function_escape_special_chars(
-                $meridian_id !== null ? ( $meridian_id ? $meridian_id : $_name ) : ( $all_id ? ($all_id . $_name) : $_name )
-            ) . '"';
+                    $meridian_id !== null ? ($meridian_id ? $meridian_id : $_name) : ($all_id ? ($all_id . $_name) : $_name)
+                ) . '"';
         }
         if ($meridian_size) {
             $_html_meridian .= ' size="' . $meridian_size . '"';
@@ -342,11 +342,11 @@ function smarty_function_html_select_time($params, $template)
         $_html_meridian .= $_extra . $extra_attrs . '>' . $option_separator;
 
         if (isset($meridian_empty) || isset($all_empty)) {
-            $_html_meridian .= '<option value="">' . ( isset($meridian_empty) ? $meridian_empty : $all_empty ) . '</option>' . $option_separator;
+            $_html_meridian .= '<option value="">' . (isset($meridian_empty) ? $meridian_empty : $all_empty) . '</option>' . $option_separator;
         }
 
-        $_html_meridian .= '<option value="am"'. ($_hour < 12 ? ' selected="selected"' : '') .'>AM</option>' . $option_separator
-            . '<option value="pm"'. ($_hour < 12 ? '' : ' selected="selected"') .'>PM</option>' . $option_separator
+        $_html_meridian .= '<option value="am"' . ($_hour > 0 && $_hour < 12 ? ' selected="selected"' : '') . '>AM</option>' . $option_separator
+            . '<option value="pm"' . ($_hour < 12 ? '' : ' selected="selected"') . '>PM</option>' . $option_separator
             . '</select>';
     }
 
@@ -362,5 +362,3 @@ function smarty_function_html_select_time($params, $template)
 
     return $_html;
 }
-
-?>
\ No newline at end of file
index 6b9cb9d129efb13a2397217e040dd5b1334513b9..ec7ba48a4f42dc9bab38d74096899e8eeaa6bf7a 100644 (file)
@@ -2,13 +2,12 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {html_table} function plugin
- *
  * Type:     function<br>
  * Name:     html_table<br>
  * Date:     Feb 17, 2003<br>
  * {table loop=$data cols="first,second,third" tr_attr=$colors}
  * </pre>
  *
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credit to Messju Mohr <messju at lammfellpuschen dot de>
- * @author credit to boots <boots dot smarty at yahoo dot com>
- * @version 1.1
- * @link http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
- *          (Smarty online manual)
- * @param array                    $params   parameters
- * @param Smarty_Internal_Template $template template object
+ * @author   Monte Ohrt <monte at ohrt dot com>
+ * @author   credit to Messju Mohr <messju at lammfellpuschen dot de>
+ * @author   credit to boots <boots dot smarty at yahoo dot com>
+ * @version  1.1
+ * @link     http://www.smarty.net/manual/en/language.function.html.table.php {html_table}
+ *           (Smarty online manual)
+ *
+ * @param array $params parameters
+ *
  * @return string
  */
-function smarty_function_html_table($params, $template)
+function smarty_function_html_table($params)
 {
     $table_attr = 'border="1"';
     $tr_attr = '';
@@ -63,14 +63,15 @@ function smarty_function_html_table($params, $template)
     $loop = null;
 
     if (!isset($params['loop'])) {
-        trigger_error("html_table: missing 'loop' parameter",E_USER_WARNING);
+        trigger_error("html_table: missing 'loop' parameter", E_USER_WARNING);
+
         return;
     }
 
     foreach ($params as $_key => $_value) {
         switch ($_key) {
             case 'loop':
-                $$_key = (array)$_value;
+                $$_key = (array) $_value;
                 break;
 
             case 'cols':
@@ -81,14 +82,14 @@ function smarty_function_html_table($params, $template)
                     $cols = explode(',', $_value);
                     $cols_count = count($cols);
                 } elseif (!empty($_value)) {
-                    $cols_count = (int)$_value;
+                    $cols_count = (int) $_value;
                 } else {
                     $cols_count = $cols;
                 }
                 break;
 
             case 'rows':
-                $$_key = (int)$_value;
+                $$_key = (int) $_value;
                 break;
 
             case 'table_attr':
@@ -97,7 +98,7 @@ function smarty_function_html_table($params, $template)
             case 'vdir':
             case 'inner':
             case 'caption':
-                $$_key = (string)$_value;
+                $$_key = (string) $_value;
                 break;
 
             case 'tr_attr':
@@ -129,7 +130,7 @@ function smarty_function_html_table($params, $template)
         $cols = ($hdir == 'right') ? $cols : array_reverse($cols);
         $output .= "<thead><tr>\n";
 
-        for ($r = 0; $r < $cols_count; $r++) {
+        for ($r = 0; $r < $cols_count; $r ++) {
             $output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
             $output .= $cols[$r];
             $output .= "</th>\n";
@@ -138,12 +139,12 @@ function smarty_function_html_table($params, $template)
     }
 
     $output .= "<tbody>\n";
-    for ($r = 0; $r < $rows; $r++) {
+    for ($r = 0; $r < $rows; $r ++) {
         $output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
-        $rx = ($vdir == 'down') ? $r * $cols_count : ($rows-1 - $r) * $cols_count;
+        $rx = ($vdir == 'down') ? $r * $cols_count : ($rows - 1 - $r) * $cols_count;
 
-        for ($c = 0; $c < $cols_count; $c++) {
-            $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count-1 - $c;
+        for ($c = 0; $c < $cols_count; $c ++) {
+            $x = ($hdir == 'right') ? $rx + $c : $rx + $cols_count - 1 - $c;
             if ($inner != 'cols') {
                 /* shuffle x to loop over rows*/
                 $x = floor($x / $cols_count) + ($x % $cols_count) * $rows;
@@ -173,5 +174,3 @@ function smarty_function_html_table_cycle($name, $var, $no)
 
     return ($ret) ? ' ' . $ret : '';
 }
-
-?>
\ No newline at end of file
index 55d5c060207e679e98f86c2b042d7b1c39237293..520fb7aa6979625e8ff73f3c3a1dd035b99b03a4 100644 (file)
@@ -2,13 +2,12 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {mailto} function plugin
- *
  * Type:     function<br>
  * Name:     mailto<br>
  * Date:     May 21, 2002
  * {mailto address="me@domain.com" extra='class="mailto"'}
  * </pre>
  *
- * @link http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
- *          (Smarty online manual)
- * @version 1.2
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author credits to Jason Sweat (added cc, bcc and subject functionality)
- * @param array                    $params   parameters
- * @param Smarty_Internal_Template $template template object
+ * @link     http://www.smarty.net/manual/en/language.function.mailto.php {mailto}
+ *           (Smarty online manual)
+ * @version  1.2
+ * @author   Monte Ohrt <monte at ohrt dot com>
+ * @author   credits to Jason Sweat (added cc, bcc and subject functionality)
+ *
+ * @param array $params parameters
+ *
  * @return string
  */
-function smarty_function_mailto($params, $template)
+function smarty_function_mailto($params)
 {
     static $_allowed_encoding = array('javascript' => true, 'javascript_charcode' => true, 'hex' => true, 'none' => true);
     $extra = '';
 
     if (empty($params['address'])) {
-        trigger_error("mailto: missing 'address' parameter",E_USER_WARNING);
+        trigger_error("mailto: missing 'address' parameter", E_USER_WARNING);
+
         return;
     } else {
         $address = $params['address'];
@@ -71,8 +72,9 @@ function smarty_function_mailto($params, $template)
             case 'cc':
             case 'bcc':
             case 'followupto':
-                if (!empty($value))
-                    $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
+            if (!empty($value)) {
+                $mail_parms[] = $var . '=' . str_replace($search, $replace, rawurlencode($value));
+            }
                 break;
 
             case 'subject':
@@ -91,10 +93,11 @@ function smarty_function_mailto($params, $template)
     if ($mail_parms) {
         $address .= '?' . join('&', $mail_parms);
     }
-    
+
     $encode = (empty($params['encode'])) ? 'none' : $params['encode'];
     if (!isset($_allowed_encoding[$encode])) {
         trigger_error("mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex", E_USER_WARNING);
+
         return;
     }
     // FIXME: (rodneyrehm) document.write() excues me what? 1998 has passed!
@@ -102,7 +105,7 @@ function smarty_function_mailto($params, $template)
         $string = 'document.write(\'<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>\');';
 
         $js_encode = '';
-        for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
+        for ($x = 0, $_length = strlen($string); $x < $_length; $x ++) {
             $js_encode .= '%' . bin2hex($string[$x]);
         }
 
@@ -110,7 +113,7 @@ function smarty_function_mailto($params, $template)
     } elseif ($encode == 'javascript_charcode') {
         $string = '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
 
-        for($x = 0, $y = strlen($string); $x < $y; $x++) {
+        for ($x = 0, $y = strlen($string); $x < $y; $x ++) {
             $ord[] = ord($string[$x]);
         }
 
@@ -125,11 +128,12 @@ function smarty_function_mailto($params, $template)
     } elseif ($encode == 'hex') {
         preg_match('!^(.*)(\?.*)$!', $address, $match);
         if (!empty($match[2])) {
-            trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.",E_USER_WARNING);
+            trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.", E_USER_WARNING);
+
             return;
         }
         $address_encode = '';
-        for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
+        for ($x = 0, $_length = strlen($address); $x < $_length; $x ++) {
             if (preg_match('!\w!' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
                 $address_encode .= '%' . bin2hex($address[$x]);
             } else {
@@ -137,16 +141,15 @@ function smarty_function_mailto($params, $template)
             }
         }
         $text_encode = '';
-        for ($x = 0, $_length = strlen($text); $x < $_length; $x++) {
+        for ($x = 0, $_length = strlen($text); $x < $_length; $x ++) {
             $text_encode .= '&#x' . bin2hex($text[$x]) . ';';
         }
 
         $mailto = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
+
         return '<a href="' . $mailto . $address_encode . '" ' . $extra . '>' . $text_encode . '</a>';
     } else {
         // no encoding
         return '<a href="mailto:' . $address . '" ' . $extra . '>' . $text . '</a>';
     }
 }
-
-?>
\ No newline at end of file
index f4d3f05ee3c268adebc12a087d746f052bf793c2..aba76e82577db80c1a8c1c90b2c14d365277ecd4 100644 (file)
@@ -1,87 +1,91 @@
 <?php
 /**
  * Smarty plugin
- *
  * This plugin is only for Smarty2 BC
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsFunction
  */
 
 /**
  * Smarty {math} function plugin
- *
  * Type:     function<br>
  * Name:     math<br>
  * Purpose:  handle math computations in template
  *
- * @link http://www.smarty.net/manual/en/language.function.math.php {math}
- *          (Smarty online manual)
+ * @link     http://www.smarty.net/manual/en/language.function.math.php {math}
+ *           (Smarty online manual)
  * @author   Monte Ohrt <monte at ohrt dot com>
+ *
  * @param array                    $params   parameters
  * @param Smarty_Internal_Template $template template object
+ *
  * @return string|null
  */
 function smarty_function_math($params, $template)
 {
     static $_allowed_funcs = array(
-        'int' => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true,
-        'log' => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true,
-        'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true ,'tan' => true
+        'int'  => true, 'abs' => true, 'ceil' => true, 'cos' => true, 'exp' => true, 'floor' => true,
+        'log'  => true, 'log10' => true, 'max' => true, 'min' => true, 'pi' => true, 'pow' => true,
+        'rand' => true, 'round' => true, 'sin' => true, 'sqrt' => true, 'srand' => true'tan' => true
     );
     // be sure equation parameter is present
     if (empty($params['equation'])) {
-        trigger_error("math: missing equation parameter",E_USER_WARNING);
+        trigger_error("math: missing equation parameter", E_USER_WARNING);
+
         return;
     }
 
     $equation = $params['equation'];
 
     // make sure parenthesis are balanced
-    if (substr_count($equation,"(") != substr_count($equation,")")) {
-        trigger_error("math: unbalanced parenthesis",E_USER_WARNING);
+    if (substr_count($equation, "(") != substr_count($equation, ")")) {
+        trigger_error("math: unbalanced parenthesis", E_USER_WARNING);
+
         return;
     }
 
     // match all vars in equation, make sure all are passed
-    preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!",$equation, $match);
+    preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!", $equation, $match);
 
-    foreach($match[1] as $curr_var) {
+    foreach ($match[1] as $curr_var) {
         if ($curr_var && !isset($params[$curr_var]) && !isset($_allowed_funcs[$curr_var])) {
-            trigger_error("math: function call $curr_var not allowed",E_USER_WARNING);
+            trigger_error("math: function call $curr_var not allowed", E_USER_WARNING);
+
             return;
         }
     }
 
-    foreach($params as $key => $val) {
+    foreach ($params as $key => $val) {
         if ($key != "equation" && $key != "format" && $key != "assign") {
             // make sure value is not empty
-            if (strlen($val)==0) {
-                trigger_error("math: parameter $key is empty",E_USER_WARNING);
+            if (strlen($val) == 0) {
+                trigger_error("math: parameter $key is empty", E_USER_WARNING);
+
                 return;
             }
             if (!is_numeric($val)) {
-                trigger_error("math: parameter $key: is not numeric",E_USER_WARNING);
+                trigger_error("math: parameter $key: is not numeric", E_USER_WARNING);
+
                 return;
             }
             $equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
         }
     }
     $smarty_math_result = null;
-    eval("\$smarty_math_result = ".$equation.";");
+    eval("\$smarty_math_result = " . $equation . ";");
 
     if (empty($params['format'])) {
         if (empty($params['assign'])) {
             return $smarty_math_result;
         } else {
-            $template->assign($params['assign'],$smarty_math_result);
+            $template->assign($params['assign'], $smarty_math_result);
         }
     } else {
-        if (empty($params['assign'])){
-            printf($params['format'],$smarty_math_result);
+        if (empty($params['assign'])) {
+            printf($params['format'], $smarty_math_result);
         } else {
-            $template->assign($params['assign'],sprintf($params['format'],$smarty_math_result));
+            $template->assign($params['assign'], sprintf($params['format'], $smarty_math_result));
         }
     }
 }
-
-?>
\ No newline at end of file
index a78e3632a852b69ba3402a6dfe632dbe5873a738..a8ad76370a65ae5144b293f01ab3f68a5882dbd8 100644 (file)
@@ -1,25 +1,24 @@
 <?php
 /**
  * Smarty plugin
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsModifier
  */
 
 /**
  * Smarty capitalize modifier plugin
- * 
  * Type:     modifier<br>
  * Name:     capitalize<br>
  * Purpose:  capitalize words in the string
- *
  * {@internal {$string|capitalize:true:true} is the fastest option for MBString enabled systems }}
  *
  * @param string  $string    string to capitalize
  * @param boolean $uc_digits also capitalize "x123" to "X123"
  * @param boolean $lc_rest   capitalize first letters, lowercase all following letters "aAa" to "Aaa"
+ *
  * @return string capitalized string
- * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author Monte Ohrt <monte at ohrt dot com>
  * @author Rodney Rehm
  */
 function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
@@ -27,39 +26,65 @@ function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = fals
     if (Smarty::$_MBSTRING) {
         if ($lc_rest) {
             // uppercase (including hyphenated words)
-            $upper_string = mb_convert_case( $string, MB_CASE_TITLE, Smarty::$_CHARSET );
+            $upper_string = mb_convert_case($string, MB_CASE_TITLE, Smarty::$_CHARSET);
         } else {
             // uppercase word breaks
-            $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\2'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $string);
+            $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert_cb', $string);
         }
         // check uc_digits case
         if (!$uc_digits) {
             if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
-                foreach($matches[1] as $match) {
+                foreach ($matches[1] as $match) {
                     $upper_string = substr_replace($upper_string, mb_strtolower($match[0], Smarty::$_CHARSET), $match[1], strlen($match[0]));
                 }
-            } 
+            }
         }
-        $upper_string = preg_replace("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').mb_convert_case(stripslashes('\\3'),MB_CASE_UPPER, '" . addslashes(Smarty::$_CHARSET) . "')", $upper_string);
+        $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_mbconvert2_cb', $upper_string);
         return $upper_string;
     }
-    
+
     // lowercase first
     if ($lc_rest) {
         $string = strtolower($string);
     }
     // uppercase (including hyphenated words)
-    $upper_string = preg_replace("!(^|[^\p{L}'])([\p{Ll}])!eS" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').ucfirst(stripslashes('\\2'))", $string); 
+    $upper_string = preg_replace_callback("!(^|[^\p{L}'])([\p{Ll}])!S" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst_cb', $string);
     // check uc_digits case
     if (!$uc_digits) {
         if (preg_match_all("!\b([\p{L}]*[\p{N}]+[\p{L}]*)\b!" . Smarty::$_UTF8_MODIFIER, $string, $matches, PREG_OFFSET_CAPTURE)) {
-            foreach($matches[1] as $match) {
+            foreach ($matches[1] as $match) {
                 $upper_string = substr_replace($upper_string, strtolower($match[0]), $match[1], strlen($match[0]));
             }
-        } 
+        }
     }
-    $upper_string = preg_replace("!((^|\s)['\"])(\w)!e" . Smarty::$_UTF8_MODIFIER, "stripslashes('\\1').strtoupper(stripslashes('\\3'))", $upper_string);
+    $upper_string = preg_replace_callback("!((^|\s)['\"])(\w)!" . Smarty::$_UTF8_MODIFIER, 'smarty_mod_cap_ucfirst2_cb', $upper_string);
     return $upper_string;
-} 
+}
+
+/* 
+ *
+ * Bug: create_function() use exhausts memory when used in long loops
+ * Fix: use declared functions for callbacks instead of using create_function()
+ * Note: This can be fixed using anonymous functions instead, but that requires PHP >= 5.3
+ *
+ * @author Kyle Renfrow
+ */
+function smarty_mod_cap_mbconvert_cb($matches)
+{
+    return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[2]), MB_CASE_UPPER, Smarty::$_CHARSET);
+}
+
+function smarty_mod_cap_mbconvert2_cb($matches)
+{
+    return stripslashes($matches[1]) . mb_convert_case(stripslashes($matches[3]), MB_CASE_UPPER, Smarty::$_CHARSET);
+}
+
+function smarty_mod_cap_ucfirst_cb($matches)
+{
+    return stripslashes($matches[1]) . ucfirst(stripslashes($matches[2]));
+}
 
-?>
\ No newline at end of file
+function smarty_mod_cap_ucfirst2_cb($matches)
+{
+    return stripslashes($matches[1]) . ucfirst(stripslashes($matches[3]));
+}
index f3eaba057796a49fe1ad4467b9abecdaba60beea..5ad7540b154806a131f7c94c22d6fe37481b4eec 100644 (file)
@@ -1,14 +1,13 @@
 <?php
 /**
  * Smarty plugin
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsModifier
  */
 
 /**
  * Smarty date_format modifier plugin
- * 
  * Type:     modifier<br>
  * Name:     date_format<br>
  * Purpose:  format datestamps via strftime<br>
  *          - string: input date string
  *          - format: strftime format for output
  *          - default_date: default date if $string is empty
- * 
- * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com> 
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
  * @param string $string       input date string
  * @param string $format       strftime format for output
  * @param string $default_date default date if $string is empty
  * @param string $formatter    either 'strftime' or 'auto'
+ *
  * @return string |void
- * @uses smarty_make_timestamp()
+ * @uses   smarty_make_timestamp()
  */
-function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto')
+function smarty_modifier_date_format($string, $format = null, $default_date = '', $formatter = 'auto')
 {
     if ($format === null) {
         $format = Smarty::$_DATE_FORMAT;
     }
     /**
-    * Include the {@link shared.make_timestamp.php} plugin
-    */
+     * Include the {@link shared.make_timestamp.php} plugin
+     */
     require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
     if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
         $timestamp = smarty_make_timestamp($string);
@@ -41,25 +42,24 @@ function smarty_modifier_date_format($string, $format=null, $default_date='', $f
         $timestamp = smarty_make_timestamp($default_date);
     } else {
         return;
-    } 
-    if($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) {
+    }
+    if ($formatter == 'strftime' || ($formatter == 'auto' && strpos($format, '%') !== false)) {
         if (DS == '\\') {
             $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
             $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
             if (strpos($format, '%e') !== false) {
                 $_win_from[] = '%e';
                 $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
-            } 
+            }
             if (strpos($format, '%l') !== false) {
                 $_win_from[] = '%l';
                 $_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
-            } 
+            }
             $format = str_replace($_win_from, $_win_to, $format);
-        } 
+        }
+
         return strftime($format, $timestamp);
     } else {
         return date($format, $timestamp);
     }
-} 
-
-?>
\ No newline at end of file
+}
index fa44100e862b57cd99e2bbf76ebaa54868055ce2..66363d253208f0ec4551005322f7309a10895fac 100644 (file)
@@ -1,53 +1,54 @@
 <?php
 /**
  * Smarty plugin
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage Debug
  */
 
 /**
  * Smarty debug_print_var modifier plugin
- * 
  * Type:     modifier<br>
  * Name:     debug_print_var<br>
  * Purpose:  formats variable contents for display in the console
  *
- * @author Monte Ohrt <monte at ohrt dot com> 
- * @param array|object $var     variable to be formatted
- * @param integer      $depth   maximum recursion depth if $var is an array
- * @param integer      $length  maximum string length if $var is a string
- * @return string 
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param array|object $var    variable to be formatted
+ * @param integer      $depth  maximum recursion depth if $var is an array
+ * @param integer      $length maximum string length if $var is a string
+ *
+ * @return string
  */
-function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
+function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
 {
     $_replace = array("\n" => '<i>\n</i>',
-        "\r" => '<i>\r</i>',
-        "\t" => '<i>\t</i>'
-        );
+                      "\r" => '<i>\r</i>',
+                      "\t" => '<i>\t</i>'
+    );
 
     switch (gettype($var)) {
         case 'array' :
             $results = '<b>Array (' . count($var) . ')</b>';
             foreach ($var as $curr_key => $curr_val) {
                 $results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
-                 . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
-                 . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
-                $depth--;
-            } 
+                    . '<b>' . strtr($curr_key, $_replace) . '</b> =&gt; '
+                    . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
+                $depth --;
+            }
             break;
-            
+
         case 'object' :
             $object_vars = get_object_vars($var);
             $results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>';
             foreach ($object_vars as $curr_key => $curr_val) {
                 $results .= '<br>' . str_repeat('&nbsp;', $depth * 2)
-                 . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
-                 . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
-                $depth--;
-            } 
+                    . '<b> -&gt;' . strtr($curr_key, $_replace) . '</b> = '
+                    . smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
+                $depth --;
+            }
             break;
-            
+
         case 'boolean' :
         case 'NULL' :
         case 'resource' :
@@ -59,15 +60,15 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
                 $results = 'null';
             } else {
                 $results = htmlspecialchars((string) $var);
-            } 
+            }
             $results = '<i>' . $results . '</i>';
             break;
-            
+
         case 'integer' :
         case 'float' :
             $results = htmlspecialchars((string) $var);
             break;
-            
+
         case 'string' :
             $results = strtr($var, $_replace);
             if (Smarty::$_MBSTRING) {
@@ -82,7 +83,7 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
 
             $results = htmlspecialchars('"' . $results . '"');
             break;
-            
+
         case 'unknown type' :
         default :
             $results = strtr((string) $var, $_replace);
@@ -95,11 +96,9 @@ function smarty_modifier_debug_print_var ($var, $depth = 0, $length = 40)
                     $results = substr($results, 0, $length - 3) . '...';
                 }
             }
-             
+
             $results = htmlspecialchars($results);
-    } 
+    }
 
     return $results;
-} 
-
-?>
\ No newline at end of file
+}
index 32d185fcee6c9e5164baeeb008e7a6a597785a98..f253726019022017e5411b830c4d7a0465192974 100644 (file)
@@ -2,23 +2,24 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsModifier
  */
 
 /**
  * Smarty escape modifier plugin
- *
  * Type:     modifier<br>
  * Name:     escape<br>
  * Purpose:  escape string for output
  *
- * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
+ * @link   http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
  * @author Monte Ohrt <monte at ohrt dot com>
+ *
  * @param string  $string        input string
  * @param string  $esc_type      escape type
  * @param string  $char_set      character set, used for htmlspecialchars() or htmlentities()
  * @param boolean $double_encode encode already encoded entitites again, used for htmlspecialchars() or htmlentities()
+ *
  * @return string escaped input string
  */
 function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
@@ -27,7 +28,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
     if ($_double_encode === null) {
         $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
     }
-    
+
     if (!$char_set) {
         $char_set = Smarty::$_CHARSET;
     }
@@ -39,13 +40,14 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
                 return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
             } else {
                 if ($double_encode) {
-                    // php <5.3.2 - only handle double encoding
+                    // php <5.2.3 - only handle double encoding
                     return htmlspecialchars($string, ENT_QUOTES, $char_set);
                 } else {
-                    // php <5.3.2 - prevent double encoding
+                    // php <5.2.3 - prevent double encoding
                     $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
                     $string = htmlspecialchars($string, ENT_QUOTES, $char_set);
                     $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
                     return $string;
                 }
             }
@@ -58,17 +60,18 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
                     $string = htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
                 } else {
                     if ($double_encode) {
-                        // php <5.3.2 - only handle double encoding
+                        // php <5.2.3 - only handle double encoding
                         $string = htmlspecialchars($string, ENT_QUOTES, $char_set);
                     } else {
-                        // php <5.3.2 - prevent double encoding
+                        // php <5.2.3 - prevent double encoding
                         $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
                         $string = htmlspecialchars($string, ENT_QUOTES, $char_set);
                         $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
                         return $string;
                     }
                 }
-                
+
                 // htmlentities() won't convert everything, so use mb_convert_encoding
                 return mb_convert_encoding($string, 'HTML-ENTITIES', $char_set);
             }
@@ -83,6 +86,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
                     $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
                     $string = htmlentities($string, ENT_QUOTES, $char_set);
                     $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
+
                     return $string;
                 }
             }
@@ -102,9 +106,10 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
             // Note that the UTF-8 encoded character Ã¤ will be represented as %c3%a4
             $return = '';
             $_length = strlen($string);
-            for ($x = 0; $x < $_length; $x++) {
+            for ($x = 0; $x < $_length; $x ++) {
                 $return .= '%' . bin2hex($string[$x]);
             }
+
             return $return;
 
         case 'hexentity':
@@ -115,13 +120,15 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
                 foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
                     $return .= '&#x' . strtoupper(dechex($unicode)) . ';';
                 }
+
                 return $return;
             }
             // no MBString fallback
             $_length = strlen($string);
-            for ($x = 0; $x < $_length; $x++) {
+            for ($x = 0; $x < $_length; $x ++) {
                 $return .= '&#x' . bin2hex($string[$x]) . ';';
             }
+
             return $return;
 
         case 'decentity':
@@ -132,13 +139,15 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
                 foreach (smarty_mb_to_unicode($string, Smarty::$_CHARSET) as $unicode) {
                     $return .= '&#' . $unicode . ';';
                 }
+
                 return $return;
             }
             // no MBString fallback
             $_length = strlen($string);
-            for ($x = 0; $x < $_length; $x++) {
+            for ($x = 0; $x < $_length; $x ++) {
                 $return .= '&#' . ord($string[$x]) . ';';
             }
+
             return $return;
 
         case 'javascript':
@@ -148,6 +157,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
         case 'mail':
             if (Smarty::$_MBSTRING) {
                 require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
+
                 return smarty_mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string);
             }
             // no MBString fallback
@@ -165,11 +175,12 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
                         $return .= chr($unicode);
                     }
                 }
+
                 return $return;
             }
 
             $_length = strlen($string);
-            for ($_i = 0; $_i < $_length; $_i++) {
+            for ($_i = 0; $_i < $_length; $_i ++) {
                 $_ord = ord(substr($string, $_i, 1));
                 // non-standard char, escape it
                 if ($_ord >= 126) {
@@ -178,11 +189,10 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
                     $return .= substr($string, $_i, 1);
                 }
             }
+
             return $return;
 
         default:
             return $string;
     }
 }
-
-?>
\ No newline at end of file
index f9fd5fa5324a41a241bfddd42a8cb5e91a6806b4..abb1ff548c8e604e9309e953cffbb98dc878fc01 100644 (file)
@@ -2,39 +2,42 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsModifier
  */
 
 /**
  * Smarty regex_replace modifier plugin
- *
  * Type:     modifier<br>
  * Name:     regex_replace<br>
  * Purpose:  regular expression search/replace
  *
- * @link http://smarty.php.net/manual/en/language.modifier.regex.replace.php
+ * @link    http://smarty.php.net/manual/en/language.modifier.regex.replace.php
  *          regex_replace (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @param string       $string   input string
- * @param string|array $search   regular expression(s) to search for
- * @param string|array $replace  string(s) that should be replaced
+ * @author  Monte Ohrt <monte at ohrt dot com>
+ *
+ * @param string       $string  input string
+ * @param string|array $search  regular expression(s) to search for
+ * @param string|array $replace string(s) that should be replaced
+ *
  * @return string
  */
 function smarty_modifier_regex_replace($string, $search, $replace)
 {
-    if(is_array($search)) {
-        foreach($search as $idx => $s) {
+    if (is_array($search)) {
+        foreach ($search as $idx => $s) {
             $search[$idx] = _smarty_regex_replace_check($s);
         }
     } else {
         $search = _smarty_regex_replace_check($search);
     }
+
     return preg_replace($search, $replace, $string);
 }
 
 /**
  * @param  string $search string(s) that should be replaced
+ *
  * @return string
  * @ignore
  */
@@ -42,14 +45,13 @@ function _smarty_regex_replace_check($search)
 {
     // null-byte injection detection
     // anything behind the first null-byte is ignored
-    if (($pos = strpos($search,"\0")) !== false) {
-        $search = substr($search,0,$pos);
+    if (($pos = strpos($search, "\0")) !== false) {
+        $search = substr($search, 0, $pos);
     }
     // remove eval-modifier from $search
     if (preg_match('!([a-zA-Z\s]+)$!s', $search, $match) && (strpos($match[1], 'e') !== false)) {
-        $search = substr($search, 0, -strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
+        $search = substr($search, 0, - strlen($match[1])) . preg_replace('![e\s]+!', '', $match[1]);
     }
+
     return $search;
 }
-
-?>
\ No newline at end of file
index 4d71a6e9b2e339cfee5639251dfc0e1b04544acc..aa5e8570b6e498f71fb9ecc616b06cac98962683 100644 (file)
@@ -1,33 +1,34 @@
 <?php
 /**
  * Smarty plugin
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsModifier
  */
 
 /**
  * Smarty replace modifier plugin
- * 
  * Type:     modifier<br>
  * Name:     replace<br>
  * Purpose:  simple search/replace
- * 
- * @link http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com> 
- * @author Uwe Tews 
+ *
+ * @link   http://smarty.php.net/manual/en/language.modifier.replace.php replace (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ *
  * @param string $string  input string
  * @param string $search  text to search for
  * @param string $replace replacement text
- * @return string 
+ *
+ * @return string
  */
 function smarty_modifier_replace($string, $search, $replace)
 {
     if (Smarty::$_MBSTRING) {
         require_once(SMARTY_PLUGINS_DIR . 'shared.mb_str_replace.php');
+
         return smarty_mb_str_replace($search, $replace, $string);
     }
-    
-    return str_replace($search, $replace, $string);
-} 
 
-?>
\ No newline at end of file
+    return str_replace($search, $replace, $string);
+}
index a907232ff879b622690c31045fa3dc2df2f17bfa..e5c41ad8b5ab8cc3fa493f23613cde31b630ef05 100644 (file)
@@ -1,27 +1,27 @@
 <?php
 /**
  * Smarty plugin
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage PluginsModifier
  */
 
 /**
  * Smarty spacify modifier plugin
- * 
  * Type:     modifier<br>
  * Name:     spacify<br>
  * Purpose:  add spaces between characters in a string
- * 
- * @link http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com> 
+ *
+ * @link   http://smarty.php.net/manual/en/language.modifier.spacify.php spacify (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
  * @param string $string       input string
  * @param string $spacify_char string to insert between characters.
+ *
  * @return string
  */
 function smarty_modifier_spacify($string, $spacify_char = ' ')
 {
     // well… what about charsets besides latin and UTF-8?
-    return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, -1, PREG_SPLIT_NO_EMPTY));
-} 
-
-?>
\ No newline at end of file
+    return implode($spacify_char, preg_split('//' . Smarty::$_UTF8_MODIFIER, $string, - 1, PREG_SPLIT_NO_EMPTY));
+}
index 9a803ec992d113a5c192d3270aba982223cda22f..fbe62e823fb98754558ea39ae5e3dfbf8989c250 100644 (file)
@@ -2,58 +2,63 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsModifier
  */
+
 /**
  * Smarty truncate modifier plugin
- * 
  * Type:     modifier<br>
  * Name:     truncate<br>
  * Purpose:  Truncate a string to a certain length if necessary,
  *               optionally splitting in the middle of a word, and
  *               appending the $etc string or inserting $etc into the middle.
- * 
- * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com> 
+ *
+ * @link   http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ *
  * @param string  $string      input string
  * @param integer $length      length of truncated text
  * @param string  $etc         end string
  * @param boolean $break_words truncate at word boundary
  * @param boolean $middle      truncate in the middle of text
+ *
  * @return string truncated string
  */
-function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false) {
-    if ($length == 0)
+function smarty_modifier_truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
+{
+    if ($length == 0) {
         return '';
+    }
 
     if (Smarty::$_MBSTRING) {
         if (mb_strlen($string, Smarty::$_CHARSET) > $length) {
             $length -= min($length, mb_strlen($etc, Smarty::$_CHARSET));
             if (!$break_words && !$middle) {
                 $string = preg_replace('/\s+?(\S+)?$/' . Smarty::$_UTF8_MODIFIER, '', mb_substr($string, 0, $length + 1, Smarty::$_CHARSET));
-            } 
+            }
             if (!$middle) {
                 return mb_substr($string, 0, $length, Smarty::$_CHARSET) . $etc;
             }
+
             return mb_substr($string, 0, $length / 2, Smarty::$_CHARSET) . $etc . mb_substr($string, - $length / 2, $length, Smarty::$_CHARSET);
         }
+
         return $string;
     }
-    
+
     // no MBString fallback
     if (isset($string[$length])) {
         $length -= min($length, strlen($etc));
         if (!$break_words && !$middle) {
             $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
-        } 
+        }
         if (!$middle) {
             return substr($string, 0, $length) . $etc;
         }
+
         return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
     }
-    return $string;
-} 
 
-?>
\ No newline at end of file
+    return $string;
+}
index 1cfe6308a18bf2606a49e964991b254454773e25..db9d81fbfa835cff118162c3c17da8610dfee6b8 100644 (file)
@@ -1,30 +1,29 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty cat modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     cat<br>\r
- * Date:     Feb 24, 2003<br>\r
- * Purpose:  catenate a value to a variable<br>\r
- * Input:    string to catenate<br>\r
- * Example:  {$var|cat:"foo"}\r
- *\r
- * @link http://smarty.php.net/manual/en/language.modifier.cat.php cat\r
- *          (Smarty online manual)\r
- * @author   Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_cat($params, $compiler)\r
-{\r
-    return '('.implode(').(', $params).')';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty cat modifier plugin
+ * Type:     modifier<br>
+ * Name:     cat<br>
+ * Date:     Feb 24, 2003<br>
+ * Purpose:  catenate a value to a variable<br>
+ * Input:    string to catenate<br>
+ * Example:  {$var|cat:"foo"}
+ *
+ * @link     http://smarty.php.net/manual/en/language.modifier.cat.php cat
+ *           (Smarty online manual)
+ * @author   Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_cat($params)
+{
+    return '(' . implode(').(', $params) . ')';
+}
index 98e8efa0de647745434db141055be0c6f1e4b1c5..f8463d80a6b9a5258c00d4850c0aeaf19c19a09e 100644 (file)
@@ -1,33 +1,32 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty count_characters modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     count_characteres<br>\r
- * Purpose:  count the number of characters in a text\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_count_characters($params, $compiler)\r
-{\r
-    if (!isset($params[1]) || $params[1] != 'true') {\r
-        return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)';\r
-    }\r
-    if (Smarty::$_MBSTRING) {\r
-        return 'mb_strlen(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';\r
-    }\r
-    // no MBString fallback\r
-    return 'strlen(' . $params[0] . ')';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty count_characters modifier plugin
+ * Type:     modifier<br>
+ * Name:     count_characteres<br>
+ * Purpose:  count the number of characters in a text
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.count.characters.php count_characters (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_count_characters($params)
+{
+    if (!isset($params[1]) || $params[1] != 'true') {
+        return 'preg_match_all(\'/[^\s]/' . Smarty::$_UTF8_MODIFIER . '\',' . $params[0] . ', $tmp)';
+    }
+    if (Smarty::$_MBSTRING) {
+        return 'mb_strlen(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
+    }
+    // no MBString fallback
+    return 'strlen(' . $params[0] . ')';
+}
index 0e1b0af83af8a75b402cad4949da3be808e6b1a1..34f0bbb8acb4d8ea15398e1ea49e3afad3ba9c6d 100644 (file)
@@ -1,28 +1,27 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty count_paragraphs modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     count_paragraphs<br>\r
- * Purpose:  count the number of paragraphs in a text\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php\r
- *          count_paragraphs (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_count_paragraphs($params, $compiler)\r
-{\r
-    // count \r or \n characters\r
-    return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty count_paragraphs modifier plugin
+ * Type:     modifier<br>
+ * Name:     count_paragraphs<br>
+ * Purpose:  count the number of paragraphs in a text
+ *
+ * @link    http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
+ *          count_paragraphs (Smarty online manual)
+ * @author  Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_count_paragraphs($params)
+{
+    // count \r or \n characters
+    return '(preg_match_all(\'#[\r\n]+#\', ' . $params[0] . ', $tmp)+1)';
+}
index 2f517be96f185f2359450f4f5e9c0f47bf4f60cf..f1ec560078c1e0200066db0b2224c1e783762bff 100644 (file)
@@ -1,28 +1,27 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty count_sentences modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     count_sentences\r
- * Purpose:  count the number of sentences in a text\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php\r
- *          count_sentences (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_count_sentences($params, $compiler)\r
-{\r
-    // find periods, question marks, exclamation marks with a word before but not after.\r
-    return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty count_sentences modifier plugin
+ * Type:     modifier<br>
+ * Name:     count_sentences
+ * Purpose:  count the number of sentences in a text
+ *
+ * @link    http://www.smarty.net/manual/en/language.modifier.count.paragraphs.php
+ *          count_sentences (Smarty online manual)
+ * @author  Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_count_sentences($params)
+{
+    // find periods, question marks, exclamation marks with a word before but not after.
+    return 'preg_match_all("#\w[\.\?\!](\W|$)#S' . Smarty::$_UTF8_MODIFIER . '", ' . $params[0] . ', $tmp)';
+}
index e05738c01e8523dacef26a1fcfe6976a137bdccb..8b4330f1e25d678ee98c14b9bcc3f1282d03ea38 100644 (file)
@@ -1,32 +1,31 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty count_words modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     count_words<br>\r
- * Purpose:  count the number of words in a text\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
-*/\r
-function smarty_modifiercompiler_count_words($params, $compiler)\r
-{\r
-    if (Smarty::$_MBSTRING) {\r
-        // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';\r
-        // expression taken from http://de.php.net/manual/en/function.str-word-count.php#85592\r
-        return 'preg_match_all(\'/\p{L}[\p{L}\p{Mn}\p{Pd}\\\'\x{2019}]*/' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';\r
-    }\r
-    // no MBString fallback\r
-    return 'str_word_count(' . $params[0] . ')';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty count_words modifier plugin
+ * Type:     modifier<br>
+ * Name:     count_words<br>
+ * Purpose:  count the number of words in a text
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.count.words.php count_words (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_count_words($params)
+{
+    if (Smarty::$_MBSTRING) {
+        // return 'preg_match_all(\'#[\w\pL]+#' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';
+        // expression taken from http://de.php.net/manual/en/function.str-word-count.php#85592
+        return 'preg_match_all(\'/\p{L}[\p{L}\p{Mn}\p{Pd}\\\'\x{2019}]*/' . Smarty::$_UTF8_MODIFIER . '\', ' . $params[0] . ', $tmp)';
+    }
+    // no MBString fallback
+    return 'str_word_count(' . $params[0] . ')';
+}
index 4f831a5894665f3ed97fe3279123e756fdc0ec38..fe777623e538ed90c4d55f55bc838027570e2b12 100644 (file)
@@ -1,35 +1,35 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty default modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     default<br>\r
- * Purpose:  designate default value for empty variables\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_default ($params, $compiler)\r
-{\r
-    $output = $params[0];\r
-    if (!isset($params[1])) {\r
-        $params[1] = "''";\r
-    }\r
-    \r
-    array_shift($params);\r
-    foreach ($params as $param) {\r
-        $output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $param . ' : $tmp)';\r
-    }\r
-    return $output;\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty default modifier plugin
+ * Type:     modifier<br>
+ * Name:     default<br>
+ * Purpose:  designate default value for empty variables
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.default.php default (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_default($params)
+{
+    $output = $params[0];
+    if (!isset($params[1])) {
+        $params[1] = "''";
+    }
+
+    array_shift($params);
+    foreach ($params as $param) {
+        $output = '(($tmp = @' . $output . ')===null||$tmp===\'\' ? ' . $param . ' : $tmp)';
+    }
+
+    return $output;
+}
index 48b74d140cc727fcbce8b871325a0d77123d2b81..7e848aaec0e33292245f6af14a1961ecada01097 100644 (file)
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * @ignore\r
- */\r
-require_once( SMARTY_PLUGINS_DIR .'shared.literal_compiler_param.php' );\r
-\r
-/**\r
- * Smarty escape modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     escape<br>\r
- * Purpose:  escape string for output\r
- *\r
- * @link http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)\r
- * @author Rodney Rehm\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_escape($params, $compiler)\r
-{\r
-    static $_double_encode = null;\r
-    if ($_double_encode === null) {\r
-        $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');\r
-    }\r
-    \r
-    try {\r
-        $esc_type = smarty_literal_compiler_param($params, 1, 'html');\r
-        $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET);\r
-        $double_encode = smarty_literal_compiler_param($params, 3, true);\r
-\r
-        if (!$char_set) {\r
-            $char_set = Smarty::$_CHARSET;\r
-        }\r
-\r
-        switch ($esc_type) {\r
-            case 'html':\r
-                if ($_double_encode) {\r
-                    return 'htmlspecialchars('\r
-                        . $params[0] .', ENT_QUOTES, '\r
-                        . var_export($char_set, true) . ', '\r
-                        . var_export($double_encode, true) . ')';\r
-                } else if ($double_encode) {\r
-                    return 'htmlspecialchars('\r
-                        . $params[0] .', ENT_QUOTES, '\r
-                        . var_export($char_set, true) . ')';\r
-                } else {\r
-                    // fall back to modifier.escape.php\r
-                }\r
-\r
-            case 'htmlall':\r
-                if (Smarty::$_MBSTRING) {\r
-                    if ($_double_encode) {\r
-                        // php >=5.3.2 - go native\r
-                        return 'mb_convert_encoding(htmlspecialchars('\r
-                            . $params[0] .', ENT_QUOTES, '\r
-                            . var_export($char_set, true) . ', '\r
-                            . var_export($double_encode, true)\r
-                            . '), "HTML-ENTITIES", '\r
-                            . var_export($char_set, true) . ')';\r
-                    } else if ($double_encode) {\r
-                        // php <5.3.2 - only handle double encoding\r
-                        return 'mb_convert_encoding(htmlspecialchars('\r
-                            . $params[0] .', ENT_QUOTES, '\r
-                            . var_export($char_set, true)\r
-                            . '), "HTML-ENTITIES", '\r
-                            . var_export($char_set, true) . ')';\r
-                    } else {\r
-                        // fall back to modifier.escape.php\r
-                    }\r
-                }\r
-\r
-                // no MBString fallback\r
-                if ($_double_encode) {\r
-                    // php >=5.3.2 - go native\r
-                    return 'htmlentities('\r
-                        . $params[0] .', ENT_QUOTES, '\r
-                        . var_export($char_set, true) . ', '\r
-                        . var_export($double_encode, true) . ')';\r
-                } else if ($double_encode) {\r
-                    // php <5.3.2 - only handle double encoding\r
-                    return 'htmlentities('\r
-                        . $params[0] .', ENT_QUOTES, '\r
-                        . var_export($char_set, true) . ')';\r
-                } else {\r
-                    // fall back to modifier.escape.php\r
-                }\r
-\r
-            case 'url':\r
-                return 'rawurlencode(' . $params[0] . ')';\r
-\r
-            case 'urlpathinfo':\r
-                return 'str_replace("%2F", "/", rawurlencode(' . $params[0] . '))';\r
-\r
-            case 'quotes':\r
-                // escape unescaped single quotes\r
-                return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[0] . ')';\r
-\r
-            case 'javascript':\r
-                // escape quotes and backslashes, newlines, etc.\r
-                return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))';\r
-\r
-        }\r
-    } catch(SmartyException $e) {\r
-        // pass through to regular plugin fallback\r
-    }\r
-\r
-    // could not optimize |escape call, so fallback to regular plugin\r
-    if ($compiler->tag_nocache | $compiler->nocache) {\r
-        $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php';\r
-        $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';\r
-    } else {\r
-        $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR .'modifier.escape.php';\r
-        $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';\r
-    }\r
-    return 'smarty_modifier_escape(' . join( ', ', $params ) . ')';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * @ignore
+ */
+require_once(SMARTY_PLUGINS_DIR . 'shared.literal_compiler_param.php');
+
+/**
+ * Smarty escape modifier plugin
+ * Type:     modifier<br>
+ * Name:     escape<br>
+ * Purpose:  escape string for output
+ *
+ * @link   http://www.smarty.net/docsv2/en/language.modifier.escape count_characters (Smarty online manual)
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ * @param       $compiler
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_escape($params, $compiler)
+{
+    static $_double_encode = null;
+    if ($_double_encode === null) {
+        $_double_encode = version_compare(PHP_VERSION, '5.2.3', '>=');
+    }
+
+    try {
+        $esc_type = smarty_literal_compiler_param($params, 1, 'html');
+        $char_set = smarty_literal_compiler_param($params, 2, Smarty::$_CHARSET);
+        $double_encode = smarty_literal_compiler_param($params, 3, true);
+
+        if (!$char_set) {
+            $char_set = Smarty::$_CHARSET;
+        }
+
+        switch ($esc_type) {
+            case 'html':
+                if ($_double_encode) {
+                    return 'htmlspecialchars('
+                    . $params[0] . ', ENT_QUOTES, '
+                    . var_export($char_set, true) . ', '
+                    . var_export($double_encode, true) . ')';
+                } elseif ($double_encode) {
+                    return 'htmlspecialchars('
+                    . $params[0] . ', ENT_QUOTES, '
+                    . var_export($char_set, true) . ')';
+                } else {
+                    // fall back to modifier.escape.php
+                }
+
+            case 'htmlall':
+                if (Smarty::$_MBSTRING) {
+                    if ($_double_encode) {
+                        // php >=5.2.3 - go native
+                        return 'mb_convert_encoding(htmlspecialchars('
+                        . $params[0] . ', ENT_QUOTES, '
+                        . var_export($char_set, true) . ', '
+                        . var_export($double_encode, true)
+                        . '), "HTML-ENTITIES", '
+                        . var_export($char_set, true) . ')';
+                    } elseif ($double_encode) {
+                        // php <5.2.3 - only handle double encoding
+                        return 'mb_convert_encoding(htmlspecialchars('
+                        . $params[0] . ', ENT_QUOTES, '
+                        . var_export($char_set, true)
+                        . '), "HTML-ENTITIES", '
+                        . var_export($char_set, true) . ')';
+                    } else {
+                        // fall back to modifier.escape.php
+                    }
+                }
+
+                // no MBString fallback
+                if ($_double_encode) {
+                    // php >=5.2.3 - go native
+                    return 'htmlentities('
+                    . $params[0] . ', ENT_QUOTES, '
+                    . var_export($char_set, true) . ', '
+                    . var_export($double_encode, true) . ')';
+                } elseif ($double_encode) {
+                    // php <5.2.3 - only handle double encoding
+                    return 'htmlentities('
+                    . $params[0] . ', ENT_QUOTES, '
+                    . var_export($char_set, true) . ')';
+                } else {
+                    // fall back to modifier.escape.php
+                }
+
+            case 'url':
+                return 'rawurlencode(' . $params[0] . ')';
+
+            case 'urlpathinfo':
+                return 'str_replace("%2F", "/", rawurlencode(' . $params[0] . '))';
+
+            case 'quotes':
+                // escape unescaped single quotes
+                return 'preg_replace("%(?<!\\\\\\\\)\'%", "\\\'",' . $params[0] . ')';
+
+            case 'javascript':
+                // escape quotes and backslashes, newlines, etc.
+                return 'strtr(' . $params[0] . ', array("\\\\" => "\\\\\\\\", "\'" => "\\\\\'", "\"" => "\\\\\"", "\\r" => "\\\\r", "\\n" => "\\\n", "</" => "<\/" ))';
+        }
+    }
+    catch (SmartyException $e) {
+        // pass through to regular plugin fallback
+    }
+
+    // could not optimize |escape call, so fallback to regular plugin
+    if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
+        $compiler->template->required_plugins['nocache']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
+        $compiler->template->required_plugins['nocache']['escape']['modifier']['function'] = 'smarty_modifier_escape';
+    } else {
+        $compiler->template->required_plugins['compiled']['escape']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'modifier.escape.php';
+        $compiler->template->required_plugins['compiled']['escape']['modifier']['function'] = 'smarty_modifier_escape';
+    }
+
+    return 'smarty_modifier_escape(' . join(', ', $params) . ')';
+}
index 93b568a5a87f11a4b14b4e9bfe6e56985145755e..dab43e9c3b9f2463fc236f408155e070a46e6bce 100644 (file)
@@ -1,34 +1,33 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty from_charset modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     from_charset<br>\r
- * Purpose:  convert character encoding from $charset to internal encoding\r
- *\r
- * @author Rodney Rehm\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_from_charset($params, $compiler)\r
-{\r
-    if (!Smarty::$_MBSTRING) {\r
-        // FIXME: (rodneyrehm) shouldn't this throw an error?\r
-        return $params[0];\r
-    }\r
-\r
-    if (!isset($params[1])) {\r
-        $params[1] = '"ISO-8859-1"';\r
-    }\r
-\r
-    return 'mb_convert_encoding(' . $params[0] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[1] . ')';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty from_charset modifier plugin
+ * Type:     modifier<br>
+ * Name:     from_charset<br>
+ * Purpose:  convert character encoding from $charset to internal encoding
+ *
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_from_charset($params)
+{
+    if (!Smarty::$_MBSTRING) {
+        // FIXME: (rodneyrehm) shouldn't this throw an error?
+        return $params[0];
+    }
+
+    if (!isset($params[1])) {
+        $params[1] = '"ISO-8859-1"';
+    }
+
+    return 'mb_convert_encoding(' . $params[0] . ', "' . addslashes(Smarty::$_CHARSET) . '", ' . $params[1] . ')';
+}
index 020c4fdb35c9636477d24d6861d26ed335ae3ac9..e3ca2082103114a8c11bef3b375ed69710be3a06 100644 (file)
@@ -1,32 +1,33 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty indent modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     indent<br>\r
- * Purpose:  indent lines of text\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-\r
-function smarty_modifiercompiler_indent($params, $compiler)\r
-{\r
-    if (!isset($params[1])) {\r
-        $params[1] = 4;\r
-    }\r
-    if (!isset($params[2])) {\r
-        $params[2] = "' '";\r
-    }\r
-    return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty indent modifier plugin
+ * Type:     modifier<br>
+ * Name:     indent<br>
+ * Purpose:  indent lines of text
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.indent.php indent (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+
+function smarty_modifiercompiler_indent($params)
+{
+    if (!isset($params[1])) {
+        $params[1] = 4;
+    }
+    if (!isset($params[2])) {
+        $params[2] = "' '";
+    }
+
+    return 'preg_replace(\'!^!m\',str_repeat(' . $params[2] . ',' . $params[1] . '),' . $params[0] . ')';
+}
index 1845cc1d2b387a137fc3eede6ca679f6eec2a848..1d255f371db6568ae6b9416942d46aecc56ff982 100644 (file)
@@ -1,31 +1,31 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty lower modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     lower<br>\r
- * Purpose:  convert string to lowercase\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)\r
- * @author Monte Ohrt <monte at ohrt dot com>\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-\r
-function smarty_modifiercompiler_lower($params, $compiler)\r
-{\r
-    if (Smarty::$_MBSTRING) {\r
-        return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ;\r
-    }\r
-    // no MBString fallback\r
-    return 'strtolower(' . $params[0] . ')';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty lower modifier plugin
+ * Type:     modifier<br>
+ * Name:     lower<br>
+ * Purpose:  convert string to lowercase
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.lower.php lower (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+
+function smarty_modifiercompiler_lower($params)
+{
+    if (Smarty::$_MBSTRING) {
+        return 'mb_strtolower(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
+    }
+    // no MBString fallback
+    return 'strtolower(' . $params[0] . ')';
+}
index 3ca26571af0557c8ae038de4f9bd84ceaae13c6d..4906908b42c7b2b425c32a7c6e977e7c313c46bb 100644 (file)
@@ -1,25 +1,21 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty noprint modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     noprint<br>\r
- * Purpose:  return an empty string\r
- *\r
- * @author   Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_noprint($params, $compiler)\r
-{\r
-    return "''";\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty noprint modifier plugin
+ * Type:     modifier<br>
+ * Name:     noprint<br>
+ * Purpose:  return an empty string
+ *
+ * @author   Uwe Tews
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_noprint()
+{
+    return "''";
+}
index 83345977b766be9cf209bfbacd7345dde1c6c8d1..71cdf281983a77c40c2a5fd5bcac1a3f725449cb 100644 (file)
@@ -1,26 +1,25 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty string_format modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     string_format<br>\r
- * Purpose:  format strings via sprintf\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_string_format($params, $compiler)\r
-{\r
-    return 'sprintf(' . $params[1] . ',' . $params[0] . ')';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty string_format modifier plugin
+ * Type:     modifier<br>
+ * Name:     string_format<br>
+ * Purpose:  format strings via sprintf
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.string.format.php string_format (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_string_format($params)
+{
+    return 'sprintf(' . $params[1] . ',' . $params[0] . ')';
+}
index f1d5db045588b99613a46bb5dc7286d2c473e70c..fcd6cbaea2cc76b941e04131d3de6daf4bbb26f2 100644 (file)
@@ -1,33 +1,33 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty strip modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     strip<br>\r
- * Purpose:  Replace all repeated spaces, newlines, tabs\r
- *              with a single space or supplied replacement string.<br>\r
- * Example:  {$var|strip} {$var|strip:"&nbsp;"}<br>\r
- * Date:     September 25th, 2002\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-\r
-function smarty_modifiercompiler_strip($params, $compiler)\r
-{\r
-    if (!isset($params[1])) {\r
-        $params[1] = "' '";\r
-    }\r
-    return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})";\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty strip modifier plugin
+ * Type:     modifier<br>
+ * Name:     strip<br>
+ * Purpose:  Replace all repeated spaces, newlines, tabs
+ *              with a single space or supplied replacement string.<br>
+ * Example:  {$var|strip} {$var|strip:"&nbsp;"}<br>
+ * Date:     September 25th, 2002
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.strip.php strip (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+
+function smarty_modifiercompiler_strip($params)
+{
+    if (!isset($params[1])) {
+        $params[1] = "' '";
+    }
+
+    return "preg_replace('!\s+!" . Smarty::$_UTF8_MODIFIER . "', {$params[1]},{$params[0]})";
+}
index 296a3a2da6985b119006bc39d5f6319b64bf1270..3e6e13048383725b3341d72c9137ae9f981fe589 100644 (file)
@@ -1,33 +1,29 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty strip_tags modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     strip_tags<br>\r
- * Purpose:  strip html tags from text\r
- *\r
- * @link http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)\r
- * @author Uwe Tews\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_strip_tags($params, $compiler)\r
-{\r
-   if (!isset($params[1])) {\r
-        $params[1] = true;\r
-    }\r
-    if ($params[1] === true) {\r
-        return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";\r
-    } else {\r
-        return 'strip_tags(' . $params[0] . ')';\r
-    }\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty strip_tags modifier plugin
+ * Type:     modifier<br>
+ * Name:     strip_tags<br>
+ * Purpose:  strip html tags from text
+ *
+ * @link   http://www.smarty.net/manual/en/language.modifier.strip.tags.php strip_tags (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_strip_tags($params)
+{
+    if (!isset($params[1]) || $params[1] === true || trim($params[1], '"') == 'true') {
+        return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
+    } else {
+        return 'strip_tags(' . $params[0] . ')';
+    }
+}
index f5cdf455fe9f9dfd5090350097f28444df3f61ad..9122d8bbbaea5f050e11bff544be95c94f94002b 100644 (file)
@@ -1,34 +1,33 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty to_charset modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     to_charset<br>\r
- * Purpose:  convert character encoding from internal encoding to $charset\r
- *\r
- * @author Rodney Rehm\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_to_charset($params, $compiler)\r
-{\r
-    if (!Smarty::$_MBSTRING) {\r
-        // FIXME: (rodneyrehm) shouldn't this throw an error?\r
-        return $params[0];\r
-    }\r
-\r
-    if (!isset($params[1])) {\r
-        $params[1] = '"ISO-8859-1"';\r
-    }\r
-\r
-    return 'mb_convert_encoding(' . $params[0] . ', ' . $params[1] . ', "' . addslashes(Smarty::$_CHARSET) . '")';\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty to_charset modifier plugin
+ * Type:     modifier<br>
+ * Name:     to_charset<br>
+ * Purpose:  convert character encoding from internal encoding to $charset
+ *
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_to_charset($params)
+{
+    if (!Smarty::$_MBSTRING) {
+        // FIXME: (rodneyrehm) shouldn't this throw an error?
+        return $params[0];
+    }
+
+    if (!isset($params[1])) {
+        $params[1] = '"ISO-8859-1"';
+    }
+
+    return 'mb_convert_encoding(' . $params[0] . ', ' . $params[1] . ', "' . addslashes(Smarty::$_CHARSET) . '")';
+}
index 4321ff18da52f5bd7f4717ae3a4b086c5798804e..3b17ea2e193d79b54012e3c9654a6ec0a38880f0 100644 (file)
@@ -1,51 +1,50 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty unescape modifier plugin\r
- *\r
- * Type:     modifier<br>\r
- * Name:     unescape<br>\r
- * Purpose:  unescape html entities\r
- *\r
- * @author Rodney Rehm\r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_unescape($params, $compiler)\r
-{\r
-    if (!isset($params[1])) {\r
-        $params[1] = 'html';\r
-    }\r
-    if (!isset($params[2])) {\r
-        $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\'';\r
-    } else {\r
-        $params[2] = "'" . $params[2] . "'";\r
-    }\r
-\r
-    switch (trim($params[1], '"\'')) {\r
-        case 'entity':\r
-        case 'htmlall':\r
-            if (Smarty::$_MBSTRING) {\r
-                return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')';\r
-            }\r
-\r
-            return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')';\r
-\r
-        case 'html':\r
-            return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)';\r
-\r
-        case 'url':\r
-            return 'rawurldecode(' . $params[0] . ')';\r
-\r
-        default:\r
-            return $params[0];\r
-    }\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty unescape modifier plugin
+ * Type:     modifier<br>
+ * Name:     unescape<br>
+ * Purpose:  unescape html entities
+ *
+ * @author Rodney Rehm
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_unescape($params)
+{
+    if (!isset($params[1])) {
+        $params[1] = 'html';
+    }
+    if (!isset($params[2])) {
+        $params[2] = '\'' . addslashes(Smarty::$_CHARSET) . '\'';
+    } else {
+        $params[2] = "'" . $params[2] . "'";
+    }
+
+    switch (trim($params[1], '"\'')) {
+        case 'entity':
+        case 'htmlall':
+            if (Smarty::$_MBSTRING) {
+                return 'mb_convert_encoding(' . $params[0] . ', ' . $params[2] . ', \'HTML-ENTITIES\')';
+            }
+
+            return 'html_entity_decode(' . $params[0] . ', ENT_NOQUOTES, ' . $params[2] . ')';
+
+        case 'html':
+            return 'htmlspecialchars_decode(' . $params[0] . ', ENT_QUOTES)';
+
+        case 'url':
+            return 'rawurldecode(' . $params[0] . ')';
+
+        default:
+            return $params[0];
+    }
+}
index f368e37dc3592332a7325d2e695158c34f90909b..52ca4e8ff4fda019d1f5234f3c1209aa1c7dbe38 100644 (file)
@@ -1,30 +1,29 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty upper modifier plugin\r
- * \r
- * Type:     modifier<br>\r
- * Name:     lower<br>\r
- * Purpose:  convert string to uppercase\r
- * \r
- * @link http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)\r
- * @author Uwe Tews \r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_upper($params, $compiler)\r
-{\r
-    if (Smarty::$_MBSTRING) {\r
-        return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')' ;\r
-    }\r
-    // no MBString fallback\r
-    return 'strtoupper(' . $params[0] . ')';\r
-} \r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty upper modifier plugin
+ * Type:     modifier<br>
+ * Name:     lower<br>
+ * Purpose:  convert string to uppercase
+ *
+ * @link   http://smarty.php.net/manual/en/language.modifier.upper.php lower (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_upper($params)
+{
+    if (Smarty::$_MBSTRING) {
+        return 'mb_strtoupper(' . $params[0] . ', \'' . addslashes(Smarty::$_CHARSET) . '\')';
+    }
+    // no MBString fallback
+    return 'strtoupper(' . $params[0] . ')';
+}
index f6845ad376f29e71de5ca06dd64a3272326d097c..2ad928ea1f3fbec80e802f9abf66183cd1fcb9bc 100644 (file)
@@ -1,46 +1,47 @@
-<?php\r
-/**\r
- * Smarty plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsModifierCompiler\r
- */\r
-\r
-/**\r
- * Smarty wordwrap modifier plugin\r
- * \r
- * Type:     modifier<br>\r
- * Name:     wordwrap<br>\r
- * Purpose:  wrap a string of text at a given length\r
- * \r
- * @link http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)\r
- * @author Uwe Tews \r
- * @param array $params parameters\r
- * @return string with compiled code\r
- */\r
-function smarty_modifiercompiler_wordwrap($params, $compiler)\r
-{\r
-    if (!isset($params[1])) {\r
-        $params[1] = 80;\r
-    } \r
-    if (!isset($params[2])) {\r
-        $params[2] = '"\n"';\r
-    } \r
-    if (!isset($params[3])) {\r
-        $params[3] = 'false';\r
-    } \r
-    $function = 'wordwrap';\r
-    if (Smarty::$_MBSTRING) {\r
-        if ($compiler->tag_nocache | $compiler->nocache) {\r
-            $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php';\r
-            $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';\r
-        } else {\r
-            $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR .'shared.mb_wordwrap.php';\r
-            $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';\r
-        }\r
-        $function = 'smarty_mb_wordwrap';\r
-    }\r
-    return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')';\r
-} \r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+
+/**
+ * Smarty wordwrap modifier plugin
+ * Type:     modifier<br>
+ * Name:     wordwrap<br>
+ * Purpose:  wrap a string of text at a given length
+ *
+ * @link   http://smarty.php.net/manual/en/language.modifier.wordwrap.php wordwrap (Smarty online manual)
+ * @author Uwe Tews
+ *
+ * @param array $params parameters
+ * @param       $compiler
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_wordwrap($params, $compiler)
+{
+    if (!isset($params[1])) {
+        $params[1] = 80;
+    }
+    if (!isset($params[2])) {
+        $params[2] = '"\n"';
+    }
+    if (!isset($params[3])) {
+        $params[3] = 'false';
+    }
+    $function = 'wordwrap';
+    if (Smarty::$_MBSTRING) {
+        if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
+            $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
+            $compiler->template->required_plugins['nocache']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
+        } else {
+            $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['file'] = SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
+            $compiler->template->required_plugins['compiled']['wordwrap']['modifier']['function'] = 'smarty_mb_wordwrap';
+        }
+        $function = 'smarty_mb_wordwrap';
+    }
+
+    return $function . '(' . $params[0] . ',' . $params[1] . ',' . $params[2] . ',' . $params[3] . ')';
+}
index 87cf8c781687264b99a658fb0834c7513c3c16b4..62ab4e776aa3143d34d86dcf827d7cf366d9d3bc 100644 (file)
@@ -2,22 +2,22 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsFilter
  */
 
 /**
  * Smarty trimwhitespace outputfilter plugin
- *
  * Trim unnecessary whitespace from HTML markup.
  *
  * @author   Rodney Rehm
- * @param string                   $source input string
- * @param Smarty_Internal_Template $smarty Smarty object
+ *
+ * @param string $source input string
+ *
  * @return string filtered output
- * @todo substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
+ * @todo     substr_replace() is not overloaded by mbstring.func_overload - so this function might fail!
  */
-function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $smarty)
+function smarty_outputfilter_trimwhitespace($source)
 {
     $store = array();
     $_store = 0;
@@ -35,13 +35,13 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
             $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
 
             $_offset += $_length - strlen($replace);
-            $_store++;
+            $_store ++;
         }
     }
 
     // Strip all HTML-Comments
     // yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124
-    $source = preg_replace( '#<!--.*?-->#ms', '', $source );
+    $source = preg_replace('#<!--.*?-->#ms', '', $source);
 
     // capture html elements not to be messed with
     $_offset = 0;
@@ -53,42 +53,38 @@ function smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $s
             $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
 
             $_offset += $_length - strlen($replace);
-            $_store++;
+            $_store ++;
         }
     }
 
     $expressions = array(
         // replace multiple spaces between tags by a single space
         // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements
-        '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
+        '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s'                            => '\1 \2',
         // remove spaces between attributes (but not in attribute values!)
         '#(([a-z0-9]\s*=\s*(["\'])[^\3]*?\3)|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \4',
         // note: for some very weird reason trim() seems to remove spaces inside attributes.
         // maybe a \0 byte or something is interfering?
-        '#^\s+<#Ss' => '<',
-        '#>\s+$#Ss' => '>',
+        '#^\s+<#Ss'                                                       => '<',
+        '#>\s+$#Ss'                                                       => '>',
     );
 
-    $source = preg_replace( array_keys($expressions), array_values($expressions), $source );
+    $source = preg_replace(array_keys($expressions), array_values($expressions), $source);
     // note: for some very weird reason trim() seems to remove spaces inside attributes.
     // maybe a \0 byte or something is interfering?
     // $source = trim( $source );
 
-    // capture html elements not to be messed with
     $_offset = 0;
     if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
         foreach ($matches as $match) {
-            $store[] = $match[0][0];
             $_length = strlen($match[0][0]);
-            $replace = array_shift($store);
+            $replace = $store[$match[1][0]];
             $source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length);
 
             $_offset += strlen($replace) - $_length;
-            $_store++;
+            $_store ++;
         }
     }
 
     return $source;
 }
-
-?>
\ No newline at end of file
index d2609b6748af38b7cc9934cebfb6067721815ef4..d3bd756b114ac9684022e22ee5c385372e2867ea 100644 (file)
@@ -2,20 +2,21 @@
 /**
  * Smarty shared plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsShared
  */
 
 if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
     /**
      * escape_special_chars common function
-     *
      * Function: smarty_function_escape_special_chars<br>
      * Purpose:  used by other smarty functions to escape
      *           special chars except for already escaped ones
      *
      * @author   Monte Ohrt <monte at ohrt dot com>
-     * @param string $string text that should by escaped
+     *
+     * @param  string $string text that should by escaped
+     *
      * @return string
      */
     function smarty_function_escape_special_chars($string)
@@ -23,18 +24,20 @@ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
         if (!is_array($string)) {
             $string = htmlspecialchars($string, ENT_COMPAT, Smarty::$_CHARSET, false);
         }
+
         return $string;
-    }  
-} else {         
+    }
+} else {
     /**
      * escape_special_chars common function
-     *
      * Function: smarty_function_escape_special_chars<br>
      * Purpose:  used by other smarty functions to escape
      *           special chars except for already escaped ones
      *
      * @author   Monte Ohrt <monte at ohrt dot com>
-     * @param string $string text that should by escaped
+     *
+     * @param  string $string text that should by escaped
+     *
      * @return string
      */
     function smarty_function_escape_special_chars($string)
@@ -42,10 +45,9 @@ if (version_compare(PHP_VERSION, '5.2.3', '>=')) {
         if (!is_array($string)) {
             $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
             $string = htmlspecialchars($string);
-            $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string); 
+            $string = str_replace(array('%%%SMARTY_START%%%', '%%%SMARTY_END%%%'), array('&', ';'), $string);
         }
-        return $string;
-    }                                                                                                             
-} 
 
-?>
\ No newline at end of file
+        return $string;
+    }
+}
index dbcd9374c354f93400563c0773c097c68e75589b..47d728a76dcf7543cec0429298e30c35ff0c2e9d 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsShared
  */
 
  * @param array   $params  parameter array as given to the compiler function
  * @param integer $index   array index of the parameter to convert
  * @param mixed   $default value to be returned if the parameter is not present
+ *
  * @return mixed evaluated value of parameter or $default
  * @throws SmartyException if parameter is not a literal (but an expression, variable, â€¦)
  * @author Rodney Rehm
  */
-function smarty_literal_compiler_param($params, $index, $default=null)
+function smarty_literal_compiler_param($params, $index, $default = null)
 {
     // not set, go default
     if (!isset($params[$index])) {
         return $default;
     }
     // test if param is a literal
-    if (!preg_match('/^([\'"]?)[a-zA-Z0-9]+(\\1)$/', $params[$index])) {
+    if (!preg_match('/^([\'"]?)[a-zA-Z0-9-]+(\\1)$/', $params[$index])) {
         throw new SmartyException('$param[' . $index . '] is not a literal and is thus not evaluatable at compile time');
     }
 
     $t = null;
     eval("\$t = " . $params[$index] . ";");
+
     return $t;
 }
index 5d7c97e9150082f2264dd9bff6138cade2e231ea..7c94e5f59d7cb68e19b9a6b18a0a8390f18699ba 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Smarty shared plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsShared
  */
 
@@ -11,7 +11,9 @@
  * Purpose:  used by other smarty functions to make a timestamp from a string.
  *
  * @author   Monte Ohrt <monte at ohrt dot com>
- * @param DateTime|int|string $string  date object, timestamp or string that can be converted using strtotime()
+ *
+ * @param DateTime|int|string $string date object, timestamp or string that can be converted using strtotime()
+ *
  * @return int
  */
 function smarty_make_timestamp($string)
@@ -23,20 +25,19 @@ function smarty_make_timestamp($string)
         return $string->getTimestamp();
     } elseif (strlen($string) == 14 && ctype_digit($string)) {
         // it is mysql timestamp format of YYYYMMDDHHMMSS?
-        return mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2),
-                       substr($string, 4, 2),substr($string, 6, 2),substr($string, 0, 4));
+        return mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2),
+                      substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4));
     } elseif (is_numeric($string)) {
         // it is a numeric string, we handle it as timestamp
         return (int) $string;
     } else {
         // strtotime should handle it
         $time = strtotime($string);
-        if ($time == -1 || $time === false) {
+        if ($time == - 1 || $time === false) {
             // strtotime() was not able to parse $string, use "now":
             return time();
         }
+
         return $time;
     }
 }
-
-?>
index ecafeb74a1ee75f4a77a809d20ea3022f3a23679..a5682ed30156c38d5c053809dfa627ccaeab2dfb 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Smarty shared plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsShared
  */
 if (!function_exists('smarty_mb_str_replace')) {
@@ -10,14 +10,15 @@ if (!function_exists('smarty_mb_str_replace')) {
     /**
      * Multibyte string replace
      *
-     * @param string $search  the string to be searched
-     * @param string $replace the replacement string
-     * @param string $subject the source string
-     * @param int    &$count  number of matches found
+     * @param  string $search  the string to be searched
+     * @param  string $replace the replacement string
+     * @param  string $subject the source string
+     * @param  int    &$count  number of matches found
+     *
      * @return string replaced string
      * @author Rodney Rehm
      */
-    function smarty_mb_str_replace($search, $replace, $subject, &$count=0)
+    function smarty_mb_str_replace($search, $replace, $subject, &$count = 0)
     {
         if (!is_array($search) && is_array($replace)) {
             return false;
@@ -25,7 +26,7 @@ if (!function_exists('smarty_mb_str_replace')) {
         if (is_array($subject)) {
             // call mb_replace for each single string in $subject
             foreach ($subject as &$string) {
-                $string = &smarty_mb_str_replace($search, $replace, $string, $c);
+                $string = & smarty_mb_str_replace($search, $replace, $string, $c);
                 $count += $c;
             }
         } elseif (is_array($search)) {
@@ -36,7 +37,7 @@ if (!function_exists('smarty_mb_str_replace')) {
                 }
             } else {
                 $n = max(count($search), count($replace));
-                while ($n--) {
+                while ($n --) {
                     $subject = smarty_mb_str_replace(current($search), current($replace), $subject, $c);
                     $count += $c;
                     next($search);
@@ -48,8 +49,7 @@ if (!function_exists('smarty_mb_str_replace')) {
             $count = count($parts) - 1;
             $subject = implode($replace, $parts);
         }
+
         return $subject;
     }
-
 }
-?>
\ No newline at end of file
index e7f839ec858a6aaa788c8881a6e0321108a556c2..0f790b56a875c0d09486da38b2872c71a7a588d6 100644 (file)
@@ -2,47 +2,53 @@
 /**
  * Smarty shared plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsShared
  */
 
 /**
  * convert characters to their decimal unicode equivalents
  *
- * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ * @link   http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ *
  * @param string $string   characters to calculate unicode of
  * @param string $encoding encoding of $string, if null mb_internal_encoding() is used
+ *
  * @return array sequence of unicodes
  * @author Rodney Rehm
  */
-function smarty_mb_to_unicode($string, $encoding=null) {
+function smarty_mb_to_unicode($string, $encoding = null)
+{
     if ($encoding) {
         $expanded = mb_convert_encoding($string, "UTF-32BE", $encoding);
     } else {
         $expanded = mb_convert_encoding($string, "UTF-32BE");
     }
+
     return unpack("N*", $expanded);
 }
 
 /**
  * convert unicodes to the character of given encoding
  *
- * @link http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ * @link   http://www.ibm.com/developerworks/library/os-php-unicode/index.html#listing3 for inspiration
+ *
  * @param integer|array $unicode  single unicode or list of unicodes to convert
  * @param string        $encoding encoding of returned string, if null mb_internal_encoding() is used
+ *
  * @return string unicode as character sequence in given $encoding
  * @author Rodney Rehm
  */
-function smarty_mb_from_unicode($unicode, $encoding=null) {
+function smarty_mb_from_unicode($unicode, $encoding = null)
+{
     $t = '';
     if (!$encoding) {
         $encoding = mb_internal_encoding();
     }
-    foreach((array) $unicode as $utf32be) {
+    foreach ((array) $unicode as $utf32be) {
         $character = pack("N*", $utf32be);
         $t .= mb_convert_encoding($character, $encoding, "UTF-32BE");
     }
+
     return $t;
 }
-
-?>
\ No newline at end of file
index ba3498c7026d01ecfcf6adde5e11c4d675fa428a..09f14b9efa234896aaf7a2013c527fcdd8b45cc5 100644 (file)
@@ -2,27 +2,29 @@
 /**
  * Smarty shared plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsShared
  */
 
-if(!function_exists('smarty_mb_wordwrap')) {
+if (!function_exists('smarty_mb_wordwrap')) {
 
     /**
      * Wrap a string to a given number of characters
      *
-     * @link http://php.net/manual/en/function.wordwrap.php for similarity
-     * @param string  $str   the string to wrap
-     * @param int     $width the width of the output
-     * @param string  $break the character used to break the line
-     * @param boolean $cut   ignored parameter, just for the sake of
-     * @return string wrapped string
+     * @link   http://php.net/manual/en/function.wordwrap.php for similarity
+     *
+     * @param  string  $str   the string to wrap
+     * @param  int     $width the width of the output
+     * @param  string  $break the character used to break the line
+     * @param  boolean $cut   ignored parameter, just for the sake of
+     *
+     * @return string  wrapped string
      * @author Rodney Rehm
      */
-    function smarty_mb_wordwrap($str, $width=75, $break="\n", $cut=false)
+    function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
     {
         // break words into tokens using white space as a delimiter
-        $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
+        $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
         $length = 0;
         $t = '';
         $_previous = false;
@@ -32,12 +34,12 @@ if(!function_exists('smarty_mb_wordwrap')) {
             $_tokens = array($_token);
             if ($token_length > $width) {
                 // remove last space
-                $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
+                $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
                 $_previous = false;
                 $length = 0;
 
                 if ($cut) {
-                    $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
+                    $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
                     // broken words go on a new line
                     $t .= $break;
                 }
@@ -51,7 +53,7 @@ if(!function_exists('smarty_mb_wordwrap')) {
                 if ($length > $width) {
                     // remove space before inserted break
                     if ($_previous && $token_length < $width) {
-                        $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
+                        $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
                     }
 
                     // add the break before the token
@@ -63,7 +65,7 @@ if(!function_exists('smarty_mb_wordwrap')) {
                         $length = 0;
                         continue;
                     }
-                } else if ($token == "\n") {
+                } elseif ($token == "\n") {
                     // hard break must reset counters
                     $_previous = 0;
                     $length = 0;
@@ -78,6 +80,4 @@ if(!function_exists('smarty_mb_wordwrap')) {
 
         return $t;
     }
-
 }
-?>
\ No newline at end of file
index aff711e48fb48810fac6eb57d01b0d02b4da8a9d..aecd1e7e746b5c3328cd6c87c7da2de047551181 100644 (file)
@@ -2,20 +2,18 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsFilter
  */
 
 /**
  * Smarty htmlspecialchars variablefilter plugin
  *
- * @param string                   $source input string
- * @param Smarty_Internal_Template $smarty Smarty object
+ * @param string $source input string
+ *
  * @return string filtered output
  */
-function smarty_variablefilter_htmlspecialchars($source, $smarty)
+function smarty_variablefilter_htmlspecialchars($source)
 {
     return htmlspecialchars($source, ENT_QUOTES, Smarty::$_CHARSET);
 }
-
-?>
\ No newline at end of file
index ca18add5e971409f2ce6c6c3f78f8326724da7a4..667bee44ffe06893cb213290408f1c88c8faf080 100644 (file)
 <?php
 /**
-* Smarty Internal Plugin
-*
-* @package Smarty
-* @subpackage Cacher
-*/
+ * Smarty Internal Plugin
+ *
+ * @package    Smarty
+ * @subpackage Cacher
+ */
 
 /**
-* Cache Handler API
-*
-* @package Smarty
-* @subpackage Cacher
-* @author Rodney Rehm
-*/
-abstract class Smarty_CacheResource {
+ * Cache Handler API
+ *
+ * @package    Smarty
+ * @subpackage Cacher
+ * @author     Rodney Rehm
+ */
+abstract class Smarty_CacheResource
+{
     /**
-    * cache for Smarty_CacheResource instances
-    * @var array
-    */
+     * cache for Smarty_CacheResource instances
+     *
+     * @var array
+     */
     public static $resources = array();
 
     /**
-    * resource types provided by the core
-    * @var array
-    */
+     * resource types provided by the core
+     *
+     * @var array
+     */
     protected static $sysplugins = array(
         'file' => true,
     );
 
     /**
-    * populate Cached Object with meta data from Resource
-    *
-    * @param Smarty_Template_Cached $cached cached object
-    * @param Smarty_Internal_Template $_template template object
-    * @return void
-    */
-    public abstract function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
+     * populate Cached Object with meta data from Resource
+     *
+     * @param Smarty_Template_Cached   $cached    cached object
+     * @param Smarty_Internal_Template $_template template object
+     *
+     * @return void
+     */
+    abstract public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template);
 
     /**
-    * populate Cached Object with timestamp and exists from Resource
-    *
-    * @param Smarty_Template_Cached $source cached object
-    * @return void
-    */
-    public abstract function populateTimestamp(Smarty_Template_Cached $cached);
+     * populate Cached Object with timestamp and exists from Resource
+     *
+     * @param Smarty_Template_Cached $cached
+     *
+     * @return void
+     */
+    abstract public function populateTimestamp(Smarty_Template_Cached $cached);
 
     /**
-    * Read the cached template and process header
-    *
-    * @param Smarty_Internal_Template $_template template object
-    * @param Smarty_Template_Cached $cached cached object
-    * @return booelan true or false if the cached content does not exist
-    */
-    public abstract function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null);
+     * Read the cached template and process header
+     *
+     * @param Smarty_Internal_Template $_template template object
+     * @param Smarty_Template_Cached   $cached    cached object
+     *
+     * @return boolean true or false if the cached content does not exist
+     */
+    abstract public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null);
 
     /**
-    * Write the rendered template output to cache
-    *
-    * @param Smarty_Internal_Template $_template template object
-    * @param string $content content to cache
-    * @return boolean success
-    */
-    public abstract function writeCachedContent(Smarty_Internal_Template $_template, $content);
+     * Write the rendered template output to cache
+     *
+     * @param Smarty_Internal_Template $_template template object
+     * @param string                   $content   content to cache
+     *
+     * @return boolean success
+     */
+    abstract public function writeCachedContent(Smarty_Internal_Template $_template, $content);
 
     /**
-    * Return cached content
-    *
-    * @param Smarty_Internal_Template $_template template object
-    * @param string $content content of cache
-    */
+     * Return cached content
+     *
+     * @param Smarty_Internal_Template $_template template object
+     *
+     * @return null|string
+     */
     public function getCachedContent(Smarty_Internal_Template $_template)
     {
         if ($_template->cached->handler->process($_template)) {
             ob_start();
             $_template->properties['unifunc']($_template);
+
             return ob_get_clean();
         }
+
         return null;
     }
 
     /**
-    * Empty cache
-    *
-    * @param Smarty $smarty Smarty object
-    * @param integer $exp_time expiration time (number of seconds, not timestamp)
-    * @return integer number of cache files deleted
-    */
-    public abstract function clearAll(Smarty $smarty, $exp_time=null);
+     * Empty cache
+     *
+     * @param Smarty  $smarty   Smarty object
+     * @param integer $exp_time expiration time (number of seconds, not timestamp)
+     *
+     * @return integer number of cache files deleted
+     */
+    abstract public function clearAll(Smarty $smarty, $exp_time = null);
 
     /**
-    * Empty cache for a specific template
-    *
-    * @param Smarty $smarty Smarty object
-    * @param string $resource_name template name
-    * @param string $cache_id cache id
-    * @param string $compile_id compile id
-    * @param integer $exp_time expiration time (number of seconds, not timestamp)
-    * @return integer number of cache files deleted
-    */
-    public abstract function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
-
+     * Empty cache for a specific template
+     *
+     * @param Smarty  $smarty        Smarty object
+     * @param string  $resource_name template name
+     * @param string  $cache_id      cache id
+     * @param string  $compile_id    compile id
+     * @param integer $exp_time      expiration time (number of seconds, not timestamp)
+     *
+     * @return integer number of cache files deleted
+     */
+    abstract public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time);
 
+    /**
+     * @param Smarty                 $smarty
+     * @param Smarty_Template_Cached $cached
+     *
+     * @return bool|null
+     */
     public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
     {
         // theoretically locking_timeout should be checked against time_limit (max_execution_time)
@@ -114,35 +131,61 @@ abstract class Smarty_CacheResource {
             }
             sleep(1);
         }
+
         return $hadLock;
     }
 
+    /**
+     * Check is cache is locked for this template
+     *
+     * @param Smarty                 $smarty
+     * @param Smarty_Template_Cached $cached
+     *
+     * @return bool
+     */
     public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
         // check if lock exists
         return false;
     }
 
+    /**
+     * Lock cache for this template
+     *
+     * @param Smarty                 $smarty
+     * @param Smarty_Template_Cached $cached
+     *
+     * @return bool
+     */
     public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
         // create lock
         return true;
     }
 
+    /**
+     * Unlock cache for this template
+     *
+     * @param Smarty                 $smarty
+     * @param Smarty_Template_Cached $cached
+     *
+     * @return bool
+     */
     public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
         // release lock
         return true;
     }
 
-
     /**
-    * Load Cache Resource Handler
-    *
-    * @param Smarty $smarty Smarty object
-    * @param string $type name of the cache resource
-    * @return Smarty_CacheResource Cache Resource Handler
-    */
+     * Load Cache Resource Handler
+     *
+     * @param Smarty $smarty Smarty object
+     * @param string $type   name of the cache resource
+     *
+     * @throws SmartyException
+     * @return Smarty_CacheResource Cache Resource Handler
+     */
     public static function load(Smarty $smarty, $type = null)
     {
         if (!isset($type)) {
@@ -153,7 +196,7 @@ abstract class Smarty_CacheResource {
         if (isset($smarty->_cacheresource_handlers[$type])) {
             return $smarty->_cacheresource_handlers[$type];
         }
-        
+
         // try registered resource
         if (isset($smarty->registered_cache_resources[$type])) {
             // do not cache these instances as they may vary from instance to instance
@@ -165,6 +208,7 @@ abstract class Smarty_CacheResource {
                 $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type);
                 self::$resources[$type] = new $cache_resource_class();
             }
+
             return $smarty->_cacheresource_handlers[$type] = self::$resources[$type];
         }
         // try plugins dir
@@ -173,6 +217,7 @@ abstract class Smarty_CacheResource {
             if (!isset(self::$resources[$type])) {
                 self::$resources[$type] = new $cache_resource_class();
             }
+
             return $smarty->_cacheresource_handlers[$type] = self::$resources[$type];
         }
         // give up
@@ -180,10 +225,10 @@ abstract class Smarty_CacheResource {
     }
 
     /**
-    * Invalid Loaded Cache Files
-    *
-    * @param Smarty $smarty Smarty object
-    */
+     * Invalid Loaded Cache Files
+     *
+     * @param Smarty $smarty Smarty object
+     */
     public static function invalidLoadedCache(Smarty $smarty)
     {
         foreach ($smarty->template_objects as $tpl) {
@@ -196,92 +241,104 @@ abstract class Smarty_CacheResource {
 }
 
 /**
-* Smarty Resource Data Object
-*
-* Cache Data Container for Template Files
-*
-* @package Smarty
-* @subpackage TemplateResources
-* @author Rodney Rehm
-*/
-class Smarty_Template_Cached {
+ * Smarty Resource Data Object
+ * Cache Data Container for Template Files
+ *
+ * @package    Smarty
+ * @subpackage TemplateResources
+ * @author     Rodney Rehm
+ */
+class Smarty_Template_Cached
+{
     /**
-    * Source Filepath
-    * @var string
-    */
+     * Source Filepath
+     *
+     * @var string
+     */
     public $filepath = false;
 
     /**
-    * Source Content
-    * @var string
-    */
+     * Source Content
+     *
+     * @var string
+     */
     public $content = null;
 
     /**
-    * Source Timestamp
-    * @var integer
-    */
+     * Source Timestamp
+     *
+     * @var integer
+     */
     public $timestamp = false;
 
     /**
-    * Source Existance
-    * @var boolean
-    */
+     * Source Existence
+     *
+     * @var boolean
+     */
     public $exists = false;
 
     /**
-    * Cache Is Valid
-    * @var boolean
-    */
+     * Cache Is Valid
+     *
+     * @var boolean
+     */
     public $valid = false;
 
     /**
-    * Cache was processed
-    * @var boolean
-    */
+     * Cache was processed
+     *
+     * @var boolean
+     */
     public $processed = false;
 
     /**
-    * CacheResource Handler
-    * @var Smarty_CacheResource
-    */
+     * CacheResource Handler
+     *
+     * @var Smarty_CacheResource
+     */
     public $handler = null;
 
     /**
-    * Template Compile Id (Smarty_Internal_Template::$compile_id)
-    * @var string
-    */
+     * Template Compile Id (Smarty_Internal_Template::$compile_id)
+     *
+     * @var string
+     */
     public $compile_id = null;
 
     /**
-    * Template Cache Id (Smarty_Internal_Template::$cache_id)
-    * @var string
-    */
+     * Template Cache Id (Smarty_Internal_Template::$cache_id)
+     *
+     * @var string
+     */
     public $cache_id = null;
 
     /**
-    * Id for cache locking
-    * @var string
-    */
+     * Id for cache locking
+     *
+     * @var string
+     */
     public $lock_id = null;
 
     /**
-    * flag that cache is locked by this instance
-    * @var bool
-    */
+     * flag that cache is locked by this instance
+     *
+     * @var bool
+     */
     public $is_locked = false;
 
     /**
-    * Source Object
-    * @var Smarty_Template_Source
-    */
+     * Source Object
+     *
+     * @var Smarty_Template_Source
+     */
     public $source = null;
 
     /**
-    * create Cached Object container
-    *
-    * @param Smarty_Internal_Template $_template template object
-    */
+     * create Cached Object container
+     *
+     * @param Smarty_Internal_Template $_template template object
+     */
     public function __construct(Smarty_Internal_Template $_template)
     {
         $this->compile_id = $_template->compile_id;
@@ -300,6 +357,7 @@ class Smarty_Template_Cached {
         //
         if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || $_template->source->recompiled) {
             $handler->populate($this, $_template);
+
             return;
         }
         while (true) {
@@ -328,7 +386,7 @@ class Smarty_Template_Cached {
                     if ($smarty->debugging) {
                         Smarty_Internal_Debug::start_cache($_template);
                     }
-                    if($handler->process($_template, $this) === false) {
+                    if ($handler->process($_template, $this) === false) {
                         $this->valid = false;
                     } else {
                         $this->processed = true;
@@ -347,6 +405,7 @@ class Smarty_Template_Cached {
             }
             if (!$this->valid && $_template->smarty->cache_locking) {
                 $this->handler->acquireLock($_template->smarty, $this);
+
                 return;
             } else {
                 return;
@@ -355,27 +414,29 @@ class Smarty_Template_Cached {
     }
 
     /**
-    * Write this cache object to handler
-    *
-    * @param Smarty_Internal_Template $_template template object
-    * @param string $content content to cache
-    * @return boolean success
-    */
+     * Write this cache object to handler
+     *
+     * @param Smarty_Internal_Template $_template template object
+     * @param string                   $content   content to cache
+     *
+     * @return boolean success
+     */
     public function write(Smarty_Internal_Template $_template, $content)
     {
         if (!$_template->source->recompiled) {
             if ($this->handler->writeCachedContent($_template, $content)) {
+                $this->content = null;
                 $this->timestamp = time();
                 $this->exists = true;
                 $this->valid = true;
                 if ($_template->smarty->cache_locking) {
                     $this->handler->releaseLock($_template->smarty, $this);
                 }
+
                 return true;
             }
         }
+
         return false;
     }
-
 }
-?>
\ No newline at end of file
index ee9de157b356e1b7ad83e41358e039a38cb2a598..a258b2de78a409d97de4b8fa00609c061f80aa64 100644 (file)
@@ -2,42 +2,43 @@
 /**
  * Smarty Internal Plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Cacher
  */
 
 /**
  * Cache Handler API
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Cacher
- * @author Rodney Rehm
+ * @author     Rodney Rehm
  */
-abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
-
+abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
+{
     /**
      * fetch cached content and its modification time from data source
      *
-     * @param string $id         unique cache content identifier
-     * @param string $name       template name
-     * @param string $cache_id   cache id
-     * @param string $compile_id compile id
-     * @param string $content    cached content
-     * @param integer $mtime cache modification timestamp (epoch)
+     * @param  string  $id         unique cache content identifier
+     * @param  string  $name       template name
+     * @param  string  $cache_id   cache id
+     * @param  string  $compile_id compile id
+     * @param  string  $content    cached content
+     * @param  integer $mtime      cache modification timestamp (epoch)
+     *
      * @return void
      */
-    protected abstract function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
+    abstract protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime);
 
     /**
      * Fetch cached content's modification timestamp from data source
-     *
      * {@internal implementing this method is optional.
      *  Only implement it if modification times can be accessed faster than loading the complete cached content.}}
      *
-     * @param string $id         unique cache content identifier
-     * @param string $name       template name
-     * @param string $cache_id   cache id
-     * @param string $compile_id compile id
+     * @param  string $id         unique cache content identifier
+     * @param  string $name       template name
+     * @param  string $cache_id   cache id
+     * @param  string $compile_id compile id
+     *
      * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
      */
     protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
@@ -48,32 +49,35 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
     /**
      * Save content to cache
      *
-     * @param string       $id         unique cache content identifier
-     * @param string       $name       template name
-     * @param string       $cache_id   cache id
-     * @param string       $compile_id compile id
-     * @param integer|null $exp_time   seconds till expiration or null
-     * @param string $content content to cache
-     * @return boolean success
+     * @param  string       $id         unique cache content identifier
+     * @param  string       $name       template name
+     * @param  string       $cache_id   cache id
+     * @param  string       $compile_id compile id
+     * @param  integer|null $exp_time   seconds till expiration or null
+     * @param  string       $content    content to cache
+     *
+     * @return boolean      success
      */
-    protected abstract function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
+    abstract protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content);
 
     /**
      * Delete content from cache
      *
-     * @param string       $name       template name
-     * @param string       $cache_id   cache id
-     * @param string       $compile_id compile id
-     * @param integer|null $exp_time   seconds till expiration time in seconds or null
-     * @return integer number of deleted caches
+     * @param  string       $name       template name
+     * @param  string       $cache_id   cache id
+     * @param  string       $compile_id compile id
+     * @param  integer|null $exp_time   seconds till expiration time in seconds or null
+     *
+     * @return integer      number of deleted caches
      */
-    protected abstract function delete($name, $cache_id, $compile_id, $exp_time);
+    abstract protected function delete($name, $cache_id, $compile_id, $exp_time);
 
     /**
      * populate Cached Object with meta data from Resource
      *
-     * @param Smarty_Template_Cached   $cached    cached object
-     * @param Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Cached   $cached    cached object
+     * @param  Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
     public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
@@ -88,7 +92,8 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
     /**
      * populate Cached Object with timestamp and exists from Resource
      *
-     * @param Smarty_Template_Cached $source cached object
+     * @param Smarty_Template_Cached $cached
+     *
      * @return void
      */
     public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -97,6 +102,7 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
         if ($mtime !== null) {
             $cached->timestamp = $mtime;
             $cached->exists = !!$cached->timestamp;
+
             return;
         }
         $timestamp = null;
@@ -108,11 +114,12 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
     /**
      * Read the cached template and process the header
      *
-     * @param Smarty_Internal_Template $_template template object
-     * @param Smarty_Template_Cached $cached cached object
-     * @return booelan true or false if the cached content does not exist
+     * @param  Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Cached   $cached    cached object
+     *
+     * @return boolean                 true or false if the cached content does not exist
      */
-    public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+    public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
     {
         if (!$cached) {
             $cached = $_template->cached;
@@ -130,19 +137,25 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
             );
         }
         if (isset($content)) {
+            /** @var Smarty_Internal_Template $_smarty_tpl
+             * used in evaluated code
+             */
             $_smarty_tpl = $_template;
             eval("?>" . $content);
+
             return true;
         }
+
         return false;
     }
 
     /**
      * Write the rendered template output to cache
      *
-     * @param Smarty_Internal_Template $_template template object
-     * @param string                   $content   content to cache
-     * @return boolean success
+     * @param  Smarty_Internal_Template $_template template object
+     * @param  string                   $content   content to cache
+     *
+     * @return boolean                  success
      */
     public function writeCachedContent(Smarty_Internal_Template $_template, $content)
     {
@@ -159,38 +172,69 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
     /**
      * Empty cache
      *
-     * @param Smarty  $smarty   Smarty object
-     * @param integer $exp_time expiration time (number of seconds, not timestamp)
+     * @param  Smarty  $smarty   Smarty object
+     * @param  integer $exp_time expiration time (number of seconds, not timestamp)
+     *
      * @return integer number of cache files deleted
      */
-    public function clearAll(Smarty $smarty, $exp_time=null)
+    public function clearAll(Smarty $smarty, $exp_time = null)
     {
         $this->cache = array();
+
         return $this->delete(null, null, null, $exp_time);
     }
 
     /**
      * Empty cache for a specific template
      *
-     * @param Smarty  $smarty        Smarty object
-     * @param string  $resource_name template name
-     * @param string  $cache_id      cache id
-     * @param string  $compile_id    compile id
-     * @param integer $exp_time      expiration time (number of seconds, not timestamp)
+     * @param  Smarty  $smarty        Smarty object
+     * @param  string  $resource_name template name
+     * @param  string  $cache_id      cache id
+     * @param  string  $compile_id    compile id
+     * @param  integer $exp_time      expiration time (number of seconds, not timestamp)
+     *
      * @return integer number of cache files deleted
      */
     public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
     {
         $this->cache = array();
-        return $this->delete($resource_name, $cache_id, $compile_id, $exp_time);
+        $cache_name = null;
+
+        if (isset($resource_name)) {
+            $_save_stat = $smarty->caching;
+            $smarty->caching = true;
+            $tpl = new $smarty->template_class($resource_name, $smarty);
+            $smarty->caching = $_save_stat;
+
+            if ($tpl->source->exists) {
+                $cache_name = $tpl->source->name;
+            } else {
+                return 0;
+            }
+            // remove from template cache
+            if ($smarty->allow_ambiguous_resources) {
+                $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
+            } else {
+                $_templateId = $smarty->joined_template_dir . '#' . $resource_name . $tpl->cache_id . $tpl->compile_id;
+            }
+            if (isset($_templateId[150])) {
+                $_templateId = sha1($_templateId);
+            }
+            unset($smarty->template_objects[$_templateId]);
+            // template object no longer needed
+            unset($tpl);
+        }
+
+        return $this->delete($cache_name, $cache_id, $compile_id, $exp_time);
     }
 
     /**
      * Check is cache is locked for this template
      *
-     * @param Smarty $smarty Smarty object
-     * @param Smarty_Template_Cached $cached cached object
-     * @return booelan true or false if cache is locked
+     * @param  Smarty                 $smarty Smarty object
+     * @param  Smarty_Template_Cached $cached cached object
+     *
+     * @return boolean               true or false if cache is locked
      */
     public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
@@ -208,8 +252,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
     /**
      * Lock cache for this template
      *
-     * @param Smarty $smarty Smarty object
+     * @param Smarty                 $smarty Smarty object
      * @param Smarty_Template_Cached $cached cached object
+     *
+     * @return bool|void
      */
     public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
@@ -223,8 +269,10 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
     /**
      * Unlock cache for this template
      *
-     * @param Smarty $smarty Smarty object
+     * @param Smarty                 $smarty Smarty object
      * @param Smarty_Template_Cached $cached cached object
+     *
+     * @return bool|void
      */
     public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
@@ -234,4 +282,3 @@ abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource {
         $this->delete($name, null, null, null);
     }
 }
-?>
\ No newline at end of file
index dff9b65aa83b6574a0378fbca60c42726ebc9a58..a4b365a829289cfb09472102eaea00faf38a26f1 100644 (file)
@@ -2,44 +2,43 @@
 /**
  * Smarty Internal Plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Cacher
  */
 
 /**
  * Smarty Cache Handler Base for Key/Value Storage Implementations
- *
  * This class implements the functionality required to use simple key/value stores
  * for hierarchical cache groups. key/value stores like memcache or APC do not support
  * wildcards in keys, therefore a cache group cannot be cleared like "a|*" - which
  * is no problem to filesystem and RDBMS implementations.
- *
  * This implementation is based on the concept of invalidation. While one specific cache
  * can be identified and cleared, any range of caches cannot be identified. For this reason
  * each level of the cache group hierarchy can have its own value in the store. These values
  * are nothing but microtimes, telling us when a particular cache group was cleared for the
  * last time. These keys are evaluated for every cache read to determine if the cache has
  * been invalidated since it was created and should hence be treated as inexistent.
- *
  * Although deep hierarchies are possible, they are not recommended. Try to keep your
  * cache groups as shallow as possible. Anything up 3-5 parents should be ok. So
  * Â»a|b|c« is a good depth where Â»a|b|c|d|e|f|g|h|i|j|k« isn't. Try to join correlating
  * cache groups: if your cache groups look somewhat like Â»a|b|$page|$items|$whatever«
  * consider using Â»a|b|c|$page-$items-$whatever« instead.
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Cacher
- * @author Rodney Rehm
+ * @author     Rodney Rehm
  */
-abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
-
+abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
+{
     /**
      * cache for contents
+     *
      * @var array
      */
     protected $contents = array();
     /**
      * cache for timestamps
+     *
      * @var array
      */
     protected $timestamps = array();
@@ -47,16 +46,17 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
     /**
      * populate Cached Object with meta data from Resource
      *
-     * @param Smarty_Template_Cached   $cached    cached object
-     * @param Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Cached   $cached    cached object
+     * @param  Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
     public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
     {
         $cached->filepath = $_template->source->uid
-                . '#' . $this->sanitize($cached->source->name)
-                . '#' . $this->sanitize($cached->cache_id)
-                . '#' . $this->sanitize($cached->compile_id);
+            . '#' . $this->sanitize($cached->source->resource)
+            . '#' . $this->sanitize($cached->cache_id)
+            . '#' . $this->sanitize($cached->compile_id);
 
         $this->populateTimestamp($cached);
     }
@@ -64,7 +64,8 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
     /**
      * populate Cached Object with timestamp and exists from Resource
      *
-     * @param Smarty_Template_Cached $cached cached object
+     * @param  Smarty_Template_Cached $cached cached object
+     *
      * @return void
      */
     public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -80,11 +81,12 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
     /**
      * Read the cached template and process the header
      *
-     * @param Smarty_Internal_Template $_template template object
-     * @param Smarty_Template_Cached $cached cached object
-     * @return booelan true or false if the cached content does not exist
+     * @param  Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Cached   $cached    cached object
+     *
+     * @return boolean                 true or false if the cached content does not exist
      */
-    public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+    public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
     {
         if (!$cached) {
             $cached = $_template->cached;
@@ -97,55 +99,63 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
             }
         }
         if (isset($content)) {
+            /** @var Smarty_Internal_Template $_smarty_tpl
+             * used in evaluated code
+             */
             $_smarty_tpl = $_template;
             eval("?>" . $content);
+
             return true;
         }
+
         return false;
     }
 
     /**
      * Write the rendered template output to cache
      *
-     * @param Smarty_Internal_Template $_template template object
-     * @param string $content content to cache
-     * @return boolean success
+     * @param  Smarty_Internal_Template $_template template object
+     * @param  string                   $content   content to cache
+     *
+     * @return boolean                  success
      */
     public function writeCachedContent(Smarty_Internal_Template $_template, $content)
     {
         $this->addMetaTimestamp($content);
+
         return $this->write(array($_template->cached->filepath => $content), $_template->properties['cache_lifetime']);
     }
 
     /**
      * Empty cache
-     *
      * {@internal the $exp_time argument is ignored altogether }}
      *
-     * @param Smarty  $smarty   Smarty object
-     * @param integer $exp_time expiration time [being ignored]
+     * @param  Smarty  $smarty   Smarty object
+     * @param  integer $exp_time expiration time [being ignored]
+     *
      * @return integer number of cache files deleted [always -1]
      * @uses purge() to clear the whole store
      * @uses invalidate() to mark everything outdated if purge() is inapplicable
      */
-    public function clearAll(Smarty $smarty, $exp_time=null)
+    public function clearAll(Smarty $smarty, $exp_time = null)
     {
         if (!$this->purge()) {
             $this->invalidate(null);
         }
-        return -1;
+
+        return - 1;
     }
 
     /**
      * Empty cache for a specific template
-     *
      * {@internal the $exp_time argument is ignored altogether}}
      *
-     * @param Smarty  $smarty        Smarty object
-     * @param string  $resource_name template name
-     * @param string  $cache_id      cache id
-     * @param string  $compile_id    compile id
-     * @param integer $exp_time      expiration time [being ignored]
+     * @param  Smarty  $smarty        Smarty object
+     * @param  string  $resource_name template name
+     * @param  string  $cache_id      cache id
+     * @param  string  $compile_id    compile id
+     * @param  integer $exp_time      expiration time [being ignored]
+     *
      * @return integer number of cache files deleted [always -1]
      * @uses buildCachedFilepath() to generate the CacheID
      * @uses invalidate() to mark CacheIDs parent chain as outdated
@@ -157,15 +167,18 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
         $cid = $uid . '#' . $this->sanitize($resource_name) . '#' . $this->sanitize($cache_id) . '#' . $this->sanitize($compile_id);
         $this->delete(array($cid));
         $this->invalidate($cid, $resource_name, $cache_id, $compile_id, $uid);
-        return -1;
+
+        return - 1;
     }
+
     /**
      * Get template's unique ID
      *
-     * @param Smarty $smarty        Smarty object
-     * @param string $resource_name template name
-     * @param string $cache_id      cache id
-     * @param string $compile_id    compile id
+     * @param  Smarty $smarty        Smarty object
+     * @param  string $resource_name template name
+     * @param  string $cache_id      cache id
+     * @param  string $compile_id    compile id
+     *
      * @return string filepath of cache file
      */
     protected function getTemplateUid(Smarty $smarty, $resource_name, $cache_id, $compile_id)
@@ -176,7 +189,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
             if ($tpl->source->exists) {
                 $uid = $tpl->source->uid;
             }
-            
+
             // remove from template cache
             if ($smarty->allow_ambiguous_resources) {
                 $_templateId = $tpl->source->unique_resource . $tpl->cache_id . $tpl->compile_id;
@@ -188,13 +201,15 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
             }
             unset($smarty->template_objects[$_templateId]);
         }
+
         return $uid;
     }
 
     /**
      * Sanitize CacheID components
      *
-     * @param string $string CacheID component to sanitize
+     * @param  string $string CacheID component to sanitize
+     *
      * @return string sanitized CacheID component
      */
     protected function sanitize($string)
@@ -204,19 +219,21 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
         if (!$string) {
             return null;
         }
+
         return preg_replace('#[^\w\|]+#S', '_', $string);
     }
 
     /**
      * Fetch and prepare a cache object.
      *
-     * @param string  $cid           CacheID to fetch
-     * @param string  $resource_name template name
-     * @param string  $cache_id      cache id
-     * @param string  $compile_id    compile id
-     * @param string  $content       cached content
-     * @param integer &$timestamp    cached timestamp (epoch)
-     * @param string  $resource_uid  resource's uid
+     * @param  string  $cid           CacheID to fetch
+     * @param  string  $resource_name template name
+     * @param  string  $cache_id      cache id
+     * @param  string  $compile_id    compile id
+     * @param  string  $content       cached content
+     * @param  integer &$timestamp    cached timestamp (epoch)
+     * @param  string  $resource_uid  resource's uid
+     *
      * @return boolean success
      */
     protected function fetch($cid, $resource_name = null, $cache_id = null, $compile_id = null, &$content = null, &$timestamp = null, $resource_uid = null)
@@ -238,7 +255,6 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
 
     /**
      * Add current microtime to the beginning of $cache_content
-     *
      * {@internal the header uses 8 Bytes, the first 4 Bytes are the seconds, the second 4 Bytes are the microseconds}}
      *
      * @param string &$content the content to be cached
@@ -253,25 +269,28 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
     /**
      * Extract the timestamp the $content was cached
      *
-     * @param string &$content the cached content
-     * @return float the microtime the content was cached
+     * @param  string &$content the cached content
+     *
+     * @return float  the microtime the content was cached
      */
     protected function getMetaTimestamp(&$content)
     {
         $s = unpack("N", substr($content, 0, 4));
         $m = unpack("N", substr($content, 4, 4));
         $content = substr($content, 8);
+
         return $s[1] + ($m[1] / 100000000);
     }
 
     /**
      * Invalidate CacheID
      *
-     * @param string $cid           CacheID
-     * @param string $resource_name template name
-     * @param string $cache_id      cache id
-     * @param string $compile_id    compile id
-     * @param string $resource_uid  source's uid
+     * @param  string $cid           CacheID
+     * @param  string $resource_name template name
+     * @param  string $cache_id      cache id
+     * @param  string $compile_id    compile id
+     * @param  string $resource_uid  source's uid
+     *
      * @return void
      */
     protected function invalidate($cid = null, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@@ -281,22 +300,24 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
         // invalidate everything
         if (!$resource_name && !$cache_id && !$compile_id) {
             $key = 'IVK#ALL';
-        }
-        // invalidate all caches by template
-        else if ($resource_name && !$cache_id && !$compile_id) {
-            $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
-        }
-        // invalidate all caches by cache group
-        else if (!$resource_name && $cache_id && !$compile_id) {
-            $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
-        }
-        // invalidate all caches by compile id
-        else if (!$resource_name && !$cache_id && $compile_id) {
-            $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
-        }
-        // invalidate by combination
+        } // invalidate all caches by template
         else {
-            $key = 'IVK#CID#' . $cid;
+            if ($resource_name && !$cache_id && !$compile_id) {
+                $key = 'IVK#TEMPLATE#' . $resource_uid . '#' . $this->sanitize($resource_name);
+            } // invalidate all caches by cache group
+            else {
+                if (!$resource_name && $cache_id && !$compile_id) {
+                    $key = 'IVK#CACHE#' . $this->sanitize($cache_id);
+                } // invalidate all caches by compile id
+                else {
+                    if (!$resource_name && !$cache_id && $compile_id) {
+                        $key = 'IVK#COMPILE#' . $this->sanitize($compile_id);
+                    } // invalidate by combination
+                    else {
+                        $key = 'IVK#CID#' . $cid;
+                    }
+                }
+            }
         }
         $this->write(array($key => $now));
     }
@@ -304,12 +325,13 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
     /**
      * Determine the latest timestamp known to the invalidation chain
      *
-     * @param string $cid           CacheID to determine latest invalidation timestamp of
-     * @param string $resource_name template name
-     * @param string $cache_id      cache id
-     * @param string $compile_id    compile id
-     * @param string $resource_uid  source's filepath
-     * @return float the microtime the CacheID was invalidated
+     * @param  string $cid           CacheID to determine latest invalidation timestamp of
+     * @param  string $resource_name template name
+     * @param  string $cache_id      cache id
+     * @param  string $compile_id    compile id
+     * @param  string $resource_uid  source's filepath
+     *
+     * @return float  the microtime the CacheID was invalidated
      */
     protected function getLatestInvalidationTimestamp($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
     {
@@ -321,27 +343,28 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
         if (!($_cid = $this->listInvalidationKeys($cid, $resource_name, $cache_id, $compile_id, $resource_uid))) {
             return 0;
         }
-        
+
         // there are no InValidationKeys
         if (!($values = $this->read($_cid))) {
             return 0;
         }
         // make sure we're dealing with floats
         $values = array_map('floatval', $values);
+
         return max($values);
     }
 
     /**
      * Translate a CacheID into the list of applicable InvalidationKeys.
-     *
      * Splits "some|chain|into|an|array" into array( '#clearAll#', 'some', 'some|chain', 'some|chain|into', ... )
      *
-     * @param string $cid           CacheID to translate
-     * @param string $resource_name template name
-     * @param string $cache_id      cache id
-     * @param string $compile_id    compile id
-     * @param string $resource_uid  source's filepath
-     * @return array list of InvalidationKeys
+     * @param  string $cid           CacheID to translate
+     * @param  string $resource_name template name
+     * @param  string $cache_id      cache id
+     * @param  string $compile_id    compile id
+     * @param  string $resource_uid  source's filepath
+     *
+     * @return array  list of InvalidationKeys
      * @uses $invalidationKeyPrefix to prepend to each InvalidationKey
      */
     protected function listInvalidationKeys($cid, $resource_name = null, $cache_id = null, $compile_id = null, $resource_uid = null)
@@ -378,30 +401,35 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
             $t[] = 'IVK#CACHE#' . $part;
             $t[] = 'IVK#CID' . $_name . $part . $_compile;
             // skip past delimiter position
-            $i++;
+            $i ++;
         }
+
         return $t;
     }
 
     /**
      * Check is cache is locked for this template
      *
-     * @param Smarty $smarty Smarty object
-     * @param Smarty_Template_Cached $cached cached object
-     * @return booelan true or false if cache is locked
+     * @param  Smarty                 $smarty Smarty object
+     * @param  Smarty_Template_Cached $cached cached object
+     *
+     * @return boolean               true or false if cache is locked
      */
     public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
         $key = 'LOCK#' . $cached->filepath;
         $data = $this->read(array($key));
+
         return $data && time() - $data[$key] < $smarty->locking_timeout;
     }
 
     /**
      * Lock cache for this template
      *
-     * @param Smarty $smarty Smarty object
+     * @param Smarty                 $smarty Smarty object
      * @param Smarty_Template_Cached $cached cached object
+     *
+     * @return bool|void
      */
     public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
@@ -413,8 +441,10 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
     /**
      * Unlock cache for this template
      *
-     * @param Smarty $smarty Smarty object
+     * @param Smarty                 $smarty Smarty object
      * @param Smarty_Template_Cached $cached cached object
+     *
+     * @return bool|void
      */
     public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
@@ -426,27 +456,30 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
     /**
      * Read values for a set of keys from cache
      *
-     * @param array $keys list of keys to fetch
+     * @param  array $keys list of keys to fetch
+     *
      * @return array list of values with the given keys used as indexes
      */
-    protected abstract function read(array $keys);
+    abstract protected function read(array $keys);
 
     /**
      * Save values for a set of keys to cache
      *
-     * @param array $keys   list of values to save
-     * @param int   $expire expiration time
+     * @param  array $keys   list of values to save
+     * @param  int   $expire expiration time
+     *
      * @return boolean true on success, false on failure
      */
-    protected abstract function write(array $keys, $expire=null);
+    abstract protected function write(array $keys, $expire = null);
 
     /**
      * Remove values from cache
      *
-     * @param array $keys list of keys to delete
+     * @param  array $keys list of keys to delete
+     *
      * @return boolean true on success, false on failure
      */
-    protected abstract function delete(array $keys);
+    abstract protected function delete(array $keys);
 
     /**
      * Remove *all* values from cache
@@ -457,7 +490,4 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource {
     {
         return false;
     }
-
 }
-
-?>
\ No newline at end of file
index 043ff13e9b5709c8095e590b9033bc93091a5e1b..fd37e61f7c592eb043e497a9b06433c62cbcf6c0 100644 (file)
@@ -2,34 +2,32 @@
 /**
  * Smarty Internal Plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
  */
 
 /**
  * Smarty Resource Data Object
- *
  * Meta Data Container for Config Files
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Rodney Rehm
- *
+ * @author     Rodney Rehm
  * @property string $content
  * @property int    $timestamp
  * @property bool   $exists
  */
-class Smarty_Config_Source extends Smarty_Template_Source {
-
+class Smarty_Config_Source extends Smarty_Template_Source
+{
     /**
      * create Config Object container
      *
-     * @param Smarty_Resource $handler          Resource Handler this source object communicates with
-     * @param Smarty          $smarty           Smarty instance this source object belongs to
-     * @param string          $resource         full config_resource
-     * @param string          $type             type of resource
-     * @param string          $name             resource name
-     * @param string          $unique_resource  unqiue resource name
+     * @param Smarty_Resource $handler         Resource Handler this source object communicates with
+     * @param Smarty          $smarty          Smarty instance this source object belongs to
+     * @param string          $resource        full config_resource
+     * @param string          $type            type of resource
+     * @param string          $name            resource name
+     * @param string          $unique_resource unqiue resource name
      */
     public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name, $unique_resource)
     {
@@ -50,8 +48,9 @@ class Smarty_Config_Source extends Smarty_Template_Source {
     /**
      * <<magic>> Generic setter.
      *
-     * @param string $property_name valid: content, timestamp, exists
-     * @param mixed  $value         newly assigned value (not check for correct type)
+     * @param  string $property_name valid: content, timestamp, exists
+     * @param  mixed  $value         newly assigned value (not check for correct type)
+     *
      * @throws SmartyException when the given property name is not valid
      */
     public function __set($property_name, $value)
@@ -71,7 +70,9 @@ class Smarty_Config_Source extends Smarty_Template_Source {
     /**
      * <<magic>> Generic getter.
      *
-     * @param string $property_name valid: content, timestamp, exists
+     * @param  string $property_name valid: content, timestamp, exists
+     *
+     * @return mixed|void
      * @throws SmartyException when the given property name is not valid
      */
     public function __get($property_name)
@@ -80,6 +81,7 @@ class Smarty_Config_Source extends Smarty_Template_Source {
             case 'timestamp':
             case 'exists':
                 $this->handler->populateTimestamp($this);
+
                 return $this->$property_name;
 
             case 'content':
@@ -89,7 +91,4 @@ class Smarty_Config_Source extends Smarty_Template_Source {
                 throw new SmartyException("config property '$property_name' does not exist.");
         }
     }
-
 }
-
-?>
\ No newline at end of file
index e5d20bd6ee2ddefa9ad9980fadf57e2e793961ef..17c6e4bf4778f3ca76f543a64477d153311fa6d4 100644 (file)
@@ -2,27 +2,27 @@
 /**
  * Smarty Internal Plugin CacheResource File
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Cacher
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author     Uwe Tews
+ * @author     Rodney Rehm
  */
 
 /**
  * This class does contain all necessary methods for the HTML cache on file system
- *
  * Implements the file system as resource for the HTML cache Version ussing nocache inserts.
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Cacher
  */
-class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
-
+class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
+{
     /**
      * populate Cached Object with meta data from Resource
      *
      * @param Smarty_Template_Cached   $cached    cached object
      * @param Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
     public function populate(Smarty_Template_Cached $cached, Smarty_Internal_Template $_template)
@@ -58,7 +58,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
             } else {
                 $_lock_dir = $_cache_dir;
             }
-            $cached->lock_id = $_lock_dir.sha1($_cache_id.$_compile_id.$_template->source->uid).'.lock';
+            $cached->lock_id = $_lock_dir . sha1($_cache_id . $_compile_id . $_template->source->uid) . '.lock';
         }
         $cached->filepath = $_cache_dir . $_cache_id . $_compile_id . $_filepath . '.' . basename($_source_file_path) . '.php';
         $cached->timestamp = @filemtime($cached->filepath);
@@ -69,6 +69,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
      * populate Cached Object with timestamp and exists from Resource
      *
      * @param Smarty_Template_Cached $cached cached object
+     *
      * @return void
      */
     public function populateTimestamp(Smarty_Template_Cached $cached)
@@ -81,12 +82,17 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
      * Read the cached template and process its header
      *
      * @param Smarty_Internal_Template $_template template object
-     * @param Smarty_Template_Cached $cached cached object
-     * @return booelan true or false if the cached content does not exist
+     * @param Smarty_Template_Cached   $cached    cached object
+     *
+     * @return booleantrue or false if the cached content does not exist
      */
-    public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached=null)
+    public function process(Smarty_Internal_Template $_template, Smarty_Template_Cached $cached = null)
     {
+        /** @var Smarty_Internal_Template $_smarty_tpl
+         * used in included file
+         */
         $_smarty_tpl = $_template;
+
         return @include $_template->cached->filepath;
     }
 
@@ -95,6 +101,7 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
      *
      * @param Smarty_Internal_Template $_template template object
      * @param string                   $content   content to cache
+     *
      * @return boolean success
      */
     public function writeCachedContent(Smarty_Internal_Template $_template, $content)
@@ -106,14 +113,16 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
                 return true;
             }
         }
+
         return false;
     }
 
     /**
      * Empty cache
      *
-     * @param Smarty_Internal_Template $_template template object
-     * @param integer                  $exp_time  expiration time (number of seconds, not timestamp)
+     * @param Smarty  $smarty
+     * @param integer $exp_time expiration time (number of seconds, not timestamp)
+     *
      * @return integer number of cache files deleted
      */
     public function clearAll(Smarty $smarty, $exp_time = null)
@@ -124,20 +133,21 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
     /**
      * Empty cache for a specific template
      *
-     * @param Smarty  $_template     template object
+     * @param Smarty  $smarty
      * @param string  $resource_name template name
      * @param string  $cache_id      cache id
      * @param string  $compile_id    compile id
      * @param integer $exp_time      expiration time (number of seconds, not timestamp)
+     *
      * @return integer number of cache files deleted
-    */
+     */
     public function clear(Smarty $smarty, $resource_name, $cache_id, $compile_id, $exp_time)
     {
         $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
         $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
         $_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
         $_compile_id_offset = $smarty->use_sub_dirs ? 3 : 0;
-        $_dir = $smarty->getCacheDir();
+        $_dir = realpath($smarty->getCacheDir()) . '/';
         $_dir_length = strlen($_dir);
         if (isset($_cache_id)) {
             $_cache_id_parts = explode('|', $_cache_id);
@@ -178,7 +188,9 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
             $_cacheDirs = new RecursiveDirectoryIterator($_dir);
             $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
             foreach ($_cache as $_file) {
-                if (substr($_file->getBasename(),0,1) == '.' || strpos($_file, '.svn') !== false) continue;
+                if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+                    continue;
+                }
                 // directory ?
                 if ($_file->isDir()) {
                     if (!$_cache->isDot()) {
@@ -186,16 +198,16 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
                         @rmdir($_file->getPathname());
                     }
                 } else {
-                    $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string)$_file, $_dir_length)));
+                    $_parts = explode($_dir_sep, str_replace('\\', '/', substr((string) $_file, $_dir_length)));
                     $_parts_count = count($_parts);
                     // check name
                     if (isset($resource_name)) {
-                        if ($_parts[$_parts_count-1] != $_resourcename_parts) {
+                        if ($_parts[$_parts_count - 1] != $_resourcename_parts) {
                             continue;
                         }
                     }
                     // check compile id
-                    if (isset($_compile_id) && (!isset($_parts[$_parts_count-2 - $_compile_id_offset]) || $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id)) {
+                    if (isset($_compile_id) && (!isset($_parts[$_parts_count - 2 - $_compile_id_offset]) || $_parts[$_parts_count - 2 - $_compile_id_offset] != $_compile_id)) {
                         continue;
                     }
                     // check cache id
@@ -205,27 +217,40 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
                         if ($_parts_count < $_cache_id_parts_count) {
                             continue;
                         }
-                        for ($i = 0; $i < $_cache_id_parts_count; $i++) {
-                            if ($_parts[$i] != $_cache_id_parts[$i]) continue 2;
+                        for ($i = 0; $i < $_cache_id_parts_count; $i ++) {
+                            if ($_parts[$i] != $_cache_id_parts[$i]) {
+                                continue 2;
+                            }
                         }
                     }
                     // expired ?
-                    if (isset($exp_time) && $_time - @filemtime($_file) < $exp_time) {
-                        continue;
+                    if (isset($exp_time)) {
+                        if ($exp_time < 0) {
+                            preg_match('#\'cache_lifetime\' =>\s*(\d*)#', file_get_contents($_file), $match);
+                            if ($_time < (@filemtime($_file) + $match[1])) {
+                                continue;
+                            }
+                        } else {
+                            if ($_time - @filemtime($_file) < $exp_time) {
+                                continue;
+                            }
+                        }
                     }
                     $_count += @unlink((string) $_file) ? 1 : 0;
                 }
             }
         }
+
         return $_count;
     }
 
     /**
      * Check is cache is locked for this template
      *
-     * @param Smarty $smarty Smarty object
+     * @param Smarty                 $smarty Smarty object
      * @param Smarty_Template_Cached $cached cached object
-     * @return booelan true or false if cache is locked
+     *
+     * @return boolean true or false if cache is locked
      */
     public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
@@ -235,14 +260,17 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
             clearstatcache();
         }
         $t = @filemtime($cached->lock_id);
+
         return $t && (time() - $t < $smarty->locking_timeout);
     }
 
     /**
      * Lock cache for this template
      *
-     * @param Smarty $smarty Smarty object
+     * @param Smarty                 $smarty Smarty object
      * @param Smarty_Template_Cached $cached cached object
+     *
+     * @return bool|void
      */
     public function acquireLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
@@ -253,8 +281,10 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
     /**
      * Unlock cache for this template
      *
-     * @param Smarty $smarty Smarty object
+     * @param Smarty                 $smarty Smarty object
      * @param Smarty_Template_Cached $cached cached object
+     *
+     * @return bool|void
      */
     public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached)
     {
@@ -262,5 +292,3 @@ class Smarty_Internal_CacheResource_File extends Smarty_CacheResource {
         @unlink($cached->lock_id);
     }
 }
-
-?>
\ No newline at end of file
index f6036e88322ca4dcca52047f62a3bc378f6cbc15..cbf65685bf045363d70855b5d525d257af4ba136 100644 (file)
@@ -1,28 +1,28 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Append
- *
  * Compiles the {append} tag
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Append Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign {
-
+class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
+{
     /**
      * Compiles code for the {append} tag
      *
-     * @param array $args array with attributes from parser
-     * @param object $compiler compiler object
-     * @param array $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
@@ -47,7 +47,4 @@ class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign {
         // call compile assign
         return parent::compile($_new_attr, $compiler, $_params);
     }
-
 }
-
-?>
\ No newline at end of file
index 0ac3f68cecacc5261affab31cc113d359463d3fb..caa34861f0a02644f8b543ac4bf49d722c9b59ec 100644 (file)
@@ -1,28 +1,28 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Assign
- *
  * Compiles the {assign} tag
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Assign Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {assign} tag
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
@@ -39,7 +39,11 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
         if ($compiler->tag_nocache || $compiler->nocache) {
             $_nocache = 'true';
             // create nocache var to make it know for further compiling
-            $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_variable(null, true);
+            if (isset($compiler->template->tpl_vars[trim($_attr['var'], "'")])) {
+                $compiler->template->tpl_vars[trim($_attr['var'], "'")]->nocache = true;
+            } else {
+                $compiler->template->tpl_vars[trim($_attr['var'], "'")] = new Smarty_variable(null, true);
+            }
         }
         // scope setup
         if (isset($_attr['scope'])) {
@@ -72,13 +76,11 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase {
         } elseif ($_scope == Smarty::SCOPE_ROOT || $_scope == Smarty::SCOPE_GLOBAL) {
             $output .= "\n\$_ptr = \$_smarty_tpl->parent; while (\$_ptr != null) {\$_ptr->tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]]; \$_ptr = \$_ptr->parent; }";
         }
-        if ( $_scope == Smarty::SCOPE_GLOBAL) {
+        if ($_scope == Smarty::SCOPE_GLOBAL) {
             $output .= "\nSmarty::\$global_tpl_vars[$_attr[var]] = clone \$_smarty_tpl->tpl_vars[$_attr[var]];";
         }
         $output .= '?>';
+
         return $output;
     }
-
 }
-
-?>
\ No newline at end of file
index 03abf493ecfa5ca222dbf9e27995ef5a2c46279d..921d807ee7fc1c029f536b48d7ad22eacb0cc01a 100644 (file)
@@ -2,22 +2,23 @@
 
 /**
  * Smarty Internal Plugin Compile Block
- *
  * Compiles the {block}{/block} tags
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Block Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase
+{
 
+    const parent = '____SMARTY_BLOCK_PARENT____';
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -32,7 +33,15 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
      * @var array
      * @see Smarty_Internal_CompileBase
      */
-    public $shorttag_order = array('name', 'hide');
+    public $shorttag_order = array('name');
+
+    /**
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
+    public $option_flags = array('hide', 'append', 'prepend', 'nocache');
 
     /**
      * Attribute definition: Overwrites base class.
@@ -40,161 +49,134 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
      * @var array
      * @see Smarty_Internal_CompileBase
      */
-    public $optional_attributes = array('hide');
+    public $optional_attributes = array('internal_file', 'internal_uid', 'internal_line');
+    /**
+     * nested child block names
+     *
+     * @var array
+     */
+    public static $nested_block_names = array();
+
+    /**
+     * child block source buffer
+     *
+     * @var array
+     */
+    public static $block_data = array();
 
     /**
      * Compiles code for the {block} tag
      *
      * @param array  $args     array with attributes from parser
      * @param object $compiler compiler object
+     *
      * @return boolean true
      */
-    public function compile($args, $compiler) {
+    public function compile($args, $compiler)
+    {
         // check and get attributes
         $_attr = $this->getAttributes($compiler, $args);
-        $save = array($_attr, $compiler->parser->current_buffer, $compiler->nocache, $compiler->smarty->merge_compiled_includes, $compiler->merged_templates, $compiler->smarty->merged_templates_func, $compiler->template->properties, $compiler->template->has_nocache_code);
-        $this->openTag($compiler, 'block', $save);
+        $_name = trim($_attr['name'], "\"'");
+
+        // check if we process an inheritance child template
+        if ($compiler->inheritance_child) {
+            array_unshift(self::$nested_block_names, $_name);
+            // build {block} for child block
+            self::$block_data[$_name]['source'] =
+                "{$compiler->smarty->left_delimiter}private_child_block name={$_attr['name']} file='{$compiler->template->source->filepath}' type='{$compiler->template->source->type}' resource='{$compiler->template->template_resource}'" .
+                " uid='{$compiler->template->source->uid}' line={$compiler->lex->line}";
+            if ($_attr['nocache']) {
+                self::$block_data[$_name]['source'] .= ' nocache';
+            }
+            self::$block_data[$_name]['source'] .= $compiler->smarty->right_delimiter;
+
+            $save = array($_attr, $compiler->inheritance);
+            $this->openTag($compiler, 'block', $save);
+            // set flag for {block} tag
+            $compiler->inheritance = true;
+            $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK);
+            $compiler->has_code = false;
+            return;
+        }
+        // must merge includes
         if ($_attr['nocache'] == true) {
-            $compiler->nocache = true;
+            $compiler->tag_nocache = true;
         }
-        // set flag for {block} tag
+        $save = array($_attr, $compiler->inheritance, $compiler->parser->current_buffer, $compiler->nocache);
+        $this->openTag($compiler, 'block', $save);
         $compiler->inheritance = true;
-        // must merge includes
-        $compiler->smarty->merge_compiled_includes = true;
+        $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
 
         $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
         $compiler->has_code = false;
+
         return true;
     }
 
     /**
-     * Save or replace child block source by block name during parsing
+     * Compile saved child block source
+     *
+     * @param object $compiler compiler object
+     * @param string $_name    optional name of child block
      *
-     * @param string $block_content     block source content
-     * @param string $block_tag         opening block tag
-     * @param object $template          template object
-     * @param string $filepath          filepath of template source
+     * @return string   compiled code of child block
      */
-    public static function saveBlockData($block_content, $block_tag, $template, $filepath) {
-        $_rdl = preg_quote($template->smarty->right_delimiter);
-        $_ldl = preg_quote($template->smarty->left_delimiter);
-        if ($template->smarty->auto_literal) {
-            $al = '\s*';
-        } else {
-            $al = '';
-        }
-        if (0 == preg_match("!({$_ldl}{$al}block\s+)(name=)?(\w+|'.*'|\".*\")(\s*?)?((append|prepend|nocache)?(\s*)?(hide)?)?(\s*{$_rdl})!", $block_tag, $_match)) {
-            $error_text = 'Syntax Error in template "' . $template->source->filepath . '"   "' . htmlspecialchars($block_tag) . '" illegal options';
-            throw new SmartyCompilerException($error_text);
-        } else {
-            $_name = trim($_match[3], '\'"');
-            if ($_match[8] != 'hide' || isset($template->block_data[$_name])) {        // replace {$smarty.block.child}
-                // do we have {$smart.block.child} in nested {block} tags?
-                if (0 != preg_match_all("!({$_ldl}{$al}block\s+)(name=)?(\w+|'.*'|\".*\")([\s\S]*?)(hide)?(\s*{$_rdl})([\s\S]*?)({$_ldl}{$al}\\\$smarty\.block\.child{$_rdl})([\s\S]*?{$_ldl}{$al}/block{$_rdl})!", $block_content, $_match2)) {
-                    foreach ($_match2[3] as $key => $name) {
-                        // get it's replacement
-                        $_name2 = trim($name, '\'"');
-                        if ($_match2[5][$key] != 'hide' || isset($template->block_data[$_name2])) {
-                            if (isset($template->block_data[$_name2])) {
-                                $replacement = $template->block_data[$_name2]['source'];
-                            } else {
-                                $replacement = '';
-                            }
-                            // replace {$smarty.block.child} tag
-                            $search = array("%({$_ldl}{$al}block[\s\S]*?{$name}[\s\S]*?{$_rdl})([\s\S]*?)({$_ldl}{$al}\\\$smarty\.block\.child{$_rdl})([\s\S]*?)({$_ldl}{$al}/block{$_rdl})%", "/§§§child§§§/");
-                            $replace = array('\2§§§child§§§\4', $replacement);
-                            $block_content = preg_replace($search, $replace, $block_content);
-                        } else {
-                            // remove hidden blocks
-                            $block_content = preg_replace("%({$_ldl}{$al}block[\s\S]*?{$name}[\s\S]*?{$_rdl}[\s\S]*?{$_ldl}{$al}/block{$_rdl})%", '', $block_content);
-                        }
-                    }
-                }
-                // do we have not nested {$smart.block.child}
-                if (0 != preg_match("/({$_ldl}{$al}\\\$smarty\.block\.child{$_rdl})/", $block_content, $_match2)) {
-                    // get child replacement for this block
-                    if (isset($template->block_data[$_name])) {
-                        $replacement = $template->block_data[$_name]['source'];
-                        unset($template->block_data[$_name]);
-                    } else {
-                        $replacement = '';
-                    }
-                    $block_content = preg_replace("/({$_ldl}{$al}\\\$smarty\.block\.child{$_rdl})/", $replacement, $block_content);
-                }
-                if (isset($template->block_data[$_name])) {
-                    if (strpos($template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
-                        $template->block_data[$_name]['source'] =
-                                str_replace('%%%%SMARTY_PARENT%%%%', $block_content, $template->block_data[$_name]['source']);
-                    } elseif ($template->block_data[$_name]['mode'] == 'prepend') {
-                        $template->block_data[$_name]['source'] .= $block_content;
-                    } elseif ($template->block_data[$_name]['mode'] == 'append') {
-                        $template->block_data[$_name]['source'] = $block_content . $template->block_data[$_name]['source'];
-                    }
-                } else {
-                    $template->block_data[$_name]['source'] = $block_content;
-                    $template->block_data[$_name]['file'] = $filepath;
-                }
-                if ($_match[6] == 'append') {
-                    $template->block_data[$_name]['mode'] = 'append';
-                } elseif ($_match[6] == 'prepend') {
-                    $template->block_data[$_name]['mode'] = 'prepend';
-                } else {
-                    $template->block_data[$_name]['mode'] = 'replace';
-                }
+    static function compileChildBlock($compiler, $_name = null)
+    {
+        if ($compiler->inheritance_child) {
+            $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0];
+            if (isset($compiler->template->block_data[$name1])) {
+                //  replace inner block name with generic
+                Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= $compiler->template->block_data[$name1]['source'];
+                Smarty_Internal_Compile_Block::$block_data[$name1]['child'] = true;
             }
+            $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK);
+            $compiler->has_code = false;
+            return;
         }
-    }
-
-    /**
-     * Compile saved child block source
-     *
-     * @param object $compiler  compiler object
-     * @param string $_name     optional name of child block
-     * @return string   compiled code of schild block
-     */
-    public static function compileChildBlock($compiler, $_name = null) {
-        $_output = '';
         // if called by {$smarty.block.child} we must search the name of enclosing {block}
         if ($_name == null) {
             $stack_count = count($compiler->_tag_stack);
             while (--$stack_count >= 0) {
                 if ($compiler->_tag_stack[$stack_count][0] == 'block') {
-                    $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "'\"");
+                    $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'");
                     break;
                 }
             }
-            // flag that child is already compile by {$smarty.block.child} inclusion
-            $compiler->template->block_data[$_name]['compiled'] = true;
         }
         if ($_name == null) {
-            $compiler->trigger_template_error('{$smarty.block.child} used out of context', $compiler->lex->taglineno);
+            $compiler->trigger_template_error(' tag {$smarty.block.child} used outside {block} tags ', $compiler->lex->taglineno);
         }
         // undefined child?
         if (!isset($compiler->template->block_data[$_name]['source'])) {
+            $compiler->popTrace();
             return '';
         }
+        // flag that child is already compile by {$smarty.block.child} inclusion
+        $compiler->template->block_data[$_name]['compiled'] = true;
         $_tpl = new Smarty_Internal_template('string:' . $compiler->template->block_data[$_name]['source'], $compiler->smarty, $compiler->template, $compiler->template->cache_id,
-                        $compiler->template->compile_id = null, $compiler->template->caching, $compiler->template->cache_lifetime);
+                                             $compiler->template->compile_id, $compiler->template->caching, $compiler->template->cache_lifetime);
+        if ($compiler->smarty->debugging) {
+            Smarty_Internal_Debug::ignore($_tpl);
+        }
+        $_tpl->tpl_vars = $compiler->template->tpl_vars;
         $_tpl->variable_filters = $compiler->template->variable_filters;
         $_tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
-        $_tpl->source->filepath = $compiler->template->block_data[$_name]['file'];
         $_tpl->allow_relative_path = true;
-        if ($compiler->nocache) {
-            $_tpl->compiler->forceNocache = 2;
-        } else {
-            $_tpl->compiler->forceNocache = 1;
-        }
+        $_tpl->compiler->inheritance = true;
         $_tpl->compiler->suppressHeader = true;
+        $_tpl->compiler->suppressFilter = true;
         $_tpl->compiler->suppressTemplatePropertyHeader = true;
         $_tpl->compiler->suppressMergedTemplates = true;
-        if (strpos($compiler->template->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
-            $_output = str_replace('%%%%SMARTY_PARENT%%%%', $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl));
+        $nocache = $compiler->nocache || $compiler->tag_nocache;
+        if (strpos($compiler->template->block_data[$_name]['source'], self::parent) !== false) {
+            $_output = str_replace(self::parent, $compiler->parser->current_buffer->to_smarty_php(), $_tpl->compiler->compileTemplate($_tpl, $nocache));
         } elseif ($compiler->template->block_data[$_name]['mode'] == 'prepend') {
-            $_output = $_tpl->compiler->compileTemplate($_tpl) . $compiler->parser->current_buffer->to_smarty_php();
+            $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache) . $compiler->parser->current_buffer->to_smarty_php();
         } elseif ($compiler->template->block_data[$_name]['mode'] == 'append') {
-            $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl);
+            $_output = $compiler->parser->current_buffer->to_smarty_php() . $_tpl->compiler->compileTemplate($_tpl, $nocache);
         } elseif (!empty($compiler->template->block_data[$_name])) {
-            $_output = $_tpl->compiler->compileTemplate($_tpl);
+            $_output = $_tpl->compiler->compileTemplate($_tpl, $nocache);
         }
         $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $_tpl->properties['file_dependency']);
         $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $_tpl->properties['function']);
@@ -216,62 +198,241 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
             }
         }
         unset($_tpl);
+        $compiler->has_code = true;
         return $_output;
     }
 
+    /**
+     * Compile $smarty.block.parent
+     *
+     * @param object $compiler compiler object
+     * @param string $_name    optional name of child block
+     *
+     * @return string   compiled code of child block
+     */
+    static function compileParentBlock($compiler, $_name = null)
+    {
+        // if called by {$smarty.block.parent} we must search the name of enclosing {block}
+        if ($_name == null) {
+            $stack_count = count($compiler->_tag_stack);
+            while (--$stack_count >= 0) {
+                if ($compiler->_tag_stack[$stack_count][0] == 'block') {
+                    $_name = trim($compiler->_tag_stack[$stack_count][1][0]['name'], "\"'");
+                    break;
+                }
+            }
+        }
+        if ($_name == null) {
+            $compiler->trigger_template_error(' tag {$smarty.block.parent} used outside {block} tags ', $compiler->lex->taglineno);
+        }
+        if (empty(Smarty_Internal_Compile_Block::$nested_block_names)) {
+            $compiler->trigger_template_error(' illegal {$smarty.block.parent} in parent template ', $compiler->lex->taglineno);
+        }
+        Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= Smarty_Internal_Compile_Block::parent;
+        $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK);
+        $compiler->has_code = false;
+        return;
+    }
+
+    /**
+     * Process block source
+     *
+     * @param        $compiler
+     * @param string $source source text
+     *
+     */
+    static function blockSource($compiler, $source)
+    {
+        Smarty_Internal_Compile_Block::$block_data[Smarty_Internal_Compile_Block::$nested_block_names[0]]['source'] .= $source;
+    }
 }
 
 /**
  * Smarty Internal Plugin Compile BlockClose Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {/block} tag
      *
      * @param array  $args     array with attributes from parser
      * @param object $compiler compiler object
+     *
      * @return string compiled code
      */
-    public function compile($args, $compiler) {
+    public function compile($args, $compiler)
+    {
         $compiler->has_code = true;
         // check and get attributes
         $_attr = $this->getAttributes($compiler, $args);
         $saved_data = $this->closeTag($compiler, array('block'));
         $_name = trim($saved_data[0]['name'], "\"'");
+        // reset flag for {block} tag
+        $compiler->inheritance = $saved_data[1];
+        // check if we process an inheritance child template
+        if ($compiler->inheritance_child) {
+            $name1 = Smarty_Internal_Compile_Block::$nested_block_names[0];
+            Smarty_Internal_Compile_Block::$block_data[$name1]['source'] .= "{$compiler->smarty->left_delimiter}/private_child_block{$compiler->smarty->right_delimiter}";
+            array_shift(Smarty_Internal_Compile_Block::$nested_block_names);
+            if (!empty(Smarty_Internal_Compile_Block::$nested_block_names)) {
+                $name2 = Smarty_Internal_Compile_Block::$nested_block_names[0];
+                if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) {
+                    if (isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child']) || !isset($compiler->template->block_data[$name1])) {
+                        Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'];
+                    } else {
+                        if ($compiler->template->block_data[$name1]['mode'] == 'append') {
+                            Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source'];
+                        } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') {
+                            Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source'] . Smarty_Internal_Compile_Block::$block_data[$name1]['source'];
+                        } else {
+                            Smarty_Internal_Compile_Block::$block_data[$name2]['source'] .= $compiler->template->block_data[$name1]['source'];
+                        }
+                    }
+                }
+                unset(Smarty_Internal_Compile_Block::$block_data[$name1]);
+                $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBLOCK);
+            } else {
+                if (isset($compiler->template->block_data[$name1]) || !$saved_data[0]['hide']) {
+                    if (isset($compiler->template->block_data[$name1]) && !isset(Smarty_Internal_Compile_Block::$block_data[$name1]['child'])) {
+                        if (strpos($compiler->template->block_data[$name1]['source'], Smarty_Internal_Compile_Block::parent) !== false) {
+                            $compiler->template->block_data[$name1]['source'] =
+                                str_replace(Smarty_Internal_Compile_Block::parent, Smarty_Internal_Compile_Block::$block_data[$name1]['source'], $compiler->template->block_data[$name1]['source']);
+                        } elseif ($compiler->template->block_data[$name1]['mode'] == 'prepend') {
+                            $compiler->template->block_data[$name1]['source'] .= Smarty_Internal_Compile_Block::$block_data[$name1]['source'];
+                        } elseif ($compiler->template->block_data[$name1]['mode'] == 'append') {
+                            $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source'] . $compiler->template->block_data[$name1]['source'];
+                        }
+                    } else {
+                        $compiler->template->block_data[$name1]['source'] = Smarty_Internal_Compile_Block::$block_data[$name1]['source'];
+                    }
+                    $compiler->template->block_data[$name1]['mode'] = 'replace';
+                    if ($saved_data[0]['append']) {
+                        $compiler->template->block_data[$name1]['mode'] = 'append';
+                    }
+                    if ($saved_data[0]['prepend']) {
+                        $compiler->template->block_data[$name1]['mode'] = 'prepend';
+                    }
+                }
+                unset(Smarty_Internal_Compile_Block::$block_data[$name1]);
+                $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY);
+            }
+            $compiler->has_code = false;
+            return;
+        }
         if (isset($compiler->template->block_data[$_name]) && !isset($compiler->template->block_data[$_name]['compiled'])) {
-            // restore to status before {block} tag as new subtemplate code of parent {block} is not needed
-            // TODO: Below code was disabled in 3.1.8 because of problems with {include} in nested {block} tags in child templates
-            //       combined with append/prepend or $smarty.block.parent
-            //       For later versions it should be checked under which conditions it could run for optimisation
-            //
-            //$compiler->merged_templates = $saved_data[4];
-            //$compiler->smarty->merged_templates_func = $saved_data[5];
-            //$compiler->template->properties = $saved_data[6];
-            //$compiler->template->has_nocache_code = $saved_data[7];
             $_output = Smarty_Internal_Compile_Block::compileChildBlock($compiler, $_name);
         } else {
-            if (isset($saved_data[0]['hide']) && !isset($compiler->template->block_data[$_name]['source'])) {
+            if ($saved_data[0]['hide'] && !isset($compiler->template->block_data[$_name]['source'])) {
                 $_output = '';
             } else {
                 $_output = $compiler->parser->current_buffer->to_smarty_php();
             }
-            unset($compiler->template->block_data[$_name]['compiled']);
         }
+        unset($compiler->template->block_data[$_name]['compiled']);
         // reset flags
-        $compiler->parser->current_buffer = $saved_data[1];
-        $compiler->nocache = $saved_data[2];
-        $compiler->smarty->merge_compiled_includes = $saved_data[3];
-        // reset flag for {block} tag
-        $compiler->inheritance = false;
+        $compiler->parser->current_buffer = $saved_data[2];
+        if ($compiler->nocache) {
+            $compiler->tag_nocache = true;
+        }
+        $compiler->nocache = $saved_data[3];
         // $_output content has already nocache code processed
         $compiler->suppressNocacheProcessing = true;
+
         return $_output;
     }
+}
+
+/**
+ * Smarty Internal Plugin Compile Child Block Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Child_Block extends Smarty_Internal_CompileBase
+{
+
+    /**
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
+    public $required_attributes = array('name', 'file', 'uid', 'line', 'type', 'resource');
+
+    /**
+     * Compiles code for the {private_child_block} tag
+     *
+     * @param array  $args     array with attributes from parser
+     * @param object $compiler compiler object
+     *
+     * @return boolean true
+     */
+    public function compile($args, $compiler)
+    {
+        // check and get attributes
+        $_attr = $this->getAttributes($compiler, $args);
+
+        // update template with original template resource of {block}
+        if (trim($_attr['type'], "'") == 'file') {
+            $compiler->template->template_resource = realpath(trim($_attr['file'], "'"));
+        } else {
+            $compiler->template->template_resource = trim($_attr['resource'], "'");
+        }
+        // source object
+        unset ($compiler->template->source);
+        $exists = $compiler->template->source->exists;
+
+        // must merge includes
+        if ($_attr['nocache'] == true) {
+            $compiler->tag_nocache = true;
+        }
+        $save = array($_attr, $compiler->nocache);
+
+        // set trace back to child block
+        $compiler->pushTrace(trim($_attr['file'], "\"'"), trim($_attr['uid'], "\"'"), $_attr['line'] - $compiler->lex->line);
+
+        $this->openTag($compiler, 'private_child_block', $save);
+
+        $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
+        $compiler->has_code = false;
 
+        return true;
+    }
 }
 
-?>
\ No newline at end of file
+/**
+ * Smarty Internal Plugin Compile Child Block Close Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Child_Blockclose extends Smarty_Internal_CompileBase
+{
+
+    /**
+     * Compiles code for the {/private_child_block} tag
+     *
+     * @param array  $args     array with attributes from parser
+     * @param object $compiler compiler object
+     *
+     * @return boolean true
+     */
+    public function compile($args, $compiler)
+    {
+        // check and get attributes
+        $_attr = $this->getAttributes($compiler, $args);
+
+        $saved_data = $this->closeTag($compiler, array('private_child_block'));
+
+        // end of child block
+        $compiler->popTrace();
+
+        $compiler->nocache = $saved_data[1];
+        $compiler->has_code = false;
+
+        return true;
+    }
+}
index 259c66e2b23ebe5a0fc0763592e3f913fdbe5d1e..b470234b16d4e51be91c55c99c7c07034bf18ff6 100644 (file)
@@ -1,77 +1,75 @@
-<?php\r
-/**\r
- * Smarty Internal Plugin Compile Break\r
- *\r
- * Compiles the {break} tag\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Uwe Tews\r
- */\r
-/**\r
- * Smarty Internal Plugin Compile Break Class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase {\r
-\r
-    /**\r
-     * Attribute definition: Overwrites base class.\r
-     *\r
-     * @var array\r
-     * @see Smarty_Internal_CompileBase\r
-     */\r
-    public $optional_attributes = array('levels');\r
-    /**\r
-     * Attribute definition: Overwrites base class.\r
-     *\r
-     * @var array\r
-     * @see Smarty_Internal_CompileBase\r
-     */\r
-    public $shorttag_order = array('levels');\r
-\r
-    /**\r
-     * Compiles code for the {break} tag\r
-     *\r
-     * @param array  $args array with attributes from parser\r
-     * @param object $compiler   compiler object\r
-     * @param array  $parameter  array with compilation parameter\r
-     * @return string compiled code\r
-     */\r
-    public function compile($args, $compiler, $parameter)\r
-    {\r
-        static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);\r
-        // check and get attributes\r
-        $_attr = $this->getAttributes($compiler, $args);\r
-\r
-        if ($_attr['nocache'] === true) {\r
-            $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);\r
-        }\r
-\r
-        if (isset($_attr['levels'])) {\r
-            if (!is_numeric($_attr['levels'])) {\r
-                $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);\r
-            }\r
-            $_levels = $_attr['levels'];\r
-        } else {\r
-            $_levels = 1;\r
-        }\r
-        $level_count = $_levels;\r
-        $stack_count = count($compiler->_tag_stack) - 1;\r
-        while ($level_count > 0 && $stack_count >= 0) {\r
-            if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {\r
-                $level_count--;\r
-            }\r
-            $stack_count--;\r
-        }\r
-        if ($level_count != 0) {\r
-            $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno);\r
-        }\r
-        $compiler->has_code = true;\r
-        return "<?php break {$_levels}?>";\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Break
+ * Compiles the {break} tag
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Break Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
+{
+    /**
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
+    public $optional_attributes = array('levels');
+    /**
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
+    public $shorttag_order = array('levels');
+
+    /**
+     * Compiles code for the {break} tag
+     *
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
+     * @return string compiled code
+     */
+    public function compile($args, $compiler, $parameter)
+    {
+        static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
+        // check and get attributes
+        $_attr = $this->getAttributes($compiler, $args);
+
+        if ($_attr['nocache'] === true) {
+            $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+        }
+
+        if (isset($_attr['levels'])) {
+            if (!is_numeric($_attr['levels'])) {
+                $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
+            }
+            $_levels = $_attr['levels'];
+        } else {
+            $_levels = 1;
+        }
+        $level_count = $_levels;
+        $stack_count = count($compiler->_tag_stack) - 1;
+        while ($level_count > 0 && $stack_count >= 0) {
+            if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
+                $level_count --;
+            }
+            $stack_count --;
+        }
+        if ($level_count != 0) {
+            $compiler->trigger_template_error("cannot break {$_levels} level(s)", $compiler->lex->taglineno);
+        }
+
+        return "<?php break {$_levels}?>";
+    }
+}
index af12a048c5b075b84c46c8714f08d6a355eee468..bfbd1f547212e78abe2fb4cb2dd2d4dfbac21ef8 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Function_Call
- *
  * Compiles the calls of user defined tags defined by {function}
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Function_Call Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -42,9 +41,9 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
     /**
      * Compiles the calls of user defined tags defined by {function}
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -53,7 +52,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
         $_attr = $this->getAttributes($compiler, $args);
         // save possible attributes
         if (isset($_attr['assign'])) {
-            // output will be stored in a smarty variable instead of beind displayed
+            // output will be stored in a smarty variable instead of being displayed
             $_assign = $_attr['assign'];
         }
         $_name = $_attr['name'];
@@ -96,7 +95,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
                 }
             }
         }
-        //varibale name?
+        //variable name?
         if (!(strpos($_name, '$') === false)) {
             $call_cache = $_name;
             $call_function = '$tmp = "smarty_template_function_".' . $_name . '; $tmp';
@@ -122,9 +121,7 @@ class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
                 $_output = "<?php {$call_function}(\$_smarty_tpl,{$_params});?>\n";
             }
         }
+
         return $_output;
     }
-
 }
-
-?>
\ No newline at end of file
index 9a5071ebe668db17759614c47b5fbfcca182a182..34728e47abcbe95f254c59a6ba7122e2f62831cb 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Capture
- *
  * Compiles the {capture} tag
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Capture Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -35,8 +34,9 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
     /**
      * Compiles code for the {capture} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -55,22 +55,22 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
 
         return $_output;
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Captureclose Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {/capture} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -90,9 +90,7 @@ class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
         $_output .= " if (isset( \$_capture_append)) \$_smarty_tpl->append( \$_capture_append, ob_get_contents());\n";
         $_output .= " Smarty::\$_smarty_vars['capture'][\$_capture_buffer]=ob_get_clean();\n";
         $_output .= "} else \$_smarty_tpl->capture_error();?>";
+
         return $_output;
     }
-
 }
-
-?>
\ No newline at end of file
index deaa052c52b69d2dbc15672a2ba104de5243c160..8813664d4736ad62b60b1c7858e612baaf58e0ba 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Config Load
- *
  * Compiles the {config load} tag
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Config Load Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -30,7 +29,7 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
      * @var array
      * @see Smarty_Internal_CompileBase
      */
-    public $shorttag_order = array('file','section');
+    public $shorttag_order = array('file', 'section');
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -42,13 +41,14 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
     /**
      * Compiles code for the {config_load} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
     {
-        static $_is_legal_scope = array('local' => true,'parent' => true,'root' => true,'global' => true);
+        static $_is_legal_scope = array('local' => true, 'parent' => true, 'root' => true, 'global' => true);
         // check and get attributes
         $_attr = $this->getAttributes($compiler, $args);
 
@@ -56,8 +56,7 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
             $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
         }
 
-
-        // save posible attributes
+        // save possible attributes
         $conf_file = $_attr['file'];
         if (isset($_attr['section'])) {
             $section = $_attr['section'];
@@ -70,16 +69,14 @@ class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
             $_attr['scope'] = trim($_attr['scope'], "'\"");
             if (isset($_is_legal_scope[$_attr['scope']])) {
                 $scope = $_attr['scope'];
-           } else {
+            } else {
                 $compiler->trigger_template_error('illegal value for "scope" attribute', $compiler->lex->taglineno);
-           }
+            }
         }
         // create config object
         $_output = "<?php  \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);";
         $_output .= "\$_config->loadConfigVars($section, '$scope'); ?>";
+
         return $_output;
     }
-
 }
-
-?>
\ No newline at end of file
index 4082a93b37d94fba4a0a3702c6ad3207cbf70499..7038bfb4d3c6d4c312fb6b5bfc120daf6f2a23b4 100644 (file)
@@ -1,78 +1,75 @@
-<?php\r
-/**\r
- * Smarty Internal Plugin Compile Continue\r
- *\r
- * Compiles the {continue} tag\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * Smarty Internal Plugin Compile Continue Class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase {\r
-\r
-    /**\r
-     * Attribute definition: Overwrites base class.\r
-     *\r
-     * @var array\r
-     * @see Smarty_Internal_CompileBase\r
-     */\r
-    public $optional_attributes = array('levels');\r
-    /**\r
-     * Attribute definition: Overwrites base class.\r
-     *\r
-     * @var array\r
-     * @see Smarty_Internal_CompileBase\r
-     */\r
-    public $shorttag_order = array('levels');\r
-\r
-    /**\r
-     * Compiles code for the {continue} tag\r
-     *\r
-     * @param array  $args      array with attributes from parser\r
-     * @param object $compiler  compiler object\r
-     * @param array  $parameter array with compilation parameter\r
-     * @return string compiled code\r
-     */\r
-    public function compile($args, $compiler, $parameter)\r
-    {\r
-        static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);\r
-        // check and get attributes\r
-        $_attr = $this->getAttributes($compiler, $args);\r
-\r
-        if ($_attr['nocache'] === true) {\r
-            $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);\r
-        }\r
-\r
-        if (isset($_attr['levels'])) {\r
-            if (!is_numeric($_attr['levels'])) {\r
-                $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);\r
-            }\r
-            $_levels = $_attr['levels'];\r
-        } else {\r
-            $_levels = 1;\r
-        }\r
-        $level_count = $_levels;\r
-        $stack_count = count($compiler->_tag_stack) - 1;\r
-        while ($level_count > 0 && $stack_count >= 0) {\r
-            if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {\r
-                $level_count--;\r
-            }\r
-            $stack_count--;\r
-        }\r
-        if ($level_count != 0) {\r
-            $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno);\r
-        }\r
-        $compiler->has_code = true;\r
-        return "<?php continue {$_levels}?>";\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Continue
+ * Compiles the {continue} tag
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Continue Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Continue extends Smarty_Internal_CompileBase
+{
+    /**
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
+    public $optional_attributes = array('levels');
+    /**
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
+    public $shorttag_order = array('levels');
+
+    /**
+     * Compiles code for the {continue} tag
+     *
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
+     * @return string compiled code
+     */
+    public function compile($args, $compiler, $parameter)
+    {
+        static $_is_loopy = array('for' => true, 'foreach' => true, 'while' => true, 'section' => true);
+        // check and get attributes
+        $_attr = $this->getAttributes($compiler, $args);
+
+        if ($_attr['nocache'] === true) {
+            $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
+        }
+
+        if (isset($_attr['levels'])) {
+            if (!is_numeric($_attr['levels'])) {
+                $compiler->trigger_template_error('level attribute must be a numeric constant', $compiler->lex->taglineno);
+            }
+            $_levels = $_attr['levels'];
+        } else {
+            $_levels = 1;
+        }
+        $level_count = $_levels;
+        $stack_count = count($compiler->_tag_stack) - 1;
+        while ($level_count > 0 && $stack_count >= 0) {
+            if (isset($_is_loopy[$compiler->_tag_stack[$stack_count][0]])) {
+                $level_count --;
+            }
+            $stack_count --;
+        }
+        if ($level_count != 0) {
+            $compiler->trigger_template_error("cannot continue {$_levels} level(s)", $compiler->lex->taglineno);
+        }
+
+        return "<?php continue {$_levels}?>";
+    }
+}
index f50c7aee2145672b427625725f6b9ec2bab4762c..b184a746be3482576e3fa36b500e358b71c6aa4c 100644 (file)
@@ -1,28 +1,28 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Debug
- *
  * Compiles the {debug} tag.
  * It opens a window the the Smarty Debugging Console.
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Debug Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {debug} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -35,9 +35,7 @@ class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase {
 
         // display debug template
         $_output = "<?php \$_smarty_tpl->smarty->loadPlugin('Smarty_Internal_Debug'); Smarty_Internal_Debug::display_debug(\$_smarty_tpl); ?>";
+
         return $_output;
     }
-
 }
-
-?>
\ No newline at end of file
index 6cf481b505fa9f80be4bb5ad54f2b8f283a268f7..407482f07a229cd9eb0bea5eee2cb1c32744534d 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Eval
- *
  * Compiles the {eval} tag.
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Eval Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -37,13 +36,14 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
      * @var array
      * @see Smarty_Internal_CompileBase
      */
-    public $shorttag_order = array('var','assign');
+    public $shorttag_order = array('var', 'assign');
 
     /**
      * Compiles code for the {eval} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -53,21 +53,19 @@ class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase {
         // check and get attributes
         $_attr = $this->getAttributes($compiler, $args);
         if (isset($_attr['assign'])) {
-              // output will be stored in a smarty variable instead of beind displayed
+            // output will be stored in a smarty variable instead of being displayed
             $_assign = $_attr['assign'];
         }
 
         // create template object
-        $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'.".$_attr['var'].", \$_smarty_tpl->smarty, \$_smarty_tpl);";
+        $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);";
         //was there an assign attribute?
         if (isset($_assign)) {
             $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
         } else {
             $_output .= "echo \$_template->fetch();";
         }
+
         return "<?php $_output ?>";
     }
-
 }
-
-?>
\ No newline at end of file
index 9042aa23339b10cfb4a42285a70ae8c344abe984..2b541f2e358f648cdf136564e2e849ebe892968f 100644 (file)
 <?php
 
 /**
-* Smarty Internal Plugin Compile extend
-*
-* Compiles the {extends} tag
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile extend
+ * Compiles the {extends} tag
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
 
 /**
-* Smarty Internal Plugin Compile extend Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile extend Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase
+{
     /**
-    * Attribute definition: Overwrites base class.
-    *
-    * @var array
-    * @see Smarty_Internal_CompileBase
-    */
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
     public $required_attributes = array('file');
     /**
-    * Attribute definition: Overwrites base class.
-    *
-    * @var array
-    * @see Smarty_Internal_CompileBase
-    */
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
     public $shorttag_order = array('file');
-    /**
-    * mbstring.overload flag
-    *
-    * @var int
-    */
-    public $mbstring_overload = 0;
 
     /**
-    * Compiles code for the {extends} tag
-    *
-    * @param array  $args     array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {extends} tag
+     *
+     * @param array  $args     array with attributes from parser
+     * @param object $compiler compiler object
+     *
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
-        static $_is_stringy = array('string' => true, 'eval' => true);
-        $this->_rdl = preg_quote($compiler->smarty->right_delimiter);
-        $this->_ldl = preg_quote($compiler->smarty->left_delimiter);
-        $filepath = $compiler->template->source->filepath;
-        $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
         // check and get attributes
         $_attr = $this->getAttributes($compiler, $args);
         if ($_attr['nocache'] === true) {
             $compiler->trigger_template_error('nocache option not allowed', $compiler->lex->taglineno);
         }
-
-        $_smarty_tpl = $compiler->template;
-        $include_file = null;
         if (strpos($_attr['file'], '$_tmp') !== false) {
             $compiler->trigger_template_error('illegal value for file attribute', $compiler->lex->taglineno);
         }
-        eval('$include_file = ' . $_attr['file'] . ';');
+
+        $name = $_attr['file'];
+        /** @var Smarty_Internal_Template $_smarty_tpl
+         * used in evaluated code
+         */
+        $_smarty_tpl = $compiler->template;
+        eval("\$tpl_name = $name;");
         // create template object
-        $_template = new $compiler->smarty->template_class($include_file, $compiler->smarty, $compiler->template);
-        // save file dependency
-        if (isset($_is_stringy[$_template->source->type])) {
-            $template_sha1 = sha1($include_file);
-        } else {
-            $template_sha1 = sha1($_template->source->filepath);
-        }
-        if (isset($compiler->template->properties['file_dependency'][$template_sha1])) {
-            $compiler->trigger_template_error("illegal recursive call of \"{$include_file}\"", $compiler->lex->line - 1);
-        }
-        $compiler->template->properties['file_dependency'][$template_sha1] = array($_template->source->filepath, $_template->source->timestamp, $_template->source->type);
-        $_content = ($this->mbstring_overload ? mb_substr($compiler->template->source->content, $compiler->lex->counter - 1, 20000000, 'latin1') : substr($compiler->template->source->content, $compiler->lex->counter - 1));
-        if (preg_match_all("!({$this->_ldl}block\s(.+?){$this->_rdl})!", $_content, $s) !=
-        preg_match_all("!({$this->_ldl}/block{$this->_rdl})!", $_content, $c)) {
-            $compiler->trigger_template_error('unmatched {block} {/block} pairs');
+        $_template = new $compiler->smarty->template_class($tpl_name, $compiler->smarty, $compiler->template);
+        // check for recursion
+        $uid = $_template->source->uid;
+        if (isset($compiler->extends_uid[$uid])) {
+            $compiler->trigger_template_error("illegal recursive call of \"$include_file\"", $compiler->lex->line - 1);
         }
-        preg_match_all("!{$this->_ldl}block\s(.+?){$this->_rdl}|{$this->_ldl}/block{$this->_rdl}|{$this->_ldl}\*([\S\s]*?)\*{$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
-        $_result_count = count($_result[0]);
-        $_start = 0;
-        while ($_start+1 < $_result_count) {
-            $_end = 0;
-            $_level = 1;
-            if (($this->mbstring_overload ? mb_substr($_result[0][$_start][0],0,mb_strlen($compiler->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start][0],0,strlen($compiler->smarty->left_delimiter)+1)) == $compiler->smarty->left_delimiter.'*') {
-                $_start++;
-                continue;
-            }
-            while ($_level != 0) {
-                $_end++;
-                if (($this->mbstring_overload ? mb_substr($_result[0][$_start + $_end][0],0,mb_strlen($compiler->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start + $_end][0],0,strlen($compiler->smarty->left_delimiter)+1)) == $compiler->smarty->left_delimiter.'*') {
-                    continue;
-                }
-                if (!strpos($_result[0][$_start + $_end][0], '/')) {
-                    $_level++;
-                } else {
-                    $_level--;
+        $compiler->extends_uid[$uid] = true;
+        if (empty($_template->source->components)) {
+            array_unshift($compiler->sources, $_template->source);
+        } else {
+            foreach ($_template->source->components as $source) {
+                array_unshift($compiler->sources, $source);
+                $uid = $source->uid;
+                if (isset($compiler->extends_uid[$uid])) {
+                    $compiler->trigger_template_error("illegal recursive call of \"{$source->filepath}\"", $compiler->lex->line - 1);
                 }
-            }
-            $_block_content = str_replace($compiler->smarty->left_delimiter . '$smarty.block.parent' . $compiler->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
-            ($this->mbstring_overload ? mb_substr($_content, $_result[0][$_start][1] + mb_strlen($_result[0][$_start][0], 'latin1'), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + mb_strlen($_result[0][$_start][0], 'latin1'), 'latin1') : substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0]))));
-            Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $compiler->template, $filepath);
-            $_start = $_start + $_end + 1;
-        }
-        if ($_template->source->type == 'extends') {
-            $_template->block_data = $compiler->template->block_data;
-        }
-        $compiler->template->source->content = $_template->source->content;
-        if ($_template->source->type == 'extends') {
-            $compiler->template->block_data = $_template->block_data;
-            foreach ($_template->source->components as $key => $component) {
-                $compiler->template->properties['file_dependency'][$key] = array($component->filepath, $component->timestamp, $component->type);
+                $compiler->extends_uid[$uid] = true;
             }
         }
-        $compiler->template->source->filepath = $_template->source->filepath;
-        $compiler->abort_and_recompile = true;
+        unset ($_template);
+        $compiler->inheritance_child = true;
+        $compiler->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY);
         return '';
     }
-
 }
-
-?>
\ No newline at end of file
index 057f4fb7955a7a063d784aa51680cd7f160702a6..a624b922c9e5c78a1861b788641ce8cb5dd5ec57 100644 (file)
@@ -1,39 +1,35 @@
 <?php
 /**
  * Smarty Internal Plugin Compile For
- *
  * Compiles the {for} {forelse} {/for} tags
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile For Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {for} tag
-     *
-     * Smarty 3 does implement two different sytaxes:
-     *
+     * Smarty 3 does implement two different syntax's:
      * - {for $var in $array}
      * For looping over arrays or iterators
-     *
      * - {for $x=0; $x<$y; $x++}
      * For general loops
+     * The parser is generating different sets of attribute by which this compiler can
+     * determine which syntax is used.
      *
-     * The parser is gereration different sets of attribute by which this compiler can
-     * determin which syntax is used.
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
@@ -54,7 +50,7 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
                 $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
                 $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value];\n";
             }
-            $output .= "  if ($_attr[ifexp]){ for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[step]){\n";
+            $output .= "  if ($_attr[ifexp]) { for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[step]) {\n";
         } else {
             $_statement = $_attr['start'];
             $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
@@ -64,12 +60,12 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
                 $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = 1;";
             }
             if (isset($_attr['max'])) {
-                $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n";
+                $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int) min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n";
             } else {
-                $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n";
+                $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int) ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n";
             }
-            $output .= "if (\$_smarty_tpl->tpl_vars[$_statement[var]]->total > 0){\n";
-            $output .= "for (\$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value], \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration = 1;\$_smarty_tpl->tpl_vars[$_statement[var]]->iteration <= \$_smarty_tpl->tpl_vars[$_statement[var]]->total;\$_smarty_tpl->tpl_vars[$_statement[var]]->value += \$_smarty_tpl->tpl_vars[$_statement[var]]->step, \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration++){\n";
+            $output .= "if (\$_smarty_tpl->tpl_vars[$_statement[var]]->total > 0) {\n";
+            $output .= "for (\$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value], \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration = 1;\$_smarty_tpl->tpl_vars[$_statement[var]]->iteration <= \$_smarty_tpl->tpl_vars[$_statement[var]]->total;\$_smarty_tpl->tpl_vars[$_statement[var]]->value += \$_smarty_tpl->tpl_vars[$_statement[var]]->step, \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration++) {\n";
             $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->first = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == 1;";
             $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->last = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == \$_smarty_tpl->tpl_vars[$_statement[var]]->total;";
         }
@@ -81,51 +77,52 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
         // return compiled code
         return $output;
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Forelse Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {forelse} tag
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
     {
         // check and get attributes
-        $_attr  = $this->getAttributes($compiler, $args);
+        $_attr = $this->getAttributes($compiler, $args);
 
         list($openTag, $nocache) = $this->closeTag($compiler, array('for'));
         $this->openTag($compiler, 'forelse', array('forelse', $nocache));
+
         return "<?php }} else { ?>";
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Forclose Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {/for} tag
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
@@ -145,7 +142,4 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
             return "<?php }} ?>";
         }
     }
-
 }
-
-?>
\ No newline at end of file
index 1354c89d534a273b5dcf52e2d0c006c038df5f83..fc77f57490368c92313698346ab4a00de7b6891b 100644 (file)
@@ -1,21 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Foreach
- *
  * Compiles the {foreach} {foreachelse} {/foreach} tags
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Foreach Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
+class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -36,19 +36,19 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
      * @var array
      * @see Smarty_Internal_CompileBase
      */
-    public $shorttag_order = array('from','item','key','name');
+    public $shorttag_order = array('from', 'item', 'key', 'name');
 
     /**
      * Compiles code for the {foreach} tag
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
     {
-        $tpl = $compiler->template;
         // check and get attributes
         $_attr = $this->getAttributes($compiler, $args);
 
@@ -79,12 +79,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
         $ItemVarName = '$' . trim($item, '\'"') . '@';
         // evaluates which Smarty variables and properties have to be computed
         if ($has_name) {
-            $usesSmartyFirst = strpos($tpl->source->content, $SmartyVarName . 'first') !== false;
-            $usesSmartyLast = strpos($tpl->source->content, $SmartyVarName . 'last') !== false;
-            $usesSmartyIndex = strpos($tpl->source->content, $SmartyVarName . 'index') !== false;
-            $usesSmartyIteration = strpos($tpl->source->content, $SmartyVarName . 'iteration') !== false;
-            $usesSmartyShow = strpos($tpl->source->content, $SmartyVarName . 'show') !== false;
-            $usesSmartyTotal = strpos($tpl->source->content, $SmartyVarName . 'total') !== false;
+            $usesSmartyFirst = strpos($compiler->lex->data, $SmartyVarName . 'first') !== false;
+            $usesSmartyLast = strpos($compiler->lex->data, $SmartyVarName . 'last') !== false;
+            $usesSmartyIndex = strpos($compiler->lex->data, $SmartyVarName . 'index') !== false;
+            $usesSmartyIteration = strpos($compiler->lex->data, $SmartyVarName . 'iteration') !== false;
+            $usesSmartyShow = strpos($compiler->lex->data, $SmartyVarName . 'show') !== false;
+            $usesSmartyTotal = strpos($compiler->lex->data, $SmartyVarName . 'total') !== false;
         } else {
             $usesSmartyFirst = false;
             $usesSmartyLast = false;
@@ -92,12 +92,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
             $usesSmartyShow = false;
         }
 
-        $usesPropFirst = $usesSmartyFirst || strpos($tpl->source->content, $ItemVarName . 'first') !== false;
-        $usesPropLast = $usesSmartyLast || strpos($tpl->source->content, $ItemVarName . 'last') !== false;
-        $usesPropIndex = $usesPropFirst || strpos($tpl->source->content, $ItemVarName . 'index') !== false;
-        $usesPropIteration = $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'iteration') !== false;
-        $usesPropShow = strpos($tpl->source->content, $ItemVarName . 'show') !== false;
-        $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($tpl->source->content, $ItemVarName . 'total') !== false;
+        $usesPropFirst = $usesSmartyFirst || strpos($compiler->lex->data, $ItemVarName . 'first') !== false;
+        $usesPropLast = $usesSmartyLast || strpos($compiler->lex->data, $ItemVarName . 'last') !== false;
+        $usesPropIndex = $usesPropFirst || strpos($compiler->lex->data, $ItemVarName . 'index') !== false;
+        $usesPropIteration = $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'iteration') !== false;
+        $usesPropShow = strpos($compiler->lex->data, $ItemVarName . 'show') !== false;
+        $usesPropTotal = $usesSmartyTotal || $usesSmartyShow || $usesPropShow || $usesPropLast || strpos($compiler->lex->data, $ItemVarName . 'total') !== false;
         // generate output code
         $output = "<?php ";
         $output .= " \$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable; \$_smarty_tpl->tpl_vars[$item]->_loop = false;\n";
@@ -131,7 +131,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
                 $output .= " \$_smarty_tpl->tpl_vars['smarty']->value['foreach'][$name]['show']=(\$_smarty_tpl->tpl_vars[$item]->total > 0);\n";
             }
         }
-        $output .= "foreach (\$_from as \$_smarty_tpl->tpl_vars[$item]->key => \$_smarty_tpl->tpl_vars[$item]->value){\n\$_smarty_tpl->tpl_vars[$item]->_loop = true;\n";
+        $output .= "foreach (\$_from as \$_smarty_tpl->tpl_vars[$item]->key => \$_smarty_tpl->tpl_vars[$item]->value) {\n\$_smarty_tpl->tpl_vars[$item]->_loop = true;\n";
         if ($key != null) {
             $output .= " \$_smarty_tpl->tpl_vars[$key]->value = \$_smarty_tpl->tpl_vars[$item]->key;\n";
         }
@@ -170,17 +170,18 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
 /**
  * Smarty Internal Plugin Compile Foreachelse Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {foreachelse} tag
      *
-     * @param array  $args array with attributes from parser
-     * @param object $compiler compiler object
-     * @param array  $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
@@ -193,23 +194,23 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
 
         return "<?php }\nif (!\$_smarty_tpl->tpl_vars[$item]->_loop) {\n?>";
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Foreachclose Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {/foreach} tag
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
@@ -225,7 +226,4 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase {
 
         return "<?php } ?>";
     }
-
 }
-
-?>
\ No newline at end of file
index 876b13dee1b5457e126919df0a20165f0d5ee747..e161bac1471f051bf7574a08696c115b84a1c7bd 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Function
- *
  * Compiles the {function} {/function} tags
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Function Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -42,9 +41,10 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
     /**
      * Compiles code for the {function} tag
      *
-     * @param array $args array with attributes from parser
-     * @param object $compiler compiler object
-     * @param array $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return boolean true
      */
     public function compile($args, $compiler, $parameter)
@@ -57,16 +57,19 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
         }
         unset($_attr['nocache']);
         $save = array($_attr, $compiler->parser->current_buffer,
-            $compiler->template->has_nocache_code, $compiler->template->required_plugins);
+                      $compiler->template->has_nocache_code, $compiler->template->required_plugins);
         $this->openTag($compiler, 'function', $save);
         $_name = trim($_attr['name'], "'\"");
         unset($_attr['name']);
         // set flag that we are compiling a template function
         $compiler->compiles_template_function = true;
         $compiler->template->properties['function'][$_name]['parameter'] = array();
+        /** @var Smarty_Internal_Template $_smarty_tpl
+         * used in evaluated code
+         */
         $_smarty_tpl = $compiler->template;
         foreach ($_attr as $_key => $_data) {
-            eval ('$tmp='.$_data.';');
+            eval ('$tmp=' . $_data . ';');
             $compiler->template->properties['function'][$_name]['parameter'][$_key] = $tmp;
         }
         $compiler->smarty->template_functions[$_name]['parameter'] = $compiler->template->properties['function'][$_name]['parameter'];
@@ -79,7 +82,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
     foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
     foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
         }
-        // Init temporay context
+        // Init temporary context
         $compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array());
         $compiler->parser->current_buffer = new _smarty_template_buffer($compiler->parser);
         $compiler->parser->current_buffer->append_subtree(new _smarty_tag($compiler->parser, $output));
@@ -88,23 +91,23 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
         $compiler->template->properties['function'][$_name]['compiled'] = '';
         return true;
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Functionclose Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {/function} tag
      *
-     * @param array $args array with attributes from parser
-     * @param object $compiler compiler object
-     * @param array $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return boolean true
      */
     public function compile($args, $compiler, $parameter)
@@ -116,8 +119,8 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
         $plugins_string = '';
         if (!empty($compiler->template->required_plugins['compiled'])) {
             $plugins_string = '<?php ';
-            foreach($compiler->template->required_plugins['compiled'] as $tmp) {
-                foreach($tmp as $data) {
+            foreach ($compiler->template->required_plugins['compiled'] as $tmp) {
+                foreach ($tmp as $data) {
                     $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$data['file']}';\n";
                 }
             }
@@ -125,22 +128,22 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
         }
         if (!empty($compiler->template->required_plugins['nocache'])) {
             $plugins_string .= "<?php echo '/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php ";
-            foreach($compiler->template->required_plugins['nocache'] as $tmp) {
-                foreach($tmp as $data) {
+            foreach ($compiler->template->required_plugins['nocache'] as $tmp) {
+                foreach ($tmp as $data) {
                     $plugins_string .= "if (!is_callable(\'{$data['function']}\')) include \'{$data['file']}\';\n";
                 }
             }
             $plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n";
         }
-         // remove last line break from function definition
-         $last = count($compiler->parser->current_buffer->subtrees) - 1;
-         if ($compiler->parser->current_buffer->subtrees[$last] instanceof _smarty_linebreak) {
-             unset($compiler->parser->current_buffer->subtrees[$last]);
-         }
+        // remove last line break from function definition
+        $last = count($compiler->parser->current_buffer->subtrees) - 1;
+        if ($compiler->parser->current_buffer->subtrees[$last] instanceof _smarty_linebreak) {
+            unset($compiler->parser->current_buffer->subtrees[$last]);
+        }
         // if caching save template function for possible nocache call
         if ($compiler->template->caching) {
             $compiler->template->properties['function'][$_name]['compiled'] .= $plugins_string
-             . $compiler->parser->current_buffer->to_smarty_php();
+                . $compiler->parser->current_buffer->to_smarty_php();
             $compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash'];
             $compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code;
             $compiler->template->properties['function'][$_name]['called_functions'] = $compiler->called_functions;
@@ -149,7 +152,8 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
             $compiler->has_code = false;
             $output = true;
         } else {
-            $output = $plugins_string . $compiler->parser->current_buffer->to_smarty_php() . "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}}?>\n";
+            $output = $plugins_string . $compiler->parser->current_buffer->to_smarty_php() . "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;
+foreach (Smarty::\$global_tpl_vars as \$key => \$value) if(!isset(\$_smarty_tpl->tpl_vars[\$key])) \$_smarty_tpl->tpl_vars[\$key] = \$value;}}?>\n";
         }
         // reset flag that we are compiling a template function
         $compiler->compiles_template_function = false;
@@ -157,9 +161,7 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
         $compiler->parser->current_buffer = $saved_data[1];
         $compiler->template->has_nocache_code = $compiler->template->has_nocache_code | $saved_data[2];
         $compiler->template->required_plugins = $saved_data[3];
+
         return $output;
     }
-
 }
-
-?>
\ No newline at end of file
index 8794b014b3dfabc1ec845a25c0fe76e668364505..d709fcfd81d0c454b613e7897eab6ea2d792fc0c 100644 (file)
@@ -1,30 +1,30 @@
 <?php
 /**
-* Smarty Internal Plugin Compile If
-*
-* Compiles the {if} {else} {elseif} {/if} tags
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile If
+ * Compiles the {if} {else} {elseif} {/if} tags
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
 
 /**
-* Smarty Internal Plugin Compile If Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile If Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
+{
     /**
-    * Compiles code for the {if} tag
-    *
-    * @param array  $args       array with attributes from parser
-    * @param object $compiler   compiler object
-    * @param array  $parameter  array with compilation parameter
-    * @return string compiled code
-    */
+     * Compiles code for the {if} tag
+     *
+     * @param array  $args      array with attributes from parser
+     * @param object $compiler  compiler object
+     * @param array  $parameter array with compilation parameter
+     *
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $parameter)
     {
         // check and get attributes
@@ -33,7 +33,7 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
         // must whole block be nocache ?
         $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
 
-        if (!array_key_exists("if condition",$parameter)) {
+        if (!array_key_exists("if condition", $parameter)) {
             $compiler->trigger_template_error("missing if condition", $compiler->lex->taglineno);
         }
 
@@ -50,62 +50,63 @@ class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
                 $_nocache = '';
             }
             if (is_array($parameter['if condition']['var'])) {
-                $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]) || !is_array(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value)) \$_smarty_tpl->createLocalArrayVariable(".$parameter['if condition']['var']['var']."$_nocache);\n";
-                $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']['var']."]->value".$parameter['if condition']['var']['smarty_internal_index']." = ".$parameter['if condition']['value']."){?>";
+                $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
+                $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
             } else {
-                $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."] = new Smarty_Variable(null{$_nocache});";
-                $_output .= "if (\$_smarty_tpl->tpl_vars[".$parameter['if condition']['var']."]->value = ".$parameter['if condition']['value']."){?>";
+                $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
+                $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
             }
+
             return $_output;
         } else {
-            return "<?php if ({$parameter['if condition']}){?>";
+            return "<?php if ({$parameter['if condition']}) {?>";
         }
     }
-
 }
 
 /**
-* Smarty Internal Plugin Compile Else Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Else Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
+{
     /**
-    * Compiles code for the {else} tag
-    *
-    * @param array  $args       array with attributes from parser
-    * @param object $compiler   compiler object
-    * @param array  $parameter  array with compilation parameter
-    * @return string compiled code
-    */
+     * Compiles code for the {else} tag
+     *
+     * @param array  $args      array with attributes from parser
+     * @param object $compiler  compiler object
+     * @param array  $parameter array with compilation parameter
+     *
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $parameter)
     {
         list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
         $this->openTag($compiler, 'else', array($nesting, $compiler->tag_nocache));
 
-        return "<?php }else{ ?>";
+        return "<?php } else { ?>";
     }
-
 }
 
 /**
-* Smarty Internal Plugin Compile ElseIf Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile ElseIf Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
+{
     /**
-    * Compiles code for the {elseif} tag
-    *
-    * @param array  $args       array with attributes from parser
-    * @param object $compiler   compiler object
-    * @param array  $parameter  array with compilation parameter
-    * @return string compiled code
-    */
+     * Compiles code for the {elseif} tag
+     *
+     * @param array  $args      array with attributes from parser
+     * @param object $compiler  compiler object
+     * @param array  $parameter array with compilation parameter
+     *
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $parameter)
     {
         // check and get attributes
@@ -113,7 +114,7 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
 
         list($nesting, $compiler->tag_nocache) = $this->closeTag($compiler, array('if', 'elseif'));
 
-        if (!array_key_exists("if condition",$parameter)) {
+        if (!array_key_exists("if condition", $parameter)) {
             $compiler->trigger_template_error("missing elseif condition", $compiler->lex->taglineno);
         }
 
@@ -138,56 +139,60 @@ class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
             if ($condition_by_assign) {
                 $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
                 if (is_array($parameter['if condition']['var'])) {
-                    $_output = "<?php }else{ if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
-                    $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+                    $_output = "<?php } else { if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
+                    $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
                 } else {
-                    $_output = "<?php  }else{ if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
-                    $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+                    $_output = "<?php  } else { if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
+                    $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
                 }
+
                 return $_output;
             } else {
                 $this->openTag($compiler, 'elseif', array($nesting, $compiler->tag_nocache));
-                return "<?php }elseif({$parameter['if condition']}){?>";
+
+                return "<?php } elseif ({$parameter['if condition']}) {?>";
             }
         } else {
             $tmp = '';
-            foreach ($compiler->prefix_code as $code)
-            $tmp .= $code;
+            foreach ($compiler->prefix_code as $code) {
+                $tmp .= $code;
+            }
             $compiler->prefix_code = array();
             $this->openTag($compiler, 'elseif', array($nesting + 1, $compiler->tag_nocache));
             if ($condition_by_assign) {
                 if (is_array($parameter['if condition']['var'])) {
-                    $_output = "<?php }else{?>{$tmp}<?php  if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
-                    $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+                    $_output = "<?php } else {?>{$tmp}<?php  if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
+                    $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
                 } else {
-                    $_output = "<?php }else{?>{$tmp}<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
-                    $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+                    $_output = "<?php } else {?>{$tmp}<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
+                    $_output .= "if (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
                 }
+
                 return $_output;
             } else {
-                return "<?php }else{?>{$tmp}<?php if ({$parameter['if condition']}){?>";
+                return "<?php } else {?>{$tmp}<?php if ({$parameter['if condition']}) {?>";
             }
         }
     }
-
 }
 
 /**
-* Smarty Internal Plugin Compile Ifclose Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Ifclose Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
+{
     /**
-    * Compiles code for the {/if} tag
-    *
-    * @param array  $args       array with attributes from parser
-    * @param object $compiler   compiler object
-    * @param array  $parameter  array with compilation parameter
-    * @return string compiled code
-    */
+     * Compiles code for the {/if} tag
+     *
+     * @param array  $args      array with attributes from parser
+     * @param object $compiler  compiler object
+     * @param array  $parameter array with compilation parameter
+     *
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $parameter)
     {
         // must endblock be nocache?
@@ -196,12 +201,10 @@ class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
         }
         list($nesting, $compiler->nocache) = $this->closeTag($compiler, array('if', 'else', 'elseif'));
         $tmp = '';
-        for ($i = 0; $i < $nesting; $i++) {
+        for ($i = 0; $i < $nesting; $i ++) {
             $tmp .= '}';
         }
+
         return "<?php {$tmp}?>";
     }
-
 }
-
-?>
\ No newline at end of file
index 43a144f943887c22abd7f46130fee4f419f50507..4b7b09ce73970b5f9b05bb5654bfcb60d111b083 100644 (file)
@@ -1,72 +1,72 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Include
-*
-* Compiles the {include} tag
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Include
+ * Compiles the {include} tag
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
 
 /**
-* Smarty Internal Plugin Compile Include Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Include Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
+{
     /**
-    * caching mode to create nocache code but no cache file
-    */
+     * caching mode to create nocache code but no cache file
+     */
     const CACHING_NOCACHE_CODE = 9999;
     /**
-    * Attribute definition: Overwrites base class.
-    *
-    * @var array
-    * @see Smarty_Internal_CompileBase
-    */
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
     public $required_attributes = array('file');
     /**
-    * Attribute definition: Overwrites base class.
-    *
-    * @var array
-    * @see Smarty_Internal_CompileBase
-    */
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
     public $shorttag_order = array('file');
     /**
-    * Attribute definition: Overwrites base class.
-    *
-    * @var array
-    * @see Smarty_Internal_CompileBase
-    */
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
     public $option_flags = array('nocache', 'inline', 'caching');
     /**
-    * Attribute definition: Overwrites base class.
-    *
-    * @var array
-    * @see Smarty_Internal_CompileBase
-    */
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
     public $optional_attributes = array('_any');
 
     /**
-    * Compiles code for the {include} tag
-    *
-     * @param array $args array with attributes from parser
-     * @param object $compiler compiler object
-     * @param array $parameter array with compilation parameter
+     * Compiles code for the {include} tag
+     *
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
     {
         // check and get attributes
         $_attr = $this->getAttributes($compiler, $args);
-        // save posible attributes
+        // save possible attributes
         $include_file = $_attr['file'];
 
         if (isset($_attr['assign'])) {
-            // output will be stored in a smarty variable instead of beind displayed
+            // output will be stored in a smarty variable instead of being displayed
             $_assign = $_attr['assign'];
         }
 
@@ -81,12 +81,15 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
                 $_parent_scope = Smarty::SCOPE_GLOBAL;
             }
         }
-        $_caching = 'null';
-        if ($compiler->nocache || $compiler->tag_nocache) {
-            $_caching = Smarty::CACHING_OFF;
-        }
-        // default for included templates
-        if ($compiler->template->caching && !$compiler->nocache && !$compiler->tag_nocache) {
+
+        $_caching = Smarty::CACHING_OFF;
+
+        // flag if included template code should be merged into caller
+        $merge_compiled_includes = ($compiler->smarty->merge_compiled_includes || ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) || $_attr['inline'] === true) && !$compiler->template->source->recompiled;
+
+        // set default when in nocache mode
+        //       if ($compiler->template->caching && ($compiler->nocache || $compiler->tag_nocache || $compiler->forceNocache == 2)) {
+        if ($compiler->template->caching && ((!$compiler->inheritance && !$compiler->nocache && !$compiler->tag_nocache) || ($compiler->inheritance && ($compiler->nocache || $compiler->tag_nocache)))) {
             $_caching = self::CACHING_NOCACHE_CODE;
         }
         /*
@@ -118,52 +121,93 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
         }
         if ($_attr['nocache'] === true) {
             $compiler->tag_nocache = true;
-            $_caching = Smarty::CACHING_OFF;
+            if ($merge_compiled_includes) {
+                $_caching = self::CACHING_NOCACHE_CODE;
+            } else {
+                $_caching = Smarty::CACHING_OFF;
+            }
         }
 
         $has_compiled_template = false;
-        if (($compiler->smarty->merge_compiled_includes || $_attr['inline'] === true) && !$compiler->template->source->recompiled
-            && !($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache)) && $_caching != Smarty::CACHING_LIFETIME_CURRENT) {
-            // check if compiled code can be merged (contains no variable part)
-            if (!$compiler->has_variable_string && (substr_count($include_file, '"') == 2 or substr_count($include_file, "'") == 2)
-               and substr_count($include_file, '(') == 0 and substr_count($include_file, '$_smarty_tpl->') == 0) {
-                $tpl_name = null;
-                eval("\$tpl_name = $include_file;");
-                if (!isset($compiler->smarty->merged_templates_func[$tpl_name]) || $compiler->inheritance) {
-                    $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
-                    // save unique function name
-                    $compiler->smarty->merged_templates_func[$tpl_name]['func'] = $tpl->properties['unifunc'] = 'content_'. str_replace('.', '_', uniqid('', true));
-                    // use current nocache hash for inlined code
-                    $compiler->smarty->merged_templates_func[$tpl_name]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
-                    if ($compiler->template->caching) {
-                        // needs code for cached page but no cache file
-                        $tpl->caching = self::CACHING_NOCACHE_CODE;
+        if ($merge_compiled_includes && $_attr['inline'] !== true) {
+            // variable template name ?
+            if ($compiler->has_variable_string || !((substr_count($include_file, '"') == 2 || substr_count($include_file, "'") == 2))
+                || substr_count($include_file, '(') != 0 || substr_count($include_file, '$_smarty_tpl->') != 0
+            ) {
+                $merge_compiled_includes = false;
+                if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
+                    $compiler->trigger_template_error(' variable template file names not allow within {block} tags');
+                }
+            }
+            // variable compile_id?
+            if (isset($_attr['compile_id'])) {
+                if (!((substr_count($_attr['compile_id'], '"') == 2 || substr_count($_attr['compile_id'], "'") == 2))
+                    || substr_count($_attr['compile_id'], '(') != 0 || substr_count($_attr['compile_id'], '$_smarty_tpl->') != 0
+                ) {
+                    $merge_compiled_includes = false;
+                    if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
+                        $compiler->trigger_template_error(' variable compile_id not allow within {block} tags');
                     }
-                    // make sure whole chain gest compiled
-                    $tpl->mustCompile = true;
-                    if (!($tpl->source->uncompiled) && $tpl->source->exists) {
-                        // get compiled code
-                        $compiled_code = $tpl->compiler->compileTemplate($tpl);
-                        // release compiler object to free memory
-                        unset($tpl->compiler);
-                        // merge compiled code for {function} tags
-                        $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']);
-                        // merge filedependency
-                        $tpl->properties['file_dependency'][$tpl->source->uid] = array($tpl->source->filepath, $tpl->source->timestamp,$tpl->source->type);
-                        $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $tpl->properties['file_dependency']);
-                        // remove header code
-                        $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code);
-                        if ($tpl->has_nocache_code) {
-                            // replace nocache_hash
-                            $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code);
-                            $compiler->template->has_nocache_code = true;
-                        }
-                        $compiler->merged_templates[$tpl->properties['unifunc']] = $compiled_code;
-                        $has_compiled_template = true;
+                }
+            }
+        }
+        if ($merge_compiled_includes) {
+            if ($compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache) && $_caching != self::CACHING_NOCACHE_CODE) {
+                $merge_compiled_includes = false;
+                if ($compiler->inheritance && $compiler->smarty->inheritance_merge_compiled_includes) {
+                    $compiler->trigger_template_error(' invalid caching mode of subtemplate within {block} tags');
+                }
+            }
+        }
+        if ($merge_compiled_includes) {
+            // we must observe different compile_id
+            $uid = sha1($_compile_id);
+            $tpl_name = null;
+            $nocache = false;
+            /** @var Smarty_Internal_Template $_smarty_tpl
+             * used in evaluated code
+             */
+            $_smarty_tpl = $compiler->template;
+            eval("\$tpl_name = $include_file;");
+            if (!isset($compiler->smarty->merged_templates_func[$tpl_name][$uid])) {
+                $tpl = new $compiler->smarty->template_class ($tpl_name, $compiler->smarty, $compiler->template, $compiler->template->cache_id, $compiler->template->compile_id);
+                // save unique function name
+                $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] = $tpl->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
+                // use current nocache hash for inlined code
+                $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'] = $tpl->properties['nocache_hash'] = $compiler->template->properties['nocache_hash'];
+                if ($compiler->template->caching && $_caching == self::CACHING_NOCACHE_CODE) {
+                    // all code must be nocache
+                    $nocache = true;
+                }
+                if ($compiler->inheritance) {
+                    $tpl->compiler->inheritance = true;
+                }
+                // make sure whole chain gets compiled
+                $tpl->mustCompile = true;
+                if (!($tpl->source->uncompiled) && $tpl->source->exists) {
+
+                    // get compiled code
+                    $compiled_code = $tpl->compiler->compileTemplate($tpl, $nocache);
+                    // release compiler object to free memory
+                    unset($tpl->compiler);
+                    // merge compiled code for {function} tags
+                    $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $tpl->properties['function']);
+                    // merge filedependency
+                    $tpl->properties['file_dependency'][$tpl->source->uid] = array($tpl->source->filepath, $tpl->source->timestamp, $tpl->source->type);
+                    $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $tpl->properties['file_dependency']);
+                    // remove header code
+                    $compiled_code = preg_replace("/(<\?php \/\*%%SmartyHeaderCode:{$tpl->properties['nocache_hash']}%%\*\/(.+?)\/\*\/%%SmartyHeaderCode%%\*\/\?>\n)/s", '', $compiled_code);
+                    if ($tpl->has_nocache_code) {
+                        // replace nocache_hash
+                        $compiled_code = str_replace("{$tpl->properties['nocache_hash']}", $compiler->template->properties['nocache_hash'], $compiled_code);
+                        $compiler->template->has_nocache_code = true;
                     }
-                } else {
+                    $compiler->merged_templates[$tpl->properties['unifunc']] = $compiled_code;
                     $has_compiled_template = true;
+                    unset ($tpl);
                 }
+            } else {
+                $has_compiled_template = true;
             }
         }
         // delete {include} standard attributes
@@ -172,32 +216,40 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
         if (!empty($_attr)) {
             if ($_parent_scope == Smarty::SCOPE_LOCAL) {
                 // create variables
+                $nccode = '';
                 foreach ($_attr as $key => $value) {
                     $_pairs[] = "'$key'=>$value";
+                    $nccode .= "\$_smarty_tpl->tpl_vars['$key'] =  new Smarty_variable($value);\n";
                 }
-                $_vars = 'array('.join(',',$_pairs).')';
-                $_has_vars = true;
+                $_vars = 'array(' . join(',', $_pairs) . ')';
             } else {
                 $compiler->trigger_template_error('variable passing not allowed in parent/global scope', $compiler->lex->taglineno);
             }
         } else {
             $_vars = 'array()';
-            $_has_vars = false;
         }
         if ($has_compiled_template) {
-            $_hash = $compiler->smarty->merged_templates_func[$tpl_name]['nocache_hash'];
+            // never call inline templates in nocache mode
+            $compiler->suppressNocacheProcessing = true;
+            $_hash = $compiler->smarty->merged_templates_func[$tpl_name][$uid]['nocache_hash'];
             $_output = "<?php /*  Call merged included template \"" . $tpl_name . "\" */\n";
             $_output .= "\$_tpl_stack[] = \$_smarty_tpl;\n";
+            if (!empty($nccode) && $_caching == 9999 && $_smarty_tpl->caching) {
+                $compiler->suppressNocacheProcessing = false;
+                $_output .=  substr($compiler->processNocacheCode('<?php ' .$nccode . "?>\n", true), 6, -3);
+                $compiler->suppressNocacheProcessing = true;
+            }
             $_output .= " \$_smarty_tpl = \$_smarty_tpl->setupInlineSubTemplate($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope, '$_hash');\n";
             if (isset($_assign)) {
                 $_output .= 'ob_start(); ';
             }
-            $_output .= $compiler->smarty->merged_templates_func[$tpl_name]['func']. "(\$_smarty_tpl);\n";
+            $_output .= $compiler->smarty->merged_templates_func[$tpl_name][$uid]['func'] . "(\$_smarty_tpl);\n";
             $_output .= "\$_smarty_tpl = array_pop(\$_tpl_stack); ";
             if (isset($_assign)) {
                 $_output .= " \$_smarty_tpl->tpl_vars[$_assign] = new Smarty_variable(ob_get_clean());";
             }
-            $_output .= "/*  End of included template \"" . $tpl_name . "\" */?>";
+            $_output .= "\n/*  End of included template \"" . $tpl_name . "\" */?>";
+
             return $_output;
         }
 
@@ -207,9 +259,7 @@ class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase {
         } else {
             $_output = "<?php echo \$_smarty_tpl->getSubTemplate ($include_file, $_cache_id, $_compile_id, $_caching, $_cache_lifetime, $_vars, $_parent_scope);?>\n";
         }
+
         return $_output;
     }
-
 }
-
-?>
\ No newline at end of file
index d52712368db66bdfb26d58dcf542ed1594226aaa..76f506c528a1d2a3b5379ac9972f9a4786d14155 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Include PHP
- *
  * Compiles the {include_php} tag
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Insert Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -42,8 +41,10 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
     /**
      * Compiles code for the {include_php} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
+     * @throws SmartyException
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -54,8 +55,9 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
         // check and get attributes
         $_attr = $this->getAttributes($compiler, $args);
 
-        $_output = '<?php ';
-
+        /** @var Smarty_Internal_Template $_smarty_tpl
+         * used in evaluated code
+         */
         $_smarty_tpl = $compiler->template;
         $_filepath = false;
         eval('$_file = ' . $_attr['file'] . ';');
@@ -68,10 +70,10 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
                 $_dir = $compiler->smarty->trusted_dir;
             }
             if (!empty($_dir)) {
-                foreach((array)$_dir as $_script_dir) {
+                foreach ((array) $_dir as $_script_dir) {
                     $_script_dir = rtrim($_script_dir, '/\\') . DS;
                     if (file_exists($_script_dir . $_file)) {
-                        $_filepath = $_script_dir .  $_file;
+                        $_filepath = $_script_dir . $_file;
                         break;
                     }
                 }
@@ -102,7 +104,4 @@ class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_CompileBase {
             return "<?php include{$_once} ('{$_filepath}');?>\n";
         }
     }
-
 }
-
-?>
\ No newline at end of file
index e4d3f93552c9f7559c7b8c995d53e9d1ac10c3ad..4c6585543f874dc399f97af00614d49d7196ff99 100644 (file)
@@ -2,22 +2,21 @@
 
 /**
  * Smarty Internal Plugin Compile Insert
- *
  * Compiles the {insert} tag
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Insert Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -43,8 +42,9 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
     /**
      * Compiles code for the {insert} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -59,12 +59,12 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
         $_script = null;
 
         $_output = '<?php ';
-        // save posible attributes
+        // save possible attributes
         eval('$_name = ' . $_attr['name'] . ';');
         if (isset($_attr['assign'])) {
             // output will be stored in a smarty variable instead of being displayed
             $_assign = $_attr['assign'];
-            // create variable to make shure that the compiler knows about its nocache status
+            // create variable to make sure that the compiler knows about its nocache status
             $compiler->template->tpl_vars[trim($_attr['assign'], "'")] = new Smarty_Variable(null, true);
         }
         if (isset($_attr['script'])) {
@@ -82,7 +82,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
                     $_dir = $compiler->smarty->trusted_dir;
                 }
                 if (!empty($_dir)) {
-                    foreach((array)$_dir as $_script_dir) {
+                    foreach ((array) $_dir as $_script_dir) {
                         $_script_dir = rtrim($_script_dir, '/\\') . DS;
                         if (file_exists($_script_dir . $_script)) {
                             $_filepath = $_script_dir . $_script;
@@ -134,9 +134,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase {
                 $_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";
             }
         }
+
         return $_output;
     }
-
 }
-
-?>
\ No newline at end of file
index 99063259015ef2a2c6eaefcc66e742db7e5e9d9c..91b44881e90b2a5e68d57e462713bfa4b637eb5a 100644 (file)
@@ -1,28 +1,28 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Ldelim
- *
  * Compiles the {ldelim} tag
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Ldelim Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {ldelim} tag
-     *
      * This tag does output the left delimiter
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     *
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -33,9 +33,7 @@ class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase {
         }
         // this tag does not return compiled code
         $compiler->has_code = true;
+
         return $compiler->smarty->left_delimiter;
     }
-
 }
-
-?>
index 5fb71b71db7e3adf0b8d6c9a0a5518c2088b7215..ba39717fd984c2e63990e33fdf86cb59f3de48f5 100644 (file)
@@ -1,29 +1,28 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Nocache
- *
  * Compiles the {nocache} {/nocache} tags.
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
- * Smarty Internal Plugin Compile Nocache Classv
+ * Smarty Internal Plugin Compile Nocache Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {nocache} tag
-     *
      * This tag does not generate compiled output. It only sets a compiler flag.
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return bool
      */
     public function compile($args, $compiler)
@@ -36,26 +35,26 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
         $compiler->nocache = true;
         // this tag does not return compiled code
         $compiler->has_code = false;
+
         return true;
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Nocacheclose Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {/nocache} tag
-     *
      * This tag does not generate compiled output. It only sets a compiler flag.
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return bool
      */
     public function compile($args, $compiler)
@@ -65,9 +64,7 @@ class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
         $compiler->nocache = false;
         // this tag does not return compiled code
         $compiler->has_code = false;
+
         return true;
     }
-
 }
-
-?>
\ No newline at end of file
index 5288f456078c09d957d0bac8a23ceb17bb1f4c16..3dff8538e897cd2f8301189f94b711cfd492b53d 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Block Plugin
- *
  * Compiles code for the execution of block plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Block Plugin Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -28,23 +27,24 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
     /**
      * Compiles code for the execution of block plugin
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
-     * @param string $tag       name of block plugin
-     * @param string $function  PHP function name
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     * @param  string $tag       name of block plugin
+     * @param  string $function  PHP function name
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter, $tag, $function)
     {
-        if (!isset($tag[5]) || substr($tag, -5) != 'close') {
+        if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
             // opening tag of block plugin
             // check and get attributes
             $_attr = $this->getAttributes($compiler, $args);
             if ($_attr['nocache'] === true) {
                 $compiler->tag_nocache = true;
             }
-               unset($_attr['nocache']);
+            unset($_attr['nocache']);
             // convert attributes into parameter array string
             $_paramsArray = array();
             foreach ($_attr as $_key => $_value) {
@@ -67,21 +67,19 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
                 $compiler->tag_nocache = true;
             }
             // closing tag of block plugin, restore nocache
-            list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, -5));
+            list($_params, $compiler->nocache) = $this->closeTag($compiler, substr($tag, 0, - 5));
             // This tag does create output
             $compiler->has_output = true;
             // compile code
             if (!isset($parameter['modifier_list'])) {
-                $mod_pre = $mod_post ='';
+                $mod_pre = $mod_post = '';
             } else {
                 $mod_pre = ' ob_start(); ';
-                $mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';';
+                $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
             }
-            $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+            $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
         }
+
         return $output . "\n";
     }
-
 }
-
-?>
\ No newline at end of file
index 70e7643180c8d3b695ba3a7651d6c5247d00e5d4..4fbd4dc1867a3e5d937e55d96bd9383477178a91 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Function Plugin
- *
  * Compiles code for the execution of function plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Function Plugin Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -35,11 +34,12 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
     /**
      * Compiles code for the execution of function plugin
      *
-     * @param array $args array with attributes from parser
-     * @param object $compiler compiler object
-     * @param array $parameter array with compilation parameter
-     * @param string $tag name of function plugin
-     * @param string $function PHP function name
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     * @param  string $tag       name of function plugin
+     * @param  string $function  PHP function name
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter, $tag, $function)
@@ -65,9 +65,7 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
         $_params = 'array(' . implode(",", $_paramsArray) . ')';
         // compile code
         $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n";
+
         return $output;
     }
-
 }
-
-?>
\ No newline at end of file
index 120f3ff10b8b7f76caeb8af9f6ced574f653e2bd..ba03bfcfad54eec847d4484aad1d3d75928328ca 100644 (file)
-<?php\r
-\r
-/**\r
- * Smarty Internal Plugin Compile Modifier\r
- *\r
- * Compiles code for modifier execution\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * Smarty Internal Plugin Compile Modifier Class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase {\r
-\r
-    /**\r
-     * Compiles code for modifier execution\r
-     *\r
-     * @param array  $args      array with attributes from parser\r
-     * @param object $compiler  compiler object\r
-     * @param array  $parameter array with compilation parameter\r
-     * @return string compiled code\r
-     */\r
-    public function compile($args, $compiler, $parameter) {\r
-        // check and get attributes\r
-        $_attr = $this->getAttributes($compiler, $args);\r
-        $output = $parameter['value'];\r
-        // loop over list of modifiers\r
-        foreach ($parameter['modifierlist'] as $single_modifier) {\r
-            $modifier = $single_modifier[0];\r
-            $single_modifier[0] = $output;\r
-            $params = implode(',', $single_modifier);\r
-            // check if we know already the type of modifier\r
-            if (isset($compiler->known_modifier_type[$modifier])) {\r
-                $modifier_types = array($compiler->known_modifier_type[$modifier]);\r
-            } else {\r
-                $modifier_types = array(1, 2, 3, 4, 5, 6);\r
-            }\r
-            foreach ($modifier_types as $type) {\r
-                switch ($type) {\r
-                    case 1:\r
-                        // registered modifier\r
-                        if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier])) {\r
-                            $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];\r
-                            if (!is_array($function)) {\r
-                                $output = "{$function}({$params})";\r
-                            } else {\r
-                                if (is_object($function[0])) {\r
-                                    $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';\r
-                                } else {\r
-                                    $output = $function[0] . '::' . $function[1] . '(' . $params . ')';\r
-                                }\r
-                            }\r
-                            $compiler->known_modifier_type[$modifier] = $type;\r
-                            break 2;\r
-                        }\r
-                        break;\r
-                    case 2:\r
-                        // registered modifier compiler\r
-                        if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0])) {\r
-                            $output = call_user_func($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0], $single_modifier, $compiler->smarty);\r
-                            $compiler->known_modifier_type[$modifier] = $type;\r
-                            break 2;\r
-                        }\r
-                        break;\r
-                    case 3:\r
-                        // modifiercompiler plugin\r
-                        if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {\r
-                            // check if modifier allowed\r
-                            if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {\r
-                                $plugin = 'smarty_modifiercompiler_' . $modifier;\r
-                                $output = $plugin($single_modifier, $compiler);\r
-                            }\r
-                            $compiler->known_modifier_type[$modifier] = $type;\r
-                            break 2;\r
-                        }\r
-                        break;\r
-                    case 4:\r
-                        // modifier plugin\r
-                        if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {\r
-                            // check if modifier allowed\r
-                            if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {\r
-                                $output = "{$function}({$params})";\r
-                            }\r
-                            $compiler->known_modifier_type[$modifier] = $type;\r
-                            break 2;\r
-                        }\r
-                        break;\r
-                    case 5:\r
-                        // PHP function\r
-                        if (is_callable($modifier)) {\r
-                            // check if modifier allowed\r
-                            if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)) {\r
-                                $output = "{$modifier}({$params})";\r
-                            }\r
-                            $compiler->known_modifier_type[$modifier] = $type;\r
-                            break 2;\r
-                        }\r
-                        break;\r
-                    case 6:\r
-                        // default plugin handler\r
-                        if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) || (is_callable($compiler->smarty->default_plugin_handler_func) && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))) {\r
-                            $function = $compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];\r
-                            // check if modifier allowed\r
-                            if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {\r
-                                if (!is_array($function)) {\r
-                                    $output = "{$function}({$params})";\r
-                                } else {\r
-                                    if (is_object($function[0])) {\r
-                                        $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';\r
-                                    } else {\r
-                                        $output = $function[0] . '::' . $function[1] . '(' . $params . ')';\r
-                                    }\r
-                                }\r
-                            }\r
-                            if (isset($compiler->template->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || isset($compiler->template->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file'])) {\r
-                                // was a plugin\r
-                                $compiler->known_modifier_type[$modifier] = 4;\r
-                            } else {\r
-                                $compiler->known_modifier_type[$modifier] = $type;\r
-                            }\r
-                            break 2;\r
-                        }\r
-                }\r
-            }\r
-            if (!isset($compiler->known_modifier_type[$modifier])) {\r
-                $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", $compiler->lex->taglineno);\r
-            }\r
-        }\r
-        return $output;\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+
+/**
+ * Smarty Internal Plugin Compile Modifier
+ * Compiles code for modifier execution
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Modifier Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBase
+{
+    /**
+     * Compiles code for modifier execution
+     *
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
+     * @return string compiled code
+     */
+    public function compile($args, $compiler, $parameter)
+    {
+        // check and get attributes
+        $_attr = $this->getAttributes($compiler, $args);
+        $output = $parameter['value'];
+        // loop over list of modifiers
+        foreach ($parameter['modifierlist'] as $single_modifier) {
+            $modifier = $single_modifier[0];
+            $single_modifier[0] = $output;
+            $params = implode(',', $single_modifier);
+            // check if we know already the type of modifier
+            if (isset($compiler->known_modifier_type[$modifier])) {
+                $modifier_types = array($compiler->known_modifier_type[$modifier]);
+            } else {
+                $modifier_types = array(1, 2, 3, 4, 5, 6);
+            }
+            foreach ($modifier_types as $type) {
+                switch ($type) {
+                    case 1:
+                        // registered modifier
+                        if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier])) {
+                            $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];
+                            if (!is_array($function)) {
+                                $output = "{$function}({$params})";
+                            } else {
+                                if (is_object($function[0])) {
+                                    $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
+                                } else {
+                                    $output = $function[0] . '::' . $function[1] . '(' . $params . ')';
+                                }
+                            }
+                            $compiler->known_modifier_type[$modifier] = $type;
+                            break 2;
+                        }
+                        break;
+                    case 2:
+                        // registered modifier compiler
+                        if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0])) {
+                            $output = call_user_func($compiler->smarty->registered_plugins[Smarty::PLUGIN_MODIFIERCOMPILER][$modifier][0], $single_modifier, $compiler->smarty);
+                            $compiler->known_modifier_type[$modifier] = $type;
+                            break 2;
+                        }
+                        break;
+                    case 3:
+                        // modifiercompiler plugin
+                        if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
+                            // check if modifier allowed
+                            if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+                                $plugin = 'smarty_modifiercompiler_' . $modifier;
+                                $output = $plugin($single_modifier, $compiler);
+                            }
+                            $compiler->known_modifier_type[$modifier] = $type;
+                            break 2;
+                        }
+                        break;
+                    case 4:
+                        // modifier plugin
+                        if ($function = $compiler->getPlugin($modifier, Smarty::PLUGIN_MODIFIER)) {
+                            // check if modifier allowed
+                            if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+                                $output = "{$function}({$params})";
+                            }
+                            $compiler->known_modifier_type[$modifier] = $type;
+                            break 2;
+                        }
+                        break;
+                    case 5:
+                        // PHP function
+                        if (is_callable($modifier)) {
+                            // check if modifier allowed
+                            if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)) {
+                                $output = "{$modifier}({$params})";
+                            }
+                            $compiler->known_modifier_type[$modifier] = $type;
+                            break 2;
+                        }
+                        break;
+                    case 6:
+                        // default plugin handler
+                        if (isset($compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier]) || (is_callable($compiler->smarty->default_plugin_handler_func) && $compiler->getPluginFromDefaultHandler($modifier, Smarty::PLUGIN_MODIFIER))) {
+                            $function = $compiler->default_handler_plugins[Smarty::PLUGIN_MODIFIER][$modifier][0];
+                            // check if modifier allowed
+                            if (!is_object($compiler->smarty->security_policy) || $compiler->smarty->security_policy->isTrustedModifier($modifier, $compiler)) {
+                                if (!is_array($function)) {
+                                    $output = "{$function}({$params})";
+                                } else {
+                                    if (is_object($function[0])) {
+                                        $output = '$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][\'' . $modifier . '\'][0][0]->' . $function[1] . '(' . $params . ')';
+                                    } else {
+                                        $output = $function[0] . '::' . $function[1] . '(' . $params . ')';
+                                    }
+                                }
+                            }
+                            if (isset($compiler->template->required_plugins['nocache'][$modifier][Smarty::PLUGIN_MODIFIER]['file']) || isset($compiler->template->required_plugins['compiled'][$modifier][Smarty::PLUGIN_MODIFIER]['file'])) {
+                                // was a plugin
+                                $compiler->known_modifier_type[$modifier] = 4;
+                            } else {
+                                $compiler->known_modifier_type[$modifier] = $type;
+                            }
+                            break 2;
+                        }
+                }
+            }
+            if (!isset($compiler->known_modifier_type[$modifier])) {
+                $compiler->trigger_template_error("unknown modifier \"" . $modifier . "\"", $compiler->lex->taglineno);
+            }
+        }
+
+        return $output;
+    }
+}
index cca924d103fd44cee1db5133f73ac40ec3445005..5418fefff0e3222a7e7a625b92aa48508f367d18 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Object Block Function
- *
  * Compiles code for registered objects as block function
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Object Block Function Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -28,16 +27,17 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
     /**
      * Compiles code for the execution of block plugin
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
-     * @param string $tag       name of block object
-     * @param string $method    name of method to call
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     * @param  string $tag       name of block object
+     * @param  string $method    name of method to call
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter, $tag, $method)
     {
-        if (!isset($tag[5]) || substr($tag, -5) != 'close') {
+        if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
             // opening tag of block plugin
             // check and get attributes
             $_attr = $this->getAttributes($compiler, $args);
@@ -62,7 +62,7 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
             // compile code
             $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$method}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
         } else {
-            $base_tag = substr($tag, 0, -5);
+            $base_tag = substr($tag, 0, - 5);
             // must endblock be nocache?
             if ($compiler->nocache) {
                 $compiler->tag_nocache = true;
@@ -80,9 +80,7 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
             }
             $output = "<?php \$_block_content = ob_get_contents(); ob_end_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_objects['{$base_tag}'][0]->{$method}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "  } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
         }
+
         return $output . "\n";
     }
-
 }
-
-?>
\ No newline at end of file
index f649084c3972823a7ad9f9e4b3b60f2dca58cf9b..d6eb47ab34d37378ad571ce79b6368ae1aee3943 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
- * Smarty Internal Plugin Compile Object Funtion
- *
+ * Smarty Internal Plugin Compile Object Function
  * Compiles code for registered objects as function
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Object Function Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -28,11 +27,12 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
     /**
      * Compiles code for the execution of function plugin
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
-     * @param string $tag       name of function
-     * @param string $method    name of method to call
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     * @param  string $tag       name of function
+     * @param  string $method    name of method to call
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter, $tag, $method)
@@ -48,22 +48,29 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
             $_assign = $_attr['assign'];
             unset($_attr['assign']);
         }
-        // convert attributes into parameter array string
-        if ($compiler->smarty->registered_objects[$tag][2]) {
-            $_paramsArray = array();
-            foreach ($_attr as $_key => $_value) {
-                if (is_int($_key)) {
-                    $_paramsArray[] = "$_key=>$_value";
-                } else {
-                    $_paramsArray[] = "'$_key'=>$_value";
+        // method or property ?
+        if (method_exists($compiler->smarty->registered_objects[$tag][0], $method)) {
+            // convert attributes into parameter array string
+            if ($compiler->smarty->registered_objects[$tag][2]) {
+                $_paramsArray = array();
+                foreach ($_attr as $_key => $_value) {
+                    if (is_int($_key)) {
+                        $_paramsArray[] = "$_key=>$_value";
+                    } else {
+                        $_paramsArray[] = "'$_key'=>$_value";
+                    }
                 }
+                $_params = 'array(' . implode(",", $_paramsArray) . ')';
+                $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
+            } else {
+                $_params = implode(",", $_attr);
+                $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
             }
-            $_params = 'array(' . implode(",", $_paramsArray) . ')';
-            $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params},\$_smarty_tpl)";
         } else {
-            $_params = implode(",", $_attr);
-            $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}({$_params})";
+            // object property
+            $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$method}";
         }
+
         if (empty($_assign)) {
             // This tag does create output
             $compiler->has_output = true;
@@ -71,9 +78,7 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
         } else {
             $output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n";
         }
+
         return $output;
     }
-
 }
-
-?>
\ No newline at end of file
index a371195479edf44ad376d80f9e9fbc40d473d178..188bbe77a1b26809258c3b764cce45d7f5f90471 100644 (file)
@@ -1,45 +1,46 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Print Expression
-*
-* Compiles any tag which will output an expression or variable
-*
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Compile Print Expression
+ * Compiles any tag which will output an expression or variable
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
 
 /**
-* Smarty Internal Plugin Compile Print Expression Class
-*
-* @package Smarty
-* @subpackage Compiler
-*/
-class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase {
-
+ * Smarty Internal Plugin Compile Print Expression Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase
+{
     /**
-    * Attribute definition: Overwrites base class.
-    *
-    * @var array
-    * @see Smarty_Internal_CompileBase
-    */
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
     public $optional_attributes = array('assign');
     /**
-    * Attribute definition: Overwrites base class.
-    *
-    * @var array
-    * @see Smarty_Internal_CompileBase
-    */
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
     public $option_flags = array('nocache', 'nofilter');
 
     /**
-    * Compiles code for gererting output from any expression
-    *
-    * @param array  $args      array with attributes from parser
-    * @param object $compiler  compiler object
-    * @param array  $parameter array with compilation parameter
-    * @return string compiled code
-    */
+     * Compiles code for generating output from any expression
+     *
+     * @param array  $args      array with attributes from parser
+     * @param object $compiler  compiler object
+     * @param array  $parameter array with compilation parameter
+     *
+     * @throws SmartyException
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $parameter)
     {
         // check and get attributes
@@ -48,12 +49,6 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
         if ($_attr['nocache'] === true) {
             $compiler->tag_nocache = true;
         }
-        // filter handling
-        if ($_attr['nofilter'] === true) {
-            $_filter = 'false';
-        } else {
-            $_filter = 'true';
-        }
         if (isset($_attr['assign'])) {
             // assign output to variable
             $output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>";
@@ -71,13 +66,13 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
                         $modifierlist = array();
                         foreach ($compiler->smarty->default_modifiers as $key => $single_default_modifier) {
                             preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array);
-                            for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) {
+                            for ($i = 0, $count = count($mod_array[0]); $i < $count; $i ++) {
                                 if ($mod_array[0][$i] != ':') {
                                     $modifierlist[$key][] = $mod_array[0][$i];
                                 }
                             }
                         }
-                        $compiler->default_modifier_list  = $modifierlist;
+                        $compiler->default_modifier_list = $modifierlist;
                     }
                     $output = $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list, 'value' => $output));
                 }
@@ -85,13 +80,13 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
                 if ($compiler->template->smarty->escape_html) {
                     $output = "htmlspecialchars({$output}, ENT_QUOTES, '" . addslashes(Smarty::$_CHARSET) . "')";
                 }
-                // loop over registerd filters
+                // loop over registered filters
                 if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) {
                     foreach ($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) {
                         if (!is_array($function)) {
                             $output = "{$function}({$output},\$_smarty_tpl)";
-                        } else if (is_object($function[0])) {
-                            $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE][{$key}][0]->{$function[1]}({$output},\$_smarty_tpl)";
+                        } elseif (is_object($function[0])) {
+                            $output = "\$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},\$_smarty_tpl)";
                         } else {
                             $output = "{$function[0]}::{$function[1]}({$output},\$_smarty_tpl)";
                         }
@@ -99,7 +94,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
                 }
                 // auto loaded filters
                 if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) {
-                    foreach ((array)$compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) {
+                    foreach ((array) $compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) {
                         $result = $this->compile_output_filter($compiler, $name, $output);
                         if ($result !== false) {
                             $output = $result;
@@ -123,15 +118,17 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
             $compiler->has_output = true;
             $output = "<?php echo {$output};?>";
         }
+
         return $output;
     }
 
     /**
-    * @param object $compiler compiler object
-    * @param string $name     name of variable filter
-    * @param type   $output   embedded output
-    * @return string
-    */
+     * @param object $compiler compiler object
+     * @param string $name     name of variable filter
+     * @param string   $output   embedded output
+     *
+     * @return string
+     */
     private function compile_output_filter($compiler, $name, $output)
     {
         $plugin_name = "smarty_variablefilter_{$name}";
@@ -148,9 +145,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
             // not found
             return false;
         }
+
         return "{$plugin_name}({$output},\$_smarty_tpl)";
     }
-
 }
-
-?>
\ No newline at end of file
index 9fed36c3bdfccc506a5fcdf2d64bd840802aef33..68ab644fc976405252cc77d926b983c0f45c87ad 100644 (file)
-<?php\r
-/**\r
- * Smarty Internal Plugin Compile Registered Block\r
- *\r
- * Compiles code for the execution of a registered block function\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * Smarty Internal Plugin Compile Registered Block Class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase {\r
-\r
-    /**\r
-     * Attribute definition: Overwrites base class.\r
-     *\r
-     * @var array\r
-     * @see Smarty_Internal_CompileBase\r
-     */\r
-    public $optional_attributes = array('_any');\r
-\r
-    /**\r
-     * Compiles code for the execution of a block function\r
-     *\r
-     * @param array  $args      array with attributes from parser\r
-     * @param object $compiler  compiler object\r
-     * @param array  $parameter array with compilation parameter\r
-     * @param string $tag       name of block function\r
-     * @return string compiled code\r
-     */\r
-    public function compile($args, $compiler, $parameter, $tag)\r
-    {\r
-        if (!isset($tag[5]) || substr($tag,-5) != 'close') {\r
-            // opening tag of block plugin\r
-            // check and get attributes\r
-            $_attr = $this->getAttributes($compiler, $args);\r
-            if ($_attr['nocache']) {\r
-                $compiler->tag_nocache = true;\r
-            }\r
-               unset($_attr['nocache']);\r
-               if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) {\r
-                   $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag];\r
-               } else {\r
-                   $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag];\r
-               }\r
-            // convert attributes into parameter array string\r
-            $_paramsArray = array();\r
-            foreach ($_attr as $_key => $_value) {\r
-                if (is_int($_key)) {\r
-                    $_paramsArray[] = "$_key=>$_value";\r
-                } elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) {\r
-                    $_value = str_replace("'","^#^",$_value);\r
-                    $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";\r
-                } else {\r
-                    $_paramsArray[] = "'$_key'=>$_value";\r
-                }\r
-            }\r
-            $_params = 'array(' . implode(",", $_paramsArray) . ')';\r
-\r
-            $this->openTag($compiler, $tag, array($_params, $compiler->nocache));\r
-            // maybe nocache because of nocache variables or nocache plugin\r
-            $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache;\r
-            $function = $tag_info[0];\r
-            // compile code\r
-            if (!is_array($function)) {\r
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";\r
-            } else if (is_object($function[0])) {\r
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";\r
-            } else {\r
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";\r
-            }\r
-        } else {\r
-            // must endblock be nocache?\r
-            if ($compiler->nocache) {\r
-                $compiler->tag_nocache = true;\r
-            }\r
-            $base_tag = substr($tag, 0, -5);\r
-            // closing tag of block plugin, restore nocache\r
-            list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag);\r
-            // This tag does create output\r
-            $compiler->has_output = true;\r
-               if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {\r
-                   $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];\r
-               } else {\r
-                   $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];\r
-               }\r
-            // compile code\r
-            if (!isset($parameter['modifier_list'])) {\r
-                $mod_pre = $mod_post ='';\r
-            } else {\r
-                $mod_pre = ' ob_start(); ';\r
-                $mod_post = 'echo '.$compiler->compileTag('private_modifier',array(),array('modifierlist'=>$parameter['modifier_list'],'value'=>'ob_get_clean()')).';';\r
-            }\r
-            if (!is_array($function)) {\r
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);".$mod_post." } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
-            } else if (is_object($function[0])) {\r
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
-            } else {\r
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;".$mod_pre." echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); ".$mod_post."} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
-            }\r
-        }\r
-        return $output . "\n";\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Registered Block
+ * Compiles code for the execution of a registered block function
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Registered Block Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_CompileBase
+{
+    /**
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
+    public $optional_attributes = array('_any');
+
+    /**
+     * Compiles code for the execution of a block function
+     *
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     * @param  string $tag       name of block function
+     *
+     * @return string compiled code
+     */
+    public function compile($args, $compiler, $parameter, $tag)
+    {
+        if (!isset($tag[5]) || substr($tag, - 5) != 'close') {
+            // opening tag of block plugin
+            // check and get attributes
+            $_attr = $this->getAttributes($compiler, $args);
+            if ($_attr['nocache']) {
+                $compiler->tag_nocache = true;
+            }
+            unset($_attr['nocache']);
+            if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag])) {
+                $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$tag];
+            } else {
+                $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$tag];
+            }
+            // convert attributes into parameter array string
+            $_paramsArray = array();
+            foreach ($_attr as $_key => $_value) {
+                if (is_int($_key)) {
+                    $_paramsArray[] = "$_key=>$_value";
+                } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
+                    $_value = str_replace("'", "^#^", $_value);
+                    $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
+                } else {
+                    $_paramsArray[] = "'$_key'=>$_value";
+                }
+            }
+            $_params = 'array(' . implode(",", $_paramsArray) . ')';
+
+            $this->openTag($compiler, $tag, array($_params, $compiler->nocache));
+            // maybe nocache because of nocache variables or nocache plugin
+            $compiler->nocache = !$tag_info[1] | $compiler->nocache | $compiler->tag_nocache;
+            $function = $tag_info[0];
+            // compile code
+            if (!is_array($function)) {
+                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+            } elseif (is_object($function[0])) {
+                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo \$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]->{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+            } else {
+                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; echo {$function[0]}::{$function[1]}({$_params}, null, \$_smarty_tpl, \$_block_repeat);while (\$_block_repeat) { ob_start();?>";
+            }
+        } else {
+            // must endblock be nocache?
+            if ($compiler->nocache) {
+                $compiler->tag_nocache = true;
+            }
+            $base_tag = substr($tag, 0, - 5);
+            // closing tag of block plugin, restore nocache
+            list($_params, $compiler->nocache) = $this->closeTag($compiler, $base_tag);
+            // This tag does create output
+            $compiler->has_output = true;
+            if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
+                $function = $compiler->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
+            } else {
+                $function = $compiler->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag][0];
+            }
+            // compile code
+            if (!isset($parameter['modifier_list'])) {
+                $mod_pre = $mod_post = '';
+            } else {
+                $mod_pre = ' ob_start(); ';
+                $mod_post = 'echo ' . $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifier_list'], 'value' => 'ob_get_clean()')) . ';';
+            }
+            if (!is_array($function)) {
+                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat);" . $mod_post . " } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+            } elseif (is_object($function[0])) {
+                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo \$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0][0]->{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+            } else {
+                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false;" . $mod_pre . " echo {$function[0]}::{$function[1]}({$_params}, \$_block_content, \$_smarty_tpl, \$_block_repeat); " . $mod_post . "} array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+            }
+        }
+
+        return $output . "\n";
+    }
+}
index 5058bfbbdb88ac38c2a3375d635b50025b63311c..dfb4572f47742f0ba328b6e42b168220dec8c55b 100644 (file)
@@ -1,81 +1,79 @@
-<?php\r
-/**\r
- * Smarty Internal Plugin Compile Registered Function\r
- *\r
- * Compiles code for the execution of a registered function\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * Smarty Internal Plugin Compile Registered Function Class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase {\r
-\r
-    /**\r
-     * Attribute definition: Overwrites base class.\r
-     *\r
-     * @var array\r
-     * @see Smarty_Internal_CompileBase\r
-     */\r
-    public $optional_attributes = array('_any');\r
-\r
-    /**\r
-     * Compiles code for the execution of a registered function\r
-     *\r
-     * @param array  $args      array with attributes from parser\r
-     * @param object $compiler  compiler object\r
-     * @param array  $parameter array with compilation parameter\r
-     * @param string $tag       name of function\r
-     * @return string compiled code\r
-     */\r
-    public function compile($args, $compiler, $parameter, $tag)\r
-    {\r
-        // This tag does create output\r
-        $compiler->has_output = true;\r
-        // check and get attributes\r
-        $_attr = $this->getAttributes($compiler, $args);\r
-        if ($_attr['nocache']) {\r
-            $compiler->tag_nocache = true;\r
-        }\r
-        unset($_attr['nocache']);\r
-               if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) {\r
-                   $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag];\r
-               } else {\r
-                   $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag];\r
-               }\r
-        // not cachable?\r
-        $compiler->tag_nocache =  $compiler->tag_nocache || !$tag_info[1];\r
-        // convert attributes into parameter array string\r
-        $_paramsArray = array();\r
-        foreach ($_attr as $_key => $_value) {\r
-            if (is_int($_key)) {\r
-                $_paramsArray[] = "$_key=>$_value";\r
-            } elseif ($compiler->template->caching && in_array($_key,$tag_info[2])) {\r
-                $_value = str_replace("'","^#^",$_value);\r
-                $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";\r
-            } else {\r
-                $_paramsArray[] = "'$_key'=>$_value";\r
-            }\r
-        }\r
-        $_params = 'array(' . implode(",", $_paramsArray) . ')';\r
-        $function = $tag_info[0];\r
-        // compile code\r
-        if (!is_array($function)) {\r
-            $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n";\r
-        } else if (is_object($function[0])) {\r
-            $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n";\r
-        } else {\r
-            $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n";\r
-        }\r
-        return $output;\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Registered Function
+ * Compiles code for the execution of a registered function
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Registered Function Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase
+{
+    /**
+     * Attribute definition: Overwrites base class.
+     *
+     * @var array
+     * @see Smarty_Internal_CompileBase
+     */
+    public $optional_attributes = array('_any');
+
+    /**
+     * Compiles code for the execution of a registered function
+     *
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     * @param  string $tag       name of function
+     *
+     * @return string compiled code
+     */
+    public function compile($args, $compiler, $parameter, $tag)
+    {
+        // This tag does create output
+        $compiler->has_output = true;
+        // check and get attributes
+        $_attr = $this->getAttributes($compiler, $args);
+        if ($_attr['nocache']) {
+            $compiler->tag_nocache = true;
+        }
+        unset($_attr['nocache']);
+        if (isset($compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag])) {
+            $tag_info = $compiler->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION][$tag];
+        } else {
+            $tag_info = $compiler->default_handler_plugins[Smarty::PLUGIN_FUNCTION][$tag];
+        }
+        // not cachable?
+        $compiler->tag_nocache = $compiler->tag_nocache || !$tag_info[1];
+        // convert attributes into parameter array string
+        $_paramsArray = array();
+        foreach ($_attr as $_key => $_value) {
+            if (is_int($_key)) {
+                $_paramsArray[] = "$_key=>$_value";
+            } elseif ($compiler->template->caching && in_array($_key, $tag_info[2])) {
+                $_value = str_replace("'", "^#^", $_value);
+                $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
+            } else {
+                $_paramsArray[] = "'$_key'=>$_value";
+            }
+        }
+        $_params = 'array(' . implode(",", $_paramsArray) . ')';
+        $function = $tag_info[0];
+        // compile code
+        if (!is_array($function)) {
+            $output = "<?php echo {$function}({$_params},\$_smarty_tpl);?>\n";
+        } elseif (is_object($function[0])) {
+            $output = "<?php echo \$_smarty_tpl->smarty->registered_plugins[Smarty::PLUGIN_FUNCTION]['{$tag}'][0][0]->{$function[1]}({$_params},\$_smarty_tpl);?>\n";
+        } else {
+            $output = "<?php echo {$function[0]}::{$function[1]}({$_params},\$_smarty_tpl);?>\n";
+        }
+
+        return $output;
+    }
+}
index 4760dbe3f59a40aaccbd3d93ea20d42c7f5be6e7..23b17ae1410206eb48b570c4cf39ad312f3144a9 100644 (file)
@@ -1,32 +1,33 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Special Smarty Variable
- *
  * Compiles the special $smarty variables
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile special Smarty Variable Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_CompileBase
+{
     /**
-     * Compiles code for the speical $smarty variables
+     * Compiles code for the special $smarty variables
+     *
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     * @param         $parameter
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
     {
-        $_index = preg_split("/\]\[/",substr($parameter, 1, strlen($parameter)-2));
+        $_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
         $compiled_ref = ' ';
         $variable = trim($_index[0], "'");
         switch ($variable) {
@@ -56,7 +57,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
                     $compiler->trigger_template_error("(secure mode) super globals not permitted");
                     break;
                 }
-                $compiled_ref = '$_'.strtoupper($variable);
+                $compiled_ref = '$_' . strtoupper($variable);
                 break;
 
             case 'template':
@@ -70,6 +71,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
 
             case 'version':
                 $_version = Smarty::SMARTY_VERSION;
+
                 return "'$_version'";
 
             case 'const':
@@ -77,16 +79,23 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
                     $compiler->trigger_template_error("(secure mode) constants not permitted");
                     break;
                 }
-                return '@' . trim($_index[1], "'");
+
+                return "@constant({$_index[1]})";
 
             case 'config':
-                return "\$_smarty_tpl->getConfigVariable($_index[1])";
+                if (isset($_index[2])) {
+                    return "(is_array(\$tmp = \$_smarty_tpl->getConfigVariable($_index[1])) ? \$tmp[$_index[2]] : null)";
+                } else {
+                    return "\$_smarty_tpl->getConfigVariable($_index[1])";
+                }
             case 'ldelim':
                 $_ldelim = $compiler->smarty->left_delimiter;
+
                 return "'$_ldelim'";
 
             case 'rdelim':
                 $_rdelim = $compiler->smarty->right_delimiter;
+
                 return "'$_rdelim'";
 
             default:
@@ -99,9 +108,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
                 $compiled_ref = $compiled_ref . "[$_ind]";
             }
         }
+
         return $compiled_ref;
     }
-
 }
-
-?>
\ No newline at end of file
index 807c7e2b9a20a23d8303c75b1d2907a5f327ab71..dcff2ae41b04e95da452faf0b5898257fa824dc1 100644 (file)
@@ -1,28 +1,28 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Rdelim
- *
  * Compiles the {rdelim} tag
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Rdelim Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {rdelim} tag
-     *
      * This tag does output the right delimiter.
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -33,9 +33,7 @@ class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_CompileBase {
         }
         // this tag does not return compiled code
         $compiler->has_code = true;
+
         return $compiler->smarty->right_delimiter;
     }
-
 }
-
-?>
\ No newline at end of file
index ccb7673d8047cfe4658ed982f8daafb5690f50bd..5ac3fb067c0de5a2dcf579e7c38b07ef1819e880 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Compile Section
- *
  * Compiles the {section} {sectionelse} {/section} tags
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile Section Class
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase
+{
     /**
      * Attribute definition: Overwrites base class.
      *
@@ -42,8 +41,9 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
     /**
      * Compiles code for the {section} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -65,14 +65,15 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
         foreach ($_attr as $attr_name => $attr_value) {
             switch ($attr_name) {
                 case 'loop':
-                    $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int)\$_loop); unset(\$_loop);\n";
+                    $output .= "{$section_props}['loop'] = is_array(\$_loop=$attr_value) ? count(\$_loop) : max(0, (int) \$_loop); unset(\$_loop);\n";
                     break;
 
                 case 'show':
-                    if (is_bool($attr_value))
+                    if (is_bool($attr_value)) {
                         $show_attr_value = $attr_value ? 'true' : 'false';
-                    else
-                        $show_attr_value = "(bool)$attr_value";
+                    } else {
+                        $show_attr_value = "(bool) $attr_value";
+                    }
                     $output .= "{$section_props}['show'] = $show_attr_value;\n";
                     break;
 
@@ -82,32 +83,36 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
 
                 case 'max':
                 case 'start':
-                    $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n";
+                    $output .= "{$section_props}['$attr_name'] = (int) $attr_value;\n";
                     break;
 
                 case 'step':
-                    $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n";
+                    $output .= "{$section_props}['$attr_name'] = ((int) $attr_value) == 0 ? 1 : (int) $attr_value;\n";
                     break;
             }
         }
 
-        if (!isset($_attr['show']))
+        if (!isset($_attr['show'])) {
             $output .= "{$section_props}['show'] = true;\n";
+        }
 
-        if (!isset($_attr['loop']))
+        if (!isset($_attr['loop'])) {
             $output .= "{$section_props}['loop'] = 1;\n";
+        }
 
-        if (!isset($_attr['max']))
+        if (!isset($_attr['max'])) {
             $output .= "{$section_props}['max'] = {$section_props}['loop'];\n";
-        else
+        } else {
             $output .= "if ({$section_props}['max'] < 0)\n" . "    {$section_props}['max'] = {$section_props}['loop'];\n";
+        }
 
-        if (!isset($_attr['step']))
+        if (!isset($_attr['step'])) {
             $output .= "{$section_props}['step'] = 1;\n";
+        }
 
-        if (!isset($_attr['start']))
+        if (!isset($_attr['start'])) {
             $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n";
-        else {
+        else {
             $output .= "if ({$section_props}['start'] < 0)\n" . "    {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" . "else\n" . "    {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n";
         }
 
@@ -131,24 +136,25 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
         $output .= "{$section_props}['last']       = ({$section_props}['iteration'] == {$section_props}['total']);\n";
 
         $output .= "?>";
+
         return $output;
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Sectionelse Class
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {sectionelse} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -161,22 +167,22 @@ class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
 
         return "<?php endfor; else: ?>";
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Sectionclose Class
- * 
- * @package Smarty
+ *
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {/section} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -197,7 +203,4 @@ class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase {
             return "<?php endfor; endif; ?>";
         }
     }
-
 }
-
-?>
\ No newline at end of file
index d1dd90cf801bdd5aee63902d9320c9afef85e318..8e91ba6d0a062c1117390ae92f2e4a177f411a80 100644 (file)
@@ -1,72 +1,70 @@
-<?php\r
-/**\r
- * Smarty Internal Plugin Compile Setfilter\r
- *\r
- * Compiles code for setfilter tag\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * Smarty Internal Plugin Compile Setfilter Class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase {\r
-\r
-    /**\r
-     * Compiles code for setfilter tag\r
-     *\r
-     * @param array  $args      array with attributes from parser\r
-     * @param object $compiler  compiler object\r
-     * @param array  $parameter array with compilation parameter\r
-     * @return string compiled code\r
-     */\r
-    public function compile($args, $compiler, $parameter)\r
-    {\r
-        $compiler->variable_filter_stack[] = $compiler->template->variable_filters;\r
-        $compiler->template->variable_filters = $parameter['modifier_list'];\r
-        // this tag does not return compiled code\r
-        $compiler->has_code = false;\r
-        return true;\r
-    }\r
-\r
-}\r
-\r
-/**\r
- * Smarty Internal Plugin Compile Setfilterclose Class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase {\r
-\r
-    /**\r
-     * Compiles code for the {/setfilter} tag\r
-     *\r
-     * This tag does not generate compiled output. It resets variable filter.\r
-     *\r
-     * @param array  $args     array with attributes from parser\r
-     * @param object $compiler compiler object\r
-     * @return string compiled code\r
-     */\r
-    public function compile($args, $compiler)\r
-    {\r
-        $_attr = $this->getAttributes($compiler, $args);\r
-        // reset variable filter to previous state\r
-        if (count($compiler->variable_filter_stack)) {\r
-            $compiler->template->variable_filters = array_pop($compiler->variable_filter_stack);\r
-        } else {\r
-            $compiler->template->variable_filters = array();\r
-        }\r
-        // this tag does not return compiled code\r
-        $compiler->has_code = false;\r
-        return true;\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Compile Setfilter
+ * Compiles code for setfilter tag
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Setfilter Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase
+{
+    /**
+     * Compiles code for setfilter tag
+     *
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
+     * @return string compiled code
+     */
+    public function compile($args, $compiler, $parameter)
+    {
+        $compiler->variable_filter_stack[] = $compiler->template->variable_filters;
+        $compiler->template->variable_filters = $parameter['modifier_list'];
+        // this tag does not return compiled code
+        $compiler->has_code = false;
+
+        return true;
+    }
+}
+
+/**
+ * Smarty Internal Plugin Compile Setfilterclose Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_CompileBase
+{
+    /**
+     * Compiles code for the {/setfilter} tag
+     * This tag does not generate compiled output. It resets variable filter.
+     *
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
+     * @return string compiled code
+     */
+    public function compile($args, $compiler)
+    {
+        $_attr = $this->getAttributes($compiler, $args);
+        // reset variable filter to previous state
+        if (count($compiler->variable_filter_stack)) {
+            $compiler->template->variable_filters = array_pop($compiler->variable_filter_stack);
+        } else {
+            $compiler->template->variable_filters = array();
+        }
+        // this tag does not return compiled code
+        $compiler->has_code = false;
+
+        return true;
+    }
+}
index d7d986c34edd93390ef0b6fd355062bcb98c1606..36dc049dba4ba510e7eba718bee02462aede8aae 100644 (file)
@@ -1,28 +1,28 @@
 <?php
 /**
  * Smarty Internal Plugin Compile While
- *
  * Compiles the {while} tag
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Compile While Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {while} tag
      *
-     * @param array  $args      array with attributes from parser
-     * @param object $compiler  compiler object
-     * @param array  $parameter array with compilation parameter
+     * @param  array  $args      array with attributes from parser
+     * @param  object $compiler  compiler object
+     * @param  array  $parameter array with compilation parameter
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler, $parameter)
@@ -31,7 +31,7 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
         $_attr = $this->getAttributes($compiler, $args);
         $this->openTag($compiler, 'while', $compiler->nocache);
 
-        if (!array_key_exists("if condition",$parameter)) {
+        if (!array_key_exists("if condition", $parameter)) {
             $compiler->trigger_template_error("missing while condition", $compiler->lex->taglineno);
         }
 
@@ -51,32 +51,33 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
             }
             if (is_array($parameter['if condition']['var'])) {
                 $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]) || !is_array(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value)) \$_smarty_tpl->createLocalArrayVariable(" . $parameter['if condition']['var']['var'] . "$_nocache);\n";
-                $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . "){?>";
+                $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var']['var'] . "]->value" . $parameter['if condition']['var']['smarty_internal_index'] . " = " . $parameter['if condition']['value'] . ") {?>";
             } else {
                 $_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "])) \$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "] = new Smarty_Variable(null{$_nocache});";
-                $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . "){?>";
+                $_output .= "while (\$_smarty_tpl->tpl_vars[" . $parameter['if condition']['var'] . "]->value = " . $parameter['if condition']['value'] . ") {?>";
             }
+
             return $_output;
         } else {
-            return "<?php while ({$parameter['if condition']}){?>";
+            return "<?php while ({$parameter['if condition']}) {?>";
         }
     }
-
 }
 
 /**
  * Smarty Internal Plugin Compile Whileclose Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase {
-
+class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
+{
     /**
      * Compiles code for the {/while} tag
      *
-     * @param array  $args     array with attributes from parser
-     * @param object $compiler compiler object
+     * @param  array  $args     array with attributes from parser
+     * @param  object $compiler compiler object
+     *
      * @return string compiled code
      */
     public function compile($args, $compiler)
@@ -86,9 +87,7 @@ class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase {
             $compiler->tag_nocache = true;
         }
         $compiler->nocache = $this->closeTag($compiler, array('while'));
+
         return "<?php }?>";
     }
-
 }
-
-?>
\ No newline at end of file
index 5fb56f3713c2177c9d6190122be340794bb3abc6..f78f15f40af06d4b39404fdb1cce3ada7a5253f2 100644 (file)
@@ -2,19 +2,19 @@
 /**
  * Smarty Internal Plugin CompileBase
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * This class does extend all internal compile plugins
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-abstract class Smarty_Internal_CompileBase {
-
+abstract class Smarty_Internal_CompileBase
+{
     /**
      * Array of names of required attribute required by tag
      *
@@ -43,15 +43,15 @@ abstract class Smarty_Internal_CompileBase {
 
     /**
      * This function checks if the attributes passed are valid
-     *
      * The attributes passed for the tag to compile are checked against the list of required and
      * optional attributes. Required attributes must be present. Optional attributes are check against
      * the corresponding list. The keyword '_any' specifies that any attribute will be accepted
      * as valid
      *
-     * @param object $compiler   compiler object
-     * @param array  $attributes attributes applied to the tag
-     * @return array of mapped attributes for further processing
+     * @param  object $compiler   compiler object
+     * @param  array  $attributes attributes applied to the tag
+     *
+     * @return array  of mapped attributes for further processing
      */
     public function getAttributes($compiler, $attributes)
     {
@@ -64,7 +64,7 @@ abstract class Smarty_Internal_CompileBase {
                 if (in_array(trim($mixed, '\'"'), $this->option_flags)) {
                     $_indexed_attr[trim($mixed, '\'"')] = true;
                     // shorthand attribute ?
-                } else if (isset($this->shorttag_order[$key])) {
+                } elseif (isset($this->shorttag_order[$key])) {
                     $_indexed_attr[$this->shorttag_order[$key]] = $mixed;
                 } else {
                     // too many shorthands
@@ -77,13 +77,13 @@ abstract class Smarty_Internal_CompileBase {
                 if (in_array($kv['key'], $this->option_flags)) {
                     if (is_bool($kv['value'])) {
                         $_indexed_attr[$kv['key']] = $kv['value'];
-                    } else if (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) {
+                    } elseif (is_string($kv['value']) && in_array(trim($kv['value'], '\'"'), array('true', 'false'))) {
                         if (trim($kv['value']) == 'true') {
                             $_indexed_attr[$kv['key']] = true;
                         } else {
                             $_indexed_attr[$kv['key']] = false;
                         }
-                    } else if (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) {
+                    } elseif (is_numeric($kv['value']) && in_array($kv['value'], array(0, 1))) {
                         if ($kv['value'] == 1) {
                             $_indexed_attr[$kv['key']] = true;
                         } else {
@@ -105,7 +105,7 @@ abstract class Smarty_Internal_CompileBase {
                 $compiler->trigger_template_error("missing \"" . $attr . "\" attribute", $compiler->lex->taglineno);
             }
         }
-        // check for unallowed attributes
+        // check for not allowed attributes
         if ($this->optional_attributes != array('_any')) {
             $tmp_array = array_merge($this->required_attributes, $this->optional_attributes, $this->option_flags);
             foreach ($_indexed_attr as $key => $dummy) {
@@ -126,12 +126,11 @@ abstract class Smarty_Internal_CompileBase {
 
     /**
      * Push opening tag name on stack
-     *
      * Optionally additional data can be saved on stack
      *
-     * @param object    $compiler   compiler object
-     * @param string    $openTag    the opening tag's name
-     * @param mixed     $data       optional data saved
+     * @param object $compiler compiler object
+     * @param string $openTag  the opening tag's name
+     * @param mixed  $data     optional data saved
      */
     public function openTag($compiler, $openTag, $data = null)
     {
@@ -140,12 +139,12 @@ abstract class Smarty_Internal_CompileBase {
 
     /**
      * Pop closing tag
-     *
      * Raise an error if this stack-top doesn't match with expected opening tags
      *
-     * @param object       $compiler    compiler object
-     * @param array|string $expectedTag the expected opening tag names
-     * @return mixed any type the opening tag's name or saved data
+     * @param  object       $compiler    compiler object
+     * @param  array|string $expectedTag the expected opening tag names
+     *
+     * @return mixed        any type the opening tag's name or saved data
      */
     public function closeTag($compiler, $expectedTag)
     {
@@ -163,14 +162,13 @@ abstract class Smarty_Internal_CompileBase {
                 }
             }
             // wrong nesting of tags
-            $compiler->trigger_template_error("unclosed {" . $_openTag . "} tag");
+            $compiler->trigger_template_error("unclosed {$compiler->smarty->left_delimiter}" . $_openTag . "{$compiler->smarty->right_delimiter} tag");
+
             return;
         }
         // wrong nesting of tags
         $compiler->trigger_template_error("unexpected closing tag", $compiler->lex->taglineno);
+
         return;
     }
-
 }
-
-?>
\ No newline at end of file
index a309ec9ff77d76750b9b2a14edb4ee83b8147490..25694d5a9ad3bef30a024aa6c557eb654a86b75d 100644 (file)
@@ -2,27 +2,23 @@
 /**
  * Smarty Internal Plugin Config
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Config
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Config
- *
  * Main class for config variables
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Config
- *
- * @property Smarty_Config_Source   $source
- * @property Smarty_Config_Compiled $compiled
  * @ignore
  */
-class Smarty_Internal_Config {
-
+class Smarty_Internal_Config
+{
     /**
-     * Samrty instance
+     * Smarty instance
      *
      * @var Smarty object
      */
@@ -35,6 +31,7 @@ class Smarty_Internal_Config {
     public $data = null;
     /**
      * Config resource
+     *
      * @var string
      */
     public $config_resource = null;
@@ -58,6 +55,7 @@ class Smarty_Internal_Config {
     public $compiled_timestamp = null;
     /**
      * flag if compiled config file is invalid and must be (re)compiled
+     *
      * @var bool
      */
     public $mustCompile = null;
@@ -72,8 +70,8 @@ class Smarty_Internal_Config {
      * Constructor of config file object
      *
      * @param string $config_resource config file resource name
-     * @param Smarty $smarty Smarty instance
-     * @param object $data object for config vars storage
+     * @param Smarty $smarty          Smarty instance
+     * @param object $data            object for config vars storage
      */
     public function __construct($config_resource, $smarty, $data = null)
     {
@@ -90,8 +88,8 @@ class Smarty_Internal_Config {
     public function getCompiledFilepath()
     {
         return $this->compiled_filepath === null ?
-                ($this->compiled_filepath = $this->buildCompiledFilepath()) :
-                $this->compiled_filepath;
+            ($this->compiled_filepath = $this->buildCompiledFilepath()) :
+            $this->compiled_filepath;
     }
 
     /**
@@ -103,25 +101,26 @@ class Smarty_Internal_Config {
     {
         $_compile_id = isset($this->smarty->compile_id) ? preg_replace('![^\w\|]+!', '_', $this->smarty->compile_id) : null;
         $_flag = (int) $this->smarty->config_read_hidden + (int) $this->smarty->config_booleanize * 2
-                + (int) $this->smarty->config_overwrite * 4;
-        $_filepath = sha1($this->source->name . $_flag);
+            + (int) $this->smarty->config_overwrite * 4;
+        $_filepath = sha1(realpath($this->source->filepath) . $_flag);
         // if use_sub_dirs, break file into directories
         if ($this->smarty->use_sub_dirs) {
             $_filepath = substr($_filepath, 0, 2) . DS
-                    . substr($_filepath, 2, 2) . DS
-                    . substr($_filepath, 4, 2) . DS
-                    . $_filepath;
+                . substr($_filepath, 2, 2) . DS
+                . substr($_filepath, 4, 2) . DS
+                . $_filepath;
         }
         $_compile_dir_sep = $this->smarty->use_sub_dirs ? DS : '^';
         if (isset($_compile_id)) {
             $_filepath = $_compile_id . $_compile_dir_sep . $_filepath;
         }
         $_compile_dir = $this->smarty->getCompileDir();
+
         return $_compile_dir . $_filepath . '.' . basename($this->source->name) . '.config' . '.php';
     }
 
     /**
-     * Returns the timpestamp of the compiled file
+     * Returns the timestamp of the compiled file
      *
      * @return integer the file timestamp
      */
@@ -134,7 +133,6 @@ class Smarty_Internal_Config {
 
     /**
      * Returns if the current config file must be compiled
-     *
      * It does compare the timestamps of config source and the compiled config and checks the force compile configuration
      *
      * @return boolean true if the file must be compiled
@@ -142,13 +140,12 @@ class Smarty_Internal_Config {
     public function mustCompile()
     {
         return $this->mustCompile === null ?
-            $this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp () === false || $this->smarty->compile_check && $this->getCompiledTimestamp () < $this->source->timestamp):
+            $this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp() === false || $this->smarty->compile_check && $this->getCompiledTimestamp() < $this->source->timestamp) :
             $this->mustCompile;
     }
 
     /**
      * Returns the compiled config file
-     *
      * It checks if the config file must be compiled or just read the compiled version
      *
      * @return string the compiled config file
@@ -163,6 +160,7 @@ class Smarty_Internal_Config {
                 $this->compiled_config = file_get_contents($this->getCompiledFilepath());
             }
         }
+
         return $this->compiled_config;
     }
 
@@ -187,14 +185,15 @@ class Smarty_Internal_Config {
         // call compiler
         try {
             $this->compiler_object->compileSource($this);
-        } catch (Exception $e) {
+        }
+        catch (Exception $e) {
             // restore old timestamp in case of error
             if ($this->smarty->compile_locking && $saved_timestamp) {
                 touch($this->getCompiledFilepath(), $saved_timestamp);
             }
             throw $e;
         }
-        // compiling succeded
+        // compiling succeeded
         // write compiled template
         Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->getCompiledConfig(), $this->smarty);
     }
@@ -202,8 +201,10 @@ class Smarty_Internal_Config {
     /**
      * load config variables
      *
-     * @param mixed $sections array of section names, single section or null
-     * @param object $scope global,parent or local
+     * @param mixed         $sections array of section names, single section or null
+     * @param string $scope    global,parent or local
+     *
+     * @throws Exception
      */
     public function loadConfigVars($sections = null, $scope = 'local')
     {
@@ -240,9 +241,8 @@ class Smarty_Internal_Config {
         }
         // scan sections
         if (!empty($sections)) {
-            $sections = array_flip((array) $sections);
-            foreach ($_config_vars['sections'] as $this_section => $dummy) {
-                if (isset($sections[$this_section])) {
+            foreach ((array) $sections as $this_section) {
+                if (isset($_config_vars['sections'][$this_section])) {
                     foreach ($_config_vars['sections'][$this_section]['vars'] as $variable => $value) {
                         if ($this->smarty->config_overwrite || !isset($scope_ptr->config_vars[$variable])) {
                             $scope_ptr->config_vars[$variable] = $value;
@@ -258,8 +258,9 @@ class Smarty_Internal_Config {
     /**
      * set Smarty property in template context
      *
-     * @param string $property_name property name
-     * @param mixed  $value         value
+     * @param  string $property_name property name
+     * @param  mixed  $value         value
+     *
      * @throws SmartyException if $property_name is not valid
      */
     public function __set($property_name, $value)
@@ -268,6 +269,7 @@ class Smarty_Internal_Config {
             case 'source':
             case 'compiled':
                 $this->$property_name = $value;
+
                 return;
         }
 
@@ -277,7 +279,9 @@ class Smarty_Internal_Config {
     /**
      * get Smarty property in template context
      *
-     * @param string $property_name property name
+     * @param  string $property_name property name
+     *
+     * @return \Smarty_Config_Source|\Smarty_Template_Compiled
      * @throws SmartyException if $property_name is not valid
      */
     public function __get($property_name)
@@ -288,16 +292,15 @@ class Smarty_Internal_Config {
                     throw new SmartyException("Unable to parse resource name \"{$this->config_resource}\"");
                 }
                 $this->source = Smarty_Resource::config($this);
+
                 return $this->source;
 
             case 'compiled':
                 $this->compiled = $this->source->getCompiled($this);
+
                 return $this->compiled;
         }
 
         throw new SmartyException("config attribute '$property_name' does not exist.");
     }
-
 }
-
-?>
\ No newline at end of file
index b16a6940d338e103e3db82efcd2aca3b82bc0e2d..11731043997048001246d91df2d0df7fe04359c1 100644 (file)
@@ -1,23 +1,22 @@
 <?php
 /**
  * Smarty Internal Plugin Config File Compiler
- *
  * This is the config file compiler class. It calls the lexer and parser to
  * perform the compiling.
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Config
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Main config file compiler class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Config
  */
-class Smarty_Internal_Config_File_Compiler {
-
+class Smarty_Internal_Config_File_Compiler
+{
     /**
      * Lexer object
      *
@@ -69,7 +68,8 @@ class Smarty_Internal_Config_File_Compiler {
      * Method to compile a Smarty template.
      *
      * @param  Smarty_Internal_Config $config config object
-     * @return bool true if compiling succeeded, false if it failed
+     *
+     * @return bool                   true if compiling succeeded, false if it failed
      */
     public function compileSource(Smarty_Internal_Config $config)
     {
@@ -84,28 +84,46 @@ class Smarty_Internal_Config_File_Compiler {
             return true;
         }
         // init the lexer/parser to compile the config file
-        $lex = new Smarty_Internal_Configfilelexer($_content, $this->smarty);
+        $lex = new Smarty_Internal_Configfilelexer($_content, $this);
         $parser = new Smarty_Internal_Configfileparser($lex, $this);
-        if ($this->smarty->_parserdebug) $parser->PrintTrace();
+
+        if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
+            $mbEncoding = mb_internal_encoding();
+            mb_internal_encoding('ASCII');
+        } else {
+            $mbEncoding = null;
+        }
+
+
+        if ($this->smarty->_parserdebug) {
+            $parser->PrintTrace();
+        }
         // get tokens from lexer and parse them
         while ($lex->yylex()) {
-            if ($this->smarty->_parserdebug) echo "<br>Parsing  {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
+            if ($this->smarty->_parserdebug) {
+                echo "<br>Parsing  {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
+            }
             $parser->doParse($lex->token, $lex->value);
         }
         // finish parsing process
         $parser->doParse(0, 0);
+
+        if ($mbEncoding) {
+            mb_internal_encoding($mbEncoding);
+        }
+
         $config->compiled_config = '<?php $_config_vars = ' . var_export($this->config_data, true) . '; ?>';
     }
 
     /**
      * display compiler error messages without dying
-     *
      * If parameter $args is empty it is a parser detected syntax error.
-     * In this case the parser is called to obtain information about exspected tokens.
-     *
+     * In this case the parser is called to obtain information about expected tokens.
      * If parameter $args contains a string this is used as error message
      *
      * @param string $args individual error message or null
+     *
+     * @throws SmartyCompilerException
      */
     public function trigger_config_file_error($args = null)
     {
@@ -117,12 +135,12 @@ class Smarty_Internal_Config_File_Compiler {
             // $line--;
         }
         $match = preg_split("/\n/", $this->lex->data);
-        $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line-1]}' ";
+        $error_text = "Syntax error in config file '{$this->config->source->filepath}' on line {$line} '{$match[$line - 1]}' ";
         if (isset($args)) {
             // individual error message
             $error_text .= $args;
         } else {
-            // exspected token from parser
+            // expected token from parser
             foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
                 $exp_token = $this->parser->yyTokenName[$token];
                 if (isset($this->lex->smarty_token_names[$exp_token])) {
@@ -138,7 +156,4 @@ class Smarty_Internal_Config_File_Compiler {
         }
         throw new SmartyCompilerException($error_text);
     }
-
 }
-
-?>
\ No newline at end of file
index bade2fe74f976caa87df37543bf3a59a8f67d4be..e501977329e84845727372403e8c415fd6fbf59d 100644 (file)
@@ -1,15 +1,16 @@
 <?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 Plugin Configfilelexer
+ * This is the lexer to break the config file source into tokens
+ *
+ * @package    Smarty
+ * @subpackage Config
+ * @author     Uwe Tews
+ */
+
 /**
-* Smarty Internal Plugin Configfilelexer
-*/
+ * Smarty Internal Plugin Configfilelexer
+ */
 class Smarty_Internal_Configfilelexer
 {
 
@@ -20,96 +21,116 @@ class Smarty_Internal_Configfilelexer
     public $node;
     public $line;
     private $state = 1;
-    public $smarty_token_names = array (               // Text for parser error messages
-                               );
-
+    public $yyTraceFILE;
+    public $yyTracePrompt;
+    public $state_name = array(1 => 'START', 2 => 'VALUE', 3 => 'NAKED_STRING_VALUE', 4 => 'COMMENT', 5 => 'SECTION', 6 => 'TRIPPLE');
+    public $smarty_token_names = array( // Text for parser error messages
+    );
 
-    function __construct($data, $smarty)
+    function __construct($data, $compiler)
     {
         // set instance object
         self::instance($this);
         $this->data = $data . "\n"; //now all lines are \n-terminated
         $this->counter = 0;
         $this->line = 1;
-        $this->smarty = $smarty;
-        $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
+        $this->compiler = $compiler;
+        $this->smarty = $compiler->smarty;
     }
+
     public static function &instance($new_instance = null)
     {
         static $instance = null;
-        if (isset($new_instance) && is_object($new_instance))
+        if (isset($new_instance) && is_object($new_instance)) {
             $instance = $new_instance;
+        }
         return $instance;
     }
 
-
+    public function PrintTrace()
+    {
+        $this->yyTraceFILE = fopen('php://output', 'w');
+        $this->yyTracePrompt = '<br>';
+    }
 
     private $_yy_state = 1;
     private $_yy_stack = array();
 
-    function yylex()
+    public function yylex()
     {
         return $this->{'yylex' . $this->_yy_state}();
     }
 
-    function yypushstate($state)
+    public function yypushstate($state)
     {
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
         array_push($this->_yy_stack, $this->_yy_state);
         $this->_yy_state = $state;
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
     }
 
-    function yypopstate()
+    public function yypopstate()
     {
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
         $this->_yy_state = array_pop($this->_yy_stack);
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
     }
 
-    function yybegin($state)
+    public function yybegin($state)
     {
         $this->_yy_state = $state;
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
     }
 
-
-
-
-    function yylex1()
+    public function yylex1()
     {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-              4 => 0,
-              5 => 0,
-              6 => 0,
-              7 => 0,
-              8 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+            3 => 0,
+            4 => 0,
+            5 => 0,
+            6 => 0,
+            7 => 0,
+            8 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
         $yy_global_pattern = "/\G(#|;)|\G(\\[)|\G(\\])|\G(=)|\G([ \t\r]+)|\G(\n)|\G([0-9]*[a-zA-Z_]\\w*)|\G([\S\s])/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state START');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state START');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r1_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -118,110 +139,115 @@ class Smarty_Internal_Configfilelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const START = 1;
+
     function yy_r1_1($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
-    $this->yypushstate(self::COMMENT);
+        $this->token = Smarty_Internal_Configfileparser::TPC_COMMENTSTART;
+        $this->yypushstate(self::COMMENT);
     }
+
     function yy_r1_2($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
-    $this->yypushstate(self::SECTION);
+        $this->token = Smarty_Internal_Configfileparser::TPC_OPENB;
+        $this->yypushstate(self::SECTION);
     }
+
     function yy_r1_3($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
+        $this->token = Smarty_Internal_Configfileparser::TPC_CLOSEB;
     }
+
     function yy_r1_4($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
-    $this->yypushstate(self::VALUE);
+        $this->token = Smarty_Internal_Configfileparser::TPC_EQUAL;
+        $this->yypushstate(self::VALUE);
     }
+
     function yy_r1_5($yy_subpatterns)
     {
 
-    return false;
+        return false;
     }
+
     function yy_r1_6($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+        $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
     }
+
     function yy_r1_7($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_ID;
+        $this->token = Smarty_Internal_Configfileparser::TPC_ID;
     }
+
     function yy_r1_8($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
+        $this->token = Smarty_Internal_Configfileparser::TPC_OTHER;
     }
 
-
-
-    function yylex2()
+    public function yylex2()
     {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-              4 => 0,
-              5 => 0,
-              6 => 0,
-              7 => 0,
-              8 => 0,
-              9 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+            3 => 0,
+            4 => 0,
+            5 => 0,
+            6 => 0,
+            7 => 0,
+            8 => 0,
+            9 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
         $yy_global_pattern = "/\G([ \t\r]+)|\G(\\d+\\.\\d+(?=[ \t\r]*[\n#;]))|\G(\\d+(?=[ \t\r]*[\n#;]))|\G(\"\"\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(?=[ \t\r]*[\n#;]))|\G(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"(?=[ \t\r]*[\n#;]))|\G([a-zA-Z]+(?=[ \t\r]*[\n#;]))|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state VALUE');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state VALUE');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r2_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -230,119 +256,125 @@ class Smarty_Internal_Configfilelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const VALUE = 2;
+
     function yy_r2_1($yy_subpatterns)
     {
 
-    return false;
+        return false;
     }
+
     function yy_r2_2($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_FLOAT;
+        $this->yypopstate();
     }
+
     function yy_r2_3($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_INT;
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_INT;
+        $this->yypopstate();
     }
+
     function yy_r2_4($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
-    $this->yypushstate(self::TRIPPLE);
+        $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES;
+        $this->yypushstate(self::TRIPPLE);
     }
+
     function yy_r2_5($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_SINGLE_QUOTED_STRING;
+        $this->yypopstate();
     }
+
     function yy_r2_6($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_DOUBLE_QUOTED_STRING;
+        $this->yypopstate();
     }
+
     function yy_r2_7($yy_subpatterns)
     {
 
-    if (!$this->smarty->config_booleanize || !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();
-    }
+        if (!$this->smarty->config_booleanize || !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();
+        }
     }
+
     function yy_r2_8($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+        $this->yypopstate();
     }
+
     function yy_r2_9($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
-    $this->value = "";
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+        $this->value = "";
+        $this->yypopstate();
     }
 
-
-
-    function yylex3()
+    public function yylex3()
     {
-        $tokenMap = array (
-              1 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $tokenMap = array(
+            1 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
         $yy_global_pattern = "/\G([^\n]+?(?=[ \t\r]*\n))/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state NAKED_STRING_VALUE');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state NAKED_STRING_VALUE');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r3_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -351,67 +383,65 @@ class Smarty_Internal_Configfilelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const NAKED_STRING_VALUE = 3;
+
     function yy_r3_1($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+        $this->yypopstate();
     }
 
-
-
-    function yylex4()
+    public function yylex4()
     {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+            3 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
         $yy_global_pattern = "/\G([ \t\r]+)|\G([^\n]+?(?=[ \t\r]*\n))|\G(\n)/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state COMMENT');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state COMMENT');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -420,76 +450,76 @@ class Smarty_Internal_Configfilelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const COMMENT = 4;
+
     function yy_r4_1($yy_subpatterns)
     {
 
-    return false;
+        return false;
     }
+
     function yy_r4_2($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
+        $this->token = Smarty_Internal_Configfileparser::TPC_NAKED_STRING;
     }
+
     function yy_r4_3($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_NEWLINE;
+        $this->yypopstate();
     }
 
-
-
-    function yylex5()
+    public function yylex5()
     {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
         $yy_global_pattern = "/\G(\\.)|\G(.*?(?=[\.=[\]\r\n]))/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state SECTION');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state SECTION');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r5_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -498,70 +528,70 @@ class Smarty_Internal_Configfilelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const SECTION = 5;
+
     function yy_r5_1($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
+        $this->token = Smarty_Internal_Configfileparser::TPC_DOT;
     }
+
     function yy_r5_2($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
-    $this->yypopstate();
+        $this->token = Smarty_Internal_Configfileparser::TPC_SECTION;
+        $this->yypopstate();
     }
 
-
-    function yylex6()
+    public function yylex6()
     {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
         $yy_global_pattern = "/\G(\"\"\"(?=[ \t\r]*[\n#;]))|\G([\S\s])/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state TRIPPLE');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state TRIPPLE');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r6_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -570,53 +600,44 @@ class Smarty_Internal_Configfilelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const TRIPPLE = 6;
+
     function yy_r6_1($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
-    $this->yypopstate();
-    $this->yypushstate(self::START);
+        $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_QUOTES_END;
+        $this->yypopstate();
+        $this->yypushstate(self::START);
     }
+
     function yy_r6_2($yy_subpatterns)
     {
 
-  if ($this->mbstring_overload) {
-    $to = mb_strlen($this->data,'latin1');
-  } else {
-    $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_template_error ("missing or misspelled literal closing tag");
-  }
-  if ($this->mbstring_overload) {
-    $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
-  } else {
-    $this->value = substr($this->data,$this->counter,$to-$this->counter);
-  }
-  $this->token = Smarty_Internal_Configfileparser::TPC_TRIPPLE_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_template_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;
     }
-
-
 }
-?>
\ No newline at end of file
+
index 784bc684da7df9a4cc16a6f53b6a46f5317a27fe..fc476ce0a1b423b58fad8a0e518b89643de96468 100644 (file)
@@ -1,20 +1,20 @@
 <?php
-/**
-* Smarty Internal Plugin Configfileparser
-*
-* This is the config file parser.
-* It is generated from the internal.configfileparser.y file
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
 
+/**
+ * Smarty Internal Plugin Configfileparser
+ * This is the config file parser.
+ * It is generated from the internal.configfileparser.y file
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
 class TPC_yyToken implements ArrayAccess
 {
     public $string = '';
     public $metadata = array();
 
-    function __construct($s, $m = array())
+    public function __construct($s, $m = array())
     {
         if ($s instanceof TPC_yyToken) {
             $this->string = $s->string;
@@ -29,28 +29,29 @@ class TPC_yyToken implements ArrayAccess
         }
     }
 
-    function __toString()
+    public function __toString()
     {
         return $this->_string;
     }
 
-    function offsetExists($offset)
+    public function offsetExists($offset)
     {
         return isset($this->metadata[$offset]);
     }
 
-    function offsetGet($offset)
+    public function offsetGet($offset)
     {
         return $this->metadata[$offset];
     }
 
-    function offsetSet($offset, $value)
+    public function offsetSet($offset, $value)
     {
         if ($offset === null) {
             if (isset($value[0])) {
                 $x = ($value instanceof TPC_yyToken) ?
                     $value->metadata : $value;
                 $this->metadata = array_merge($this->metadata, $x);
+
                 return;
             }
             $offset = count($this->metadata);
@@ -67,7 +68,7 @@ class TPC_yyToken implements ArrayAccess
         }
     }
 
-    function offsetUnset($offset)
+    public function offsetUnset($offset)
     {
         unset($this->metadata[$offset]);
     }
@@ -75,18 +76,19 @@ class TPC_yyToken implements ArrayAccess
 
 class TPC_yyStackEntry
 {
-    public $stateno;       /* The state-number */
-    public $major;         /* The major token value.  This is the code
+    public $stateno; /* The state-number */
+    public $major; /* The major token value.  This is the code
                      ** number for the token at this stack level */
     public $minor; /* The user-supplied minor token value.  This
                      ** is the value of the token  */
-};
+}
 
+;
 
 #line 12 "smarty_internal_configfileparser.y"
-class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser.php"
+class Smarty_Internal_Configfileparser #line 80 "smarty_internal_configfileparser.php"
 {
-#line 14 "smarty_internal_configfileparser.y"
+    #line 14 "smarty_internal_configfileparser.y"
 
     // states whether the parse was successful or not
     public $successful = true;
@@ -94,23 +96,27 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
     private $lex;
     private $internalError = false;
 
-    function __construct($lex, $compiler) {
+    function __construct($lex, $compiler)
+    {
         // set instance object
         self::instance($this);
         $this->lex = $lex;
         $this->smarty = $compiler->smarty;
         $this->compiler = $compiler;
     }
+
     public static function &instance($new_instance = null)
     {
         static $instance = null;
-        if (isset($new_instance) && is_object($new_instance))
+        if (isset($new_instance) && is_object($new_instance)) {
             $instance = $new_instance;
+        }
         return $instance;
     }
 
-    private function parse_bool($str) {
-        if (in_array(strtolower($str) ,array('on','yes','true'))) {
+    private function parse_bool($str)
+    {
+        if (in_array(strtolower($str), array('on', 'yes', 'true'))) {
             $res = true;
         } else {
             $res = false;
@@ -119,11 +125,13 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
     }
 
     private static $escapes_single = Array('\\' => '\\',
-                                          '\'' => '\'');
-    private static function parse_single_quoted_string($qstr) {
-        $escaped_string = substr($qstr, 1, strlen($qstr)-2); //remove outer quotes
+                                           '\'' => '\'');
+
+    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);
+        $ss = preg_split('/(\\\\.)/', $escaped_string, - 1, PREG_SPLIT_DELIM_CAPTURE);
 
         $str = "";
         foreach ($ss as $s) {
@@ -131,24 +139,27 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
                 if (isset(self::$escapes_single[$s[1]])) {
                     $s = self::$escapes_single[$s[1]];
                 }
-             }
+            }
 
-             $str .= $s;
+            $str .= $s;
         }
 
         return $str;
     }
 
-    private static function parse_double_quoted_string($qstr) {
-        $inner_str = substr($qstr, 1, strlen($qstr)-2);
+    private static function parse_double_quoted_string($qstr)
+    {
+        $inner_str = substr($qstr, 1, strlen($qstr) - 2);
         return stripcslashes($inner_str);
     }
 
-    private static function parse_tripple_double_quoted_string($qstr) {
+    private static function parse_tripple_double_quoted_string($qstr)
+    {
         return stripcslashes($qstr);
     }
 
-    private function set_var(Array $var, Array &$target_array) {
+    private function set_var(Array $var, Array &$target_array)
+    {
         $key = $var["key"];
         $value = $var["value"];
 
@@ -160,16 +171,18 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
         }
     }
 
-    private function add_global_vars(Array $vars) {
+    private function add_global_vars(Array $vars)
+    {
         if (!isset($this->compiler->config_data['vars'])) {
-      $this->compiler->config_data['vars'] = Array();
+            $this->compiler->config_data['vars'] = Array();
         }
         foreach ($vars as $var) {
             $this->set_var($var, $this->compiler->config_data);
         }
     }
 
-    private function add_section_vars($section_name, 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();
         }
@@ -177,99 +190,152 @@ class Smarty_Internal_Configfileparser#line 79 "smarty_internal_configfileparser
             $this->set_var($var, $this->compiler->config_data['sections'][$section_name]);
         }
     }
-#line 173 "smarty_internal_configfileparser.php"
-
-    const TPC_OPENB                          =  1;
-    const TPC_SECTION                        =  2;
-    const TPC_CLOSEB                         =  3;
-    const TPC_DOT                            =  4;
-    const TPC_ID                             =  5;
-    const TPC_EQUAL                          =  6;
-    const TPC_FLOAT                          =  7;
-    const TPC_INT                            =  8;
-    const TPC_BOOL                           =  9;
-    const TPC_SINGLE_QUOTED_STRING           = 10;
-    const TPC_DOUBLE_QUOTED_STRING           = 11;
-    const TPC_TRIPPLE_QUOTES                 = 12;
-    const TPC_TRIPPLE_TEXT                   = 13;
-    const TPC_TRIPPLE_QUOTES_END             = 14;
-    const TPC_NAKED_STRING                   = 15;
-    const TPC_OTHER                          = 16;
-    const TPC_NEWLINE                        = 17;
-    const TPC_COMMENTSTART                   = 18;
+
+    #line 174 "smarty_internal_configfileparser.php"
+
+    const TPC_OPENB = 1;
+    const TPC_SECTION = 2;
+    const TPC_CLOSEB = 3;
+    const TPC_DOT = 4;
+    const TPC_ID = 5;
+    const TPC_EQUAL = 6;
+    const TPC_FLOAT = 7;
+    const TPC_INT = 8;
+    const TPC_BOOL = 9;
+    const TPC_SINGLE_QUOTED_STRING = 10;
+    const TPC_DOUBLE_QUOTED_STRING = 11;
+    const TPC_TRIPPLE_QUOTES = 12;
+    const TPC_TRIPPLE_TEXT = 13;
+    const TPC_TRIPPLE_QUOTES_END = 14;
+    const TPC_NAKED_STRING = 15;
+    const TPC_OTHER = 16;
+    const TPC_NEWLINE = 17;
+    const TPC_COMMENTSTART = 18;
     const YY_NO_ACTION = 60;
     const YY_ACCEPT_ACTION = 59;
     const YY_ERROR_ACTION = 58;
 
     const YY_SZ_ACTTAB = 38;
-static public $yy_action = array(
- /*     0 */    29,   30,   34,   33,   24,   13,   19,   25,   35,   21,
- /*    10 */    59,    8,    3,    1,   20,   12,   14,   31,   20,   12,
- /*    20 */    15,   17,   23,   18,   27,   26,    4,    5,    6,   32,
- /*    30 */     2,   11,   28,   22,   16,    9,    7,   10,
+    static public $yy_action = array(
+        /*     0 */
+        29, 30, 34, 33, 24, 13, 19, 25, 35, 21,
+        /*    10 */
+        59, 8, 3, 1, 20, 12, 14, 31, 20, 12,
+        /*    20 */
+        15, 17, 23, 18, 27, 26, 4, 5, 6, 32,
+        /*    30 */
+        2, 11, 28, 22, 16, 9, 7, 10,
     );
     static public $yy_lookahead = array(
- /*     0 */     7,    8,    9,   10,   11,   12,    5,   27,   15,   16,
- /*    10 */    20,   21,   23,   23,   17,   18,   13,   14,   17,   18,
- /*    20 */    15,    2,   17,    4,   25,   26,    6,    3,    3,   14,
- /*    30 */    23,    1,   24,   17,    2,   25,   22,   25,
-);
-    const YY_SHIFT_USE_DFLT = -8;
+        /*     0 */
+        7, 8, 9, 10, 11, 12, 5, 27, 15, 16,
+        /*    10 */
+        20, 21, 23, 23, 17, 18, 13, 14, 17, 18,
+        /*    20 */
+        15, 2, 17, 4, 25, 26, 6, 3, 3, 14,
+        /*    30 */
+        23, 1, 24, 17, 2, 25, 22, 25,
+    );
+    const YY_SHIFT_USE_DFLT = - 8;
     const YY_SHIFT_MAX = 19;
     static public $yy_shift_ofst = array(
- /*     0 */    -8,    1,    1,    1,   -7,   -3,   -3,   30,   -8,   -8,
- /*    10 */    -8,   19,    5,    3,   15,   16,   24,   25,   32,   20,
-);
-    const YY_REDUCE_USE_DFLT = -21;
+        /*     0 */
+        - 8, 1, 1, 1, - 7, - 3, - 3, 30, - 8, - 8,
+        /*    10 */
+        - 8, 19, 5, 3, 15, 16, 24, 25, 32, 20,
+    );
+    const YY_REDUCE_USE_DFLT = - 21;
     const YY_REDUCE_MAX = 10;
     static public $yy_reduce_ofst = array(
- /*     0 */   -10,   -1,   -1,   -1,  -20,   10,   12,    8,   14,    7,
- /*    10 */   -11,
-);
+        /*     0 */
+        - 10, - 1, - 1, - 1, - 20, 10, 12, 8, 14, 7,
+        /*    10 */
+        - 11,
+    );
     static public $yyExpectedTokens = array(
-        /* 0 */ array(),
-        /* 1 */ array(5, 17, 18, ),
-        /* 2 */ array(5, 17, 18, ),
-        /* 3 */ array(5, 17, 18, ),
-        /* 4 */ array(7, 8, 9, 10, 11, 12, 15, 16, ),
-        /* 5 */ array(17, 18, ),
-        /* 6 */ array(17, 18, ),
-        /* 7 */ array(1, ),
-        /* 8 */ array(),
-        /* 9 */ array(),
-        /* 10 */ array(),
-        /* 11 */ array(2, 4, ),
-        /* 12 */ array(15, 17, ),
-        /* 13 */ array(13, 14, ),
-        /* 14 */ array(14, ),
-        /* 15 */ array(17, ),
-        /* 16 */ array(3, ),
-        /* 17 */ array(3, ),
-        /* 18 */ array(2, ),
-        /* 19 */ array(6, ),
-        /* 20 */ array(),
-        /* 21 */ array(),
-        /* 22 */ array(),
-        /* 23 */ array(),
-        /* 24 */ array(),
-        /* 25 */ array(),
-        /* 26 */ array(),
-        /* 27 */ array(),
-        /* 28 */ array(),
-        /* 29 */ array(),
-        /* 30 */ array(),
-        /* 31 */ array(),
-        /* 32 */ array(),
-        /* 33 */ array(),
-        /* 34 */ array(),
-        /* 35 */ array(),
-);
+        /* 0 */
+        array(),
+        /* 1 */
+        array(5, 17, 18,),
+        /* 2 */
+        array(5, 17, 18,),
+        /* 3 */
+        array(5, 17, 18,),
+        /* 4 */
+        array(7, 8, 9, 10, 11, 12, 15, 16,),
+        /* 5 */
+        array(17, 18,),
+        /* 6 */
+        array(17, 18,),
+        /* 7 */
+        array(1,),
+        /* 8 */
+        array(),
+        /* 9 */
+        array(),
+        /* 10 */
+        array(),
+        /* 11 */
+        array(2, 4,),
+        /* 12 */
+        array(15, 17,),
+        /* 13 */
+        array(13, 14,),
+        /* 14 */
+        array(14,),
+        /* 15 */
+        array(17,),
+        /* 16 */
+        array(3,),
+        /* 17 */
+        array(3,),
+        /* 18 */
+        array(2,),
+        /* 19 */
+        array(6,),
+        /* 20 */
+        array(),
+        /* 21 */
+        array(),
+        /* 22 */
+        array(),
+        /* 23 */
+        array(),
+        /* 24 */
+        array(),
+        /* 25 */
+        array(),
+        /* 26 */
+        array(),
+        /* 27 */
+        array(),
+        /* 28 */
+        array(),
+        /* 29 */
+        array(),
+        /* 30 */
+        array(),
+        /* 31 */
+        array(),
+        /* 32 */
+        array(),
+        /* 33 */
+        array(),
+        /* 34 */
+        array(),
+        /* 35 */
+        array(),
+    );
     static public $yy_default = array(
- /*     0 */    44,   37,   41,   40,   58,   58,   58,   36,   39,   44,
- /*    10 */    44,   58,   58,   58,   58,   58,   58,   58,   58,   58,
- /*    20 */    55,   54,   57,   56,   50,   45,   43,   42,   38,   46,
- /*    30 */    47,   52,   51,   49,   48,   53,
-);
+        /*     0 */
+        44, 37, 41, 40, 58, 58, 58, 36, 39, 44,
+        /*    10 */
+        44, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+        /*    20 */
+        55, 54, 57, 56, 50, 45, 43, 42, 38, 46,
+        /*    30 */
+        47, 52, 51, 49, 48, 53,
+    );
     const YYNOCODE = 29;
     const YYSTACKDEPTH = 100;
     const YYNSTATE = 36;
@@ -277,67 +343,89 @@ static public $yy_action = array(
     const YYERRORSYMBOL = 19;
     const YYERRSYMDT = 'yy0';
     const YYFALLBACK = 0;
-    static public $yyFallback = array(
-    );
-    static function Trace($TraceFILE, $zTracePrompt)
+    public static $yyFallback = array();
+
+    public function Trace($TraceFILE, $zTracePrompt)
     {
         if (!$TraceFILE) {
             $zTracePrompt = 0;
         } elseif (!$zTracePrompt) {
             $TraceFILE = 0;
         }
-        self::$yyTraceFILE = $TraceFILE;
-        self::$yyTracePrompt = $zTracePrompt;
+        $this->yyTraceFILE = $TraceFILE;
+        $this->yyTracePrompt = $zTracePrompt;
     }
 
-    static function PrintTrace()
+    public function PrintTrace()
     {
-        self::$yyTraceFILE = fopen('php://output', 'w');
-        self::$yyTracePrompt = '<br>';
+        $this->yyTraceFILE = fopen('php://output', 'w');
+        $this->yyTracePrompt = '<br>';
     }
 
-    static public $yyTraceFILE;
-    static public $yyTracePrompt;
-    public $yyidx;                    /* Index of top element in stack */
-    public $yyerrcnt;                 /* Shifts left before out of the error */
-    public $yystack = array();  /* The parser's stack */
+    public $yyTraceFILE;
+    public $yyTracePrompt;
+    public $yyidx; /* Index of top element in stack */
+    public $yyerrcnt; /* Shifts left before out of the error */
+    public $yystack = array(); /* The parser's stack */
 
     public $yyTokenName = array(
-  '$',             'OPENB',         'SECTION',       'CLOSEB',
-  'DOT',           'ID',            'EQUAL',         'FLOAT',
-  'INT',           'BOOL',          'SINGLE_QUOTED_STRING',  'DOUBLE_QUOTED_STRING',
-  'TRIPPLE_QUOTES',  'TRIPPLE_TEXT',  'TRIPPLE_QUOTES_END',  'NAKED_STRING',
-  'OTHER',         'NEWLINE',       'COMMENTSTART',  'error',
-  'start',         'global_vars',   'sections',      'var_list',
-  'section',       'newline',       'var',           'value',
+        '$', 'OPENB', 'SECTION', 'CLOSEB',
+        'DOT', 'ID', 'EQUAL', 'FLOAT',
+        'INT', 'BOOL', 'SINGLE_QUOTED_STRING', 'DOUBLE_QUOTED_STRING',
+        'TRIPPLE_QUOTES', 'TRIPPLE_TEXT', 'TRIPPLE_QUOTES_END', 'NAKED_STRING',
+        'OTHER', 'NEWLINE', 'COMMENTSTART', 'error',
+        'start', 'global_vars', 'sections', 'var_list',
+        'section', 'newline', 'var', 'value',
     );
 
-    static public $yyRuleName = array(
- /*   0 */ "start ::= global_vars sections",
- /*   1 */ "global_vars ::= var_list",
- /*   2 */ "sections ::= sections section",
- /*   3 */ "sections ::=",
- /*   4 */ "section ::= OPENB SECTION CLOSEB newline var_list",
- /*   5 */ "section ::= OPENB DOT SECTION CLOSEB newline var_list",
- /*   6 */ "var_list ::= var_list newline",
- /*   7 */ "var_list ::= var_list var",
- /*   8 */ "var_list ::=",
- /*   9 */ "var ::= ID EQUAL value",
- /*  10 */ "value ::= FLOAT",
- /*  11 */ "value ::= INT",
- /*  12 */ "value ::= BOOL",
- /*  13 */ "value ::= SINGLE_QUOTED_STRING",
- /*  14 */ "value ::= DOUBLE_QUOTED_STRING",
- /*  15 */ "value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END",
- /*  16 */ "value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END",
- /*  17 */ "value ::= NAKED_STRING",
- /*  18 */ "value ::= OTHER",
- /*  19 */ "newline ::= NEWLINE",
- /*  20 */ "newline ::= COMMENTSTART NEWLINE",
- /*  21 */ "newline ::= COMMENTSTART NAKED_STRING NEWLINE",
+    public static $yyRuleName = array(
+        /*   0 */
+        "start ::= global_vars sections",
+        /*   1 */
+        "global_vars ::= var_list",
+        /*   2 */
+        "sections ::= sections section",
+        /*   3 */
+        "sections ::=",
+        /*   4 */
+        "section ::= OPENB SECTION CLOSEB newline var_list",
+        /*   5 */
+        "section ::= OPENB DOT SECTION CLOSEB newline var_list",
+        /*   6 */
+        "var_list ::= var_list newline",
+        /*   7 */
+        "var_list ::= var_list var",
+        /*   8 */
+        "var_list ::=",
+        /*   9 */
+        "var ::= ID EQUAL value",
+        /*  10 */
+        "value ::= FLOAT",
+        /*  11 */
+        "value ::= INT",
+        /*  12 */
+        "value ::= BOOL",
+        /*  13 */
+        "value ::= SINGLE_QUOTED_STRING",
+        /*  14 */
+        "value ::= DOUBLE_QUOTED_STRING",
+        /*  15 */
+        "value ::= TRIPPLE_QUOTES TRIPPLE_TEXT TRIPPLE_QUOTES_END",
+        /*  16 */
+        "value ::= TRIPPLE_QUOTES TRIPPLE_QUOTES_END",
+        /*  17 */
+        "value ::= NAKED_STRING",
+        /*  18 */
+        "value ::= OTHER",
+        /*  19 */
+        "newline ::= NEWLINE",
+        /*  20 */
+        "newline ::= COMMENTSTART NEWLINE",
+        /*  21 */
+        "newline ::= COMMENTSTART NAKED_STRING NEWLINE",
     );
 
-    function tokenName($tokenType)
+    public function tokenName($tokenType)
     {
         if ($tokenType === 0) {
             return 'End of Input';
@@ -349,41 +437,43 @@ static public $yy_action = array(
         }
     }
 
-    static function yy_destructor($yymajor, $yypminor)
+    public static function yy_destructor($yymajor, $yypminor)
     {
         switch ($yymajor) {
-            default:  break;   /* If no destructor action specified: do nothing */
+            default:
+                break; /* If no destructor action specified: do nothing */
         }
     }
 
-    function yy_pop_parser_stack()
+    public function yy_pop_parser_stack()
     {
         if (!count($this->yystack)) {
             return;
         }
         $yytos = array_pop($this->yystack);
-        if (self::$yyTraceFILE && $this->yyidx >= 0) {
-            fwrite(self::$yyTraceFILE,
-                self::$yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
-                    "\n");
+        if ($this->yyTraceFILE && $this->yyidx >= 0) {
+            fwrite($this->yyTraceFILE,
+                   $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
+                   "\n");
         }
         $yymajor = $yytos->major;
         self::yy_destructor($yymajor, $yytos->minor);
-        $this->yyidx--;
+        $this->yyidx --;
+
         return $yymajor;
     }
 
-    function __destruct()
+    public function __destruct()
     {
         while ($this->yystack !== Array()) {
             $this->yy_pop_parser_stack();
         }
-        if (is_resource(self::$yyTraceFILE)) {
-            fclose(self::$yyTraceFILE);
+        if (is_resource($this->yyTraceFILE)) {
+            fclose($this->yyTraceFILE);
         }
     }
 
-    function yy_get_expected_tokens($token)
+    public function yy_get_expected_tokens($token)
     {
         $state = $this->yystack[$this->yyidx]->stateno;
         $expected = self::$yyExpectedTokens[$state];
@@ -398,7 +488,7 @@ static public $yy_action = array(
                 // reduce action
                 $done = 0;
                 do {
-                    if ($done++ == 100) {
+                    if ($done ++ == 100) {
                         $this->yyidx = $yyidx;
                         $this->yystack = $stack;
                         // too much recursion prevents proper detection
@@ -411,17 +501,18 @@ static public $yy_action = array(
                         $this->yystack[$this->yyidx]->stateno,
                         self::$yyRuleInfo[$yyruleno]['lhs']);
                     if (isset(self::$yyExpectedTokens[$nextstate])) {
-                       $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
-                            if (in_array($token,
-                                  self::$yyExpectedTokens[$nextstate], true)) {
+                        $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+                        if (in_array($token,
+                                     self::$yyExpectedTokens[$nextstate], true)) {
                             $this->yyidx = $yyidx;
                             $this->yystack = $stack;
+
                             return array_unique($expected);
                         }
                     }
                     if ($nextstate < self::YYNSTATE) {
                         // we need to shift a non-terminal
-                        $this->yyidx++;
+                        $this->yyidx ++;
                         $x = new TPC_yyStackEntry;
                         $x->stateno = $nextstate;
                         $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@@ -446,12 +537,13 @@ static public $yy_action = array(
             }
             break;
         } while (true);
-       $this->yyidx = $yyidx;
-       $this->yystack = $stack;
+        $this->yyidx = $yyidx;
+        $this->yystack = $stack;
+
         return array_unique($expected);
     }
 
-    function yy_is_expected_token($token)
+    public function yy_is_expected_token($token)
     {
         if ($token === 0) {
             return true; // 0 is not part of this
@@ -468,7 +560,7 @@ static public $yy_action = array(
                 // reduce action
                 $done = 0;
                 do {
-                    if ($done++ == 100) {
+                    if ($done ++ == 100) {
                         $this->yyidx = $yyidx;
                         $this->yystack = $stack;
                         // too much recursion prevents proper detection
@@ -481,14 +573,16 @@ static public $yy_action = array(
                         $this->yystack[$this->yyidx]->stateno,
                         self::$yyRuleInfo[$yyruleno]['lhs']);
                     if (isset(self::$yyExpectedTokens[$nextstate]) &&
-                          in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
+                        in_array($token, self::$yyExpectedTokens[$nextstate], true)
+                    ) {
                         $this->yyidx = $yyidx;
                         $this->yystack = $stack;
+
                         return true;
                     }
                     if ($nextstate < self::YYNSTATE) {
                         // we need to shift a non-terminal
-                        $this->yyidx++;
+                        $this->yyidx ++;
                         $x = new TPC_yyStackEntry;
                         $x->stateno = $nextstate;
                         $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@@ -519,10 +613,11 @@ static public $yy_action = array(
         } while (true);
         $this->yyidx = $yyidx;
         $this->yystack = $stack;
+
         return true;
     }
 
-   function yy_find_shift_action($iLookAhead)
+    public function yy_find_shift_action($iLookAhead)
     {
         $stateno = $this->yystack[$this->yyidx]->stateno;
 
@@ -540,23 +635,27 @@ static public $yy_action = array(
         }
         $i += $iLookAhead;
         if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
-              self::$yy_lookahead[$i] != $iLookAhead) {
+            self::$yy_lookahead[$i] != $iLookAhead
+        ) {
             if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
-                   && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
-                if (self::$yyTraceFILE) {
-                    fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " .
+                && ($iFallback = self::$yyFallback[$iLookAhead]) != 0
+            ) {
+                if ($this->yyTraceFILE) {
+                    fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " .
                         $this->yyTokenName[$iLookAhead] . " => " .
                         $this->yyTokenName[$iFallback] . "\n");
                 }
+
                 return $this->yy_find_shift_action($iFallback);
             }
+
             return self::$yy_default[$stateno];
         } else {
             return self::$yy_action[$i];
         }
     }
 
-    function yy_find_reduce_action($stateno, $iLookAhead)
+    public function yy_find_reduce_action($stateno, $iLookAhead)
     {
         /* $stateno = $this->yystack[$this->yyidx]->stateno; */
 
@@ -572,29 +671,31 @@ static public $yy_action = array(
         }
         $i += $iLookAhead;
         if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
-              self::$yy_lookahead[$i] != $iLookAhead) {
+            self::$yy_lookahead[$i] != $iLookAhead
+        ) {
             return self::$yy_default[$stateno];
         } else {
             return self::$yy_action[$i];
         }
     }
 
-    function yy_shift($yyNewState, $yyMajor, $yypMinor)
+    public function yy_shift($yyNewState, $yyMajor, $yypMinor)
     {
-        $this->yyidx++;
+        $this->yyidx ++;
         if ($this->yyidx >= self::YYSTACKDEPTH) {
-            $this->yyidx--;
-            if (self::$yyTraceFILE) {
-                fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt);
+            $this->yyidx --;
+            if ($this->yyTraceFILE) {
+                fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
             }
             while ($this->yyidx >= 0) {
                 $this->yy_pop_parser_stack();
             }
-#line 125 "smarty_internal_configfileparser.y"
+            #line 125 "smarty_internal_configfileparser.y"
+
+            $this->internalError = true;
+            $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
+            #line 601 "smarty_internal_configfileparser.php"
 
-    $this->internalError = true;
-    $this->compiler->trigger_config_file_error("Stack overflow in configfile parser");
-#line 593 "smarty_internal_configfileparser.php"
             return;
         }
         $yytos = new TPC_yyStackEntry;
@@ -602,57 +703,57 @@ static public $yy_action = array(
         $yytos->major = $yyMajor;
         $yytos->minor = $yypMinor;
         array_push($this->yystack, $yytos);
-        if (self::$yyTraceFILE && $this->yyidx > 0) {
-            fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt,
-                $yyNewState);
-            fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt);
-            for($i = 1; $i <= $this->yyidx; $i++) {
-                fprintf(self::$yyTraceFILE, " %s",
-                    $this->yyTokenName[$this->yystack[$i]->major]);
+        if ($this->yyTraceFILE && $this->yyidx > 0) {
+            fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
+                    $yyNewState);
+            fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
+            for ($i = 1; $i <= $this->yyidx; $i ++) {
+                fprintf($this->yyTraceFILE, " %s",
+                        $this->yyTokenName[$this->yystack[$i]->major]);
             }
-            fwrite(self::$yyTraceFILE,"\n");
-        }
-    }
-
-    static public $yyRuleInfo = array(
-  array( 'lhs' => 20, 'rhs' => 2 ),
-  array( 'lhs' => 21, 'rhs' => 1 ),
-  array( 'lhs' => 22, 'rhs' => 2 ),
-  array( 'lhs' => 22, 'rhs' => 0 ),
-  array( 'lhs' => 24, 'rhs' => 5 ),
-  array( 'lhs' => 24, 'rhs' => 6 ),
-  array( 'lhs' => 23, 'rhs' => 2 ),
-  array( 'lhs' => 23, 'rhs' => 2 ),
-  array( 'lhs' => 23, 'rhs' => 0 ),
-  array( 'lhs' => 26, 'rhs' => 3 ),
-  array( 'lhs' => 27, 'rhs' => 1 ),
-  array( 'lhs' => 27, 'rhs' => 1 ),
-  array( 'lhs' => 27, 'rhs' => 1 ),
-  array( 'lhs' => 27, 'rhs' => 1 ),
-  array( 'lhs' => 27, 'rhs' => 1 ),
-  array( 'lhs' => 27, 'rhs' => 3 ),
-  array( 'lhs' => 27, 'rhs' => 2 ),
-  array( 'lhs' => 27, 'rhs' => 1 ),
-  array( 'lhs' => 27, 'rhs' => 1 ),
-  array( 'lhs' => 25, 'rhs' => 1 ),
-  array( 'lhs' => 25, 'rhs' => 2 ),
-  array( 'lhs' => 25, 'rhs' => 3 ),
+            fwrite($this->yyTraceFILE, "\n");
+        }
+    }
+
+    public static $yyRuleInfo = array(
+        array('lhs' => 20, 'rhs' => 2),
+        array('lhs' => 21, 'rhs' => 1),
+        array('lhs' => 22, 'rhs' => 2),
+        array('lhs' => 22, 'rhs' => 0),
+        array('lhs' => 24, 'rhs' => 5),
+        array('lhs' => 24, 'rhs' => 6),
+        array('lhs' => 23, 'rhs' => 2),
+        array('lhs' => 23, 'rhs' => 2),
+        array('lhs' => 23, 'rhs' => 0),
+        array('lhs' => 26, 'rhs' => 3),
+        array('lhs' => 27, 'rhs' => 1),
+        array('lhs' => 27, 'rhs' => 1),
+        array('lhs' => 27, 'rhs' => 1),
+        array('lhs' => 27, 'rhs' => 1),
+        array('lhs' => 27, 'rhs' => 1),
+        array('lhs' => 27, 'rhs' => 3),
+        array('lhs' => 27, 'rhs' => 2),
+        array('lhs' => 27, 'rhs' => 1),
+        array('lhs' => 27, 'rhs' => 1),
+        array('lhs' => 25, 'rhs' => 1),
+        array('lhs' => 25, 'rhs' => 2),
+        array('lhs' => 25, 'rhs' => 3),
     );
 
-    static public $yyReduceMap = array(
-        0 => 0,
-        2 => 0,
-        3 => 0,
+    public static $yyReduceMap = array(
+        0  => 0,
+        2  => 0,
+        3  => 0,
         19 => 0,
         20 => 0,
         21 => 0,
-        1 => 1,
-        4 => 4,
-        5 => 5,
-        6 => 6,
-        7 => 7,
-        8 => 8,
-        9 => 9,
+        1  => 1,
+        4  => 4,
+        5  => 5,
+        6  => 6,
+        7  => 7,
+        8  => 8,
+        9  => 9,
         10 => 10,
         11 => 11,
         12 => 12,
@@ -663,101 +764,121 @@ static public $yy_action = array(
         17 => 17,
         18 => 17,
     );
-#line 131 "smarty_internal_configfileparser.y"
-    function yy_r0(){
-    $this->_retvalue = null;
-    }
-#line 666 "smarty_internal_configfileparser.php"
-#line 136 "smarty_internal_configfileparser.y"
-    function yy_r1(){
-    $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = null;
-    }
-#line 671 "smarty_internal_configfileparser.php"
-#line 149 "smarty_internal_configfileparser.y"
-    function yy_r4(){
-    $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
-    $this->_retvalue = null;
-    }
-#line 677 "smarty_internal_configfileparser.php"
-#line 154 "smarty_internal_configfileparser.y"
-    function yy_r5(){
-    if ($this->smarty->config_read_hidden) {
-        $this->add_section_vars($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + 0]->minor);
-    }
-    $this->_retvalue = null;
-    }
-#line 685 "smarty_internal_configfileparser.php"
-#line 162 "smarty_internal_configfileparser.y"
-    function yy_r6(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
-    }
-#line 690 "smarty_internal_configfileparser.php"
-#line 166 "smarty_internal_configfileparser.y"
-    function yy_r7(){
-    $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor, Array($this->yystack[$this->yyidx + 0]->minor));
-    }
-#line 695 "smarty_internal_configfileparser.php"
-#line 170 "smarty_internal_configfileparser.y"
-    function yy_r8(){
-    $this->_retvalue = Array();
-    }
-#line 700 "smarty_internal_configfileparser.php"
-#line 176 "smarty_internal_configfileparser.y"
-    function yy_r9(){
-    $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + -2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 705 "smarty_internal_configfileparser.php"
-#line 181 "smarty_internal_configfileparser.y"
-    function yy_r10(){
-    $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 710 "smarty_internal_configfileparser.php"
-#line 185 "smarty_internal_configfileparser.y"
-    function yy_r11(){
-    $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 715 "smarty_internal_configfileparser.php"
-#line 189 "smarty_internal_configfileparser.y"
-    function yy_r12(){
-    $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 720 "smarty_internal_configfileparser.php"
-#line 193 "smarty_internal_configfileparser.y"
-    function yy_r13(){
-    $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 725 "smarty_internal_configfileparser.php"
-#line 197 "smarty_internal_configfileparser.y"
-    function yy_r14(){
-    $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 730 "smarty_internal_configfileparser.php"
-#line 201 "smarty_internal_configfileparser.y"
-    function yy_r15(){
-    $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + -1]->minor);
-    }
-#line 735 "smarty_internal_configfileparser.php"
-#line 205 "smarty_internal_configfileparser.y"
-    function yy_r16(){
-    $this->_retvalue = '';
-    }
-#line 740 "smarty_internal_configfileparser.php"
-#line 209 "smarty_internal_configfileparser.y"
-    function yy_r17(){
-    $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 745 "smarty_internal_configfileparser.php"
+
+    #line 131 "smarty_internal_configfileparser.y"
+    function yy_r0()
+    {
+        $this->_retvalue = null;
+    }
+    #line 675 "smarty_internal_configfileparser.php"
+    #line 136 "smarty_internal_configfileparser.y"
+    function yy_r1()
+    {
+        $this->add_global_vars($this->yystack[$this->yyidx + 0]->minor);
+        $this->_retvalue = null;
+    }
+    #line 680 "smarty_internal_configfileparser.php"
+    #line 149 "smarty_internal_configfileparser.y"
+    function yy_r4()
+    {
+        $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+        $this->_retvalue = null;
+    }
+    #line 686 "smarty_internal_configfileparser.php"
+    #line 154 "smarty_internal_configfileparser.y"
+    function yy_r5()
+    {
+        if ($this->smarty->config_read_hidden) {
+            $this->add_section_vars($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor);
+        }
+        $this->_retvalue = null;
+    }
+    #line 694 "smarty_internal_configfileparser.php"
+    #line 162 "smarty_internal_configfileparser.y"
+    function yy_r6()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
+    }
+    #line 699 "smarty_internal_configfileparser.php"
+    #line 166 "smarty_internal_configfileparser.y"
+    function yy_r7()
+    {
+        $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, Array($this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 704 "smarty_internal_configfileparser.php"
+    #line 170 "smarty_internal_configfileparser.y"
+    function yy_r8()
+    {
+        $this->_retvalue = Array();
+    }
+    #line 709 "smarty_internal_configfileparser.php"
+    #line 176 "smarty_internal_configfileparser.y"
+    function yy_r9()
+    {
+        $this->_retvalue = Array("key" => $this->yystack[$this->yyidx + - 2]->minor, "value" => $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 714 "smarty_internal_configfileparser.php"
+    #line 181 "smarty_internal_configfileparser.y"
+    function yy_r10()
+    {
+        $this->_retvalue = (float) $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 719 "smarty_internal_configfileparser.php"
+    #line 185 "smarty_internal_configfileparser.y"
+    function yy_r11()
+    {
+        $this->_retvalue = (int) $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 724 "smarty_internal_configfileparser.php"
+    #line 189 "smarty_internal_configfileparser.y"
+    function yy_r12()
+    {
+        $this->_retvalue = $this->parse_bool($this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 729 "smarty_internal_configfileparser.php"
+    #line 193 "smarty_internal_configfileparser.y"
+    function yy_r13()
+    {
+        $this->_retvalue = self::parse_single_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 734 "smarty_internal_configfileparser.php"
+    #line 197 "smarty_internal_configfileparser.y"
+    function yy_r14()
+    {
+        $this->_retvalue = self::parse_double_quoted_string($this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 739 "smarty_internal_configfileparser.php"
+    #line 201 "smarty_internal_configfileparser.y"
+    function yy_r15()
+    {
+        $this->_retvalue = self::parse_tripple_double_quoted_string($this->yystack[$this->yyidx + - 1]->minor);
+    }
+    #line 744 "smarty_internal_configfileparser.php"
+    #line 205 "smarty_internal_configfileparser.y"
+    function yy_r16()
+    {
+        $this->_retvalue = '';
+    }
+    #line 749 "smarty_internal_configfileparser.php"
+    #line 209 "smarty_internal_configfileparser.y"
+    function yy_r17()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+    }
+
+    #line 754 "smarty_internal_configfileparser.php"
 
     private $_retvalue;
 
-    function yy_reduce($yyruleno)
+    public function yy_reduce($yyruleno)
     {
         $yymsp = $this->yystack[$this->yyidx];
-        if (self::$yyTraceFILE && $yyruleno >= 0
-              && $yyruleno < count(self::$yyRuleName)) {
-            fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n",
-                self::$yyTracePrompt, $yyruleno,
-                self::$yyRuleName[$yyruleno]);
+        if ($this->yyTraceFILE && $yyruleno >= 0
+            && $yyruleno < count(self::$yyRuleName)
+        ) {
+            fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
+                    $this->yyTracePrompt, $yyruleno,
+                    self::$yyRuleName[$yyruleno]);
         }
 
         $this->_retvalue = $yy_lefthand_side = null;
@@ -770,14 +891,14 @@ static public $yy_action = array(
         $yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
         $yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
         $this->yyidx -= $yysize;
-        for($i = $yysize; $i; $i--) {
+        for ($i = $yysize; $i; $i --) {
             // pop all of the right-hand side parameters
             array_pop($this->yystack);
         }
         $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
         if ($yyact < self::YYNSTATE) {
-            if (!self::$yyTraceFILE && $yysize) {
-                $this->yyidx++;
+            if (!$this->yyTraceFILE && $yysize) {
+                $this->yyidx ++;
                 $x = new TPC_yyStackEntry;
                 $x->stateno = $yyact;
                 $x->major = $yygoto;
@@ -791,73 +912,74 @@ static public $yy_action = array(
         }
     }
 
-    function yy_parse_failed()
+    public function yy_parse_failed()
     {
-        if (self::$yyTraceFILE) {
-            fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt);
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
         }
         while ($this->yyidx >= 0) {
             $this->yy_pop_parser_stack();
         }
     }
 
-    function yy_syntax_error($yymajor, $TOKEN)
+    public function yy_syntax_error($yymajor, $TOKEN)
     {
-#line 118 "smarty_internal_configfileparser.y"
+        #line 118 "smarty_internal_configfileparser.y"
 
-    $this->internalError = true;
-    $this->yymajor = $yymajor;
-    $this->compiler->trigger_config_file_error();
-#line 808 "smarty_internal_configfileparser.php"
+        $this->internalError = true;
+        $this->yymajor = $yymajor;
+        $this->compiler->trigger_config_file_error();
+        #line 816 "smarty_internal_configfileparser.php"
     }
 
-    function yy_accept()
+    public function yy_accept()
     {
-        if (self::$yyTraceFILE) {
-            fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt);
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
         }
         while ($this->yyidx >= 0) {
             $stack = $this->yy_pop_parser_stack();
         }
-#line 110 "smarty_internal_configfileparser.y"
+        #line 110 "smarty_internal_configfileparser.y"
 
-    $this->successful = !$this->internalError;
-    $this->internalError = false;
-    $this->retvalue = $this->_retvalue;
-    //echo $this->retvalue."\n\n";
-#line 826 "smarty_internal_configfileparser.php"
+        $this->successful = !$this->internalError;
+        $this->internalError = false;
+        $this->retvalue = $this->_retvalue;
+        //echo $this->retvalue."\n\n";
+        #line 833 "smarty_internal_configfileparser.php"
     }
 
-    function doParse($yymajor, $yytokenvalue)
+    public function doParse($yymajor, $yytokenvalue)
     {
-        $yyerrorhit = 0;   /* True if yymajor has invoked an error */
+        $yyerrorhit = 0; /* True if yymajor has invoked an error */
 
         if ($this->yyidx === null || $this->yyidx < 0) {
             $this->yyidx = 0;
-            $this->yyerrcnt = -1;
+            $this->yyerrcnt = - 1;
             $x = new TPC_yyStackEntry;
             $x->stateno = 0;
             $x->major = 0;
             $this->yystack = array();
             array_push($this->yystack, $x);
         }
-        $yyendofinput = ($yymajor==0);
+        $yyendofinput = ($yymajor == 0);
 
-        if (self::$yyTraceFILE) {
-            fprintf(self::$yyTraceFILE, "%sInput %s\n",
-                self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sInput %s\n",
+                    $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
         }
 
         do {
             $yyact = $this->yy_find_shift_action($yymajor);
             if ($yymajor < self::YYERRORSYMBOL &&
-                  !$this->yy_is_expected_token($yymajor)) {
+                !$this->yy_is_expected_token($yymajor)
+            ) {
                 // force a syntax error
                 $yyact = self::YY_ERROR_ACTION;
             }
             if ($yyact < self::YYNSTATE) {
                 $this->yy_shift($yyact, $yymajor, $yytokenvalue);
-                $this->yyerrcnt--;
+                $this->yyerrcnt --;
                 if ($yyendofinput && $this->yyidx >= 0) {
                     $yymajor = 0;
                 } else {
@@ -866,30 +988,30 @@ static public $yy_action = array(
             } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
                 $this->yy_reduce($yyact - self::YYNSTATE);
             } elseif ($yyact == self::YY_ERROR_ACTION) {
-                if (self::$yyTraceFILE) {
-                    fprintf(self::$yyTraceFILE, "%sSyntax Error!\n",
-                        self::$yyTracePrompt);
+                if ($this->yyTraceFILE) {
+                    fprintf($this->yyTraceFILE, "%sSyntax Error!\n",
+                            $this->yyTracePrompt);
                 }
                 if (self::YYERRORSYMBOL) {
                     if ($this->yyerrcnt < 0) {
                         $this->yy_syntax_error($yymajor, $yytokenvalue);
                     }
                     $yymx = $this->yystack[$this->yyidx]->major;
-                    if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){
-                        if (self::$yyTraceFILE) {
-                            fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n",
-                                self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+                    if ($yymx == self::YYERRORSYMBOL || $yyerrorhit{
+                        if ($this->yyTraceFILE) {
+                            fprintf($this->yyTraceFILE, "%sDiscard input token %s\n",
+                                    $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
                         }
                         $this->yy_destructor($yymajor, $yytokenvalue);
                         $yymajor = self::YYNOCODE;
                     } else {
                         while ($this->yyidx >= 0 &&
-                                 $yymx != self::YYERRORSYMBOL &&
-        ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
-                              ){
+                            $yymx != self::YYERRORSYMBOL &&
+                            ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
+                        {
                             $this->yy_pop_parser_stack();
                         }
-                        if ($this->yyidx < 0 || $yymajor==0) {
+                        if ($this->yyidx < 0 || $yymajor == 0) {
                             $this->yy_destructor($yymajor, $yytokenvalue);
                             $this->yy_parse_failed();
                             $yymajor = self::YYNOCODE;
@@ -918,4 +1040,3 @@ static public $yy_action = array(
         } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
     }
 }
-?>
\ No newline at end of file
index 5baf3b76dc719817a32f4c1ac1fecb2972a50b48..9e16f10c00eb9ec0506ffa8e3034081401b97c48 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Data
+ * This file contains the basic classes and methods for template and variable creation
  *
- * This file contains the basic classes and methodes for template and variable creation
- *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Template
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
- * Base class with template and variable methodes
+ * Base class with template and variable methods
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Template
  */
-class Smarty_Internal_Data {
-
+class Smarty_Internal_Data
+{
     /**
      * name of class used for templates
      *
@@ -45,10 +44,10 @@ class Smarty_Internal_Data {
     /**
      * assigns a Smarty variable
      *
-     * @param array|string $tpl_var the template variable name(s)
-     * @param mixed        $value   the value to assign
-     * @param boolean      $nocache if true any output of this variable will be not cached
-     * @param boolean $scope the scope the variable will have  (local,parent or root)
+     * @param  array|string $tpl_var the template variable name(s)
+     * @param  mixed        $value   the value to assign
+     * @param  boolean      $nocache if true any output of this variable will be not cached
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function assign($tpl_var, $value = null, $nocache = false)
@@ -71,32 +70,40 @@ class Smarty_Internal_Data {
     /**
      * assigns a global Smarty variable
      *
-     * @param string $varname the global variable name
-     * @param mixed  $value   the value to assign
-     * @param boolean $nocache if true any output of this variable will be not cached
+     * @param  string  $varname the global variable name
+     * @param  mixed   $value   the value to assign
+     * @param  boolean $nocache if true any output of this variable will be not cached
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function assignGlobal($varname, $value = null, $nocache = false)
     {
         if ($varname != '') {
             Smarty::$global_tpl_vars[$varname] = new Smarty_variable($value, $nocache);
+            $ptr = $this;
+            while ($ptr instanceof Smarty_Internal_Template) {
+                $ptr->tpl_vars[$varname] = clone Smarty::$global_tpl_vars[$varname];
+                $ptr = $ptr->parent;
+            }
         }
 
         return $this;
     }
+
     /**
      * assigns values to template variables by reference
      *
-     * @param string $tpl_var the template variable name
-     * @param mixed $ &$value the referenced value to assign
-     * @param boolean $nocache if true any output of this variable will be not cached
+     * @param string   $tpl_var the template variable name
+     * @param          $value
+     * @param  boolean $nocache if true any output of this variable will be not cached
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function assignByRef($tpl_var, &$value, $nocache = false)
     {
         if ($tpl_var != '') {
             $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache);
-            $this->tpl_vars[$tpl_var]->value = &$value;
+            $this->tpl_vars[$tpl_var]->value = & $value;
         }
 
         return $this;
@@ -105,10 +112,11 @@ class Smarty_Internal_Data {
     /**
      * appends values to template variables
      *
-     * @param array|string $tpl_var the template variable name(s)
-     * @param mixed        $value   the value to append
-     * @param boolean      $merge   flag if array elements shall be merged
-     * @param boolean $nocache if true any output of this variable will be not cached
+     * @param  array|string $tpl_var the template variable name(s)
+     * @param  mixed        $value   the value to append
+     * @param  boolean      $merge   flag if array elements shall be merged
+     * @param  boolean      $nocache if true any output of this variable will be not cached
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function append($tpl_var, $value = null, $merge = false, $nocache = false)
@@ -129,7 +137,7 @@ class Smarty_Internal_Data {
                         settype($this->tpl_vars[$_key]->value, 'array');
                     }
                     if ($merge && is_array($_val)) {
-                        foreach($_val as $_mkey => $_mval) {
+                        foreach ($_val as $_mkey => $_mval) {
                             $this->tpl_vars[$_key]->value[$_mkey] = $_mval;
                         }
                     } else {
@@ -151,7 +159,7 @@ class Smarty_Internal_Data {
                     settype($this->tpl_vars[$tpl_var]->value, 'array');
                 }
                 if ($merge && is_array($value)) {
-                    foreach($value as $_mkey => $_mval) {
+                    foreach ($value as $_mkey => $_mval) {
                         $this->tpl_vars[$tpl_var]->value[$_mkey] = $_mval;
                     }
                 } else {
@@ -166,9 +174,10 @@ class Smarty_Internal_Data {
     /**
      * appends values to template variables by reference
      *
-     * @param string $tpl_var the template variable name
-     * @param mixed  &$value  the referenced value to append
-     * @param boolean $merge  flag if array elements shall be merged
+     * @param  string  $tpl_var the template variable name
+     * @param  mixed   &$value  the referenced value to append
+     * @param  boolean $merge   flag if array elements shall be merged
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function appendByRef($tpl_var, &$value, $merge = false)
@@ -181,11 +190,11 @@ class Smarty_Internal_Data {
                 settype($this->tpl_vars[$tpl_var]->value, 'array');
             }
             if ($merge && is_array($value)) {
-                foreach($value as $_key => $_val) {
-                    $this->tpl_vars[$tpl_var]->value[$_key] = &$value[$_key];
+                foreach ($value as $_key => $_val) {
+                    $this->tpl_vars[$tpl_var]->value[$_key] = & $value[$_key];
                 }
             } else {
-                $this->tpl_vars[$tpl_var]->value[] = &$value;
+                $this->tpl_vars[$tpl_var]->value[] = & $value;
             }
         }
 
@@ -195,10 +204,11 @@ class Smarty_Internal_Data {
     /**
      * Returns a single or all template variables
      *
-     * @param string  $varname        variable name or null
-     * @param string  $_ptr           optional pointer to data object
-     * @param boolean $search_parents include parent templates?
-     * @return string variable value or or array of variables
+     * @param  string  $varname        variable name or null
+     * @param  object   $_ptr           optional pointer to data object
+     * @param  boolean $search_parents include parent templates?
+     *
+     * @return string  variable value or or array of variables
      */
     public function getTemplateVars($varname = null, $_ptr = null, $search_parents = true)
     {
@@ -213,7 +223,8 @@ class Smarty_Internal_Data {
             $_result = array();
             if ($_ptr === null) {
                 $_ptr = $this;
-            } while ($_ptr !== null) {
+            }
+            while ($_ptr !== null) {
                 foreach ($_ptr->tpl_vars AS $key => $var) {
                     if (!array_key_exists($key, $_result)) {
                         $_result[$key] = $var->value;
@@ -233,6 +244,7 @@ class Smarty_Internal_Data {
                     }
                 }
             }
+
             return $_result;
         }
     }
@@ -240,7 +252,8 @@ class Smarty_Internal_Data {
     /**
      * clear the given assigned template variable.
      *
-     * @param string|array $tpl_var the template variable(s) to clear
+     * @param  string|array $tpl_var the template variable(s) to clear
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function clearAssign($tpl_var)
@@ -258,19 +271,22 @@ class Smarty_Internal_Data {
 
     /**
      * clear all the assigned template variables.
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function clearAllAssign()
     {
         $this->tpl_vars = array();
+
         return $this;
     }
 
     /**
      * load a config file, optionally load just selected sections
      *
-     * @param string $config_file filename
-     * @param mixed  $sections    array of section names, single section or null
+     * @param  string $config_file filename
+     * @param  mixed  $sections    array of section names, single section or null
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function configLoad($config_file, $sections = null)
@@ -278,22 +294,26 @@ class Smarty_Internal_Data {
         // load Config class
         $config = new Smarty_Internal_Config($config_file, $this->smarty, $this);
         $config->loadConfigVars($sections);
+
         return $this;
     }
 
     /**
      * gets the object of a Smarty variable
      *
-     * @param string  $variable the name of the Smarty variable
-     * @param object  $_ptr     optional pointer to data object
-     * @param boolean $search_parents search also in parent data
-     * @return object the object of the variable
+     * @param  string  $variable       the name of the Smarty variable
+     * @param  object  $_ptr           optional pointer to data object
+     * @param  boolean $search_parents search also in parent data
+     * @param bool     $error_enable
+     *
+     * @return object  the object of the variable
      */
     public function getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true)
     {
         if ($_ptr === null) {
             $_ptr = $this;
-        } while ($_ptr !== null) {
+        }
+        while ($_ptr !== null) {
             if (isset($_ptr->tpl_vars[$variable])) {
                 // found it, return it
                 return $_ptr->tpl_vars[$variable];
@@ -313,14 +333,17 @@ class Smarty_Internal_Data {
             // force a notice
             $x = $$variable;
         }
+
         return new Undefined_Smarty_Variable;
     }
 
     /**
      * gets  a config variable
      *
-     * @param string $variable the name of the config variable
-     * @return mixed the value of the config variable
+     * @param  string $variable the name of the config variable
+     * @param bool    $error_enable
+     *
+     * @return mixed  the value of the config variable
      */
     public function getConfigVariable($variable, $error_enable = true)
     {
@@ -337,24 +360,28 @@ class Smarty_Internal_Data {
             // force a notice
             $x = $$variable;
         }
+
         return null;
     }
 
     /**
      * gets  a stream variable
      *
-     * @param string $variable the stream of the variable
-     * @return mixed the value of the stream variable
+     * @param  string $variable the stream of the variable
+     *
+     * @throws SmartyException
+     * @return mixed  the value of the stream variable
      */
     public function getStreamVariable($variable)
     {
         $_result = '';
         $fp = fopen($variable, 'r+');
         if ($fp) {
-            while (!feof($fp) && ($current_line = fgets($fp)) !== false ) {
+            while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
                 $_result .= $current_line;
             }
             fclose($fp);
+
             return $_result;
         }
 
@@ -368,7 +395,9 @@ class Smarty_Internal_Data {
     /**
      * Returns a single or all config variables
      *
-     * @param string $varname variable name or null
+     * @param  string $varname variable name or null
+     * @param bool    $search_parents
+     *
      * @return string variable value or or array of variables
      */
     public function getConfigVars($varname = null, $search_parents = true)
@@ -383,7 +412,7 @@ class Smarty_Internal_Data {
             } else {
                 $var_array = array_merge($_ptr->config_vars, $var_array);
             }
-             // not found, try at parent
+            // not found, try at parent
             if ($search_parents) {
                 $_ptr = $_ptr->parent;
             } else {
@@ -400,7 +429,8 @@ class Smarty_Internal_Data {
     /**
      * Deassigns a single or all config variables
      *
-     * @param string $varname variable name or null
+     * @param  string $varname variable name or null
+     *
      * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for chaining
      */
     public function clearConfig($varname = null)
@@ -410,21 +440,20 @@ class Smarty_Internal_Data {
         } else {
             $this->config_vars = array();
         }
+
         return $this;
     }
-
 }
 
 /**
  * class for the Smarty data object
- *
  * The Smarty data object will hold Smarty variables in the current scope
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Template
  */
-class Smarty_Data extends Smarty_Internal_Data {
-
+class Smarty_Data extends Smarty_Internal_Data
+{
     /**
      * Smarty object
      *
@@ -435,10 +464,12 @@ class Smarty_Data extends Smarty_Internal_Data {
     /**
      * create Smarty data object
      *
-     * @param Smarty|array $_parent  parent template
-     * @param Smarty       $smarty   global smarty instance
+     * @param Smarty|array $_parent parent template
+     * @param Smarty|Smarty_Internal_Template       $smarty  global smarty instance
+     *
+     * @throws SmartyException
      */
-    public function __construct ($_parent = null, $smarty = null)
+    public function __construct($_parent = null, $smarty = null)
     {
         $this->smarty = $smarty;
         if (is_object($_parent)) {
@@ -453,19 +484,17 @@ class Smarty_Data extends Smarty_Internal_Data {
             throw new SmartyException("Wrong type for template variables");
         }
     }
-
 }
 
 /**
  * class for the Smarty variable object
- *
  * This class defines the Smarty variable object
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Template
  */
-class Smarty_Variable {
-
+class Smarty_Variable
+{
     /**
      * template variable
      *
@@ -508,23 +537,22 @@ class Smarty_Variable {
     {
         return (string) $this->value;
     }
-
 }
 
 /**
  * class for undefined variable object
- *
  * This class defines an object for undefined variable handling
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Template
  */
-class Undefined_Smarty_Variable {
-
+class Undefined_Smarty_Variable
+{
     /**
      * Returns FALSE for 'nocache' and NULL otherwise.
      *
-     * @param string $name
+     * @param  string $name
+     *
      * @return bool
      */
     public function __get($name)
@@ -545,7 +573,4 @@ class Undefined_Smarty_Variable {
     {
         return "";
     }
-
 }
-
-?>
\ No newline at end of file
index 2aea13f301e39d6faffa48f2a6c13e04c190d01e..e5175d51d33b67528990bb711b9cf6fff0f29afc 100644 (file)
@@ -1,22 +1,21 @@
 <?php
 /**
  * Smarty Internal Plugin Debug
- *
  * Class to collect data for the Smarty Debugging Consol
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Debug
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Smarty Internal Plugin Debug Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Debug
  */
-class Smarty_Internal_Debug extends Smarty_Internal_Data {
-
+class Smarty_Internal_Debug extends Smarty_Internal_Data
+{
     /**
      * template data
      *
@@ -24,6 +23,27 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
      */
     public static $template_data = array();
 
+    /**
+     * List of uid's which shall be ignored
+     *
+     * @var array
+     */
+    public static $ignore_uid = array();
+
+    /**
+     * Ignore template
+     *
+     * @param object $template
+     */
+    public static function ignore($template)
+    {
+        // calculate Uid if not already done
+        if ($template->source->uid == '') {
+            $template->source->filepath;
+        }
+        self::$ignore_uid[$template->source->uid] = true;
+    }
+
     /**
      * Start logging of compile time
      *
@@ -31,7 +51,25 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
      */
     public static function start_compile($template)
     {
-        $key = self::get_key($template);
+        static $_is_stringy = array('string' => true, 'eval' => true);
+        if (!empty($template->compiler->trace_uid)) {
+            $key = $template->compiler->trace_uid;
+            if (!isset(self::$template_data[$key])) {
+                if (isset($_is_stringy[$template->source->type])) {
+                    self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\'';
+                } else {
+                    self::$template_data[$key]['name'] = $template->source->filepath;
+                }
+                self::$template_data[$key]['compile_time'] = 0;
+                self::$template_data[$key]['render_time'] = 0;
+                self::$template_data[$key]['cache_time'] = 0;
+            }
+        } else {
+            if (isset(self::$ignore_uid[$template->source->uid])) {
+                return;
+            }
+            $key = self::get_key($template);
+        }
         self::$template_data[$key]['start_time'] = microtime(true);
     }
 
@@ -42,7 +80,15 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
      */
     public static function end_compile($template)
     {
-        $key = self::get_key($template);
+        if (!empty($template->compiler->trace_uid)) {
+            $key = $template->compiler->trace_uid;
+        } else {
+            if (isset(self::$ignore_uid[$template->source->uid])) {
+                return;
+            }
+
+            $key = self::get_key($template);
+        }
         self::$template_data[$key]['compile_time'] += microtime(true) - self::$template_data[$key]['start_time'];
     }
 
@@ -115,6 +161,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
         $smarty->left_delimiter = '{';
         $smarty->right_delimiter = '}';
         $smarty->debugging = false;
+        $smarty->debugging_ctrl = 'NONE';
         $smarty->force_compile = false;
         $_template = new Smarty_Internal_Template($smarty->debug_tpl, $smarty);
         $_template->caching = false;
@@ -138,7 +185,8 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
     /**
      * Recursively gets variables from all template/data scopes
      *
-     * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
+     * @param  Smarty_Internal_Template|Smarty_Data $obj object to debug
+     *
      * @return StdClass
      */
     public static function get_debug_vars($obj)
@@ -169,14 +217,16 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
                 }
             }
         }
+
         return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
     }
 
     /**
      * Return key into $template_data for template
      *
-     * @param object $template  template object
-     * @return string   key into $template_data
+     * @param  object $template template object
+     *
+     * @return string key into $template_data
      */
     private static function get_key($template)
     {
@@ -190,17 +240,15 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data {
             return $key;
         } else {
             if (isset($_is_stringy[$template->source->type])) {
-                self::$template_data[$key]['name'] = '\''.substr($template->source->name,0,25).'...\'';
+                self::$template_data[$key]['name'] = '\'' . substr($template->source->name, 0, 25) . '...\'';
             } else {
                 self::$template_data[$key]['name'] = $template->source->filepath;
             }
             self::$template_data[$key]['compile_time'] = 0;
             self::$template_data[$key]['render_time'] = 0;
             self::$template_data[$key]['cache_time'] = 0;
+
             return $key;
         }
     }
-
 }
-
-?>
\ No newline at end of file
index c9370e1ac7ad040922ad04e843dd955d4e3dfc2d..4f0f3981c937979c0de0642277e7ba576f8d7504 100644 (file)
@@ -1,41 +1,41 @@
 <?php
 /**
  * Smarty Internal Plugin Filter Handler
- *
  * Smarty filter handler class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsInternal
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Class for filter processing
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsInternal
  */
-class Smarty_Internal_Filter_Handler {
-
+class Smarty_Internal_Filter_Handler
+{
     /**
      * Run filters over content
-     *
      * The filters will be lazy loaded if required
      * class name format: Smarty_FilterType_FilterName
      * plugin filename format: filtertype.filtername.php
      * Smarty2 filter plugins could be used
      *
-     * @param string                   $type     the type of filter ('pre','post','output') which shall run
-     * @param string                   $content  the content which shall be processed by the filters
-     * @param Smarty_Internal_Template $template template object
-     * @return string the filtered content
+     * @param  string                   $type     the type of filter ('pre','post','output') which shall run
+     * @param  string                   $content  the content which shall be processed by the filters
+     * @param  Smarty_Internal_Template $template template object
+     *
+     * @throws SmartyException
+     * @return string                   the filtered content
      */
     public static function runFilter($type, $content, Smarty_Internal_Template $template)
     {
         $output = $content;
         // loop over autoload filters of specified type
         if (!empty($template->smarty->autoload_filters[$type])) {
-            foreach ((array)$template->smarty->autoload_filters[$type] as $name) {
+            foreach ((array) $template->smarty->autoload_filters[$type] as $name) {
                 $plugin_name = "Smarty_{$type}filter_{$name}";
                 if ($template->smarty->loadPlugin($plugin_name)) {
                     if (function_exists($plugin_name)) {
@@ -64,7 +64,4 @@ class Smarty_Internal_Filter_Handler {
         // return filtered output
         return $output;
     }
-
 }
-
-?>
\ No newline at end of file
index 010d63592b26abfad2c7f338c48f8ebca5ad5115..a81ff728bb52d5138f6b354b5cc6dff487678b36 100644 (file)
@@ -1,55 +1,52 @@
-<?php\r
-/**\r
- * Smarty Internal Plugin Function Call Handler\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsInternal\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * This class does call function defined with the {function} tag\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsInternal\r
- */\r
-class Smarty_Internal_Function_Call_Handler {\r
-\r
-    /**\r
-     * This function handles calls to template functions defined by {function}\r
-     * It does create a PHP function at the first call\r
-     *\r
-     * @param string                   $_name       template function name\r
-     * @param Smarty_Internal_Template $_template   template object\r
-     * @param array                    $_params     Smarty variables passed as call parameter\r
-     * @param string                   $_hash       nocache hash value\r
-     * @param bool                     $_nocache    nocache flag\r
-     */\r
-    public static function call($_name, Smarty_Internal_Template $_template, $_params, $_hash, $_nocache)\r
-    {\r
-        if ($_nocache) {\r
-            $_function = "smarty_template_function_{$_name}_nocache";\r
-        } else {\r
-            $_function = "smarty_template_function_{$_hash}_{$_name}";\r
-        }\r
-        if (!is_callable($_function)) {\r
-            $_code = "function {$_function}(\$_smarty_tpl,\$params) {\r
-    \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;\r
-    foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};\r
-    foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";\r
-            if ($_nocache) {\r
-                $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!",\r
-                        "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']);\r
-                $_template->smarty->template_functions[$_name]['called_nocache'] = true;\r
-            } else {\r
-                $_code .= preg_replace("/{$_template->smarty->template_functions[$_name]['nocache_hash']}/", $_template->properties['nocache_hash'], $_template->smarty->template_functions[$_name]['compiled']);\r
-            }\r
-            $_code .= "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}";\r
-            eval($_code);\r
-        }\r
-        $_function($_template, $_params);\r
-    }\r
-\r
-}\r
-\r
-?>\r
+<?php
+/**
+ * Smarty Internal Plugin Function Call Handler
+ *
+ * @package    Smarty
+ * @subpackage PluginsInternal
+ * @author     Uwe Tews
+ */
+
+/**
+ * This class does call function defined with the {function} tag
+ *
+ * @package    Smarty
+ * @subpackage PluginsInternal
+ */
+class Smarty_Internal_Function_Call_Handler
+{
+    /**
+     * This function handles calls to template functions defined by {function}
+     * It does create a PHP function at the first call
+     *
+     * @param string                   $_name     template function name
+     * @param Smarty_Internal_Template $_template template object
+     * @param array                    $_params   Smarty variables passed as call parameter
+     * @param string                   $_hash     nocache hash value
+     * @param bool                     $_nocache  nocache flag
+     */
+    public static function call($_name, Smarty_Internal_Template $_template, $_params, $_hash, $_nocache)
+    {
+        if ($_nocache) {
+            $_function = "smarty_template_function_{$_name}_nocache";
+        } else {
+            $_function = "smarty_template_function_{$_hash}_{$_name}";
+        }
+        if (!is_callable($_function)) {
+            $_code = "function {$_function}(\$_smarty_tpl,\$params) {
+    \$saved_tpl_vars = \$_smarty_tpl->tpl_vars;
+    foreach (\$_smarty_tpl->smarty->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);};
+    foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>";
+            if ($_nocache) {
+                $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!",
+                                             "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']);
+                $_template->smarty->template_functions[$_name]['called_nocache'] = true;
+            } else {
+                $_code .= preg_replace("/{$_template->smarty->template_functions[$_name]['nocache_hash']}/", $_template->properties['nocache_hash'], $_template->smarty->template_functions[$_name]['compiled']);
+            }
+            $_code .= "<?php \$_smarty_tpl->tpl_vars = \$saved_tpl_vars;}";
+            eval($_code);
+        }
+        $_function($_template, $_params);
+    }
+}
index 518c406aa519096fb826afb553613f3e535df34d..d46ca70290585e554033ca547e458a342067998c 100644 (file)
@@ -1,48 +1,46 @@
-<?php\r
-/**\r
- * Smarty read include path plugin\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsInternal\r
- * @author Monte Ohrt\r
- */\r
-\r
-/**\r
- * Smarty Internal Read Include Path Class\r
- *\r
- * @package Smarty\r
- * @subpackage PluginsInternal\r
- */\r
-class Smarty_Internal_Get_Include_Path {\r
-\r
-    /**\r
-     * Return full file path from PHP include_path\r
-     *\r
-     * @param string $filepath filepath\r
-     * @return string|boolean full filepath or false\r
-     */\r
-    public static function getIncludePath($filepath)\r
-    {\r
-        static $_include_path = null;\r
-        \r
-        if (function_exists('stream_resolve_include_path')) {\r
-            // available since PHP 5.3.2\r
-            return stream_resolve_include_path($filepath);\r
-        }\r
-\r
-        if ($_include_path === null) {\r
-            $_include_path = explode(PATH_SEPARATOR, get_include_path());\r
-        }\r
-\r
-        foreach ($_include_path as $_path) {\r
-            if (file_exists($_path . DS . $filepath)) {\r
-                return $_path . DS . $filepath;\r
-            }\r
-        }\r
-\r
-        return false;\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty read include path plugin
+ *
+ * @package    Smarty
+ * @subpackage PluginsInternal
+ * @author     Monte Ohrt
+ */
+
+/**
+ * Smarty Internal Read Include Path Class
+ *
+ * @package    Smarty
+ * @subpackage PluginsInternal
+ */
+class Smarty_Internal_Get_Include_Path
+{
+    /**
+     * Return full file path from PHP include_path
+     *
+     * @param  string $filepath filepath
+     *
+     * @return string|boolean full filepath or false
+     */
+    public static function getIncludePath($filepath)
+    {
+        static $_include_path = null;
+
+        if (function_exists('stream_resolve_include_path')) {
+            // available since PHP 5.3.2
+            return stream_resolve_include_path($filepath);
+        }
+
+        if ($_include_path === null) {
+            $_include_path = explode(PATH_SEPARATOR, get_include_path());
+        }
+
+        foreach ($_include_path as $_path) {
+            if (file_exists($_path . DS . $filepath)) {
+                return $_path . DS . $filepath;
+            }
+        }
+
+        return false;
+    }
+}
index faae49af6e0c5e89de259c933ebcd73f80a2c45c..0d2facfe937f58e3ad962ef1a7b31dcf4c5f2155 100644 (file)
@@ -1,53 +1,51 @@
-<?php\r
-/**\r
- * Smarty Internal Plugin Nocache Insert\r
- *\r
- * Compiles the {insert} tag into the cache file\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * Smarty Internal Plugin Compile Insert Class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-class Smarty_Internal_Nocache_Insert {\r
-\r
-    /**\r
-     * Compiles code for the {insert} tag into cache file\r
-     *\r
-     * @param string                   $_function insert function name\r
-     * @param array                    $_attr     array with parameter\r
-     * @param Smarty_Internal_Template $_template template object\r
-     * @param string                   $_script   script name to load or 'null'\r
-     * @param string                   $_assign   optional variable name\r
-     * @return string compiled code\r
-     */\r
-    public static function compile($_function, $_attr, $_template, $_script, $_assign = null)\r
-    {\r
-        $_output = '<?php ';\r
-        if ($_script != 'null') {\r
-            // script which must be included\r
-            // code for script file loading\r
-            $_output .= "require_once '{$_script}';";\r
-        }\r
-        // call insert\r
-        if (isset($_assign)) {\r
-            $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>";\r
-        } else {\r
-            $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>";\r
-        }\r
-        $_tpl = $_template;\r
-        while ($_tpl->parent instanceof Smarty_Internal_Template) {\r
-            $_tpl = $_tpl->parent;\r
-        }\r
-        return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/";\r
-    }\r
-\r
-}\r
-\r
-?>\r
+<?php
+/**
+ * Smarty Internal Plugin Nocache Insert
+ * Compiles the {insert} tag into the cache file
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
+/**
+ * Smarty Internal Plugin Compile Insert Class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+class Smarty_Internal_Nocache_Insert
+{
+    /**
+     * Compiles code for the {insert} tag into cache file
+     *
+     * @param  string                   $_function insert function name
+     * @param  array                    $_attr     array with parameter
+     * @param  Smarty_Internal_Template $_template template object
+     * @param  string                   $_script   script name to load or 'null'
+     * @param  string                   $_assign   optional variable name
+     *
+     * @return string                   compiled code
+     */
+    public static function compile($_function, $_attr, $_template, $_script, $_assign = null)
+    {
+        $_output = '<?php ';
+        if ($_script != 'null') {
+            // script which must be included
+            // code for script file loading
+            $_output .= "require_once '{$_script}';";
+        }
+        // call insert
+        if (isset($_assign)) {
+            $_output .= "\$_smarty_tpl->assign('{$_assign}' , {$_function} (" . var_export($_attr, true) . ",\$_smarty_tpl), true);?>";
+        } else {
+            $_output .= "echo {$_function}(" . var_export($_attr, true) . ",\$_smarty_tpl);?>";
+        }
+        $_tpl = $_template;
+        while ($_tpl->parent instanceof Smarty_Internal_Template) {
+            $_tpl = $_tpl->parent;
+        }
+
+        return "/*%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/" . $_output . "/*/%%SmartyNocache:{$_tpl->properties['nocache_hash']}%%*/";
+    }
+}
index c9fb1f7625cb00170e48e458084166a6b0861dc0..4044e4c0fdfacddf6016523fb25109ef5eb59610 100644 (file)
-<?php\r
-/**\r
- * Smarty Internal Plugin Templateparser Parsetrees\r
- *\r
- * These are classes to build parsetrees in the template parser\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Thue Kristensen\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @ignore\r
- */\r
-abstract class _smarty_parsetree {\r
-\r
-    /**\r
-     * Parser object\r
-     * @var object\r
-     */\r
-    public $parser;\r
-    /**\r
-     * Buffer content\r
-     * @var mixed\r
-     */\r
-    public $data;\r
-\r
-    /**\r
-     * Return buffer\r
-     *\r
-     * @return string  buffer content\r
-     */\r
-    abstract public function to_smarty_php();\r
-\r
-}\r
-\r
-/**\r
- * A complete smarty tag.\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @ignore\r
- */\r
-class _smarty_tag extends _smarty_parsetree {\r
-\r
-    /**\r
-     * Saved block nesting level\r
-     * @var int\r
-     */\r
-    public $saved_block_nesting;\r
-\r
-    /**\r
-     * Create parse tree buffer for Smarty tag\r
-     *\r
-     * @param object $parser    parser object\r
-     * @param string $data      content\r
-     */\r
-    public function __construct($parser, $data)\r
-    {\r
-        $this->parser = $parser;\r
-        $this->data = $data;\r
-        $this->saved_block_nesting = $parser->block_nesting_level;\r
-    }\r
-\r
-    /**\r
-     * Return buffer content\r
-     *\r
-     * @return string  content\r
-     */\r
-    public function to_smarty_php()\r
-    {\r
-        return $this->data;\r
-    }\r
-\r
-    /**\r
-     * Return complied code that loads the evaluated outout of buffer content into a temporary variable\r
-     *\r
-     * @return string template code\r
-     */\r
-    public function assign_to_var()\r
-    {\r
-        $var = sprintf('$_tmp%d', ++$this->parser->prefix_number);\r
-        $this->parser->compiler->prefix_code[] = sprintf('<?php ob_start();?>%s<?php %s=ob_get_clean();?>', $this->data, $var);\r
-        return $var;\r
-    }\r
-\r
-}\r
-\r
-/**\r
- * Code fragment inside a tag.\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @ignore\r
- */\r
-class _smarty_code extends _smarty_parsetree {\r
-\r
-\r
-    /**\r
-     * Create parse tree buffer for code fragment\r
-     *\r
-     * @param object $parser    parser object\r
-     * @param string $data      content\r
-     */\r
-    public function __construct($parser, $data)\r
-    {\r
-        $this->parser = $parser;\r
-        $this->data = $data;\r
-    }\r
-\r
-    /**\r
-     * Return buffer content in parentheses\r
-     *\r
-     * @return string  content\r
-     */\r
-    public function to_smarty_php()\r
-    {\r
-        return sprintf("(%s)", $this->data);\r
-    }\r
-\r
-}\r
-\r
-/**\r
- * Double quoted string inside a tag.\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @ignore\r
- */\r
-class _smarty_doublequoted extends _smarty_parsetree {\r
-\r
-    /**\r
-     * Create parse tree buffer for double quoted string subtrees\r
-     *\r
-     * @param object $parser    parser object\r
-     * @param _smarty_parsetree $subtree    parsetree buffer\r
-     */\r
-    public function __construct($parser, _smarty_parsetree $subtree)\r
-    {\r
-        $this->parser = $parser;\r
-        $this->subtrees[] = $subtree;\r
-        if ($subtree instanceof _smarty_tag) {\r
-            $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Append buffer to subtree\r
-     *\r
-     * @param _smarty_parsetree $subtree  parsetree buffer\r
-     */\r
-    public function append_subtree(_smarty_parsetree $subtree)\r
-    {\r
-        $last_subtree = count($this->subtrees) - 1;\r
-        if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) {\r
-            if ($subtree instanceof _smarty_code) {\r
-                $this->subtrees[$last_subtree]->data .= '<?php echo ' . $subtree->data . ';?>';\r
-            } elseif ($subtree instanceof _smarty_dq_content) {\r
-                $this->subtrees[$last_subtree]->data .= '<?php echo "' . $subtree->data . '";?>';\r
-            } else {\r
-                $this->subtrees[$last_subtree]->data .= $subtree->data;\r
-            }\r
-        } else {\r
-            $this->subtrees[] = $subtree;\r
-        }\r
-        if ($subtree instanceof _smarty_tag) {\r
-            $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Merge subtree buffer content together\r
-     *\r
-     * @return string  compiled template code\r
-     */\r
-    public function to_smarty_php()\r
-    {\r
-        $code = '';\r
-        foreach ($this->subtrees as $subtree) {\r
-            if ($code !== "") {\r
-                $code .= ".";\r
-            }\r
-            if ($subtree instanceof _smarty_tag) {\r
-                $more_php = $subtree->assign_to_var();\r
-            } else {\r
-                $more_php = $subtree->to_smarty_php();\r
-            }\r
-\r
-            $code .= $more_php;\r
-\r
-            if (!$subtree instanceof _smarty_dq_content) {\r
-                $this->parser->compiler->has_variable_string = true;\r
-            }\r
-        }\r
-        return $code;\r
-    }\r
-\r
-}\r
-\r
-/**\r
- * Raw chars as part of a double quoted string.\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @ignore\r
- */\r
-class _smarty_dq_content extends _smarty_parsetree {\r
-\r
-\r
-    /**\r
-     * Create parse tree buffer with string content\r
-     *\r
-     * @param object $parser  parser object\r
-     * @param string $data    string section\r
-     */\r
-    public function __construct($parser, $data)\r
-    {\r
-        $this->parser = $parser;\r
-        $this->data = $data;\r
-    }\r
-\r
-    /**\r
-     * Return content as double quoted string\r
-     *\r
-     * @return string doubled quoted string\r
-     */\r
-    public function to_smarty_php()\r
-    {\r
-        return '"' . $this->data . '"';\r
-    }\r
-\r
-}\r
-\r
-/**\r
- * Template element\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @ignore\r
- */\r
-class _smarty_template_buffer extends _smarty_parsetree {\r
-\r
-    /**\r
-     * Array of template elements\r
-     *\r
-     * @var array\r
-     */\r
-    public $subtrees = Array();\r
-\r
-    /**\r
-     * Create root of parse tree for template elements\r
-     *\r
-     * @param object $parser    parse object\r
-     */\r
-    public function __construct($parser)\r
-    {\r
-        $this->parser = $parser;\r
-    }\r
-\r
-    /**\r
-     * Append buffer to subtree\r
-     *\r
-     * @param _smarty_parsetree $subtree\r
-     */\r
-    public function append_subtree(_smarty_parsetree $subtree)\r
-    {\r
-        $this->subtrees[] = $subtree;\r
-    }\r
-\r
-    /**\r
-     * Sanitize and merge subtree buffers together\r
-     *\r
-     * @return string template code content\r
-     */\r
-    public function to_smarty_php()\r
-    {\r
-        $code = '';\r
-        for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) {\r
-            if ($key + 2 < $cnt) {\r
-                if ($this->subtrees[$key] instanceof _smarty_linebreak && $this->subtrees[$key + 1] instanceof _smarty_tag && $this->subtrees[$key + 1]->data == '' && $this->subtrees[$key + 2] instanceof _smarty_linebreak) {\r
-                    $key = $key + 1;\r
-                    continue;\r
-                }\r
-                if (substr($this->subtrees[$key]->data, -1) == '<' && $this->subtrees[$key + 1]->data == '' && substr($this->subtrees[$key + 2]->data, -1) == '?') {\r
-                    $key = $key + 2;\r
-                    continue;\r
-                }\r
-            }\r
-            if (substr($code, -1) == '<') {\r
-                $subtree = $this->subtrees[$key]->to_smarty_php();\r
-                if (substr($subtree, 0, 1) == '?') {\r
-                    $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>?' . substr($subtree, 1);\r
-                } elseif ($this->parser->asp_tags && substr($subtree, 0, 1) == '%') {\r
-                    $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>%' . substr($subtree, 1);\r
-                } else {\r
-                    $code .= $subtree;\r
-                }\r
-                continue;\r
-            }\r
-            if ($this->parser->asp_tags && substr($code, -1) == '%') {\r
-                $subtree = $this->subtrees[$key]->to_smarty_php();\r
-                if (substr($subtree, 0, 1) == '>') {\r
-                    $code = substr($code, 0, strlen($code) - 1) . '%<?php ?>>' . substr($subtree, 1);\r
-                } else {\r
-                    $code .= $subtree;\r
-                }\r
-                continue;\r
-            }\r
-            if (substr($code, -1) == '?') {\r
-                $subtree = $this->subtrees[$key]->to_smarty_php();\r
-                if (substr($subtree, 0, 1) == '>') {\r
-                    $code = substr($code, 0, strlen($code) - 1) . '?<?php ?>>' . substr($subtree, 1);\r
-                } else {\r
-                    $code .= $subtree;\r
-                }\r
-                continue;\r
-            }\r
-            $code .= $this->subtrees[$key]->to_smarty_php();\r
-        }\r
-        return $code;\r
-    }\r
-\r
-}\r
-\r
-/**\r
- * template text\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @ignore\r
- */\r
-class _smarty_text extends _smarty_parsetree {\r
-\r
-\r
-    /**\r
-     * Create template text buffer\r
-     *\r
-     * @param object $parser    parser object\r
-     * @param string $data      text\r
-     */\r
-    public function __construct($parser, $data)\r
-    {\r
-        $this->parser = $parser;\r
-        $this->data = $data;\r
-    }\r
-\r
-    /**\r
-     * Return buffer content\r
-     *\r
-     * @return strint text\r
-     */\r
-    public function to_smarty_php()\r
-    {\r
-        return $this->data;\r
-    }\r
-\r
-}\r
-\r
-/**\r
- * template linebreaks\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @ignore\r
- */\r
-class _smarty_linebreak extends _smarty_parsetree {\r
-\r
-    /**\r
-     * Create buffer with linebreak content\r
-     *\r
-     * @param object $parser    parser object\r
-     * @param string  $data     linebreak string\r
-     */\r
-    public function __construct($parser, $data)\r
-    {\r
-        $this->parser = $parser;\r
-        $this->data = $data;\r
-    }\r
-\r
-    /**\r
-     * Return linebrak\r
-     *\r
-     * @return string linebreak\r
-     */\r
-    public function to_smarty_php()\r
-    {\r
-        return $this->data;\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Templateparser Parsetrees
+ * These are classes to build parsetrees in the template parser
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Thue Kristensen
+ * @author     Uwe Tews
+ */
+
+/**
+ * @package    Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+abstract class _smarty_parsetree
+{
+    /**
+     * Parser object
+     *
+     * @var object
+     */
+    public $parser;
+    /**
+     * Buffer content
+     *
+     * @var mixed
+     */
+    public $data;
+
+    /**
+     * Subtree array
+     *
+     * @var array
+     */
+    public $subtrees = array();
+
+    /**
+     * Return buffer
+     *
+     * @return string buffer content
+     */
+    abstract public function to_smarty_php();
+}
+
+/**
+ * A complete smarty tag.
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_tag extends _smarty_parsetree
+{
+    /**
+     * Saved block nesting level
+     *
+     * @var int
+     */
+    public $saved_block_nesting;
+
+    /**
+     * Create parse tree buffer for Smarty tag
+     *
+     * @param object $parser parser object
+     * @param string $data   content
+     */
+    public function __construct($parser, $data)
+    {
+        $this->parser = $parser;
+        $this->data = $data;
+        $this->saved_block_nesting = $parser->block_nesting_level;
+    }
+
+    /**
+     * Return buffer content
+     *
+     * @return string content
+     */
+    public function to_smarty_php()
+    {
+        return $this->data;
+    }
+
+    /**
+     * Return complied code that loads the evaluated output of buffer content into a temporary variable
+     *
+     * @return string template code
+     */
+    public function assign_to_var()
+    {
+        $var = sprintf('$_tmp%d', ++Smarty_Internal_Templateparser::$prefix_number);
+        $this->parser->compiler->prefix_code[] = sprintf('<?php ob_start();?>%s<?php %s=ob_get_clean();?>', $this->data, $var);
+
+        return $var;
+    }
+}
+
+/**
+ * Code fragment inside a tag.
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_code extends _smarty_parsetree
+{
+    /**
+     * Create parse tree buffer for code fragment
+     *
+     * @param object $parser parser object
+     * @param string $data   content
+     */
+    public function __construct($parser, $data)
+    {
+        $this->parser = $parser;
+        $this->data = $data;
+    }
+
+    /**
+     * Return buffer content in parentheses
+     *
+     * @return string content
+     */
+    public function to_smarty_php()
+    {
+        return sprintf("(%s)", $this->data);
+    }
+}
+
+/**
+ * Double quoted string inside a tag.
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_doublequoted extends _smarty_parsetree
+{
+    /**
+     * Create parse tree buffer for double quoted string subtrees
+     *
+     * @param object            $parser  parser object
+     * @param _smarty_parsetree $subtree parsetree buffer
+     */
+    public function __construct($parser, _smarty_parsetree $subtree)
+    {
+        $this->parser = $parser;
+        $this->subtrees[] = $subtree;
+        if ($subtree instanceof _smarty_tag) {
+            $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
+        }
+    }
+
+    /**
+     * Append buffer to subtree
+     *
+     * @param _smarty_parsetree $subtree parsetree buffer
+     */
+    public function append_subtree(_smarty_parsetree $subtree)
+    {
+        $last_subtree = count($this->subtrees) - 1;
+        if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) {
+            if ($subtree instanceof _smarty_code) {
+                $this->subtrees[$last_subtree]->data .= '<?php echo ' . $subtree->data . ';?>';
+            } elseif ($subtree instanceof _smarty_dq_content) {
+                $this->subtrees[$last_subtree]->data .= '<?php echo "' . $subtree->data . '";?>';
+            } else {
+                $this->subtrees[$last_subtree]->data .= $subtree->data;
+            }
+        } else {
+            $this->subtrees[] = $subtree;
+        }
+        if ($subtree instanceof _smarty_tag) {
+            $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);
+        }
+    }
+
+    /**
+     * Merge subtree buffer content together
+     *
+     * @return string compiled template code
+     */
+    public function to_smarty_php()
+    {
+        $code = '';
+        foreach ($this->subtrees as $subtree) {
+            if ($code !== "") {
+                $code .= ".";
+            }
+            if ($subtree instanceof _smarty_tag) {
+                $more_php = $subtree->assign_to_var();
+            } else {
+                $more_php = $subtree->to_smarty_php();
+            }
+
+            $code .= $more_php;
+
+            if (!$subtree instanceof _smarty_dq_content) {
+                $this->parser->compiler->has_variable_string = true;
+            }
+        }
+
+        return $code;
+    }
+}
+
+/**
+ * Raw chars as part of a double quoted string.
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_dq_content extends _smarty_parsetree
+{
+    /**
+     * Create parse tree buffer with string content
+     *
+     * @param object $parser parser object
+     * @param string $data   string section
+     */
+    public function __construct($parser, $data)
+    {
+        $this->parser = $parser;
+        $this->data = $data;
+    }
+
+    /**
+     * Return content as double quoted string
+     *
+     * @return string doubled quoted string
+     */
+    public function to_smarty_php()
+    {
+        return '"' . $this->data . '"';
+    }
+}
+
+/**
+ * Template element
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_template_buffer extends _smarty_parsetree
+{
+    /**
+     * Array of template elements
+     *
+     * @var array
+     */
+    public $subtrees = Array();
+
+    /**
+     * Create root of parse tree for template elements
+     *
+     * @param object $parser parse object
+     */
+    public function __construct($parser)
+    {
+        $this->parser = $parser;
+    }
+
+    /**
+     * Append buffer to subtree
+     *
+     * @param _smarty_parsetree $subtree
+     */
+    public function append_subtree(_smarty_parsetree $subtree)
+    {
+        $this->subtrees[] = $subtree;
+    }
+
+    /**
+     * Sanitize and merge subtree buffers together
+     *
+     * @return string template code content
+     */
+    public function to_smarty_php()
+    {
+        $code = '';
+        for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key ++) {
+            if ($key + 2 < $cnt) {
+                if ($this->subtrees[$key] instanceof _smarty_linebreak && $this->subtrees[$key + 1] instanceof _smarty_tag && $this->subtrees[$key + 1]->data == '' && $this->subtrees[$key + 2] instanceof _smarty_linebreak) {
+                    $key = $key + 1;
+                    continue;
+                }
+                if (substr($this->subtrees[$key]->data, - 1) == '<' && $this->subtrees[$key + 1]->data == '' && substr($this->subtrees[$key + 2]->data, - 1) == '?') {
+                    $key = $key + 2;
+                    continue;
+                }
+            }
+            if (substr($code, - 1) == '<') {
+                $subtree = $this->subtrees[$key]->to_smarty_php();
+                if (substr($subtree, 0, 1) == '?') {
+                    $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>?' . substr($subtree, 1);
+                } elseif ($this->parser->asp_tags && substr($subtree, 0, 1) == '%') {
+                    $code = substr($code, 0, strlen($code) - 1) . '<<?php ?>%' . substr($subtree, 1);
+                } else {
+                    $code .= $subtree;
+                }
+                continue;
+            }
+            if ($this->parser->asp_tags && substr($code, - 1) == '%') {
+                $subtree = $this->subtrees[$key]->to_smarty_php();
+                if (substr($subtree, 0, 1) == '>') {
+                    $code = substr($code, 0, strlen($code) - 1) . '%<?php ?>>' . substr($subtree, 1);
+                } else {
+                    $code .= $subtree;
+                }
+                continue;
+            }
+            if (substr($code, - 1) == '?') {
+                $subtree = $this->subtrees[$key]->to_smarty_php();
+                if (substr($subtree, 0, 1) == '>') {
+                    $code = substr($code, 0, strlen($code) - 1) . '?<?php ?>>' . substr($subtree, 1);
+                } else {
+                    $code .= $subtree;
+                }
+                continue;
+            }
+            $code .= $this->subtrees[$key]->to_smarty_php();
+        }
+
+        return $code;
+    }
+}
+
+/**
+ * template text
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_text extends _smarty_parsetree
+{
+    /**
+     * Create template text buffer
+     *
+     * @param object $parser parser object
+     * @param string $data   text
+     */
+    public function __construct($parser, $data)
+    {
+        $this->parser = $parser;
+        $this->data = $data;
+    }
+
+    /**
+     * Return buffer content
+     *
+     * @return strint text
+     */
+    public function to_smarty_php()
+    {
+        return $this->data;
+    }
+}
+
+/**
+ * template linebreaks
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @ignore
+ */
+class _smarty_linebreak extends _smarty_parsetree
+{
+    /**
+     * Create buffer with linebreak content
+     *
+     * @param object $parser parser object
+     * @param string $data   linebreak string
+     */
+    public function __construct($parser, $data)
+    {
+        $this->parser = $parser;
+        $this->data = $data;
+    }
+
+    /**
+     * Return linebrak
+     *
+     * @return string linebreak
+     */
+    public function to_smarty_php()
+    {
+        return $this->data;
+    }
+}
index cf2ec3e1cc5b9264d6dc621d291be97658652a43..1c64b7cf55277377a0ed25d9d6b506175cf16b38 100644 (file)
@@ -1,94 +1,96 @@
-<?php\r
-/**\r
- * Smarty Internal Plugin Resource Eval\r
- *\r
- * @package Smarty\r
- * @subpackage TemplateResources\r
- * @author Uwe Tews\r
- * @author Rodney Rehm\r
- */\r
-\r
-/**\r
- * Smarty Internal Plugin Resource Eval\r
- *\r
- * Implements the strings as resource for Smarty template\r
- *\r
- * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}}\r
- *\r
- * @package Smarty\r
- * @subpackage TemplateResources\r
- */\r
-class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled {\r
-\r
-    /**\r
-     * populate Source Object with meta data from Resource\r
-     *\r
-     * @param Smarty_Template_Source   $source    source object\r
-     * @param Smarty_Internal_Template $_template template object\r
-     * @return void\r
-     */\r
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)\r
-    {\r
-        $source->uid = $source->filepath = sha1($source->name);\r
-        $source->timestamp = false;\r
-        $source->exists = true;\r
-    }\r
-\r
-    /**\r
-     * Load template's source from $resource_name into current template object\r
-     *\r
-     * @uses decode() to decode base64 and urlencoded template_resources\r
-     * @param Smarty_Template_Source $source source object\r
-     * @return string template source\r
-     */\r
-    public function getContent(Smarty_Template_Source $source)\r
-    {\r
-        return $this->decode($source->name);\r
-    }\r
-    \r
-    /**\r
-     * decode base64 and urlencode\r
-     *\r
-     * @param string $string template_resource to decode\r
-     * @return string decoded template_resource\r
-     */\r
-    protected function decode($string)\r
-    {\r
-        // decode if specified\r
-        if (($pos = strpos($string, ':')) !== false) {\r
-            if (!strncmp($string, 'base64', 6)) {\r
-                return base64_decode(substr($string, 7));\r
-            } elseif (!strncmp($string, 'urlencode', 9)) {\r
-                return urldecode(substr($string, 10));\r
-            }\r
-        }\r
-        \r
-        return $string;\r
-    }\r
-    \r
-    /**\r
-     * modify resource_name according to resource handlers specifications\r
-     *\r
-     * @param Smarty $smarty        Smarty instance\r
-     * @param string $resource_name resource_name to make unique\r
-     * @return string unique resource name\r
-     */\r
-    protected function buildUniqueResourceName(Smarty $smarty, $resource_name)\r
-    {\r
-        return get_class($this) . '#' .$this->decode($resource_name);\r
-    }\r
-\r
-    /**\r
-     * Determine basename for compiled filename\r
-     *\r
-     * @param Smarty_Template_Source $source source object\r
-     * @return string resource's basename\r
-     */\r
-    protected function getBasename(Smarty_Template_Source $source)\r
-    {\r
-        return '';\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+/**
+ * Smarty Internal Plugin Resource Eval
+ *
+ * @package    Smarty
+ * @subpackage TemplateResources
+ * @author     Uwe Tews
+ * @author     Rodney Rehm
+ */
+
+/**
+ * Smarty Internal Plugin Resource Eval
+ * Implements the strings as resource for Smarty template
+ * {@internal unlike string-resources the compiled state of eval-resources is NOT saved for subsequent access}}
+ *
+ * @package    Smarty
+ * @subpackage TemplateResources
+ */
+class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled
+{
+    /**
+     * populate Source Object with meta data from Resource
+     *
+     * @param  Smarty_Template_Source   $source    source object
+     * @param  Smarty_Internal_Template $_template template object
+     *
+     * @return void
+     */
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
+    {
+        $source->uid = $source->filepath = sha1($source->name);
+        $source->timestamp = false;
+        $source->exists = true;
+    }
+
+    /**
+     * Load template's source from $resource_name into current template object
+     *
+     * @uses decode() to decode base64 and urlencoded template_resources
+     *
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 template source
+     */
+    public function getContent(Smarty_Template_Source $source)
+    {
+        return $this->decode($source->name);
+    }
+
+    /**
+     * decode base64 and urlencode
+     *
+     * @param  string $string template_resource to decode
+     *
+     * @return string decoded template_resource
+     */
+    protected function decode($string)
+    {
+        // decode if specified
+        if (($pos = strpos($string, ':')) !== false) {
+            if (!strncmp($string, 'base64', 6)) {
+                return base64_decode(substr($string, 7));
+            } elseif (!strncmp($string, 'urlencode', 9)) {
+                return urldecode(substr($string, 10));
+            }
+        }
+
+        return $string;
+    }
+
+    /**
+     * modify resource_name according to resource handlers specifications
+     *
+     * @param  Smarty  $smarty        Smarty instance
+     * @param  string  $resource_name resource_name to make unique
+     * @param  boolean $is_config     flag for config resource
+     *
+     * @return string unique resource name
+     */
+    protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
+    {
+        return get_class($this) . '#' . $this->decode($resource_name);
+    }
+
+    /**
+     * Determine basename for compiled filename
+     *
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 resource's basename
+     */
+    protected function getBasename(Smarty_Template_Source $source)
+    {
+        return '';
+    }
+}
index 9481d9922e1e51b25c6252ac82dc1c59ab4743dc..2079f2bc67be2b8e5573032872de3e8f0bb1ad94 100644 (file)
@@ -1,37 +1,38 @@
 <?php
 /**
-* Smarty Internal Plugin Resource Extends
-*
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews
-* @author Rodney Rehm
-*/
+ * Smarty Internal Plugin Resource Extends
+ *
+ * @package    Smarty
+ * @subpackage TemplateResources
+ * @author     Uwe Tews
+ * @author     Rodney Rehm
+ */
 
 /**
-* Smarty Internal Plugin Resource Extends
-*
-* Implements the file system as resource for Smarty which {extend}s a chain of template files templates
-*
-* @package Smarty
-* @subpackage TemplateResources
-*/
-class Smarty_Internal_Resource_Extends extends Smarty_Resource {
-
+ * Smarty Internal Plugin Resource Extends
+ * Implements the file system as resource for Smarty which {extend}s a chain of template files templates
+ *
+ * @package    Smarty
+ * @subpackage TemplateResources
+ */
+class Smarty_Internal_Resource_Extends extends Smarty_Resource
+{
     /**
-    * mbstring.overload flag
-    *
-    * @var int
-    */
+     * mbstring.overload flag
+     *
+     * @var int
+     */
     public $mbstring_overload = 0;
 
     /**
-    * populate Source Object with meta data from Resource
-    *
-    * @param Smarty_Template_Source   $source    source object
-    * @param Smarty_Internal_Template $_template template object
-    */
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+     * populate Source Object with meta data from Resource
+     *
+     * @param Smarty_Template_Source   $source    source object
+     * @param Smarty_Internal_Template $_template template object
+     *
+     * @throws SmartyException
+     */
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
         $uid = '';
         $sources = array();
@@ -50,7 +51,7 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource {
         }
         $source->components = $sources;
         $source->filepath = $s->filepath;
-        $source->uid = sha1($uid);
+        $source->uid = sha1(realpath($uid));
         if ($_template && $_template->smarty->compile_check) {
             $source->timestamp = $s->timestamp;
             $source->exists = $exists;
@@ -60,10 +61,10 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource {
     }
 
     /**
-    * populate Source Object with timestamp and exists from Resource
-    *
-    * @param Smarty_Template_Source $source source object
-    */
+     * populate Source Object with timestamp and exists from Resource
+     *
+     * @param Smarty_Template_Source $source source object
+     */
     public function populateTimestamp(Smarty_Template_Source $source)
     {
         $source->exists = true;
@@ -74,84 +75,38 @@ class Smarty_Internal_Resource_Extends extends Smarty_Resource {
     }
 
     /**
-    * Load template's source from files into current template object
-    *
-    * @param Smarty_Template_Source $source source object
-    * @return string template source
-    * @throws SmartyException if source cannot be loaded
-    */
+     * Load template's source from files into current template object
+     *
+     * @param Smarty_Template_Source $source source object
+     *
+     * @return string template source
+     * @throws SmartyException if source cannot be loaded
+     */
     public function getContent(Smarty_Template_Source $source)
     {
         if (!$source->exists) {
             throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
         }
 
-        $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
-        $_rdl = preg_quote($source->smarty->right_delimiter);
-        $_ldl = preg_quote($source->smarty->left_delimiter);
         $_components = array_reverse($source->components);
-        $_first = reset($_components);
-        $_last = end($_components);
 
+        $_content = '';
         foreach ($_components as $_component) {
-            // register dependency
-            if ($_component != $_first) {
-                $source->template->properties['file_dependency'][$_component->uid] = array($_component->filepath, $_component->timestamp, $_component->type);
-            }
-
             // read content
-            $source->filepath = $_component->filepath;
-            $_content = $_component->content;
-
-            // extend sources
-            if ($_component != $_last) {
-                if (preg_match_all("!({$_ldl}block\s(.+?){$_rdl})!", $_content, $_open) !=
-                preg_match_all("!({$_ldl}/block{$_rdl})!", $_content, $_close)) {
-                    throw new SmartyException("unmatched {block} {/block} pairs in template {$_component->type} '{$_component->name}'");
-                }
-                preg_match_all("!{$_ldl}block\s(.+?){$_rdl}|{$_ldl}/block{$_rdl}|{$_ldl}\*([\S\s]*?)\*{$_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
-                $_result_count = count($_result[0]);
-                $_start = 0;
-                while ($_start+1 < $_result_count) {
-                    $_end = 0;
-                    $_level = 1;
-                    if (($this->mbstring_overload ? mb_substr($_result[0][$_start][0],0,mb_strlen($source->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start][0],0,strlen($source->smarty->left_delimiter)+1)) == $source->smarty->left_delimiter.'*') {
-                        $_start++;
-                        continue;
-                    }
-                    while ($_level != 0) {
-                        $_end++;
-                        if (($this->mbstring_overload ? mb_substr($_result[0][$_start + $_end][0],0,mb_strlen($source->smarty->left_delimiter,'latin1')+1, 'latin1') : substr($_result[0][$_start + $_end][0],0,strlen($source->smarty->left_delimiter)+1)) == $source->smarty->left_delimiter.'*') {
-                            continue;
-                        }
-                        if (!strpos($_result[0][$_start + $_end][0], '/')) {
-                            $_level++;
-                        } else {
-                            $_level--;
-                        }
-                    }
-                    $_block_content = str_replace($source->smarty->left_delimiter . '$smarty.block.parent' . $source->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
-                    ($this->mbstring_overload ? mb_substr($_content, $_result[0][$_start][1] + mb_strlen($_result[0][$_start][0], 'latin1'), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + mb_strlen($_result[0][$_start][0], 'latin1'), 'latin1') : substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0]))));
-                    Smarty_Internal_Compile_Block::saveBlockData($_block_content, $_result[0][$_start][0], $source->template, $_component->filepath);
-                    $_start = $_start + $_end + 1;
-                }
-            } else {
-                return $_content;
-            }
+            $_content .= $_component->content;
         }
+        return $_content;
     }
 
     /**
-    * Determine basename for compiled filename
-    *
-    * @param Smarty_Template_Source $source source object
-    * @return string resource's basename
-    */
+     * Determine basename for compiled filename
+     *
+     * @param Smarty_Template_Source $source source object
+     *
+     * @return string resource's basename
+     */
     public function getBasename(Smarty_Template_Source $source)
     {
         return str_replace(':', '.', basename($source->filepath));
     }
-
 }
-
-?>
\ No newline at end of file
index 48b391d20eae76cb65b922db98e44310d5d55a8a..0abdc44954b7b938f00744171d89017f110060d5 100644 (file)
@@ -2,29 +2,28 @@
 /**
  * Smarty Internal Plugin Resource File
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author     Uwe Tews
+ * @author     Rodney Rehm
  */
 
 /**
  * Smarty Internal Plugin Resource File
- *
  * Implements the file system as resource for Smarty templates
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
  */
-class Smarty_Internal_Resource_File extends Smarty_Resource {
-
+class Smarty_Internal_Resource_File extends Smarty_Resource
+{
     /**
      * populate Source Object with meta data from Resource
      *
      * @param Smarty_Template_Source   $source    source object
      * @param Smarty_Internal_Template $_template template object
      */
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
         $source->filepath = $this->buildFilepath($source, $_template);
 
@@ -33,7 +32,7 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
                 $source->smarty->security_policy->isTrustedResourceDir($source->filepath);
             }
 
-            $source->uid = sha1($source->filepath);
+            $source->uid = sha1(realpath($source->filepath));
             if ($source->smarty->compile_check && !isset($source->timestamp)) {
                 $source->timestamp = @filemtime($source->filepath);
                 $source->exists = !!$source->timestamp;
@@ -55,9 +54,10 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
     /**
      * Load template's source from file into current template object
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string template source
-     * @throws SmartyException if source cannot be loaded
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 template source
+     * @throws SmartyException        if source cannot be loaded
      */
     public function getContent(Smarty_Template_Source $source)
     {
@@ -73,8 +73,9 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
     /**
      * Determine basename for compiled filename
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string resource's basename
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 resource's basename
      */
     public function getBasename(Smarty_Template_Source $source)
     {
@@ -82,9 +83,7 @@ class Smarty_Internal_Resource_File extends Smarty_Resource {
         if (($_pos = strpos($_file, ']')) !== false) {
             $_file = substr($_file, $_pos + 1);
         }
+
         return basename($_file);
     }
-
 }
-
-?>
\ No newline at end of file
index 7cd8baeecb68511d72487f59c4fa758ce3eea7d6..7463c2960b7fe07194a2e595d42ce8996a135ed2 100644 (file)
@@ -2,38 +2,40 @@
 
 /**
  * Smarty Internal Plugin Resource PHP
- *
  * Implements the file system as resource for PHP templates
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author     Uwe Tews
+ * @author     Rodney Rehm
  */
-class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
+class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled
+{
     /**
      * container for short_open_tag directive's value before executing PHP templates
+     *
      * @var string
      */
     protected $short_open_tag;
 
     /**
      * Create a new PHP Resource
-     *
+
      */
     public function __construct()
     {
-        $this->short_open_tag = ini_get( 'short_open_tag' );
+        $this->short_open_tag = ini_get('short_open_tag');
     }
 
     /**
      * populate Source Object with meta data from Resource
      *
-     * @param Smarty_Template_Source $source source object
-     * @param Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Source   $source    source object
+     * @param  Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
         $source->filepath = $this->buildFilepath($source, $_template);
 
@@ -53,7 +55,8 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
     /**
      * populate Source Object with timestamp and exists from Resource
      *
-     * @param Smarty_Template_Source $source source object
+     * @param  Smarty_Template_Source $source source object
+     *
      * @return void
      */
     public function populateTimestamp(Smarty_Template_Source $source)
@@ -65,9 +68,10 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
     /**
      * Load template's source from file into current template object
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string template source
-     * @throws SmartyException if source cannot be loaded
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 template source
+     * @throws SmartyException        if source cannot be loaded
      */
     public function getContent(Smarty_Template_Source $source)
     {
@@ -80,15 +84,14 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
     /**
      * Render and output the template (without using the compiler)
      *
-     * @param Smarty_Template_Source $source source object
-     * @param Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Source   $source    source object
+     * @param  Smarty_Internal_Template $_template template object
+     *
      * @return void
-     * @throws SmartyException if template cannot be loaded or allow_php_templates is disabled
+     * @throws SmartyException          if template cannot be loaded or allow_php_templates is disabled
      */
     public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template)
     {
-        $_smarty_template = $_template;
-
         if (!$source->smarty->allow_php_templates) {
             throw new SmartyException("PHP templates are disabled");
         }
@@ -105,10 +108,12 @@ class Smarty_Internal_Resource_PHP extends Smarty_Resource_Uncompiled {
         extract($_template->getTemplateVars());
 
         // include PHP template with short open tags enabled
-        ini_set( 'short_open_tag', '1' );
+        ini_set('short_open_tag', '1');
+        /** @var Smarty_Internal_Template $_smarty_template
+         * used in included file
+         */
+        $_smarty_template = $_template;
         include($source->filepath);
-        ini_set( 'short_open_tag', $this->short_open_tag );
+        ini_set('short_open_tag', $this->short_open_tag);
     }
 }
-
-?>
\ No newline at end of file
index 44497b9226c2dbb29850406c2cba21ea45529434..f12d843e1735ab392e812f2a9d352875f08651ae 100644 (file)
@@ -2,31 +2,31 @@
 /**
  * Smarty Internal Plugin Resource Registered
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author     Uwe Tews
+ * @author     Rodney Rehm
  */
 
 /**
  * Smarty Internal Plugin Resource Registered
- *
  * Implements the registered resource for Smarty template
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
  * @deprecated
  */
-class Smarty_Internal_Resource_Registered extends Smarty_Resource {
-
+class Smarty_Internal_Resource_Registered extends Smarty_Resource
+{
     /**
      * populate Source Object with meta data from Resource
      *
-     * @param Smarty_Template_Source   $source    source object
-     * @param Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Source   $source    source object
+     * @param  Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
         $source->filepath = $source->type . ':' . $source->name;
         $source->uid = sha1($source->filepath);
@@ -39,7 +39,8 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
     /**
      * populate Source Object with timestamp and exists from Resource
      *
-     * @param Smarty_Template_Source $source source object
+     * @param  Smarty_Template_Source $source source object
+     *
      * @return void
      */
     public function populateTimestamp(Smarty_Template_Source $source)
@@ -51,23 +52,26 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
     /**
      * Get timestamp (epoch) the template source was modified
      *
-     * @param Smarty_Template_Source $source source object
-     * @return integer|boolean timestamp (epoch) the template was modified, false if resources has no timestamp
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return integer|boolean        timestamp (epoch) the template was modified, false if resources has no timestamp
      */
     public function getTemplateTimestamp(Smarty_Template_Source $source)
     {
         // return timestamp
         $time_stamp = false;
         call_user_func_array($source->smarty->registered_resources[$source->type][0][1], array($source->name, &$time_stamp, $source->smarty));
+
         return is_numeric($time_stamp) ? (int) $time_stamp : $time_stamp;
     }
 
     /**
      * Load template's source by invoking the registered callback into current template object
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string template source
-     * @throws SmartyException if source cannot be loaded
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 template source
+     * @throws SmartyException        if source cannot be loaded
      */
     public function getContent(Smarty_Template_Source $source)
     {
@@ -76,20 +80,19 @@ class Smarty_Internal_Resource_Registered extends Smarty_Resource {
         if (is_bool($t) && !$t) {
             throw new SmartyException("Unable to read template {$source->type} '{$source->name}'");
         }
+
         return $source->content;
     }
 
     /**
      * Determine basename for compiled filename
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string resource's basename
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 resource's basename
      */
     protected function getBasename(Smarty_Template_Source $source)
     {
         return basename($source->name);
     }
-
 }
-
-?>
\ No newline at end of file
index 85698c23287b911d8fe36350f84ef49e8a1de14b..f7d1aac31298fc533d94536aa1d9af6d0e07643c 100644 (file)
@@ -1,36 +1,39 @@
 <?php
 /**
  * Smarty Internal Plugin Resource Stream
- *
  * Implements the streams as resource for Smarty template
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author     Uwe Tews
+ * @author     Rodney Rehm
  */
 
 /**
  * Smarty Internal Plugin Resource Stream
- *
  * Implements the streams as resource for Smarty template
  *
- * @link http://php.net/streams
- * @package Smarty
+ * @link       http://php.net/streams
+ * @package    Smarty
  * @subpackage TemplateResources
  */
-class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
-
+class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled
+{
     /**
      * populate Source Object with meta data from Resource
      *
      * @param Smarty_Template_Source   $source    source object
      * @param Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
-        $source->filepath = str_replace(':', '://', $source->resource);
+        if (strpos($source->resource, '://') !== false) {
+            $source->filepath = $source->resource;
+        } else {
+            $source->filepath = str_replace(':', '://', $source->resource);
+        }
         $source->uid = false;
         $source->content = $this->getContent($source);
         $source->timestamp = false;
@@ -41,6 +44,7 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
      * Load template's source from stream into current template object
      *
      * @param Smarty_Template_Source $source source object
+     *
      * @return string template source
      * @throws SmartyException if source cannot be loaded
      */
@@ -54,23 +58,24 @@ class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled {
                 $t .= $current_line;
             }
             fclose($fp);
+
             return $t;
         } else {
             return false;
         }
     }
-    
+
     /**
      * modify resource_name according to resource handlers specifications
      *
-     * @param Smarty $smarty        Smarty instance
-     * @param string $resource_name resource_name to make unique
+     * @param Smarty   $smarty        Smarty instance
+     * @param string   $resource_name resource_name to make unique
+     * @param  boolean $is_config     flag for config resource
+     *
      * @return string unique resource name
      */
-    protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+    protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
     {
         return get_class($this) . '#' . $resource_name;
     }
 }
-
-?>
\ No newline at end of file
index 9571337b093d2896d87ab45aeb0c09a65aee3c58..bfa069974582489821b5db0fda4f80b12256a2a0 100644 (file)
@@ -2,32 +2,31 @@
 /**
  * Smarty Internal Plugin Resource String
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Uwe Tews
- * @author Rodney Rehm
+ * @author     Uwe Tews
+ * @author     Rodney Rehm
  */
 
 /**
  * Smarty Internal Plugin Resource String
- *
  * Implements the strings as resource for Smarty template
- *
  * {@internal unlike eval-resources the compiled state of string-resources is saved for subsequent access}}
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
  */
-class Smarty_Internal_Resource_String extends Smarty_Resource {
-
+class Smarty_Internal_Resource_String extends Smarty_Resource
+{
     /**
      * populate Source Object with meta data from Resource
      *
-     * @param Smarty_Template_Source   $source    source object
-     * @param Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Source   $source    source object
+     * @param  Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
         $source->uid = $source->filepath = sha1($source->name);
         $source->timestamp = 0;
@@ -38,18 +37,21 @@ class Smarty_Internal_Resource_String extends Smarty_Resource {
      * Load template's source from $resource_name into current template object
      *
      * @uses decode() to decode base64 and urlencoded template_resources
-     * @param Smarty_Template_Source $source source object
-     * @return string template source
+     *
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 template source
      */
     public function getContent(Smarty_Template_Source $source)
     {
         return $this->decode($source->name);
     }
-    
+
     /**
      * decode base64 and urlencode
      *
-     * @param string $string template_resource to decode
+     * @param  string $string template_resource to decode
+     *
      * @return string decoded template_resource
      */
     protected function decode($string)
@@ -62,35 +64,34 @@ class Smarty_Internal_Resource_String extends Smarty_Resource {
                 return urldecode(substr($string, 10));
             }
         }
-        
+
         return $string;
     }
-    
+
     /**
      * modify resource_name according to resource handlers specifications
      *
-     * @param Smarty $smarty        Smarty instance
-     * @param string $resource_name resource_name to make unique
+     * @param  Smarty  $smarty        Smarty instance
+     * @param  string  $resource_name resource_name to make unique
+     * @param  boolean $is_config     flag for config resource
+     *
      * @return string unique resource name
      */
-    protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+    protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
     {
-        return get_class($this) . '#' .$this->decode($resource_name);
+        return get_class($this) . '#' . $this->decode($resource_name);
     }
 
     /**
      * Determine basename for compiled filename
-     *
      * Always returns an empty string.
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string resource's basename
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 resource's basename
      */
     protected function getBasename(Smarty_Template_Source $source)
     {
         return '';
     }
-
 }
-
-?>
\ No newline at end of file
index 1ec1aa43058ffbc89cd1233c02332e6a87b609f2..50bd16ef2299c71d52196ed89d47c7b4756fee32 100644 (file)
@@ -1,27 +1,26 @@
 <?php
 /**
  * Smarty Internal Plugin Smarty Template Compiler Base
+ * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
  *
- * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser
- *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * @ignore
  */
-include ("smarty_internal_parsetree.php");
+include 'smarty_internal_parsetree.php';
 
 /**
  * Class SmartyTemplateCompiler
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Compiler
  */
-class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase {
-
+class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase
+{
     /**
      * Lexer class name
      *
@@ -81,10 +80,11 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
     }
 
     /**
-     * Methode to compile a Smarty template
+     * method to compile a Smarty template
      *
      * @param  mixed $_content template source
-     * @return bool true if compiling succeeded, false if it failed
+     *
+     * @return bool  true if compiling succeeded, false if it failed
      */
     protected function doCompile($_content)
     {
@@ -94,8 +94,21 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
         // init the lexer/parser to compile the template
         $this->lex = new $this->lexer_class($_content, $this);
         $this->parser = new $this->parser_class($this->lex, $this);
-        if ($this->smarty->_parserdebug)
+        if ($this->inheritance_child) {
+            // start state on child templates
+            $this->lex->yypushstate(Smarty_Internal_Templatelexer::CHILDBODY);
+        }
+        if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) {
+            $mbEncoding = mb_internal_encoding();
+            mb_internal_encoding('ASCII');
+        } else {
+            $mbEncoding = null;
+        }
+
+        if ($this->smarty->_parserdebug) {
             $this->parser->PrintTrace();
+            $this->lex->PrintTrace();
+        }
         // get tokens from lexer and parse them
         while ($this->lex->yylex() && !$this->abort_and_recompile) {
             if ($this->smarty->_parserdebug) {
@@ -111,17 +124,17 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
         }
         // finish parsing process
         $this->parser->doParse(0, 0);
+        if ($mbEncoding) {
+            mb_internal_encoding($mbEncoding);
+        }
         // check for unclosed tags
         if (count($this->_tag_stack) > 0) {
             // get stacked info
             list($openTag, $_data) = array_pop($this->_tag_stack);
-            $this->trigger_template_error("unclosed {" . $openTag . "} tag");
+            $this->trigger_template_error("unclosed {$this->smarty->left_delimiter}" . $openTag . "{$this->smarty->right_delimiter} tag");
         }
         // return compiled code
         // return str_replace(array("? >\n<?php","? ><?php"), array('',''), $this->parser->retvalue);
         return $this->parser->retvalue;
     }
-
 }
-
-?>
\ No newline at end of file
index de9d54cf640546c9e25bed9186471cdd49efbaf7..e905c1e450df8b8c5b9ce1f3f31e97b2aa7e9449 100644 (file)
@@ -1,28 +1,27 @@
 <?php
 /**
  * Smarty Internal Plugin Template
- *
  * This file contains the Smarty template engine
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Template
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
 
 /**
  * Main class with template data structures and methods
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Template
- *
  * @property Smarty_Template_Source   $source
  * @property Smarty_Template_Compiled $compiled
  * @property Smarty_Template_Cached   $cached
  */
-class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
-
+class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
+{
     /**
      * cache_id
+     *
      * @var string
      */
     public $cache_id = null;
@@ -33,95 +32,108 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
     public $compile_id = null;
     /**
      * caching enabled
+     *
      * @var boolean
      */
     public $caching = null;
     /**
      * cache lifetime in seconds
+     *
      * @var integer
      */
     public $cache_lifetime = null;
     /**
      * Template resource
+     *
      * @var string
      */
     public $template_resource = null;
     /**
      * flag if compiled template is invalid and must be (re)compiled
+     *
      * @var bool
      */
     public $mustCompile = null;
     /**
      * flag if template does contain nocache code sections
+     *
      * @var bool
      */
     public $has_nocache_code = false;
     /**
      * special compiled and cached template properties
+     *
      * @var array
      */
     public $properties = array('file_dependency' => array(),
-        'nocache_hash' => '',
-        'function' => array());
+                               'nocache_hash'    => '',
+                               'function'        => array());
     /**
      * required plugins
+     *
      * @var array
      */
     public $required_plugins = array('compiled' => array(), 'nocache' => array());
     /**
      * Global smarty instance
+     *
      * @var Smarty
      */
     public $smarty = null;
     /**
      * blocks for template inheritance
+     *
      * @var array
      */
     public $block_data = array();
     /**
      * variable filters
+     *
      * @var array
      */
     public $variable_filters = array();
     /**
      * optional log of tag/attributes
+     *
      * @var array
      */
     public $used_tags = array();
     /**
      * internal flag to allow relative path in child template blocks
+     *
      * @var bool
      */
     public $allow_relative_path = false;
     /**
      * internal capture runtime stack
+     *
      * @var array
      */
     public $_capture_stack = array(0 => array());
 
     /**
      * Create template data object
-     *
      * Some of the global Smarty settings copied to template scope
      * It load the required template resources and cacher plugins
      *
      * @param string                   $template_resource template resource string
      * @param Smarty                   $smarty            Smarty instance
      * @param Smarty_Internal_Template $_parent           back pointer to parent object with variables or null
-     * @param mixed                    $_cache_id cache   id or null
+     * @param mixed                    $_cache_id         cache   id or null
      * @param mixed                    $_compile_id       compile id or null
      * @param bool                     $_caching          use caching?
      * @param int                      $_cache_lifetime   cache life-time in seconds
      */
     public function __construct($template_resource, $smarty, $_parent = null, $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null)
     {
-        $this->smarty = &$smarty;
+        $this->smarty = & $smarty;
         // Smarty parameter
         $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id;
         $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id;
         $this->caching = $_caching === null ? $this->smarty->caching : $_caching;
-        if ($this->caching === true)
+        if ($this->caching === true) {
             $this->caching = Smarty::CACHING_LIFETIME_CURRENT;
+        }
         $this->cache_lifetime = $_cache_lifetime === null ? $this->smarty->cache_lifetime : $_cache_lifetime;
         $this->parent = $_parent;
         // Template resource
@@ -134,9 +146,9 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
 
     /**
      * Returns if the current template must be compiled by the Smarty compiler
-     *
      * It does compare the timestamps of template source and the compiled templates and checks the force compile configuration
      *
+     * @throws SmartyException
      * @return boolean true if the template must be compiled
      */
     public function mustCompile()
@@ -153,12 +165,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
             $this->mustCompile = (!$this->source->uncompiled && ($this->smarty->force_compile || $this->source->recompiled || $this->compiled->timestamp === false ||
                     ($this->smarty->compile_check && $this->compiled->timestamp < $this->source->timestamp)));
         }
+
         return $this->mustCompile;
     }
 
     /**
      * Compiles the template
-     *
      * If the template is not evaluated the compiled template is saved on disk
      */
     public function compileTemplateSource()
@@ -166,16 +178,14 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
         if (!$this->source->recompiled) {
             $this->properties['file_dependency'] = array();
             if ($this->source->components) {
+                // for the extends resource the compiler will fill it
                 // uses real resource for file dependency
-                $source = end($this->source->components);
-                $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $source->type);
+                // $source = end($this->source->components);
+                // $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $source->type);
             } else {
                 $this->properties['file_dependency'][$this->source->uid] = array($this->source->filepath, $this->source->timestamp, $this->source->type);
             }
         }
-        if ($this->smarty->debugging) {
-            Smarty_Internal_Debug::start_compile($this);
-        }
         // compile locking
         if ($this->smarty->compile_locking && !$this->source->recompiled) {
             if ($saved_timestamp = $this->compiled->timestamp) {
@@ -185,7 +195,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
         // call compiler
         try {
             $code = $this->compiler->compileTemplate($this);
-        } catch (Exception $e) {
+        }
+        catch (Exception $e) {
             // restore old timestamp in case of error
             if ($this->smarty->compile_locking && !$this->source->recompiled && $saved_timestamp) {
                 touch($this->compiled->filepath, $saved_timestamp);
@@ -196,15 +207,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
         if (!$this->source->recompiled && $this->compiler->write_compiled_code) {
             // write compiled template
             $_filepath = $this->compiled->filepath;
-            if ($_filepath === false)
+            if ($_filepath === false) {
                 throw new SmartyException('getCompiledFilepath() did not return a destination to save the compiled template to');
+            }
             Smarty_Internal_Write_File::writeFile($_filepath, $code, $this->smarty);
             $this->compiled->exists = true;
             $this->compiled->isCompiled = true;
         }
-        if ($this->smarty->debugging) {
-            Smarty_Internal_Debug::end_compile($this);
-        }
         // release compiler object to free memory
         unset($this->compiler);
     }
@@ -212,6 +221,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
     /**
      * Writes the cached template output
      *
+     * @param string $content
+     *
      * @return bool
      */
     public function writeCachedContent($content)
@@ -221,12 +232,16 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
             return false;
         }
         $this->properties['cache_lifetime'] = $this->cache_lifetime;
-        $this->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true));
+        $this->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
         $content = $this->createTemplateCodeFrame($content, true);
+        /** @var Smarty_Internal_Template $_smarty_tpl
+         * used in evaluated code
+         */
         $_smarty_tpl = $this;
         eval("?>" . $content);
         $this->cached->valid = true;
         $this->cached->processed = true;
+
         return $this->cached->write($this, $content);
     }
 
@@ -238,15 +253,16 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
      * @param mixed   $compile_id     compile id to be used with this template
      * @param integer $caching        cache mode
      * @param integer $cache_lifetime life time of cache data
-     * @param array   $vars optional  variables to assign
+     * @param         $data
      * @param int     $parent_scope   scope in which {include} should execute
+     *
      * @returns string template content
      */
     public function getSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope)
     {
         // already in template cache?
         if ($this->smarty->allow_ambiguous_resources) {
-            $_templateId = Smarty_Resource::getUniqueTemplateName($this->smarty, $template) . $cache_id . $compile_id;
+            $_templateId = Smarty_Resource::getUniqueTemplateName($this, $template) . $cache_id . $compile_id;
         } else {
             $_templateId = $this->smarty->joined_template_dir . '#' . $template . $cache_id . $compile_id;
         }
@@ -268,13 +284,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
             $tpl->tpl_vars = $this->tpl_vars;
             $tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty'];
         } elseif ($parent_scope == Smarty::SCOPE_PARENT) {
-            $tpl->tpl_vars = &$this->tpl_vars;
+            $tpl->tpl_vars = & $this->tpl_vars;
         } elseif ($parent_scope == Smarty::SCOPE_GLOBAL) {
-            $tpl->tpl_vars = &Smarty::$global_tpl_vars;
+            $tpl->tpl_vars = & Smarty::$global_tpl_vars;
         } elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) {
-            $tpl->tpl_vars = &$this->tpl_vars;
+            $tpl->tpl_vars = & $this->tpl_vars;
         } else {
-            $tpl->tpl_vars = &$scope_ptr->tpl_vars;
+            $tpl->tpl_vars = & $scope_ptr->tpl_vars;
         }
         $tpl->config_vars = $this->config_vars;
         if (!empty($data)) {
@@ -283,6 +299,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
                 $tpl->tpl_vars[$_key] = new Smarty_variable($_val);
             }
         }
+
         return $tpl->fetch(null, null, null, null, false, false, true);
     }
 
@@ -294,27 +311,28 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
      * @param mixed   $compile_id     compile id to be used with this template
      * @param integer $caching        cache mode
      * @param integer $cache_lifetime life time of cache data
-     * @param array   $vars optional  variables to assign
+     * @param         $data
      * @param int     $parent_scope   scope in which {include} should execute
      * @param string  $hash           nocache hash code
+     *
      * @returns string template content
      */
     public function setupInlineSubTemplate($template, $cache_id, $compile_id, $caching, $cache_lifetime, $data, $parent_scope, $hash)
     {
         $tpl = new $this->smarty->template_class($template, $this->smarty, $this, $cache_id, $compile_id, $caching, $cache_lifetime);
-        $tpl->properties['nocache_hash']  = $hash;
+        $tpl->properties['nocache_hash'] = $hash;
         // get variables from calling scope
-        if ($parent_scope == Smarty::SCOPE_LOCAL ) {
+        if ($parent_scope == Smarty::SCOPE_LOCAL) {
             $tpl->tpl_vars = $this->tpl_vars;
             $tpl->tpl_vars['smarty'] = clone $this->tpl_vars['smarty'];
         } elseif ($parent_scope == Smarty::SCOPE_PARENT) {
-            $tpl->tpl_vars = &$this->tpl_vars;
+            $tpl->tpl_vars = & $this->tpl_vars;
         } elseif ($parent_scope == Smarty::SCOPE_GLOBAL) {
-            $tpl->tpl_vars = &Smarty::$global_tpl_vars;
+            $tpl->tpl_vars = & Smarty::$global_tpl_vars;
         } elseif (($scope_ptr = $this->getScopePointer($parent_scope)) == null) {
-            $tpl->tpl_vars = &$this->tpl_vars;
+            $tpl->tpl_vars = & $this->tpl_vars;
         } else {
-            $tpl->tpl_vars = &$scope_ptr->tpl_vars;
+            $tpl->tpl_vars = & $scope_ptr->tpl_vars;
         }
         $tpl->config_vars = $this->config_vars;
         if (!empty($data)) {
@@ -323,15 +341,16 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
                 $tpl->tpl_vars[$_key] = new Smarty_variable($_val);
             }
         }
+
         return $tpl;
     }
 
-
     /**
      * Create code frame for compiled and cached templates
      *
-     * @param string $content   optional template content
-     * @param bool   $cache     flag for cache file
+     * @param  string $content optional template content
+     * @param  bool   $cache   flag for cache file
+     *
      * @return string
      */
     public function createTemplateCodeFrame($content = '', $cache = false)
@@ -344,7 +363,11 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
                 foreach ($this->required_plugins['compiled'] as $tmp) {
                     foreach ($tmp as $data) {
                         $file = addslashes($data['file']);
-                        $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$file}';\n";
+                        if (is_Array($data['function'])) {
+                            $plugins_string .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) include '{$file}';\n";
+                        } else {
+                            $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$file}';\n";
+                        }
                     }
                 }
                 $plugins_string .= '?>';
@@ -355,7 +378,11 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
                 foreach ($this->required_plugins['nocache'] as $tmp) {
                     foreach ($tmp as $data) {
                         $file = addslashes($data['file']);
-                        $plugins_string .= addslashes("if (!is_callable('{$data['function']}')) include '{$file}';\n");
+                        if (is_Array($data['function'])) {
+                            $plugins_string .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) include '{$file}';\n");
+                        } else {
+                            $plugins_string .= addslashes("if (!is_callable('{$data['function']}')) include '{$file}';\n");
+                        }
                     }
                 }
                 $plugins_string .= "?>/*/%%SmartyNocache:{$this->properties['nocache_hash']}%%*/';?>\n";
@@ -382,7 +409,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
                         }
                     }
                 }
-                 foreach ($this->smarty->template_functions as $name => $function_data) {
+                foreach ($this->smarty->template_functions as $name => $function_data) {
                     if (isset($function_data['called_nocache'])) {
                         unset($function_data['called_nocache'], $function_data['called_functions'], $this->smarty->template_functions[$name]['called_nocache']);
                         $this->properties['function'][$name] = $function_data;
@@ -392,7 +419,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
         }
         $this->properties['version'] = Smarty::SMARTY_VERSION;
         if (!isset($this->properties['unifunc'])) {
-            $this->properties['unifunc'] = 'content_' . str_replace('.', '_', uniqid('', true));
+            $this->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
         }
         if (!$this->source->recompiled) {
             $output .= "\$_valid = \$_smarty_tpl->decodeProperties(" . var_export($this->properties, true) . ',' . ($cache ? 'true' : 'false') . "); /*/%%SmartyHeaderCode%%*/?>\n";
@@ -401,20 +428,21 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
         $output .= $plugins_string;
         $output .= $content;
         if (!$this->source->recompiled) {
-            $output .= '<?php }} ?>';
+            $output .= "<?php }} ?>\n";
         }
+
         return $output;
     }
 
     /**
      * This function is executed automatically when a compiled or cached template file is included
-     *
      * - Decode saved properties from compiled template and cache files
      * - Check if compiled or cache file is valid
      *
-     * @param array $properties     special template properties
-     * @param bool  $cache          flag if called from cache file
-     * @return bool                 flag if compiled or cache file is valid
+     * @param  array $properties special template properties
+     * @param  bool  $cache      flag if called from cache file
+     *
+     * @return bool  flag if compiled or cache file is valid
      */
     public function decodeProperties($properties, $cache = false)
     {
@@ -436,7 +464,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
         $is_valid = true;
         if ($this->properties['version'] != Smarty::SMARTY_VERSION) {
             $is_valid = false;
-        } else if (((!$cache && $this->smarty->compile_check && empty($this->compiled->_properties) && !$this->compiled->isCompiled) || $cache && ($this->smarty->compile_check === true || $this->smarty->compile_check === Smarty::COMPILECHECK_ON)) && !empty($this->properties['file_dependency'])) {
+        } elseif (((!$cache && $this->smarty->compile_check && empty($this->compiled->_properties) && !$this->compiled->isCompiled) || $cache && ($this->smarty->compile_check === true || $this->smarty->compile_check === Smarty::COMPILECHECK_ON)) && !empty($this->properties['file_dependency'])) {
             foreach ($this->properties['file_dependency'] as $_file_to_check) {
                 if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'php') {
                     if ($this->source->filepath == $_file_to_check[0] && isset($this->source->timestamp)) {
@@ -459,6 +487,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
             }
         }
         if ($cache) {
+            // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc
+            if ($this->caching === Smarty::CACHING_LIFETIME_SAVED &&
+                $this->properties['cache_lifetime'] >= 0 &&
+                (time() > ($this->cached->timestamp + $this->properties['cache_lifetime']))
+            ) {
+                $is_valid = false;
+            }
             $this->cached->valid = $is_valid;
         } else {
             $this->mustCompile = !$is_valid;
@@ -467,15 +502,16 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
         if (!$cache) {
             $this->compiled->_properties = $properties;
         }
+
         return $is_valid;
     }
 
     /**
      * Template code runtime function to create a local Smarty variable for array assignments
      *
-     * @param string $tpl_var   tempate variable name
-     * @param bool   $nocache   cache mode of variable
-     * @param int    $scope     scope of variable
+     * @param string $tpl_var tempate variable name
+     * @param bool   $nocache cache mode of variable
+     * @param int    $scope   scope of variable
      */
     public function createLocalArrayVariable($tpl_var, $nocache = false, $scope = Smarty::SCOPE_LOCAL)
     {
@@ -495,8 +531,9 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
     /**
      * Template code runtime function to get pointer to template variable array of requested scope
      *
-     * @param int $scope    requested variable scope
-     * @return array        array of template variables
+     * @param  int $scope requested variable scope
+     *
+     * @return array array of template variables
      */
     public function &getScope($scope)
     {
@@ -507,18 +544,21 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
             while (!empty($ptr->parent)) {
                 $ptr = $ptr->parent;
             }
+
             return $ptr->tpl_vars;
         } elseif ($scope == Smarty::SCOPE_GLOBAL) {
             return Smarty::$global_tpl_vars;
         }
         $null = null;
+
         return $null;
     }
 
     /**
      * Get parent or root of template parent chain
      *
-     * @param int $scope    pqrent or root scope
+     * @param  int $scope pqrent or root scope
+     *
      * @return mixed object
      */
     public function getScopePointer($scope)
@@ -530,16 +570,19 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
             while (!empty($ptr->parent)) {
                 $ptr = $ptr->parent;
             }
+
             return $ptr;
         }
+
         return null;
     }
 
     /**
      * [util function] counts an array, arrayaccess/traversable or PDOStatement object
      *
-     * @param mixed $value
-     * @return int the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 for empty elements
+     * @param  mixed $value
+     *
+     * @return int   the count for arrays and objects that implement countable, 1 for other objects that don't, and 0 for empty elements
      */
     public function _count($value)
     {
@@ -562,12 +605,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
         } elseif (is_object($value)) {
             return count($value);
         }
+
         return 0;
     }
 
     /**
      * runtime error not matching capture tags
-     *
+
      */
     public function capture_error()
     {
@@ -575,22 +619,26 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
     }
 
     /**
-    * Empty cache for this template
-    *
-    * @param integer $exp_time      expiration time
-    * @return integer number of cache files deleted
-    */
-    public function clearCache($exp_time=null)
+     * Empty cache for this template
+     *
+     * @param integer $exp_time expiration time
+     *
+     * @return integer number of cache files deleted
+     */
+    public function clearCache($exp_time = null)
     {
         Smarty_CacheResource::invalidLoadedCache($this->smarty);
+
         return $this->cached->handler->clear($this->smarty, $this->template_name, $this->cache_id, $this->compile_id, $exp_time);
     }
 
-     /**
+    /**
      * set Smarty property in template context
      *
      * @param string $property_name property name
      * @param mixed  $value         value
+     *
+     * @throws SmartyException
      */
     public function __set($property_name, $value)
     {
@@ -600,12 +648,14 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
             case 'cached':
             case 'compiler':
                 $this->$property_name = $value;
+
                 return;
 
             // FIXME: routing of template -> smarty attributes
             default:
                 if (property_exists($this->smarty, $property_name)) {
                     $this->smarty->$property_name = $value;
+
                     return;
                 }
         }
@@ -617,6 +667,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
      * get Smarty property in template context
      *
      * @param string $property_name property name
+     *
+     * @throws SmartyException
      */
     public function __get($property_name)
     {
@@ -640,10 +692,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
                     }
                     $this->smarty->template_objects[$_templateId] = $this;
                 }
+
                 return $this->source;
 
             case 'compiled':
                 $this->compiled = $this->source->getCompiled($this);
+
                 return $this->compiled;
 
             case 'cached':
@@ -651,11 +705,13 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
                     include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
                 }
                 $this->cached = new Smarty_Template_Cached($this);
+
                 return $this->cached;
 
             case 'compiler':
                 $this->smarty->loadPlugin($this->source->compiler_class);
                 $this->compiler = new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class, $this->smarty);
+
                 return $this->compiler;
 
             // FIXME: routing of template -> smarty attributes
@@ -669,8 +725,8 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
     }
 
     /**
-     * Template data object destrutor
-     *
+     * Template data object destructor
+
      */
     public function __destruct()
     {
@@ -678,7 +734,4 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
             $this->cached->handler->releaseLock($this->smarty, $this->cached);
         }
     }
-
 }
-
-?>
\ No newline at end of file
index abd48b79929a97b3bc3ce44546ec0483eba3f34d..955411f06508848fe79b9029361d00dd1edbfaf0 100644 (file)
@@ -1,32 +1,34 @@
 <?php\r
 /**\r
  * Smarty Internal Plugin Smarty Template  Base\r
+ * This file contains the basic shared methods for template handling\r
  *\r
- * This file contains the basic shared methodes for template handling\r
- *\r
- * @package Smarty\r
+ * @package    Smarty\r
  * @subpackage Template\r
- * @author Uwe Tews\r
+ * @author     Uwe Tews\r
  */\r
 \r
 /**\r
- * Class with shared template methodes\r
+ * Class with shared template methods\r
  *\r
- * @package Smarty\r
+ * @package    Smarty\r
  * @subpackage Template\r
  */\r
-abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {\r
-\r
+abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data\r
+{\r
     /**\r
      * fetches a rendered Smarty template\r
      *\r
-     * @param string $template          the resource handle of the template file or template object\r
-     * @param mixed  $cache_id          cache id to be used with this template\r
-     * @param mixed  $compile_id        compile id to be used with this template\r
-     * @param object $parent            next higher level of Smarty variables\r
-     * @param bool   $display           true: display, false: fetch\r
-     * @param bool   $merge_tpl_vars    if true parent template variables merged in to local scope\r
-     * @param bool   $no_output_filter  if true do not run output filter\r
+     * @param  string $template         the resource handle of the template file or template object\r
+     * @param  mixed  $cache_id         cache id to be used with this template\r
+     * @param  mixed  $compile_id       compile id to be used with this template\r
+     * @param  object $parent           next higher level of Smarty variables\r
+     * @param  bool   $display          true: display, false: fetch\r
+     * @param  bool   $merge_tpl_vars   if true parent template variables merged in to local scope\r
+     * @param  bool   $no_output_filter if true do not run output filter\r
+     *\r
+     * @throws Exception\r
+     * @throws SmartyException\r
      * @return string rendered template output\r
      */\r
     public function fetch($template = null, $cache_id = null, $compile_id = null, $parent = null, $display = false, $merge_tpl_vars = true, $no_output_filter = false)\r
@@ -34,7 +36,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
         if ($template === null && $this instanceof $this->template_class) {\r
             $template = $this;\r
         }\r
-        if (!empty($cache_id) && is_object($cache_id)) {\r
+        if ($cache_id !== null && is_object($cache_id)) {\r
             $parent = $cache_id;\r
             $cache_id = null;\r
         }\r
@@ -43,8 +45,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
         }\r
         // create template object if necessary\r
         $_template = ($template instanceof $this->template_class)\r
-        ? $template\r
-        : $this->smarty->createTemplate($template, $cache_id, $compile_id, $parent, false);\r
+            ? $template\r
+            : $this->smarty->createTemplate($template, $cache_id, $compile_id, $parent, false);\r
         // if called by Smarty object make sure we use current caching status\r
         if ($this instanceof Smarty) {\r
             $_template->caching = $this->caching;\r
@@ -130,15 +132,12 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
         if (!($_template->caching == Smarty::CACHING_LIFETIME_CURRENT || $_template->caching == Smarty::CACHING_LIFETIME_SAVED) || !$_template->cached->valid) {\r
             // render template (not loaded and not in cache)\r
             if (!$_template->source->uncompiled) {\r
+                /** @var Smarty_Internal_Template $_smarty_tpl\r
+                 * used in evaluated code\r
+                 */\r
                 $_smarty_tpl = $_template;\r
                 if ($_template->source->recompiled) {\r
-                    if ($this->smarty->debugging) {\r
-                        Smarty_Internal_Debug::start_compile($_template);\r
-                    }\r
                     $code = $_template->compiler->compileTemplate($_template);\r
-                    if ($this->smarty->debugging) {\r
-                        Smarty_Internal_Debug::end_compile($_template);\r
-                    }\r
                     if ($this->smarty->debugging) {\r
                         Smarty_Internal_Debug::start_render($_template);\r
                     }\r
@@ -146,13 +145,19 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                         ob_start();\r
                         eval("?>" . $code);\r
                         unset($code);\r
-                    } catch (Exception $e) {\r
+                    }\r
+                    catch (Exception $e) {\r
                         ob_get_clean();\r
                         throw $e;\r
                     }\r
                 } else {\r
                     if (!$_template->compiled->exists || ($_template->smarty->force_compile && !$_template->compiled->isCompiled)) {\r
                         $_template->compileTemplateSource();\r
+                        $code = file_get_contents($_template->compiled->filepath);\r
+                        eval("?>" . $code);\r
+                        unset($code);\r
+                        $_template->compiled->loaded = true;\r
+                        $_template->compiled->isCompiled = true;\r
                     }\r
                     if ($this->smarty->debugging) {\r
                         Smarty_Internal_Debug::start_render($_template);\r
@@ -162,7 +167,10 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                         if ($_template->mustCompile) {\r
                             // recompile and load again\r
                             $_template->compileTemplateSource();\r
-                            include($_template->compiled->filepath);\r
+                            $code = file_get_contents($_template->compiled->filepath);\r
+                            eval("?>" . $code);\r
+                            unset($code);\r
+                            $_template->compiled->isCompiled = true;\r
                         }\r
                         $_template->compiled->loaded = true;\r
                     } else {\r
@@ -173,7 +181,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                         if (empty($_template->properties['unifunc']) || !is_callable($_template->properties['unifunc'])) {\r
                             throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");\r
                         }\r
-                        array_unshift($_template->_capture_stack,array());\r
+                        array_unshift($_template->_capture_stack, array());\r
                         //\r
                         // render compiled template\r
                         //\r
@@ -183,7 +191,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                             $_template->capture_error();\r
                         }\r
                         array_shift($_template->_capture_stack);\r
-                    } catch (Exception $e) {\r
+                    }\r
+                    catch (Exception $e) {\r
                         ob_get_clean();\r
                         throw $e;\r
                     }\r
@@ -196,7 +205,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                     try {\r
                         ob_start();\r
                         $_template->source->renderUncompiled($_template);\r
-                    } catch (Exception $e) {\r
+                    }\r
+                    catch (Exception $e) {\r
                         ob_get_clean();\r
                         throw $e;\r
                     }\r
@@ -235,7 +245,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                 // loop over items, stitch back together\r
                 foreach ($cache_split as $curr_idx => $curr_split) {\r
                     // escape PHP tags in template content\r
-                    $output .= preg_replace('/(<%|%>|<\?php|<\?|\?>)/', '<?php echo \'$1\'; ?>', $curr_split);\r
+                    $output .= preg_replace('/(<%|%>|<\?php|<\?|\?>)/', "<?php echo '\$1'; ?>\n", $curr_split);\r
                     if (isset($cache_parts[0][$curr_idx])) {\r
                         $_template->properties['has_nocache_code'] = true;\r
                         // remove nocache tags from cache output\r
@@ -246,12 +256,16 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                     $output = Smarty_Internal_Filter_Handler::runFilter('output', $output, $_template);\r
                 }\r
                 // rendering (must be done before writing cache file because of {function} nocache handling)\r
+                /** @var Smarty_Internal_Template $_smarty_tpl\r
+                 * used in evaluated code\r
+                 */\r
                 $_smarty_tpl = $_template;\r
                 try {\r
                     ob_start();\r
                     eval("?>" . $output);\r
                     $_output = ob_get_clean();\r
-                } catch (Exception $e) {\r
+                }\r
+                catch (Exception $e) {\r
                     ob_get_clean();\r
                     throw $e;\r
                 }\r
@@ -274,7 +288,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
             }\r
             try {\r
                 ob_start();\r
-                array_unshift($_template->_capture_stack,array());\r
+                array_unshift($_template->_capture_stack, array());\r
                 //\r
                 // render cached template\r
                 //\r
@@ -285,7 +299,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                 }\r
                 array_shift($_template->_capture_stack);\r
                 $_output = ob_get_clean();\r
-            } catch (Exception $e) {\r
+            }\r
+            catch (Exception $e) {\r
                 ob_get_clean();\r
                 throw $e;\r
             }\r
@@ -306,33 +321,37 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                 $_last_modified_date = @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3);\r
                 if ($_isCached && $_template->cached->timestamp <= strtotime($_last_modified_date)) {\r
                     switch (PHP_SAPI) {\r
-                        case 'cgi':         // php-cgi < 5.3\r
-                        case 'cgi-fcgi':    // php-cgi >= 5.3\r
-                        case 'fpm-fcgi':    // php-fpm >= 5.3.3\r
-                        header('Status: 304 Not Modified');\r
-                        break;\r
+                        case 'cgi': // php-cgi < 5.3\r
+                        case 'cgi-fcgi': // php-cgi >= 5.3\r
+                        case 'fpm-fcgi': // php-fpm >= 5.3.3\r
+                            header('Status: 304 Not Modified');\r
+                            break;\r
 \r
                         case 'cli':\r
-                        if (/* ^phpunit */!empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS'])/* phpunit$ */) {\r
-                            $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';\r
-                        }\r
-                        break;\r
+                            if ( /* ^phpunit */\r
+                            !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */\r
+                            ) {\r
+                                $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = '304 Not Modified';\r
+                            }\r
+                            break;\r
 \r
                         default:\r
-                        header($_SERVER['SERVER_PROTOCOL'].' 304 Not Modified');\r
-                        break;\r
+                            header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');\r
+                            break;\r
                     }\r
                 } else {\r
                     switch (PHP_SAPI) {\r
                         case 'cli':\r
-                        if (/* ^phpunit */!empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS'])/* phpunit$ */) {\r
-                            $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT';\r
-                        }\r
-                        break;\r
+                            if ( /* ^phpunit */\r
+                            !empty($_SERVER['SMARTY_PHPUNIT_DISABLE_HEADERS']) /* phpunit$ */\r
+                            ) {\r
+                                $_SERVER['SMARTY_PHPUNIT_HEADERS'][] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT';\r
+                            }\r
+                            break;\r
 \r
                         default:\r
-                        header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT');\r
-                        break;\r
+                            header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->cached->timestamp) . ' GMT');\r
+                            break;\r
                     }\r
                     echo $_output;\r
                 }\r
@@ -341,19 +360,20 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
             }\r
             // debug output\r
             if ($this->smarty->debugging) {\r
-                Smarty_Internal_Debug::display_debug($this);\r
+                Smarty_Internal_Debug::display_debug($_template);\r
             }\r
             if ($merge_tpl_vars) {\r
                 // restore local variables\r
                 $_template->tpl_vars = $save_tpl_vars;\r
-                $_template->config_vars =  $save_config_vars;\r
+                $_template->config_vars = $save_config_vars;\r
             }\r
+\r
             return;\r
         } else {\r
             if ($merge_tpl_vars) {\r
                 // restore local variables\r
                 $_template->tpl_vars = $save_tpl_vars;\r
-                $_template->config_vars =  $save_config_vars;\r
+                $_template->config_vars = $save_config_vars;\r
             }\r
             // return fetched content\r
             return $_output;\r
@@ -377,11 +397,12 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * test if cache is valid\r
      *\r
-     * @param string|object $template   the resource handle of the template file or template object\r
-     * @param mixed         $cache_id   cache id to be used with this template\r
-     * @param mixed         $compile_id compile id to be used with this template\r
-     * @param object        $parent     next higher level of Smarty variables\r
-     * @return boolean cache status\r
+     * @param  string|object $template   the resource handle of the template file or template object\r
+     * @param  mixed         $cache_id   cache id to be used with this template\r
+     * @param  mixed         $compile_id compile id to be used with this template\r
+     * @param  object        $parent     next higher level of Smarty variables\r
+     *\r
+     * @return boolean       cache status\r
      */\r
     public function isCached($template = null, $cache_id = null, $compile_id = null, $parent = null)\r
     {\r
@@ -402,6 +423,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
      * creates a data object\r
      *\r
      * @param object $parent next higher level of Smarty variables\r
+     *\r
      * @returns Smarty_Data data object\r
      */\r
     public function createData($parent = null)\r
@@ -412,13 +434,14 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Registers plugin to be used in templates\r
      *\r
-     * @param string   $type       plugin type\r
-     * @param string   $tag        name of template tag\r
-     * @param callback $callback   PHP callback to register\r
-     * @param boolean  $cacheable  if true (default) this fuction is cachable\r
-     * @param array    $cache_attr caching attributes if any\r
+     * @param  string   $type       plugin type\r
+     * @param  string   $tag        name of template tag\r
+     * @param  callback $callback   PHP callback to register\r
+     * @param  boolean  $cacheable  if true (default) this fuction is cachable\r
+     * @param  array    $cache_attr caching attributes if any\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
-     * @throws SmartyException when the plugin tag is invalid\r
+     * @throws SmartyException              when the plugin tag is invalid\r
      */\r
     public function registerPlugin($type, $tag, $callback, $cacheable = true, $cache_attr = null)\r
     {\r
@@ -436,8 +459,9 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Unregister Plugin\r
      *\r
-     * @param string $type of plugin\r
-     * @param string $tag name of plugin\r
+     * @param  string $type of plugin\r
+     * @param  string $tag  name of plugin\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function unregisterPlugin($type, $tag)\r
@@ -452,20 +476,23 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Registers a resource to fetch a template\r
      *\r
-     * @param string $type name of resource type\r
-     * @param Smarty_Resource|array $callback or instance of Smarty_Resource, or array of callbacks to handle resource (deprecated)\r
+     * @param  string                $type     name of resource type\r
+     * @param  Smarty_Resource|array $callback or instance of Smarty_Resource, or array of callbacks to handle resource (deprecated)\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function registerResource($type, $callback)\r
     {\r
         $this->smarty->registered_resources[$type] = $callback instanceof Smarty_Resource ? $callback : array($callback, false);\r
+\r
         return $this;\r
     }\r
 \r
     /**\r
      * Unregisters a resource\r
      *\r
-     * @param string $type name of resource type\r
+     * @param  string $type name of resource type\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function unregisterResource($type)\r
@@ -480,20 +507,23 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Registers a cache resource to cache a template's output\r
      *\r
-     * @param string               $type     name of cache resource type\r
-     * @param Smarty_CacheResource $callback instance of Smarty_CacheResource to handle output caching\r
+     * @param  string               $type     name of cache resource type\r
+     * @param  Smarty_CacheResource $callback instance of Smarty_CacheResource to handle output caching\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function registerCacheResource($type, Smarty_CacheResource $callback)\r
     {\r
         $this->smarty->registered_cache_resources[$type] = $callback;\r
+\r
         return $this;\r
     }\r
 \r
     /**\r
      * Unregisters a cache resource\r
      *\r
-     * @param string $type name of cache resource type\r
+     * @param  string $type name of cache resource type\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function unregisterCacheResource($type)\r
@@ -508,26 +538,26 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Registers object to be used in templates\r
      *\r
-     * @param string  $object        name of template object\r
-     * @param object  $object_impl   the referenced PHP object to register\r
-     * @param array   $allowed       list of allowed methods (empty = all)\r
-     * @param boolean $smarty_args   smarty argument format, else traditional\r
-     * @param array   $block_methods list of block-methods\r
-     * @param array $block_functs list of methods that are block format\r
+     * @param          $object_name\r
+     * @param  object  $object_impl   the referenced PHP object to register\r
+     * @param  array   $allowed       list of allowed methods (empty = all)\r
+     * @param  boolean $smarty_args   smarty argument format, else traditional\r
+     * @param  array   $block_methods list of block-methods\r
+     *\r
+     * @throws SmartyException\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
-     * @throws SmartyException if any of the methods in $allowed or $block_methods are invalid\r
      */\r
     public function registerObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())\r
     {\r
-        // test if allowed methodes callable\r
+        // test if allowed methods callable\r
         if (!empty($allowed)) {\r
             foreach ((array) $allowed as $method) {\r
-                if (!is_callable(array($object_impl, $method))) {\r
-                    throw new SmartyException("Undefined method '$method' in registered object");\r
+                if (!is_callable(array($object_impl, $method)) && !property_exists($object_impl, $method)) {\r
+                    throw new SmartyException("Undefined method or property '$method' in registered object");\r
                 }\r
             }\r
         }\r
-        // test if block methodes callable\r
+        // test if block methods callable\r
         if (!empty($block_methods)) {\r
             foreach ((array) $block_methods as $method) {\r
                 if (!is_callable(array($object_impl, $method))) {\r
@@ -537,14 +567,16 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
         }\r
         // register the object\r
         $this->smarty->registered_objects[$object_name] =\r
-        array($object_impl, (array) $allowed, (boolean) $smarty_args, (array) $block_methods);\r
+            array($object_impl, (array) $allowed, (boolean) $smarty_args, (array) $block_methods);\r
+\r
         return $this;\r
     }\r
 \r
     /**\r
      * return a reference to a registered object\r
      *\r
-     * @param string $name object name\r
+     * @param  string $name object name\r
+     *\r
      * @return object\r
      * @throws SmartyException if no such object is found\r
      */\r
@@ -556,13 +588,15 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
         if (!is_object($this->smarty->registered_objects[$name][0])) {\r
             throw new SmartyException("registered '$name' is not an object");\r
         }\r
+\r
         return $this->smarty->registered_objects[$name][0];\r
     }\r
 \r
     /**\r
      * unregister an object\r
      *\r
-     * @param string $name object name\r
+     * @param  string $name object name\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function unregisterObject($name)\r
@@ -577,10 +611,11 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Registers static classes to be used in templates\r
      *\r
-     * @param string $class name of template class\r
-     * @param string $class_impl the referenced PHP class to register\r
+     * @param         $class_name\r
+     * @param  string $class_impl the referenced PHP class to register\r
+     *\r
+     * @throws SmartyException\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
-     * @throws SmartyException if $class_impl does not refer to an existing class\r
      */\r
     public function registerClass($class_name, $class_impl)\r
     {\r
@@ -590,15 +625,17 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
         }\r
         // register the class\r
         $this->smarty->registered_classes[$class_name] = $class_impl;\r
+\r
         return $this;\r
     }\r
 \r
     /**\r
      * Registers a default plugin handler\r
      *\r
-     * @param callable $callback class/method name\r
+     * @param  callable $callback class/method name\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
-     * @throws SmartyException if $callback is not callable\r
+     * @throws SmartyException              if $callback is not callable\r
      */\r
     public function registerDefaultPluginHandler($callback)\r
     {\r
@@ -614,9 +651,10 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Registers a default template handler\r
      *\r
-     * @param callable $callback class/method name\r
+     * @param  callable $callback class/method name\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
-     * @throws SmartyException if $callback is not callable\r
+     * @throws SmartyException              if $callback is not callable\r
      */\r
     public function registerDefaultTemplateHandler($callback)\r
     {\r
@@ -632,9 +670,10 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Registers a default template handler\r
      *\r
-     * @param callable $callback class/method name\r
+     * @param  callable $callback class/method name\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
-     * @throws SmartyException if $callback is not callable\r
+     * @throws SmartyException              if $callback is not callable\r
      */\r
     public function registerDefaultConfigHandler($callback)\r
     {\r
@@ -650,21 +689,24 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Registers a filter function\r
      *\r
-     * @param string $type filter type\r
-     * @param callback $callback\r
+     * @param  string   $type filter type\r
+     * @param  callback $callback\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function registerFilter($type, $callback)\r
     {\r
         $this->smarty->registered_filters[$type][$this->_get_filter_name($callback)] = $callback;\r
+\r
         return $this;\r
     }\r
 \r
     /**\r
      * Unregisters a filter function\r
      *\r
-     * @param string $type filter type\r
-     * @param callback $callback\r
+     * @param  string   $type filter type\r
+     * @param  callback $callback\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function unregisterFilter($type, $callback)\r
@@ -680,14 +722,16 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * Return internal filter name\r
      *\r
-     * @param callback $function_name\r
-     * @return string internal filter name\r
+     * @param  callback $function_name\r
+     *\r
+     * @return string   internal filter name\r
      */\r
     public function _get_filter_name($function_name)\r
     {\r
         if (is_array($function_name)) {\r
             $_class_name = (is_object($function_name[0]) ?\r
-            get_class($function_name[0]) : $function_name[0]);\r
+                get_class($function_name[0]) : $function_name[0]);\r
+\r
             return $_class_name . '_' . $function_name[1];\r
         } else {\r
             return $function_name;\r
@@ -697,8 +741,9 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * load a filter of specified type and name\r
      *\r
-     * @param string $type filter type\r
-     * @param string $name filter name\r
+     * @param  string $type filter type\r
+     * @param  string $name filter name\r
+     *\r
      * @throws SmartyException if filter could not be loaded\r
      */\r
     public function loadFilter($type, $name)\r
@@ -711,6 +756,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
             }\r
             if (is_callable($_plugin)) {\r
                 $this->smarty->registered_filters[$type][$_filter_name] = $_plugin;\r
+\r
                 return true;\r
             }\r
         }\r
@@ -720,8 +766,9 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * unload a filter of specified type and name\r
      *\r
-     * @param string $type filter type\r
-     * @param string $name filter name\r
+     * @param  string $type filter type\r
+     * @param  string $name filter name\r
+     *\r
      * @return Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or Smarty_Internal_Template) instance for chaining\r
      */\r
     public function unloadFilter($type, $name)\r
@@ -737,10 +784,12 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
     /**\r
      * preg_replace callback to convert camelcase getter/setter to underscore property names\r
      *\r
-     * @param string $match match string\r
+     * @param  string $match match string\r
+     *\r
      * @return string replacemant\r
      */\r
-    private function replaceCamelcase($match) {\r
+    private function replaceCamelcase($match)\r
+    {\r
         return "_" . strtolower($match[1]);\r
     }\r
 \r
@@ -749,6 +798,8 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
      *\r
      * @param string $name unknown method-name\r
      * @param array  $args argument array\r
+     *\r
+     * @throws SmartyException\r
      */\r
     public function __call($name, $args)\r
     {\r
@@ -770,7 +821,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                 // lcfirst() not available < PHP 5.3.0, so improvise\r
                 $property_name = strtolower(substr($name, 3, 1)) . substr($name, 4);\r
                 // convert camel case to underscored name\r
-                $property_name = preg_replace_callback('/([A-Z])/', array($this,'replaceCamelcase'), $property_name);\r
+                $property_name = preg_replace_callback('/([A-Z])/', array($this, 'replaceCamelcase'), $property_name);\r
                 $_resolved_property_name[$name] = $property_name;\r
             }\r
             if (isset($_resolved_property_source[$property_name])) {\r
@@ -779,25 +830,26 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
                 $_is_this = null;\r
                 if (property_exists($this, $property_name)) {\r
                     $_is_this = true;\r
-                } else if (property_exists($this->smarty, $property_name)) {\r
+                } elseif (property_exists($this->smarty, $property_name)) {\r
                     $_is_this = false;\r
                 }\r
                 $_resolved_property_source[$property_name] = $_is_this;\r
             }\r
             if ($_is_this) {\r
-                if ($first3 == 'get')\r
-                return $this->$property_name;\r
-                else\r
-                return $this->$property_name = $args[0];\r
-            } else if ($_is_this === false) {\r
-                if ($first3 == 'get')\r
-                return $this->smarty->$property_name;\r
-                else\r
-                return $this->smarty->$property_name = $args[0];\r
+                if ($first3 == 'get') {\r
+                    return $this->$property_name;\r
+                } else {\r
+                    return $this->$property_name = $args[0];\r
+                }\r
+            } elseif ($_is_this === false) {\r
+                if ($first3 == 'get') {\r
+                    return $this->smarty->$property_name;\r
+                } else {\r
+                    return $this->smarty->$property_name = $args[0];\r
+                }\r
             } else {\r
                 throw new SmartyException("property '$property_name' does not exist.");\r
-                return false;\r
-            }\r
+           }\r
         }\r
         if ($name == 'Smarty') {\r
             throw new SmartyException("PHP5 requires you to call __construct() instead of Smarty()");\r
@@ -805,7 +857,4 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data {
         // must be unknown\r
         throw new SmartyException("Call of unknown method '$name'.");\r
     }\r
-\r
 }\r
-\r
-?>
\ No newline at end of file
index 85906239df6175877d2ecca889152d4743112f8d..d00bfb8f43ec4c98dbc83f5c68457ddcd8eb425b 100644 (file)
-<?php\r
-\r
-/**\r
- * Smarty Internal Plugin Smarty Template Compiler Base\r
- *\r
- * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- * @author Uwe Tews\r
- */\r
-\r
-/**\r
- * Main abstract compiler class\r
- *\r
- * @package Smarty\r
- * @subpackage Compiler\r
- */\r
-abstract class Smarty_Internal_TemplateCompilerBase {\r
-\r
-    /**\r
-     * hash for nocache sections\r
-     *\r
-     * @var mixed\r
-     */\r
-    private $nocache_hash = null;\r
-\r
-    /**\r
-     * suppress generation of nocache code\r
-     *\r
-     * @var bool\r
-     */\r
-    public $suppressNocacheProcessing = false;\r
-\r
-    /**\r
-     * suppress generation of merged template code\r
-     *\r
-     * @var bool\r
-     */\r
-    public $suppressMergedTemplates = false;\r
-\r
-    /**\r
-     * compile tag objects\r
-     *\r
-     * @var array\r
-     */\r
-    public static $_tag_objects = array();\r
-\r
-    /**\r
-     * tag stack\r
-     *\r
-     * @var array\r
-     */\r
-    public $_tag_stack = array();\r
-\r
-    /**\r
-     * current template\r
-     *\r
-     * @var Smarty_Internal_Template\r
-     */\r
-    public $template = null;\r
-\r
-    /**\r
-     * merged templates\r
-     *\r
-     * @var array\r
-     */\r
-    public $merged_templates = array();\r
-\r
-    /**\r
-     * flag when compiling {block}\r
-     *\r
-     * @var bool\r
-     */\r
-    public $inheritance = false;\r
-\r
-    /**\r
-     * plugins loaded by default plugin handler\r
-     *\r
-     * @var array\r
-     */\r
-    public $default_handler_plugins = array();\r
-\r
-    /**\r
-     * saved preprocessed modifier list\r
-     *\r
-     * @var mixed\r
-     */\r
-    public $default_modifier_list = null;\r
-\r
-    /**\r
-     * force compilation of complete template as nocache\r
-     * @var boolean\r
-     */\r
-    public $forceNocache = false;\r
-\r
-    /**\r
-     * suppress Smarty header code in compiled template\r
-     * @var bool\r
-     */\r
-    public $suppressHeader = false;\r
-\r
-    /**\r
-     * suppress template property header code in compiled template\r
-     * @var bool\r
-     */\r
-    public $suppressTemplatePropertyHeader = false;\r
-\r
-    /**\r
-     * flag if compiled template file shall we written\r
-     * @var bool\r
-     */\r
-    public $write_compiled_code = true;\r
-\r
-    /**\r
-     * flag if currently a template function is compiled\r
-     * @var bool\r
-     */\r
-    public $compiles_template_function = false;\r
-\r
-    /**\r
-     * called subfuntions from template function\r
-     * @var array\r
-     */\r
-    public $called_functions = array();\r
-\r
-    /**\r
-     * flags for used modifier plugins\r
-     * @var array\r
-     */\r
-    public $modifier_plugins = array();\r
-\r
-    /**\r
-     * type of already compiled modifier\r
-     * @var array\r
-     */\r
-    public $known_modifier_type = array();\r
-\r
-    /**\r
-     * Initialize compiler\r
-     */\r
-    public function __construct() {\r
-        $this->nocache_hash = str_replace('.', '-', uniqid(rand(), true));\r
-    }\r
-\r
-    /**\r
-     * Method to compile a Smarty template\r
-     *\r
-     * @param  Smarty_Internal_Template $template template object to compile\r
-     * @return bool true if compiling succeeded, false if it failed\r
-     */\r
-    public function compileTemplate(Smarty_Internal_Template $template) {\r
-        if (empty($template->properties['nocache_hash'])) {\r
-            $template->properties['nocache_hash'] = $this->nocache_hash;\r
-        } else {\r
-            $this->nocache_hash = $template->properties['nocache_hash'];\r
-        }\r
-        // flag for nochache sections\r
-        $this->nocache = false;\r
-        $this->tag_nocache = false;\r
-        // save template object in compiler class\r
-        $this->template = $template;\r
-        // reset has noche code flag\r
-        $this->template->has_nocache_code = false;\r
-        $this->smarty->_current_file = $saved_filepath = $this->template->source->filepath;\r
-        // template header code\r
-        $template_header = '';\r
-        if (!$this->suppressHeader) {\r
-            $template_header .= "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . "\n";\r
-            $template_header .= "         compiled from \"" . $this->template->source->filepath . "\" */ ?>\n";\r
-        }\r
-\r
-        do {\r
-            // flag for aborting current and start recompile\r
-            $this->abort_and_recompile = false;\r
-            // get template source\r
-            $_content = $template->source->content;\r
-            // run prefilter if required\r
-            if (isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) {\r
-                $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template);\r
-            }\r
-            // on empty template just return header\r
-            if ($_content == '') {\r
-                if ($this->suppressTemplatePropertyHeader) {\r
-                    $code = '';\r
-                } else {\r
-                    $code = $template_header . $template->createTemplateCodeFrame();\r
-                }\r
-                return $code;\r
-            }\r
-            // call compiler\r
-            $_compiled_code = $this->doCompile($_content);\r
-        } while ($this->abort_and_recompile);\r
-        $this->template->source->filepath = $saved_filepath;\r
-        // free memory\r
-        unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex, $this->template);\r
-        self::$_tag_objects = array();\r
-        // return compiled code to template object\r
-        $merged_code = '';\r
-        if (!$this->suppressMergedTemplates && !empty($this->merged_templates)) {\r
-            foreach ($this->merged_templates as $code) {\r
-                $merged_code .= $code;\r
-            }\r
-            // run postfilter if required on merged code\r
-            if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) {\r
-                $merged_code = Smarty_Internal_Filter_Handler::runFilter('post', $merged_code, $template);\r
-            }\r
-        }\r
-        // run postfilter if required on compiled template code\r
-        if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) {\r
-            $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template);\r
-        }\r
-        if ($this->suppressTemplatePropertyHeader) {\r
-            $code = $_compiled_code . $merged_code;\r
-        } else {\r
-            $code = $template_header . $template->createTemplateCodeFrame($_compiled_code) . $merged_code;\r
-        }\r
-        return $code;\r
-    }\r
-\r
-    /**\r
-     * Compile Tag\r
-     *\r
-     * This is a call back from the lexer/parser\r
-     * It executes the required compile plugin for the Smarty tag\r
-     *\r
-     * @param string $tag       tag name\r
-     * @param array  $args      array with tag attributes\r
-     * @param array  $parameter array with compilation parameter\r
-     * @return string compiled code\r
-     */\r
-    public function compileTag($tag, $args, $parameter = array()) {\r
-        // $args contains the attributes parsed and compiled by the lexer/parser\r
-        // assume that tag does compile into code, but creates no HTML output\r
-        $this->has_code = true;\r
-        $this->has_output = false;\r
-        // log tag/attributes\r
-        if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) {\r
-            $this->template->used_tags[] = array($tag, $args);\r
-        }\r
-        // check nocache option flag\r
-        if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args)\r
-                || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args)) {\r
-            $this->tag_nocache = true;\r
-        }\r
-        // compile the smarty tag (required compile classes to compile the tag are autoloaded)\r
-        if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) {\r
-            if (isset($this->smarty->template_functions[$tag])) {\r
-                // template defined by {template} tag\r
-                $args['_attr']['name'] = "'" . $tag . "'";\r
-                $_output = $this->callTagCompiler('call', $args, $parameter);\r
-            }\r
-        }\r
-        if ($_output !== false) {\r
-            if ($_output !== true) {\r
-                // did we get compiled code\r
-                if ($this->has_code) {\r
-                    // Does it create output?\r
-                    if ($this->has_output) {\r
-                        $_output .= "\n";\r
-                    }\r
-                    // return compiled code\r
-                    return $_output;\r
-                }\r
-            }\r
-            // tag did not produce compiled code\r
-            return '';\r
-        } else {\r
-            // map_named attributes\r
-            if (isset($args['_attr'])) {\r
-                foreach ($args['_attr'] as $key => $attribute) {\r
-                    if (is_array($attribute)) {\r
-                        $args = array_merge($args, $attribute);\r
-                    }\r
-                }\r
-            }\r
-            // not an internal compiler tag\r
-            if (strlen($tag) < 6 || substr($tag, -5) != 'close') {\r
-                // check if tag is a registered object\r
-                if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_methode'])) {\r
-                    $methode = $parameter['object_methode'];\r
-                    if (!in_array($methode, $this->smarty->registered_objects[$tag][3]) &&\r
-                            (empty($this->smarty->registered_objects[$tag][1]) || in_array($methode, $this->smarty->registered_objects[$tag][1]))) {\r
-                        return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $methode);\r
-                    } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) {\r
-                        return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode);\r
-                    } else {\r
-                        return $this->trigger_template_error('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno);\r
-                    }\r
-                }\r
-                // check if tag is registered\r
-                foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) {\r
-                    if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) {\r
-                        // if compiler function plugin call it now\r
-                        if ($plugin_type == Smarty::PLUGIN_COMPILER) {\r
-                            $new_args = array();\r
-                            foreach ($args as $key => $mixed) {\r
-                                if (is_array($mixed)) {\r
-                                    $new_args = array_merge($new_args, $mixed);\r
-                                } else {\r
-                                    $new_args[$key] = $mixed;\r
-                                }\r
-                            }\r
-                            if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) {\r
-                                $this->tag_nocache = true;\r
-                            }\r
-                            $function = $this->smarty->registered_plugins[$plugin_type][$tag][0];\r
-                            if (!is_array($function)) {\r
-                                return $function($new_args, $this);\r
-                            } else if (is_object($function[0])) {\r
-                                return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);\r
-                            } else {\r
-                                return call_user_func_array($function, array($new_args, $this));\r
-                            }\r
-                        }\r
-                        // compile registered function or block function\r
-                        if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) {\r
-                            return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);\r
-                        }\r
-                    }\r
-                }\r
-                // check plugins from plugins folder\r
-                foreach ($this->smarty->plugin_search_order as $plugin_type) {\r
-                    if ($plugin_type == Smarty::PLUGIN_BLOCK && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) {\r
-                        $plugin = 'smarty_compiler_' . $tag;\r
-                        if (is_callable($plugin)) {\r
-                            // convert arguments format for old compiler plugins\r
-                            $new_args = array();\r
-                            foreach ($args as $key => $mixed) {\r
-                                if (is_array($mixed)) {\r
-                                    $new_args = array_merge($new_args, $mixed);\r
-                                } else {\r
-                                    $new_args[$key] = $mixed;\r
-                                }\r
-                            }\r
-                            return $plugin($new_args, $this->smarty);\r
-                        }\r
-                        if (class_exists($plugin, false)) {\r
-                            $plugin_object = new $plugin;\r
-                            if (method_exists($plugin_object, 'compile')) {\r
-                                return $plugin_object->compile($args, $this);\r
-                            }\r
-                        }\r
-                        throw new SmartyException("Plugin \"{$tag}\" not callable");\r
-                    } else {\r
-                        if ($function = $this->getPlugin($tag, $plugin_type)) {\r
-                            if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {\r
-                                return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function);\r
-                            }\r
-                        }\r
-                    }\r
-                }\r
-                if (is_callable($this->smarty->default_plugin_handler_func)) {\r
-                    $found = false;\r
-                    // look for already resolved tags\r
-                    foreach ($this->smarty->plugin_search_order as $plugin_type) {\r
-                        if (isset($this->default_handler_plugins[$plugin_type][$tag])) {\r
-                            $found = true;\r
-                            break;\r
-                        }\r
-                    }\r
-                    if (!$found) {\r
-                        // call default handler\r
-                        foreach ($this->smarty->plugin_search_order as $plugin_type) {\r
-                            if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) {\r
-                                $found = true;\r
-                                break;\r
-                            }\r
-                        }\r
-                    }\r
-                    if ($found) {\r
-                        // if compiler function plugin call it now\r
-                        if ($plugin_type == Smarty::PLUGIN_COMPILER) {\r
-                            $new_args = array();\r
-                            foreach ($args as $mixed) {\r
-                                $new_args = array_merge($new_args, $mixed);\r
-                            }\r
-                            $function = $this->default_handler_plugins[$plugin_type][$tag][0];\r
-                            if (!is_array($function)) {\r
-                                return $function($new_args, $this);\r
-                            } else if (is_object($function[0])) {\r
-                                return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);\r
-                            } else {\r
-                                return call_user_func_array($function, array($new_args, $this));\r
-                            }\r
-                        } else {\r
-                            return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);\r
-                        }\r
-                    }\r
-                }\r
-            } else {\r
-                // compile closing tag of block function\r
-                $base_tag = substr($tag, 0, -5);\r
-                // check if closing tag is a registered object\r
-                if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_methode'])) {\r
-                    $methode = $parameter['object_methode'];\r
-                    if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) {\r
-                        return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $methode);\r
-                    } else {\r
-                        return $this->trigger_template_error('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"', $this->lex->taglineno);\r
-                    }\r
-                }\r
-                // registered block tag ?\r
-                if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {\r
-                    return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag);\r
-                }\r
-                // block plugin?\r
-                if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) {\r
-                    return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function);\r
-                }\r
-                // registered compiler plugin ?\r
-                if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) {\r
-                    // if compiler function plugin call it now\r
-                    $args = array();\r
-                    if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) {\r
-                        $this->tag_nocache = true;\r
-                    }\r
-                    $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0];\r
-                    if (!is_array($function)) {\r
-                        return $function($args, $this);\r
-                    } else if (is_object($function[0])) {\r
-                        return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this);\r
-                    } else {\r
-                        return call_user_func_array($function, array($args, $this));\r
-                    }\r
-                }\r
-                if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {\r
-                    $plugin = 'smarty_compiler_' . $tag;\r
-                    if (is_callable($plugin)) {\r
-                        return $plugin($args, $this->smarty);\r
-                    }\r
-                    if (class_exists($plugin, false)) {\r
-                        $plugin_object = new $plugin;\r
-                        if (method_exists($plugin_object, 'compile')) {\r
-                            return $plugin_object->compile($args, $this);\r
-                        }\r
-                    }\r
-                    throw new SmartyException("Plugin \"{$tag}\" not callable");\r
-                }\r
-            }\r
-            $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno);\r
-        }\r
-    }\r
-\r
-    /**\r
-     * lazy loads internal compile plugin for tag and calls the compile methode\r
-     *\r
-     * compile objects cached for reuse.\r
-     * class name format:  Smarty_Internal_Compile_TagName\r
-     * plugin filename format: Smarty_Internal_Tagname.php\r
-     *\r
-     * @param string $tag   tag name\r
-     * @param array $args   list of tag attributes\r
-     * @param mixed $param1 optional parameter\r
-     * @param mixed $param2 optional parameter\r
-     * @param mixed $param3 optional parameter\r
-     * @return string compiled code\r
-     */\r
-    public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null) {\r
-        // re-use object if already exists\r
-        if (isset(self::$_tag_objects[$tag])) {\r
-            // compile this tag\r
-            return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);\r
-        }\r
-        // lazy load internal compiler plugin\r
-        $class_name = 'Smarty_Internal_Compile_' . $tag;\r
-        if ($this->smarty->loadPlugin($class_name)) {\r
-            // check if tag allowed by security\r
-            if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {\r
-                // use plugin if found\r
-                self::$_tag_objects[$tag] = new $class_name;\r
-                // compile this tag\r
-                return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);\r
-            }\r
-        }\r
-        // no internal compile plugin for this tag\r
-        return false;\r
-    }\r
-\r
-    /**\r
-     * Check for plugins and return function name\r
-     *\r
-     * @param string $pugin_name  name of plugin or function\r
-     * @param string $plugin_type type of plugin\r
-     * @return string call name of function\r
-     */\r
-    public function getPlugin($plugin_name, $plugin_type) {\r
-        $function = null;\r
-        if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
-            if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {\r
-                $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];\r
-            } else if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {\r
-                $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type];\r
-                $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];\r
-            }\r
-        } else {\r
-            if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {\r
-                $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];\r
-            } else if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {\r
-                $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type];\r
-                $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];\r
-            }\r
-        }\r
-        if (isset($function)) {\r
-            if ($plugin_type == 'modifier') {\r
-                $this->modifier_plugins[$plugin_name] = true;\r
-            }\r
-            return $function;\r
-        }\r
-        // loop through plugin dirs and find the plugin\r
-        $function = 'smarty_' . $plugin_type . '_' . $plugin_name;\r
-        $file = $this->smarty->loadPlugin($function, false);\r
-\r
-        if (is_string($file)) {\r
-            if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
-                $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file;\r
-                $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function;\r
-            } else {\r
-                $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file;\r
-                $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function;\r
-            }\r
-            if ($plugin_type == 'modifier') {\r
-                $this->modifier_plugins[$plugin_name] = true;\r
-            }\r
-            return $function;\r
-        }\r
-        if (is_callable($function)) {\r
-            // plugin function is defined in the script\r
-            return $function;\r
-        }\r
-        return false;\r
-    }\r
-\r
-    /**\r
-     * Check for plugins by default plugin handler\r
-     *\r
-     * @param string $tag         name of tag\r
-     * @param string $plugin_type type of plugin\r
-     * @return boolean true if found\r
-     */\r
-    public function getPluginFromDefaultHandler($tag, $plugin_type) {\r
-        $callback = null;\r
-        $script = null;\r
-        $cacheable = true;\r
-        $result = call_user_func_array(\r
-                $this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)\r
-        );\r
-        if ($result) {\r
-            $this->tag_nocache = $this->tag_nocache || !$cacheable;\r
-            if ($script !== null) {\r
-                if (is_file($script)) {\r
-                    if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
-                        $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script;\r
-                        $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback;\r
-                    } else {\r
-                        $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script;\r
-                        $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback;\r
-                    }\r
-                    include_once $script;\r
-                } else {\r
-                    $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found");\r
-                }\r
-            }\r
-            if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) {\r
-                $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name");\r
-            }\r
-            if (is_callable($callback)) {\r
-                $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array());\r
-                return true;\r
-            } else {\r
-                $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable");\r
-            }\r
-        }\r
-        return false;\r
-    }\r
-\r
-    /**\r
-     * Inject inline code for nocache template sections\r
-     *\r
-     * This method gets the content of each template element from the parser.\r
-     * If the content is compiled code and it should be not cached the code is injected\r
-     * into the rendered output.\r
-     *\r
-     * @param string  $content content of template element\r
-     * @param boolean $is_code true if content is compiled code\r
-     * @return string content\r
-     */\r
-    public function processNocacheCode($content, $is_code) {\r
-        // If the template is not evaluated and we have a nocache section and or a nocache tag\r
-        if ($is_code && !empty($content)) {\r
-            // generate replacement code\r
-            if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing &&\r
-                    ($this->nocache || $this->tag_nocache || $this->forceNocache == 2)) {\r
-                $this->template->has_nocache_code = true;\r
-                $_output = str_replace("'", "\'", $content);\r
-                $_output = str_replace('\\\\', '\\\\\\\\', $_output);\r
-                $_output = str_replace("^#^", "'", $_output);\r
-                $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";\r
-                // make sure we include modifer plugins for nocache code\r
-                foreach ($this->modifier_plugins as $plugin_name => $dummy) {\r
-                    if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) {\r
-                        $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier'];\r
-                    }\r
-                }\r
-            } else {\r
-                $_output = $content;\r
-            }\r
-        } else {\r
-            $_output = $content;\r
-        }\r
-        $this->modifier_plugins = array();\r
-        $this->suppressNocacheProcessing = false;\r
-        $this->tag_nocache = false;\r
-        return $_output;\r
-    }\r
-\r
-    /**\r
-     * display compiler error messages without dying\r
-     *\r
-     * If parameter $args is empty it is a parser detected syntax error.\r
-     * In this case the parser is called to obtain information about expected tokens.\r
-     *\r
-     * If parameter $args contains a string this is used as error message\r
-     *\r
-     * @param string $args individual error message or null\r
-     * @param string $line line-number\r
-     * @throws SmartyCompilerException when an unexpected token is found\r
-     */\r
-    public function trigger_template_error($args = null, $line = null) {\r
-        // get template source line which has error\r
-        if (!isset($line)) {\r
-            $line = $this->lex->line;\r
-        }\r
-        $match = preg_split("/\n/", $this->lex->data);\r
-        $error_text = 'Syntax Error in template "' . $this->template->source->filepath . '"  on line ' . $line . ' "' . htmlspecialchars(trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1]))) . '" ';\r
-        if (isset($args)) {\r
-            // individual error message\r
-            $error_text .= $args;\r
-        } else {\r
-            // expected token from parser\r
-            $error_text .= ' - Unexpected "' . $this->lex->value . '"';\r
-            if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) {\r
-                foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {\r
-                    $exp_token = $this->parser->yyTokenName[$token];\r
-                    if (isset($this->lex->smarty_token_names[$exp_token])) {\r
-                        // token type from lexer\r
-                        $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"';\r
-                    } else {\r
-                        // otherwise internal token name\r
-                        $expect[] = $this->parser->yyTokenName[$token];\r
-                    }\r
-                }\r
-                $error_text .= ', expected one of: ' . implode(' , ', $expect);\r
-            }\r
-        }\r
-        throw new SmartyCompilerException($error_text);\r
-    }\r
-\r
-}\r
-\r
-?>
\ No newline at end of file
+<?php
+
+/**
+ * Smarty Internal Plugin Smarty Template Compiler Base
+ * This file contains the basic classes and methods for compiling Smarty templates with lexer/parser
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
+/**
+ * Main abstract compiler class
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ */
+abstract class Smarty_Internal_TemplateCompilerBase
+{
+    /**
+     * hash for nocache sections
+     *
+     * @var mixed
+     */
+    private $nocache_hash = null;
+
+    /**
+     * suppress generation of nocache code
+     *
+     * @var bool
+     */
+    public $suppressNocacheProcessing = false;
+
+    /**
+     * suppress generation of merged template code
+     *
+     * @var bool
+     */
+    public $suppressMergedTemplates = false;
+
+    /**
+     * compile tag objects
+     *
+     * @var array
+     */
+    public static $_tag_objects = array();
+
+    /**
+     * tag stack
+     *
+     * @var array
+     */
+    public $_tag_stack = array();
+
+    /**
+     * current template
+     *
+     * @var Smarty_Internal_Template
+     */
+    public $template = null;
+
+    /**
+     * merged templates
+     *
+     * @var array
+     */
+    public $merged_templates = array();
+
+    /**
+     * sources which must be compiled
+     *
+     * @var array
+     */
+    public $sources = array();
+
+    /**
+     * flag that we are inside {block}
+     *
+     * @var bool
+     */
+    public $inheritance = false;
+
+    /**
+     * flag when compiling inheritance child template
+     *
+     * @var bool
+     */
+    public $inheritance_child = false;
+
+    /**
+     * uid of templates called by {extends} for recursion check
+     *
+     * @var array
+     */
+    public $extends_uid = array();
+
+    /**
+     * source line offset for error messages
+     *
+     * @var int
+     */
+    public $trace_line_offset = 0;
+
+    /**
+     * trace uid
+     *
+     * @var string
+     */
+    public $trace_uid = '';
+
+    /**
+     * trace file path
+     *
+     * @var string
+     */
+    public $trace_filepath = '';
+    /**
+     * stack for tracing file and line of nested {block} tags
+     *
+     * @var array
+     */
+    public $trace_stack = array();
+
+    /**
+     * plugins loaded by default plugin handler
+     *
+     * @var array
+     */
+    public $default_handler_plugins = array();
+
+    /**
+     * saved preprocessed modifier list
+     *
+     * @var mixed
+     */
+    public $default_modifier_list = null;
+
+    /**
+     * force compilation of complete template as nocache
+     *
+     * @var boolean
+     */
+    public $forceNocache = false;
+
+    /**
+     * suppress Smarty header code in compiled template
+     *
+     * @var bool
+     */
+    public $suppressHeader = false;
+
+    /**
+     * suppress template property header code in compiled template
+     *
+     * @var bool
+     */
+    public $suppressTemplatePropertyHeader = false;
+
+    /**
+     * suppress pre and post filter
+     *
+     * @var bool
+     */
+    public $suppressFilter = false;
+
+    /**
+     * flag if compiled template file shall we written
+     *
+     * @var bool
+     */
+    public $write_compiled_code = true;
+
+    /**
+     * flag if currently a template function is compiled
+     *
+     * @var bool
+     */
+    public $compiles_template_function = false;
+
+    /**
+     * called subfuntions from template function
+     *
+     * @var array
+     */
+    public $called_functions = array();
+
+    /**
+     * flags for used modifier plugins
+     *
+     * @var array
+     */
+    public $modifier_plugins = array();
+
+    /**
+     * type of already compiled modifier
+     *
+     * @var array
+     */
+    public $known_modifier_type = array();
+
+    /**
+     * method to compile a Smarty template
+     *
+     * @param  mixed $_content template source
+     *
+     * @return bool  true if compiling succeeded, false if it failed
+     */
+    abstract protected function doCompile($_content);
+
+    /**
+     * Initialize compiler
+     */
+    public function __construct()
+    {
+        $this->nocache_hash = str_replace(array('.', ','), '-', uniqid(rand(), true));
+    }
+
+    /**
+     * Method to compile a Smarty template
+     *
+     * @param  Smarty_Internal_Template $template template object to compile
+     * @param  bool                     $nocache  true is shall be compiled in nocache mode
+     *
+     * @return bool             true if compiling succeeded, false if it failed
+     */
+    public function compileTemplate(Smarty_Internal_Template $template, $nocache = false)
+    {
+        if (empty($template->properties['nocache_hash'])) {
+            $template->properties['nocache_hash'] = $this->nocache_hash;
+        } else {
+            $this->nocache_hash = $template->properties['nocache_hash'];
+        }
+        // flag for nochache sections
+        $this->nocache = $nocache;
+        $this->tag_nocache = false;
+        // save template object in compiler class
+        $this->template = $template;
+        // reset has nocache code flag
+        $this->template->has_nocache_code = false;
+        $save_source = $this->template->source;
+        // template header code
+        $template_header = '';
+        if (!$this->suppressHeader) {
+            $template_header .= "<?php /* Smarty version " . Smarty::SMARTY_VERSION . ", created on " . strftime("%Y-%m-%d %H:%M:%S") . "\n";
+            $template_header .= "         compiled from \"" . $this->template->source->filepath . "\" */ ?>\n";
+        }
+
+        if (empty($this->template->source->components)) {
+            $this->sources = array($template->source);
+        } else {
+            // we have array of inheritance templates by extends: resource
+            $this->sources = array_reverse($template->source->components);
+        }
+        $loop = 0;
+        // the $this->sources array can get additional elements while compiling by the {extends} tag
+        while ($this->template->source = array_shift($this->sources)) {
+            $this->smarty->_current_file = $this->template->source->filepath;
+            if ($this->smarty->debugging) {
+                Smarty_Internal_Debug::start_compile($this->template);
+            }
+            $no_sources = count($this->sources);
+            if ($loop || $no_sources) {
+                $this->template->properties['file_dependency'][$this->template->source->uid] = array($this->template->source->filepath, $this->template->source->timestamp, $this->template->source->type);
+            }
+            $loop ++;
+            if ($no_sources) {
+                $this->inheritance_child = true;
+            } else {
+                $this->inheritance_child = false;
+            }
+            do {
+                $_compiled_code = '';
+                // flag for aborting current and start recompile
+                $this->abort_and_recompile = false;
+                // get template source
+                $_content = $this->template->source->content;
+                if ($_content != '') {
+                    // run prefilter if required
+                    if ((isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) && !$this->suppressFilter) {
+                        $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $template);
+                    }
+                    // call compiler
+                    $_compiled_code = $this->doCompile($_content);
+                }
+            } while ($this->abort_and_recompile);
+            if ($this->smarty->debugging) {
+                Smarty_Internal_Debug::end_compile($this->template);
+            }
+        }
+        // restore source
+        $this->template->source = $save_source;
+        unset($save_source);
+        $this->smarty->_current_file = $this->template->source->filepath;
+        // free memory
+        unset($this->parser->root_buffer, $this->parser->current_buffer, $this->parser, $this->lex, $this->template);
+        self::$_tag_objects = array();
+        // return compiled code to template object
+        $merged_code = '';
+        if (!$this->suppressMergedTemplates && !empty($this->merged_templates)) {
+            foreach ($this->merged_templates as $code) {
+                $merged_code .= $code;
+            }
+        }
+        // run postfilter if required on compiled template code
+        if ((isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) && !$this->suppressFilter && $_compiled_code != '') {
+            $_compiled_code = Smarty_Internal_Filter_Handler::runFilter('post', $_compiled_code, $template);
+        }
+        if ($this->suppressTemplatePropertyHeader) {
+            $code = $_compiled_code . $merged_code;
+        } else {
+            $code = $template_header . $template->createTemplateCodeFrame($_compiled_code) . $merged_code;
+        }
+        // unset content because template inheritance could have replace source with parent code
+        unset ($template->source->content);
+
+        return $code;
+    }
+
+    /**
+     * Compile Tag
+     * This is a call back from the lexer/parser
+     * It executes the required compile plugin for the Smarty tag
+     *
+     * @param  string $tag       tag name
+     * @param  array  $args      array with tag attributes
+     * @param  array  $parameter array with compilation parameter
+     *
+     * @throws SmartyCompilerException
+     * @throws SmartyException
+     * @return string compiled code
+     */
+    public function compileTag($tag, $args, $parameter = array())
+    {
+        // $args contains the attributes parsed and compiled by the lexer/parser
+        // assume that tag does compile into code, but creates no HTML output
+        $this->has_code = true;
+        $this->has_output = false;
+        // log tag/attributes
+        if (isset($this->smarty->get_used_tags) && $this->smarty->get_used_tags) {
+            $this->template->used_tags[] = array($tag, $args);
+        }
+        // check nocache option flag
+        if (in_array("'nocache'", $args) || in_array(array('nocache' => 'true'), $args)
+            || in_array(array('nocache' => '"true"'), $args) || in_array(array('nocache' => "'true'"), $args)
+        ) {
+            $this->tag_nocache = true;
+        }
+        // compile the smarty tag (required compile classes to compile the tag are autoloaded)
+        if (($_output = $this->callTagCompiler($tag, $args, $parameter)) === false) {
+            if (isset($this->smarty->template_functions[$tag])) {
+                // template defined by {template} tag
+                $args['_attr']['name'] = "'" . $tag . "'";
+                $_output = $this->callTagCompiler('call', $args, $parameter);
+            }
+        }
+        if ($_output !== false) {
+            if ($_output !== true) {
+                // did we get compiled code
+                if ($this->has_code) {
+                    // Does it create output?
+                    if ($this->has_output) {
+                        $_output .= "\n";
+                    }
+                    // return compiled code
+                    return $_output;
+                }
+            }
+            // tag did not produce compiled code
+            return null;
+        } else {
+            // map_named attributes
+            if (isset($args['_attr'])) {
+                foreach ($args['_attr'] as $key => $attribute) {
+                    if (is_array($attribute)) {
+                        $args = array_merge($args, $attribute);
+                    }
+                }
+            }
+            // not an internal compiler tag
+            if (strlen($tag) < 6 || substr($tag, - 5) != 'close') {
+                // check if tag is a registered object
+                if (isset($this->smarty->registered_objects[$tag]) && isset($parameter['object_method'])) {
+                    $method = $parameter['object_method'];
+                    if (!in_array($method, $this->smarty->registered_objects[$tag][3]) &&
+                        (empty($this->smarty->registered_objects[$tag][1]) || in_array($method, $this->smarty->registered_objects[$tag][1]))
+                    ) {
+                        return $this->callTagCompiler('private_object_function', $args, $parameter, $tag, $method);
+                    } elseif (in_array($method, $this->smarty->registered_objects[$tag][3])) {
+                        return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method);
+                    } else {
+                        // throw exception
+                        $this->trigger_template_error('not allowed method "' . $method . '" in registered object "' . $tag . '"', $this->lex->taglineno);
+                    }
+                }
+                // check if tag is registered
+                foreach (array(Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK) as $plugin_type) {
+                    if (isset($this->smarty->registered_plugins[$plugin_type][$tag])) {
+                        // if compiler function plugin call it now
+                        if ($plugin_type == Smarty::PLUGIN_COMPILER) {
+                            $new_args = array();
+                            foreach ($args as $key => $mixed) {
+                                if (is_array($mixed)) {
+                                    $new_args = array_merge($new_args, $mixed);
+                                } else {
+                                    $new_args[$key] = $mixed;
+                                }
+                            }
+                            if (!$this->smarty->registered_plugins[$plugin_type][$tag][1]) {
+                                $this->tag_nocache = true;
+                            }
+                            $function = $this->smarty->registered_plugins[$plugin_type][$tag][0];
+                            if (!is_array($function)) {
+                                return $function($new_args, $this);
+                            } elseif (is_object($function[0])) {
+                                return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);
+                            } else {
+                                return call_user_func_array($function, array($new_args, $this));
+                            }
+                        }
+                        // compile registered function or block function
+                        if ($plugin_type == Smarty::PLUGIN_FUNCTION || $plugin_type == Smarty::PLUGIN_BLOCK) {
+                            return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);
+                        }
+                    }
+                }
+                // check plugins from plugins folder
+                foreach ($this->smarty->plugin_search_order as $plugin_type) {
+                    if ($plugin_type == Smarty::PLUGIN_COMPILER && $this->smarty->loadPlugin('smarty_compiler_' . $tag) && (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))) {
+                        $plugin = 'smarty_compiler_' . $tag;
+                        if (is_callable($plugin)) {
+                            // convert arguments format for old compiler plugins
+                            $new_args = array();
+                            foreach ($args as $key => $mixed) {
+                                if (is_array($mixed)) {
+                                    $new_args = array_merge($new_args, $mixed);
+                                } else {
+                                    $new_args[$key] = $mixed;
+                                }
+                            }
+
+                            return $plugin($new_args, $this->smarty);
+                        }
+                        if (class_exists($plugin, false)) {
+                            $plugin_object = new $plugin;
+                            if (method_exists($plugin_object, 'compile')) {
+                                return $plugin_object->compile($args, $this);
+                            }
+                        }
+                        throw new SmartyException("Plugin \"{$tag}\" not callable");
+                    } else {
+                        if ($function = $this->getPlugin($tag, $plugin_type)) {
+                            if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
+                                return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $parameter, $tag, $function);
+                            }
+                        }
+                    }
+                }
+                if (is_callable($this->smarty->default_plugin_handler_func)) {
+                    $found = false;
+                    // look for already resolved tags
+                    foreach ($this->smarty->plugin_search_order as $plugin_type) {
+                        if (isset($this->default_handler_plugins[$plugin_type][$tag])) {
+                            $found = true;
+                            break;
+                        }
+                    }
+                    if (!$found) {
+                        // call default handler
+                        foreach ($this->smarty->plugin_search_order as $plugin_type) {
+                            if ($this->getPluginFromDefaultHandler($tag, $plugin_type)) {
+                                $found = true;
+                                break;
+                            }
+                        }
+                    }
+                    if ($found) {
+                        // if compiler function plugin call it now
+                        if ($plugin_type == Smarty::PLUGIN_COMPILER) {
+                            $new_args = array();
+                            foreach ($args as $mixed) {
+                                $new_args = array_merge($new_args, $mixed);
+                            }
+                            $function = $this->default_handler_plugins[$plugin_type][$tag][0];
+                            if (!is_array($function)) {
+                                return $function($new_args, $this);
+                            } elseif (is_object($function[0])) {
+                                return $this->default_handler_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this);
+                            } else {
+                                return call_user_func_array($function, array($new_args, $this));
+                            }
+                        } else {
+                            return $this->callTagCompiler('private_registered_' . $plugin_type, $args, $parameter, $tag);
+                        }
+                    }
+                }
+            } else {
+                // compile closing tag of block function
+                $base_tag = substr($tag, 0, - 5);
+                // check if closing tag is a registered object
+                if (isset($this->smarty->registered_objects[$base_tag]) && isset($parameter['object_method'])) {
+                    $method = $parameter['object_method'];
+                    if (in_array($method, $this->smarty->registered_objects[$base_tag][3])) {
+                        return $this->callTagCompiler('private_object_block_function', $args, $parameter, $tag, $method);
+                    } else {
+                        // throw exception
+                        $this->trigger_template_error('not allowed closing tag method "' . $method . '" in registered object "' . $base_tag . '"', $this->lex->taglineno);
+                    }
+                }
+                // registered block tag ?
+                if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_BLOCK][$base_tag]) || isset($this->default_handler_plugins[Smarty::PLUGIN_BLOCK][$base_tag])) {
+                    return $this->callTagCompiler('private_registered_block', $args, $parameter, $tag);
+                }
+                // block plugin?
+                if ($function = $this->getPlugin($base_tag, Smarty::PLUGIN_BLOCK)) {
+                    return $this->callTagCompiler('private_block_plugin', $args, $parameter, $tag, $function);
+                }
+                // registered compiler plugin ?
+                if (isset($this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag])) {
+                    // if compiler function plugin call it now
+                    $args = array();
+                    if (!$this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][1]) {
+                        $this->tag_nocache = true;
+                    }
+                    $function = $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0];
+                    if (!is_array($function)) {
+                        return $function($args, $this);
+                    } elseif (is_object($function[0])) {
+                        return $this->smarty->registered_plugins[Smarty::PLUGIN_COMPILER][$tag][0][0]->$function[1]($args, $this);
+                    } else {
+                        return call_user_func_array($function, array($args, $this));
+                    }
+                }
+                if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {
+                    $plugin = 'smarty_compiler_' . $tag;
+                    if (is_callable($plugin)) {
+                        return $plugin($args, $this->smarty);
+                    }
+                    if (class_exists($plugin, false)) {
+                        $plugin_object = new $plugin;
+                        if (method_exists($plugin_object, 'compile')) {
+                            return $plugin_object->compile($args, $this);
+                        }
+                    }
+                    throw new SmartyException("Plugin \"{$tag}\" not callable");
+                }
+            }
+            $this->trigger_template_error("unknown tag \"" . $tag . "\"", $this->lex->taglineno);
+        }
+    }
+
+    /**
+     * lazy loads internal compile plugin for tag and calls the compile method
+     * compile objects cached for reuse.
+     * class name format:  Smarty_Internal_Compile_TagName
+     * plugin filename format: Smarty_Internal_Tagname.php
+     *
+     * @param  string $tag    tag name
+     * @param  array  $args   list of tag attributes
+     * @param  mixed  $param1 optional parameter
+     * @param  mixed  $param2 optional parameter
+     * @param  mixed  $param3 optional parameter
+     *
+     * @return string compiled code
+     */
+    public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null)
+    {
+        // re-use object if already exists
+        if (isset(self::$_tag_objects[$tag])) {
+            // compile this tag
+            return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);
+        }
+        // lazy load internal compiler plugin
+        $class_name = 'Smarty_Internal_Compile_' . $tag;
+        if ($this->smarty->loadPlugin($class_name)) {
+            // check if tag allowed by security
+            if (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this)) {
+                // use plugin if found
+                self::$_tag_objects[$tag] = new $class_name;
+                // compile this tag
+                return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);
+            }
+        }
+        // no internal compile plugin for this tag
+        return false;
+    }
+
+    /**
+     * Check for plugins and return function name
+     *
+     * @param         $plugin_name
+     * @param  string $plugin_type type of plugin
+     *
+     * @return string call name of function
+     */
+    public function getPlugin($plugin_name, $plugin_type)
+    {
+        $function = null;
+        if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
+            if (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {
+                $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];
+            } elseif (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {
+                $this->template->required_plugins['nocache'][$plugin_name][$plugin_type] = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type];
+                $function = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'];
+            }
+        } else {
+            if (isset($this->template->required_plugins['compiled'][$plugin_name][$plugin_type])) {
+                $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];
+            } elseif (isset($this->template->required_plugins['nocache'][$plugin_name][$plugin_type])) {
+                $this->template->required_plugins['compiled'][$plugin_name][$plugin_type] = $this->template->required_plugins['nocache'][$plugin_name][$plugin_type];
+                $function = $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'];
+            }
+        }
+        if (isset($function)) {
+            if ($plugin_type == 'modifier') {
+                $this->modifier_plugins[$plugin_name] = true;
+            }
+
+            return $function;
+        }
+        // loop through plugin dirs and find the plugin
+        $function = 'smarty_' . $plugin_type . '_' . $plugin_name;
+        $file = $this->smarty->loadPlugin($function, false);
+
+        if (is_string($file)) {
+            if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
+                $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['file'] = $file;
+                $this->template->required_plugins['nocache'][$plugin_name][$plugin_type]['function'] = $function;
+            } else {
+                $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['file'] = $file;
+                $this->template->required_plugins['compiled'][$plugin_name][$plugin_type]['function'] = $function;
+            }
+            if ($plugin_type == 'modifier') {
+                $this->modifier_plugins[$plugin_name] = true;
+            }
+
+            return $function;
+        }
+        if (is_callable($function)) {
+            // plugin function is defined in the script
+            return $function;
+        }
+
+        return false;
+    }
+
+    /**
+     * Check for plugins by default plugin handler
+     *
+     * @param  string $tag         name of tag
+     * @param  string $plugin_type type of plugin
+     *
+     * @return boolean true if found
+     */
+    public function getPluginFromDefaultHandler($tag, $plugin_type)
+    {
+        $callback = null;
+        $script = null;
+        $cacheable = true;
+        $result = call_user_func_array(
+            $this->smarty->default_plugin_handler_func, array($tag, $plugin_type, $this->template, &$callback, &$script, &$cacheable)
+        );
+        if ($result) {
+            $this->tag_nocache = $this->tag_nocache || !$cacheable;
+            if ($script !== null) {
+                if (is_file($script)) {
+                    if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {
+                        $this->template->required_plugins['nocache'][$tag][$plugin_type]['file'] = $script;
+                        $this->template->required_plugins['nocache'][$tag][$plugin_type]['function'] = $callback;
+                    } else {
+                        $this->template->required_plugins['compiled'][$tag][$plugin_type]['file'] = $script;
+                        $this->template->required_plugins['compiled'][$tag][$plugin_type]['function'] = $callback;
+                    }
+                    include_once $script;
+                } else {
+                    $this->trigger_template_error("Default plugin handler: Returned script file \"{$script}\" for \"{$tag}\" not found");
+                }
+            }
+            if (!is_string($callback) && !(is_array($callback) && is_string($callback[0]) && is_string($callback[1]))) {
+                $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" must be a static function name or array of class and function name");
+            }
+            if (is_callable($callback)) {
+                $this->default_handler_plugins[$plugin_type][$tag] = array($callback, true, array());
+
+                return true;
+            } else {
+                $this->trigger_template_error("Default plugin handler: Returned callback for \"{$tag}\" not callable");
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Inject inline code for nocache template sections
+     * This method gets the content of each template element from the parser.
+     * If the content is compiled code and it should be not cached the code is injected
+     * into the rendered output.
+     *
+     * @param  string  $content content of template element
+     * @param  boolean $is_code true if content is compiled code
+     *
+     * @return string  content
+     */
+    public function processNocacheCode($content, $is_code)
+    {
+        // If the template is not evaluated and we have a nocache section and or a nocache tag
+        if ($is_code && !empty($content)) {
+            // generate replacement code
+            if ((!($this->template->source->recompiled) || $this->forceNocache) && $this->template->caching && !$this->suppressNocacheProcessing &&
+                ($this->nocache || $this->tag_nocache)
+            ) {
+                $this->template->has_nocache_code = true;
+                $_output = addcslashes($content, '\'\\');
+                $_output = str_replace("^#^", "'", $_output);
+                $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>\n";
+                // make sure we include modifier plugins for nocache code
+                foreach ($this->modifier_plugins as $plugin_name => $dummy) {
+                    if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) {
+                        $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier'];
+                    }
+                }
+            } else {
+                $_output = $content;
+            }
+        } else {
+            $_output = $content;
+        }
+        $this->modifier_plugins = array();
+        $this->suppressNocacheProcessing = false;
+        $this->tag_nocache = false;
+
+        return $_output;
+    }
+
+    /**
+     *  push current file and line offset on stack for tracing {block} source lines
+     *
+     * @param string      $file  new filename
+     * @param string      $uid   uid of file
+     * @param int         $line  line offset to source
+     * @param bool $debug false debug end_compile shall not be called
+     */
+    public function pushTrace($file, $uid, $line, $debug = true)
+    {
+        if ($this->smarty->debugging && $debug) {
+            Smarty_Internal_Debug::end_compile($this->template);
+        }
+        array_push($this->trace_stack, array($this->smarty->_current_file, $this->trace_filepath, $this->trace_uid, $this->trace_line_offset));
+        $this->trace_filepath = $this->smarty->_current_file = $file;
+        $this->trace_uid = $uid;
+        $this->trace_line_offset = $line;
+        if ($this->smarty->debugging) {
+            Smarty_Internal_Debug::start_compile($this->template);
+        }
+    }
+
+    /**
+     *  restore file and line offset
+
+     */
+    public function popTrace()
+    {
+        if ($this->smarty->debugging) {
+            Smarty_Internal_Debug::end_compile($this->template);
+        }
+        $r = array_pop($this->trace_stack);
+        $this->smarty->_current_file = $r[0];
+        $this->trace_filepath = $r[1];
+        $this->trace_uid = $r[2];
+        $this->trace_line_offset = $r[3];
+        if ($this->smarty->debugging) {
+            Smarty_Internal_Debug::start_compile($this->template);
+        }
+    }
+
+    /**
+     * display compiler error messages without dying
+     * If parameter $args is empty it is a parser detected syntax error.
+     * In this case the parser is called to obtain information about expected tokens.
+     * If parameter $args contains a string this is used as error message
+     *
+     * @param  string $args individual error message or null
+     * @param  string $line line-number
+     *
+     * @throws SmartyCompilerException when an unexpected token is found
+     */
+    public function trigger_template_error($args = null, $line = null)
+    {
+        // get template source line which has error
+        if (!isset($line)) {
+            $line = $this->lex->line;
+        }
+        //        $line += $this->trace_line_offset;
+        $match = preg_split("/\n/", $this->lex->data);
+        $error_text = 'Syntax error in template "' . (empty($this->trace_filepath) ? $this->template->source->filepath : $this->trace_filepath) . '"  on line ' . ($line + $this->trace_line_offset) . ' "' . trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1])) . '" ';
+        if (isset($args)) {
+            // individual error message
+            $error_text .= $args;
+        } else {
+            // expected token from parser
+            $error_text .= ' - Unexpected "' . $this->lex->value . '"';
+            if (count($this->parser->yy_get_expected_tokens($this->parser->yymajor)) <= 4) {
+                foreach ($this->parser->yy_get_expected_tokens($this->parser->yymajor) as $token) {
+                    $exp_token = $this->parser->yyTokenName[$token];
+                    if (isset($this->lex->smarty_token_names[$exp_token])) {
+                        // token type from lexer
+                        $expect[] = '"' . $this->lex->smarty_token_names[$exp_token] . '"';
+                    } else {
+                        // otherwise internal token name
+                        $expect[] = $this->parser->yyTokenName[$token];
+                    }
+                }
+                $error_text .= ', expected one of: ' . implode(' , ', $expect);
+            }
+        }
+        $e = new SmartyCompilerException($error_text);
+        $e->line = $line;
+        $e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[$line - 1]));
+        $e->desc = $args;
+        $e->template = $this->template->source->filepath;
+        throw $e;
+    }
+}
index bfc413aef3951e6c1660b098c5b32273443f1534..a94b5f1e3eea1d091c89432a3ecfbaf5cf31a4a9 100644 (file)
@@ -1,15 +1,16 @@
 <?php
 /**
-* Smarty Internal Plugin Templatelexer
-*
-* This is the lexer to break the template source into tokens
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
+ * Smarty Internal Plugin Templatelexer
+ * This is the lexer to break the template source into tokens
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
+
 /**
-* Smarty Internal Plugin Templatelexer
-*/
+ * Smarty Internal Plugin Templatelexer
+ */
 class Smarty_Internal_Templatelexer
 {
     public $data;
@@ -21,154 +22,170 @@ class Smarty_Internal_Templatelexer
     public $taglineno;
     public $state = 1;
     private $heredoc_id_stack = Array();
-    public $smarty_token_names = array (               // Text for parser error messages
-                               'IDENTITY'      => '===',
-                               'NONEIDENTITY'  => '!==',
-                               'EQUALS'        => '==',
-                               'NOTEQUALS'     => '!=',
-                               'GREATEREQUAL' => '(>=,ge)',
-                               'LESSEQUAL' => '(<=,le)',
-                               'GREATERTHAN' => '(>,gt)',
-                               'LESSTHAN' => '(<,lt)',
-                               'MOD' => '(%,mod)',
-                               'NOT'                   => '(!,not)',
-                               'LAND'          => '(&&,and)',
-                               'LOR'                   => '(||,or)',
-                               'LXOR'                  => 'xor',
-                               'OPENP'         => '(',
-                               'CLOSEP'        => ')',
-                               'OPENB'         => '[',
-                               'CLOSEB'        => ']',
-                               'PTR'                   => '->',
-                               'APTR'          => '=>',
-                               'EQUAL'         => '=',
-                               'NUMBER'        => 'number',
-                               'UNIMATH'       => '+" , "-',
-                               'MATH'          => '*" , "/" , "%',
-                               'INCDEC'        => '++" , "--',
-                               'SPACE'         => ' ',
-                               'DOLLAR'        => '$',
-                               'SEMICOLON' => ';',
-                               'COLON'         => ':',
-                               'DOUBLECOLON'           => '::',
-                               'AT'            => '@',
-                               'HATCH'         => '#',
-                               'QUOTE'         => '"',
-                               'BACKTICK'              => '`',
-                               'VERT'          => '|',
-                               'DOT'                   => '.',
-                               'COMMA'         => '","',
-                               'ANDSYM'                => '"&"',
-                               'QMARK'         => '"?"',
-                               'ID'                    => 'identifier',
-                               'TEXT'          => 'text',
-                               'FAKEPHPSTARTTAG'       => 'Fake PHP start tag',
-                               'PHPSTARTTAG'   => 'PHP start tag',
-                               'PHPENDTAG'     => 'PHP end tag',
-                                               'LITERALSTART'  => 'Literal start',
-                                               'LITERALEND'    => 'Literal end',
-                               'LDELSLASH' => 'closing tag',
-                               'COMMENT' => 'comment',
-                               'AS' => 'as',
-                               'TO' => 'to',
-                               );
-
-
-    function __construct($data,$compiler)
-    {
-//        $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data);
+    public $yyTraceFILE;
+    public $yyTracePrompt;
+    public $state_name = array(1 => 'TEXT', 2 => 'SMARTY', 3 => 'LITERAL', 4 => 'DOUBLEQUOTEDSTRING', 5 => 'CHILDBODY');
+    public $smarty_token_names = array( // Text for parser error messages
+                                        'IDENTITY'        => '===',
+                                        'NONEIDENTITY'    => '!==',
+                                        'EQUALS'          => '==',
+                                        'NOTEQUALS'       => '!=',
+                                        'GREATEREQUAL'    => '(>=,ge)',
+                                        'LESSEQUAL'       => '(<=,le)',
+                                        'GREATERTHAN'     => '(>,gt)',
+                                        'LESSTHAN'        => '(<,lt)',
+                                        'MOD'             => '(%,mod)',
+                                        'NOT'             => '(!,not)',
+                                        'LAND'            => '(&&,and)',
+                                        'LOR'             => '(||,or)',
+                                        'LXOR'            => 'xor',
+                                        'OPENP'           => '(',
+                                        'CLOSEP'          => ')',
+                                        'OPENB'           => '[',
+                                        'CLOSEB'          => ']',
+                                        'PTR'             => '->',
+                                        'APTR'            => '=>',
+                                        'EQUAL'           => '=',
+                                        'NUMBER'          => 'number',
+                                        'UNIMATH'         => '+" , "-',
+                                        'MATH'            => '*" , "/" , "%',
+                                        'INCDEC'          => '++" , "--',
+                                        'SPACE'           => ' ',
+                                        'DOLLAR'          => '$',
+                                        'SEMICOLON'       => ';',
+                                        'COLON'           => ':',
+                                        'DOUBLECOLON'     => '::',
+                                        'AT'              => '@',
+                                        'HATCH'           => '#',
+                                        'QUOTE'           => '"',
+                                        'BACKTICK'        => '`',
+                                        'VERT'            => '|',
+                                        'DOT'             => '.',
+                                        'COMMA'           => '","',
+                                        'ANDSYM'          => '"&"',
+                                        'QMARK'           => '"?"',
+                                        'ID'              => 'identifier',
+                                        'TEXT'            => 'text',
+                                        'FAKEPHPSTARTTAG' => 'Fake PHP start tag',
+                                        'PHPSTARTTAG'     => 'PHP start tag',
+                                        'PHPENDTAG'       => 'PHP end tag',
+                                        'LITERALSTART'    => 'Literal start',
+                                        'LITERALEND'      => 'Literal end',
+                                        'LDELSLASH'       => 'closing tag',
+                                        'COMMENT'         => 'comment',
+                                        'AS'              => 'as',
+                                        'TO'              => 'to',
+    );
+
+    function __construct($data, $compiler)
+    {
+        //        $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data);
         $this->data = $data;
         $this->counter = 0;
         $this->line = 1;
         $this->smarty = $compiler->smarty;
         $this->compiler = $compiler;
-        $this->ldel = preg_quote($this->smarty->left_delimiter,'/');
+        $this->ldel = preg_quote($this->smarty->left_delimiter, '/');
         $this->ldel_length = strlen($this->smarty->left_delimiter);
-        $this->rdel = preg_quote($this->smarty->right_delimiter,'/');
-        $this->smarty_token_names['LDEL'] =    $this->smarty->left_delimiter;
-        $this->smarty_token_names['RDEL'] =    $this->smarty->right_delimiter;
-        $this->mbstring_overload = ini_get('mbstring.func_overload') & 2;
-     }
+        $this->rdel = preg_quote($this->smarty->right_delimiter, '/');
+        $this->rdel_length = strlen($this->smarty->right_delimiter);
+        $this->smarty_token_names['LDEL'] = $this->smarty->left_delimiter;
+        $this->smarty_token_names['RDEL'] = $this->smarty->right_delimiter;
+    }
 
+    public function PrintTrace()
+    {
+        $this->yyTraceFILE = fopen('php://output', 'w');
+        $this->yyTracePrompt = '<br>';
+    }
 
     private $_yy_state = 1;
     private $_yy_stack = array();
 
-    function yylex()
+    public function yylex()
     {
         return $this->{'yylex' . $this->_yy_state}();
     }
 
-    function yypushstate($state)
+    public function yypushstate($state)
     {
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sState push %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
         array_push($this->_yy_stack, $this->_yy_state);
         $this->_yy_state = $state;
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
     }
 
-    function yypopstate()
+    public function yypopstate()
     {
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sState pop %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
         $this->_yy_state = array_pop($this->_yy_stack);
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%snew State %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
     }
 
-    function yybegin($state)
+    public function yybegin($state)
     {
         $this->_yy_state = $state;
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sState set %s\n", $this->yyTracePrompt, isset($this->state_name[$this->_yy_state]) ? $this->state_name[$this->_yy_state] : $this->_yy_state);
+        }
     }
 
-
-
-    function yylex1()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 1,
-              5 => 0,
-              6 => 0,
-              7 => 0,
-              8 => 0,
-              9 => 0,
-              10 => 0,
-              11 => 1,
-              13 => 0,
-              14 => 0,
-              15 => 0,
-              16 => 0,
-              17 => 0,
-              18 => 0,
-              19 => 0,
-              20 => 0,
-              21 => 0,
-              22 => 0,
-              23 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+    public function yylex1()
+    {
+        $tokenMap = array(
+            1  => 0,
+            2  => 1,
+            4  => 0,
+            5  => 0,
+            6  => 0,
+            7  => 1,
+            9  => 0,
+            10 => 0,
+            11 => 0,
+            12 => 0,
+            13 => 0,
+            14 => 0,
+            15 => 0,
+            16 => 0,
+            17 => 0,
+            18 => 0,
+            19 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/\G(".$this->ldel."[$]smarty\\.block\\.child".$this->rdel.")|\G(\\{\\})|\G(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|\G(".$this->ldel."strip".$this->rdel.")|\G(".$this->ldel."\\s{1,}strip\\s{1,}".$this->rdel.")|\G(".$this->ldel."\/strip".$this->rdel.")|\G(".$this->ldel."\\s{1,}\/strip\\s{1,}".$this->rdel.")|\G(".$this->ldel."\\s*literal\\s*".$this->rdel.")|\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s*setfilter\\s+)|\G(".$this->ldel."\\s{1,})|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(<%)|\G(%>)|\G([\S\s])/iS";
+        $yy_global_pattern = "/\G(\\{\\})|\G(" . $this->ldel . "\\*([\S\s]*?)\\*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(\\s*" . $this->rdel . ")|\G(<%)|\G(%>)|\G([\S\s])/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state TEXT');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state TEXT');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r1_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -177,300 +194,285 @@ class Smarty_Internal_Templatelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const TEXT = 1;
+
     function yy_r1_1($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILD;
+        $this->token = Smarty_Internal_Templateparser::TP_TEXT;
     }
+
     function yy_r1_2($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        $this->token = Smarty_Internal_Templateparser::TP_COMMENT;
     }
-    function yy_r1_3($yy_subpatterns)
+
+    function yy_r1_4($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_COMMENT;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
+        }
     }
+
     function yy_r1_5($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
+        }
     }
+
     function yy_r1_6($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal) {
-    $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-    $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+            $this->yypushstate(self::LITERAL);
+        }
     }
+
     function yy_r1_7($yy_subpatterns)
     {
 
-    $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
-    function yy_r1_8($yy_subpatterns)
-    {
 
-  if ($this->smarty->auto_literal) {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-    $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
-  }
-    }
     function yy_r1_9($yy_subpatterns)
     {
 
-   $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
-   $this->yypushstate(self::LITERAL);
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r1_10($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal) {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r1_11($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
+    }
+
+    function yy_r1_12($yy_subpatterns)
+    {
+
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r1_13($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r1_14($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
+            $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
+        } elseif ($this->value == '<?xml') {
+            $this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
+            $this->value = substr($this->value, 0, 2);
+        }
     }
+
     function yy_r1_15($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELSETFILTER;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
     }
+
     function yy_r1_16($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal) {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDEL;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        $this->token = Smarty_Internal_Templateparser::TP_TEXT;
     }
+
     function yy_r1_17($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
+        $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
     }
+
     function yy_r1_18($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LDEL;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
+        $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
     }
+
     function yy_r1_19($yy_subpatterns)
     {
 
-  if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
-    $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
-  } elseif ($this->value == '<?xml') {
-      $this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
-  } else {
-    $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
-    $this->value = substr($this->value, 0, 2);
-  }
-     }
-    function yy_r1_20($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
-    }
-    function yy_r1_21($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
-    }
-    function yy_r1_22($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
-    }
-    function yy_r1_23($yy_subpatterns)
-    {
-
-  if ($this->mbstring_overload) {
-    $to = mb_strlen($this->data,'latin1');
-  } else {
-    $to = strlen($this->data);
-  }
-  preg_match("/{$this->ldel}|<\?|\?>|<%|%>/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
-  if (isset($match[0][1])) {
-    $to = $match[0][1];
-  }
-  if ($this->mbstring_overload) {
-    $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
-  } else {
-    $this->value = substr($this->data,$this->counter,$to-$this->counter);
-  }
-  $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-    }
-
-
-    function yylex2()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 1,
-              5 => 0,
-              6 => 0,
-              7 => 0,
-              8 => 0,
-              9 => 0,
-              10 => 0,
-              11 => 0,
-              12 => 0,
-              13 => 0,
-              14 => 0,
-              15 => 0,
-              16 => 0,
-              17 => 0,
-              18 => 0,
-              19 => 0,
-              20 => 1,
-              22 => 1,
-              24 => 1,
-              26 => 0,
-              27 => 0,
-              28 => 0,
-              29 => 0,
-              30 => 0,
-              31 => 0,
-              32 => 0,
-              33 => 0,
-              34 => 0,
-              35 => 0,
-              36 => 0,
-              37 => 0,
-              38 => 0,
-              39 => 0,
-              40 => 0,
-              41 => 0,
-              42 => 0,
-              43 => 3,
-              47 => 0,
-              48 => 0,
-              49 => 0,
-              50 => 0,
-              51 => 0,
-              52 => 0,
-              53 => 0,
-              54 => 0,
-              55 => 1,
-              57 => 1,
-              59 => 0,
-              60 => 0,
-              61 => 0,
-              62 => 0,
-              63 => 0,
-              64 => 0,
-              65 => 0,
-              66 => 0,
-              67 => 0,
-              68 => 0,
-              69 => 0,
-              70 => 0,
-              71 => 0,
-              72 => 0,
-              73 => 0,
-              74 => 0,
-              75 => 0,
-              76 => 0,
-              77 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $to = strlen($this->data);
+        preg_match("/{$this->ldel}|<\?|\?>|<%|%>/", $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;
+    }
+
+    public function yylex2()
+    {
+        $tokenMap = array(
+            1  => 0,
+            2  => 0,
+            3  => 1,
+            5  => 0,
+            6  => 0,
+            7  => 0,
+            8  => 0,
+            9  => 0,
+            10 => 0,
+            11 => 0,
+            12 => 0,
+            13 => 0,
+            14 => 0,
+            15 => 1,
+            17 => 1,
+            19 => 1,
+            21 => 0,
+            22 => 0,
+            23 => 0,
+            24 => 0,
+            25 => 0,
+            26 => 0,
+            27 => 0,
+            28 => 0,
+            29 => 0,
+            30 => 0,
+            31 => 0,
+            32 => 0,
+            33 => 0,
+            34 => 0,
+            35 => 0,
+            36 => 0,
+            37 => 0,
+            38 => 3,
+            42 => 0,
+            43 => 0,
+            44 => 0,
+            45 => 0,
+            46 => 0,
+            47 => 0,
+            48 => 0,
+            49 => 0,
+            50 => 1,
+            52 => 1,
+            54 => 0,
+            55 => 0,
+            56 => 0,
+            57 => 0,
+            58 => 0,
+            59 => 0,
+            60 => 0,
+            61 => 0,
+            62 => 0,
+            63 => 0,
+            64 => 0,
+            65 => 0,
+            66 => 0,
+            67 => 0,
+            68 => 0,
+            69 => 0,
+            70 => 1,
+            72 => 0,
+            73 => 0,
+            74 => 0,
+            75 => 0,
+            76 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s{1,})|\G(\\s{1,}".$this->rdel.")|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(".$this->rdel.")|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*===\\s*)|\G(\\s*!==\\s*)|\G(\\s*==\\s*|\\s+eq\\s+)|\G(\\s*!=\\s*|\\s*<>\\s*|\\s+(ne|neq)\\s+)|\G(\\s*>=\\s*|\\s+(ge|gte)\\s+)|\G(\\s*<=\\s*|\\s+(le|lte)\\s+)|\G(\\s*>\\s*|\\s+gt\\s+)|\G(\\s*<\\s*|\\s+lt\\s+)|\G(\\s+mod\\s+)|\G(!\\s*|not\\s+)|\G(\\s*&&\\s*|\\s*and\\s+)|\G(\\s*\\|\\|\\s*|\\s*or\\s+)|\G(\\s*xor\\s+)|\G(\\s+is\\s+odd\\s+by\\s+)|\G(\\s+is\\s+not\\s+odd\\s+by\\s+)|\G(\\s+is\\s+odd)|\G(\\s+is\\s+not\\s+odd)|\G(\\s+is\\s+even\\s+by\\s+)|\G(\\s+is\\s+not\\s+even\\s+by\\s+)|\G(\\s+is\\s+even)|\G(\\s+is\\s+not\\s+even)|\G(\\s+is\\s+div\\s+by\\s+)|\G(\\s+is\\s+not\\s+div\\s+by\\s+)|\G(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|\G(\\s*\\(\\s*)|\G(\\s*\\))|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*->\\s*)|\G(\\s*=>\\s*)|\G(\\s*=\\s*)|\G(\\+\\+|--)|\G(\\s*(\\+|-)\\s*)|\G(\\s*(\\*|\/|%)\\s*)|\G(\\$)|\G(\\s*;)|\G(::)|\G(\\s*:\\s*)|\G(@)|\G(#)|\G(\")|\G(`)|\G(\\|)|\G(\\.)|\G(\\s*,\\s*)|\G(\\s*&\\s*)|\G(\\s*\\?\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s?=\\s?)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G(\\s+)|\G([\S\s])/iS";
+        $yy_global_pattern = "/\G(\")|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$]smarty\\.block\\.(child|parent))|\G(\\$)|\G(\\s*" . $this->rdel . ")|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*===\\s*)|\G(\\s*!==\\s*)|\G(\\s*==\\s*|\\s+eq\\s+)|\G(\\s*!=\\s*|\\s*<>\\s*|\\s+(ne|neq)\\s+)|\G(\\s*>=\\s*|\\s+(ge|gte)\\s+)|\G(\\s*<=\\s*|\\s+(le|lte)\\s+)|\G(\\s*>\\s*|\\s+gt\\s+)|\G(\\s*<\\s*|\\s+lt\\s+)|\G(\\s+mod\\s+)|\G(!\\s*|not\\s+)|\G(\\s*&&\\s*|\\s*and\\s+)|\G(\\s*\\|\\|\\s*|\\s*or\\s+)|\G(\\s*xor\\s+)|\G(\\s+is\\s+odd\\s+by\\s+)|\G(\\s+is\\s+not\\s+odd\\s+by\\s+)|\G(\\s+is\\s+odd)|\G(\\s+is\\s+not\\s+odd)|\G(\\s+is\\s+even\\s+by\\s+)|\G(\\s+is\\s+not\\s+even\\s+by\\s+)|\G(\\s+is\\s+even)|\G(\\s+is\\s+not\\s+even)|\G(\\s+is\\s+div\\s+by\\s+)|\G(\\s+is\\s+not\\s+div\\s+by\\s+)|\G(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\)\\s*)|\G(\\s*\\(\\s*)|\G(\\s*\\))|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*->\\s*)|\G(\\s*=>\\s*)|\G(\\s*=\\s*)|\G(\\+\\+|--)|\G(\\s*(\\+|-)\\s*)|\G(\\s*(\\*|\/|%)\\s*)|\G(@)|\G(#)|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*=\\s*)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G(`)|\G(\\|)|\G(\\.)|\G(\\s*,\\s*)|\G(\\s*;)|\G(::)|\G(\\s*:\\s*)|\G(\\s*&\\s*)|\G(\\s*\\?\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G([\S\s])/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state SMARTY');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state SMARTY');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r2_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -479,443 +481,499 @@ class Smarty_Internal_Templatelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const SMARTY = 2;
+
     function yy_r2_1($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
+        $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+        $this->yypushstate(self::DOUBLEQUOTEDSTRING);
     }
+
     function yy_r2_2($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal) {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
     }
+
     function yy_r2_3($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        $this->token = Smarty_Internal_Templateparser::TP_SMARTYBLOCKCHILDPARENT;
+        $this->taglineno = $this->line;
     }
+
     function yy_r2_5($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
     }
+
     function yy_r2_6($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        $this->token = Smarty_Internal_Templateparser::TP_RDEL;
+        $this->yypopstate();
     }
+
     function yy_r2_7($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal) {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDEL;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        $this->token = Smarty_Internal_Templateparser::TP_ISIN;
     }
+
     function yy_r2_8($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_RDEL;
-  $this->yypopstate();
+        $this->token = Smarty_Internal_Templateparser::TP_AS;
     }
+
     function yy_r2_9($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
+        $this->token = Smarty_Internal_Templateparser::TP_TO;
     }
+
     function yy_r2_10($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LDEL;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
+        $this->token = Smarty_Internal_Templateparser::TP_STEP;
     }
+
     function yy_r2_11($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_RDEL;
-     $this->yypopstate();
+        $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
     }
+
     function yy_r2_12($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISIN;
+        $this->token = Smarty_Internal_Templateparser::TP_IDENTITY;
     }
+
     function yy_r2_13($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_AS;
+        $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY;
     }
+
     function yy_r2_14($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_TO;
+        $this->token = Smarty_Internal_Templateparser::TP_EQUALS;
     }
+
     function yy_r2_15($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_STEP;
+        $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS;
     }
-    function yy_r2_16($yy_subpatterns)
-    {
 
-  $this->token = Smarty_Internal_Templateparser::TP_INSTANCEOF;
-    }
     function yy_r2_17($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_IDENTITY;
+        $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL;
     }
-    function yy_r2_18($yy_subpatterns)
-    {
 
-  $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY;
-    }
     function yy_r2_19($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_EQUALS;
+        $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL;
     }
-    function yy_r2_20($yy_subpatterns)
+
+    function yy_r2_21($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS;
+        $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN;
     }
+
     function yy_r2_22($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL;
+        $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN;
+    }
+
+    function yy_r2_23($yy_subpatterns)
+    {
+
+        $this->token = Smarty_Internal_Templateparser::TP_MOD;
     }
+
     function yy_r2_24($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL;
+        $this->token = Smarty_Internal_Templateparser::TP_NOT;
     }
+
+    function yy_r2_25($yy_subpatterns)
+    {
+
+        $this->token = Smarty_Internal_Templateparser::TP_LAND;
+    }
+
     function yy_r2_26($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN;
+        $this->token = Smarty_Internal_Templateparser::TP_LOR;
     }
+
     function yy_r2_27($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN;
+        $this->token = Smarty_Internal_Templateparser::TP_LXOR;
     }
+
     function yy_r2_28($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_MOD;
+        $this->token = Smarty_Internal_Templateparser::TP_ISODDBY;
     }
+
     function yy_r2_29($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_NOT;
+        $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY;
     }
+
     function yy_r2_30($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LAND;
+        $this->token = Smarty_Internal_Templateparser::TP_ISODD;
     }
+
     function yy_r2_31($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LOR;
+        $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD;
     }
+
     function yy_r2_32($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LXOR;
+        $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY;
     }
+
     function yy_r2_33($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISODDBY;
+        $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY;
     }
+
     function yy_r2_34($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY;
+        $this->token = Smarty_Internal_Templateparser::TP_ISEVEN;
     }
+
     function yy_r2_35($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISODD;
+        $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN;
     }
+
     function yy_r2_36($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD;
+        $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY;
     }
+
     function yy_r2_37($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY;
+        $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY;
     }
+
     function yy_r2_38($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY;
+        $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
     }
-    function yy_r2_39($yy_subpatterns)
+
+    function yy_r2_42($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISEVEN;
+        $this->token = Smarty_Internal_Templateparser::TP_OPENP;
     }
-    function yy_r2_40($yy_subpatterns)
+
+    function yy_r2_43($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN;
+        $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
     }
-    function yy_r2_41($yy_subpatterns)
+
+    function yy_r2_44($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY;
+        $this->token = Smarty_Internal_Templateparser::TP_OPENB;
     }
-    function yy_r2_42($yy_subpatterns)
+
+    function yy_r2_45($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY;
+        $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
     }
-    function yy_r2_43($yy_subpatterns)
+
+    function yy_r2_46($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
+        $this->token = Smarty_Internal_Templateparser::TP_PTR;
     }
+
     function yy_r2_47($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_OPENP;
+        $this->token = Smarty_Internal_Templateparser::TP_APTR;
     }
+
     function yy_r2_48($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
+        $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
     }
+
     function yy_r2_49($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_OPENB;
+        $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
     }
+
     function yy_r2_50($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
+        $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
     }
-    function yy_r2_51($yy_subpatterns)
-    {
 
-  $this->token = Smarty_Internal_Templateparser::TP_PTR;
-    }
     function yy_r2_52($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_APTR;
+        $this->token = Smarty_Internal_Templateparser::TP_MATH;
     }
-    function yy_r2_53($yy_subpatterns)
-    {
 
-  $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
-    }
     function yy_r2_54($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
+        $this->token = Smarty_Internal_Templateparser::TP_AT;
     }
+
     function yy_r2_55($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
+        $this->token = Smarty_Internal_Templateparser::TP_HATCH;
     }
+
+    function yy_r2_56($yy_subpatterns)
+    {
+
+        // resolve conflicts with shorttag and right_delimiter starting with '='
+        if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->rdel_length) == $this->smarty->right_delimiter) {
+            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;
+        }
+    }
+
     function yy_r2_57($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_MATH;
+        $this->token = Smarty_Internal_Templateparser::TP_ID;
+    }
+
+    function yy_r2_58($yy_subpatterns)
+    {
+
+        $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
     }
+
     function yy_r2_59($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
+        $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+        $this->yypopstate();
     }
+
     function yy_r2_60($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
+        $this->token = Smarty_Internal_Templateparser::TP_VERT;
     }
+
     function yy_r2_61($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
+        $this->token = Smarty_Internal_Templateparser::TP_DOT;
     }
+
     function yy_r2_62($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_COLON;
+        $this->token = Smarty_Internal_Templateparser::TP_COMMA;
     }
+
     function yy_r2_63($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_AT;
+        $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
     }
+
     function yy_r2_64($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_HATCH;
+        $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
     }
+
     function yy_r2_65($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
-  $this->yypushstate(self::DOUBLEQUOTEDSTRING);
+        $this->token = Smarty_Internal_Templateparser::TP_COLON;
     }
+
     function yy_r2_66($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
-  $this->yypopstate();
+        $this->token = Smarty_Internal_Templateparser::TP_ANDSYM;
     }
+
     function yy_r2_67($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_VERT;
+        $this->token = Smarty_Internal_Templateparser::TP_QMARK;
     }
+
     function yy_r2_68($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_DOT;
+        $this->token = Smarty_Internal_Templateparser::TP_HEX;
     }
+
     function yy_r2_69($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_COMMA;
+        $this->token = Smarty_Internal_Templateparser::TP_SPACE;
     }
+
     function yy_r2_70($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ANDSYM;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
-    function yy_r2_71($yy_subpatterns)
-    {
 
-  $this->token = Smarty_Internal_Templateparser::TP_QMARK;
-    }
     function yy_r2_72($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_HEX;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r2_73($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ATTR;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r2_74($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ID;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r2_75($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
-    function yy_r2_76($yy_subpatterns)
-    {
 
-  $this->token = Smarty_Internal_Templateparser::TP_SPACE;
-    }
-    function yy_r2_77($yy_subpatterns)
+    function yy_r2_76($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        $this->token = Smarty_Internal_Templateparser::TP_TEXT;
     }
 
-
-
-    function yylex3()
+    public function yylex3()
     {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-              4 => 0,
-              5 => 0,
-              6 => 0,
-              7 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+            3 => 0,
+            4 => 0,
+            5 => 0,
+            6 => 0,
+            7 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/\G(".$this->ldel."\\s*literal\\s*".$this->rdel.")|\G(".$this->ldel."\\s*\/literal\\s*".$this->rdel.")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(<%)|\G(%>)|\G([\S\s])/iS";
+        $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|\G(\\?>)|\G(<%)|\G(%>)|\G([\S\s])/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state LITERAL');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state LITERAL');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r3_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -924,128 +982,131 @@ class Smarty_Internal_Templatelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const LITERAL = 3;
+
     function yy_r3_1($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
-  $this->yypushstate(self::LITERAL);
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+            $this->yypushstate(self::LITERAL);
+        }
     }
+
     function yy_r3_2($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
-  $this->yypopstate();
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+            $this->yypopstate();
+        }
     }
+
     function yy_r3_3($yy_subpatterns)
     {
 
-  if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
-    $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
-   } else {
-    $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
-    $this->value = substr($this->value, 0, 2);
-   }
+        if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
+            $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
+            $this->value = substr($this->value, 0, 2);
+        }
     }
+
     function yy_r3_4($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
+        $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
     }
+
     function yy_r3_5($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
+        $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
     }
+
     function yy_r3_6($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
+        $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
     }
+
     function yy_r3_7($yy_subpatterns)
     {
 
-  if ($this->mbstring_overload) {
-    $to = mb_strlen($this->data,'latin1');
-  } else {
-    $to = strlen($this->data);
-  }
-  preg_match("/{$this->ldel}\/?literal{$this->rdel}|<\?|<%|\?>|%>/",$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");
-  }
-  if ($this->mbstring_overload) {
-    $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
-  } else {
-    $this->value = substr($this->data,$this->counter,$to-$this->counter);
-  }
-  $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
-    }
-
-
-    function yylex4()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 1,
-              4 => 0,
-              5 => 0,
-              6 => 0,
-              7 => 0,
-              8 => 0,
-              9 => 0,
-              10 => 0,
-              11 => 0,
-              12 => 0,
-              13 => 3,
-              17 => 0,
-            );
-        if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+        $to = strlen($this->data);
+        preg_match("/{$this->ldel}\/?literal{$this->rdel}|<\?|<%|\?>|%>/", $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;
+    }
+
+    public function yylex4()
+    {
+        $tokenMap = array(
+            1  => 1,
+            3  => 0,
+            4  => 0,
+            5  => 0,
+            6  => 0,
+            7  => 0,
+            8  => 0,
+            9  => 0,
+            10 => 0,
+            11 => 3,
+            15 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/\G(".$this->ldel."\\s{1,}\/)|\G(".$this->ldel."\\s*(if|elseif|else if|while)\\s+)|\G(".$this->ldel."\\s*for\\s+)|\G(".$this->ldel."\\s*foreach(?![^\s]))|\G(".$this->ldel."\\s{1,})|\G(".$this->ldel."\/)|\G(".$this->ldel.")|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(".$this->ldel."|\\$|`\\$|\")))|\G([\S\s])/iS";
+        $yy_global_pattern = "/\G(" . $this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|\")))|\G([\S\s])/iS";
 
         do {
-            if ($this->mbstring_overload ? preg_match($yy_global_pattern, mb_substr($this->data, $this->counter,2000000000,'latin1'), $yymatches) : preg_match($yy_global_pattern,$this->data, $yymatches, null, $this->counter)) {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
                 $yysubmatches = $yymatches;
                 $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
-                        ' an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
                 if ($tokenMap[$this->token]) {
                     // extract sub-patterns for passing to lex function
                     $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
+                                                $tokenMap[$this->token]);
                 } else {
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
                 $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
                 if ($r === null) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
                     // accept this token
                     return true;
@@ -1054,137 +1115,443 @@ class Smarty_Internal_Templatelexer
                     // process this token in the new state
                     return $this->yylex();
                 } elseif ($r === false) {
-                    $this->counter += ($this->mbstring_overload ? mb_strlen($this->value,'latin1'): strlen($this->value));
+                    $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= ($this->mbstring_overload ? mb_strlen($this->data,'latin1'): strlen($this->data))) {
+                    if ($this->counter >= strlen($this->data)) {
                         return false; // end of input
                     }
                     // skip this token
                     continue;
-                }            } else {
+                }
+            } else {
                 throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
+                                    ': ' . $this->data[$this->counter]);
             }
             break;
         } while (true);
-
     } // end function
 
-
     const DOUBLEQUOTEDSTRING = 4;
+
     function yy_r4_1($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal) {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
-    function yy_r4_2($yy_subpatterns)
+
+    function yy_r4_3($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELIF;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r4_4($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELFOR;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r4_5($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal && trim(substr($this->value,$this->ldel_length,1)) == '') {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELFOREACH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r4_6($yy_subpatterns)
     {
 
-  if ($this->smarty->auto_literal) {
-     $this->token = Smarty_Internal_Templateparser::TP_TEXT;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDEL;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_LDEL;
+            $this->yypushstate(self::SMARTY);
+            $this->taglineno = $this->line;
+        }
     }
+
     function yy_r4_7($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
+        $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
+        $this->yypopstate();
     }
+
     function yy_r4_8($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_LDEL;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
+        $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
+        $this->value = substr($this->value, 0, - 1);
+        $this->yypushstate(self::SMARTY);
+        $this->taglineno = $this->line;
     }
+
     function yy_r4_9($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
-  $this->yypopstate();
+        $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
     }
+
     function yy_r4_10($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
-  $this->value = substr($this->value,0,-1);
-  $this->yypushstate(self::SMARTY);
-  $this->taglineno = $this->line;
+        $this->token = Smarty_Internal_Templateparser::TP_TEXT;
     }
+
     function yy_r4_11($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
+        $this->token = Smarty_Internal_Templateparser::TP_TEXT;
     }
-    function yy_r4_12($yy_subpatterns)
+
+    function yy_r4_15($yy_subpatterns)
+    {
+
+        $to = strlen($this->data);
+        $this->value = substr($this->data, $this->counter, $to - $this->counter);
+        $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+    }
+
+    public function yylex5()
+    {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+            3 => 0,
+            4 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
+            return false; // end of input
+        }
+        $yy_global_pattern = "/\G(" . $this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*block)|\G([\S\s])/iS";
+
+        do {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
+                $yysubmatches = $yymatches;
+                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
+                if (!count($yymatches)) {
+                    throw new Exception('Error: lexing failed because a rule matched' .
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state CHILDBODY');
+                }
+                next($yymatches); // skip global match
+                $this->token = key($yymatches); // token number
+                if ($tokenMap[$this->token]) {
+                    // extract sub-patterns for passing to lex function
+                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
+                                                $tokenMap[$this->token]);
+                } else {
+                    $yysubmatches = array();
+                }
+                $this->value = current($yymatches); // token value
+                $r = $this->{'yy_r5_' . $this->token}($yysubmatches);
+                if ($r === null) {
+                    $this->counter += strlen($this->value);
+                    $this->line += substr_count($this->value, "\n");
+                    // accept this token
+                    return true;
+                } elseif ($r === true) {
+                    // we have changed state
+                    // process this token in the new state
+                    return $this->yylex();
+                } elseif ($r === false) {
+                    $this->counter += strlen($this->value);
+                    $this->line += substr_count($this->value, "\n");
+                    if ($this->counter >= strlen($this->data)) {
+                        return false; // end of input
+                    }
+                    // skip this token
+                    continue;
+                }
+            } else {
+                throw new Exception('Unexpected input at line' . $this->line .
+                                    ': ' . $this->data[$this->counter]);
+            }
+            break;
+        } while (true);
+    } // end function
+
+    const CHILDBODY = 5;
+
+    function yy_r5_1($yy_subpatterns)
+    {
+
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            return false;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_STRIPON;
+        }
+    }
+
+    function yy_r5_2($yy_subpatterns)
+    {
+
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            return false;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_STRIPOFF;
+        }
+    }
+
+    function yy_r5_3($yy_subpatterns)
+    {
+
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            return false;
+        } else {
+            $this->yypopstate();
+            return true;
+        }
+    }
+
+    function yy_r5_4($yy_subpatterns)
+    {
+
+        $to = strlen($this->data);
+        preg_match("/" . $this->ldel . "\s*((\/)?strip\s*" . $this->rdel . "|block\s+)/", $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);
+        return false;
+    }
+
+    public function yylex6()
+    {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+            3 => 0,
+            4 => 1,
+            6 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
+            return false; // end of input
+        }
+        $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*block)|\G(" . $this->ldel . "\\s*\/block)|\G(" . $this->ldel . "\\s*[$]smarty\\.block\\.(child|parent))|\G([\S\s])/iS";
+
+        do {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
+                $yysubmatches = $yymatches;
+                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
+                if (!count($yymatches)) {
+                    throw new Exception('Error: lexing failed because a rule matched' .
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state CHILDBLOCK');
+                }
+                next($yymatches); // skip global match
+                $this->token = key($yymatches); // token number
+                if ($tokenMap[$this->token]) {
+                    // extract sub-patterns for passing to lex function
+                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
+                                                $tokenMap[$this->token]);
+                } else {
+                    $yysubmatches = array();
+                }
+                $this->value = current($yymatches); // token value
+                $r = $this->{'yy_r6_' . $this->token}($yysubmatches);
+                if ($r === null) {
+                    $this->counter += strlen($this->value);
+                    $this->line += substr_count($this->value, "\n");
+                    // accept this token
+                    return true;
+                } elseif ($r === true) {
+                    // we have changed state
+                    // process this token in the new state
+                    return $this->yylex();
+                } elseif ($r === false) {
+                    $this->counter += strlen($this->value);
+                    $this->line += substr_count($this->value, "\n");
+                    if ($this->counter >= strlen($this->data)) {
+                        return false; // end of input
+                    }
+                    // skip this token
+                    continue;
+                }
+            } else {
+                throw new Exception('Unexpected input at line' . $this->line .
+                                    ': ' . $this->data[$this->counter]);
+            }
+            break;
+        } while (true);
+    } // end function
+
+    const CHILDBLOCK = 6;
+
+    function yy_r6_1($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+            $this->yypushstate(self::CHILDLITERAL);
+        }
     }
-    function yy_r4_13($yy_subpatterns)
+
+    function yy_r6_2($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+        } else {
+            $this->yypopstate();
+            return true;
+        }
     }
-    function yy_r4_17($yy_subpatterns)
+
+    function yy_r6_3($yy_subpatterns)
     {
 
-  if ($this->mbstring_overload) {
-    $to = mb_strlen($this->data,'latin1');
-  } else {
-    $to = strlen($this->data);
-  }
-  if ($this->mbstring_overload) {
-    $this->value = mb_substr($this->data,$this->counter,$to-$this->counter,'latin1');
-  } else {
-    $this->value = substr($this->data,$this->counter,$to-$this->counter);
-  }
-  $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+        } else {
+            $this->yypopstate();
+            return true;
+        }
     }
 
+    function yy_r6_4($yy_subpatterns)
+    {
+
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+        } else {
+            $this->yypopstate();
+            return true;
+        }
+    }
+
+    function yy_r6_6($yy_subpatterns)
+    {
+
+        $to = strlen($this->data);
+        preg_match("/" . $this->ldel . "\s*(literal\s*" . $this->rdel . "|(\/)?block(\s|" . $this->rdel . ")|[\$]smarty\.block\.(child|parent))/", $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_BLOCKSOURCE;
+    }
+
+    public function yylex7()
+    {
+        $tokenMap = array(
+            1 => 0,
+            2 => 0,
+            3 => 0,
+        );
+        if ($this->counter >= strlen($this->data)) {
+            return false; // end of input
+        }
+        $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G([\S\s])/iS";
+
+        do {
+            if (preg_match($yy_global_pattern, $this->data, $yymatches, null, $this->counter)) {
+                $yysubmatches = $yymatches;
+                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
+                if (!count($yymatches)) {
+                    throw new Exception('Error: lexing failed because a rule matched' .
+                                        ' an empty string.  Input "' . substr($this->data,
+                                                                              $this->counter, 5) . '... state CHILDLITERAL');
+                }
+                next($yymatches); // skip global match
+                $this->token = key($yymatches); // token number
+                if ($tokenMap[$this->token]) {
+                    // extract sub-patterns for passing to lex function
+                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
+                                                $tokenMap[$this->token]);
+                } else {
+                    $yysubmatches = array();
+                }
+                $this->value = current($yymatches); // token value
+                $r = $this->{'yy_r7_' . $this->token}($yysubmatches);
+                if ($r === null) {
+                    $this->counter += strlen($this->value);
+                    $this->line += substr_count($this->value, "\n");
+                    // accept this token
+                    return true;
+                } elseif ($r === true) {
+                    // we have changed state
+                    // process this token in the new state
+                    return $this->yylex();
+                } elseif ($r === false) {
+                    $this->counter += strlen($this->value);
+                    $this->line += substr_count($this->value, "\n");
+                    if ($this->counter >= strlen($this->data)) {
+                        return false; // end of input
+                    }
+                    // skip this token
+                    continue;
+                }
+            } else {
+                throw new Exception('Unexpected input at line' . $this->line .
+                                    ': ' . $this->data[$this->counter]);
+            }
+            break;
+        } while (true);
+    } // end function
+
+    const CHILDLITERAL = 7;
+
+    function yy_r7_1($yy_subpatterns)
+    {
+
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+            $this->yypushstate(self::CHILDLITERAL);
+        }
+    }
+
+    function yy_r7_2($yy_subpatterns)
+    {
+
+        if ($this->smarty->auto_literal && isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r", $this->value[$this->ldel_length]) !== false : false) {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+        } else {
+            $this->token = Smarty_Internal_Templateparser::TP_BLOCKSOURCE;
+            $this->yypopstate();
+        }
+    }
+
+    function yy_r7_3($yy_subpatterns)
+    {
+
+        $to = strlen($this->data);
+        preg_match("/{$this->ldel}\/?literal\s*{$this->rdel}/", $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_BLOCKSOURCE;
+    }
 }
-?>
\ No newline at end of file
+
+     
\ No newline at end of file
index ed20e823790114fb15a3d9cce5f200ae51f2e277..c781e4c10f7b51ee5d828e6ad6f5ae231b5a7b0a 100644 (file)
@@ -1,20 +1,20 @@
 <?php
-/**
-* Smarty Internal Plugin Templateparser
-*
-* This is the template parser.
-* It is generated from the internal.templateparser.y file
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews
-*/
 
+/**
+ * Smarty Internal Plugin Templateparser
+ * This is the template parser.
+ * It is generated from the internal.templateparser.y file
+ *
+ * @package    Smarty
+ * @subpackage Compiler
+ * @author     Uwe Tews
+ */
 class TP_yyToken implements ArrayAccess
 {
     public $string = '';
     public $metadata = array();
 
-    function __construct($s, $m = array())
+    public function __construct($s, $m = array())
     {
         if ($s instanceof TP_yyToken) {
             $this->string = $s->string;
@@ -29,28 +29,29 @@ class TP_yyToken implements ArrayAccess
         }
     }
 
-    function __toString()
+    public function __toString()
     {
         return $this->_string;
     }
 
-    function offsetExists($offset)
+    public function offsetExists($offset)
     {
         return isset($this->metadata[$offset]);
     }
 
-    function offsetGet($offset)
+    public function offsetGet($offset)
     {
         return $this->metadata[$offset];
     }
 
-    function offsetSet($offset, $value)
+    public function offsetSet($offset, $value)
     {
         if ($offset === null) {
             if (isset($value[0])) {
                 $x = ($value instanceof TP_yyToken) ?
                     $value->metadata : $value;
                 $this->metadata = array_merge($this->metadata, $x);
+
                 return;
             }
             $offset = count($this->metadata);
@@ -67,7 +68,7 @@ class TP_yyToken implements ArrayAccess
         }
     }
 
-    function offsetUnset($offset)
+    public function offsetUnset($offset)
     {
         unset($this->metadata[$offset]);
     }
@@ -75,18 +76,19 @@ class TP_yyToken implements ArrayAccess
 
 class TP_yyStackEntry
 {
-    public $stateno;       /* The state-number */
-    public $major;         /* The major token value.  This is the code
+    public $stateno; /* The state-number */
+    public $major; /* The major token value.  This is the code
                      ** number for the token at this stack level */
     public $minor; /* The user-supplied minor token value.  This
                      ** is the value of the token  */
-};
+}
 
+;
 
-#line 12 "smarty_internal_templateparser.y"
-class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php"
+#line 13 "smarty_internal_templateparser.y"
+class Smarty_Internal_Templateparser #line 80 "smarty_internal_templateparser.php"
 {
-#line 14 "smarty_internal_templateparser.y"
+    #line 15 "smarty_internal_templateparser.y"
 
     const Err1 = "Security error: Call to private object member not allowed";
     const Err2 = "Security error: Call to dynamic object member not allowed";
@@ -94,18 +96,19 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
     // states whether the parse was successful or not
     public $successful = true;
     public $retvalue = 0;
+    public static $prefix_number = 0;
     private $lex;
     private $internalError = false;
     private $strip = false;
 
-    function __construct($lex, $compiler) {
+    function __construct($lex, $compiler)
+    {
         $this->lex = $lex;
         $this->compiler = $compiler;
         $this->smarty = $this->compiler->smarty;
         $this->template = $this->compiler->template;
         $this->compiler->has_variable_string = false;
         $this->compiler->prefix_code = array();
-        $this->prefix_number = 0;
         $this->block_nesting_level = 0;
         if ($this->security = isset($this->smarty->security_policy)) {
             $this->php_handling = $this->smarty->security_policy->php_handling;
@@ -117,1367 +120,2471 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
         $this->current_buffer = $this->root_buffer = new _smarty_template_buffer($this);
     }
 
-    public static function escape_start_tag($tag_text) {
-        $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text, -1 , $count); //Escape tag
+    public static function escape_start_tag($tag_text)
+    {
+        $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text, - 1, $count); //Escape tag
         return $tag;
     }
 
-    public static function escape_end_tag($tag_text) {
+    public static function escape_end_tag($tag_text)
+    {
         return '?<?php ?>>';
     }
 
-    public function compileVariable($variable) {
-        if (strpos($variable,'(') == 0) {
+    public function compileVariable($variable)
+    {
+        if (strpos($variable, '(') == 0) {
             // not a variable variable
-            $var = trim($variable,'\'');
-            $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable($var, null, true, false)->nocache;
-            $this->template->properties['variables'][$var] = $this->compiler->tag_nocache|$this->compiler->nocache;
+            $var = trim($variable, '\'');
+            $this->compiler->tag_nocache = $this->compiler->tag_nocache | $this->template->getVariable($var, null, true, false)->nocache;
+            $this->template->properties['variables'][$var] = $this->compiler->tag_nocache | $this->compiler->nocache;
         }
-//       return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
-        return '$_smarty_tpl->tpl_vars['. $variable .']->value';
+        //       return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
+        return '$_smarty_tpl->tpl_vars[' . $variable . ']->value';
     }
-#line 132 "smarty_internal_templateparser.php"
 
-    const TP_VERT                           =  1;
-    const TP_COLON                          =  2;
-    const TP_COMMENT                        =  3;
-    const TP_PHPSTARTTAG                    =  4;
-    const TP_PHPENDTAG                      =  5;
-    const TP_ASPSTARTTAG                    =  6;
-    const TP_ASPENDTAG                      =  7;
-    const TP_FAKEPHPSTARTTAG                =  8;
-    const TP_XMLTAG                         =  9;
-    const TP_TEXT                           = 10;
-    const TP_STRIPON                        = 11;
-    const TP_STRIPOFF                       = 12;
-    const TP_LITERALSTART                   = 13;
-    const TP_LITERALEND                     = 14;
-    const TP_LITERAL                        = 15;
-    const TP_LDEL                           = 16;
-    const TP_RDEL                           = 17;
-    const TP_DOLLAR                         = 18;
-    const TP_ID                             = 19;
-    const TP_EQUAL                          = 20;
-    const TP_PTR                            = 21;
-    const TP_LDELIF                         = 22;
-    const TP_LDELFOR                        = 23;
-    const TP_SEMICOLON                      = 24;
-    const TP_INCDEC                         = 25;
-    const TP_TO                             = 26;
-    const TP_STEP                           = 27;
-    const TP_LDELFOREACH                    = 28;
-    const TP_SPACE                          = 29;
-    const TP_AS                             = 30;
-    const TP_APTR                           = 31;
-    const TP_LDELSETFILTER                  = 32;
-    const TP_SMARTYBLOCKCHILD               = 33;
-    const TP_LDELSLASH                      = 34;
-    const TP_ATTR                           = 35;
-    const TP_INTEGER                        = 36;
-    const TP_COMMA                          = 37;
-    const TP_OPENP                          = 38;
-    const TP_CLOSEP                         = 39;
-    const TP_MATH                           = 40;
-    const TP_UNIMATH                        = 41;
-    const TP_ANDSYM                         = 42;
-    const TP_ISIN                           = 43;
-    const TP_ISDIVBY                        = 44;
-    const TP_ISNOTDIVBY                     = 45;
-    const TP_ISEVEN                         = 46;
-    const TP_ISNOTEVEN                      = 47;
-    const TP_ISEVENBY                       = 48;
-    const TP_ISNOTEVENBY                    = 49;
-    const TP_ISODD                          = 50;
-    const TP_ISNOTODD                       = 51;
-    const TP_ISODDBY                        = 52;
-    const TP_ISNOTODDBY                     = 53;
-    const TP_INSTANCEOF                     = 54;
-    const TP_QMARK                          = 55;
-    const TP_NOT                            = 56;
-    const TP_TYPECAST                       = 57;
-    const TP_HEX                            = 58;
-    const TP_DOT                            = 59;
-    const TP_SINGLEQUOTESTRING              = 60;
-    const TP_DOUBLECOLON                    = 61;
-    const TP_AT                             = 62;
-    const TP_HATCH                          = 63;
-    const TP_OPENB                          = 64;
-    const TP_CLOSEB                         = 65;
-    const TP_EQUALS                         = 66;
-    const TP_NOTEQUALS                      = 67;
-    const TP_GREATERTHAN                    = 68;
-    const TP_LESSTHAN                       = 69;
-    const TP_GREATEREQUAL                   = 70;
-    const TP_LESSEQUAL                      = 71;
-    const TP_IDENTITY                       = 72;
-    const TP_NONEIDENTITY                   = 73;
-    const TP_MOD                            = 74;
-    const TP_LAND                           = 75;
-    const TP_LOR                            = 76;
-    const TP_LXOR                           = 77;
-    const TP_QUOTE                          = 78;
-    const TP_BACKTICK                       = 79;
-    const TP_DOLLARID                       = 80;
-    const YY_NO_ACTION = 593;
-    const YY_ACCEPT_ACTION = 592;
-    const YY_ERROR_ACTION = 591;
+    #line 133 "smarty_internal_templateparser.php"
+
+    const TP_VERT = 1;
+    const TP_COLON = 2;
+    const TP_RDEL = 3;
+    const TP_COMMENT = 4;
+    const TP_PHPSTARTTAG = 5;
+    const TP_PHPENDTAG = 6;
+    const TP_ASPSTARTTAG = 7;
+    const TP_ASPENDTAG = 8;
+    const TP_FAKEPHPSTARTTAG = 9;
+    const TP_XMLTAG = 10;
+    const TP_TEXT = 11;
+    const TP_STRIPON = 12;
+    const TP_STRIPOFF = 13;
+    const TP_BLOCKSOURCE = 14;
+    const TP_LITERALSTART = 15;
+    const TP_LITERALEND = 16;
+    const TP_LITERAL = 17;
+    const TP_LDEL = 18;
+    const TP_DOLLAR = 19;
+    const TP_ID = 20;
+    const TP_EQUAL = 21;
+    const TP_PTR = 22;
+    const TP_LDELIF = 23;
+    const TP_LDELFOR = 24;
+    const TP_SEMICOLON = 25;
+    const TP_INCDEC = 26;
+    const TP_TO = 27;
+    const TP_STEP = 28;
+    const TP_LDELFOREACH = 29;
+    const TP_SPACE = 30;
+    const TP_AS = 31;
+    const TP_APTR = 32;
+    const TP_LDELSETFILTER = 33;
+    const TP_SMARTYBLOCKCHILDPARENT = 34;
+    const TP_LDELSLASH = 35;
+    const TP_ATTR = 36;
+    const TP_INTEGER = 37;
+    const TP_COMMA = 38;
+    const TP_OPENP = 39;
+    const TP_CLOSEP = 40;
+    const TP_MATH = 41;
+    const TP_UNIMATH = 42;
+    const TP_ANDSYM = 43;
+    const TP_ISIN = 44;
+    const TP_ISDIVBY = 45;
+    const TP_ISNOTDIVBY = 46;
+    const TP_ISEVEN = 47;
+    const TP_ISNOTEVEN = 48;
+    const TP_ISEVENBY = 49;
+    const TP_ISNOTEVENBY = 50;
+    const TP_ISODD = 51;
+    const TP_ISNOTODD = 52;
+    const TP_ISODDBY = 53;
+    const TP_ISNOTODDBY = 54;
+    const TP_INSTANCEOF = 55;
+    const TP_QMARK = 56;
+    const TP_NOT = 57;
+    const TP_TYPECAST = 58;
+    const TP_HEX = 59;
+    const TP_DOT = 60;
+    const TP_SINGLEQUOTESTRING = 61;
+    const TP_DOUBLECOLON = 62;
+    const TP_AT = 63;
+    const TP_HATCH = 64;
+    const TP_OPENB = 65;
+    const TP_CLOSEB = 66;
+    const TP_EQUALS = 67;
+    const TP_NOTEQUALS = 68;
+    const TP_GREATERTHAN = 69;
+    const TP_LESSTHAN = 70;
+    const TP_GREATEREQUAL = 71;
+    const TP_LESSEQUAL = 72;
+    const TP_IDENTITY = 73;
+    const TP_NONEIDENTITY = 74;
+    const TP_MOD = 75;
+    const TP_LAND = 76;
+    const TP_LOR = 77;
+    const TP_LXOR = 78;
+    const TP_QUOTE = 79;
+    const TP_BACKTICK = 80;
+    const TP_DOLLARID = 81;
+    const YY_NO_ACTION = 570;
+    const YY_ACCEPT_ACTION = 569;
+    const YY_ERROR_ACTION = 568;
 
-    const YY_SZ_ACTTAB = 2453;
-static public $yy_action = array(
- /*     0 */   210,  320,  317,  316,  312,  311,  313,  314,  315,  322,
- /*    10 */   323,  189,  191,  340,   43,  168,  292,  290,  161,   25,
- /*    20 */     3,  108,  284,   29,  294,  199,  146,  294,   15,   15,
- /*    30 */   244,  296,  243,  277,   18,   18,  285,   12,  127,   48,
- /*    40 */    52,   50,   44,    9,   14,  384,  385,   17,   16,  386,
- /*    50 */   283,   41,   39,  210,  592,   95,  260,  319,  321,    6,
- /*    60 */    21,  194,  135,  374,  193,  387,  383,  382,  378,  377,
- /*    70 */   379,  380,  381,  363,  362,  345,  344,   28,   31,   34,
- /*    80 */   370,   15,   19,  237,  137,  187,   25,   18,  203,  284,
- /*    90 */    29,  203,   48,   52,   50,   44,    9,   14,  384,  385,
- /*   100 */    17,   16,  386,  283,   41,   39,  329,  324,  326,  327,
- /*   110 */   325,   24,  288,    4,    4,  189,  332,  330,  387,  383,
- /*   120 */   382,  378,  377,  379,  380,  381,  363,  362,  345,  344,
- /*   130 */   210,  368,  231,  210,  251,  117,  139,  139,   84,  132,
- /*   140 */   278,   25,   10,  162,  284,  359,  338,  302,  346,  459,
- /*   150 */   226,  228,  369,  364,   15,  375,  230,   15,   15,  177,
- /*   160 */    18,  459,  240,   18,   18,  212,  257,  459,  294,   48,
- /*   170 */    52,   50,   44,    9,   14,  384,  385,   17,   16,  386,
- /*   180 */   283,   41,   39,  131,  101,  159,   47,  196,  340,  371,
- /*   190 */    25,  190,  340,  284,  294,  387,  383,  382,  378,  377,
- /*   200 */   379,  380,  381,  363,  362,  345,  344,  210,  368,  208,
- /*   210 */   210,  203,  140,  210,    8,   56,  123,  118,  210,  457,
- /*   220 */   366,  261,  234,  343,  302,  346,  453,  147,  228,  369,
- /*   230 */   364,  457,  375,   15,  342,   15,  231,  457,   15,   18,
- /*   240 */     4,   18,  307,   37,   18,  195,   48,   52,   50,   44,
- /*   250 */     9,   14,  384,  385,   17,   16,  386,  283,   41,   39,
- /*   260 */   210,   25,    2,  139,  284,   11,   47,  185,  210,   45,
- /*   270 */   266,   47,  387,  383,  382,  378,  377,  379,  380,  381,
- /*   280 */   363,  362,  345,  344,  286,  242,  104,  166,   15,  210,
- /*   290 */   276,  184,  188,   23,   18,  272,  294,   22,  162,   48,
- /*   300 */    52,   50,   44,    9,   14,  384,  385,   17,   16,  386,
- /*   310 */   283,   41,   39,  203,  106,  170,   13,   15,  203,  288,
- /*   320 */   318,  319,  321,   18,  294,  387,  383,  382,  378,  377,
- /*   330 */   379,  380,  381,  363,  362,  345,  344,  210,  131,  105,
- /*   340 */   210,  203,   23,  368,  268,  130,  249,  152,  355,   25,
- /*   350 */   197,  132,  284,  271,   32,  162,  287,  155,  354,  210,
- /*   360 */     3,  108,   15,  228,  369,  364,  146,  375,   18,  252,
- /*   370 */   244,  296,  243,  375,  303,  305,   48,   52,   50,   44,
- /*   380 */     9,   14,  384,  385,   17,   16,  386,  283,   41,   39,
- /*   390 */   103,  210,   36,  208,  109,  388,  303,  232,    8,    4,
- /*   400 */   248,  246,  387,  383,  382,  378,  377,  379,  380,  381,
- /*   410 */   363,  362,  345,  344,  198,   40,  361,   27,  353,  179,
- /*   420 */   175,   20,  139,  236,  239,  211,  116,   18,  294,  294,
- /*   430 */    48,   52,   50,   44,    9,   14,  384,  385,   17,   16,
- /*   440 */   386,  283,   41,   39,  178,  200,  200,   23,   25,  267,
- /*   450 */   351,  284,  186,  294,  285,  201,  387,  383,  382,  378,
- /*   460 */   377,  379,  380,  381,  363,  362,  345,  344,  210,  368,
- /*   470 */   200,  210,  210,  140,  301,  181,   69,  123,  238,   25,
- /*   480 */   210,  147,  284,  347,  202,  302,  346,  459,  304,  228,
- /*   490 */   369,  364,   15,  375,  241,   15,  297,  172,   18,  459,
- /*   500 */   235,   18,  203,  306,  129,  459,  294,   48,   52,   50,
- /*   510 */    44,    9,   14,  384,  385,   17,   16,  386,  283,   41,
- /*   520 */    39,  210,   25,  200,   47,  229,   25,  134,  210,  233,
- /*   530 */   120,  119,  210,  387,  383,  382,  378,  377,  379,  380,
- /*   540 */   381,  363,  362,  345,  344,  373,  373,  143,  308,  180,
- /*   550 */   236,  282,   25,   25,   42,  284,  216,  236,  238,  250,
- /*   560 */    48,   52,   50,   44,    9,   14,  384,  385,   17,   16,
- /*   570 */   386,  283,   41,   39,  210,   30,  203,  360,  182,   25,
- /*   580 */   285,   47,  222,  126,  167,  303,  387,  383,  382,  378,
- /*   590 */   377,  379,  380,  381,  363,  362,  345,  344,  245,  373,
- /*   600 */    15,  372,  160,  334,    6,  333,   18,  247,  254,   35,
- /*   610 */   255,  294,  114,   48,   52,   50,   44,    9,   14,  384,
- /*   620 */   385,   17,   16,  386,  283,   41,   39,  373,  192,  281,
- /*   630 */   253,  145,   38,  298,  300,  226,   94,  124,  102,  387,
- /*   640 */   383,  382,  378,  377,  379,  380,  381,  363,  362,  345,
- /*   650 */   344,  210,  368,  373,  210,  141,  140,  368,  336,   71,
- /*   660 */   132,  149,  136,    7,   10,  132,  165,  204,  302,  346,
- /*   670 */   456,   98,  228,  369,  364,  294,  375,  228,  369,  364,
- /*   680 */   279,  375,  456,  220,  232,  335,  373,  285,  456,  162,
- /*   690 */    48,   52,   50,   44,    9,   14,  384,  385,   17,   16,
- /*   700 */   386,  283,   41,   39,  210,  210,  309,   47,  285,  200,
- /*   710 */   371,   45,  162,  183,  144,   97,  387,  383,  382,  378,
- /*   720 */   377,  379,  380,  381,  363,  362,  345,  344,  285,  131,
- /*   730 */   373,  354,  331,  107,  110,  256,  376,  327,  327,  327,
- /*   740 */   327,  327,  115,   48,   52,   50,   44,    9,   14,  384,
- /*   750 */   385,   17,   16,  386,  283,   41,   39,  373,  327,  327,
- /*   760 */   327,  327,  327,  327,  327,  327,  327,  327,  356,  387,
- /*   770 */   383,  382,  378,  377,  379,  380,  381,  363,  362,  345,
- /*   780 */   344,  210,  352,  368,  327,  210,  327,  140,  327,  327,
- /*   790 */    71,  132,  327,  100,  339,  327,  138,  269,  337,  302,
- /*   800 */   346,  328,  327,  228,  369,  364,   15,  375,  373,  327,
- /*   810 */    15,  373,   18,   15,  219,  327,   18,  327,  327,   18,
- /*   820 */    48,   52,   50,   44,    9,   14,  384,  385,   17,   16,
- /*   830 */   386,  283,   41,   39,  210,  327,  327,  327,   47,  327,
- /*   840 */   327,  327,  327,  327,  327,  327,  387,  383,  382,  378,
- /*   850 */   377,  379,  380,  381,  363,  362,  345,  344,  327,  327,
- /*   860 */   327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
- /*   870 */   327,  327,  274,   48,   52,   50,   44,    9,   14,  384,
- /*   880 */   385,   17,   16,  386,  283,   41,   39,  210,  327,  327,
- /*   890 */   327,  327,  327,  327,  327,  327,  327,  327,  327,  387,
- /*   900 */   383,  382,  378,  377,  379,  380,  381,  363,  362,  345,
- /*   910 */   344,  327,  327,  327,  327,  327,  327,  327,  327,  327,
- /*   920 */   327,  327,  327,  327,  327,  327,   48,   52,   50,   44,
- /*   930 */     9,   14,  384,  385,   17,   16,  386,  283,   41,   39,
- /*   940 */   210,  327,  327,  327,  327,  327,  327,  327,  327,  327,
- /*   950 */   327,  265,  387,  383,  382,  378,  377,  379,  380,  381,
- /*   960 */   363,  362,  345,  344,  327,  327,  327,  327,  327,  224,
- /*   970 */   327,  327,  327,  327,  327,  327,  327,  327,  327,   48,
- /*   980 */    52,   50,   44,    9,   14,  384,  385,   17,   16,  386,
- /*   990 */   283,   41,   39,  210,  327,  327,  327,  327,  327,  327,
- /*  1000 */   327,  327,  327,  327,  327,  387,  383,  382,  378,  377,
- /*  1010 */   379,  380,  381,  363,  362,  345,  344,  327,  327,  327,
- /*  1020 */   327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
- /*  1030 */   327,  327,   48,   52,   50,   44,    9,   14,  384,  385,
- /*  1040 */    17,   16,  386,  283,   41,   39,  327,  327,  327,  327,
- /*  1050 */   327,  327,  327,  327,  327,  327,  327,  327,  387,  383,
- /*  1060 */   382,  378,  377,  379,  380,  381,  363,  362,  345,  344,
- /*  1070 */   327,  327,  327,   48,   52,   50,   44,    9,   14,  384,
- /*  1080 */   385,   17,   16,  386,  283,   41,   39,  327,  327,  327,
- /*  1090 */   327,  327,  327,  327,  327,  327,  327,  327,  327,  387,
- /*  1100 */   383,  382,  378,  377,  379,  380,  381,  363,  362,  345,
- /*  1110 */   344,  327,  327,  327,  327,  327,   43,  327,  142,  207,
- /*  1120 */   327,  327,    3,  108,  327,  264,  327,  368,  146,  327,
- /*  1130 */   327,  151,  244,  296,  243,  132,  227,   15,   33,  327,
- /*  1140 */   327,   51,  327,   18,  367,  327,  368,  228,  369,  364,
- /*  1150 */   150,  375,  327,  174,  132,  327,   49,   46,  299,  225,
- /*  1160 */   365,  327,  294,  103,    1,  280,  228,  369,  364,  262,
- /*  1170 */   375,  327,  327,   43,  285,  142,  218,  327,   96,    3,
- /*  1180 */   108,   15,  289,  327,  327,  146,  327,   18,  327,  244,
- /*  1190 */   296,  243,  327,  227,   15,   33,  327,  327,   51,  327,
- /*  1200 */    18,  327,  368,  327,  327,  327,  121,  327,  327,   54,
- /*  1210 */   132,  327,  327,   49,   46,  299,  225,  365,  302,  346,
- /*  1220 */   103,    1,  228,  369,  364,  327,  375,  350,  327,  327,
- /*  1230 */    43,  327,  142,  205,  327,   96,    3,  108,  327,   15,
- /*  1240 */   169,  327,  146,  327,  358,   18,  244,  296,  243,  294,
- /*  1250 */   227,  327,   33,  327,  327,   51,   15,  327,  327,  368,
- /*  1260 */   327,  285,   18,  140,  327,  327,   66,  132,  327,  327,
- /*  1270 */    49,   46,  299,  225,  365,  302,  346,  103,    1,  228,
- /*  1280 */   369,  364,  327,  375,  295,  327,  327,   43,  327,  130,
- /*  1290 */   218,  327,   96,    3,  108,  327,   15,  327,  327,  146,
- /*  1300 */   327,  293,   18,  244,  296,  243,  327,  227,  327,   26,
- /*  1310 */   327,  327,   51,   15,  327,  327,  368,  327,  327,   18,
- /*  1320 */   140,  327,  327,   60,  132,  327,  327,   49,   46,  299,
- /*  1330 */   225,  365,  302,  346,  103,    1,  228,  369,  364,  327,
- /*  1340 */   375,  258,  327,  327,   43,  327,  128,  218,  327,   96,
- /*  1350 */     3,  108,  327,   15,  327,  327,  146,  327,  291,   18,
- /*  1360 */   244,  296,  243,  327,  227,  327,    5,  327,  327,   51,
- /*  1370 */    15,  327,  327,  368,  327,  327,   18,  140,  327,  327,
- /*  1380 */    75,  132,  327,  327,   49,   46,  299,  225,  365,  302,
- /*  1390 */   346,  103,    1,  228,  369,  364,  327,  375,  259,  327,
- /*  1400 */   327,   43,  327,  142,  209,  327,   96,    3,  108,  327,
- /*  1410 */    15,  327,  327,  146,  327,  273,   18,  244,  296,  243,
- /*  1420 */   327,  227,  327,   33,  327,  327,   51,   15,  327,  327,
- /*  1430 */   368,  327,  327,   18,  140,  327,  327,   87,  132,  327,
- /*  1440 */   327,   49,   46,  299,  225,  365,  302,  346,  103,    1,
- /*  1450 */   228,  369,  364,  327,  375,  275,  327,  327,   43,  327,
- /*  1460 */   125,   92,  327,   96,    3,  108,  327,   15,  327,  327,
- /*  1470 */   146,  327,  310,   18,  244,  296,  243,  327,  227,  327,
- /*  1480 */    33,  327,  327,   51,   15,  327,  327,  368,  327,  327,
- /*  1490 */    18,  140,  327,  327,   58,  132,  327,  327,   49,   46,
- /*  1500 */   299,  225,  365,  302,  346,  103,    1,  228,  369,  364,
- /*  1510 */   327,  375,  341,  327,  327,   43,  327,  133,  218,  327,
- /*  1520 */    96,    3,  108,  327,   15,  327,  327,  146,  327,  348,
- /*  1530 */    18,  244,  296,  243,  327,  227,  327,   33,  327,  327,
- /*  1540 */    51,   15,  327,  327,  368,  327,  327,   18,  140,  327,
- /*  1550 */   327,   68,  132,  327,  327,   49,   46,  299,  225,  365,
- /*  1560 */   302,  346,  103,    1,  215,  369,  364,  327,  375,  327,
- /*  1570 */   327,  327,   43,  327,  142,  206,  327,   96,    3,  108,
- /*  1580 */   327,  327,  327,  327,  146,  327,  327,  327,  244,  296,
- /*  1590 */   243,  327,  213,  327,   33,  327,  327,   51,  327,  327,
- /*  1600 */   327,  368,  327,  327,  327,  140,  327,  327,   89,  132,
- /*  1610 */   327,  327,   49,   46,  299,  225,  365,  302,  346,  103,
- /*  1620 */     1,  228,  369,  364,  327,  375,  327,  327,  327,   43,
- /*  1630 */   327,  130,  214,  327,   96,    3,  108,  327,  327,  327,
- /*  1640 */   327,  146,  327,  327,  327,  244,  296,  243,  327,  227,
- /*  1650 */   327,   26,  327,  327,   51,  327,  327,  327,  368,  327,
- /*  1660 */   327,  327,   93,  327,  327,   53,  122,  327,  327,   49,
- /*  1670 */    46,  299,  225,  365,  302,  346,  103,  327,  221,  369,
- /*  1680 */   364,  327,  375,  327,  327,  327,   43,  327,  130,  218,
- /*  1690 */   327,   96,    3,  108,  327,  327,  327,  327,  146,  327,
- /*  1700 */   327,  327,  244,  296,  243,  327,  227,  327,   26,  327,
- /*  1710 */   327,   51,  327,  327,  327,  368,  327,  327,  327,  140,
- /*  1720 */   327,  327,   71,  132,  327,  327,   49,   46,  299,  225,
- /*  1730 */   365,  302,  346,  103,  327,  228,  369,  364,  327,  375,
- /*  1740 */   327,  327,  327,  327,  502,  327,  217,  327,   96,  327,
- /*  1750 */   327,  502,  327,  502,  502,  355,  502,  502,  327,  327,
- /*  1760 */   327,   32,  502,  327,  502,    4,  502,    3,  108,  327,
- /*  1770 */    99,  171,  327,  146,  327,  327,  327,  244,  296,  243,
- /*  1780 */   294,  502,  327,   28,   31,  327,  327,  327,  139,  327,
- /*  1790 */   327,  327,  502,  327,  368,  193,  163,  203,  117,  327,
- /*  1800 */   327,   84,  132,  327,  327,  294,  502,  327,   28,   31,
- /*  1810 */   302,  346,  327,  368,  228,  369,  364,  157,  375,  327,
- /*  1820 */   327,  132,  203,  357,   27,  353,  327,  327,  327,  263,
- /*  1830 */   270,  327,  368,  228,  369,  364,  140,  375,  327,   69,
- /*  1840 */   132,  327,  210,  368,  327,  327,  327,  140,  302,  346,
- /*  1850 */    79,  132,  228,  369,  364,  327,  375,  327,  349,  302,
- /*  1860 */   346,  327,  223,  228,  369,  364,  327,  375,  327,  327,
- /*  1870 */    15,  327,  327,  327,  368,  327,   18,  327,  140,    4,
- /*  1880 */   327,   91,  132,  327,  327,  327,  327,  327,  327,  327,
- /*  1890 */   302,  346,  327,  327,  228,  369,  364,  368,  375,  327,
- /*  1900 */   327,  140,  139,  368,   76,  132,  327,  153,  327,  327,
- /*  1910 */   327,  132,  327,  302,  346,  327,  327,  228,  369,  364,
- /*  1920 */   327,  375,  368,  228,  369,  364,  140,  375,  327,   63,
- /*  1930 */   132,  327,  327,  368,  327,  327,  327,  111,  302,  346,
- /*  1940 */    62,  132,  228,  369,  364,  327,  375,  327,  327,  302,
- /*  1950 */   346,  327,  327,  228,  369,  364,  327,  375,  327,  327,
- /*  1960 */   368,  193,  176,  327,  140,  327,  327,   78,  132,  327,
- /*  1970 */   327,  294,  327,  327,   28,   31,  302,  346,  327,  327,
- /*  1980 */   228,  369,  364,  368,  375,  327,  327,  140,  203,  368,
- /*  1990 */    64,  132,  327,  154,  327,  327,  327,  132,  327,  302,
- /*  2000 */   346,  327,  327,  228,  369,  364,  327,  375,  368,  228,
- /*  2010 */   369,  364,  140,  375,  327,   77,  132,  327,  327,  368,
- /*  2020 */   327,  327,  327,  140,  302,  346,   80,  132,  228,  369,
- /*  2030 */   364,  327,  375,  327,  327,  302,  346,  327,  327,  228,
- /*  2040 */   369,  364,  327,  375,  327,  327,  368,  327,  327,  327,
- /*  2050 */   140,  327,  327,   61,  132,  327,  327,  327,  327,  327,
- /*  2060 */   327,  327,  302,  346,  327,  327,  228,  369,  364,  368,
- /*  2070 */   375,  327,  327,  140,  327,  368,   65,  132,  327,  156,
- /*  2080 */   327,  327,  327,  132,  327,  302,  346,  327,  327,  228,
- /*  2090 */   369,  364,  327,  375,  368,  228,  369,  364,  140,  375,
- /*  2100 */   327,   81,  132,  327,  327,  368,  327,  327,  327,  113,
- /*  2110 */   302,  346,   88,  132,  228,  369,  364,  327,  375,  327,
- /*  2120 */   327,  302,  346,  327,  327,  228,  369,  364,  327,  375,
- /*  2130 */   327,  327,  368,  327,  327,  327,  140,  327,  327,   67,
- /*  2140 */   132,  327,  327,  327,  327,  327,  327,  327,  302,  346,
- /*  2150 */   327,  327,  228,  369,  364,  368,  375,  327,  327,  140,
- /*  2160 */   327,  368,   86,  132,  327,  148,  327,  327,  327,  132,
- /*  2170 */   327,  302,  346,  327,  327,  228,  369,  364,  327,  375,
- /*  2180 */   368,  228,  369,  364,  140,  375,  327,   85,  132,  327,
- /*  2190 */   327,  368,  327,  327,  327,  112,  302,  346,   73,  132,
- /*  2200 */   228,  369,  364,  327,  375,  327,  327,  302,  346,  327,
- /*  2210 */   327,  228,  369,  364,  327,  375,  327,  327,  368,  327,
- /*  2220 */   327,  327,  140,  327,  327,   70,  132,  327,  327,  327,
- /*  2230 */   327,  327,  327,  327,  302,  346,  327,  327,  228,  369,
- /*  2240 */   364,  368,  375,  327,  327,  140,  327,  327,   57,  132,
- /*  2250 */   327,  327,  327,  327,  327,  327,  327,  302,  346,  327,
- /*  2260 */   327,  228,  369,  364,  327,  375,  368,  327,  327,  327,
- /*  2270 */   140,  327,  327,   90,  132,  327,  327,  368,  327,  327,
- /*  2280 */   327,  140,  302,  346,   83,  132,  228,  369,  364,  327,
- /*  2290 */   375,  327,  327,  302,  346,  327,  327,  228,  369,  364,
- /*  2300 */   327,  375,  327,  327,  368,  327,  327,  327,  140,  327,
- /*  2310 */   327,   82,  132,  327,  327,  327,  327,  327,  327,  327,
- /*  2320 */   302,  346,  327,  327,  228,  369,  364,  368,  375,  327,
- /*  2330 */   327,  140,  327,  327,   55,  132,  327,  327,  327,  327,
- /*  2340 */   327,  327,  327,  302,  346,  327,  327,  228,  369,  364,
- /*  2350 */   327,  375,  368,  327,  327,  327,  140,  327,  327,   72,
- /*  2360 */   132,  327,  327,  368,  327,  327,  327,   93,  302,  346,
- /*  2370 */    59,  122,  228,  369,  364,  327,  375,  327,  327,  302,
- /*  2380 */   346,  327,  327,  228,  369,  364,  327,  375,  327,  327,
- /*  2390 */   368,  327,  327,  327,  140,  327,  327,   74,  132,  327,
- /*  2400 */   327,  327,  327,  193,  158,  327,  302,  346,  327,  327,
- /*  2410 */   228,  369,  364,  294,  375,  327,   28,   31,  193,  173,
- /*  2420 */   327,  327,  327,  327,  327,  193,  164,  327,  294,  327,
- /*  2430 */   203,   28,   31,  327,  327,  294,  327,  327,   28,   31,
- /*  2440 */   327,  327,  327,  327,  327,  203,  327,  327,  327,  327,
- /*  2450 */   327,  327,  203,
+    const YY_SZ_ACTTAB = 2407;
+    static public $yy_action = array(
+        /*     0 */
+        219, 309, 305, 301, 302, 303, 304, 310, 311, 317,
+        /*    10 */
+        318, 319, 201, 30, 273, 9, 33, 238, 280, 15,
+        /*    20 */
+        5, 108, 235, 234, 220, 7, 126, 42, 30, 30,
+        /*    30 */
+        259, 211, 256, 495, 15, 15, 10, 33, 495, 280,
+        /*    40 */
+        46, 47, 51, 45, 24, 14, 352, 353, 39, 37,
+        /*    50 */
+        278, 359, 12, 25, 219, 219, 326, 434, 219, 192,
+        /*    60 */
+        434, 569, 95, 263, 227, 306, 360, 361, 358, 357,
+        /*    70 */
+        354, 355, 356, 342, 341, 328, 329, 330, 292, 219,
+        /*    80 */
+        202, 322, 242, 30, 434, 231, 207, 434, 143, 15,
+        /*    90 */
+        434, 35, 158, 434, 46, 47, 51, 45, 24, 14,
+        /*   100 */
+        352, 353, 39, 37, 278, 359, 12, 25, 219, 48,
+        /*   110 */
+        32, 219, 48, 391, 196, 2, 31, 138, 321, 4,
+        /*   120 */
+        360, 361, 358, 357, 354, 355, 356, 342, 341, 328,
+        /*   130 */
+        329, 330, 127, 48, 290, 349, 251, 30, 145, 140,
+        /*   140 */
+        30, 207, 264, 15, 200, 322, 15, 334, 46, 47,
+        /*   150 */
+        51, 45, 24, 14, 352, 353, 39, 37, 278, 359,
+        /*   160 */
+        12, 25, 219, 289, 219, 48, 431, 297, 219, 33,
+        /*   170 */
+        396, 280, 18, 191, 360, 361, 358, 357, 354, 355,
+        /*   180 */
+        356, 342, 341, 328, 329, 330, 300, 285, 286, 287,
+        /*   190 */
+        299, 206, 219, 431, 428, 194, 201, 315, 314, 431,
+        /*   200 */
+        207, 281, 46, 47, 51, 45, 24, 14, 352, 353,
+        /*   210 */
+        39, 37, 278, 359, 12, 25, 219, 33, 48, 280,
+        /*   220 */
+        34, 30, 48, 197, 322, 276, 158, 15, 360, 361,
+        /*   230 */
+        358, 357, 354, 355, 356, 342, 341, 328, 329, 330,
+        /*   240 */
+        230, 338, 16, 289, 103, 179, 244, 219, 295, 2,
+        /*   250 */
+        41, 33, 265, 280, 283, 148, 46, 47, 51, 45,
+        /*   260 */
+        24, 14, 352, 353, 39, 37, 278, 359, 12, 25,
+        /*   270 */
+        219, 207, 145, 43, 132, 189, 109, 333, 307, 227,
+        /*   280 */
+        306, 190, 360, 361, 358, 357, 354, 355, 356, 342,
+        /*   290 */
+        341, 328, 329, 330, 20, 22, 248, 339, 219, 99,
+        /*   300 */
+        174, 48, 324, 33, 346, 280, 18, 288, 207, 283,
+        /*   310 */
+        46, 47, 51, 45, 24, 14, 352, 353, 39, 37,
+        /*   320 */
+        278, 359, 12, 25, 219, 289, 207, 30, 41, 110,
+        /*   330 */
+        275, 2, 41, 15, 272, 266, 360, 361, 358, 357,
+        /*   340 */
+        354, 355, 356, 342, 341, 328, 329, 330, 242, 40,
+        /*   350 */
+        236, 347, 104, 177, 145, 219, 44, 316, 148, 135,
+        /*   360 */
+        228, 27, 283, 269, 46, 47, 51, 45, 24, 14,
+        /*   370 */
+        352, 353, 39, 37, 278, 359, 12, 25, 219, 207,
+        /*   380 */
+        208, 33, 7, 280, 245, 239, 136, 173, 241, 279,
+        /*   390 */
+        360, 361, 358, 357, 354, 355, 356, 342, 341, 328,
+        /*   400 */
+        329, 330, 29, 158, 106, 13, 122, 171, 181, 6,
+        /*   410 */
+        33, 15, 226, 33, 219, 237, 283, 283, 46, 47,
+        /*   420 */
+        51, 45, 24, 14, 352, 353, 39, 37, 278, 359,
+        /*   430 */
+        12, 25, 219, 205, 205, 252, 313, 238, 312, 235,
+        /*   440 */
+        232, 195, 97, 127, 360, 361, 358, 357, 354, 355,
+        /*   450 */
+        356, 342, 341, 328, 329, 330, 28, 320, 230, 105,
+        /*   460 */
+        182, 164, 176, 33, 279, 254, 282, 186, 207, 283,
+        /*   470 */
+        283, 253, 46, 47, 51, 45, 24, 14, 352, 353,
+        /*   480 */
+        39, 37, 278, 359, 12, 25, 219, 205, 260, 107,
+        /*   490 */
+        235, 262, 33, 193, 214, 332, 166, 198, 360, 361,
+        /*   500 */
+        358, 357, 354, 355, 356, 342, 341, 328, 329, 330,
+        /*   510 */
+        137, 175, 167, 291, 308, 344, 185, 261, 267, 161,
+        /*   520 */
+        283, 283, 128, 337, 124, 283, 46, 47, 51, 45,
+        /*   530 */
+        24, 14, 352, 353, 39, 37, 278, 359, 12, 25,
+        /*   540 */
+        219, 38, 205, 203, 141, 169, 257, 134, 35, 130,
+        /*   550 */
+        156, 114, 360, 361, 358, 357, 354, 355, 356, 342,
+        /*   560 */
+        341, 328, 329, 330, 320, 158, 320, 241, 36, 293,
+        /*   570 */
+        298, 94, 21, 26, 284, 219, 292, 168, 271, 162,
+        /*   580 */
+        46, 47, 51, 45, 24, 14, 352, 353, 39, 37,
+        /*   590 */
+        278, 359, 12, 25, 219, 279, 229, 205, 44, 281,
+        /*   600 */
+        187, 17, 270, 331, 98, 127, 360, 361, 358, 357,
+        /*   610 */
+        354, 355, 356, 342, 341, 328, 329, 330, 199, 320,
+        /*   620 */
+        331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
+        /*   630 */
+        331, 331, 331, 331, 46, 47, 51, 45, 24, 14,
+        /*   640 */
+        352, 353, 39, 37, 278, 359, 12, 25, 219, 331,
+        /*   650 */
+        268, 331, 331, 331, 331, 331, 331, 331, 125, 115,
+        /*   660 */
+        360, 361, 358, 357, 354, 355, 356, 342, 341, 328,
+        /*   670 */
+        329, 330, 279, 331, 320, 331, 331, 331, 331, 331,
+        /*   680 */
+        331, 331, 331, 331, 331, 331, 331, 331, 46, 47,
+        /*   690 */
+        51, 45, 24, 14, 352, 353, 39, 37, 278, 359,
+        /*   700 */
+        12, 25, 219, 331, 204, 331, 331, 331, 331, 331,
+        /*   710 */
+        331, 159, 100, 116, 360, 361, 358, 357, 354, 355,
+        /*   720 */
+        356, 342, 341, 328, 329, 330, 320, 320, 320, 331,
+        /*   730 */
+        331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
+        /*   740 */
+        331, 331, 46, 47, 51, 45, 24, 14, 352, 353,
+        /*   750 */
+        39, 37, 278, 359, 12, 25, 219, 331, 331, 331,
+        /*   760 */
+        331, 331, 331, 331, 331, 102, 117, 331, 360, 361,
+        /*   770 */
+        358, 357, 354, 355, 356, 342, 341, 328, 329, 330,
+        /*   780 */
+        320, 320, 331, 331, 331, 331, 331, 331, 331, 331,
+        /*   790 */
+        331, 331, 331, 331, 331, 331, 46, 47, 51, 45,
+        /*   800 */
+        24, 14, 352, 353, 39, 37, 278, 359, 12, 25,
+        /*   810 */
+        331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
+        /*   820 */
+        158, 331, 360, 361, 358, 357, 354, 355, 356, 342,
+        /*   830 */
+        341, 328, 329, 330, 331, 331, 331, 331, 46, 47,
+        /*   840 */
+        51, 45, 24, 14, 352, 353, 39, 37, 278, 359,
+        /*   850 */
+        12, 25, 331, 331, 331, 331, 331, 331, 211, 331,
+        /*   860 */
+        331, 331, 331, 10, 360, 361, 358, 357, 354, 355,
+        /*   870 */
+        356, 342, 341, 328, 329, 330, 331, 331, 331, 331,
+        /*   880 */
+        331, 331, 331, 9, 142, 212, 331, 331, 5, 108,
+        /*   890 */
+        331, 246, 331, 331, 126, 157, 183, 331, 259, 123,
+        /*   900 */
+        256, 331, 250, 331, 23, 283, 331, 52, 277, 331,
+        /*   910 */
+        331, 255, 350, 348, 331, 345, 331, 279, 180, 178,
+        /*   920 */
+        331, 331, 49, 50, 296, 240, 351, 283, 283, 106,
+        /*   930 */
+        1, 274, 331, 147, 331, 331, 331, 331, 331, 279,
+        /*   940 */
+        279, 9, 144, 92, 96, 233, 5, 108, 331, 345,
+        /*   950 */
+        331, 331, 126, 331, 331, 246, 259, 323, 256, 146,
+        /*   960 */
+        250, 331, 23, 123, 184, 52, 331, 331, 331, 331,
+        /*   970 */
+        246, 331, 343, 283, 153, 255, 350, 348, 123, 345,
+        /*   980 */
+        49, 50, 296, 240, 351, 279, 331, 106, 1, 331,
+        /*   990 */
+        255, 350, 348, 331, 345, 33, 331, 280, 331, 9,
+        /*  1000 */
+        142, 224, 96, 331, 5, 108, 331, 30, 331, 247,
+        /*  1010 */
+        126, 246, 331, 15, 259, 149, 256, 331, 250, 123,
+        /*  1020 */
+        23, 331, 331, 52, 331, 331, 331, 331, 331, 331,
+        /*  1030 */
+        331, 255, 350, 348, 331, 345, 331, 331, 49, 50,
+        /*  1040 */
+        296, 240, 351, 331, 331, 106, 1, 331, 331, 331,
+        /*  1050 */
+        331, 331, 33, 331, 280, 331, 331, 9, 135, 224,
+        /*  1060 */
+        96, 331, 5, 108, 30, 246, 258, 331, 126, 151,
+        /*  1070 */
+        15, 246, 259, 123, 256, 154, 250, 331, 11, 123,
+        /*  1080 */
+        331, 52, 331, 331, 331, 255, 350, 348, 331, 345,
+        /*  1090 */
+        331, 255, 350, 348, 331, 345, 49, 50, 296, 240,
+        /*  1100 */
+        351, 331, 331, 106, 1, 331, 331, 331, 331, 331,
+        /*  1110 */
+        331, 331, 331, 331, 331, 9, 142, 210, 96, 331,
+        /*  1120 */
+        5, 108, 331, 331, 331, 331, 126, 246, 331, 331,
+        /*  1130 */
+        259, 155, 256, 331, 216, 123, 23, 331, 331, 52,
+        /*  1140 */
+        331, 331, 331, 331, 331, 331, 331, 255, 350, 348,
+        /*  1150 */
+        331, 345, 331, 331, 49, 50, 296, 240, 351, 331,
+        /*  1160 */
+        331, 106, 1, 331, 331, 331, 331, 331, 331, 331,
+        /*  1170 */
+        331, 331, 331, 9, 131, 224, 96, 331, 5, 108,
+        /*  1180 */
+        331, 331, 331, 331, 126, 246, 331, 331, 259, 152,
+        /*  1190 */
+        256, 331, 250, 123, 3, 331, 331, 52, 331, 331,
+        /*  1200 */
+        331, 331, 331, 331, 331, 255, 350, 348, 331, 345,
+        /*  1210 */
+        331, 331, 49, 50, 296, 240, 351, 331, 331, 106,
+        /*  1220 */
+        1, 331, 331, 331, 331, 331, 331, 331, 331, 331,
+        /*  1230 */
+        331, 9, 142, 213, 96, 331, 5, 108, 331, 331,
+        /*  1240 */
+        331, 331, 126, 246, 331, 331, 259, 150, 256, 331,
+        /*  1250 */
+        250, 123, 23, 331, 331, 52, 331, 331, 331, 331,
+        /*  1260 */
+        331, 331, 331, 255, 350, 348, 331, 345, 331, 331,
+        /*  1270 */
+        49, 50, 296, 240, 351, 331, 331, 106, 1, 331,
+        /*  1280 */
+        219, 331, 401, 331, 331, 331, 331, 331, 331, 9,
+        /*  1290 */
+        142, 209, 96, 331, 5, 108, 331, 331, 331, 331,
+        /*  1300 */
+        126, 249, 331, 331, 259, 331, 256, 331, 250, 30,
+        /*  1310 */
+        23, 190, 163, 52, 331, 15, 331, 331, 2, 331,
+        /*  1320 */
+        331, 283, 331, 331, 20, 22, 331, 331, 49, 50,
+        /*  1330 */
+        296, 240, 351, 331, 331, 106, 1, 331, 207, 331,
+        /*  1340 */
+        331, 145, 331, 331, 331, 432, 331, 9, 139, 224,
+        /*  1350 */
+        96, 331, 5, 108, 331, 331, 331, 331, 126, 331,
+        /*  1360 */
+        331, 331, 259, 243, 256, 331, 250, 331, 23, 190,
+        /*  1370 */
+        188, 52, 432, 331, 331, 331, 331, 331, 432, 283,
+        /*  1380 */
+        331, 2, 20, 22, 331, 331, 49, 50, 296, 240,
+        /*  1390 */
+        351, 331, 331, 106, 1, 331, 207, 331, 331, 331,
+        /*  1400 */
+        331, 331, 331, 331, 145, 9, 135, 224, 96, 331,
+        /*  1410 */
+        5, 108, 331, 331, 331, 331, 126, 331, 331, 331,
+        /*  1420 */
+        259, 331, 256, 331, 250, 331, 11, 101, 160, 52,
+        /*  1430 */
+        331, 331, 331, 331, 331, 331, 331, 283, 331, 331,
+        /*  1440 */
+        20, 22, 331, 331, 49, 50, 296, 240, 351, 331,
+        /*  1450 */
+        331, 106, 331, 331, 207, 331, 331, 331, 331, 331,
+        /*  1460 */
+        331, 331, 331, 9, 135, 225, 96, 331, 5, 108,
+        /*  1470 */
+        331, 331, 331, 331, 126, 331, 331, 331, 259, 331,
+        /*  1480 */
+        256, 331, 250, 331, 11, 331, 477, 52, 331, 331,
+        /*  1490 */
+        331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
+        /*  1500 */
+        331, 331, 49, 50, 296, 240, 351, 331, 477, 106,
+        /*  1510 */
+        477, 477, 331, 477, 477, 331, 331, 331, 331, 477,
+        /*  1520 */
+        331, 477, 2, 477, 96, 331, 331, 331, 331, 331,
+        /*  1530 */
+        331, 331, 331, 331, 331, 246, 331, 331, 477, 120,
+        /*  1540 */
+        331, 331, 84, 123, 331, 145, 331, 331, 331, 477,
+        /*  1550 */
+        331, 294, 327, 331, 331, 255, 350, 348, 331, 345,
+        /*  1560 */
+        331, 331, 331, 477, 331, 331, 331, 246, 331, 218,
+        /*  1570 */
+        362, 120, 331, 331, 84, 123, 331, 331, 331, 331,
+        /*  1580 */
+        331, 331, 331, 294, 327, 331, 331, 255, 350, 348,
+        /*  1590 */
+        246, 345, 331, 331, 129, 331, 331, 61, 119, 232,
+        /*  1600 */
+        331, 246, 335, 331, 331, 129, 294, 327, 80, 123,
+        /*  1610 */
+        255, 350, 348, 331, 345, 331, 331, 294, 327, 331,
+        /*  1620 */
+        331, 255, 350, 348, 331, 345, 246, 331, 331, 331,
+        /*  1630 */
+        129, 331, 215, 80, 123, 331, 331, 331, 331, 331,
+        /*  1640 */
+        331, 331, 294, 327, 331, 331, 255, 350, 348, 331,
+        /*  1650 */
+        345, 331, 331, 331, 246, 190, 170, 221, 129, 331,
+        /*  1660 */
+        331, 55, 119, 133, 331, 283, 331, 331, 20, 22,
+        /*  1670 */
+        294, 327, 331, 331, 255, 350, 348, 246, 345, 331,
+        /*  1680 */
+        331, 129, 207, 331, 80, 123, 331, 331, 331, 331,
+        /*  1690 */
+        331, 331, 331, 294, 327, 331, 246, 255, 350, 348,
+        /*  1700 */
+        129, 345, 331, 89, 123, 331, 331, 331, 223, 331,
+        /*  1710 */
+        331, 331, 294, 327, 331, 331, 255, 350, 348, 246,
+        /*  1720 */
+        345, 331, 331, 129, 331, 331, 70, 123, 331, 331,
+        /*  1730 */
+        246, 331, 331, 331, 111, 294, 327, 67, 123, 255,
+        /*  1740 */
+        350, 348, 331, 345, 331, 331, 294, 327, 331, 246,
+        /*  1750 */
+        255, 350, 348, 129, 345, 331, 86, 123, 331, 331,
+        /*  1760 */
+        331, 331, 331, 331, 331, 294, 327, 331, 246, 255,
+        /*  1770 */
+        350, 348, 129, 345, 331, 90, 123, 331, 331, 331,
+        /*  1780 */
+        331, 331, 331, 331, 294, 327, 331, 246, 255, 350,
+        /*  1790 */
+        348, 129, 345, 331, 77, 123, 331, 331, 331, 331,
+        /*  1800 */
+        331, 331, 331, 294, 327, 331, 246, 255, 350, 348,
+        /*  1810 */
+        129, 345, 331, 74, 123, 331, 331, 246, 331, 331,
+        /*  1820 */
+        331, 129, 294, 327, 66, 123, 255, 350, 348, 331,
+        /*  1830 */
+        345, 331, 331, 294, 327, 331, 246, 222, 350, 348,
+        /*  1840 */
+        129, 345, 331, 69, 123, 331, 331, 331, 331, 331,
+        /*  1850 */
+        331, 331, 294, 327, 331, 246, 255, 350, 348, 129,
+        /*  1860 */
+        345, 331, 78, 123, 331, 331, 331, 331, 331, 331,
+        /*  1870 */
+        331, 294, 327, 331, 246, 255, 350, 348, 129, 345,
+        /*  1880 */
+        331, 60, 123, 331, 331, 331, 331, 331, 331, 331,
+        /*  1890 */
+        294, 327, 331, 246, 255, 350, 348, 129, 345, 331,
+        /*  1900 */
+        53, 123, 331, 331, 246, 331, 331, 331, 129, 294,
+        /*  1910 */
+        327, 65, 123, 255, 350, 348, 331, 345, 331, 331,
+        /*  1920 */
+        294, 327, 336, 331, 255, 350, 348, 331, 345, 8,
+        /*  1930 */
+        331, 331, 331, 331, 5, 108, 331, 331, 331, 331,
+        /*  1940 */
+        126, 331, 331, 246, 259, 331, 256, 129, 331, 331,
+        /*  1950 */
+        72, 123, 331, 331, 331, 331, 331, 331, 331, 294,
+        /*  1960 */
+        327, 331, 246, 255, 350, 348, 129, 345, 331, 85,
+        /*  1970 */
+        123, 331, 331, 331, 331, 331, 331, 331, 294, 327,
+        /*  1980 */
+        331, 246, 255, 350, 348, 129, 345, 331, 81, 123,
+        /*  1990 */
+        331, 19, 340, 331, 331, 331, 331, 294, 327, 331,
+        /*  2000 */
+        246, 255, 350, 348, 113, 345, 331, 82, 123, 331,
+        /*  2010 */
+        331, 246, 331, 331, 331, 93, 294, 327, 54, 121,
+        /*  2020 */
+        255, 350, 348, 331, 345, 331, 331, 294, 327, 331,
+        /*  2030 */
+        246, 217, 350, 348, 129, 345, 331, 58, 123, 331,
+        /*  2040 */
+        331, 331, 331, 331, 331, 331, 294, 327, 331, 336,
+        /*  2050 */
+        255, 350, 348, 331, 345, 331, 8, 331, 331, 331,
+        /*  2060 */
+        331, 5, 108, 331, 331, 331, 331, 126, 246, 331,
+        /*  2070 */
+        331, 259, 129, 256, 331, 88, 123, 331, 331, 246,
+        /*  2080 */
+        331, 331, 331, 129, 294, 327, 56, 123, 255, 350,
+        /*  2090 */
+        348, 331, 345, 331, 331, 294, 327, 331, 331, 255,
+        /*  2100 */
+        350, 348, 331, 345, 246, 331, 331, 331, 129, 331,
+        /*  2110 */
+        331, 68, 123, 331, 331, 331, 331, 325, 19, 340,
+        /*  2120 */
+        294, 327, 331, 331, 255, 350, 348, 331, 345, 331,
+        /*  2130 */
+        331, 331, 331, 246, 331, 331, 331, 118, 331, 331,
+        /*  2140 */
+        59, 123, 331, 331, 331, 331, 190, 172, 331, 294,
+        /*  2150 */
+        327, 331, 331, 255, 350, 348, 283, 345, 246, 20,
+        /*  2160 */
+        22, 331, 93, 331, 331, 57, 121, 331, 331, 331,
+        /*  2170 */
+        331, 331, 331, 207, 294, 327, 331, 246, 255, 350,
+        /*  2180 */
+        348, 129, 345, 331, 64, 123, 331, 331, 246, 331,
+        /*  2190 */
+        331, 331, 129, 294, 327, 63, 123, 255, 350, 348,
+        /*  2200 */
+        331, 345, 331, 331, 294, 327, 331, 246, 255, 350,
+        /*  2210 */
+        348, 129, 345, 331, 73, 123, 331, 331, 331, 331,
+        /*  2220 */
+        190, 165, 331, 294, 327, 331, 331, 255, 350, 348,
+        /*  2230 */
+        283, 345, 331, 20, 22, 331, 246, 331, 331, 331,
+        /*  2240 */
+        129, 331, 331, 87, 123, 331, 331, 207, 331, 331,
+        /*  2250 */
+        331, 331, 294, 327, 331, 331, 255, 350, 348, 331,
+        /*  2260 */
+        345, 246, 331, 331, 331, 129, 331, 331, 75, 123,
+        /*  2270 */
+        331, 331, 246, 331, 331, 331, 129, 294, 327, 61,
+        /*  2280 */
+        123, 255, 350, 348, 331, 345, 331, 331, 294, 327,
+        /*  2290 */
+        331, 246, 255, 350, 348, 129, 345, 331, 71, 123,
+        /*  2300 */
+        331, 331, 246, 331, 331, 331, 129, 294, 327, 83,
+        /*  2310 */
+        123, 255, 350, 348, 331, 345, 331, 331, 294, 327,
+        /*  2320 */
+        331, 331, 255, 350, 348, 331, 345, 246, 331, 331,
+        /*  2330 */
+        331, 112, 331, 331, 76, 123, 331, 331, 331, 331,
+        /*  2340 */
+        331, 331, 331, 294, 327, 331, 331, 255, 350, 348,
+        /*  2350 */
+        331, 345, 246, 331, 331, 331, 129, 331, 331, 91,
+        /*  2360 */
+        123, 331, 331, 246, 331, 331, 331, 129, 294, 327,
+        /*  2370 */
+        62, 123, 255, 350, 348, 331, 345, 331, 331, 294,
+        /*  2380 */
+        327, 331, 246, 255, 350, 348, 129, 345, 331, 79,
+        /*  2390 */
+        123, 331, 331, 331, 331, 331, 331, 331, 294, 327,
+        /*  2400 */
+        331, 331, 255, 350, 348, 331, 345,
     );
     static public $yy_lookahead = array(
- /*     0 */     1,    3,    4,    5,    6,    7,    8,    9,   10,   11,
- /*    10 */    12,   13,  113,  114,   16,   91,   17,   17,   91,   16,
- /*    20 */    22,   23,   19,   20,  100,   24,   28,  100,   29,   29,
- /*    30 */    32,   33,   34,   29,   35,   35,  112,   16,   37,   40,
- /*    40 */    41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
- /*    50 */    51,   52,   53,    1,   82,   83,   84,   85,   86,   38,
- /*    60 */    16,   90,   18,   19,   90,   66,   67,   68,   69,   70,
- /*    70 */    71,   72,   73,   74,   75,   76,   77,  103,  104,   27,
- /*    80 */    36,   29,   16,   96,   18,   19,   16,   35,  117,   19,
- /*    90 */    20,  117,   40,   41,   42,   43,   44,   45,   46,   47,
- /*   100 */    48,   49,   50,   51,   52,   53,    4,    5,    6,    7,
- /*   110 */     8,   20,  118,   38,   38,   13,   14,   15,   66,   67,
- /*   120 */    68,   69,   70,   71,   72,   73,   74,   75,   76,   77,
- /*   130 */     1,   85,   62,    1,   59,   89,   61,   61,   92,   93,
- /*   140 */    65,   16,   20,   21,   19,   17,   17,  101,  102,   17,
- /*   150 */    59,  105,  106,  107,   29,  109,   31,   29,   29,   91,
- /*   160 */    35,   29,   30,   35,   35,  119,  120,   35,  100,   40,
- /*   170 */    41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
- /*   180 */    51,   52,   53,   61,   90,   91,   54,  113,  114,  111,
- /*   190 */    16,  113,  114,   19,  100,   66,   67,   68,   69,   70,
- /*   200 */    71,   72,   73,   74,   75,   76,   77,    1,   85,   59,
- /*   210 */     1,  117,   89,    1,   64,   92,   93,   94,    1,   17,
- /*   220 */   108,   17,   20,   17,  101,  102,   17,  115,  105,  106,
- /*   230 */   107,   29,  109,   29,   17,   29,   62,   35,   29,   35,
- /*   240 */    38,   35,   19,   31,   35,   99,   40,   41,   42,   43,
- /*   250 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
- /*   260 */     1,   16,   37,   61,   19,   20,   54,  110,    1,    2,
- /*   270 */    25,   54,   66,   67,   68,   69,   70,   71,   72,   73,
- /*   280 */    74,   75,   76,   77,   17,   62,   90,   91,   29,    1,
- /*   290 */    65,   90,  110,   37,   35,   39,  100,   20,   21,   40,
- /*   300 */    41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
- /*   310 */    51,   52,   53,  117,   90,   91,   96,   29,  117,  118,
- /*   320 */    84,   85,   86,   35,  100,   66,   67,   68,   69,   70,
- /*   330 */    71,   72,   73,   74,   75,   76,   77,    1,   61,   99,
- /*   340 */     1,  117,   37,   85,   39,   18,   19,   89,   10,   16,
- /*   350 */    99,   93,   19,   17,   16,   21,   17,   93,   85,    1,
- /*   360 */    22,   23,   29,  105,  106,  107,   28,  109,   35,  105,
- /*   370 */    32,   33,   34,  109,   25,   17,   40,   41,   42,   43,
- /*   380 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
- /*   390 */    63,    1,   31,   59,  121,  122,   25,    2,   64,   38,
- /*   400 */    18,   19,   66,   67,   68,   69,   70,   71,   72,   73,
- /*   410 */    74,   75,   76,   77,   24,   20,   78,   79,   80,   91,
- /*   420 */    91,   29,   61,   93,   94,   95,   19,   35,  100,  100,
- /*   430 */    40,   41,   42,   43,   44,   45,   46,   47,   48,   49,
- /*   440 */    50,   51,   52,   53,   91,  117,  117,   37,   16,   39,
- /*   450 */    79,   19,  110,  100,  112,   19,   66,   67,   68,   69,
- /*   460 */    70,   71,   72,   73,   74,   75,   76,   77,    1,   85,
- /*   470 */   117,    1,    1,   89,  108,   90,   92,   93,   94,   16,
- /*   480 */     1,  115,   19,   17,   17,  101,  102,   17,   17,  105,
- /*   490 */   106,  107,   29,  109,   31,   29,   17,   91,   35,   29,
- /*   500 */    21,   35,  117,   19,   18,   35,  100,   40,   41,   42,
- /*   510 */    43,   44,   45,   46,   47,   48,   49,   50,   51,   52,
- /*   520 */    53,    1,   16,  117,   54,   19,   16,   18,    1,   19,
- /*   530 */    97,   97,    1,   66,   67,   68,   69,   70,   71,   72,
- /*   540 */    73,   74,   75,   76,   77,  112,  112,   38,   17,   90,
- /*   550 */    93,   94,   16,   16,   26,   19,   19,   93,   94,   39,
- /*   560 */    40,   41,   42,   43,   44,   45,   46,   47,   48,   49,
- /*   570 */    50,   51,   52,   53,    1,    2,  117,   17,  110,   16,
- /*   580 */   112,   54,   19,   18,   97,   25,   66,   67,   68,   69,
- /*   590 */    70,   71,   72,   73,   74,   75,   76,   77,   62,  112,
- /*   600 */    29,   19,   91,   86,   38,   88,   35,   19,   63,   55,
- /*   610 */    63,  100,   97,   40,   41,   42,   43,   44,   45,   46,
- /*   620 */    47,   48,   49,   50,   51,   52,   53,  112,   19,   65,
- /*   630 */    39,   18,    2,   36,   36,   59,   19,   18,   97,   66,
- /*   640 */    67,   68,   69,   70,   71,   72,   73,   74,   75,   76,
- /*   650 */    77,    1,   85,  112,    1,   18,   89,   85,   19,   92,
- /*   660 */    93,   89,   19,   38,   20,   93,   91,   17,  101,  102,
- /*   670 */    17,   97,  105,  106,  107,  100,  109,  105,  106,  107,
- /*   680 */    19,  109,   29,  116,    2,   19,  112,  112,   35,   21,
- /*   690 */    40,   41,   42,   43,   44,   45,   46,   47,   48,   49,
- /*   700 */    50,   51,   52,   53,    1,    1,  100,   54,  112,  117,
- /*   710 */   111,    2,   21,  110,   98,   97,   66,   67,   68,   69,
- /*   720 */    70,   71,   72,   73,   74,   75,   76,   77,  112,   61,
- /*   730 */   112,   85,   14,  110,   87,  115,  114,  123,  123,  123,
- /*   740 */   123,  123,   97,   40,   41,   42,   43,   44,   45,   46,
- /*   750 */    47,   48,   49,   50,   51,   52,   53,  112,  123,  123,
- /*   760 */   123,  123,  123,  123,  123,  123,  123,  123,  122,   66,
- /*   770 */    67,   68,   69,   70,   71,   72,   73,   74,   75,   76,
- /*   780 */    77,    1,   79,   85,  123,    1,  123,   89,  123,  123,
- /*   790 */    92,   93,  123,   97,   17,  123,   97,   17,   17,  101,
- /*   800 */   102,   17,  123,  105,  106,  107,   29,  109,  112,  123,
- /*   810 */    29,  112,   35,   29,  116,  123,   35,  123,  123,   35,
- /*   820 */    40,   41,   42,   43,   44,   45,   46,   47,   48,   49,
- /*   830 */    50,   51,   52,   53,    1,  123,  123,  123,   54,  123,
- /*   840 */   123,  123,  123,  123,  123,  123,   66,   67,   68,   69,
- /*   850 */    70,   71,   72,   73,   74,   75,   76,   77,  123,  123,
- /*   860 */   123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
- /*   870 */   123,  123,   39,   40,   41,   42,   43,   44,   45,   46,
- /*   880 */    47,   48,   49,   50,   51,   52,   53,    1,  123,  123,
- /*   890 */   123,  123,  123,  123,  123,  123,  123,  123,  123,   66,
- /*   900 */    67,   68,   69,   70,   71,   72,   73,   74,   75,   76,
- /*   910 */    77,  123,  123,  123,  123,  123,  123,  123,  123,  123,
- /*   920 */   123,  123,  123,  123,  123,  123,   40,   41,   42,   43,
- /*   930 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
- /*   940 */     1,  123,  123,  123,  123,  123,  123,  123,  123,  123,
- /*   950 */   123,   65,   66,   67,   68,   69,   70,   71,   72,   73,
- /*   960 */    74,   75,   76,   77,  123,  123,  123,  123,  123,   30,
- /*   970 */   123,  123,  123,  123,  123,  123,  123,  123,  123,   40,
- /*   980 */    41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
- /*   990 */    51,   52,   53,    1,  123,  123,  123,  123,  123,  123,
- /*  1000 */   123,  123,  123,  123,  123,   66,   67,   68,   69,   70,
- /*  1010 */    71,   72,   73,   74,   75,   76,   77,  123,  123,  123,
- /*  1020 */   123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
- /*  1030 */   123,  123,   40,   41,   42,   43,   44,   45,   46,   47,
- /*  1040 */    48,   49,   50,   51,   52,   53,  123,  123,  123,  123,
- /*  1050 */   123,  123,  123,  123,  123,  123,  123,  123,   66,   67,
- /*  1060 */    68,   69,   70,   71,   72,   73,   74,   75,   76,   77,
- /*  1070 */   123,  123,  123,   40,   41,   42,   43,   44,   45,   46,
- /*  1080 */    47,   48,   49,   50,   51,   52,   53,  123,  123,  123,
- /*  1090 */   123,  123,  123,  123,  123,  123,  123,  123,  123,   66,
- /*  1100 */    67,   68,   69,   70,   71,   72,   73,   74,   75,   76,
- /*  1110 */    77,  123,  123,  123,  123,  123,   16,  123,   18,   19,
- /*  1120 */   123,  123,   22,   23,  123,   17,  123,   85,   28,  123,
- /*  1130 */   123,   89,   32,   33,   34,   93,   36,   29,   38,  123,
- /*  1140 */   123,   41,  123,   35,  102,  123,   85,  105,  106,  107,
- /*  1150 */    89,  109,  123,   91,   93,  123,   56,   57,   58,   59,
- /*  1160 */    60,  123,  100,   63,   64,   65,  105,  106,  107,   17,
- /*  1170 */   109,  123,  123,   16,  112,   18,   19,  123,   78,   22,
- /*  1180 */    23,   29,   17,  123,  123,   28,  123,   35,  123,   32,
- /*  1190 */    33,   34,  123,   36,   29,   38,  123,  123,   41,  123,
- /*  1200 */    35,  123,   85,  123,  123,  123,   89,  123,  123,   92,
- /*  1210 */    93,  123,  123,   56,   57,   58,   59,   60,  101,  102,
- /*  1220 */    63,   64,  105,  106,  107,  123,  109,   17,  123,  123,
- /*  1230 */    16,  123,   18,   19,  123,   78,   22,   23,  123,   29,
- /*  1240 */    91,  123,   28,  123,   17,   35,   32,   33,   34,  100,
- /*  1250 */    36,  123,   38,  123,  123,   41,   29,  123,  123,   85,
- /*  1260 */   123,  112,   35,   89,  123,  123,   92,   93,  123,  123,
- /*  1270 */    56,   57,   58,   59,   60,  101,  102,   63,   64,  105,
- /*  1280 */   106,  107,  123,  109,   17,  123,  123,   16,  123,   18,
- /*  1290 */    19,  123,   78,   22,   23,  123,   29,  123,  123,   28,
- /*  1300 */   123,   17,   35,   32,   33,   34,  123,   36,  123,   38,
- /*  1310 */   123,  123,   41,   29,  123,  123,   85,  123,  123,   35,
- /*  1320 */    89,  123,  123,   92,   93,  123,  123,   56,   57,   58,
- /*  1330 */    59,   60,  101,  102,   63,   64,  105,  106,  107,  123,
- /*  1340 */   109,   17,  123,  123,   16,  123,   18,   19,  123,   78,
- /*  1350 */    22,   23,  123,   29,  123,  123,   28,  123,   17,   35,
- /*  1360 */    32,   33,   34,  123,   36,  123,   38,  123,  123,   41,
- /*  1370 */    29,  123,  123,   85,  123,  123,   35,   89,  123,  123,
- /*  1380 */    92,   93,  123,  123,   56,   57,   58,   59,   60,  101,
- /*  1390 */   102,   63,   64,  105,  106,  107,  123,  109,   17,  123,
- /*  1400 */   123,   16,  123,   18,   19,  123,   78,   22,   23,  123,
- /*  1410 */    29,  123,  123,   28,  123,   17,   35,   32,   33,   34,
- /*  1420 */   123,   36,  123,   38,  123,  123,   41,   29,  123,  123,
- /*  1430 */    85,  123,  123,   35,   89,  123,  123,   92,   93,  123,
- /*  1440 */   123,   56,   57,   58,   59,   60,  101,  102,   63,   64,
- /*  1450 */   105,  106,  107,  123,  109,   17,  123,  123,   16,  123,
- /*  1460 */    18,   19,  123,   78,   22,   23,  123,   29,  123,  123,
- /*  1470 */    28,  123,   17,   35,   32,   33,   34,  123,   36,  123,
- /*  1480 */    38,  123,  123,   41,   29,  123,  123,   85,  123,  123,
- /*  1490 */    35,   89,  123,  123,   92,   93,  123,  123,   56,   57,
- /*  1500 */    58,   59,   60,  101,  102,   63,   64,  105,  106,  107,
- /*  1510 */   123,  109,   17,  123,  123,   16,  123,   18,   19,  123,
- /*  1520 */    78,   22,   23,  123,   29,  123,  123,   28,  123,   17,
- /*  1530 */    35,   32,   33,   34,  123,   36,  123,   38,  123,  123,
- /*  1540 */    41,   29,  123,  123,   85,  123,  123,   35,   89,  123,
- /*  1550 */   123,   92,   93,  123,  123,   56,   57,   58,   59,   60,
- /*  1560 */   101,  102,   63,   64,  105,  106,  107,  123,  109,  123,
- /*  1570 */   123,  123,   16,  123,   18,   19,  123,   78,   22,   23,
- /*  1580 */   123,  123,  123,  123,   28,  123,  123,  123,   32,   33,
- /*  1590 */    34,  123,   36,  123,   38,  123,  123,   41,  123,  123,
- /*  1600 */   123,   85,  123,  123,  123,   89,  123,  123,   92,   93,
- /*  1610 */   123,  123,   56,   57,   58,   59,   60,  101,  102,   63,
- /*  1620 */    64,  105,  106,  107,  123,  109,  123,  123,  123,   16,
- /*  1630 */   123,   18,   19,  123,   78,   22,   23,  123,  123,  123,
- /*  1640 */   123,   28,  123,  123,  123,   32,   33,   34,  123,   36,
- /*  1650 */   123,   38,  123,  123,   41,  123,  123,  123,   85,  123,
- /*  1660 */   123,  123,   89,  123,  123,   92,   93,  123,  123,   56,
- /*  1670 */    57,   58,   59,   60,  101,  102,   63,  123,  105,  106,
- /*  1680 */   107,  123,  109,  123,  123,  123,   16,  123,   18,   19,
- /*  1690 */   123,   78,   22,   23,  123,  123,  123,  123,   28,  123,
- /*  1700 */   123,  123,   32,   33,   34,  123,   36,  123,   38,  123,
- /*  1710 */   123,   41,  123,  123,  123,   85,  123,  123,  123,   89,
- /*  1720 */   123,  123,   92,   93,  123,  123,   56,   57,   58,   59,
- /*  1730 */    60,  101,  102,   63,  123,  105,  106,  107,  123,  109,
- /*  1740 */   123,  123,  123,  123,   17,  123,  116,  123,   78,  123,
- /*  1750 */   123,   24,  123,   26,   27,   10,   29,   30,  123,  123,
- /*  1760 */   123,   16,   35,  123,   37,   38,   39,   22,   23,  123,
- /*  1770 */    90,   91,  123,   28,  123,  123,  123,   32,   33,   34,
- /*  1780 */   100,   54,  123,  103,  104,  123,  123,  123,   61,  123,
- /*  1790 */   123,  123,   65,  123,   85,   90,   91,  117,   89,  123,
- /*  1800 */   123,   92,   93,  123,  123,  100,   79,  123,  103,  104,
- /*  1810 */   101,  102,  123,   85,  105,  106,  107,   89,  109,  123,
- /*  1820 */   123,   93,  117,   78,   79,   80,  123,  123,  123,  120,
- /*  1830 */   102,  123,   85,  105,  106,  107,   89,  109,  123,   92,
- /*  1840 */    93,  123,    1,   85,  123,  123,  123,   89,  101,  102,
- /*  1850 */    92,   93,  105,  106,  107,  123,  109,  123,   17,  101,
- /*  1860 */   102,  123,   21,  105,  106,  107,  123,  109,  123,  123,
- /*  1870 */    29,  123,  123,  123,   85,  123,   35,  123,   89,   38,
- /*  1880 */   123,   92,   93,  123,  123,  123,  123,  123,  123,  123,
- /*  1890 */   101,  102,  123,  123,  105,  106,  107,   85,  109,  123,
- /*  1900 */   123,   89,   61,   85,   92,   93,  123,   89,  123,  123,
- /*  1910 */   123,   93,  123,  101,  102,  123,  123,  105,  106,  107,
- /*  1920 */   123,  109,   85,  105,  106,  107,   89,  109,  123,   92,
- /*  1930 */    93,  123,  123,   85,  123,  123,  123,   89,  101,  102,
- /*  1940 */    92,   93,  105,  106,  107,  123,  109,  123,  123,  101,
- /*  1950 */   102,  123,  123,  105,  106,  107,  123,  109,  123,  123,
- /*  1960 */    85,   90,   91,  123,   89,  123,  123,   92,   93,  123,
- /*  1970 */   123,  100,  123,  123,  103,  104,  101,  102,  123,  123,
- /*  1980 */   105,  106,  107,   85,  109,  123,  123,   89,  117,   85,
- /*  1990 */    92,   93,  123,   89,  123,  123,  123,   93,  123,  101,
- /*  2000 */   102,  123,  123,  105,  106,  107,  123,  109,   85,  105,
- /*  2010 */   106,  107,   89,  109,  123,   92,   93,  123,  123,   85,
- /*  2020 */   123,  123,  123,   89,  101,  102,   92,   93,  105,  106,
- /*  2030 */   107,  123,  109,  123,  123,  101,  102,  123,  123,  105,
- /*  2040 */   106,  107,  123,  109,  123,  123,   85,  123,  123,  123,
- /*  2050 */    89,  123,  123,   92,   93,  123,  123,  123,  123,  123,
- /*  2060 */   123,  123,  101,  102,  123,  123,  105,  106,  107,   85,
- /*  2070 */   109,  123,  123,   89,  123,   85,   92,   93,  123,   89,
- /*  2080 */   123,  123,  123,   93,  123,  101,  102,  123,  123,  105,
- /*  2090 */   106,  107,  123,  109,   85,  105,  106,  107,   89,  109,
- /*  2100 */   123,   92,   93,  123,  123,   85,  123,  123,  123,   89,
- /*  2110 */   101,  102,   92,   93,  105,  106,  107,  123,  109,  123,
- /*  2120 */   123,  101,  102,  123,  123,  105,  106,  107,  123,  109,
- /*  2130 */   123,  123,   85,  123,  123,  123,   89,  123,  123,   92,
- /*  2140 */    93,  123,  123,  123,  123,  123,  123,  123,  101,  102,
- /*  2150 */   123,  123,  105,  106,  107,   85,  109,  123,  123,   89,
- /*  2160 */   123,   85,   92,   93,  123,   89,  123,  123,  123,   93,
- /*  2170 */   123,  101,  102,  123,  123,  105,  106,  107,  123,  109,
- /*  2180 */    85,  105,  106,  107,   89,  109,  123,   92,   93,  123,
- /*  2190 */   123,   85,  123,  123,  123,   89,  101,  102,   92,   93,
- /*  2200 */   105,  106,  107,  123,  109,  123,  123,  101,  102,  123,
- /*  2210 */   123,  105,  106,  107,  123,  109,  123,  123,   85,  123,
- /*  2220 */   123,  123,   89,  123,  123,   92,   93,  123,  123,  123,
- /*  2230 */   123,  123,  123,  123,  101,  102,  123,  123,  105,  106,
- /*  2240 */   107,   85,  109,  123,  123,   89,  123,  123,   92,   93,
- /*  2250 */   123,  123,  123,  123,  123,  123,  123,  101,  102,  123,
- /*  2260 */   123,  105,  106,  107,  123,  109,   85,  123,  123,  123,
- /*  2270 */    89,  123,  123,   92,   93,  123,  123,   85,  123,  123,
- /*  2280 */   123,   89,  101,  102,   92,   93,  105,  106,  107,  123,
- /*  2290 */   109,  123,  123,  101,  102,  123,  123,  105,  106,  107,
- /*  2300 */   123,  109,  123,  123,   85,  123,  123,  123,   89,  123,
- /*  2310 */   123,   92,   93,  123,  123,  123,  123,  123,  123,  123,
- /*  2320 */   101,  102,  123,  123,  105,  106,  107,   85,  109,  123,
- /*  2330 */   123,   89,  123,  123,   92,   93,  123,  123,  123,  123,
- /*  2340 */   123,  123,  123,  101,  102,  123,  123,  105,  106,  107,
- /*  2350 */   123,  109,   85,  123,  123,  123,   89,  123,  123,   92,
- /*  2360 */    93,  123,  123,   85,  123,  123,  123,   89,  101,  102,
- /*  2370 */    92,   93,  105,  106,  107,  123,  109,  123,  123,  101,
- /*  2380 */   102,  123,  123,  105,  106,  107,  123,  109,  123,  123,
- /*  2390 */    85,  123,  123,  123,   89,  123,  123,   92,   93,  123,
- /*  2400 */   123,  123,  123,   90,   91,  123,  101,  102,  123,  123,
- /*  2410 */   105,  106,  107,  100,  109,  123,  103,  104,   90,   91,
- /*  2420 */   123,  123,  123,  123,  123,   90,   91,  123,  100,  123,
- /*  2430 */   117,  103,  104,  123,  123,  100,  123,  123,  103,  104,
- /*  2440 */   123,  123,  123,  123,  123,  117,  123,  123,  123,  123,
- /*  2450 */   123,  123,  117,
-);
-    const YY_SHIFT_USE_DFLT = -3;
-    const YY_SHIFT_MAX = 252;
+        /*     0 */
+        1, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+        /*    10 */
+        13, 14, 15, 30, 66, 18, 18, 2, 20, 36,
+        /*    20 */
+        23, 24, 94, 95, 96, 39, 29, 28, 30, 30,
+        /*    30 */
+        33, 60, 35, 60, 36, 36, 65, 18, 65, 20,
+        /*    40 */
+        41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+        /*    50 */
+        51, 52, 53, 54, 1, 1, 3, 3, 1, 91,
+        /*    60 */
+        3, 83, 84, 85, 86, 87, 67, 68, 69, 70,
+        /*    70 */
+        71, 72, 73, 74, 75, 76, 77, 78, 112, 1,
+        /*    80 */
+        114, 115, 63, 30, 30, 31, 118, 30, 19, 36,
+        /*    90 */
+        36, 21, 22, 36, 41, 42, 43, 44, 45, 46,
+        /*   100 */
+        47, 48, 49, 50, 51, 52, 53, 54, 1, 55,
+        /*   110 */
+        32, 1, 55, 3, 91, 39, 18, 19, 20, 38,
+        /*   120 */
+        67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+        /*   130 */
+        77, 78, 62, 55, 20, 37, 60, 30, 62, 20,
+        /*   140 */
+        30, 118, 66, 36, 114, 115, 36, 66, 41, 42,
+        /*   150 */
+        43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+        /*   160 */
+        53, 54, 1, 26, 1, 55, 3, 37, 1, 18,
+        /*   170 */
+        3, 20, 21, 91, 67, 68, 69, 70, 71, 72,
+        /*   180 */
+        73, 74, 75, 76, 77, 78, 5, 6, 7, 8,
+        /*   190 */
+        9, 20, 1, 30, 3, 100, 15, 16, 17, 36,
+        /*   200 */
+        118, 119, 41, 42, 43, 44, 45, 46, 47, 48,
+        /*   210 */
+        49, 50, 51, 52, 53, 54, 1, 18, 55, 20,
+        /*   220 */
+        21, 30, 55, 114, 115, 26, 22, 36, 67, 68,
+        /*   230 */
+        69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+        /*   240 */
+        86, 80, 32, 26, 91, 92, 31, 1, 109, 39,
+        /*   250 */
+        38, 18, 40, 20, 101, 116, 41, 42, 43, 44,
+        /*   260 */
+        45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+        /*   270 */
+        1, 118, 62, 18, 19, 20, 122, 123, 85, 86,
+        /*   280 */
+        87, 91, 67, 68, 69, 70, 71, 72, 73, 74,
+        /*   290 */
+        75, 76, 77, 78, 104, 105, 63, 80, 1, 91,
+        /*   300 */
+        92, 55, 3, 18, 115, 20, 21, 20, 118, 101,
+        /*   310 */
+        41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+        /*   320 */
+        51, 52, 53, 54, 1, 26, 118, 30, 38, 88,
+        /*   330 */
+        40, 39, 38, 36, 40, 66, 67, 68, 69, 70,
+        /*   340 */
+        71, 72, 73, 74, 75, 76, 77, 78, 63, 21,
+        /*   350 */
+        63, 109, 91, 92, 62, 1, 2, 16, 116, 19,
+        /*   360 */
+        20, 18, 101, 40, 41, 42, 43, 44, 45, 46,
+        /*   370 */
+        47, 48, 49, 50, 51, 52, 53, 54, 1, 118,
+        /*   380 */
+        3, 18, 39, 20, 19, 20, 19, 111, 60, 113,
+        /*   390 */
+        67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+        /*   400 */
+        77, 78, 21, 22, 64, 30, 39, 92, 92, 39,
+        /*   410 */
+        18, 36, 20, 18, 1, 20, 101, 101, 41, 42,
+        /*   420 */
+        43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+        /*   430 */
+        53, 54, 1, 118, 118, 22, 87, 2, 89, 94,
+        /*   440 */
+        95, 91, 98, 62, 67, 68, 69, 70, 71, 72,
+        /*   450 */
+        73, 74, 75, 76, 77, 78, 21, 113, 86, 111,
+        /*   460 */
+        92, 92, 111, 18, 113, 20, 20, 111, 118, 101,
+        /*   470 */
+        101, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+        /*   480 */
+        49, 50, 51, 52, 53, 54, 1, 118, 3, 100,
+        /*   490 */
+        94, 95, 18, 100, 20, 123, 111, 25, 67, 68,
+        /*   500 */
+        69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+        /*   510 */
+        38, 92, 92, 20, 3, 3, 92, 20, 40, 64,
+        /*   520 */
+        101, 101, 19, 3, 19, 101, 41, 42, 43, 44,
+        /*   530 */
+        45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+        /*   540 */
+        1, 2, 118, 20, 19, 64, 20, 19, 21, 98,
+        /*   550 */
+        20, 98, 67, 68, 69, 70, 71, 72, 73, 74,
+        /*   560 */
+        75, 76, 77, 78, 113, 22, 113, 60, 27, 20,
+        /*   570 */
+        37, 20, 56, 2, 101, 1, 112, 111, 116, 111,
+        /*   580 */
+        41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+        /*   590 */
+        51, 52, 53, 54, 1, 113, 97, 118, 2, 119,
+        /*   600 */
+        111, 97, 30, 124, 98, 62, 67, 68, 69, 70,
+        /*   610 */
+        71, 72, 73, 74, 75, 76, 77, 78, 25, 113,
+        /*   620 */
+        124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+        /*   630 */
+        124, 124, 124, 124, 41, 42, 43, 44, 45, 46,
+        /*   640 */
+        47, 48, 49, 50, 51, 52, 53, 54, 1, 124,
+        /*   650 */
+        3, 124, 124, 124, 124, 124, 124, 124, 99, 98,
+        /*   660 */
+        67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+        /*   670 */
+        77, 78, 113, 124, 113, 124, 124, 124, 124, 124,
+        /*   680 */
+        124, 124, 124, 124, 124, 124, 124, 124, 41, 42,
+        /*   690 */
+        43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+        /*   700 */
+        53, 54, 1, 124, 3, 124, 124, 124, 124, 124,
+        /*   710 */
+        124, 98, 98, 98, 67, 68, 69, 70, 71, 72,
+        /*   720 */
+        73, 74, 75, 76, 77, 78, 113, 113, 113, 124,
+        /*   730 */
+        124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+        /*   740 */
+        124, 124, 41, 42, 43, 44, 45, 46, 47, 48,
+        /*   750 */
+        49, 50, 51, 52, 53, 54, 1, 124, 124, 124,
+        /*   760 */
+        124, 124, 124, 124, 124, 98, 98, 124, 67, 68,
+        /*   770 */
+        69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+        /*   780 */
+        113, 113, 124, 124, 124, 124, 124, 124, 124, 124,
+        /*   790 */
+        124, 124, 124, 124, 124, 124, 41, 42, 43, 44,
+        /*   800 */
+        45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+        /*   810 */
+        124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+        /*   820 */
+        22, 124, 67, 68, 69, 70, 71, 72, 73, 74,
+        /*   830 */
+        75, 76, 77, 78, 124, 124, 124, 124, 41, 42,
+        /*   840 */
+        43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+        /*   850 */
+        53, 54, 124, 124, 124, 124, 124, 124, 60, 124,
+        /*   860 */
+        124, 124, 124, 65, 67, 68, 69, 70, 71, 72,
+        /*   870 */
+        73, 74, 75, 76, 77, 78, 124, 124, 124, 124,
+        /*   880 */
+        124, 124, 124, 18, 19, 20, 124, 124, 23, 24,
+        /*   890 */
+        124, 86, 124, 124, 29, 90, 92, 124, 33, 94,
+        /*   900 */
+        35, 124, 37, 124, 39, 101, 124, 42, 103, 124,
+        /*   910 */
+        124, 106, 107, 108, 124, 110, 124, 113, 92, 92,
+        /*   920 */
+        124, 124, 57, 58, 59, 60, 61, 101, 101, 64,
+        /*   930 */
+        65, 66, 124, 94, 124, 124, 124, 124, 124, 113,
+        /*   940 */
+        113, 18, 19, 20, 79, 106, 23, 24, 124, 110,
+        /*   950 */
+        124, 124, 29, 124, 124, 86, 33, 34, 35, 90,
+        /*   960 */
+        37, 124, 39, 94, 92, 42, 124, 124, 124, 124,
+        /*   970 */
+        86, 124, 103, 101, 90, 106, 107, 108, 94, 110,
+        /*   980 */
+        57, 58, 59, 60, 61, 113, 124, 64, 65, 124,
+        /*   990 */
+        106, 107, 108, 124, 110, 18, 124, 20, 124, 18,
+        /*  1000 */
+        19, 20, 79, 124, 23, 24, 124, 30, 124, 32,
+        /*  1010 */
+        29, 86, 124, 36, 33, 90, 35, 124, 37, 94,
+        /*  1020 */
+        39, 124, 124, 42, 124, 124, 124, 124, 124, 124,
+        /*  1030 */
+        124, 106, 107, 108, 124, 110, 124, 124, 57, 58,
+        /*  1040 */
+        59, 60, 61, 124, 124, 64, 65, 124, 124, 124,
+        /*  1050 */
+        124, 124, 18, 124, 20, 124, 124, 18, 19, 20,
+        /*  1060 */
+        79, 124, 23, 24, 30, 86, 32, 124, 29, 90,
+        /*  1070 */
+        36, 86, 33, 94, 35, 90, 37, 124, 39, 94,
+        /*  1080 */
+        124, 42, 124, 124, 124, 106, 107, 108, 124, 110,
+        /*  1090 */
+        124, 106, 107, 108, 124, 110, 57, 58, 59, 60,
+        /*  1100 */
+        61, 124, 124, 64, 65, 124, 124, 124, 124, 124,
+        /*  1110 */
+        124, 124, 124, 124, 124, 18, 19, 20, 79, 124,
+        /*  1120 */
+        23, 24, 124, 124, 124, 124, 29, 86, 124, 124,
+        /*  1130 */
+        33, 90, 35, 124, 37, 94, 39, 124, 124, 42,
+        /*  1140 */
+        124, 124, 124, 124, 124, 124, 124, 106, 107, 108,
+        /*  1150 */
+        124, 110, 124, 124, 57, 58, 59, 60, 61, 124,
+        /*  1160 */
+        124, 64, 65, 124, 124, 124, 124, 124, 124, 124,
+        /*  1170 */
+        124, 124, 124, 18, 19, 20, 79, 124, 23, 24,
+        /*  1180 */
+        124, 124, 124, 124, 29, 86, 124, 124, 33, 90,
+        /*  1190 */
+        35, 124, 37, 94, 39, 124, 124, 42, 124, 124,
+        /*  1200 */
+        124, 124, 124, 124, 124, 106, 107, 108, 124, 110,
+        /*  1210 */
+        124, 124, 57, 58, 59, 60, 61, 124, 124, 64,
+        /*  1220 */
+        65, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+        /*  1230 */
+        124, 18, 19, 20, 79, 124, 23, 24, 124, 124,
+        /*  1240 */
+        124, 124, 29, 86, 124, 124, 33, 90, 35, 124,
+        /*  1250 */
+        37, 94, 39, 124, 124, 42, 124, 124, 124, 124,
+        /*  1260 */
+        124, 124, 124, 106, 107, 108, 124, 110, 124, 124,
+        /*  1270 */
+        57, 58, 59, 60, 61, 124, 124, 64, 65, 124,
+        /*  1280 */
+        1, 124, 3, 124, 124, 124, 124, 124, 124, 18,
+        /*  1290 */
+        19, 20, 79, 124, 23, 24, 124, 124, 124, 124,
+        /*  1300 */
+        29, 22, 124, 124, 33, 124, 35, 124, 37, 30,
+        /*  1310 */
+        39, 91, 92, 42, 124, 36, 124, 124, 39, 124,
+        /*  1320 */
+        124, 101, 124, 124, 104, 105, 124, 124, 57, 58,
+        /*  1330 */
+        59, 60, 61, 124, 124, 64, 65, 124, 118, 124,
+        /*  1340 */
+        124, 62, 124, 124, 124, 3, 124, 18, 19, 20,
+        /*  1350 */
+        79, 124, 23, 24, 124, 124, 124, 124, 29, 124,
+        /*  1360 */
+        124, 124, 33, 21, 35, 124, 37, 124, 39, 91,
+        /*  1370 */
+        92, 42, 30, 124, 124, 124, 124, 124, 36, 101,
+        /*  1380 */
+        124, 39, 104, 105, 124, 124, 57, 58, 59, 60,
+        /*  1390 */
+        61, 124, 124, 64, 65, 124, 118, 124, 124, 124,
+        /*  1400 */
+        124, 124, 124, 124, 62, 18, 19, 20, 79, 124,
+        /*  1410 */
+        23, 24, 124, 124, 124, 124, 29, 124, 124, 124,
+        /*  1420 */
+        33, 124, 35, 124, 37, 124, 39, 91, 92, 42,
+        /*  1430 */
+        124, 124, 124, 124, 124, 124, 124, 101, 124, 124,
+        /*  1440 */
+        104, 105, 124, 124, 57, 58, 59, 60, 61, 124,
+        /*  1450 */
+        124, 64, 124, 124, 118, 124, 124, 124, 124, 124,
+        /*  1460 */
+        124, 124, 124, 18, 19, 20, 79, 124, 23, 24,
+        /*  1470 */
+        124, 124, 124, 124, 29, 124, 124, 124, 33, 124,
+        /*  1480 */
+        35, 124, 37, 124, 39, 124, 3, 42, 124, 124,
+        /*  1490 */
+        124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+        /*  1500 */
+        124, 124, 57, 58, 59, 60, 61, 124, 25, 64,
+        /*  1510 */
+        27, 28, 124, 30, 31, 124, 124, 124, 124, 36,
+        /*  1520 */
+        124, 38, 39, 40, 79, 124, 124, 124, 124, 124,
+        /*  1530 */
+        124, 124, 124, 124, 124, 86, 124, 124, 55, 90,
+        /*  1540 */
+        124, 124, 93, 94, 124, 62, 124, 124, 124, 66,
+        /*  1550 */
+        124, 102, 103, 124, 124, 106, 107, 108, 124, 110,
+        /*  1560 */
+        124, 124, 124, 80, 124, 124, 124, 86, 124, 120,
+        /*  1570 */
+        121, 90, 124, 124, 93, 94, 124, 124, 124, 124,
+        /*  1580 */
+        124, 124, 124, 102, 103, 124, 124, 106, 107, 108,
+        /*  1590 */
+        86, 110, 124, 124, 90, 124, 124, 93, 94, 95,
+        /*  1600 */
+        124, 86, 121, 124, 124, 90, 102, 103, 93, 94,
+        /*  1610 */
+        106, 107, 108, 124, 110, 124, 124, 102, 103, 124,
+        /*  1620 */
+        124, 106, 107, 108, 124, 110, 86, 124, 124, 124,
+        /*  1630 */
+        90, 124, 117, 93, 94, 124, 124, 124, 124, 124,
+        /*  1640 */
+        124, 124, 102, 103, 124, 124, 106, 107, 108, 124,
+        /*  1650 */
+        110, 124, 124, 124, 86, 91, 92, 117, 90, 124,
+        /*  1660 */
+        124, 93, 94, 95, 124, 101, 124, 124, 104, 105,
+        /*  1670 */
+        102, 103, 124, 124, 106, 107, 108, 86, 110, 124,
+        /*  1680 */
+        124, 90, 118, 124, 93, 94, 124, 124, 124, 124,
+        /*  1690 */
+        124, 124, 124, 102, 103, 124, 86, 106, 107, 108,
+        /*  1700 */
+        90, 110, 124, 93, 94, 124, 124, 124, 117, 124,
+        /*  1710 */
+        124, 124, 102, 103, 124, 124, 106, 107, 108, 86,
+        /*  1720 */
+        110, 124, 124, 90, 124, 124, 93, 94, 124, 124,
+        /*  1730 */
+        86, 124, 124, 124, 90, 102, 103, 93, 94, 106,
+        /*  1740 */
+        107, 108, 124, 110, 124, 124, 102, 103, 124, 86,
+        /*  1750 */
+        106, 107, 108, 90, 110, 124, 93, 94, 124, 124,
+        /*  1760 */
+        124, 124, 124, 124, 124, 102, 103, 124, 86, 106,
+        /*  1770 */
+        107, 108, 90, 110, 124, 93, 94, 124, 124, 124,
+        /*  1780 */
+        124, 124, 124, 124, 102, 103, 124, 86, 106, 107,
+        /*  1790 */
+        108, 90, 110, 124, 93, 94, 124, 124, 124, 124,
+        /*  1800 */
+        124, 124, 124, 102, 103, 124, 86, 106, 107, 108,
+        /*  1810 */
+        90, 110, 124, 93, 94, 124, 124, 86, 124, 124,
+        /*  1820 */
+        124, 90, 102, 103, 93, 94, 106, 107, 108, 124,
+        /*  1830 */
+        110, 124, 124, 102, 103, 124, 86, 106, 107, 108,
+        /*  1840 */
+        90, 110, 124, 93, 94, 124, 124, 124, 124, 124,
+        /*  1850 */
+        124, 124, 102, 103, 124, 86, 106, 107, 108, 90,
+        /*  1860 */
+        110, 124, 93, 94, 124, 124, 124, 124, 124, 124,
+        /*  1870 */
+        124, 102, 103, 124, 86, 106, 107, 108, 90, 110,
+        /*  1880 */
+        124, 93, 94, 124, 124, 124, 124, 124, 124, 124,
+        /*  1890 */
+        102, 103, 124, 86, 106, 107, 108, 90, 110, 124,
+        /*  1900 */
+        93, 94, 124, 124, 86, 124, 124, 124, 90, 102,
+        /*  1910 */
+        103, 93, 94, 106, 107, 108, 124, 110, 124, 124,
+        /*  1920 */
+        102, 103, 11, 124, 106, 107, 108, 124, 110, 18,
+        /*  1930 */
+        124, 124, 124, 124, 23, 24, 124, 124, 124, 124,
+        /*  1940 */
+        29, 124, 124, 86, 33, 124, 35, 90, 124, 124,
+        /*  1950 */
+        93, 94, 124, 124, 124, 124, 124, 124, 124, 102,
+        /*  1960 */
+        103, 124, 86, 106, 107, 108, 90, 110, 124, 93,
+        /*  1970 */
+        94, 124, 124, 124, 124, 124, 124, 124, 102, 103,
+        /*  1980 */
+        124, 86, 106, 107, 108, 90, 110, 124, 93, 94,
+        /*  1990 */
+        79, 80, 81, 124, 124, 124, 124, 102, 103, 124,
+        /*  2000 */
+        86, 106, 107, 108, 90, 110, 124, 93, 94, 124,
+        /*  2010 */
+        124, 86, 124, 124, 124, 90, 102, 103, 93, 94,
+        /*  2020 */
+        106, 107, 108, 124, 110, 124, 124, 102, 103, 124,
+        /*  2030 */
+        86, 106, 107, 108, 90, 110, 124, 93, 94, 124,
+        /*  2040 */
+        124, 124, 124, 124, 124, 124, 102, 103, 124, 11,
+        /*  2050 */
+        106, 107, 108, 124, 110, 124, 18, 124, 124, 124,
+        /*  2060 */
+        124, 23, 24, 124, 124, 124, 124, 29, 86, 124,
+        /*  2070 */
+        124, 33, 90, 35, 124, 93, 94, 124, 124, 86,
+        /*  2080 */
+        124, 124, 124, 90, 102, 103, 93, 94, 106, 107,
+        /*  2090 */
+        108, 124, 110, 124, 124, 102, 103, 124, 124, 106,
+        /*  2100 */
+        107, 108, 124, 110, 86, 124, 124, 124, 90, 124,
+        /*  2110 */
+        124, 93, 94, 124, 124, 124, 124, 79, 80, 81,
+        /*  2120 */
+        102, 103, 124, 124, 106, 107, 108, 124, 110, 124,
+        /*  2130 */
+        124, 124, 124, 86, 124, 124, 124, 90, 124, 124,
+        /*  2140 */
+        93, 94, 124, 124, 124, 124, 91, 92, 124, 102,
+        /*  2150 */
+        103, 124, 124, 106, 107, 108, 101, 110, 86, 104,
+        /*  2160 */
+        105, 124, 90, 124, 124, 93, 94, 124, 124, 124,
+        /*  2170 */
+        124, 124, 124, 118, 102, 103, 124, 86, 106, 107,
+        /*  2180 */
+        108, 90, 110, 124, 93, 94, 124, 124, 86, 124,
+        /*  2190 */
+        124, 124, 90, 102, 103, 93, 94, 106, 107, 108,
+        /*  2200 */
+        124, 110, 124, 124, 102, 103, 124, 86, 106, 107,
+        /*  2210 */
+        108, 90, 110, 124, 93, 94, 124, 124, 124, 124,
+        /*  2220 */
+        91, 92, 124, 102, 103, 124, 124, 106, 107, 108,
+        /*  2230 */
+        101, 110, 124, 104, 105, 124, 86, 124, 124, 124,
+        /*  2240 */
+        90, 124, 124, 93, 94, 124, 124, 118, 124, 124,
+        /*  2250 */
+        124, 124, 102, 103, 124, 124, 106, 107, 108, 124,
+        /*  2260 */
+        110, 86, 124, 124, 124, 90, 124, 124, 93, 94,
+        /*  2270 */
+        124, 124, 86, 124, 124, 124, 90, 102, 103, 93,
+        /*  2280 */
+        94, 106, 107, 108, 124, 110, 124, 124, 102, 103,
+        /*  2290 */
+        124, 86, 106, 107, 108, 90, 110, 124, 93, 94,
+        /*  2300 */
+        124, 124, 86, 124, 124, 124, 90, 102, 103, 93,
+        /*  2310 */
+        94, 106, 107, 108, 124, 110, 124, 124, 102, 103,
+        /*  2320 */
+        124, 124, 106, 107, 108, 124, 110, 86, 124, 124,
+        /*  2330 */
+        124, 90, 124, 124, 93, 94, 124, 124, 124, 124,
+        /*  2340 */
+        124, 124, 124, 102, 103, 124, 124, 106, 107, 108,
+        /*  2350 */
+        124, 110, 86, 124, 124, 124, 90, 124, 124, 93,
+        /*  2360 */
+        94, 124, 124, 86, 124, 124, 124, 90, 102, 103,
+        /*  2370 */
+        93, 94, 106, 107, 108, 124, 110, 124, 124, 102,
+        /*  2380 */
+        103, 124, 86, 106, 107, 108, 90, 110, 124, 93,
+        /*  2390 */
+        94, 124, 124, 124, 124, 124, 124, 124, 102, 103,
+        /*  2400 */
+        124, 124, 106, 107, 108, 124, 110,
+    );
+    const YY_SHIFT_USE_DFLT = - 53;
+    const YY_SHIFT_MAX = 259;
     static public $yy_shift_ofst = array(
- /*     0 */    -2, 1385, 1385, 1328, 1157, 1328, 1157, 1157, 1100, 1157,
- /*    10 */  1157, 1157, 1157, 1157, 1157, 1556, 1157, 1157, 1157, 1157,
- /*    20 */  1556, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
- /*    30 */  1157, 1157, 1442, 1157, 1157, 1499, 1157, 1157, 1214, 1157,
- /*    40 */  1157, 1157, 1157, 1442, 1271, 1271, 1670, 1613, 1670, 1670,
- /*    50 */  1670, 1670, 1670,  206,  129,   52,   -1,  259,  259,  259,
- /*    60 */   833,  886,  939,  780,  650,  390,  336,  467,  703,  520,
- /*    70 */   573,  992,  992,  992,  992,  992,  992,  992,  992,  992,
- /*    80 */   992,  992,  992,  992,  992,  992,  992,  992,  992,  992,
- /*    90 */  1033, 1033, 1841,  784,  288,   -2,  338,  125,  463,  209,
- /*   100 */   333,  209,  333,  327,  288,  267,  288,  334,  509, 1745,
- /*   110 */   102,  132,  470,  653,   70,  245,  479,  212,  204,    3,
- /*   120 */   174,  217,  277,  122,  432,  537,  432,  509,  510,  432,
- /*   130 */   432,  382,  668,  506,  432,  432,  531,  563,  432,  382,
- /*   140 */   527,  432,  510,  509,  571,  432,  392,  691,  704,  704,
- /*   150 */   704,  704,  704,  704,  704,  691,  704,   -3, 1341, 1381,
- /*   160 */  1284, 1267,   66, 1108, 1152, 1165, 1210,  536, 1438, 1398,
- /*   170 */  1495, 1512,  466,  777,    0,  128,  781, 1324, 1455, 1227,
- /*   180 */   471,  358,  150,  150,  339,  150,  150,   21,  150,  718,
- /*   190 */   691,  691,  625,  704,  704,  709,  691,  709,    4,    4,
- /*   200 */    -3,   -3,   -3,   -3,   -3, 1727,  202,   75,   44,  361,
- /*   210 */   223,    1,  225,   91,   76,  371,  395,  410,   76,  256,
- /*   220 */   305,  560,  625,  617,  619,  598,  597,  576,  349,  630,
- /*   230 */   637,  639,  666,  682,  661,  643,  644,  613,  591,  528,
- /*   240 */   565,  486,  484,  407,  436,  582,  566,  564,  609,  547,
- /*   250 */   554,  588,  545,
-);
-    const YY_REDUCE_USE_DFLT = -102;
-    const YY_REDUCE_MAX = 204;
+        /*     0 */
+        - 3, 1213, 981, 1155, 1213, 1155, 981, 981, 923, 923,
+        /*    10 */
+        865, 981, 981, 1097, 981, 981, 981, 981, 981, 981,
+        /*    20 */
+        981, 1329, 981, 981, 981, 981, 1271, 981, 981, 981,
+        /*    30 */
+        1097, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+        /*    40 */
+        981, 981, 981, 981, 1039, 1039, 1387, 1387, 1445, 1387,
+        /*    50 */
+        1387, 1387, 1387, - 1, 53, 107, 107, 107, 107, 107,
+        /*    60 */
+        485, 431, 593, 647, 701, 323, 161, 215, 377, 269,
+        /*    70 */
+        539, 755, 755, 755, 755, 755, 755, 755, 755, 755,
+        /*    80 */
+        755, 755, 755, 755, 755, 755, 755, 755, 755, 755,
+        /*    90 */
+        797, 797, 1279, 110, 297, - 3, 2038, 977, 1034, 191,
+        /*   100 */
+        - 2, 191, - 2, 297, 297, 798, 340, 354, 367, 1911,
+        /*   110 */
+        181, 54, 57, 163, 199, 285, 19, 151, 167, 70,
+        /*   120 */
+        78, 381, 367, 543, 363, - 17, 375, 365, 363, 246,
+        /*   130 */
+        363, 395, 392, - 17, 363, 363, 363, 367, 363, 445,
+        /*   140 */
+        413, 363, 395, 363, 474, 365, 574, 204, 204, 574,
+        /*   150 */
+        574, 574, 574, 574, 574, 574, 574, - 53, 255, 233,
+        /*   160 */
+        - 17, - 27, - 29, - 17, - 17, - 17, - 29, - 17, - 29, - 27,
+        /*   170 */
+        - 17, - 17, - 17, - 29, - 17, - 17, - 29, - 17, - 17, - 17,
+        /*   180 */
+        - 17, - 17, - 17, - 17, - 17, - 17, - 29, - 29, - 17, 343,
+        /*   190 */
+        574, 574, 574, 596, 596, 574, 574, 204, 572, 572,
+        /*   200 */
+        204, 341, 204, 370, - 53, - 53, - 53, - 53, - 53, 1483,
+        /*   210 */
+        1342, 98, 76, 210, 435, 212, 328, 299, 81, 287,
+        /*   220 */
+        472, 294, 217, 290, 292, 292, 370, 511, 455, 505,
+        /*   230 */
+        520, 528, 478, 481, 541, 527, 446, 15, 114, - 14,
+        /*   240 */
+        533, 130, 493, 497, 503, 523, 512, 525, 549, 551,
+        /*   250 */
+        507, 526, 530, 516, 571, 137, 119, - 52, 69, 171,
+    );
+    const YY_REDUCE_USE_DFLT = - 73;
+    const YY_REDUCE_MAX = 208;
     static public $yy_reduce_ofst = array(
- /*     0 */   -28,   46, 1709,  123,  567,  384, 1630,  698, 1961, 1934,
- /*    10 */  1923, 1875, 1898, 1984, 2009, 2106, 2095, 2070, 2020, 2047,
- /*    20 */  1848, 1837, 1402, 1345, 1288, 1174, 1231, 1459, 1516, 1812,
- /*    30 */  1789, 1758, 1573, 1747, 2156, 2133, 2305, 2267, 2181, 2192,
- /*    40 */  1117, 2219, 2242, 2278, 1042, 1728,  258, 1061,  572, 2076,
- /*    50 */  1990, 1904, 1818, 1680, 1871, 1705, 2313, 2335, 2328, 1680,
- /*    60 */   -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
- /*    70 */   -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
- /*    80 */   -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
- /*    90 */   -26,  -26,  224,   94,  196,  236,  273, 1149, 1062,  406,
- /*   100 */   -76,  353,  575,  264,  328,  201,  329,   78,  330,  646,
- /*   110 */   517,  -29,  -29,  -29,  342,  616,  385,  -29,   68,  342,
- /*   120 */   342,  -29,   74,   74,  618,  433,  574,  457,  515,  541,
- /*   130 */   433,  112,   74,  433,  434,  487,  459,  699,  468,  366,
- /*   140 */   -29,  696,  433,  464,  511,  645,  -73, -101,  -29,  -29,
- /*   150 */   -29,  -29,  -29,  -29,  -29,   74,  -29,  -29,  606,  606,
- /*   160 */   606,  606,  620,  606,  606,  606,  606,  596,  606,  606,
- /*   170 */   606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
- /*   180 */   592,  592,  599,  599,  592,  599,  599,  603,  599,  647,
- /*   190 */   622,  622,  623,  592,  592,   -6,  622,   -6,  -13,  220,
- /*   200 */   251,  240,  182,  146,  157,
-);
+        /*     0 */
+        - 22, 1449, 1540, 1504, 1481, 1568, 1515, 1591, 1925, 2072,
+        /*    10 */
+        1750, 1818, 1895, 1644, 1663, 1914, 2205, 2277, 1876, 1731,
+        /*    20 */
+        1857, 1633, 1701, 2186, 2150, 2296, 2266, 2091, 2047, 1993,
+        /*    30 */
+        2241, 2102, 1720, 1788, 1982, 1769, 1807, 1610, 1682, 2175,
+        /*    40 */
+        2216, 2121, 1944, 2018, 805, 869, 884, 979, 925, 985,
+        /*    50 */
+        1041, 1157, 1099, 1220, 1336, 2129, 1278, 1336, 1564, 2055,
+        /*    60 */
+        190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
+        /*    70 */
+        190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
+        /*    80 */
+        190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
+        /*    90 */
+        190, 190, 261, 208, 153, 193, 154, 827, 826, 369,
+        /*   100 */
+        804, 315, 872, 316, 424, - 34, 839, 82, - 72, 372,
+        /*   110 */
+        349, - 32, - 32, - 32, 559, 351, 351, 351, - 32, 30,
+        /*   120 */
+        - 32, 30, 345, 30, 453, 420, 368, 242, 344, - 32,
+        /*   130 */
+        276, 561, 451, 419, 506, 615, 668, 396, 613, 615,
+        /*   140 */
+        350, 614, 615, 667, 615, 139, - 32, 30, 109, - 32,
+        /*   150 */
+        - 32, - 32, - 32, - 32, - 32, - 32, 23, - 32, 462, 482,
+        /*   160 */
+        473, 466, 464, 473, 473, 473, 464, 473, 464, 468,
+        /*   170 */
+        473, 473, 473, 464, 473, 473, 464, 473, 473, 473,
+        /*   180 */
+        473, 473, 473, 473, 473, 473, 464, 464, 473, 489,
+        /*   190 */
+        479, 479, 479, 480, 480, 479, 479, 189, 504, 499,
+        /*   200 */
+        189, 241, 189, 348, 356, 393, 389, 95, 385,
+    );
     static public $yyExpectedTokens = array(
-        /* 0 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 22, 23, 28, 32, 33, 34, ),
-        /* 1 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 2 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 3 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 4 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 5 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 6 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 7 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 8 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 65, 78, ),
-        /* 9 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 10 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 11 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 12 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 13 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 14 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 15 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 16 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 17 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 18 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 19 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 20 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 21 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 22 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 23 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 24 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 25 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 26 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 27 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 28 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 29 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 30 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 31 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 32 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 33 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 34 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 35 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 36 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 37 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 38 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 39 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 40 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 41 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 42 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 43 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 44 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 45 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 64, 78, ),
-        /* 46 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
-        /* 47 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
-        /* 48 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
-        /* 49 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
-        /* 50 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
-        /* 51 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
-        /* 52 */ array(16, 18, 19, 22, 23, 28, 32, 33, 34, 36, 38, 41, 56, 57, 58, 59, 60, 63, 78, ),
-        /* 53 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 54 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 55 */ array(1, 27, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 56 */ array(1, 17, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 57 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 58 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 59 */ array(1, 29, 35, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 60 */ array(1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 61 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 62 */ array(1, 30, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 63 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 64 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 65 */ array(1, 24, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 66 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 67 */ array(1, 17, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 68 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, ),
-        /* 69 */ array(1, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 70 */ array(1, 2, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 71 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 72 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 73 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 74 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 75 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 76 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 77 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 78 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 79 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 80 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 81 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 82 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 83 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 84 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 85 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 86 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 87 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 88 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 89 */ array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 90 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 91 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),
-        /* 92 */ array(1, 17, 21, 29, 35, 38, 61, ),
-        /* 93 */ array(1, 17, 29, 35, 54, ),
-        /* 94 */ array(1, 29, 35, ),
-        /* 95 */ array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 22, 23, 28, 32, 33, 34, ),
-        /* 96 */ array(10, 16, 22, 23, 28, 32, 33, 34, 78, 79, 80, ),
-        /* 97 */ array(16, 19, 29, 31, 35, ),
-        /* 98 */ array(16, 19, 29, 31, 35, ),
-        /* 99 */ array(1, 17, 29, 35, ),
-        /* 100 */ array(16, 19, 29, 35, ),
-        /* 101 */ array(1, 17, 29, 35, ),
-        /* 102 */ array(16, 19, 29, 35, ),
-        /* 103 */ array(18, 19, 63, ),
-        /* 104 */ array(1, 29, 35, ),
-        /* 105 */ array(1, 2, 17, ),
-        /* 106 */ array(1, 29, 35, ),
-        /* 107 */ array(21, 59, 64, ),
-        /* 108 */ array(18, 38, ),
-        /* 109 */ array(10, 16, 22, 23, 28, 32, 33, 34, 78, 79, 80, ),
-        /* 110 */ array(4, 5, 6, 7, 8, 13, 14, 15, ),
-        /* 111 */ array(1, 17, 29, 30, 35, 54, ),
-        /* 112 */ array(1, 17, 29, 35, 54, ),
-        /* 113 */ array(1, 17, 29, 35, 54, ),
-        /* 114 */ array(16, 19, 20, 62, ),
-        /* 115 */ array(16, 19, 20, 25, ),
-        /* 116 */ array(1, 17, 21, ),
-        /* 117 */ array(1, 31, 54, ),
-        /* 118 */ array(17, 29, 35, ),
-        /* 119 */ array(16, 19, 20, ),
-        /* 120 */ array(16, 19, 62, ),
-        /* 121 */ array(1, 17, 54, ),
-        /* 122 */ array(20, 21, 61, ),
-        /* 123 */ array(20, 21, 61, ),
-        /* 124 */ array(16, 19, ),
-        /* 125 */ array(16, 19, ),
-        /* 126 */ array(16, 19, ),
-        /* 127 */ array(18, 38, ),
-        /* 128 */ array(16, 19, ),
-        /* 129 */ array(16, 19, ),
-        /* 130 */ array(16, 19, ),
-        /* 131 */ array(18, 19, ),
-        /* 132 */ array(21, 61, ),
-        /* 133 */ array(16, 19, ),
-        /* 134 */ array(16, 19, ),
-        /* 135 */ array(16, 19, ),
-        /* 136 */ array(1, 17, ),
-        /* 137 */ array(16, 19, ),
-        /* 138 */ array(16, 19, ),
-        /* 139 */ array(18, 19, ),
-        /* 140 */ array(1, 54, ),
-        /* 141 */ array(16, 19, ),
-        /* 142 */ array(16, 19, ),
-        /* 143 */ array(18, 38, ),
-        /* 144 */ array(29, 35, ),
-        /* 145 */ array(16, 19, ),
-        /* 146 */ array(29, 35, ),
-        /* 147 */ array(21, ),
-        /* 148 */ array(1, ),
-        /* 149 */ array(1, ),
-        /* 150 */ array(1, ),
-        /* 151 */ array(1, ),
-        /* 152 */ array(1, ),
-        /* 153 */ array(1, ),
-        /* 154 */ array(1, ),
-        /* 155 */ array(21, ),
-        /* 156 */ array(1, ),
-        /* 157 */ array(),
-        /* 158 */ array(17, 29, 35, ),
-        /* 159 */ array(17, 29, 35, ),
-        /* 160 */ array(17, 29, 35, ),
-        /* 161 */ array(17, 29, 35, ),
-        /* 162 */ array(16, 18, 19, ),
-        /* 163 */ array(17, 29, 35, ),
-        /* 164 */ array(17, 29, 35, ),
-        /* 165 */ array(17, 29, 35, ),
-        /* 166 */ array(17, 29, 35, ),
-        /* 167 */ array(16, 19, 62, ),
-        /* 168 */ array(17, 29, 35, ),
-        /* 169 */ array(17, 29, 35, ),
-        /* 170 */ array(17, 29, 35, ),
-        /* 171 */ array(17, 29, 35, ),
-        /* 172 */ array(17, 29, 35, ),
-        /* 173 */ array(17, 29, 35, ),
-        /* 174 */ array(17, 29, 35, ),
-        /* 175 */ array(17, 29, 35, ),
-        /* 176 */ array(17, 29, 35, ),
-        /* 177 */ array(17, 29, 35, ),
-        /* 178 */ array(17, 29, 35, ),
-        /* 179 */ array(17, 29, 35, ),
-        /* 180 */ array(1, 17, ),
-        /* 181 */ array(1, 17, ),
-        /* 182 */ array(59, 64, ),
-        /* 183 */ array(59, 64, ),
-        /* 184 */ array(1, 17, ),
-        /* 185 */ array(59, 64, ),
-        /* 186 */ array(59, 64, ),
-        /* 187 */ array(16, 38, ),
-        /* 188 */ array(59, 64, ),
-        /* 189 */ array(14, ),
-        /* 190 */ array(21, ),
-        /* 191 */ array(21, ),
-        /* 192 */ array(38, ),
-        /* 193 */ array(1, ),
-        /* 194 */ array(1, ),
-        /* 195 */ array(2, ),
-        /* 196 */ array(21, ),
-        /* 197 */ array(2, ),
-        /* 198 */ array(29, ),
-        /* 199 */ array(29, ),
-        /* 200 */ array(),
-        /* 201 */ array(),
-        /* 202 */ array(),
-        /* 203 */ array(),
-        /* 204 */ array(),
-        /* 205 */ array(17, 24, 26, 27, 29, 30, 35, 37, 38, 39, 54, 61, 65, 79, ),
-        /* 206 */ array(17, 20, 29, 35, 38, 61, ),
-        /* 207 */ array(38, 59, 61, 65, ),
-        /* 208 */ array(16, 18, 19, 36, ),
-        /* 209 */ array(31, 38, 61, ),
-        /* 210 */ array(19, 62, ),
-        /* 211 */ array(24, 37, ),
-        /* 212 */ array(37, 65, ),
-        /* 213 */ array(20, 59, ),
-        /* 214 */ array(38, 61, ),
-        /* 215 */ array(25, 79, ),
-        /* 216 */ array(2, 20, ),
-        /* 217 */ array(37, 39, ),
-        /* 218 */ array(38, 61, ),
-        /* 219 */ array(37, 39, ),
-        /* 220 */ array(37, 39, ),
-        /* 221 */ array(17, 25, ),
-        /* 222 */ array(38, ),
-        /* 223 */ array(19, ),
-        /* 224 */ array(18, ),
-        /* 225 */ array(36, ),
-        /* 226 */ array(36, ),
-        /* 227 */ array(59, ),
-        /* 228 */ array(25, ),
-        /* 229 */ array(2, ),
-        /* 230 */ array(18, ),
-        /* 231 */ array(19, ),
-        /* 232 */ array(19, ),
-        /* 233 */ array(2, ),
-        /* 234 */ array(19, ),
-        /* 235 */ array(19, ),
-        /* 236 */ array(20, ),
-        /* 237 */ array(18, ),
-        /* 238 */ array(39, ),
-        /* 239 */ array(26, ),
-        /* 240 */ array(18, ),
-        /* 241 */ array(18, ),
-        /* 242 */ array(19, ),
-        /* 243 */ array(19, ),
-        /* 244 */ array(19, ),
-        /* 245 */ array(19, ),
-        /* 246 */ array(38, ),
-        /* 247 */ array(65, ),
-        /* 248 */ array(19, ),
-        /* 249 */ array(63, ),
-        /* 250 */ array(55, ),
-        /* 251 */ array(19, ),
-        /* 252 */ array(63, ),
-        /* 253 */ array(),
-        /* 254 */ array(),
-        /* 255 */ array(),
-        /* 256 */ array(),
-        /* 257 */ array(),
-        /* 258 */ array(),
-        /* 259 */ array(),
-        /* 260 */ array(),
-        /* 261 */ array(),
-        /* 262 */ array(),
-        /* 263 */ array(),
-        /* 264 */ array(),
-        /* 265 */ array(),
-        /* 266 */ array(),
-        /* 267 */ array(),
-        /* 268 */ array(),
-        /* 269 */ array(),
-        /* 270 */ array(),
-        /* 271 */ array(),
-        /* 272 */ array(),
-        /* 273 */ array(),
-        /* 274 */ array(),
-        /* 275 */ array(),
-        /* 276 */ array(),
-        /* 277 */ array(),
-        /* 278 */ array(),
-        /* 279 */ array(),
-        /* 280 */ array(),
-        /* 281 */ array(),
-        /* 282 */ array(),
-        /* 283 */ array(),
-        /* 284 */ array(),
-        /* 285 */ array(),
-        /* 286 */ array(),
-        /* 287 */ array(),
-        /* 288 */ array(),
-        /* 289 */ array(),
-        /* 290 */ array(),
-        /* 291 */ array(),
-        /* 292 */ array(),
-        /* 293 */ array(),
-        /* 294 */ array(),
-        /* 295 */ array(),
-        /* 296 */ array(),
-        /* 297 */ array(),
-        /* 298 */ array(),
-        /* 299 */ array(),
-        /* 300 */ array(),
-        /* 301 */ array(),
-        /* 302 */ array(),
-        /* 303 */ array(),
-        /* 304 */ array(),
-        /* 305 */ array(),
-        /* 306 */ array(),
-        /* 307 */ array(),
-        /* 308 */ array(),
-        /* 309 */ array(),
-        /* 310 */ array(),
-        /* 311 */ array(),
-        /* 312 */ array(),
-        /* 313 */ array(),
-        /* 314 */ array(),
-        /* 315 */ array(),
-        /* 316 */ array(),
-        /* 317 */ array(),
-        /* 318 */ array(),
-        /* 319 */ array(),
-        /* 320 */ array(),
-        /* 321 */ array(),
-        /* 322 */ array(),
-        /* 323 */ array(),
-        /* 324 */ array(),
-        /* 325 */ array(),
-        /* 326 */ array(),
-        /* 327 */ array(),
-        /* 328 */ array(),
-        /* 329 */ array(),
-        /* 330 */ array(),
-        /* 331 */ array(),
-        /* 332 */ array(),
-        /* 333 */ array(),
-        /* 334 */ array(),
-        /* 335 */ array(),
-        /* 336 */ array(),
-        /* 337 */ array(),
-        /* 338 */ array(),
-        /* 339 */ array(),
-        /* 340 */ array(),
-        /* 341 */ array(),
-        /* 342 */ array(),
-        /* 343 */ array(),
-        /* 344 */ array(),
-        /* 345 */ array(),
-        /* 346 */ array(),
-        /* 347 */ array(),
-        /* 348 */ array(),
-        /* 349 */ array(),
-        /* 350 */ array(),
-        /* 351 */ array(),
-        /* 352 */ array(),
-        /* 353 */ array(),
-        /* 354 */ array(),
-        /* 355 */ array(),
-        /* 356 */ array(),
-        /* 357 */ array(),
-        /* 358 */ array(),
-        /* 359 */ array(),
-        /* 360 */ array(),
-        /* 361 */ array(),
-        /* 362 */ array(),
-        /* 363 */ array(),
-        /* 364 */ array(),
-        /* 365 */ array(),
-        /* 366 */ array(),
-        /* 367 */ array(),
-        /* 368 */ array(),
-        /* 369 */ array(),
-        /* 370 */ array(),
-        /* 371 */ array(),
-        /* 372 */ array(),
-        /* 373 */ array(),
-        /* 374 */ array(),
-        /* 375 */ array(),
-        /* 376 */ array(),
-        /* 377 */ array(),
-        /* 378 */ array(),
-        /* 379 */ array(),
-        /* 380 */ array(),
-        /* 381 */ array(),
-        /* 382 */ array(),
-        /* 383 */ array(),
-        /* 384 */ array(),
-        /* 385 */ array(),
-        /* 386 */ array(),
-        /* 387 */ array(),
-        /* 388 */ array(),
-);
+        /* 0 */
+        array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 23, 24, 29, 33, 35,),
+        /* 1 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 2 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 3 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 4 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 5 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 6 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 7 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 8 */
+        array(18, 19, 20, 23, 24, 29, 33, 34, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 9 */
+        array(18, 19, 20, 23, 24, 29, 33, 34, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 10 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 66, 79,),
+        /* 11 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 12 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 13 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 14 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 15 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 16 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 17 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 18 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 19 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 20 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 21 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 22 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 23 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 24 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 25 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 26 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 27 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 28 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 29 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 30 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 31 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 32 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 33 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 34 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 35 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 36 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 37 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 38 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 39 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 40 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 41 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 42 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 43 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 44 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 45 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 65, 79,),
+        /* 46 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+        /* 47 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+        /* 48 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+        /* 49 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+        /* 50 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+        /* 51 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+        /* 52 */
+        array(18, 19, 20, 23, 24, 29, 33, 35, 37, 39, 42, 57, 58, 59, 60, 61, 64, 79,),
+        /* 53 */
+        array(1, 28, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 54 */
+        array(1, 3, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 55 */
+        array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 56 */
+        array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 57 */
+        array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 58 */
+        array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 59 */
+        array(1, 30, 36, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 60 */
+        array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 61 */
+        array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 62 */
+        array(1, 25, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 63 */
+        array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 64 */
+        array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 65 */
+        array(1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 66 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80,),
+        /* 67 */
+        array(1, 31, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 68 */
+        array(1, 3, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 69 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 70 */
+        array(1, 2, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 71 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 72 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 73 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 74 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 75 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 76 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 77 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 78 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 79 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 80 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 81 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 82 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 83 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 84 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 85 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 86 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 87 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 88 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 89 */
+        array(1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 90 */
+        array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 91 */
+        array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,),
+        /* 92 */
+        array(1, 3, 22, 30, 36, 39, 62,),
+        /* 93 */
+        array(1, 3, 30, 36, 55,),
+        /* 94 */
+        array(1, 30, 36,),
+        /* 95 */
+        array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 23, 24, 29, 33, 35,),
+        /* 96 */
+        array(11, 18, 23, 24, 29, 33, 35, 79, 80, 81,),
+        /* 97 */
+        array(18, 20, 30, 32, 36,),
+        /* 98 */
+        array(18, 20, 30, 32, 36,),
+        /* 99 */
+        array(1, 3, 30, 36,),
+        /* 100 */
+        array(18, 20, 30, 36,),
+        /* 101 */
+        array(1, 3, 30, 36,),
+        /* 102 */
+        array(18, 20, 30, 36,),
+        /* 103 */
+        array(1, 30, 36,),
+        /* 104 */
+        array(1, 30, 36,),
+        /* 105 */
+        array(22, 60, 65,),
+        /* 106 */
+        array(19, 20, 64,),
+        /* 107 */
+        array(1, 2,),
+        /* 108 */
+        array(19, 39,),
+        /* 109 */
+        array(11, 18, 23, 24, 29, 33, 35, 79, 80, 81,),
+        /* 110 */
+        array(5, 6, 7, 8, 9, 15, 16, 17,),
+        /* 111 */
+        array(1, 3, 30, 31, 36, 55,),
+        /* 112 */
+        array(1, 3, 30, 36, 55,),
+        /* 113 */
+        array(1, 3, 30, 36, 55,),
+        /* 114 */
+        array(18, 20, 21, 26,),
+        /* 115 */
+        array(18, 20, 21, 63,),
+        /* 116 */
+        array(18, 20, 63,),
+        /* 117 */
+        array(18, 20, 21,),
+        /* 118 */
+        array(1, 3, 55,),
+        /* 119 */
+        array(21, 22, 62,),
+        /* 120 */
+        array(1, 32, 55,),
+        /* 121 */
+        array(21, 22, 62,),
+        /* 122 */
+        array(19, 39,),
+        /* 123 */
+        array(22, 62,),
+        /* 124 */
+        array(18, 20,),
+        /* 125 */
+        array(30, 36,),
+        /* 126 */
+        array(30, 36,),
+        /* 127 */
+        array(19, 20,),
+        /* 128 */
+        array(18, 20,),
+        /* 129 */
+        array(1, 55,),
+        /* 130 */
+        array(18, 20,),
+        /* 131 */
+        array(18, 20,),
+        /* 132 */
+        array(18, 20,),
+        /* 133 */
+        array(30, 36,),
+        /* 134 */
+        array(18, 20,),
+        /* 135 */
+        array(18, 20,),
+        /* 136 */
+        array(18, 20,),
+        /* 137 */
+        array(19, 39,),
+        /* 138 */
+        array(18, 20,),
+        /* 139 */
+        array(18, 20,),
+        /* 140 */
+        array(1, 22,),
+        /* 141 */
+        array(18, 20,),
+        /* 142 */
+        array(18, 20,),
+        /* 143 */
+        array(18, 20,),
+        /* 144 */
+        array(18, 20,),
+        /* 145 */
+        array(19, 20,),
+        /* 146 */
+        array(1,),
+        /* 147 */
+        array(22,),
+        /* 148 */
+        array(22,),
+        /* 149 */
+        array(1,),
+        /* 150 */
+        array(1,),
+        /* 151 */
+        array(1,),
+        /* 152 */
+        array(1,),
+        /* 153 */
+        array(1,),
+        /* 154 */
+        array(1,),
+        /* 155 */
+        array(1,),
+        /* 156 */
+        array(1,),
+        /* 157 */
+        array(),
+        /* 158 */
+        array(18, 19, 20,),
+        /* 159 */
+        array(18, 20, 63,),
+        /* 160 */
+        array(30, 36,),
+        /* 161 */
+        array(60, 65,),
+        /* 162 */
+        array(60, 65,),
+        /* 163 */
+        array(30, 36,),
+        /* 164 */
+        array(30, 36,),
+        /* 165 */
+        array(30, 36,),
+        /* 166 */
+        array(60, 65,),
+        /* 167 */
+        array(30, 36,),
+        /* 168 */
+        array(60, 65,),
+        /* 169 */
+        array(60, 65,),
+        /* 170 */
+        array(30, 36,),
+        /* 171 */
+        array(30, 36,),
+        /* 172 */
+        array(30, 36,),
+        /* 173 */
+        array(60, 65,),
+        /* 174 */
+        array(30, 36,),
+        /* 175 */
+        array(30, 36,),
+        /* 176 */
+        array(60, 65,),
+        /* 177 */
+        array(30, 36,),
+        /* 178 */
+        array(30, 36,),
+        /* 179 */
+        array(30, 36,),
+        /* 180 */
+        array(30, 36,),
+        /* 181 */
+        array(30, 36,),
+        /* 182 */
+        array(30, 36,),
+        /* 183 */
+        array(30, 36,),
+        /* 184 */
+        array(30, 36,),
+        /* 185 */
+        array(30, 36,),
+        /* 186 */
+        array(60, 65,),
+        /* 187 */
+        array(60, 65,),
+        /* 188 */
+        array(30, 36,),
+        /* 189 */
+        array(18, 39,),
+        /* 190 */
+        array(1,),
+        /* 191 */
+        array(1,),
+        /* 192 */
+        array(1,),
+        /* 193 */
+        array(2,),
+        /* 194 */
+        array(2,),
+        /* 195 */
+        array(1,),
+        /* 196 */
+        array(1,),
+        /* 197 */
+        array(22,),
+        /* 198 */
+        array(30,),
+        /* 199 */
+        array(30,),
+        /* 200 */
+        array(22,),
+        /* 201 */
+        array(16,),
+        /* 202 */
+        array(22,),
+        /* 203 */
+        array(39,),
+        /* 204 */
+        array(),
+        /* 205 */
+        array(),
+        /* 206 */
+        array(),
+        /* 207 */
+        array(),
+        /* 208 */
+        array(),
+        /* 209 */
+        array(3, 25, 27, 28, 30, 31, 36, 38, 39, 40, 55, 62, 66, 80,),
+        /* 210 */
+        array(3, 21, 30, 36, 39, 62,),
+        /* 211 */
+        array(18, 19, 20, 37,),
+        /* 212 */
+        array(39, 60, 62, 66,),
+        /* 213 */
+        array(32, 39, 62,),
+        /* 214 */
+        array(2, 21,),
+        /* 215 */
+        array(38, 40,),
+        /* 216 */
+        array(21, 60,),
+        /* 217 */
+        array(3, 26,),
+        /* 218 */
+        array(38, 66,),
+        /* 219 */
+        array(20, 63,),
+        /* 220 */
+        array(25, 38,),
+        /* 221 */
+        array(38, 40,),
+        /* 222 */
+        array(26, 80,),
+        /* 223 */
+        array(38, 40,),
+        /* 224 */
+        array(39, 62,),
+        /* 225 */
+        array(39, 62,),
+        /* 226 */
+        array(39,),
+        /* 227 */
+        array(3,),
+        /* 228 */
+        array(64,),
+        /* 229 */
+        array(19,),
+        /* 230 */
+        array(3,),
+        /* 231 */
+        array(19,),
+        /* 232 */
+        array(40,),
+        /* 233 */
+        array(64,),
+        /* 234 */
+        array(27,),
+        /* 235 */
+        array(21,),
+        /* 236 */
+        array(20,),
+        /* 237 */
+        array(2,),
+        /* 238 */
+        array(20,),
+        /* 239 */
+        array(39,),
+        /* 240 */
+        array(37,),
+        /* 241 */
+        array(37,),
+        /* 242 */
+        array(20,),
+        /* 243 */
+        array(20,),
+        /* 244 */
+        array(19,),
+        /* 245 */
+        array(20,),
+        /* 246 */
+        array(3,),
+        /* 247 */
+        array(19,),
+        /* 248 */
+        array(20,),
+        /* 249 */
+        array(20,),
+        /* 250 */
+        array(60,),
+        /* 251 */
+        array(20,),
+        /* 252 */
+        array(20,),
+        /* 253 */
+        array(56,),
+        /* 254 */
+        array(2,),
+        /* 255 */
+        array(26,),
+        /* 256 */
+        array(20,),
+        /* 257 */
+        array(66,),
+        /* 258 */
+        array(19,),
+        /* 259 */
+        array(20,),
+        /* 260 */
+        array(),
+        /* 261 */
+        array(),
+        /* 262 */
+        array(),
+        /* 263 */
+        array(),
+        /* 264 */
+        array(),
+        /* 265 */
+        array(),
+        /* 266 */
+        array(),
+        /* 267 */
+        array(),
+        /* 268 */
+        array(),
+        /* 269 */
+        array(),
+        /* 270 */
+        array(),
+        /* 271 */
+        array(),
+        /* 272 */
+        array(),
+        /* 273 */
+        array(),
+        /* 274 */
+        array(),
+        /* 275 */
+        array(),
+        /* 276 */
+        array(),
+        /* 277 */
+        array(),
+        /* 278 */
+        array(),
+        /* 279 */
+        array(),
+        /* 280 */
+        array(),
+        /* 281 */
+        array(),
+        /* 282 */
+        array(),
+        /* 283 */
+        array(),
+        /* 284 */
+        array(),
+        /* 285 */
+        array(),
+        /* 286 */
+        array(),
+        /* 287 */
+        array(),
+        /* 288 */
+        array(),
+        /* 289 */
+        array(),
+        /* 290 */
+        array(),
+        /* 291 */
+        array(),
+        /* 292 */
+        array(),
+        /* 293 */
+        array(),
+        /* 294 */
+        array(),
+        /* 295 */
+        array(),
+        /* 296 */
+        array(),
+        /* 297 */
+        array(),
+        /* 298 */
+        array(),
+        /* 299 */
+        array(),
+        /* 300 */
+        array(),
+        /* 301 */
+        array(),
+        /* 302 */
+        array(),
+        /* 303 */
+        array(),
+        /* 304 */
+        array(),
+        /* 305 */
+        array(),
+        /* 306 */
+        array(),
+        /* 307 */
+        array(),
+        /* 308 */
+        array(),
+        /* 309 */
+        array(),
+        /* 310 */
+        array(),
+        /* 311 */
+        array(),
+        /* 312 */
+        array(),
+        /* 313 */
+        array(),
+        /* 314 */
+        array(),
+        /* 315 */
+        array(),
+        /* 316 */
+        array(),
+        /* 317 */
+        array(),
+        /* 318 */
+        array(),
+        /* 319 */
+        array(),
+        /* 320 */
+        array(),
+        /* 321 */
+        array(),
+        /* 322 */
+        array(),
+        /* 323 */
+        array(),
+        /* 324 */
+        array(),
+        /* 325 */
+        array(),
+        /* 326 */
+        array(),
+        /* 327 */
+        array(),
+        /* 328 */
+        array(),
+        /* 329 */
+        array(),
+        /* 330 */
+        array(),
+        /* 331 */
+        array(),
+        /* 332 */
+        array(),
+        /* 333 */
+        array(),
+        /* 334 */
+        array(),
+        /* 335 */
+        array(),
+        /* 336 */
+        array(),
+        /* 337 */
+        array(),
+        /* 338 */
+        array(),
+        /* 339 */
+        array(),
+        /* 340 */
+        array(),
+        /* 341 */
+        array(),
+        /* 342 */
+        array(),
+        /* 343 */
+        array(),
+        /* 344 */
+        array(),
+        /* 345 */
+        array(),
+        /* 346 */
+        array(),
+        /* 347 */
+        array(),
+        /* 348 */
+        array(),
+        /* 349 */
+        array(),
+        /* 350 */
+        array(),
+        /* 351 */
+        array(),
+        /* 352 */
+        array(),
+        /* 353 */
+        array(),
+        /* 354 */
+        array(),
+        /* 355 */
+        array(),
+        /* 356 */
+        array(),
+        /* 357 */
+        array(),
+        /* 358 */
+        array(),
+        /* 359 */
+        array(),
+        /* 360 */
+        array(),
+        /* 361 */
+        array(),
+        /* 362 */
+        array(),
+    );
     static public $yy_default = array(
- /*     0 */   392,  574,  591,  591,  545,  591,  545,  545,  591,  591,
- /*    10 */   591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
- /*    20 */   591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
- /*    30 */   591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
- /*    40 */   591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
- /*    50 */   591,  591,  591,  591,  591,  453,  591,  453,  453,  453,
- /*    60 */   591,  591,  458,  591,  591,  591,  591,  591,  591,  591,
- /*    70 */   591,  544,  575,  458,  576,  460,  463,  464,  435,  477,
- /*    80 */   478,  479,  486,  487,  577,  483,  482,  543,  455,  474,
- /*    90 */   490,  491,  502,  466,  453,  389,  591,  453,  453,  473,
- /*   100 */   453,  510,  453,  591,  453,  591,  453,  557,  591,  591,
- /*   110 */   591,  466,  466,  466,  518,  591,  591,  466,  591,  518,
- /*   120 */   518,  466,  511,  511,  591,  591,  591,  591,  591,  591,
- /*   130 */   591,  591,  511,  591,  591,  591,  591,  591,  518,  591,
- /*   140 */   466,  591,  591,  591,  453,  591,  453,  554,  494,  469,
- /*   150 */   489,  476,  495,  470,  493,  511,  471,  552,  591,  591,
- /*   160 */   591,  591,  591,  591,  591,  591,  591,  519,  591,  591,
- /*   170 */   591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
- /*   180 */   591,  591,  536,  535,  591,  538,  516,  518,  537,  408,
- /*   190 */   558,  555,  518,  473,  510,  547,  532,  546,  590,  590,
- /*   200 */   551,  551,  518,  551,  518,  468,  502,  502,  591,  502,
- /*   210 */   591,  591,  591,  498,  488,  492,  530,  591,  502,  591,
- /*   220 */   591,  492,  530,  591,  591,  591,  500,  498,  492,  530,
- /*   230 */   591,  591,  591,  530,  591,  591,  591,  591,  591,  461,
- /*   240 */   591,  591,  591,  591,  591,  591,  556,  591,  591,  591,
- /*   250 */   504,  591,  591,  465,  515,  514,  539,  572,  433,  418,
- /*   260 */   390,  432,  438,  573,  437,  526,  436,  541,  540,  523,
- /*   270 */   553,  531,  542,  442,  504,  443,  571,  589,  524,  454,
- /*   280 */   527,  525,  462,  485,  530,  529,  444,  445,  550,  441,
- /*   290 */   440,  431,  430,  434,  452,  439,  446,  447,  499,  497,
- /*   300 */   501,  507,  467,  496,  450,  448,  548,  549,  449,  451,
- /*   310 */   417,  399,  398,  400,  401,  402,  397,  396,  391,  393,
- /*   320 */   394,  395,  403,  404,  413,  412,  414,  415,  416,  411,
- /*   330 */   410,  405,  406,  407,  409,  468,  512,  423,  422,  424,
- /*   340 */   533,  425,  421,  586,  570,  569,  472,  419,  420,  426,
- /*   350 */   427,  582,  583,  584,  587,  588,  580,  579,  429,  428,
- /*   360 */   585,  578,  568,  567,  506,  505,  508,  475,  509,  503,
- /*   370 */   522,  517,  520,  528,  521,  513,  534,  563,  562,  564,
- /*   380 */   565,  566,  561,  560,  480,  481,  484,  559,  581,
-);
-    const YYNOCODE = 124;
-    const YYSTACKDEPTH = 100;
-    const YYNSTATE = 389;
-    const YYNRULE = 202;
-    const YYERRORSYMBOL = 81;
+        /*     0 */
+        366, 551, 522, 568, 568, 568, 522, 522, 568, 568,
+        /*    10 */
+        568, 568, 568, 568, 568, 568, 568, 568, 568, 568,
+        /*    20 */
+        568, 568, 568, 568, 568, 568, 568, 568, 568, 568,
+        /*    30 */
+        568, 568, 568, 568, 568, 568, 568, 568, 568, 568,
+        /*    40 */
+        568, 568, 568, 568, 568, 568, 568, 568, 568, 568,
+        /*    50 */
+        568, 568, 568, 428, 568, 405, 428, 428, 428, 397,
+        /*    60 */
+        568, 568, 568, 568, 568, 568, 568, 433, 568, 568,
+        /*    70 */
+        568, 553, 449, 520, 552, 457, 433, 452, 439, 462,
+        /*    80 */
+        521, 461, 430, 435, 554, 438, 454, 453, 410, 458,
+        /*    90 */
+        466, 465, 477, 441, 428, 363, 568, 428, 428, 485,
+        /*   100 */
+        428, 448, 428, 428, 428, 534, 568, 419, 568, 568,
+        /*   110 */
+        568, 441, 441, 441, 568, 495, 495, 495, 441, 486,
+        /*   120 */
+        441, 486, 568, 486, 568, 428, 428, 568, 568, 441,
+        /*   130 */
+        495, 568, 568, 407, 568, 568, 568, 568, 568, 568,
+        /*   140 */
+        422, 568, 568, 568, 568, 568, 451, 486, 531, 464,
+        /*   150 */
+        446, 445, 468, 444, 469, 470, 424, 529, 568, 496,
+        /*   160 */
+        395, 489, 492, 412, 392, 406, 514, 409, 490, 491,
+        /*   170 */
+        413, 394, 398, 513, 393, 408, 493, 400, 417, 402,
+        /*   180 */
+        415, 404, 414, 418, 416, 403, 515, 512, 399, 495,
+        /*   190 */
+        448, 420, 485, 523, 524, 423, 425, 532, 567, 567,
+        /*   200 */
+        509, 383, 535, 495, 495, 528, 528, 528, 495, 443,
+        /*   210 */
+        477, 568, 477, 477, 507, 568, 473, 467, 568, 568,
+        /*   220 */
+        568, 568, 467, 568, 477, 463, 507, 568, 568, 568,
+        /*   230 */
+        568, 568, 568, 568, 436, 568, 568, 507, 568, 533,
+        /*   240 */
+        568, 475, 568, 568, 568, 568, 568, 568, 568, 568,
+        /*   250 */
+        473, 568, 568, 479, 507, 467, 568, 568, 568, 568,
+        /*   260 */
+        508, 429, 437, 364, 501, 519, 503, 440, 500, 479,
+        /*   270 */
+        566, 516, 517, 502, 504, 518, 411, 530, 459, 506,
+        /*   280 */
+        507, 527, 525, 427, 426, 388, 389, 390, 526, 471,
+        /*   290 */
+        443, 487, 494, 497, 442, 482, 472, 474, 476, 387,
+        /*   300 */
+        386, 371, 372, 373, 374, 370, 369, 365, 367, 368,
+        /*   310 */
+        375, 376, 382, 384, 385, 381, 380, 377, 378, 379,
+        /*   320 */
+        505, 498, 510, 421, 562, 555, 563, 447, 545, 546,
+        /*   330 */
+        547, 556, 557, 558, 548, 550, 565, 564, 560, 559,
+        /*   340 */
+        561, 544, 543, 450, 484, 488, 511, 483, 481, 499,
+        /*   350 */
+        478, 480, 455, 456, 540, 541, 542, 539, 538, 460,
+        /*   360 */
+        536, 537, 549,
+    );
+    const YYNOCODE = 125;
+    const YYSTACKDEPTH = 500;
+    const YYNSTATE = 363;
+    const YYNRULE = 205;
+    const YYERRORSYMBOL = 82;
     const YYERRSYMDT = 'yy0';
     const YYFALLBACK = 0;
-    static public $yyFallback = array(
-    );
-    static function Trace($TraceFILE, $zTracePrompt)
+    public static $yyFallback = array();
+
+    public function Trace($TraceFILE, $zTracePrompt)
     {
         if (!$TraceFILE) {
             $zTracePrompt = 0;
         } elseif (!$zTracePrompt) {
             $TraceFILE = 0;
         }
-        self::$yyTraceFILE = $TraceFILE;
-        self::$yyTracePrompt = $zTracePrompt;
+        $this->yyTraceFILE = $TraceFILE;
+        $this->yyTracePrompt = $zTracePrompt;
     }
 
-    static function PrintTrace()
+    public function PrintTrace()
     {
-        self::$yyTraceFILE = fopen('php://output', 'w');
-        self::$yyTracePrompt = '<br>';
+        $this->yyTraceFILE = fopen('php://output', 'w');
+        $this->yyTracePrompt = '<br>';
     }
 
-    static public $yyTraceFILE;
-    static public $yyTracePrompt;
-    public $yyidx;                    /* Index of top element in stack */
-    public $yyerrcnt;                 /* Shifts left before out of the error */
-    public $yystack = array();  /* The parser's stack */
+    public $yyTraceFILE;
+    public $yyTracePrompt;
+    public $yyidx; /* Index of top element in stack */
+    public $yyerrcnt; /* Shifts left before out of the error */
+    public $yystack = array(); /* The parser's stack */
 
     public $yyTokenName = array(
-  '$',             'VERT',          'COLON',         'COMMENT',
-  'PHPSTARTTAG',   'PHPENDTAG',     'ASPSTARTTAG',   'ASPENDTAG',
-  'FAKEPHPSTARTTAG',  'XMLTAG',        'TEXT',          'STRIPON',
-  'STRIPOFF',      'LITERALSTART',  'LITERALEND',    'LITERAL',
-  'LDEL',          'RDEL',          'DOLLAR',        'ID',
-  'EQUAL',         'PTR',           'LDELIF',        'LDELFOR',
-  'SEMICOLON',     'INCDEC',        'TO',            'STEP',
-  'LDELFOREACH',   'SPACE',         'AS',            'APTR',
-  'LDELSETFILTER',  'SMARTYBLOCKCHILD',  'LDELSLASH',     'ATTR',
-  'INTEGER',       'COMMA',         'OPENP',         'CLOSEP',
-  'MATH',          'UNIMATH',       'ANDSYM',        'ISIN',
-  'ISDIVBY',       'ISNOTDIVBY',    'ISEVEN',        'ISNOTEVEN',
-  'ISEVENBY',      'ISNOTEVENBY',   'ISODD',         'ISNOTODD',
-  'ISODDBY',       'ISNOTODDBY',    'INSTANCEOF',    'QMARK',
-  'NOT',           'TYPECAST',      'HEX',           'DOT',
-  'SINGLEQUOTESTRING',  'DOUBLECOLON',   'AT',            'HATCH',
-  'OPENB',         'CLOSEB',        'EQUALS',        'NOTEQUALS',
-  'GREATERTHAN',   'LESSTHAN',      'GREATEREQUAL',  'LESSEQUAL',
-  'IDENTITY',      'NONEIDENTITY',  'MOD',           'LAND',
-  'LOR',           'LXOR',          'QUOTE',         'BACKTICK',
-  'DOLLARID',      'error',         'start',         'template',
-  'template_element',  'smartytag',     'literal',       'literal_elements',
-  'literal_element',  'value',         'modifierlist',  'attributes',
-  'expr',          'varindexed',    'statement',     'statements',
-  'optspace',      'varvar',        'foraction',     'modparameters',
-  'attribute',     'ternary',       'array',         'ifcond',
-  'lop',           'variable',      'function',      'doublequoted_with_quotes',
-  'static_class_access',  'object',        'arrayindex',    'indexdef',
-  'varvarele',     'objectchain',   'objectelement',  'method',
-  'params',        'modifier',      'modparameter',  'arrayelements',
-  'arrayelement',  'doublequoted',  'doublequotedcontent',
+        '$', 'VERT', 'COLON', 'RDEL',
+        'COMMENT', 'PHPSTARTTAG', 'PHPENDTAG', 'ASPSTARTTAG',
+        'ASPENDTAG', 'FAKEPHPSTARTTAG', 'XMLTAG', 'TEXT',
+        'STRIPON', 'STRIPOFF', 'BLOCKSOURCE', 'LITERALSTART',
+        'LITERALEND', 'LITERAL', 'LDEL', 'DOLLAR',
+        'ID', 'EQUAL', 'PTR', 'LDELIF',
+        'LDELFOR', 'SEMICOLON', 'INCDEC', 'TO',
+        'STEP', 'LDELFOREACH', 'SPACE', 'AS',
+        'APTR', 'LDELSETFILTER', 'SMARTYBLOCKCHILDPARENT', 'LDELSLASH',
+        'ATTR', 'INTEGER', 'COMMA', 'OPENP',
+        'CLOSEP', 'MATH', 'UNIMATH', 'ANDSYM',
+        'ISIN', 'ISDIVBY', 'ISNOTDIVBY', 'ISEVEN',
+        'ISNOTEVEN', 'ISEVENBY', 'ISNOTEVENBY', 'ISODD',
+        'ISNOTODD', 'ISODDBY', 'ISNOTODDBY', 'INSTANCEOF',
+        'QMARK', 'NOT', 'TYPECAST', 'HEX',
+        'DOT', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'AT',
+        'HATCH', 'OPENB', 'CLOSEB', 'EQUALS',
+        'NOTEQUALS', 'GREATERTHAN', 'LESSTHAN', 'GREATEREQUAL',
+        'LESSEQUAL', 'IDENTITY', 'NONEIDENTITY', 'MOD',
+        'LAND', 'LOR', 'LXOR', 'QUOTE',
+        'BACKTICK', 'DOLLARID', 'error', 'start',
+        'template', 'template_element', 'smartytag', 'literal',
+        'literal_elements', 'literal_element', 'value', 'modifierlist',
+        'attributes', 'expr', 'varindexed', 'statement',
+        'statements', 'optspace', 'varvar', 'foraction',
+        'modparameters', 'attribute', 'ternary', 'array',
+        'ifcond', 'lop', 'variable', 'function',
+        'doublequoted_with_quotes', 'static_class_access', 'object', 'arrayindex',
+        'indexdef', 'varvarele', 'objectchain', 'objectelement',
+        'method', 'params', 'modifier', 'modparameter',
+        'arrayelements', 'arrayelement', 'doublequoted', 'doublequotedcontent',
     );
 
-    static public $yyRuleName = array(
- /*   0 */ "start ::= template",
- /*   1 */ "template ::= template_element",
- /*   2 */ "template ::= template template_element",
- /*   3 */ "template ::=",
- /*   4 */ "template_element ::= smartytag",
- /*   5 */ "template_element ::= COMMENT",
- /*   6 */ "template_element ::= literal",
- /*   7 */ "template_element ::= PHPSTARTTAG",
- /*   8 */ "template_element ::= PHPENDTAG",
- /*   9 */ "template_element ::= ASPSTARTTAG",
- /*  10 */ "template_element ::= ASPENDTAG",
- /*  11 */ "template_element ::= FAKEPHPSTARTTAG",
- /*  12 */ "template_element ::= XMLTAG",
- /*  13 */ "template_element ::= TEXT",
- /*  14 */ "template_element ::= STRIPON",
- /*  15 */ "template_element ::= STRIPOFF",
- /*  16 */ "literal ::= LITERALSTART LITERALEND",
- /*  17 */ "literal ::= LITERALSTART literal_elements LITERALEND",
- /*  18 */ "literal_elements ::= literal_elements literal_element",
- /*  19 */ "literal_elements ::=",
- /*  20 */ "literal_element ::= literal",
- /*  21 */ "literal_element ::= LITERAL",
- /*  22 */ "literal_element ::= PHPSTARTTAG",
- /*  23 */ "literal_element ::= FAKEPHPSTARTTAG",
- /*  24 */ "literal_element ::= PHPENDTAG",
- /*  25 */ "literal_element ::= ASPSTARTTAG",
- /*  26 */ "literal_element ::= ASPENDTAG",
- /*  27 */ "smartytag ::= LDEL value RDEL",
- /*  28 */ "smartytag ::= LDEL value modifierlist attributes RDEL",
- /*  29 */ "smartytag ::= LDEL value attributes RDEL",
- /*  30 */ "smartytag ::= LDEL expr modifierlist attributes RDEL",
- /*  31 */ "smartytag ::= LDEL expr attributes RDEL",
- /*  32 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL",
- /*  33 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL",
- /*  34 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL",
- /*  35 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL",
- /*  36 */ "smartytag ::= LDEL ID attributes RDEL",
- /*  37 */ "smartytag ::= LDEL ID RDEL",
- /*  38 */ "smartytag ::= LDEL ID PTR ID attributes RDEL",
- /*  39 */ "smartytag ::= LDEL ID modifierlist attributes RDEL",
- /*  40 */ "smartytag ::= LDEL ID PTR ID modifierlist attributes RDEL",
- /*  41 */ "smartytag ::= LDELIF expr RDEL",
- /*  42 */ "smartytag ::= LDELIF expr attributes RDEL",
- /*  43 */ "smartytag ::= LDELIF statement RDEL",
- /*  44 */ "smartytag ::= LDELIF statement attributes RDEL",
- /*  45 */ "smartytag ::= LDELFOR statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes RDEL",
- /*  46 */ "foraction ::= EQUAL expr",
- /*  47 */ "foraction ::= INCDEC",
- /*  48 */ "smartytag ::= LDELFOR statement TO expr attributes RDEL",
- /*  49 */ "smartytag ::= LDELFOR statement TO expr STEP expr attributes RDEL",
- /*  50 */ "smartytag ::= LDELFOREACH attributes RDEL",
- /*  51 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes RDEL",
- /*  52 */ "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL",
- /*  53 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes RDEL",
- /*  54 */ "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes RDEL",
- /*  55 */ "smartytag ::= LDELSETFILTER ID modparameters RDEL",
- /*  56 */ "smartytag ::= LDELSETFILTER ID modparameters modifierlist RDEL",
- /*  57 */ "smartytag ::= SMARTYBLOCKCHILD",
- /*  58 */ "smartytag ::= LDELSLASH ID RDEL",
- /*  59 */ "smartytag ::= LDELSLASH ID modifierlist RDEL",
- /*  60 */ "smartytag ::= LDELSLASH ID PTR ID RDEL",
- /*  61 */ "smartytag ::= LDELSLASH ID PTR ID modifierlist RDEL",
- /*  62 */ "attributes ::= attributes attribute",
- /*  63 */ "attributes ::= attribute",
- /*  64 */ "attributes ::=",
- /*  65 */ "attribute ::= SPACE ID EQUAL ID",
- /*  66 */ "attribute ::= ATTR expr",
- /*  67 */ "attribute ::= ATTR value",
- /*  68 */ "attribute ::= SPACE ID",
- /*  69 */ "attribute ::= SPACE expr",
- /*  70 */ "attribute ::= SPACE value",
- /*  71 */ "attribute ::= SPACE INTEGER EQUAL expr",
- /*  72 */ "statements ::= statement",
- /*  73 */ "statements ::= statements COMMA statement",
- /*  74 */ "statement ::= DOLLAR varvar EQUAL expr",
- /*  75 */ "statement ::= varindexed EQUAL expr",
- /*  76 */ "statement ::= OPENP statement CLOSEP",
- /*  77 */ "expr ::= value",
- /*  78 */ "expr ::= ternary",
- /*  79 */ "expr ::= DOLLAR ID COLON ID",
- /*  80 */ "expr ::= expr MATH value",
- /*  81 */ "expr ::= expr UNIMATH value",
- /*  82 */ "expr ::= expr ANDSYM value",
- /*  83 */ "expr ::= array",
- /*  84 */ "expr ::= expr modifierlist",
- /*  85 */ "expr ::= expr ifcond expr",
- /*  86 */ "expr ::= expr ISIN array",
- /*  87 */ "expr ::= expr ISIN value",
- /*  88 */ "expr ::= expr lop expr",
- /*  89 */ "expr ::= expr ISDIVBY expr",
- /*  90 */ "expr ::= expr ISNOTDIVBY expr",
- /*  91 */ "expr ::= expr ISEVEN",
- /*  92 */ "expr ::= expr ISNOTEVEN",
- /*  93 */ "expr ::= expr ISEVENBY expr",
- /*  94 */ "expr ::= expr ISNOTEVENBY expr",
- /*  95 */ "expr ::= expr ISODD",
- /*  96 */ "expr ::= expr ISNOTODD",
- /*  97 */ "expr ::= expr ISODDBY expr",
- /*  98 */ "expr ::= expr ISNOTODDBY expr",
- /*  99 */ "expr ::= value INSTANCEOF ID",
- /* 100 */ "expr ::= value INSTANCEOF value",
- /* 101 */ "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr",
- /* 102 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",
- /* 103 */ "value ::= variable",
- /* 104 */ "value ::= UNIMATH value",
- /* 105 */ "value ::= NOT value",
- /* 106 */ "value ::= TYPECAST value",
- /* 107 */ "value ::= variable INCDEC",
- /* 108 */ "value ::= HEX",
- /* 109 */ "value ::= INTEGER",
- /* 110 */ "value ::= INTEGER DOT INTEGER",
- /* 111 */ "value ::= INTEGER DOT",
- /* 112 */ "value ::= DOT INTEGER",
- /* 113 */ "value ::= ID",
- /* 114 */ "value ::= function",
- /* 115 */ "value ::= OPENP expr CLOSEP",
- /* 116 */ "value ::= SINGLEQUOTESTRING",
- /* 117 */ "value ::= doublequoted_with_quotes",
- /* 118 */ "value ::= ID DOUBLECOLON static_class_access",
- /* 119 */ "value ::= varindexed DOUBLECOLON static_class_access",
- /* 120 */ "value ::= smartytag",
- /* 121 */ "value ::= value modifierlist",
- /* 122 */ "variable ::= varindexed",
- /* 123 */ "variable ::= DOLLAR varvar AT ID",
- /* 124 */ "variable ::= object",
- /* 125 */ "variable ::= HATCH ID HATCH",
- /* 126 */ "variable ::= HATCH variable HATCH",
- /* 127 */ "varindexed ::= DOLLAR varvar arrayindex",
- /* 128 */ "arrayindex ::= arrayindex indexdef",
- /* 129 */ "arrayindex ::=",
- /* 130 */ "indexdef ::= DOT DOLLAR varvar",
- /* 131 */ "indexdef ::= DOT DOLLAR varvar AT ID",
- /* 132 */ "indexdef ::= DOT ID",
- /* 133 */ "indexdef ::= DOT INTEGER",
- /* 134 */ "indexdef ::= DOT LDEL expr RDEL",
- /* 135 */ "indexdef ::= OPENB ID CLOSEB",
- /* 136 */ "indexdef ::= OPENB ID DOT ID CLOSEB",
- /* 137 */ "indexdef ::= OPENB expr CLOSEB",
- /* 138 */ "indexdef ::= OPENB CLOSEB",
- /* 139 */ "varvar ::= varvarele",
- /* 140 */ "varvar ::= varvar varvarele",
- /* 141 */ "varvarele ::= ID",
- /* 142 */ "varvarele ::= LDEL expr RDEL",
- /* 143 */ "object ::= varindexed objectchain",
- /* 144 */ "objectchain ::= objectelement",
- /* 145 */ "objectchain ::= objectchain objectelement",
- /* 146 */ "objectelement ::= PTR ID arrayindex",
- /* 147 */ "objectelement ::= PTR DOLLAR varvar arrayindex",
- /* 148 */ "objectelement ::= PTR LDEL expr RDEL arrayindex",
- /* 149 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",
- /* 150 */ "objectelement ::= PTR method",
- /* 151 */ "function ::= ID OPENP params CLOSEP",
- /* 152 */ "method ::= ID OPENP params CLOSEP",
- /* 153 */ "method ::= DOLLAR ID OPENP params CLOSEP",
- /* 154 */ "params ::= params COMMA expr",
- /* 155 */ "params ::= expr",
- /* 156 */ "params ::=",
- /* 157 */ "modifierlist ::= modifierlist modifier modparameters",
- /* 158 */ "modifierlist ::= modifier modparameters",
- /* 159 */ "modifier ::= VERT AT ID",
- /* 160 */ "modifier ::= VERT ID",
- /* 161 */ "modparameters ::= modparameters modparameter",
- /* 162 */ "modparameters ::=",
- /* 163 */ "modparameter ::= COLON value",
- /* 164 */ "modparameter ::= COLON array",
- /* 165 */ "static_class_access ::= method",
- /* 166 */ "static_class_access ::= method objectchain",
- /* 167 */ "static_class_access ::= ID",
- /* 168 */ "static_class_access ::= DOLLAR ID arrayindex",
- /* 169 */ "static_class_access ::= DOLLAR ID arrayindex objectchain",
- /* 170 */ "ifcond ::= EQUALS",
- /* 171 */ "ifcond ::= NOTEQUALS",
- /* 172 */ "ifcond ::= GREATERTHAN",
- /* 173 */ "ifcond ::= LESSTHAN",
- /* 174 */ "ifcond ::= GREATEREQUAL",
- /* 175 */ "ifcond ::= LESSEQUAL",
- /* 176 */ "ifcond ::= IDENTITY",
- /* 177 */ "ifcond ::= NONEIDENTITY",
- /* 178 */ "ifcond ::= MOD",
- /* 179 */ "lop ::= LAND",
- /* 180 */ "lop ::= LOR",
- /* 181 */ "lop ::= LXOR",
- /* 182 */ "array ::= OPENB arrayelements CLOSEB",
- /* 183 */ "arrayelements ::= arrayelement",
- /* 184 */ "arrayelements ::= arrayelements COMMA arrayelement",
- /* 185 */ "arrayelements ::=",
- /* 186 */ "arrayelement ::= value APTR expr",
- /* 187 */ "arrayelement ::= ID APTR expr",
- /* 188 */ "arrayelement ::= expr",
- /* 189 */ "doublequoted_with_quotes ::= QUOTE QUOTE",
- /* 190 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",
- /* 191 */ "doublequoted ::= doublequoted doublequotedcontent",
- /* 192 */ "doublequoted ::= doublequotedcontent",
- /* 193 */ "doublequotedcontent ::= BACKTICK variable BACKTICK",
- /* 194 */ "doublequotedcontent ::= BACKTICK expr BACKTICK",
- /* 195 */ "doublequotedcontent ::= DOLLARID",
- /* 196 */ "doublequotedcontent ::= LDEL variable RDEL",
- /* 197 */ "doublequotedcontent ::= LDEL expr RDEL",
- /* 198 */ "doublequotedcontent ::= smartytag",
- /* 199 */ "doublequotedcontent ::= TEXT",
- /* 200 */ "optspace ::= SPACE",
- /* 201 */ "optspace ::=",
+    public static $yyRuleName = array(
+        /*   0 */
+        "start ::= template",
+        /*   1 */
+        "template ::= template_element",
+        /*   2 */
+        "template ::= template template_element",
+        /*   3 */
+        "template ::=",
+        /*   4 */
+        "template_element ::= smartytag RDEL",
+        /*   5 */
+        "template_element ::= COMMENT",
+        /*   6 */
+        "template_element ::= literal",
+        /*   7 */
+        "template_element ::= PHPSTARTTAG",
+        /*   8 */
+        "template_element ::= PHPENDTAG",
+        /*   9 */
+        "template_element ::= ASPSTARTTAG",
+        /*  10 */
+        "template_element ::= ASPENDTAG",
+        /*  11 */
+        "template_element ::= FAKEPHPSTARTTAG",
+        /*  12 */
+        "template_element ::= XMLTAG",
+        /*  13 */
+        "template_element ::= TEXT",
+        /*  14 */
+        "template_element ::= STRIPON",
+        /*  15 */
+        "template_element ::= STRIPOFF",
+        /*  16 */
+        "template_element ::= BLOCKSOURCE",
+        /*  17 */
+        "literal ::= LITERALSTART LITERALEND",
+        /*  18 */
+        "literal ::= LITERALSTART literal_elements LITERALEND",
+        /*  19 */
+        "literal_elements ::= literal_elements literal_element",
+        /*  20 */
+        "literal_elements ::=",
+        /*  21 */
+        "literal_element ::= literal",
+        /*  22 */
+        "literal_element ::= LITERAL",
+        /*  23 */
+        "literal_element ::= PHPSTARTTAG",
+        /*  24 */
+        "literal_element ::= FAKEPHPSTARTTAG",
+        /*  25 */
+        "literal_element ::= PHPENDTAG",
+        /*  26 */
+        "literal_element ::= ASPSTARTTAG",
+        /*  27 */
+        "literal_element ::= ASPENDTAG",
+        /*  28 */
+        "smartytag ::= LDEL value",
+        /*  29 */
+        "smartytag ::= LDEL value modifierlist attributes",
+        /*  30 */
+        "smartytag ::= LDEL value attributes",
+        /*  31 */
+        "smartytag ::= LDEL expr modifierlist attributes",
+        /*  32 */
+        "smartytag ::= LDEL expr attributes",
+        /*  33 */
+        "smartytag ::= LDEL DOLLAR ID EQUAL value",
+        /*  34 */
+        "smartytag ::= LDEL DOLLAR ID EQUAL expr",
+        /*  35 */
+        "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes",
+        /*  36 */
+        "smartytag ::= LDEL varindexed EQUAL expr attributes",
+        /*  37 */
+        "smartytag ::= LDEL ID attributes",
+        /*  38 */
+        "smartytag ::= LDEL ID",
+        /*  39 */
+        "smartytag ::= LDEL ID PTR ID attributes",
+        /*  40 */
+        "smartytag ::= LDEL ID modifierlist attributes",
+        /*  41 */
+        "smartytag ::= LDEL ID PTR ID modifierlist attributes",
+        /*  42 */
+        "smartytag ::= LDELIF expr",
+        /*  43 */
+        "smartytag ::= LDELIF expr attributes",
+        /*  44 */
+        "smartytag ::= LDELIF statement",
+        /*  45 */
+        "smartytag ::= LDELIF statement attributes",
+        /*  46 */
+        "smartytag ::= LDELFOR statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction attributes",
+        /*  47 */
+        "foraction ::= EQUAL expr",
+        /*  48 */
+        "foraction ::= INCDEC",
+        /*  49 */
+        "smartytag ::= LDELFOR statement TO expr attributes",
+        /*  50 */
+        "smartytag ::= LDELFOR statement TO expr STEP expr attributes",
+        /*  51 */
+        "smartytag ::= LDELFOREACH attributes",
+        /*  52 */
+        "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar attributes",
+        /*  53 */
+        "smartytag ::= LDELFOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar attributes",
+        /*  54 */
+        "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar attributes",
+        /*  55 */
+        "smartytag ::= LDELFOREACH SPACE expr AS DOLLAR varvar APTR DOLLAR varvar attributes",
+        /*  56 */
+        "smartytag ::= LDELSETFILTER ID modparameters",
+        /*  57 */
+        "smartytag ::= LDELSETFILTER ID modparameters modifierlist",
+        /*  58 */
+        "smartytag ::= LDEL SMARTYBLOCKCHILDPARENT",
+        /*  59 */
+        "smartytag ::= LDELSLASH ID",
+        /*  60 */
+        "smartytag ::= LDELSLASH ID modifierlist",
+        /*  61 */
+        "smartytag ::= LDELSLASH ID PTR ID",
+        /*  62 */
+        "smartytag ::= LDELSLASH ID PTR ID modifierlist",
+        /*  63 */
+        "attributes ::= attributes attribute",
+        /*  64 */
+        "attributes ::= attribute",
+        /*  65 */
+        "attributes ::=",
+        /*  66 */
+        "attribute ::= SPACE ID EQUAL ID",
+        /*  67 */
+        "attribute ::= ATTR expr",
+        /*  68 */
+        "attribute ::= ATTR value",
+        /*  69 */
+        "attribute ::= SPACE ID",
+        /*  70 */
+        "attribute ::= SPACE expr",
+        /*  71 */
+        "attribute ::= SPACE value",
+        /*  72 */
+        "attribute ::= SPACE INTEGER EQUAL expr",
+        /*  73 */
+        "statements ::= statement",
+        /*  74 */
+        "statements ::= statements COMMA statement",
+        /*  75 */
+        "statement ::= DOLLAR varvar EQUAL expr",
+        /*  76 */
+        "statement ::= varindexed EQUAL expr",
+        /*  77 */
+        "statement ::= OPENP statement CLOSEP",
+        /*  78 */
+        "expr ::= value",
+        /*  79 */
+        "expr ::= ternary",
+        /*  80 */
+        "expr ::= DOLLAR ID COLON ID",
+        /*  81 */
+        "expr ::= expr MATH value",
+        /*  82 */
+        "expr ::= expr UNIMATH value",
+        /*  83 */
+        "expr ::= expr ANDSYM value",
+        /*  84 */
+        "expr ::= array",
+        /*  85 */
+        "expr ::= expr modifierlist",
+        /*  86 */
+        "expr ::= expr ifcond expr",
+        /*  87 */
+        "expr ::= expr ISIN array",
+        /*  88 */
+        "expr ::= expr ISIN value",
+        /*  89 */
+        "expr ::= expr lop expr",
+        /*  90 */
+        "expr ::= expr ISDIVBY expr",
+        /*  91 */
+        "expr ::= expr ISNOTDIVBY expr",
+        /*  92 */
+        "expr ::= expr ISEVEN",
+        /*  93 */
+        "expr ::= expr ISNOTEVEN",
+        /*  94 */
+        "expr ::= expr ISEVENBY expr",
+        /*  95 */
+        "expr ::= expr ISNOTEVENBY expr",
+        /*  96 */
+        "expr ::= expr ISODD",
+        /*  97 */
+        "expr ::= expr ISNOTODD",
+        /*  98 */
+        "expr ::= expr ISODDBY expr",
+        /*  99 */
+        "expr ::= expr ISNOTODDBY expr",
+        /* 100 */
+        "expr ::= value INSTANCEOF ID",
+        /* 101 */
+        "expr ::= value INSTANCEOF value",
+        /* 102 */
+        "ternary ::= OPENP expr CLOSEP QMARK DOLLAR ID COLON expr",
+        /* 103 */
+        "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",
+        /* 104 */
+        "value ::= variable",
+        /* 105 */
+        "value ::= UNIMATH value",
+        /* 106 */
+        "value ::= NOT value",
+        /* 107 */
+        "value ::= TYPECAST value",
+        /* 108 */
+        "value ::= variable INCDEC",
+        /* 109 */
+        "value ::= HEX",
+        /* 110 */
+        "value ::= INTEGER",
+        /* 111 */
+        "value ::= INTEGER DOT INTEGER",
+        /* 112 */
+        "value ::= INTEGER DOT",
+        /* 113 */
+        "value ::= DOT INTEGER",
+        /* 114 */
+        "value ::= ID",
+        /* 115 */
+        "value ::= function",
+        /* 116 */
+        "value ::= OPENP expr CLOSEP",
+        /* 117 */
+        "value ::= SINGLEQUOTESTRING",
+        /* 118 */
+        "value ::= doublequoted_with_quotes",
+        /* 119 */
+        "value ::= ID DOUBLECOLON static_class_access",
+        /* 120 */
+        "value ::= varindexed DOUBLECOLON static_class_access",
+        /* 121 */
+        "value ::= smartytag RDEL",
+        /* 122 */
+        "value ::= value modifierlist",
+        /* 123 */
+        "variable ::= varindexed",
+        /* 124 */
+        "variable ::= DOLLAR varvar AT ID",
+        /* 125 */
+        "variable ::= object",
+        /* 126 */
+        "variable ::= HATCH ID HATCH",
+        /* 127 */
+        "variable ::= HATCH ID HATCH arrayindex",
+        /* 128 */
+        "variable ::= HATCH variable HATCH",
+        /* 129 */
+        "variable ::= HATCH variable HATCH arrayindex",
+        /* 130 */
+        "varindexed ::= DOLLAR varvar arrayindex",
+        /* 131 */
+        "arrayindex ::= arrayindex indexdef",
+        /* 132 */
+        "arrayindex ::=",
+        /* 133 */
+        "indexdef ::= DOT DOLLAR varvar",
+        /* 134 */
+        "indexdef ::= DOT DOLLAR varvar AT ID",
+        /* 135 */
+        "indexdef ::= DOT ID",
+        /* 136 */
+        "indexdef ::= DOT INTEGER",
+        /* 137 */
+        "indexdef ::= DOT LDEL expr RDEL",
+        /* 138 */
+        "indexdef ::= OPENB ID CLOSEB",
+        /* 139 */
+        "indexdef ::= OPENB ID DOT ID CLOSEB",
+        /* 140 */
+        "indexdef ::= OPENB expr CLOSEB",
+        /* 141 */
+        "indexdef ::= OPENB CLOSEB",
+        /* 142 */
+        "varvar ::= varvarele",
+        /* 143 */
+        "varvar ::= varvar varvarele",
+        /* 144 */
+        "varvarele ::= ID",
+        /* 145 */
+        "varvarele ::= LDEL expr RDEL",
+        /* 146 */
+        "object ::= varindexed objectchain",
+        /* 147 */
+        "objectchain ::= objectelement",
+        /* 148 */
+        "objectchain ::= objectchain objectelement",
+        /* 149 */
+        "objectelement ::= PTR ID arrayindex",
+        /* 150 */
+        "objectelement ::= PTR DOLLAR varvar arrayindex",
+        /* 151 */
+        "objectelement ::= PTR LDEL expr RDEL arrayindex",
+        /* 152 */
+        "objectelement ::= PTR ID LDEL expr RDEL arrayindex",
+        /* 153 */
+        "objectelement ::= PTR method",
+        /* 154 */
+        "function ::= ID OPENP params CLOSEP",
+        /* 155 */
+        "method ::= ID OPENP params CLOSEP",
+        /* 156 */
+        "method ::= DOLLAR ID OPENP params CLOSEP",
+        /* 157 */
+        "params ::= params COMMA expr",
+        /* 158 */
+        "params ::= expr",
+        /* 159 */
+        "params ::=",
+        /* 160 */
+        "modifierlist ::= modifierlist modifier modparameters",
+        /* 161 */
+        "modifierlist ::= modifier modparameters",
+        /* 162 */
+        "modifier ::= VERT AT ID",
+        /* 163 */
+        "modifier ::= VERT ID",
+        /* 164 */
+        "modparameters ::= modparameters modparameter",
+        /* 165 */
+        "modparameters ::=",
+        /* 166 */
+        "modparameter ::= COLON value",
+        /* 167 */
+        "modparameter ::= COLON array",
+        /* 168 */
+        "static_class_access ::= method",
+        /* 169 */
+        "static_class_access ::= method objectchain",
+        /* 170 */
+        "static_class_access ::= ID",
+        /* 171 */
+        "static_class_access ::= DOLLAR ID arrayindex",
+        /* 172 */
+        "static_class_access ::= DOLLAR ID arrayindex objectchain",
+        /* 173 */
+        "ifcond ::= EQUALS",
+        /* 174 */
+        "ifcond ::= NOTEQUALS",
+        /* 175 */
+        "ifcond ::= GREATERTHAN",
+        /* 176 */
+        "ifcond ::= LESSTHAN",
+        /* 177 */
+        "ifcond ::= GREATEREQUAL",
+        /* 178 */
+        "ifcond ::= LESSEQUAL",
+        /* 179 */
+        "ifcond ::= IDENTITY",
+        /* 180 */
+        "ifcond ::= NONEIDENTITY",
+        /* 181 */
+        "ifcond ::= MOD",
+        /* 182 */
+        "lop ::= LAND",
+        /* 183 */
+        "lop ::= LOR",
+        /* 184 */
+        "lop ::= LXOR",
+        /* 185 */
+        "array ::= OPENB arrayelements CLOSEB",
+        /* 186 */
+        "arrayelements ::= arrayelement",
+        /* 187 */
+        "arrayelements ::= arrayelements COMMA arrayelement",
+        /* 188 */
+        "arrayelements ::=",
+        /* 189 */
+        "arrayelement ::= value APTR expr",
+        /* 190 */
+        "arrayelement ::= ID APTR expr",
+        /* 191 */
+        "arrayelement ::= expr",
+        /* 192 */
+        "doublequoted_with_quotes ::= QUOTE QUOTE",
+        /* 193 */
+        "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",
+        /* 194 */
+        "doublequoted ::= doublequoted doublequotedcontent",
+        /* 195 */
+        "doublequoted ::= doublequotedcontent",
+        /* 196 */
+        "doublequotedcontent ::= BACKTICK variable BACKTICK",
+        /* 197 */
+        "doublequotedcontent ::= BACKTICK expr BACKTICK",
+        /* 198 */
+        "doublequotedcontent ::= DOLLARID",
+        /* 199 */
+        "doublequotedcontent ::= LDEL variable RDEL",
+        /* 200 */
+        "doublequotedcontent ::= LDEL expr RDEL",
+        /* 201 */
+        "doublequotedcontent ::= smartytag RDEL",
+        /* 202 */
+        "doublequotedcontent ::= TEXT",
+        /* 203 */
+        "optspace ::= SPACE",
+        /* 204 */
+        "optspace ::=",
     );
 
-    function tokenName($tokenType)
+    public function tokenName($tokenType)
     {
         if ($tokenType === 0) {
             return 'End of Input';
@@ -1489,41 +2596,43 @@ static public $yy_action = array(
         }
     }
 
-    static function yy_destructor($yymajor, $yypminor)
+    public static function yy_destructor($yymajor, $yypminor)
     {
         switch ($yymajor) {
-            default:  break;   /* If no destructor action specified: do nothing */
+            default:
+                break; /* If no destructor action specified: do nothing */
         }
     }
 
-    function yy_pop_parser_stack()
+    public function yy_pop_parser_stack()
     {
         if (!count($this->yystack)) {
             return;
         }
         $yytos = array_pop($this->yystack);
-        if (self::$yyTraceFILE && $this->yyidx >= 0) {
-            fwrite(self::$yyTraceFILE,
-                self::$yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
-                    "\n");
+        if ($this->yyTraceFILE && $this->yyidx >= 0) {
+            fwrite($this->yyTraceFILE,
+                   $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
+                   "\n");
         }
         $yymajor = $yytos->major;
         self::yy_destructor($yymajor, $yytos->minor);
-        $this->yyidx--;
+        $this->yyidx --;
+
         return $yymajor;
     }
 
-    function __destruct()
+    public function __destruct()
     {
         while ($this->yystack !== Array()) {
             $this->yy_pop_parser_stack();
         }
-        if (is_resource(self::$yyTraceFILE)) {
-            fclose(self::$yyTraceFILE);
+        if (is_resource($this->yyTraceFILE)) {
+            fclose($this->yyTraceFILE);
         }
     }
 
-    function yy_get_expected_tokens($token)
+    public function yy_get_expected_tokens($token)
     {
         $state = $this->yystack[$this->yyidx]->stateno;
         $expected = self::$yyExpectedTokens[$state];
@@ -1538,7 +2647,7 @@ static public $yy_action = array(
                 // reduce action
                 $done = 0;
                 do {
-                    if ($done++ == 100) {
+                    if ($done ++ == 100) {
                         $this->yyidx = $yyidx;
                         $this->yystack = $stack;
                         // too much recursion prevents proper detection
@@ -1551,17 +2660,18 @@ static public $yy_action = array(
                         $this->yystack[$this->yyidx]->stateno,
                         self::$yyRuleInfo[$yyruleno]['lhs']);
                     if (isset(self::$yyExpectedTokens[$nextstate])) {
-                       $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
-                            if (in_array($token,
-                                  self::$yyExpectedTokens[$nextstate], true)) {
+                        $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
+                        if (in_array($token,
+                                     self::$yyExpectedTokens[$nextstate], true)) {
                             $this->yyidx = $yyidx;
                             $this->yystack = $stack;
+
                             return array_unique($expected);
                         }
                     }
                     if ($nextstate < self::YYNSTATE) {
                         // we need to shift a non-terminal
-                        $this->yyidx++;
+                        $this->yyidx ++;
                         $x = new TP_yyStackEntry;
                         $x->stateno = $nextstate;
                         $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@@ -1586,12 +2696,13 @@ static public $yy_action = array(
             }
             break;
         } while (true);
-       $this->yyidx = $yyidx;
-       $this->yystack = $stack;
+        $this->yyidx = $yyidx;
+        $this->yystack = $stack;
+
         return array_unique($expected);
     }
 
-    function yy_is_expected_token($token)
+    public function yy_is_expected_token($token)
     {
         if ($token === 0) {
             return true; // 0 is not part of this
@@ -1608,7 +2719,7 @@ static public $yy_action = array(
                 // reduce action
                 $done = 0;
                 do {
-                    if ($done++ == 100) {
+                    if ($done ++ == 100) {
                         $this->yyidx = $yyidx;
                         $this->yystack = $stack;
                         // too much recursion prevents proper detection
@@ -1621,14 +2732,16 @@ static public $yy_action = array(
                         $this->yystack[$this->yyidx]->stateno,
                         self::$yyRuleInfo[$yyruleno]['lhs']);
                     if (isset(self::$yyExpectedTokens[$nextstate]) &&
-                          in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
+                        in_array($token, self::$yyExpectedTokens[$nextstate], true)
+                    ) {
                         $this->yyidx = $yyidx;
                         $this->yystack = $stack;
+
                         return true;
                     }
                     if ($nextstate < self::YYNSTATE) {
                         // we need to shift a non-terminal
-                        $this->yyidx++;
+                        $this->yyidx ++;
                         $x = new TP_yyStackEntry;
                         $x->stateno = $nextstate;
                         $x->major = self::$yyRuleInfo[$yyruleno]['lhs'];
@@ -1659,10 +2772,11 @@ static public $yy_action = array(
         } while (true);
         $this->yyidx = $yyidx;
         $this->yystack = $stack;
+
         return true;
     }
 
-   function yy_find_shift_action($iLookAhead)
+    public function yy_find_shift_action($iLookAhead)
     {
         $stateno = $this->yystack[$this->yyidx]->stateno;
 
@@ -1680,23 +2794,27 @@ static public $yy_action = array(
         }
         $i += $iLookAhead;
         if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
-              self::$yy_lookahead[$i] != $iLookAhead) {
+            self::$yy_lookahead[$i] != $iLookAhead
+        ) {
             if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
-                   && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
-                if (self::$yyTraceFILE) {
-                    fwrite(self::$yyTraceFILE, self::$yyTracePrompt . "FALLBACK " .
+                && ($iFallback = self::$yyFallback[$iLookAhead]) != 0
+            ) {
+                if ($this->yyTraceFILE) {
+                    fwrite($this->yyTraceFILE, $this->yyTracePrompt . "FALLBACK " .
                         $this->yyTokenName[$iLookAhead] . " => " .
                         $this->yyTokenName[$iFallback] . "\n");
                 }
+
                 return $this->yy_find_shift_action($iFallback);
             }
+
             return self::$yy_default[$stateno];
         } else {
             return self::$yy_action[$i];
         }
     }
 
-    function yy_find_reduce_action($stateno, $iLookAhead)
+    public function yy_find_reduce_action($stateno, $iLookAhead)
     {
         /* $stateno = $this->yystack[$this->yyidx]->stateno; */
 
@@ -1712,29 +2830,31 @@ static public $yy_action = array(
         }
         $i += $iLookAhead;
         if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
-              self::$yy_lookahead[$i] != $iLookAhead) {
+            self::$yy_lookahead[$i] != $iLookAhead
+        ) {
             return self::$yy_default[$stateno];
         } else {
             return self::$yy_action[$i];
         }
     }
 
-    function yy_shift($yyNewState, $yyMajor, $yypMinor)
+    public function yy_shift($yyNewState, $yyMajor, $yypMinor)
     {
-        $this->yyidx++;
+        $this->yyidx ++;
         if ($this->yyidx >= self::YYSTACKDEPTH) {
-            $this->yyidx--;
-            if (self::$yyTraceFILE) {
-                fprintf(self::$yyTraceFILE, "%sStack Overflow!\n", self::$yyTracePrompt);
+            $this->yyidx --;
+            if ($this->yyTraceFILE) {
+                fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
             }
             while ($this->yyidx >= 0) {
                 $this->yy_pop_parser_stack();
             }
-#line 84 "smarty_internal_templateparser.y"
+            #line 85 "smarty_internal_templateparser.y"
+
+            $this->internalError = true;
+            $this->compiler->trigger_template_error("Stack overflow in template parser");
+            #line 1707 "smarty_internal_templateparser.php"
 
-    $this->internalError = true;
-    $this->compiler->trigger_template_error("Stack overflow in template parser");
-#line 1733 "smarty_internal_templateparser.php"
             return;
         }
         $yytos = new TP_yyStackEntry;
@@ -1742,380 +2862,383 @@ static public $yy_action = array(
         $yytos->major = $yyMajor;
         $yytos->minor = $yypMinor;
         array_push($this->yystack, $yytos);
-        if (self::$yyTraceFILE && $this->yyidx > 0) {
-            fprintf(self::$yyTraceFILE, "%sShift %d\n", self::$yyTracePrompt,
-                $yyNewState);
-            fprintf(self::$yyTraceFILE, "%sStack:", self::$yyTracePrompt);
-            for($i = 1; $i <= $this->yyidx; $i++) {
-                fprintf(self::$yyTraceFILE, " %s",
-                    $this->yyTokenName[$this->yystack[$i]->major]);
+        if ($this->yyTraceFILE && $this->yyidx > 0) {
+            fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
+                    $yyNewState);
+            fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
+            for ($i = 1; $i <= $this->yyidx; $i ++) {
+                fprintf($this->yyTraceFILE, " %s",
+                        $this->yyTokenName[$this->yystack[$i]->major]);
             }
-            fwrite(self::$yyTraceFILE,"\n");
+            fwrite($this->yyTraceFILE, "\n");
         }
     }
 
-    static public $yyRuleInfo = array(
-  array( 'lhs' => 82, 'rhs' => 1 ),
-  array( 'lhs' => 83, 'rhs' => 1 ),
-  array( 'lhs' => 83, 'rhs' => 2 ),
-  array( 'lhs' => 83, 'rhs' => 0 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 84, 'rhs' => 1 ),
-  array( 'lhs' => 86, 'rhs' => 2 ),
-  array( 'lhs' => 86, 'rhs' => 3 ),
-  array( 'lhs' => 87, 'rhs' => 2 ),
-  array( 'lhs' => 87, 'rhs' => 0 ),
-  array( 'lhs' => 88, 'rhs' => 1 ),
-  array( 'lhs' => 88, 'rhs' => 1 ),
-  array( 'lhs' => 88, 'rhs' => 1 ),
-  array( 'lhs' => 88, 'rhs' => 1 ),
-  array( 'lhs' => 88, 'rhs' => 1 ),
-  array( 'lhs' => 88, 'rhs' => 1 ),
-  array( 'lhs' => 88, 'rhs' => 1 ),
-  array( 'lhs' => 85, 'rhs' => 3 ),
-  array( 'lhs' => 85, 'rhs' => 5 ),
-  array( 'lhs' => 85, 'rhs' => 4 ),
-  array( 'lhs' => 85, 'rhs' => 5 ),
-  array( 'lhs' => 85, 'rhs' => 4 ),
-  array( 'lhs' => 85, 'rhs' => 6 ),
-  array( 'lhs' => 85, 'rhs' => 6 ),
-  array( 'lhs' => 85, 'rhs' => 7 ),
-  array( 'lhs' => 85, 'rhs' => 6 ),
-  array( 'lhs' => 85, 'rhs' => 4 ),
-  array( 'lhs' => 85, 'rhs' => 3 ),
-  array( 'lhs' => 85, 'rhs' => 6 ),
-  array( 'lhs' => 85, 'rhs' => 5 ),
-  array( 'lhs' => 85, 'rhs' => 7 ),
-  array( 'lhs' => 85, 'rhs' => 3 ),
-  array( 'lhs' => 85, 'rhs' => 4 ),
-  array( 'lhs' => 85, 'rhs' => 3 ),
-  array( 'lhs' => 85, 'rhs' => 4 ),
-  array( 'lhs' => 85, 'rhs' => 12 ),
-  array( 'lhs' => 98, 'rhs' => 2 ),
-  array( 'lhs' => 98, 'rhs' => 1 ),
-  array( 'lhs' => 85, 'rhs' => 6 ),
-  array( 'lhs' => 85, 'rhs' => 8 ),
-  array( 'lhs' => 85, 'rhs' => 3 ),
-  array( 'lhs' => 85, 'rhs' => 8 ),
-  array( 'lhs' => 85, 'rhs' => 11 ),
-  array( 'lhs' => 85, 'rhs' => 8 ),
-  array( 'lhs' => 85, 'rhs' => 11 ),
-  array( 'lhs' => 85, 'rhs' => 4 ),
-  array( 'lhs' => 85, 'rhs' => 5 ),
-  array( 'lhs' => 85, 'rhs' => 1 ),
-  array( 'lhs' => 85, 'rhs' => 3 ),
-  array( 'lhs' => 85, 'rhs' => 4 ),
-  array( 'lhs' => 85, 'rhs' => 5 ),
-  array( 'lhs' => 85, 'rhs' => 6 ),
-  array( 'lhs' => 91, 'rhs' => 2 ),
-  array( 'lhs' => 91, 'rhs' => 1 ),
-  array( 'lhs' => 91, 'rhs' => 0 ),
-  array( 'lhs' => 100, 'rhs' => 4 ),
-  array( 'lhs' => 100, 'rhs' => 2 ),
-  array( 'lhs' => 100, 'rhs' => 2 ),
-  array( 'lhs' => 100, 'rhs' => 2 ),
-  array( 'lhs' => 100, 'rhs' => 2 ),
-  array( 'lhs' => 100, 'rhs' => 2 ),
-  array( 'lhs' => 100, 'rhs' => 4 ),
-  array( 'lhs' => 95, 'rhs' => 1 ),
-  array( 'lhs' => 95, 'rhs' => 3 ),
-  array( 'lhs' => 94, 'rhs' => 4 ),
-  array( 'lhs' => 94, 'rhs' => 3 ),
-  array( 'lhs' => 94, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 1 ),
-  array( 'lhs' => 92, 'rhs' => 1 ),
-  array( 'lhs' => 92, 'rhs' => 4 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 1 ),
-  array( 'lhs' => 92, 'rhs' => 2 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 2 ),
-  array( 'lhs' => 92, 'rhs' => 2 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 2 ),
-  array( 'lhs' => 92, 'rhs' => 2 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 92, 'rhs' => 3 ),
-  array( 'lhs' => 101, 'rhs' => 8 ),
-  array( 'lhs' => 101, 'rhs' => 7 ),
-  array( 'lhs' => 89, 'rhs' => 1 ),
-  array( 'lhs' => 89, 'rhs' => 2 ),
-  array( 'lhs' => 89, 'rhs' => 2 ),
-  array( 'lhs' => 89, 'rhs' => 2 ),
-  array( 'lhs' => 89, 'rhs' => 2 ),
-  array( 'lhs' => 89, 'rhs' => 1 ),
-  array( 'lhs' => 89, 'rhs' => 1 ),
-  array( 'lhs' => 89, 'rhs' => 3 ),
-  array( 'lhs' => 89, 'rhs' => 2 ),
-  array( 'lhs' => 89, 'rhs' => 2 ),
-  array( 'lhs' => 89, 'rhs' => 1 ),
-  array( 'lhs' => 89, 'rhs' => 1 ),
-  array( 'lhs' => 89, 'rhs' => 3 ),
-  array( 'lhs' => 89, 'rhs' => 1 ),
-  array( 'lhs' => 89, 'rhs' => 1 ),
-  array( 'lhs' => 89, 'rhs' => 3 ),
-  array( 'lhs' => 89, 'rhs' => 3 ),
-  array( 'lhs' => 89, 'rhs' => 1 ),
-  array( 'lhs' => 89, 'rhs' => 2 ),
-  array( 'lhs' => 105, 'rhs' => 1 ),
-  array( 'lhs' => 105, 'rhs' => 4 ),
-  array( 'lhs' => 105, 'rhs' => 1 ),
-  array( 'lhs' => 105, 'rhs' => 3 ),
-  array( 'lhs' => 105, 'rhs' => 3 ),
-  array( 'lhs' => 93, 'rhs' => 3 ),
-  array( 'lhs' => 110, 'rhs' => 2 ),
-  array( 'lhs' => 110, 'rhs' => 0 ),
-  array( 'lhs' => 111, 'rhs' => 3 ),
-  array( 'lhs' => 111, 'rhs' => 5 ),
-  array( 'lhs' => 111, 'rhs' => 2 ),
-  array( 'lhs' => 111, 'rhs' => 2 ),
-  array( 'lhs' => 111, 'rhs' => 4 ),
-  array( 'lhs' => 111, 'rhs' => 3 ),
-  array( 'lhs' => 111, 'rhs' => 5 ),
-  array( 'lhs' => 111, 'rhs' => 3 ),
-  array( 'lhs' => 111, 'rhs' => 2 ),
-  array( 'lhs' => 97, 'rhs' => 1 ),
-  array( 'lhs' => 97, 'rhs' => 2 ),
-  array( 'lhs' => 112, 'rhs' => 1 ),
-  array( 'lhs' => 112, 'rhs' => 3 ),
-  array( 'lhs' => 109, 'rhs' => 2 ),
-  array( 'lhs' => 113, 'rhs' => 1 ),
-  array( 'lhs' => 113, 'rhs' => 2 ),
-  array( 'lhs' => 114, 'rhs' => 3 ),
-  array( 'lhs' => 114, 'rhs' => 4 ),
-  array( 'lhs' => 114, 'rhs' => 5 ),
-  array( 'lhs' => 114, 'rhs' => 6 ),
-  array( 'lhs' => 114, 'rhs' => 2 ),
-  array( 'lhs' => 106, 'rhs' => 4 ),
-  array( 'lhs' => 115, 'rhs' => 4 ),
-  array( 'lhs' => 115, 'rhs' => 5 ),
-  array( 'lhs' => 116, 'rhs' => 3 ),
-  array( 'lhs' => 116, 'rhs' => 1 ),
-  array( 'lhs' => 116, 'rhs' => 0 ),
-  array( 'lhs' => 90, 'rhs' => 3 ),
-  array( 'lhs' => 90, 'rhs' => 2 ),
-  array( 'lhs' => 117, 'rhs' => 3 ),
-  array( 'lhs' => 117, 'rhs' => 2 ),
-  array( 'lhs' => 99, 'rhs' => 2 ),
-  array( 'lhs' => 99, 'rhs' => 0 ),
-  array( 'lhs' => 118, 'rhs' => 2 ),
-  array( 'lhs' => 118, 'rhs' => 2 ),
-  array( 'lhs' => 108, 'rhs' => 1 ),
-  array( 'lhs' => 108, 'rhs' => 2 ),
-  array( 'lhs' => 108, 'rhs' => 1 ),
-  array( 'lhs' => 108, 'rhs' => 3 ),
-  array( 'lhs' => 108, 'rhs' => 4 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 103, 'rhs' => 1 ),
-  array( 'lhs' => 104, 'rhs' => 1 ),
-  array( 'lhs' => 104, 'rhs' => 1 ),
-  array( 'lhs' => 104, 'rhs' => 1 ),
-  array( 'lhs' => 102, 'rhs' => 3 ),
-  array( 'lhs' => 119, 'rhs' => 1 ),
-  array( 'lhs' => 119, 'rhs' => 3 ),
-  array( 'lhs' => 119, 'rhs' => 0 ),
-  array( 'lhs' => 120, 'rhs' => 3 ),
-  array( 'lhs' => 120, 'rhs' => 3 ),
-  array( 'lhs' => 120, 'rhs' => 1 ),
-  array( 'lhs' => 107, 'rhs' => 2 ),
-  array( 'lhs' => 107, 'rhs' => 3 ),
-  array( 'lhs' => 121, 'rhs' => 2 ),
-  array( 'lhs' => 121, 'rhs' => 1 ),
-  array( 'lhs' => 122, 'rhs' => 3 ),
-  array( 'lhs' => 122, 'rhs' => 3 ),
-  array( 'lhs' => 122, 'rhs' => 1 ),
-  array( 'lhs' => 122, 'rhs' => 3 ),
-  array( 'lhs' => 122, 'rhs' => 3 ),
-  array( 'lhs' => 122, 'rhs' => 1 ),
-  array( 'lhs' => 122, 'rhs' => 1 ),
-  array( 'lhs' => 96, 'rhs' => 1 ),
-  array( 'lhs' => 96, 'rhs' => 0 ),
+    public static $yyRuleInfo = array(
+        array('lhs' => 83, 'rhs' => 1),
+        array('lhs' => 84, 'rhs' => 1),
+        array('lhs' => 84, 'rhs' => 2),
+        array('lhs' => 84, 'rhs' => 0),
+        array('lhs' => 85, 'rhs' => 2),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 85, 'rhs' => 1),
+        array('lhs' => 87, 'rhs' => 2),
+        array('lhs' => 87, 'rhs' => 3),
+        array('lhs' => 88, 'rhs' => 2),
+        array('lhs' => 88, 'rhs' => 0),
+        array('lhs' => 89, 'rhs' => 1),
+        array('lhs' => 89, 'rhs' => 1),
+        array('lhs' => 89, 'rhs' => 1),
+        array('lhs' => 89, 'rhs' => 1),
+        array('lhs' => 89, 'rhs' => 1),
+        array('lhs' => 89, 'rhs' => 1),
+        array('lhs' => 89, 'rhs' => 1),
+        array('lhs' => 86, 'rhs' => 2),
+        array('lhs' => 86, 'rhs' => 4),
+        array('lhs' => 86, 'rhs' => 3),
+        array('lhs' => 86, 'rhs' => 4),
+        array('lhs' => 86, 'rhs' => 3),
+        array('lhs' => 86, 'rhs' => 5),
+        array('lhs' => 86, 'rhs' => 5),
+        array('lhs' => 86, 'rhs' => 6),
+        array('lhs' => 86, 'rhs' => 5),
+        array('lhs' => 86, 'rhs' => 3),
+        array('lhs' => 86, 'rhs' => 2),
+        array('lhs' => 86, 'rhs' => 5),
+        array('lhs' => 86, 'rhs' => 4),
+        array('lhs' => 86, 'rhs' => 6),
+        array('lhs' => 86, 'rhs' => 2),
+        array('lhs' => 86, 'rhs' => 3),
+        array('lhs' => 86, 'rhs' => 2),
+        array('lhs' => 86, 'rhs' => 3),
+        array('lhs' => 86, 'rhs' => 11),
+        array('lhs' => 99, 'rhs' => 2),
+        array('lhs' => 99, 'rhs' => 1),
+        array('lhs' => 86, 'rhs' => 5),
+        array('lhs' => 86, 'rhs' => 7),
+        array('lhs' => 86, 'rhs' => 2),
+        array('lhs' => 86, 'rhs' => 7),
+        array('lhs' => 86, 'rhs' => 10),
+        array('lhs' => 86, 'rhs' => 7),
+        array('lhs' => 86, 'rhs' => 10),
+        array('lhs' => 86, 'rhs' => 3),
+        array('lhs' => 86, 'rhs' => 4),
+        array('lhs' => 86, 'rhs' => 2),
+        array('lhs' => 86, 'rhs' => 2),
+        array('lhs' => 86, 'rhs' => 3),
+        array('lhs' => 86, 'rhs' => 4),
+        array('lhs' => 86, 'rhs' => 5),
+        array('lhs' => 92, 'rhs' => 2),
+        array('lhs' => 92, 'rhs' => 1),
+        array('lhs' => 92, 'rhs' => 0),
+        array('lhs' => 101, 'rhs' => 4),
+        array('lhs' => 101, 'rhs' => 2),
+        array('lhs' => 101, 'rhs' => 2),
+        array('lhs' => 101, 'rhs' => 2),
+        array('lhs' => 101, 'rhs' => 2),
+        array('lhs' => 101, 'rhs' => 2),
+        array('lhs' => 101, 'rhs' => 4),
+        array('lhs' => 96, 'rhs' => 1),
+        array('lhs' => 96, 'rhs' => 3),
+        array('lhs' => 95, 'rhs' => 4),
+        array('lhs' => 95, 'rhs' => 3),
+        array('lhs' => 95, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 1),
+        array('lhs' => 93, 'rhs' => 1),
+        array('lhs' => 93, 'rhs' => 4),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 1),
+        array('lhs' => 93, 'rhs' => 2),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 2),
+        array('lhs' => 93, 'rhs' => 2),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 2),
+        array('lhs' => 93, 'rhs' => 2),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 93, 'rhs' => 3),
+        array('lhs' => 102, 'rhs' => 8),
+        array('lhs' => 102, 'rhs' => 7),
+        array('lhs' => 90, 'rhs' => 1),
+        array('lhs' => 90, 'rhs' => 2),
+        array('lhs' => 90, 'rhs' => 2),
+        array('lhs' => 90, 'rhs' => 2),
+        array('lhs' => 90, 'rhs' => 2),
+        array('lhs' => 90, 'rhs' => 1),
+        array('lhs' => 90, 'rhs' => 1),
+        array('lhs' => 90, 'rhs' => 3),
+        array('lhs' => 90, 'rhs' => 2),
+        array('lhs' => 90, 'rhs' => 2),
+        array('lhs' => 90, 'rhs' => 1),
+        array('lhs' => 90, 'rhs' => 1),
+        array('lhs' => 90, 'rhs' => 3),
+        array('lhs' => 90, 'rhs' => 1),
+        array('lhs' => 90, 'rhs' => 1),
+        array('lhs' => 90, 'rhs' => 3),
+        array('lhs' => 90, 'rhs' => 3),
+        array('lhs' => 90, 'rhs' => 2),
+        array('lhs' => 90, 'rhs' => 2),
+        array('lhs' => 106, 'rhs' => 1),
+        array('lhs' => 106, 'rhs' => 4),
+        array('lhs' => 106, 'rhs' => 1),
+        array('lhs' => 106, 'rhs' => 3),
+        array('lhs' => 106, 'rhs' => 4),
+        array('lhs' => 106, 'rhs' => 3),
+        array('lhs' => 106, 'rhs' => 4),
+        array('lhs' => 94, 'rhs' => 3),
+        array('lhs' => 111, 'rhs' => 2),
+        array('lhs' => 111, 'rhs' => 0),
+        array('lhs' => 112, 'rhs' => 3),
+        array('lhs' => 112, 'rhs' => 5),
+        array('lhs' => 112, 'rhs' => 2),
+        array('lhs' => 112, 'rhs' => 2),
+        array('lhs' => 112, 'rhs' => 4),
+        array('lhs' => 112, 'rhs' => 3),
+        array('lhs' => 112, 'rhs' => 5),
+        array('lhs' => 112, 'rhs' => 3),
+        array('lhs' => 112, 'rhs' => 2),
+        array('lhs' => 98, 'rhs' => 1),
+        array('lhs' => 98, 'rhs' => 2),
+        array('lhs' => 113, 'rhs' => 1),
+        array('lhs' => 113, 'rhs' => 3),
+        array('lhs' => 110, 'rhs' => 2),
+        array('lhs' => 114, 'rhs' => 1),
+        array('lhs' => 114, 'rhs' => 2),
+        array('lhs' => 115, 'rhs' => 3),
+        array('lhs' => 115, 'rhs' => 4),
+        array('lhs' => 115, 'rhs' => 5),
+        array('lhs' => 115, 'rhs' => 6),
+        array('lhs' => 115, 'rhs' => 2),
+        array('lhs' => 107, 'rhs' => 4),
+        array('lhs' => 116, 'rhs' => 4),
+        array('lhs' => 116, 'rhs' => 5),
+        array('lhs' => 117, 'rhs' => 3),
+        array('lhs' => 117, 'rhs' => 1),
+        array('lhs' => 117, 'rhs' => 0),
+        array('lhs' => 91, 'rhs' => 3),
+        array('lhs' => 91, 'rhs' => 2),
+        array('lhs' => 118, 'rhs' => 3),
+        array('lhs' => 118, 'rhs' => 2),
+        array('lhs' => 100, 'rhs' => 2),
+        array('lhs' => 100, 'rhs' => 0),
+        array('lhs' => 119, 'rhs' => 2),
+        array('lhs' => 119, 'rhs' => 2),
+        array('lhs' => 109, 'rhs' => 1),
+        array('lhs' => 109, 'rhs' => 2),
+        array('lhs' => 109, 'rhs' => 1),
+        array('lhs' => 109, 'rhs' => 3),
+        array('lhs' => 109, 'rhs' => 4),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 104, 'rhs' => 1),
+        array('lhs' => 105, 'rhs' => 1),
+        array('lhs' => 105, 'rhs' => 1),
+        array('lhs' => 105, 'rhs' => 1),
+        array('lhs' => 103, 'rhs' => 3),
+        array('lhs' => 120, 'rhs' => 1),
+        array('lhs' => 120, 'rhs' => 3),
+        array('lhs' => 120, 'rhs' => 0),
+        array('lhs' => 121, 'rhs' => 3),
+        array('lhs' => 121, 'rhs' => 3),
+        array('lhs' => 121, 'rhs' => 1),
+        array('lhs' => 108, 'rhs' => 2),
+        array('lhs' => 108, 'rhs' => 3),
+        array('lhs' => 122, 'rhs' => 2),
+        array('lhs' => 122, 'rhs' => 1),
+        array('lhs' => 123, 'rhs' => 3),
+        array('lhs' => 123, 'rhs' => 3),
+        array('lhs' => 123, 'rhs' => 1),
+        array('lhs' => 123, 'rhs' => 3),
+        array('lhs' => 123, 'rhs' => 3),
+        array('lhs' => 123, 'rhs' => 2),
+        array('lhs' => 123, 'rhs' => 1),
+        array('lhs' => 97, 'rhs' => 1),
+        array('lhs' => 97, 'rhs' => 0),
     );
 
-    static public $yyReduceMap = array(
-        0 => 0,
-        1 => 1,
-        2 => 1,
-        4 => 4,
-        5 => 5,
-        6 => 6,
-        7 => 7,
-        8 => 8,
-        9 => 9,
-        10 => 10,
-        11 => 11,
-        12 => 12,
-        13 => 13,
-        14 => 14,
-        15 => 15,
-        16 => 16,
-        19 => 16,
-        201 => 16,
-        17 => 17,
-        76 => 17,
-        18 => 18,
-        104 => 18,
-        106 => 18,
-        107 => 18,
-        128 => 18,
-        166 => 18,
-        20 => 20,
-        21 => 20,
-        47 => 20,
-        69 => 20,
-        70 => 20,
-        77 => 20,
-        78 => 20,
-        83 => 20,
-        103 => 20,
-        108 => 20,
-        109 => 20,
-        114 => 20,
-        116 => 20,
-        117 => 20,
-        124 => 20,
-        139 => 20,
-        165 => 20,
-        167 => 20,
-        183 => 20,
-        188 => 20,
-        200 => 20,
-        22 => 22,
-        23 => 22,
-        24 => 24,
-        25 => 25,
-        26 => 26,
-        27 => 27,
-        28 => 28,
-        29 => 29,
-        31 => 29,
-        30 => 30,
-        32 => 32,
-        33 => 32,
-        34 => 34,
-        35 => 35,
-        36 => 36,
-        37 => 37,
-        38 => 38,
-        39 => 39,
-        40 => 40,
-        41 => 41,
-        42 => 42,
-        44 => 42,
-        43 => 43,
-        45 => 45,
-        46 => 46,
-        48 => 48,
-        49 => 49,
-        50 => 50,
-        51 => 51,
-        52 => 52,
-        53 => 53,
-        54 => 54,
-        55 => 55,
-        56 => 56,
-        57 => 57,
-        58 => 58,
-        59 => 59,
-        60 => 60,
-        61 => 61,
-        62 => 62,
-        63 => 63,
-        72 => 63,
-        155 => 63,
-        159 => 63,
-        163 => 63,
-        164 => 63,
-        64 => 64,
-        156 => 64,
+    public static $yyReduceMap = array(
+        0   => 0,
+        1   => 1,
+        2   => 1,
+        4   => 4,
+        5   => 5,
+        6   => 6,
+        7   => 7,
+        8   => 8,
+        9   => 9,
+        10  => 10,
+        11  => 11,
+        12  => 12,
+        13  => 13,
+        14  => 14,
+        15  => 15,
+        16  => 16,
+        17  => 17,
+        20  => 17,
+        204 => 17,
+        18  => 18,
+        77  => 18,
+        19  => 19,
+        105 => 19,
+        107 => 19,
+        108 => 19,
+        131 => 19,
+        169 => 19,
+        21  => 21,
+        22  => 21,
+        48  => 21,
+        70  => 21,
+        71  => 21,
+        78  => 21,
+        79  => 21,
+        84  => 21,
+        104 => 21,
+        109 => 21,
+        110 => 21,
+        115 => 21,
+        117 => 21,
+        118 => 21,
+        125 => 21,
+        142 => 21,
+        168 => 21,
+        170 => 21,
+        186 => 21,
+        191 => 21,
+        203 => 21,
+        23  => 23,
+        24  => 23,
+        25  => 25,
+        26  => 26,
+        27  => 27,
+        28  => 28,
+        29  => 29,
+        30  => 30,
+        32  => 30,
+        31  => 31,
+        33  => 33,
+        34  => 33,
+        35  => 35,
+        36  => 36,
+        37  => 37,
+        38  => 38,
+        39  => 39,
+        40  => 40,
+        41  => 41,
+        42  => 42,
+        43  => 43,
+        45  => 43,
+        44  => 44,
+        46  => 46,
+        47  => 47,
+        49  => 49,
+        50  => 50,
+        51  => 51,
+        52  => 52,
+        54  => 52,
+        53  => 53,
+        55  => 53,
+        56  => 56,
+        57  => 57,
+        58  => 58,
+        59  => 59,
+        60  => 60,
+        61  => 61,
+        62  => 62,
+        63  => 63,
+        64  => 64,
+        73  => 64,
+        158 => 64,
         162 => 64,
-        65 => 65,
-        66 => 66,
-        67 => 66,
-        68 => 68,
-        71 => 71,
-        73 => 73,
-        74 => 74,
-        75 => 74,
-        79 => 79,
-        80 => 80,
-        81 => 80,
-        82 => 80,
-        84 => 84,
-        121 => 84,
-        85 => 85,
-        88 => 85,
-        99 => 85,
-        86 => 86,
-        87 => 87,
-        89 => 89,
-        90 => 90,
-        91 => 91,
-        96 => 91,
-        92 => 92,
-        95 => 92,
-        93 => 93,
-        98 => 93,
-        94 => 94,
-        97 => 94,
-        100 => 100,
+        166 => 64,
+        167 => 64,
+        65  => 65,
+        159 => 65,
+        165 => 65,
+        66  => 66,
+        67  => 67,
+        68  => 67,
+        69  => 69,
+        72  => 72,
+        74  => 74,
+        75  => 75,
+        76  => 75,
+        80  => 80,
+        81  => 81,
+        82  => 81,
+        83  => 81,
+        85  => 85,
+        122 => 85,
+        86  => 86,
+        89  => 86,
+        100 => 86,
+        87  => 87,
+        88  => 88,
+        90  => 90,
+        91  => 91,
+        92  => 92,
+        97  => 92,
+        93  => 93,
+        96  => 93,
+        94  => 94,
+        99  => 94,
+        95  => 95,
+        98  => 95,
         101 => 101,
         102 => 102,
-        105 => 105,
-        110 => 110,
+        103 => 103,
+        106 => 106,
         111 => 111,
         112 => 112,
         113 => 113,
-        115 => 115,
-        118 => 118,
+        114 => 114,
+        116 => 116,
         119 => 119,
         120 => 120,
-        122 => 122,
+        121 => 121,
         123 => 123,
-        125 => 125,
+        124 => 124,
         126 => 126,
         127 => 127,
+        128 => 128,
         129 => 129,
-        185 => 129,
         130 => 130,
-        131 => 131,
         132 => 132,
+        188 => 132,
         133 => 133,
         134 => 134,
-        137 => 134,
         135 => 135,
         136 => 136,
+        137 => 137,
+        140 => 137,
         138 => 138,
-        140 => 140,
+        139 => 139,
         141 => 141,
-        142 => 142,
         143 => 143,
         144 => 144,
         145 => 145,
@@ -2128,13 +3251,13 @@ static public $yy_action = array(
         152 => 152,
         153 => 153,
         154 => 154,
+        155 => 155,
+        156 => 156,
         157 => 157,
-        158 => 158,
         160 => 160,
         161 => 161,
-        168 => 168,
-        169 => 169,
-        170 => 170,
+        163 => 163,
+        164 => 164,
         171 => 171,
         172 => 172,
         173 => 173,
@@ -2147,946 +3270,1119 @@ static public $yy_action = array(
         180 => 180,
         181 => 181,
         182 => 182,
+        183 => 183,
         184 => 184,
-        186 => 186,
+        185 => 185,
         187 => 187,
         189 => 189,
         190 => 190,
-        191 => 191,
         192 => 192,
         193 => 193,
-        194 => 193,
-        196 => 193,
+        194 => 194,
         195 => 195,
-        197 => 197,
+        196 => 196,
+        197 => 196,
+        199 => 196,
         198 => 198,
-        199 => 199,
+        200 => 200,
+        201 => 201,
+        202 => 202,
     );
-#line 95 "smarty_internal_templateparser.y"
-    function yy_r0(){
-    $this->_retvalue = $this->root_buffer->to_smarty_php();
-    }
-#line 2165 "smarty_internal_templateparser.php"
-#line 103 "smarty_internal_templateparser.y"
-    function yy_r1(){
-    $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2170 "smarty_internal_templateparser.php"
-#line 119 "smarty_internal_templateparser.y"
-    function yy_r4(){
-    if ($this->compiler->has_code) {
-        $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array();
-        $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor,true));
-    } else {
-        $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);
-    }
-    $this->compiler->has_variable_string = false;
-    $this->block_nesting_level = count($this->compiler->_tag_stack);
-    }
-#line 2182 "smarty_internal_templateparser.php"
-#line 131 "smarty_internal_templateparser.y"
-    function yy_r5(){
-    $this->_retvalue = new _smarty_tag($this, '');
-    }
-#line 2187 "smarty_internal_templateparser.php"
-#line 136 "smarty_internal_templateparser.y"
-    function yy_r6(){
-    $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2192 "smarty_internal_templateparser.php"
-#line 141 "smarty_internal_templateparser.y"
-    function yy_r7(){
-    if ($this->php_handling == Smarty::PHP_PASSTHRU) {
-        $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
-    } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
-        $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
-    } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
-        if (!($this->smarty instanceof SmartyBC)) {
-            $this->compiler->trigger_template_error (self::Err3);
+
+    #line 96 "smarty_internal_templateparser.y"
+    function yy_r0()
+    {
+        $this->_retvalue = $this->root_buffer->to_smarty_php();
+    }
+    #line 2146 "smarty_internal_templateparser.php"
+    #line 104 "smarty_internal_templateparser.y"
+    function yy_r1()
+    {
+        if ($this->yystack[$this->yyidx + 0]->minor != null) {
+            $this->current_buffer->append_subtree($this->yystack[$this->yyidx + 0]->minor);
+        }
+    }
+    #line 2153 "smarty_internal_templateparser.php"
+    #line 124 "smarty_internal_templateparser.y"
+    function yy_r4()
+    {
+        if ($this->compiler->has_code) {
+            $tmp = '';
+            foreach ($this->compiler->prefix_code as $code) {
+                $tmp .= $code;
+            }
+            $this->compiler->prefix_code = array();
+            $this->_retvalue = new _smarty_tag($this, $this->compiler->processNocacheCode($tmp . $this->yystack[$this->yyidx + - 1]->minor, true));
+        } else {
+            $this->_retvalue = null;
+        }
+        $this->compiler->has_variable_string = false;
+        $this->block_nesting_level = count($this->compiler->_tag_stack);
+    }
+    #line 2165 "smarty_internal_templateparser.php"
+    #line 136 "smarty_internal_templateparser.y"
+    function yy_r5()
+    {
+        $this->_retvalue = null;
+    }
+    #line 2170 "smarty_internal_templateparser.php"
+    #line 141 "smarty_internal_templateparser.y"
+    function yy_r6()
+    {
+        $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2175 "smarty_internal_templateparser.php"
+    #line 146 "smarty_internal_templateparser.y"
+    function yy_r7()
+    {
+        if ($this->php_handling == Smarty::PHP_PASSTHRU) {
+            $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
+        } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+            $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
+        } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+            if (!($this->smarty instanceof SmartyBC)) {
+                $this->compiler->trigger_template_error(self::Err3);
+            }
+            $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<?php', true));
+        } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+            $this->_retvalue = null;
+        }
+    }
+    #line 2191 "smarty_internal_templateparser.php"
+    #line 162 "smarty_internal_templateparser.y"
+    function yy_r8()
+    {
+        if ($this->is_xml) {
+            $this->compiler->tag_nocache = true;
+            $this->is_xml = false;
+            $save = $this->template->has_nocache_code;
+            $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '?>';?>\n", $this->compiler, true));
+            $this->template->has_nocache_code = $save;
+        } elseif ($this->php_handling == Smarty::PHP_PASSTHRU) {
+            $this->_retvalue = new _smarty_text($this, '?<?php ?>>');
+        } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+            $this->_retvalue = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES));
+        } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+            $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('?>', true));
+        } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+            $this->_retvalue = null;
+        }
+    }
+    #line 2210 "smarty_internal_templateparser.php"
+    #line 181 "smarty_internal_templateparser.y"
+    function yy_r9()
+    {
+        if ($this->php_handling == Smarty::PHP_PASSTHRU) {
+            $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+        } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+            $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
+        } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+            if ($this->asp_tags) {
+                if (!($this->smarty instanceof SmartyBC)) {
+                    $this->compiler->trigger_template_error(self::Err3);
+                }
+                $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<%', true));
+            } else {
+                $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+            }
+        } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+            if ($this->asp_tags) {
+                $this->_retvalue = null;
+            } else {
+                $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+            }
         }
-        $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<?php', true));
-    } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
-        $this->_retvalue = new _smarty_text($this, '');
     }
+    #line 2234 "smarty_internal_templateparser.php"
+    #line 205 "smarty_internal_templateparser.y"
+    function yy_r10()
+    {
+        if ($this->php_handling == Smarty::PHP_PASSTHRU) {
+            $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+        } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
+            $this->_retvalue = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES));
+        } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
+            if ($this->asp_tags) {
+                $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('%>', true));
+            } else {
+                $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+            }
+        } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
+            if ($this->asp_tags) {
+                $this->_retvalue = null;
+            } else {
+                $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+            }
+        }
     }
-#line 2208 "smarty_internal_templateparser.php"
-#line 157 "smarty_internal_templateparser.y"
-    function yy_r8(){
-    if ($this->is_xml) {
+    #line 2255 "smarty_internal_templateparser.php"
+    #line 225 "smarty_internal_templateparser.y"
+    function yy_r11()
+    {
+        if ($this->strip) {
+            $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)));
+        } else {
+            $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
+        }
+    }
+    #line 2264 "smarty_internal_templateparser.php"
+    #line 234 "smarty_internal_templateparser.y"
+    function yy_r12()
+    {
         $this->compiler->tag_nocache = true;
-        $this->is_xml = false;
+        $this->is_xml = true;
         $save = $this->template->has_nocache_code;
-        $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '?>';?>\n", $this->compiler, true));
+        $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true));
         $this->template->has_nocache_code = $save;
-    } elseif ($this->php_handling == Smarty::PHP_PASSTHRU) {
-        $this->_retvalue = new _smarty_text($this, '?<?php ?>>');
-    } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
-        $this->_retvalue = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES));
-    } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
-        $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('?>', true));
-    } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
-        $this->_retvalue = new _smarty_text($this, '');
-    }
-    }
-#line 2227 "smarty_internal_templateparser.php"
-#line 176 "smarty_internal_templateparser.y"
-    function yy_r9(){
-    if ($this->php_handling == Smarty::PHP_PASSTHRU) {
-        $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
-    } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
-        $this->_retvalue = new _smarty_text($this, htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES));
-    } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
-        if ($this->asp_tags) {
-            if (!($this->smarty instanceof SmartyBC)) {
-                $this->compiler->trigger_template_error (self::Err3);
-            }
-            $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('<%', true));
+    }
+    #line 2273 "smarty_internal_templateparser.php"
+    #line 243 "smarty_internal_templateparser.y"
+    function yy_r13()
+    {
+        if ($this->strip) {
+            $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor));
         } else {
-            $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+            $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
         }
-    } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
-        if ($this->asp_tags) {
-            $this->_retvalue = new _smarty_text($this, '');
+    }
+    #line 2282 "smarty_internal_templateparser.php"
+    #line 252 "smarty_internal_templateparser.y"
+    function yy_r14()
+    {
+        $this->strip = true;
+    }
+    #line 2287 "smarty_internal_templateparser.php"
+    #line 256 "smarty_internal_templateparser.y"
+    function yy_r15()
+    {
+        $this->strip = false;
+    }
+    #line 2292 "smarty_internal_templateparser.php"
+    #line 260 "smarty_internal_templateparser.y"
+    function yy_r16()
+    {
+        if ($this->strip) {
+            SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor));
         } else {
-            $this->_retvalue = new _smarty_text($this, '<<?php ?>%');
+            SMARTY_INTERNAL_COMPILE_BLOCK::blockSource($this->compiler, $this->yystack[$this->yyidx + 0]->minor);
         }
     }
+    #line 2301 "smarty_internal_templateparser.php"
+    #line 269 "smarty_internal_templateparser.y"
+    function yy_r17()
+    {
+        $this->_retvalue = '';
+    }
+    #line 2306 "smarty_internal_templateparser.php"
+    #line 273 "smarty_internal_templateparser.y"
+    function yy_r18()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
     }
-#line 2251 "smarty_internal_templateparser.php"
-#line 200 "smarty_internal_templateparser.y"
-    function yy_r10(){
-    if ($this->php_handling == Smarty::PHP_PASSTHRU) {
-        $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
-    } elseif ($this->php_handling == Smarty::PHP_QUOTE) {
-        $this->_retvalue = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES));
-    } elseif ($this->php_handling == Smarty::PHP_ALLOW) {
-        if ($this->asp_tags) {
-            $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode('%>', true));
+    #line 2311 "smarty_internal_templateparser.php"
+    #line 277 "smarty_internal_templateparser.y"
+    function yy_r19()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2316 "smarty_internal_templateparser.php"
+    #line 285 "smarty_internal_templateparser.y"
+    function yy_r21()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2321 "smarty_internal_templateparser.php"
+    #line 293 "smarty_internal_templateparser.y"
+    function yy_r23()
+    {
+        $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2326 "smarty_internal_templateparser.php"
+    #line 301 "smarty_internal_templateparser.y"
+    function yy_r25()
+    {
+        $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2331 "smarty_internal_templateparser.php"
+    #line 305 "smarty_internal_templateparser.y"
+    function yy_r26()
+    {
+        $this->_retvalue = '<<?php ?>%';
+    }
+    #line 2336 "smarty_internal_templateparser.php"
+    #line 309 "smarty_internal_templateparser.y"
+    function yy_r27()
+    {
+        $this->_retvalue = '%<?php ?>>';
+    }
+    #line 2341 "smarty_internal_templateparser.php"
+    #line 318 "smarty_internal_templateparser.y"
+    function yy_r28()
+    {
+        $this->_retvalue = $this->compiler->compileTag('private_print_expression', array(), array('value' => $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2346 "smarty_internal_templateparser.php"
+    #line 322 "smarty_internal_templateparser.y"
+    function yy_r29()
+    {
+        $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 2]->minor, 'modifierlist' => $this->yystack[$this->yyidx + - 1]->minor));
+    }
+    #line 2351 "smarty_internal_templateparser.php"
+    #line 326 "smarty_internal_templateparser.y"
+    function yy_r30()
+    {
+        $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 1]->minor));
+    }
+    #line 2356 "smarty_internal_templateparser.php"
+    #line 330 "smarty_internal_templateparser.y"
+    function yy_r31()
+    {
+        $this->_retvalue = $this->compiler->compileTag('private_print_expression', $this->yystack[$this->yyidx + 0]->minor, array('value' => $this->yystack[$this->yyidx + - 2]->minor, 'modifierlist' => $this->yystack[$this->yyidx + - 1]->minor));
+    }
+    #line 2361 "smarty_internal_templateparser.php"
+    #line 343 "smarty_internal_templateparser.y"
+    function yy_r33()
+    {
+        $this->_retvalue = $this->compiler->compileTag('assign', array(array('value' => $this->yystack[$this->yyidx + 0]->minor), array('var' => "'" . $this->yystack[$this->yyidx + - 2]->minor . "'")));
+    }
+    #line 2366 "smarty_internal_templateparser.php"
+    #line 351 "smarty_internal_templateparser.y"
+    function yy_r35()
+    {
+        $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[$this->yyidx + - 1]->minor), array('var' => "'" . $this->yystack[$this->yyidx + - 3]->minor . "'")), $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2371 "smarty_internal_templateparser.php"
+    #line 355 "smarty_internal_templateparser.y"
+    function yy_r36()
+    {
+        $this->_retvalue = $this->compiler->compileTag('assign', array_merge(array(array('value' => $this->yystack[$this->yyidx + - 1]->minor), array('var' => $this->yystack[$this->yyidx + - 3]->minor['var'])), $this->yystack[$this->yyidx + 0]->minor), array('smarty_internal_index' => $this->yystack[$this->yyidx + - 3]->minor['smarty_internal_index']));
+    }
+    #line 2376 "smarty_internal_templateparser.php"
+    #line 360 "smarty_internal_templateparser.y"
+    function yy_r37()
+    {
+        $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2381 "smarty_internal_templateparser.php"
+    #line 364 "smarty_internal_templateparser.y"
+    function yy_r38()
+    {
+        $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor, array());
+    }
+    #line 2386 "smarty_internal_templateparser.php"
+    #line 369 "smarty_internal_templateparser.y"
+    function yy_r39()
+    {
+        $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 3]->minor, $this->yystack[$this->yyidx + 0]->minor, array('object_method' => $this->yystack[$this->yyidx + - 1]->minor));
+    }
+    #line 2391 "smarty_internal_templateparser.php"
+    #line 374 "smarty_internal_templateparser.y"
+    function yy_r40()
+    {
+        $this->_retvalue = '<?php ob_start();?>' . $this->compiler->compileTag($this->yystack[$this->yyidx + - 2]->minor, $this->yystack[$this->yyidx + 0]->minor) . '<?php echo ';
+        $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[$this->yyidx + - 1]->minor, 'value' => 'ob_get_clean()')) . '?>';
+    }
+    #line 2397 "smarty_internal_templateparser.php"
+    #line 380 "smarty_internal_templateparser.y"
+    function yy_r41()
+    {
+        $this->_retvalue = '<?php ob_start();?>' . $this->compiler->compileTag($this->yystack[$this->yyidx + - 4]->minor, $this->yystack[$this->yyidx + 0]->minor, array('object_method' => $this->yystack[$this->yyidx + - 2]->minor)) . '<?php echo ';
+        $this->_retvalue .= $this->compiler->compileTag('private_modifier', array(), array('modifierlist' => $this->yystack[$this->yyidx + - 1]->minor, 'value' => 'ob_get_clean()')) . '?>';
+    }
+    #line 2403 "smarty_internal_templateparser.php"
+    #line 386 "smarty_internal_templateparser.y"
+    function yy_r42()
+    {
+        $tag = trim(substr($this->yystack[$this->yyidx + - 1]->minor, $this->lex->ldel_length));
+        $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2409 "smarty_internal_templateparser.php"
+    #line 391 "smarty_internal_templateparser.y"
+    function yy_r43()
+    {
+        $tag = trim(substr($this->yystack[$this->yyidx + - 2]->minor, $this->lex->ldel_length));
+        $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, $this->yystack[$this->yyidx + 0]->minor, array('if condition' => $this->yystack[$this->yyidx + - 1]->minor));
+    }
+    #line 2415 "smarty_internal_templateparser.php"
+    #line 396 "smarty_internal_templateparser.y"
+    function yy_r44()
+    {
+        $tag = trim(substr($this->yystack[$this->yyidx + - 1]->minor, $this->lex->ldel_length));
+        $this->_retvalue = $this->compiler->compileTag(($tag == 'else if') ? 'elseif' : $tag, array(), array('if condition' => $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2421 "smarty_internal_templateparser.php"
+    #line 407 "smarty_internal_templateparser.y"
+    function yy_r46()
+    {
+        $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 9]->minor), array('ifexp' => $this->yystack[$this->yyidx + - 6]->minor), array('var' => $this->yystack[$this->yyidx + - 2]->minor), array('step' => $this->yystack[$this->yyidx + - 1]->minor))), 1);
+    }
+    #line 2426 "smarty_internal_templateparser.php"
+    #line 411 "smarty_internal_templateparser.y"
+    function yy_r47()
+    {
+        $this->_retvalue = '=' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2431 "smarty_internal_templateparser.php"
+    #line 419 "smarty_internal_templateparser.y"
+    function yy_r49()
+    {
+        $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 3]->minor), array('to' => $this->yystack[$this->yyidx + - 1]->minor))), 0);
+    }
+    #line 2436 "smarty_internal_templateparser.php"
+    #line 423 "smarty_internal_templateparser.y"
+    function yy_r50()
+    {
+        $this->_retvalue = $this->compiler->compileTag('for', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('start' => $this->yystack[$this->yyidx + - 5]->minor), array('to' => $this->yystack[$this->yyidx + - 3]->minor), array('step' => $this->yystack[$this->yyidx + - 1]->minor))), 0);
+    }
+    #line 2441 "smarty_internal_templateparser.php"
+    #line 428 "smarty_internal_templateparser.y"
+    function yy_r51()
+    {
+        $this->_retvalue = $this->compiler->compileTag('foreach', $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2446 "smarty_internal_templateparser.php"
+    #line 433 "smarty_internal_templateparser.y"
+    function yy_r52()
+    {
+        $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('from' => $this->yystack[$this->yyidx + - 4]->minor), array('item' => $this->yystack[$this->yyidx + - 1]->minor))));
+    }
+    #line 2451 "smarty_internal_templateparser.php"
+    #line 437 "smarty_internal_templateparser.y"
+    function yy_r53()
+    {
+        $this->_retvalue = $this->compiler->compileTag('foreach', array_merge($this->yystack[$this->yyidx + 0]->minor, array(array('from' => $this->yystack[$this->yyidx + - 7]->minor), array('item' => $this->yystack[$this->yyidx + - 1]->minor), array('key' => $this->yystack[$this->yyidx + - 4]->minor))));
+    }
+    #line 2456 "smarty_internal_templateparser.php"
+    #line 450 "smarty_internal_templateparser.y"
+    function yy_r56()
+    {
+        $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array(array_merge(array($this->yystack[$this->yyidx + - 1]->minor), $this->yystack[$this->yyidx + 0]->minor))));
+    }
+    #line 2461 "smarty_internal_templateparser.php"
+    #line 454 "smarty_internal_templateparser.y"
+    function yy_r57()
+    {
+        $this->_retvalue = $this->compiler->compileTag('setfilter', array(), array('modifier_list' => array_merge(array(array_merge(array($this->yystack[$this->yyidx + - 2]->minor), $this->yystack[$this->yyidx + - 1]->minor)), $this->yystack[$this->yyidx + 0]->minor)));
+    }
+    #line 2466 "smarty_internal_templateparser.php"
+    #line 459 "smarty_internal_templateparser.y"
+    function yy_r58()
+    {
+        $j = strrpos($this->yystack[$this->yyidx + 0]->minor, '.');
+        if ($this->yystack[$this->yyidx + 0]->minor[$j + 1] == 'c') {
+            // {$smarty.block.child}
+            $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler);
         } else {
-            $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+            // {$smarty.block.parent}
+            $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileParentBlock($this->compiler);
         }
-    } elseif ($this->php_handling == Smarty::PHP_REMOVE) {
-        if ($this->asp_tags) {
-            $this->_retvalue = new _smarty_text($this, '');
+    }
+    #line 2478 "smarty_internal_templateparser.php"
+    #line 472 "smarty_internal_templateparser.y"
+    function yy_r59()
+    {
+        $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor . 'close', array());
+    }
+    #line 2483 "smarty_internal_templateparser.php"
+    #line 476 "smarty_internal_templateparser.y"
+    function yy_r60()
+    {
+        $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 1]->minor . 'close', array(), array('modifier_list' => $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2488 "smarty_internal_templateparser.php"
+    #line 481 "smarty_internal_templateparser.y"
+    function yy_r61()
+    {
+        $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 2]->minor . 'close', array(), array('object_method' => $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2493 "smarty_internal_templateparser.php"
+    #line 485 "smarty_internal_templateparser.y"
+    function yy_r62()
+    {
+        $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + - 3]->minor . 'close', array(), array('object_method' => $this->yystack[$this->yyidx + - 1]->minor, 'modifier_list' => $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2498 "smarty_internal_templateparser.php"
+    #line 493 "smarty_internal_templateparser.y"
+    function yy_r63()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
+        $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2504 "smarty_internal_templateparser.php"
+    #line 499 "smarty_internal_templateparser.y"
+    function yy_r64()
+    {
+        $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2509 "smarty_internal_templateparser.php"
+    #line 504 "smarty_internal_templateparser.y"
+    function yy_r65()
+    {
+        $this->_retvalue = array();
+    }
+    #line 2514 "smarty_internal_templateparser.php"
+    #line 509 "smarty_internal_templateparser.y"
+    function yy_r66()
+    {
+        if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+            $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'true');
+        } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+            $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'false');
+        } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+            $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => 'null');
         } else {
-            $this->_retvalue = new _smarty_text($this, '%<?php ?>>');
+            $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => "'" . $this->yystack[$this->yyidx + 0]->minor . "'");
         }
     }
+    #line 2527 "smarty_internal_templateparser.php"
+    #line 521 "smarty_internal_templateparser.y"
+    function yy_r67()
+    {
+        $this->_retvalue = array(trim($this->yystack[$this->yyidx + - 1]->minor, " =\n\r\t") => $this->yystack[$this->yyidx + 0]->minor);
     }
-#line 2272 "smarty_internal_templateparser.php"
-#line 220 "smarty_internal_templateparser.y"
-    function yy_r11(){
-    if ($this->strip) {
-        $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor)));
-    } else {
-        $this->_retvalue = new _smarty_text($this, self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));
-    }
-    }
-#line 2281 "smarty_internal_templateparser.php"
-#line 229 "smarty_internal_templateparser.y"
-    function yy_r12(){
-    $this->compiler->tag_nocache = true;
-    $this->is_xml = true;
-    $save = $this->template->has_nocache_code;
-    $this->_retvalue = new _smarty_text($this, $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true));
-    $this->template->has_nocache_code = $save;
-    }
-#line 2290 "smarty_internal_templateparser.php"
-#line 238 "smarty_internal_templateparser.y"
-    function yy_r13(){
-    if ($this->strip) {
-        $this->_retvalue = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor));
-    } else {
-        $this->_retvalue = new _smarty_text($this, $this->yystack[$this->yyidx + 0]->minor);
+    #line 2532 "smarty_internal_templateparser.php"
+    #line 529 "smarty_internal_templateparser.y"
+    function yy_r69()
+    {
+        $this->_retvalue = "'" . $this->yystack[$this->yyidx + 0]->minor . "'";
+    }
+    #line 2537 "smarty_internal_templateparser.php"
+    #line 541 "smarty_internal_templateparser.y"
+    function yy_r72()
+    {
+        $this->_retvalue = array($this->yystack[$this->yyidx + - 2]->minor => $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2542 "smarty_internal_templateparser.php"
+    #line 554 "smarty_internal_templateparser.y"
+    function yy_r74()
+    {
+        $this->yystack[$this->yyidx + - 2]->minor[] = $this->yystack[$this->yyidx + 0]->minor;
+        $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor;
+    }
+    #line 2548 "smarty_internal_templateparser.php"
+    #line 559 "smarty_internal_templateparser.y"
+    function yy_r75()
+    {
+        $this->_retvalue = array('var' => $this->yystack[$this->yyidx + - 2]->minor, 'value' => $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2553 "smarty_internal_templateparser.php"
+    #line 587 "smarty_internal_templateparser.y"
+    function yy_r80()
+    {
+        $this->_retvalue = '$_smarty_tpl->getStreamVariable(\'' . $this->yystack[$this->yyidx + - 2]->minor . '://' . $this->yystack[$this->yyidx + 0]->minor . '\')';
+    }
+    #line 2558 "smarty_internal_templateparser.php"
+    #line 592 "smarty_internal_templateparser.y"
+    function yy_r81()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . trim($this->yystack[$this->yyidx + - 1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2563 "smarty_internal_templateparser.php"
+    #line 611 "smarty_internal_templateparser.y"
+    function yy_r85()
+    {
+        $this->_retvalue = $this->compiler->compileTag('private_modifier', array(), array('value' => $this->yystack[$this->yyidx + - 1]->minor, 'modifierlist' => $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2568 "smarty_internal_templateparser.php"
+    #line 617 "smarty_internal_templateparser.y"
+    function yy_r86()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2573 "smarty_internal_templateparser.php"
+    #line 621 "smarty_internal_templateparser.y"
+    function yy_r87()
+    {
+        $this->_retvalue = 'in_array(' . $this->yystack[$this->yyidx + - 2]->minor . ',' . $this->yystack[$this->yyidx + 0]->minor . ')';
     }
+    #line 2578 "smarty_internal_templateparser.php"
+    #line 625 "smarty_internal_templateparser.y"
+    function yy_r88()
+    {
+        $this->_retvalue = 'in_array(' . $this->yystack[$this->yyidx + - 2]->minor . ',(array)' . $this->yystack[$this->yyidx + 0]->minor . ')';
+    }
+    #line 2583 "smarty_internal_templateparser.php"
+    #line 633 "smarty_internal_templateparser.y"
+    function yy_r90()
+    {
+        $this->_retvalue = '!(' . $this->yystack[$this->yyidx + - 2]->minor . ' % ' . $this->yystack[$this->yyidx + 0]->minor . ')';
+    }
+    #line 2588 "smarty_internal_templateparser.php"
+    #line 637 "smarty_internal_templateparser.y"
+    function yy_r91()
+    {
+        $this->_retvalue = '(' . $this->yystack[$this->yyidx + - 2]->minor . ' % ' . $this->yystack[$this->yyidx + 0]->minor . ')';
+    }
+    #line 2593 "smarty_internal_templateparser.php"
+    #line 641 "smarty_internal_templateparser.y"
+    function yy_r92()
+    {
+        $this->_retvalue = '!(1 & ' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+    }
+    #line 2598 "smarty_internal_templateparser.php"
+    #line 645 "smarty_internal_templateparser.y"
+    function yy_r93()
+    {
+        $this->_retvalue = '(1 & ' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+    }
+    #line 2603 "smarty_internal_templateparser.php"
+    #line 649 "smarty_internal_templateparser.y"
+    function yy_r94()
+    {
+        $this->_retvalue = '!(1 & ' . $this->yystack[$this->yyidx + - 2]->minor . ' / ' . $this->yystack[$this->yyidx + 0]->minor . ')';
+    }
+    #line 2608 "smarty_internal_templateparser.php"
+    #line 653 "smarty_internal_templateparser.y"
+    function yy_r95()
+    {
+        $this->_retvalue = '(1 & ' . $this->yystack[$this->yyidx + - 2]->minor . ' / ' . $this->yystack[$this->yyidx + 0]->minor . ')';
+    }
+    #line 2613 "smarty_internal_templateparser.php"
+    #line 677 "smarty_internal_templateparser.y"
+    function yy_r101()
+    {
+        self::$prefix_number ++;
+        $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . $this->yystack[$this->yyidx + 0]->minor . ';?>';
+        $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . '$_tmp' . self::$prefix_number;
+    }
+    #line 2620 "smarty_internal_templateparser.php"
+    #line 686 "smarty_internal_templateparser.y"
+    function yy_r102()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 6]->minor . ' ? ' . $this->compileVariable("'" . $this->yystack[$this->yyidx + - 2]->minor . "'") . ' : ' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2625 "smarty_internal_templateparser.php"
+    #line 690 "smarty_internal_templateparser.y"
+    function yy_r103()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 5]->minor . ' ? ' . $this->yystack[$this->yyidx + - 2]->minor . ' : ' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2630 "smarty_internal_templateparser.php"
+    #line 705 "smarty_internal_templateparser.y"
+    function yy_r106()
+    {
+        $this->_retvalue = '!' . $this->yystack[$this->yyidx + 0]->minor;
     }
-#line 2299 "smarty_internal_templateparser.php"
-#line 247 "smarty_internal_templateparser.y"
-    function yy_r14(){
-    $this->strip = true;
-    $this->_retvalue = new _smarty_text($this, '');
-    }
-#line 2305 "smarty_internal_templateparser.php"
-#line 252 "smarty_internal_templateparser.y"
-    function yy_r15(){
-    $this->strip = false;
-    $this->_retvalue = new _smarty_text($this, '');
-    }
-#line 2311 "smarty_internal_templateparser.php"
-#line 258 "smarty_internal_templateparser.y"
-    function yy_r16(){
-    $this->_retvalue = '';
-    }
-#line 2316 "smarty_internal_templateparser.php"
-#line 262 "smarty_internal_templateparser.y"
-    function yy_r17(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
-    }
-#line 2321 "smarty_internal_templateparser.php"
-#line 266 "smarty_internal_templateparser.y"
-    function yy_r18(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2326 "smarty_internal_templateparser.php"
-#line 274 "smarty_internal_templateparser.y"
-    function yy_r20(){
-    $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2331 "smarty_internal_templateparser.php"
-#line 282 "smarty_internal_templateparser.y"
-    function yy_r22(){
-    $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2336 "smarty_internal_templateparser.php"
-#line 290 "smarty_internal_templateparser.y"
-    function yy_r24(){
-    $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2341 "smarty_internal_templateparser.php"
-#line 294 "smarty_internal_templateparser.y"
-    function yy_r25(){
-    $this->_retvalue = '<<?php ?>%';
-    }
-#line 2346 "smarty_internal_templateparser.php"
-#line 298 "smarty_internal_templateparser.y"
-    function yy_r26(){
-    $this->_retvalue = '%<?php ?>>';
-    }
-#line 2351 "smarty_internal_templateparser.php"
-#line 307 "smarty_internal_templateparser.y"
-    function yy_r27(){
-    $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor));
-    }
-#line 2356 "smarty_internal_templateparser.php"
-#line 311 "smarty_internal_templateparser.y"
-    function yy_r28(){
-    $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor, 'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor));
-    }
-#line 2361 "smarty_internal_templateparser.php"
-#line 315 "smarty_internal_templateparser.y"
-    function yy_r29(){
-    $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor));
-    }
-#line 2366 "smarty_internal_templateparser.php"
-#line 319 "smarty_internal_templateparser.y"
-    function yy_r30(){
-    $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + -1]->minor,array('value'=>$this->yystack[$this->yyidx + -3]->minor,'modifierlist'=>$this->yystack[$this->yyidx + -2]->minor));
-    }
-#line 2371 "smarty_internal_templateparser.php"
-#line 332 "smarty_internal_templateparser.y"
-    function yy_r32(){
-    $this->_retvalue = $this->compiler->compileTag('assign',array(array('value'=>$this->yystack[$this->yyidx + -1]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'")));
-    }
-#line 2376 "smarty_internal_templateparser.php"
-#line 340 "smarty_internal_templateparser.y"
-    function yy_r34(){
-    $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'")),$this->yystack[$this->yyidx + -1]->minor));
-    }
-#line 2381 "smarty_internal_templateparser.php"
-#line 344 "smarty_internal_templateparser.y"
-    function yy_r35(){
-    $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + -2]->minor),array('var'=>$this->yystack[$this->yyidx + -4]->minor['var'])),$this->yystack[$this->yyidx + -1]->minor),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -4]->minor['smarty_internal_index']));
-    }
-#line 2386 "smarty_internal_templateparser.php"
-#line 349 "smarty_internal_templateparser.y"
-    function yy_r36(){
-    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor);
-    }
-#line 2391 "smarty_internal_templateparser.php"
-#line 353 "smarty_internal_templateparser.y"
-    function yy_r37(){
-    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array());
-    }
-#line 2396 "smarty_internal_templateparser.php"
-#line 358 "smarty_internal_templateparser.y"
-    function yy_r38(){
-    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor));
-    }
-#line 2401 "smarty_internal_templateparser.php"
-#line 363 "smarty_internal_templateparser.y"
-    function yy_r39(){
-    $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';
-    $this->_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>';
-    }
-#line 2407 "smarty_internal_templateparser.php"
-#line 369 "smarty_internal_templateparser.y"
-    function yy_r40(){
-    $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -5]->minor,$this->yystack[$this->yyidx + -1]->minor,array('object_methode'=>$this->yystack[$this->yyidx + -3]->minor)).'<?php echo ';
-    $this->_retvalue .= $this->compiler->compileTag('private_modifier',array(),array('modifierlist'=>$this->yystack[$this->yyidx + -2]->minor,'value'=>'ob_get_clean()')).'?>';
-    }
-#line 2413 "smarty_internal_templateparser.php"
-#line 375 "smarty_internal_templateparser.y"
-    function yy_r41(){
-    $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->lex->ldel_length));
-    $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
-    }
-#line 2419 "smarty_internal_templateparser.php"
-#line 380 "smarty_internal_templateparser.y"
-    function yy_r42(){
-    $tag = trim(substr($this->yystack[$this->yyidx + -3]->minor,$this->lex->ldel_length));
-    $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + -1]->minor,array('if condition'=>$this->yystack[$this->yyidx + -2]->minor));
-    }
-#line 2425 "smarty_internal_templateparser.php"
-#line 385 "smarty_internal_templateparser.y"
-    function yy_r43(){
-    $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->lex->ldel_length));
-    $this->_retvalue = $this->compiler->compileTag(($tag == 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
-    }
-#line 2431 "smarty_internal_templateparser.php"
-#line 396 "smarty_internal_templateparser.y"
-    function yy_r45(){
-    $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -10]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -7]->minor),array('var'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),1);
-    }
-#line 2436 "smarty_internal_templateparser.php"
-#line 400 "smarty_internal_templateparser.y"
-    function yy_r46(){
-    $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2441 "smarty_internal_templateparser.php"
-#line 408 "smarty_internal_templateparser.y"
-    function yy_r48(){
-    $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -4]->minor),array('to'=>$this->yystack[$this->yyidx + -2]->minor))),0);
-    }
-#line 2446 "smarty_internal_templateparser.php"
-#line 412 "smarty_internal_templateparser.y"
-    function yy_r49(){
-    $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('to'=>$this->yystack[$this->yyidx + -4]->minor),array('step'=>$this->yystack[$this->yyidx + -2]->minor))),0);
-    }
-#line 2451 "smarty_internal_templateparser.php"
-#line 417 "smarty_internal_templateparser.y"
-    function yy_r50(){
-    $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + -1]->minor);
-    }
-#line 2456 "smarty_internal_templateparser.php"
-#line 422 "smarty_internal_templateparser.y"
-    function yy_r51(){
-    $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor))));
-    }
-#line 2461 "smarty_internal_templateparser.php"
-#line 426 "smarty_internal_templateparser.y"
-    function yy_r52(){
-    $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor))));
-    }
-#line 2466 "smarty_internal_templateparser.php"
-#line 430 "smarty_internal_templateparser.y"
-    function yy_r53(){
-    $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor))));
-    }
-#line 2471 "smarty_internal_templateparser.php"
-#line 434 "smarty_internal_templateparser.y"
-    function yy_r54(){
-    $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + -1]->minor,array(array('from'=>$this->yystack[$this->yyidx + -8]->minor),array('item'=>$this->yystack[$this->yyidx + -2]->minor),array('key'=>$this->yystack[$this->yyidx + -5]->minor))));
-    }
-#line 2476 "smarty_internal_templateparser.php"
-#line 439 "smarty_internal_templateparser.y"
-    function yy_r55(){
-    $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor))));
-    }
-#line 2481 "smarty_internal_templateparser.php"
-#line 443 "smarty_internal_templateparser.y"
-    function yy_r56(){
-    $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -3]->minor),$this->yystack[$this->yyidx + -2]->minor)),$this->yystack[$this->yyidx + -1]->minor)));
-    }
-#line 2486 "smarty_internal_templateparser.php"
-#line 448 "smarty_internal_templateparser.y"
-    function yy_r57(){
-    $this->_retvalue = SMARTY_INTERNAL_COMPILE_BLOCK::compileChildBlock($this->compiler);
-    }
-#line 2491 "smarty_internal_templateparser.php"
-#line 454 "smarty_internal_templateparser.y"
-    function yy_r58(){
-    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array());
-    }
-#line 2496 "smarty_internal_templateparser.php"
-#line 458 "smarty_internal_templateparser.y"
-    function yy_r59(){
-    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + -1]->minor));
-    }
-#line 2501 "smarty_internal_templateparser.php"
-#line 463 "smarty_internal_templateparser.y"
-    function yy_r60(){
-    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor));
-    }
-#line 2506 "smarty_internal_templateparser.php"
-#line 467 "smarty_internal_templateparser.y"
-    function yy_r61(){
-    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',array(),array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + -1]->minor));
-    }
-#line 2511 "smarty_internal_templateparser.php"
-#line 475 "smarty_internal_templateparser.y"
-    function yy_r62(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
-    $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2517 "smarty_internal_templateparser.php"
-#line 481 "smarty_internal_templateparser.y"
-    function yy_r63(){
-    $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2522 "smarty_internal_templateparser.php"
-#line 486 "smarty_internal_templateparser.y"
-    function yy_r64(){
-    $this->_retvalue = array();
-    }
-#line 2527 "smarty_internal_templateparser.php"
-#line 491 "smarty_internal_templateparser.y"
-    function yy_r65(){
-    if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
-        $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'true');
-    } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
-        $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'false');
-    } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
-        $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'null');
-    } else {
-        $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'");
-    }
-    }
-#line 2540 "smarty_internal_templateparser.php"
-#line 503 "smarty_internal_templateparser.y"
-    function yy_r66(){
-    $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2545 "smarty_internal_templateparser.php"
-#line 511 "smarty_internal_templateparser.y"
-    function yy_r68(){
-    $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";
-    }
-#line 2550 "smarty_internal_templateparser.php"
-#line 523 "smarty_internal_templateparser.y"
-    function yy_r71(){
-    $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2555 "smarty_internal_templateparser.php"
-#line 536 "smarty_internal_templateparser.y"
-    function yy_r73(){
-    $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor;
-    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
-    }
-#line 2561 "smarty_internal_templateparser.php"
-#line 541 "smarty_internal_templateparser.y"
-    function yy_r74(){
-    $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2566 "smarty_internal_templateparser.php"
-#line 569 "smarty_internal_templateparser.y"
-    function yy_r79(){
-    $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')';
-    }
-#line 2571 "smarty_internal_templateparser.php"
-#line 574 "smarty_internal_templateparser.y"
-    function yy_r80(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2576 "smarty_internal_templateparser.php"
-#line 593 "smarty_internal_templateparser.y"
-    function yy_r84(){
-    $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor));
-    }
-#line 2581 "smarty_internal_templateparser.php"
-#line 599 "smarty_internal_templateparser.y"
-    function yy_r85(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2586 "smarty_internal_templateparser.php"
-#line 603 "smarty_internal_templateparser.y"
-    function yy_r86(){
-    $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';
-    }
-#line 2591 "smarty_internal_templateparser.php"
-#line 607 "smarty_internal_templateparser.y"
-    function yy_r87(){
-    $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';
-    }
-#line 2596 "smarty_internal_templateparser.php"
-#line 615 "smarty_internal_templateparser.y"
-    function yy_r89(){
-    $this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';
-    }
-#line 2601 "smarty_internal_templateparser.php"
-#line 619 "smarty_internal_templateparser.y"
-    function yy_r90(){
-    $this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';
-    }
-#line 2606 "smarty_internal_templateparser.php"
-#line 623 "smarty_internal_templateparser.y"
-    function yy_r91(){
-    $this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';
-    }
-#line 2611 "smarty_internal_templateparser.php"
-#line 627 "smarty_internal_templateparser.y"
-    function yy_r92(){
-    $this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';
-    }
-#line 2616 "smarty_internal_templateparser.php"
-#line 631 "smarty_internal_templateparser.y"
-    function yy_r93(){
-    $this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';
-    }
-#line 2621 "smarty_internal_templateparser.php"
-#line 635 "smarty_internal_templateparser.y"
-    function yy_r94(){
-    $this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';
-    }
-#line 2626 "smarty_internal_templateparser.php"
-#line 659 "smarty_internal_templateparser.y"
-    function yy_r100(){
-    $this->prefix_number++;
-    $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->yystack[$this->yyidx + 0]->minor.';?>';
-    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'$_tmp'.$this->prefix_number;
-    }
-#line 2633 "smarty_internal_templateparser.php"
-#line 668 "smarty_internal_templateparser.y"
-    function yy_r101(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -6]->minor.' ? '. $this->compileVariable("'".$this->yystack[$this->yyidx + -2]->minor."'") . ' : '.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2638 "smarty_internal_templateparser.php"
-#line 672 "smarty_internal_templateparser.y"
-    function yy_r102(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2643 "smarty_internal_templateparser.php"
-#line 687 "smarty_internal_templateparser.y"
-    function yy_r105(){
-    $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2648 "smarty_internal_templateparser.php"
-#line 708 "smarty_internal_templateparser.y"
-    function yy_r110(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2653 "smarty_internal_templateparser.php"
-#line 712 "smarty_internal_templateparser.y"
-    function yy_r111(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';
-    }
-#line 2658 "smarty_internal_templateparser.php"
-#line 716 "smarty_internal_templateparser.y"
-    function yy_r112(){
-    $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2663 "smarty_internal_templateparser.php"
-#line 721 "smarty_internal_templateparser.y"
-    function yy_r113(){
-    if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
-        $this->_retvalue = 'true';
-    } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
-        $this->_retvalue = 'false';
-    } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
-        $this->_retvalue = 'null';
-    } else {
-        $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";
-    }
-    }
-#line 2676 "smarty_internal_templateparser.php"
-#line 739 "smarty_internal_templateparser.y"
-    function yy_r115(){
-    $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")";
-    }
-#line 2681 "smarty_internal_templateparser.php"
-#line 754 "smarty_internal_templateparser.y"
-    function yy_r118(){
-    if (!$this->security || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor]) || $this->smarty->security_policy->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) {
-        if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) {
-            $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor;
+    #line 2635 "smarty_internal_templateparser.php"
+    #line 726 "smarty_internal_templateparser.y"
+    function yy_r111()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '.' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2640 "smarty_internal_templateparser.php"
+    #line 730 "smarty_internal_templateparser.y"
+    function yy_r112()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . '.';
+    }
+    #line 2645 "smarty_internal_templateparser.php"
+    #line 734 "smarty_internal_templateparser.y"
+    function yy_r113()
+    {
+        $this->_retvalue = '.' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2650 "smarty_internal_templateparser.php"
+    #line 739 "smarty_internal_templateparser.y"
+    function yy_r114()
+    {
+        if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+            $this->_retvalue = 'true';
+        } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+            $this->_retvalue = 'false';
+        } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {
+            $this->_retvalue = 'null';
         } else {
-            $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor;
+            $this->_retvalue = "'" . $this->yystack[$this->yyidx + 0]->minor . "'";
         }
-    } else {
-        $this->compiler->trigger_template_error ("static class '".$this->yystack[$this->yyidx + -2]->minor."' is undefined or not allowed by security setting");
-    }
-    }
-#line 2694 "smarty_internal_templateparser.php"
-#line 766 "smarty_internal_templateparser.y"
-    function yy_r119(){
-    if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') {
-        $this->_retvalue =  $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).'::'.$this->yystack[$this->yyidx + 0]->minor;
-    } else {
-        $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']).$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].'::'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-    }
-#line 2703 "smarty_internal_templateparser.php"
-#line 775 "smarty_internal_templateparser.y"
-    function yy_r120(){
-    $this->prefix_number++;
-    $this->compiler->prefix_code[] = '<?php ob_start();?>'.$this->yystack[$this->yyidx + 0]->minor.'<?php $_tmp'.$this->prefix_number.'=ob_get_clean();?>';
-    $this->_retvalue = '$_tmp'.$this->prefix_number;
-    }
-#line 2710 "smarty_internal_templateparser.php"
-#line 790 "smarty_internal_templateparser.y"
-    function yy_r122(){
-    if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') {
-        $smarty_var = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
-        $this->_retvalue = $smarty_var;
-    } else {
-        // used for array reset,next,prev,end,current
-        $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
-        $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
-        $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']).$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
-    }
-    }
-#line 2723 "smarty_internal_templateparser.php"
-#line 803 "smarty_internal_templateparser.y"
-    function yy_r123(){
-    $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2728 "smarty_internal_templateparser.php"
-#line 813 "smarty_internal_templateparser.y"
-    function yy_r125(){
-    $this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')';
-    }
-#line 2733 "smarty_internal_templateparser.php"
-#line 817 "smarty_internal_templateparser.y"
-    function yy_r126(){
-    $this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')';
-    }
-#line 2738 "smarty_internal_templateparser.php"
-#line 821 "smarty_internal_templateparser.y"
-    function yy_r127(){
-    $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2743 "smarty_internal_templateparser.php"
-#line 834 "smarty_internal_templateparser.y"
-    function yy_r129(){
-    return;
-    }
-#line 2748 "smarty_internal_templateparser.php"
-#line 840 "smarty_internal_templateparser.y"
-    function yy_r130(){
-    $this->_retvalue = '['.$this->compileVariable($this->yystack[$this->yyidx + 0]->minor).']';
-    }
-#line 2753 "smarty_internal_templateparser.php"
-#line 844 "smarty_internal_templateparser.y"
-    function yy_r131(){
-    $this->_retvalue = '['.$this->compileVariable($this->yystack[$this->yyidx + -2]->minor).'->'.$this->yystack[$this->yyidx + 0]->minor.']';
-    }
-#line 2758 "smarty_internal_templateparser.php"
-#line 848 "smarty_internal_templateparser.y"
-    function yy_r132(){
-    $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";
-    }
-#line 2763 "smarty_internal_templateparser.php"
-#line 852 "smarty_internal_templateparser.y"
-    function yy_r133(){
-    $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]";
-    }
-#line 2768 "smarty_internal_templateparser.php"
-#line 856 "smarty_internal_templateparser.y"
-    function yy_r134(){
-    $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]";
-    }
-#line 2773 "smarty_internal_templateparser.php"
-#line 861 "smarty_internal_templateparser.y"
-    function yy_r135(){
-    $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';
-    }
-#line 2778 "smarty_internal_templateparser.php"
-#line 865 "smarty_internal_templateparser.y"
-    function yy_r136(){
-    $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';
-    }
-#line 2783 "smarty_internal_templateparser.php"
-#line 875 "smarty_internal_templateparser.y"
-    function yy_r138(){
-    $this->_retvalue = '[]';
-    }
-#line 2788 "smarty_internal_templateparser.php"
-#line 888 "smarty_internal_templateparser.y"
-    function yy_r140(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2793 "smarty_internal_templateparser.php"
-#line 893 "smarty_internal_templateparser.y"
-    function yy_r141(){
-    $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
-    }
-#line 2798 "smarty_internal_templateparser.php"
-#line 898 "smarty_internal_templateparser.y"
-    function yy_r142(){
-    $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';
-    }
-#line 2803 "smarty_internal_templateparser.php"
-#line 905 "smarty_internal_templateparser.y"
-    function yy_r143(){
-    if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') {
-        $this->_retvalue =  $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;
-    } else {
-        $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + -1]->minor['var']).$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor;
-    }
-    }
-#line 2812 "smarty_internal_templateparser.php"
-#line 914 "smarty_internal_templateparser.y"
-    function yy_r144(){
-    $this->_retvalue  = $this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2817 "smarty_internal_templateparser.php"
-#line 919 "smarty_internal_templateparser.y"
-    function yy_r145(){
-    $this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2822 "smarty_internal_templateparser.php"
-#line 924 "smarty_internal_templateparser.y"
-    function yy_r146(){
-    if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) == '_') {
-        $this->compiler->trigger_template_error (self::Err1);
-    }
-    $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2830 "smarty_internal_templateparser.php"
-#line 931 "smarty_internal_templateparser.y"
-    function yy_r147(){
-    if ($this->security) {
-        $this->compiler->trigger_template_error (self::Err2);
-    }
-    $this->_retvalue = '->{'.$this->compileVariable($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor.'}';
-    }
-#line 2838 "smarty_internal_templateparser.php"
-#line 938 "smarty_internal_templateparser.y"
-    function yy_r148(){
-    if ($this->security) {
-        $this->compiler->trigger_template_error (self::Err2);
-    }
-    $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
-    }
-#line 2846 "smarty_internal_templateparser.php"
-#line 945 "smarty_internal_templateparser.y"
-    function yy_r149(){
-    if ($this->security) {
-        $this->compiler->trigger_template_error (self::Err2);
-    }
-    $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
-    }
-#line 2854 "smarty_internal_templateparser.php"
-#line 953 "smarty_internal_templateparser.y"
-    function yy_r150(){
-    $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2859 "smarty_internal_templateparser.php"
-#line 961 "smarty_internal_templateparser.y"
-    function yy_r151(){
-    if (!$this->security || $this->smarty->security_policy->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) {
-        if (strcasecmp($this->yystack[$this->yyidx + -3]->minor,'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + -3]->minor,'array') === 0 || is_callable($this->yystack[$this->yyidx + -3]->minor)) {
-            $func_name = strtolower($this->yystack[$this->yyidx + -3]->minor);
-            if ($func_name == 'isset') {
-                if (count($this->yystack[$this->yyidx + -1]->minor) == 0) {
-                    $this->compiler->trigger_template_error ('Illegal number of paramer in "isset()"');
-                }
-                $par = implode(',',$this->yystack[$this->yyidx + -1]->minor);
-                if (strncasecmp($par,'$_smarty_tpl->getConfigVariable',strlen('$_smarty_tpl->getConfigVariable')) === 0) {
-                    $this->prefix_number++;
-                    $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.str_replace(')',', false)',$par).';?>';
-                    $isset_par = '$_tmp'.$this->prefix_number;
-                } else {
-                    $isset_par=str_replace("')->value","',null,true,false)->value",$par);
-                }
-                $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $isset_par .")";
-            } elseif (in_array($func_name,array('empty','reset','current','end','prev','next'))){
-                if (count($this->yystack[$this->yyidx + -1]->minor) != 1) {
-                    $this->compiler->trigger_template_error ('Illegal number of paramer in "empty()"');
-                }
-                if ($func_name == 'empty') {
-                    $this->_retvalue = $func_name.'('.str_replace("')->value","',null,true,false)->value",$this->yystack[$this->yyidx + -1]->minor[0]).')';
+    }
+    #line 2663 "smarty_internal_templateparser.php"
+    #line 757 "smarty_internal_templateparser.y"
+    function yy_r116()
+    {
+        $this->_retvalue = "(" . $this->yystack[$this->yyidx + - 1]->minor . ")";
+    }
+    #line 2668 "smarty_internal_templateparser.php"
+    #line 772 "smarty_internal_templateparser.y"
+    function yy_r119()
+    {
+        if (!$this->security || isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor]) || $this->smarty->security_policy->isTrustedStaticClass($this->yystack[$this->yyidx + - 2]->minor, $this->compiler)) {
+            if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor])) {
+                $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + - 2]->minor] . '::' . $this->yystack[$this->yyidx + 0]->minor;
+            } else {
+                $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '::' . $this->yystack[$this->yyidx + 0]->minor;
+            }
+        } else {
+            $this->compiler->trigger_template_error("static class '" . $this->yystack[$this->yyidx + - 2]->minor . "' is undefined or not allowed by security setting");
+        }
+    }
+    #line 2681 "smarty_internal_templateparser.php"
+    #line 784 "smarty_internal_templateparser.y"
+    function yy_r120()
+    {
+        if ($this->yystack[$this->yyidx + - 2]->minor['var'] == '\'smarty\'') {
+            $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + - 2]->minor['smarty_internal_index']) . '::' . $this->yystack[$this->yyidx + 0]->minor;
+        } else {
+            $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + - 2]->minor['var']) . $this->yystack[$this->yyidx + - 2]->minor['smarty_internal_index'] . '::' . $this->yystack[$this->yyidx + 0]->minor;
+        }
+    }
+    #line 2690 "smarty_internal_templateparser.php"
+    #line 793 "smarty_internal_templateparser.y"
+    function yy_r121()
+    {
+        self::$prefix_number ++;
+        $this->compiler->prefix_code[] = '<?php ob_start();?>' . $this->yystack[$this->yyidx + - 1]->minor . '<?php $_tmp' . self::$prefix_number . '=ob_get_clean();?>';
+        $this->_retvalue = '$_tmp' . self::$prefix_number;
+    }
+    #line 2697 "smarty_internal_templateparser.php"
+    #line 808 "smarty_internal_templateparser.y"
+    function yy_r123()
+    {
+        if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') {
+            $smarty_var = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
+            $this->_retvalue = $smarty_var;
+        } else {
+            // used for array reset,next,prev,end,current 
+            $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
+            $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
+            $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']) . $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
+        }
+    }
+    #line 2710 "smarty_internal_templateparser.php"
+    #line 821 "smarty_internal_templateparser.y"
+    function yy_r124()
+    {
+        $this->_retvalue = '$_smarty_tpl->tpl_vars[' . $this->yystack[$this->yyidx + - 2]->minor . ']->' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2715 "smarty_internal_templateparser.php"
+    #line 831 "smarty_internal_templateparser.y"
+    function yy_r126()
+    {
+        $this->_retvalue = '$_smarty_tpl->getConfigVariable(\'' . $this->yystack[$this->yyidx + - 1]->minor . '\')';
+    }
+    #line 2720 "smarty_internal_templateparser.php"
+    #line 835 "smarty_internal_templateparser.y"
+    function yy_r127()
+    {
+        $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable(\'' . $this->yystack[$this->yyidx + - 2]->minor . '\')) ? $tmp' . $this->yystack[$this->yyidx + 0]->minor . ' :null)';
+    }
+    #line 2725 "smarty_internal_templateparser.php"
+    #line 839 "smarty_internal_templateparser.y"
+    function yy_r128()
+    {
+        $this->_retvalue = '$_smarty_tpl->getConfigVariable(' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+    }
+    #line 2730 "smarty_internal_templateparser.php"
+    #line 843 "smarty_internal_templateparser.y"
+    function yy_r129()
+    {
+        $this->_retvalue = '(is_array($tmp = $_smarty_tpl->getConfigVariable(' . $this->yystack[$this->yyidx + - 2]->minor . ')) ? $tmp' . $this->yystack[$this->yyidx + 0]->minor . ' : null)';
+    }
+    #line 2735 "smarty_internal_templateparser.php"
+    #line 847 "smarty_internal_templateparser.y"
+    function yy_r130()
+    {
+        $this->_retvalue = array('var' => $this->yystack[$this->yyidx + - 1]->minor, 'smarty_internal_index' => $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2740 "smarty_internal_templateparser.php"
+    #line 860 "smarty_internal_templateparser.y"
+    function yy_r132()
+    {
+        return;
+    }
+    #line 2745 "smarty_internal_templateparser.php"
+    #line 866 "smarty_internal_templateparser.y"
+    function yy_r133()
+    {
+        $this->_retvalue = '[' . $this->compileVariable($this->yystack[$this->yyidx + 0]->minor) . ']';
+    }
+    #line 2750 "smarty_internal_templateparser.php"
+    #line 870 "smarty_internal_templateparser.y"
+    function yy_r134()
+    {
+        $this->_retvalue = '[' . $this->compileVariable($this->yystack[$this->yyidx + - 2]->minor) . '->' . $this->yystack[$this->yyidx + 0]->minor . ']';
+    }
+    #line 2755 "smarty_internal_templateparser.php"
+    #line 874 "smarty_internal_templateparser.y"
+    function yy_r135()
+    {
+        $this->_retvalue = "['" . $this->yystack[$this->yyidx + 0]->minor . "']";
+    }
+    #line 2760 "smarty_internal_templateparser.php"
+    #line 878 "smarty_internal_templateparser.y"
+    function yy_r136()
+    {
+        $this->_retvalue = "[" . $this->yystack[$this->yyidx + 0]->minor . "]";
+    }
+    #line 2765 "smarty_internal_templateparser.php"
+    #line 882 "smarty_internal_templateparser.y"
+    function yy_r137()
+    {
+        $this->_retvalue = "[" . $this->yystack[$this->yyidx + - 1]->minor . "]";
+    }
+    #line 2770 "smarty_internal_templateparser.php"
+    #line 887 "smarty_internal_templateparser.y"
+    function yy_r138()
+    {
+        $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[$this->yyidx + - 1]->minor . '\'][\'index\']') . ']';
+    }
+    #line 2775 "smarty_internal_templateparser.php"
+    #line 891 "smarty_internal_templateparser.y"
+    function yy_r139()
+    {
+        $this->_retvalue = '[' . $this->compiler->compileTag('private_special_variable', array(), '[\'section\'][\'' . $this->yystack[$this->yyidx + - 3]->minor . '\'][\'' . $this->yystack[$this->yyidx + - 1]->minor . '\']') . ']';
+    }
+    #line 2780 "smarty_internal_templateparser.php"
+    #line 901 "smarty_internal_templateparser.y"
+    function yy_r141()
+    {
+        $this->_retvalue = '[]';
+    }
+    #line 2785 "smarty_internal_templateparser.php"
+    #line 914 "smarty_internal_templateparser.y"
+    function yy_r143()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . '.' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2790 "smarty_internal_templateparser.php"
+    #line 919 "smarty_internal_templateparser.y"
+    function yy_r144()
+    {
+        $this->_retvalue = '\'' . $this->yystack[$this->yyidx + 0]->minor . '\'';
+    }
+    #line 2795 "smarty_internal_templateparser.php"
+    #line 924 "smarty_internal_templateparser.y"
+    function yy_r145()
+    {
+        $this->_retvalue = '(' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+    }
+    #line 2800 "smarty_internal_templateparser.php"
+    #line 931 "smarty_internal_templateparser.y"
+    function yy_r146()
+    {
+        if ($this->yystack[$this->yyidx + - 1]->minor['var'] == '\'smarty\'') {
+            $this->_retvalue = $this->compiler->compileTag('private_special_variable', array(), $this->yystack[$this->yyidx + - 1]->minor['smarty_internal_index']) . $this->yystack[$this->yyidx + 0]->minor;
+        } else {
+            $this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + - 1]->minor['var']) . $this->yystack[$this->yyidx + - 1]->minor['smarty_internal_index'] . $this->yystack[$this->yyidx + 0]->minor;
+        }
+    }
+    #line 2809 "smarty_internal_templateparser.php"
+    #line 940 "smarty_internal_templateparser.y"
+    function yy_r147()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2814 "smarty_internal_templateparser.php"
+    #line 945 "smarty_internal_templateparser.y"
+    function yy_r148()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2819 "smarty_internal_templateparser.php"
+    #line 950 "smarty_internal_templateparser.y"
+    function yy_r149()
+    {
+        if ($this->security && substr($this->yystack[$this->yyidx + - 1]->minor, 0, 1) == '_') {
+            $this->compiler->trigger_template_error(self::Err1);
+        }
+        $this->_retvalue = '->' . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2827 "smarty_internal_templateparser.php"
+    #line 957 "smarty_internal_templateparser.y"
+    function yy_r150()
+    {
+        if ($this->security) {
+            $this->compiler->trigger_template_error(self::Err2);
+        }
+        $this->_retvalue = '->{' . $this->compileVariable($this->yystack[$this->yyidx + - 1]->minor) . $this->yystack[$this->yyidx + 0]->minor . '}';
+    }
+    #line 2835 "smarty_internal_templateparser.php"
+    #line 964 "smarty_internal_templateparser.y"
+    function yy_r151()
+    {
+        if ($this->security) {
+            $this->compiler->trigger_template_error(self::Err2);
+        }
+        $this->_retvalue = '->{' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + 0]->minor . '}';
+    }
+    #line 2843 "smarty_internal_templateparser.php"
+    #line 971 "smarty_internal_templateparser.y"
+    function yy_r152()
+    {
+        if ($this->security) {
+            $this->compiler->trigger_template_error(self::Err2);
+        }
+        $this->_retvalue = '->{\'' . $this->yystack[$this->yyidx + - 4]->minor . '\'.' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + 0]->minor . '}';
+    }
+    #line 2851 "smarty_internal_templateparser.php"
+    #line 979 "smarty_internal_templateparser.y"
+    function yy_r153()
+    {
+        $this->_retvalue = '->' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2856 "smarty_internal_templateparser.php"
+    #line 987 "smarty_internal_templateparser.y"
+    function yy_r154()
+    {
+        if (!$this->security || $this->smarty->security_policy->isTrustedPhpFunction($this->yystack[$this->yyidx + - 3]->minor, $this->compiler)) {
+            if (strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'isset') === 0 || strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'empty') === 0 || strcasecmp($this->yystack[$this->yyidx + - 3]->minor, 'array') === 0 || is_callable($this->yystack[$this->yyidx + - 3]->minor)) {
+                $func_name = strtolower($this->yystack[$this->yyidx + - 3]->minor);
+                if ($func_name == 'isset') {
+                    if (count($this->yystack[$this->yyidx + - 1]->minor) == 0) {
+                        $this->compiler->trigger_template_error('Illegal number of paramer in "isset()"');
+                    }
+                    $par = implode(',', $this->yystack[$this->yyidx + - 1]->minor);
+                    if (strncasecmp($par, '$_smarty_tpl->getConfigVariable', strlen('$_smarty_tpl->getConfigVariable')) === 0) {
+                        self::$prefix_number ++;
+                        $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . str_replace(')', ', false)', $par) . ';?>';
+                        $isset_par = '$_tmp' . self::$prefix_number;
+                    } else {
+                        $isset_par = str_replace("')->value", "',null,true,false)->value", $par);
+                    }
+                    $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . $isset_par . ")";
+                } elseif (in_array($func_name, array('empty', 'reset', 'current', 'end', 'prev', 'next'))) {
+                    if (count($this->yystack[$this->yyidx + - 1]->minor) != 1) {
+                        $this->compiler->trigger_template_error('Illegal number of paramer in "empty()"');
+                    }
+                    if ($func_name == 'empty') {
+                        $this->_retvalue = $func_name . '(' . str_replace("')->value", "',null,true,false)->value", $this->yystack[$this->yyidx + - 1]->minor[0]) . ')';
+                    } else {
+                        $this->_retvalue = $func_name . '(' . $this->yystack[$this->yyidx + - 1]->minor[0] . ')';
+                    }
                 } else {
-                    $this->_retvalue = $func_name.'('.$this->yystack[$this->yyidx + -1]->minor[0].')';
+                    $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ")";
                 }
             } else {
-                $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". implode(',',$this->yystack[$this->yyidx + -1]->minor) .")";
+                $this->compiler->trigger_template_error("unknown function \"" . $this->yystack[$this->yyidx + - 3]->minor . "\"");
             }
-        } else {
-            $this->compiler->trigger_template_error ("unknown function \"" . $this->yystack[$this->yyidx + -3]->minor . "\"");
         }
     }
+    #line 2892 "smarty_internal_templateparser.php"
+    #line 1025 "smarty_internal_templateparser.y"
+    function yy_r155()
+    {
+        if ($this->security && substr($this->yystack[$this->yyidx + - 3]->minor, 0, 1) == '_') {
+            $this->compiler->trigger_template_error(self::Err1);
+        }
+        $this->_retvalue = $this->yystack[$this->yyidx + - 3]->minor . "(" . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ")";
+    }
+    #line 2900 "smarty_internal_templateparser.php"
+    #line 1032 "smarty_internal_templateparser.y"
+    function yy_r156()
+    {
+        if ($this->security) {
+            $this->compiler->trigger_template_error(self::Err2);
+        }
+        self::$prefix_number ++;
+        $this->compiler->prefix_code[] = '<?php $_tmp' . self::$prefix_number . '=' . $this->compileVariable("'" . $this->yystack[$this->yyidx + - 3]->minor . "'") . ';?>';
+        $this->_retvalue = '$_tmp' . self::$prefix_number . '(' . implode(',', $this->yystack[$this->yyidx + - 1]->minor) . ')';
+    }
+    #line 2910 "smarty_internal_templateparser.php"
+    #line 1043 "smarty_internal_templateparser.y"
+    function yy_r157()
+    {
+        $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 2]->minor, array($this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2915 "smarty_internal_templateparser.php"
+    #line 1060 "smarty_internal_templateparser.y"
+    function yy_r160()
+    {
+        $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 2]->minor, array(array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor)));
+    }
+    #line 2920 "smarty_internal_templateparser.php"
+    #line 1064 "smarty_internal_templateparser.y"
+    function yy_r161()
+    {
+        $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor));
+    }
+    #line 2925 "smarty_internal_templateparser.php"
+    #line 1072 "smarty_internal_templateparser.y"
+    function yy_r163()
+    {
+        $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
     }
-#line 2895 "smarty_internal_templateparser.php"
-#line 999 "smarty_internal_templateparser.y"
-    function yy_r152(){
-    if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) == '_') {
-        $this->compiler->trigger_template_error (self::Err1);
-    }
-    $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". implode(',',$this->yystack[$this->yyidx + -1]->minor) .")";
-    }
-#line 2903 "smarty_internal_templateparser.php"
-#line 1006 "smarty_internal_templateparser.y"
-    function yy_r153(){
-    if ($this->security) {
-        $this->compiler->trigger_template_error (self::Err2);
-    }
-    $this->prefix_number++;
-    $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->compileVariable("'".$this->yystack[$this->yyidx + -3]->minor."'").';?>';
-    $this->_retvalue = '$_tmp'.$this->prefix_number.'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
-    }
-#line 2913 "smarty_internal_templateparser.php"
-#line 1017 "smarty_internal_templateparser.y"
-    function yy_r154(){
-    $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor));
-    }
-#line 2918 "smarty_internal_templateparser.php"
-#line 1034 "smarty_internal_templateparser.y"
-    function yy_r157(){
-    $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)));
-    }
-#line 2923 "smarty_internal_templateparser.php"
-#line 1038 "smarty_internal_templateparser.y"
-    function yy_r158(){
-    $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
-    }
-#line 2928 "smarty_internal_templateparser.php"
-#line 1046 "smarty_internal_templateparser.y"
-    function yy_r160(){
-    $this->_retvalue =  array($this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2933 "smarty_internal_templateparser.php"
-#line 1054 "smarty_internal_templateparser.y"
-    function yy_r161(){
-    $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 2938 "smarty_internal_templateparser.php"
-#line 1088 "smarty_internal_templateparser.y"
-    function yy_r168(){
-    $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2943 "smarty_internal_templateparser.php"
-#line 1093 "smarty_internal_templateparser.y"
-    function yy_r169(){
-    $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 2948 "smarty_internal_templateparser.php"
-#line 1099 "smarty_internal_templateparser.y"
-    function yy_r170(){
-    $this->_retvalue = '==';
-    }
-#line 2953 "smarty_internal_templateparser.php"
-#line 1103 "smarty_internal_templateparser.y"
-    function yy_r171(){
-    $this->_retvalue = '!=';
-    }
-#line 2958 "smarty_internal_templateparser.php"
-#line 1107 "smarty_internal_templateparser.y"
-    function yy_r172(){
-    $this->_retvalue = '>';
-    }
-#line 2963 "smarty_internal_templateparser.php"
-#line 1111 "smarty_internal_templateparser.y"
-    function yy_r173(){
-    $this->_retvalue = '<';
-    }
-#line 2968 "smarty_internal_templateparser.php"
-#line 1115 "smarty_internal_templateparser.y"
-    function yy_r174(){
-    $this->_retvalue = '>=';
-    }
-#line 2973 "smarty_internal_templateparser.php"
-#line 1119 "smarty_internal_templateparser.y"
-    function yy_r175(){
-    $this->_retvalue = '<=';
-    }
-#line 2978 "smarty_internal_templateparser.php"
-#line 1123 "smarty_internal_templateparser.y"
-    function yy_r176(){
-    $this->_retvalue = '===';
-    }
-#line 2983 "smarty_internal_templateparser.php"
-#line 1127 "smarty_internal_templateparser.y"
-    function yy_r177(){
-    $this->_retvalue = '!==';
-    }
-#line 2988 "smarty_internal_templateparser.php"
-#line 1131 "smarty_internal_templateparser.y"
-    function yy_r178(){
-    $this->_retvalue = '%';
-    }
-#line 2993 "smarty_internal_templateparser.php"
-#line 1135 "smarty_internal_templateparser.y"
-    function yy_r179(){
-    $this->_retvalue = '&&';
-    }
-#line 2998 "smarty_internal_templateparser.php"
-#line 1139 "smarty_internal_templateparser.y"
-    function yy_r180(){
-    $this->_retvalue = '||';
-    }
-#line 3003 "smarty_internal_templateparser.php"
-#line 1143 "smarty_internal_templateparser.y"
-    function yy_r181(){
-    $this->_retvalue = ' XOR ';
-    }
-#line 3008 "smarty_internal_templateparser.php"
-#line 1150 "smarty_internal_templateparser.y"
-    function yy_r182(){
-    $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
-    }
-#line 3013 "smarty_internal_templateparser.php"
-#line 1158 "smarty_internal_templateparser.y"
-    function yy_r184(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 3018 "smarty_internal_templateparser.php"
-#line 1166 "smarty_internal_templateparser.y"
-    function yy_r186(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 3023 "smarty_internal_templateparser.php"
-#line 1170 "smarty_internal_templateparser.y"
-    function yy_r187(){
-    $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
-    }
-#line 3028 "smarty_internal_templateparser.php"
-#line 1182 "smarty_internal_templateparser.y"
-    function yy_r189(){
-    $this->_retvalue = "''";
-    }
-#line 3033 "smarty_internal_templateparser.php"
-#line 1186 "smarty_internal_templateparser.y"
-    function yy_r190(){
-    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php();
-    }
-#line 3038 "smarty_internal_templateparser.php"
-#line 1191 "smarty_internal_templateparser.y"
-    function yy_r191(){
-    $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor);
-    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
-    }
-#line 3044 "smarty_internal_templateparser.php"
-#line 1196 "smarty_internal_templateparser.y"
-    function yy_r192(){
-    $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 3049 "smarty_internal_templateparser.php"
-#line 1200 "smarty_internal_templateparser.y"
-    function yy_r193(){
-    $this->_retvalue = new _smarty_code($this, '(string)'.$this->yystack[$this->yyidx + -1]->minor);
-    }
-#line 3054 "smarty_internal_templateparser.php"
-#line 1208 "smarty_internal_templateparser.y"
-    function yy_r195(){
-    $this->_retvalue = new _smarty_code($this, '(string)$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');
-    }
-#line 3059 "smarty_internal_templateparser.php"
-#line 1216 "smarty_internal_templateparser.y"
-    function yy_r197(){
-    $this->_retvalue = new _smarty_code($this, '(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
-    }
-#line 3064 "smarty_internal_templateparser.php"
-#line 1220 "smarty_internal_templateparser.y"
-    function yy_r198(){
-    $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 3069 "smarty_internal_templateparser.php"
-#line 1224 "smarty_internal_templateparser.y"
-    function yy_r199(){
-    $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);
-    }
-#line 3074 "smarty_internal_templateparser.php"
+    #line 2930 "smarty_internal_templateparser.php"
+    #line 1080 "smarty_internal_templateparser.y"
+    function yy_r164()
+    {
+        $this->_retvalue = array_merge($this->yystack[$this->yyidx + - 1]->minor, $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 2935 "smarty_internal_templateparser.php"
+    #line 1114 "smarty_internal_templateparser.y"
+    function yy_r171()
+    {
+        $this->_retvalue = '$' . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2940 "smarty_internal_templateparser.php"
+    #line 1119 "smarty_internal_templateparser.y"
+    function yy_r172()
+    {
+        $this->_retvalue = '$' . $this->yystack[$this->yyidx + - 2]->minor . $this->yystack[$this->yyidx + - 1]->minor . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 2945 "smarty_internal_templateparser.php"
+    #line 1125 "smarty_internal_templateparser.y"
+    function yy_r173()
+    {
+        $this->_retvalue = '==';
+    }
+    #line 2950 "smarty_internal_templateparser.php"
+    #line 1129 "smarty_internal_templateparser.y"
+    function yy_r174()
+    {
+        $this->_retvalue = '!=';
+    }
+    #line 2955 "smarty_internal_templateparser.php"
+    #line 1133 "smarty_internal_templateparser.y"
+    function yy_r175()
+    {
+        $this->_retvalue = '>';
+    }
+    #line 2960 "smarty_internal_templateparser.php"
+    #line 1137 "smarty_internal_templateparser.y"
+    function yy_r176()
+    {
+        $this->_retvalue = '<';
+    }
+    #line 2965 "smarty_internal_templateparser.php"
+    #line 1141 "smarty_internal_templateparser.y"
+    function yy_r177()
+    {
+        $this->_retvalue = '>=';
+    }
+    #line 2970 "smarty_internal_templateparser.php"
+    #line 1145 "smarty_internal_templateparser.y"
+    function yy_r178()
+    {
+        $this->_retvalue = '<=';
+    }
+    #line 2975 "smarty_internal_templateparser.php"
+    #line 1149 "smarty_internal_templateparser.y"
+    function yy_r179()
+    {
+        $this->_retvalue = '===';
+    }
+    #line 2980 "smarty_internal_templateparser.php"
+    #line 1153 "smarty_internal_templateparser.y"
+    function yy_r180()
+    {
+        $this->_retvalue = '!==';
+    }
+    #line 2985 "smarty_internal_templateparser.php"
+    #line 1157 "smarty_internal_templateparser.y"
+    function yy_r181()
+    {
+        $this->_retvalue = '%';
+    }
+    #line 2990 "smarty_internal_templateparser.php"
+    #line 1161 "smarty_internal_templateparser.y"
+    function yy_r182()
+    {
+        $this->_retvalue = '&&';
+    }
+    #line 2995 "smarty_internal_templateparser.php"
+    #line 1165 "smarty_internal_templateparser.y"
+    function yy_r183()
+    {
+        $this->_retvalue = '||';
+    }
+    #line 3000 "smarty_internal_templateparser.php"
+    #line 1169 "smarty_internal_templateparser.y"
+    function yy_r184()
+    {
+        $this->_retvalue = ' XOR ';
+    }
+    #line 3005 "smarty_internal_templateparser.php"
+    #line 1176 "smarty_internal_templateparser.y"
+    function yy_r185()
+    {
+        $this->_retvalue = 'array(' . $this->yystack[$this->yyidx + - 1]->minor . ')';
+    }
+    #line 3010 "smarty_internal_templateparser.php"
+    #line 1184 "smarty_internal_templateparser.y"
+    function yy_r187()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . ',' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 3015 "smarty_internal_templateparser.php"
+    #line 1192 "smarty_internal_templateparser.y"
+    function yy_r189()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 2]->minor . '=>' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 3020 "smarty_internal_templateparser.php"
+    #line 1196 "smarty_internal_templateparser.y"
+    function yy_r190()
+    {
+        $this->_retvalue = '\'' . $this->yystack[$this->yyidx + - 2]->minor . '\'=>' . $this->yystack[$this->yyidx + 0]->minor;
+    }
+    #line 3025 "smarty_internal_templateparser.php"
+    #line 1208 "smarty_internal_templateparser.y"
+    function yy_r192()
+    {
+        $this->_retvalue = "''";
+    }
+    #line 3030 "smarty_internal_templateparser.php"
+    #line 1212 "smarty_internal_templateparser.y"
+    function yy_r193()
+    {
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor->to_smarty_php();
+    }
+    #line 3035 "smarty_internal_templateparser.php"
+    #line 1217 "smarty_internal_templateparser.y"
+    function yy_r194()
+    {
+        $this->yystack[$this->yyidx + - 1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor);
+        $this->_retvalue = $this->yystack[$this->yyidx + - 1]->minor;
+    }
+    #line 3041 "smarty_internal_templateparser.php"
+    #line 1222 "smarty_internal_templateparser.y"
+    function yy_r195()
+    {
+        $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);
+    }
+    #line 3046 "smarty_internal_templateparser.php"
+    #line 1226 "smarty_internal_templateparser.y"
+    function yy_r196()
+    {
+        $this->_retvalue = new _smarty_code($this, '(string)' . $this->yystack[$this->yyidx + - 1]->minor);
+    }
+    #line 3051 "smarty_internal_templateparser.php"
+    #line 1234 "smarty_internal_templateparser.y"
+    function yy_r198()
+    {
+        $this->_retvalue = new _smarty_code($this, '(string)$_smarty_tpl->tpl_vars[\'' . substr($this->yystack[$this->yyidx + 0]->minor, 1) . '\']->value');
+    }
+    #line 3056 "smarty_internal_templateparser.php"
+    #line 1242 "smarty_internal_templateparser.y"
+    function yy_r200()
+    {
+        $this->_retvalue = new _smarty_code($this, '(string)(' . $this->yystack[$this->yyidx + - 1]->minor . ')');
+    }
+    #line 3061 "smarty_internal_templateparser.php"
+    #line 1246 "smarty_internal_templateparser.y"
+    function yy_r201()
+    {
+        $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + - 1]->minor);
+    }
+    #line 3066 "smarty_internal_templateparser.php"
+    #line 1250 "smarty_internal_templateparser.y"
+    function yy_r202()
+    {
+        $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);
+    }
+
+    #line 3071 "smarty_internal_templateparser.php"
 
     private $_retvalue;
 
-    function yy_reduce($yyruleno)
+    public function yy_reduce($yyruleno)
     {
         $yymsp = $this->yystack[$this->yyidx];
-        if (self::$yyTraceFILE && $yyruleno >= 0
-              && $yyruleno < count(self::$yyRuleName)) {
-            fprintf(self::$yyTraceFILE, "%sReduce (%d) [%s].\n",
-                self::$yyTracePrompt, $yyruleno,
-                self::$yyRuleName[$yyruleno]);
+        if ($this->yyTraceFILE && $yyruleno >= 0
+            && $yyruleno < count(self::$yyRuleName)
+        ) {
+            fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
+                    $this->yyTracePrompt, $yyruleno,
+                    self::$yyRuleName[$yyruleno]);
         }
 
         $this->_retvalue = $yy_lefthand_side = null;
@@ -3099,14 +4395,14 @@ static public $yy_action = array(
         $yygoto = self::$yyRuleInfo[$yyruleno]['lhs'];
         $yysize = self::$yyRuleInfo[$yyruleno]['rhs'];
         $this->yyidx -= $yysize;
-        for($i = $yysize; $i; $i--) {
+        for ($i = $yysize; $i; $i --) {
             // pop all of the right-hand side parameters
             array_pop($this->yystack);
         }
         $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
         if ($yyact < self::YYNSTATE) {
-            if (!self::$yyTraceFILE && $yysize) {
-                $this->yyidx++;
+            if (!$this->yyTraceFILE && $yysize) {
+                $this->yyidx ++;
                 $x = new TP_yyStackEntry;
                 $x->stateno = $yyact;
                 $x->major = $yygoto;
@@ -3120,73 +4416,74 @@ static public $yy_action = array(
         }
     }
 
-    function yy_parse_failed()
+    public function yy_parse_failed()
     {
-        if (self::$yyTraceFILE) {
-            fprintf(self::$yyTraceFILE, "%sFail!\n", self::$yyTracePrompt);
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
         }
         while ($this->yyidx >= 0) {
             $this->yy_pop_parser_stack();
         }
     }
 
-    function yy_syntax_error($yymajor, $TOKEN)
+    public function yy_syntax_error($yymajor, $TOKEN)
     {
-#line 77 "smarty_internal_templateparser.y"
+        #line 78 "smarty_internal_templateparser.y"
 
-    $this->internalError = true;
-    $this->yymajor = $yymajor;
-    $this->compiler->trigger_template_error();
-#line 3137 "smarty_internal_templateparser.php"
+        $this->internalError = true;
+        $this->yymajor = $yymajor;
+        $this->compiler->trigger_template_error();
+        #line 3133 "smarty_internal_templateparser.php"
     }
 
-    function yy_accept()
+    public function yy_accept()
     {
-        if (self::$yyTraceFILE) {
-            fprintf(self::$yyTraceFILE, "%sAccept!\n", self::$yyTracePrompt);
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
         }
         while ($this->yyidx >= 0) {
             $stack = $this->yy_pop_parser_stack();
         }
-#line 69 "smarty_internal_templateparser.y"
+        #line 70 "smarty_internal_templateparser.y"
 
-    $this->successful = !$this->internalError;
-    $this->internalError = false;
-    $this->retvalue = $this->_retvalue;
-    //echo $this->retvalue."\n\n";
-#line 3155 "smarty_internal_templateparser.php"
+        $this->successful = !$this->internalError;
+        $this->internalError = false;
+        $this->retvalue = $this->_retvalue;
+        //echo $this->retvalue."\n\n";
+        #line 3150 "smarty_internal_templateparser.php"
     }
 
-    function doParse($yymajor, $yytokenvalue)
+    public function doParse($yymajor, $yytokenvalue)
     {
-        $yyerrorhit = 0;   /* True if yymajor has invoked an error */
+        $yyerrorhit = 0; /* True if yymajor has invoked an error */
 
         if ($this->yyidx === null || $this->yyidx < 0) {
             $this->yyidx = 0;
-            $this->yyerrcnt = -1;
+            $this->yyerrcnt = - 1;
             $x = new TP_yyStackEntry;
             $x->stateno = 0;
             $x->major = 0;
             $this->yystack = array();
             array_push($this->yystack, $x);
         }
-        $yyendofinput = ($yymajor==0);
+        $yyendofinput = ($yymajor == 0);
 
-        if (self::$yyTraceFILE) {
-            fprintf(self::$yyTraceFILE, "%sInput %s\n",
-                self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+        if ($this->yyTraceFILE) {
+            fprintf($this->yyTraceFILE, "%sInput %s\n",
+                    $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
         }
 
         do {
             $yyact = $this->yy_find_shift_action($yymajor);
             if ($yymajor < self::YYERRORSYMBOL &&
-                  !$this->yy_is_expected_token($yymajor)) {
+                !$this->yy_is_expected_token($yymajor)
+            ) {
                 // force a syntax error
                 $yyact = self::YY_ERROR_ACTION;
             }
             if ($yyact < self::YYNSTATE) {
                 $this->yy_shift($yyact, $yymajor, $yytokenvalue);
-                $this->yyerrcnt--;
+                $this->yyerrcnt --;
                 if ($yyendofinput && $this->yyidx >= 0) {
                     $yymajor = 0;
                 } else {
@@ -3195,30 +4492,30 @@ static public $yy_action = array(
             } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
                 $this->yy_reduce($yyact - self::YYNSTATE);
             } elseif ($yyact == self::YY_ERROR_ACTION) {
-                if (self::$yyTraceFILE) {
-                    fprintf(self::$yyTraceFILE, "%sSyntax Error!\n",
-                        self::$yyTracePrompt);
+                if ($this->yyTraceFILE) {
+                    fprintf($this->yyTraceFILE, "%sSyntax Error!\n",
+                            $this->yyTracePrompt);
                 }
                 if (self::YYERRORSYMBOL) {
                     if ($this->yyerrcnt < 0) {
                         $this->yy_syntax_error($yymajor, $yytokenvalue);
                     }
                     $yymx = $this->yystack[$this->yyidx]->major;
-                    if ($yymx == self::YYERRORSYMBOL || $yyerrorhit ){
-                        if (self::$yyTraceFILE) {
-                            fprintf(self::$yyTraceFILE, "%sDiscard input token %s\n",
-                                self::$yyTracePrompt, $this->yyTokenName[$yymajor]);
+                    if ($yymx == self::YYERRORSYMBOL || $yyerrorhit{
+                        if ($this->yyTraceFILE) {
+                            fprintf($this->yyTraceFILE, "%sDiscard input token %s\n",
+                                    $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
                         }
                         $this->yy_destructor($yymajor, $yytokenvalue);
                         $yymajor = self::YYNOCODE;
                     } else {
                         while ($this->yyidx >= 0 &&
-                                 $yymx != self::YYERRORSYMBOL &&
-        ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
-                              ){
+                            $yymx != self::YYERRORSYMBOL &&
+                            ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
+                        {
                             $this->yy_pop_parser_stack();
                         }
-                        if ($this->yyidx < 0 || $yymajor==0) {
+                        if ($this->yyidx < 0 || $yymajor == 0) {
                             $this->yy_destructor($yymajor, $yytokenvalue);
                             $this->yy_parse_failed();
                             $yymajor = self::YYNOCODE;
@@ -3247,4 +4544,3 @@ static public $yy_action = array(
         } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);
     }
 }
-?>
\ No newline at end of file
index 3e362855cf95795125035436e6db5bc39ee4c46a..0a5975bba707d5fc1c4f79ed113d27a0654cb2bc 100644 (file)
@@ -3,47 +3,42 @@
  * Project:     Smarty: the PHP compiling template engine
  * File:        smarty_internal_utility.php
  * SVN:         $Id: $
- *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
  * For questions, help, comments, discussion, etc., please join the
  * Smarty mailing list. Send a blank e-mail to
  * smarty-discussion-subscribe@googlegroups.com
  *
- * @link http://www.smarty.net/
- * @copyright 2008 New Digital Group, Inc.
- * @author Monte Ohrt <monte at ohrt dot com>
- * @author Uwe Tews
- * @package Smarty
+ * @link       http://www.smarty.net/
+ * @copyright  2008 New Digital Group, Inc.
+ * @author     Monte Ohrt <monte at ohrt dot com>
+ * @author     Uwe Tews
+ * @package    Smarty
  * @subpackage PluginsInternal
- * @version 3-SVN$Rev: 3286 $
+ * @version    3-SVN$Rev: 3286 $
  */
 
-
 /**
  * Utility class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Security
  */
-class Smarty_Internal_Utility {
-
+class Smarty_Internal_Utility
+{
     /**
      * private constructor to prevent calls creation of new instances
      */
-    private final function __construct()
+    final private function __construct()
     {
         // intentionally left blank
     }
@@ -51,14 +46,15 @@ class Smarty_Internal_Utility {
     /**
      * Compile all template files
      *
-     * @param string $extension     template file name extension
-     * @param bool   $force_compile force all to recompile
-     * @param int    $time_limit    set maximum execution time
-     * @param int    $max_errors    set maximum allowed errors
-     * @param Smarty $smarty        Smarty instance
+     * @param  string $extension     template file name extension
+     * @param  bool   $force_compile force all to recompile
+     * @param  int    $time_limit    set maximum execution time
+     * @param  int    $max_errors    set maximum allowed errors
+     * @param  Smarty $smarty        Smarty instance
+     *
      * @return integer number of template files compiled
      */
-    public static function compileAllTemplates($extention, $force_compile, $time_limit, $max_errors, Smarty $smarty)
+    public static function compileAllTemplates($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty)
     {
         // switch off time limit
         if (function_exists('set_time_limit')) {
@@ -68,26 +64,30 @@ class Smarty_Internal_Utility {
         $_count = 0;
         $_error_count = 0;
         // loop over array of template directories
-        foreach($smarty->getTemplateDir() as $_dir) {
+        foreach ($smarty->getTemplateDir() as $_dir) {
             $_compileDirs = new RecursiveDirectoryIterator($_dir);
             $_compile = new RecursiveIteratorIterator($_compileDirs);
             foreach ($_compile as $_fileinfo) {
-                if (substr($_fileinfo->getBasename(),0,1) == '.' || strpos($_fileinfo, '.svn') !== false) continue;
                 $_file = $_fileinfo->getFilename();
-                if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue;
-                if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
-                   $_template_file = $_file;
+                if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+                    continue;
+                }
+                if (!substr_compare($_file, $extension, - strlen($extension)) == 0) {
+                    continue;
+                }
+                if ($_fileinfo->getPath() == substr($_dir, 0, - 1)) {
+                    $_template_file = $_file;
                 } else {
-                   $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
+                    $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
                 }
                 echo '<br>', $_dir, '---', $_template_file;
                 flush();
                 $_start_time = microtime(true);
                 try {
-                    $_tpl = $smarty->createTemplate($_template_file,null,null,null,false);
+                    $_tpl = $smarty->createTemplate($_template_file, null, null, null, false);
                     if ($_tpl->mustCompile()) {
                         $_tpl->compileTemplateSource();
-                        $_count++;
+                        $_count ++;
                         echo ' compiled in  ', microtime(true) - $_start_time, ' seconds';
                         flush();
                     } else {
@@ -97,7 +97,7 @@ class Smarty_Internal_Utility {
                 }
                 catch (Exception $e) {
                     echo 'Error: ', $e->getMessage(), "<br><br>";
-                    $_error_count++;
+                    $_error_count ++;
                 }
                 // free memory
                 $smarty->template_objects = array();
@@ -109,20 +109,22 @@ class Smarty_Internal_Utility {
                 }
             }
         }
+
         return $_count;
     }
 
     /**
      * Compile all config files
      *
-     * @param string $extension     config file name extension
-     * @param bool   $force_compile force all to recompile
-     * @param int    $time_limit    set maximum execution time
-     * @param int    $max_errors    set maximum allowed errors
-     * @param Smarty $smarty        Smarty instance
+     * @param  string $extension     config file name extension
+     * @param  bool   $force_compile force all to recompile
+     * @param  int    $time_limit    set maximum execution time
+     * @param  int    $max_errors    set maximum allowed errors
+     * @param  Smarty $smarty        Smarty instance
+     *
      * @return integer number of config files compiled
      */
-    public static function compileAllConfig($extention, $force_compile, $time_limit, $max_errors, Smarty $smarty)
+    public static function compileAllConfig($extension, $force_compile, $time_limit, $max_errors, Smarty $smarty)
     {
         // switch off time limit
         if (function_exists('set_time_limit')) {
@@ -132,14 +134,18 @@ class Smarty_Internal_Utility {
         $_count = 0;
         $_error_count = 0;
         // loop over array of template directories
-        foreach($smarty->getConfigDir() as $_dir) {
+        foreach ($smarty->getConfigDir() as $_dir) {
             $_compileDirs = new RecursiveDirectoryIterator($_dir);
             $_compile = new RecursiveIteratorIterator($_compileDirs);
             foreach ($_compile as $_fileinfo) {
-                if (substr($_fileinfo->getBasename(),0,1) == '.' || strpos($_fileinfo, '.svn') !== false) continue;
                 $_file = $_fileinfo->getFilename();
-                if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue;
-                if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
+                if (substr(basename($_fileinfo->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
+                    continue;
+                }
+                if (!substr_compare($_file, $extension, - strlen($extension)) == 0) {
+                    continue;
+                }
+                if ($_fileinfo->getPath() == substr($_dir, 0, - 1)) {
                     $_config_file = $_file;
                 } else {
                     $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
@@ -151,7 +157,7 @@ class Smarty_Internal_Utility {
                     $_config = new Smarty_Internal_Config($_config_file, $smarty);
                     if ($_config->mustCompile()) {
                         $_config->compileConfigSource();
-                        $_count++;
+                        $_count ++;
                         echo ' compiled in  ', microtime(true) - $_start_time, ' seconds';
                         flush();
                     } else {
@@ -161,7 +167,7 @@ class Smarty_Internal_Utility {
                 }
                 catch (Exception $e) {
                     echo 'Error: ', $e->getMessage(), "<br><br>";
-                    $_error_count++;
+                    $_error_count ++;
                 }
                 if ($max_errors !== null && $_error_count == $max_errors) {
                     echo '<br><br>too many errors';
@@ -169,23 +175,25 @@ class Smarty_Internal_Utility {
                 }
             }
         }
+
         return $_count;
     }
 
     /**
      * Delete compiled template file
      *
-     * @param string  $resource_name template name
-     * @param string  $compile_id    compile id
-     * @param integer $exp_time      expiration time
-     * @param Smarty  $smarty        Smarty instance
+     * @param  string  $resource_name template name
+     * @param  string  $compile_id    compile id
+     * @param  integer $exp_time      expiration time
+     * @param  Smarty  $smarty        Smarty instance
+     *
      * @return integer number of template files deleted
      */
     public static function clearCompiledTemplate($resource_name, $compile_id, $exp_time, Smarty $smarty)
     {
-        $_compile_dir = $smarty->getCompileDir();
+        $_compile_dir = realpath($smarty->getCompileDir()) . '/';
         $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
-        $_dir_sep = $smarty->use_sub_dirs ? DS : '^';
+        $_dir_sep = $smarty->use_sub_dirs ? '/' : '^';
         if (isset($resource_name)) {
             $_save_stat = $smarty->caching;
             $smarty->caching = false;
@@ -205,13 +213,13 @@ class Smarty_Internal_Utility {
             unset($smarty->template_objects[$_templateId]);
 
             if ($tpl->source->exists) {
-                 $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath));
-                 $_resource_part_1_length = strlen($_resource_part_1);
+                $_resource_part_1 = basename(str_replace('^', '/', $tpl->compiled->filepath));
+                $_resource_part_1_length = strlen($_resource_part_1);
             } else {
                 return 0;
             }
 
-            $_resource_part_2 = str_replace('.php','.cache.php',$_resource_part_1);
+            $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1);
             $_resource_part_2_length = strlen($_resource_part_2);
         }
         $_dir = $_compile_dir;
@@ -219,22 +227,24 @@ class Smarty_Internal_Utility {
             $_dir .= $_compile_id . $_dir_sep;
         }
         if (isset($_compile_id)) {
-            $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep;
+            $_compile_id_part = str_replace('\\', '/', $_compile_dir . $_compile_id . $_dir_sep);
             $_compile_id_part_length = strlen($_compile_id_part);
         }
         $_count = 0;
         try {
             $_compileDirs = new RecursiveDirectoryIterator($_dir);
-        // NOTE: UnexpectedValueException thrown for PHP >= 5.3
-        } catch (Exception $e) {
+            // NOTE: UnexpectedValueException thrown for PHP >= 5.3
+        }
+        catch (Exception $e) {
             return 0;
         }
         $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST);
         foreach ($_compile as $_file) {
-            if (substr($_file->getBasename(), 0, 1) == '.' || strpos($_file, '.svn') !== false)
+            if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) {
                 continue;
+            }
 
-            $_filepath = (string) $_file;
+            $_filepath = str_replace('\\', '/', (string) $_file);
 
             if ($_file->isDir()) {
                 if (!$_compile->isDot()) {
@@ -243,12 +253,13 @@ class Smarty_Internal_Utility {
                 }
             } else {
                 $unlink = false;
-                if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length)))
+                if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length)))
                     && (!isset($resource_name)
                         || (isset($_filepath[$_resource_part_1_length])
-                            && substr_compare($_filepath, $_resource_part_1, -$_resource_part_1_length, $_resource_part_1_length) == 0)
+                            && substr_compare($_filepath, $_resource_part_1, - $_resource_part_1_length, $_resource_part_1_length) == 0)
                         || (isset($_filepath[$_resource_part_2_length])
-                            && substr_compare($_filepath, $_resource_part_2, -$_resource_part_2_length, $_resource_part_2_length) == 0))) {
+                            && substr_compare($_filepath, $_resource_part_2, - $_resource_part_2_length, $_resource_part_2_length) == 0))
+                ) {
                     if (isset($exp_time)) {
                         if (time() - @filemtime($_filepath) >= $exp_time) {
                             $unlink = true;
@@ -259,40 +270,44 @@ class Smarty_Internal_Utility {
                 }
 
                 if ($unlink && @unlink($_filepath)) {
-                    $_count++;
+                    $_count ++;
                 }
             }
         }
         // clear compiled cache
         Smarty_Resource::$sources = array();
         Smarty_Resource::$compileds = array();
+
         return $_count;
     }
 
     /**
      * Return array of tag/attributes of all tags used by an template
      *
-     * @param Smarty_Internal_Template $templae template object
-     * @return array of tag/attributes
+     * @param Smarty_Internal_Template $template
+     *
+     * @throws Exception
+     * @throws SmartyException
+     * @return array                    of tag/attributes
      */
     public static function getTags(Smarty_Internal_Template $template)
     {
         $template->smarty->get_used_tags = true;
         $template->compileTemplateSource();
+
         return $template->used_tags;
     }
 
-
     /**
      * diagnose Smarty setup
-     *
      * If $errors is secified, the diagnostic report will be appended to the array, rather than being output.
      *
-     * @param Smarty $smarty  Smarty instance to test
-     * @param array  $errors array to push results into rather than outputting them
-     * @return bool status, true if everything is fine, false else
+     * @param  Smarty $smarty Smarty instance to test
+     * @param  array  $errors array to push results into rather than outputting them
+     *
+     * @return bool   status, true if everything is fine, false else
      */
-    public static function testInstall(Smarty $smarty, &$errors=null)
+    public static function testInstall(Smarty $smarty, &$errors = null)
     {
         $status = true;
 
@@ -305,10 +320,10 @@ class Smarty_Internal_Utility {
         $_stream_resolve_include_path = function_exists('stream_resolve_include_path');
 
         // test if all registered template_dir are accessible
-        foreach($smarty->getTemplateDir() as $template_dir) {
+        foreach ($smarty->getTemplateDir() as $template_dir) {
             $_template_dir = $template_dir;
             $template_dir = realpath($template_dir);
-            // resolve include_path or fail existance
+            // resolve include_path or fail existence
             if (!$template_dir) {
                 if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_template_dir)) {
                     // try PHP include_path
@@ -371,7 +386,6 @@ class Smarty_Internal_Utility {
             }
         }
 
-
         if ($errors === null) {
             echo "Testing compile directory...\n";
         }
@@ -417,19 +431,18 @@ class Smarty_Internal_Utility {
             }
         }
 
-
         if ($errors === null) {
             echo "Testing plugins directory...\n";
         }
 
         // test if all registered plugins_dir are accessible
         // and if core plugins directory is still registered
-        $_core_plugins_dir = realpath(dirname(__FILE__) .'/../plugins');
+        $_core_plugins_dir = realpath(dirname(__FILE__) . '/../plugins');
         $_core_plugins_available = false;
-        foreach($smarty->getPluginsDir() as $plugin_dir) {
+        foreach ($smarty->getPluginsDir() as $plugin_dir) {
             $_plugin_dir = $plugin_dir;
             $plugin_dir = realpath($plugin_dir);
-            // resolve include_path or fail existance
+            // resolve include_path or fail existence
             if (!$plugin_dir) {
                 if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_plugin_dir)) {
                     // try PHP include_path
@@ -510,7 +523,6 @@ class Smarty_Internal_Utility {
             echo "Testing cache directory...\n";
         }
 
-
         // test if all registered cache_dir is accessible
         $__cache_dir = $smarty->getCacheDir();
         $_cache_dir = realpath($__cache_dir);
@@ -552,16 +564,15 @@ class Smarty_Internal_Utility {
             }
         }
 
-
         if ($errors === null) {
             echo "Testing configs directory...\n";
         }
 
         // test if all registered config_dir are accessible
-        foreach($smarty->getConfigDir() as $config_dir) {
+        foreach ($smarty->getConfigDir() as $config_dir) {
             $_config_dir = $config_dir;
             $config_dir = realpath($config_dir);
-            // resolve include_path or fail existance
+            // resolve include_path or fail existence
             if (!$config_dir) {
                 if ($smarty->use_include_path && !preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $_config_dir)) {
                     // try PHP include_path
@@ -624,7 +635,6 @@ class Smarty_Internal_Utility {
             }
         }
 
-
         if ($errors === null) {
             echo "Testing sysplugin files...\n";
         }
@@ -632,75 +642,75 @@ class Smarty_Internal_Utility {
         $source = SMARTY_SYSPLUGINS_DIR;
         if (is_dir($source)) {
             $expected = array(
-                "smarty_cacheresource.php" => true,
-                "smarty_cacheresource_custom.php" => true,
-                "smarty_cacheresource_keyvaluestore.php" => true,
-                "smarty_config_source.php" => true,
-                "smarty_internal_cacheresource_file.php" => true,
-                "smarty_internal_compile_append.php" => true,
-                "smarty_internal_compile_assign.php" => true,
-                "smarty_internal_compile_block.php" => true,
-                "smarty_internal_compile_break.php" => true,
-                "smarty_internal_compile_call.php" => true,
-                "smarty_internal_compile_capture.php" => true,
-                "smarty_internal_compile_config_load.php" => true,
-                "smarty_internal_compile_continue.php" => true,
-                "smarty_internal_compile_debug.php" => true,
-                "smarty_internal_compile_eval.php" => true,
-                "smarty_internal_compile_extends.php" => true,
-                "smarty_internal_compile_for.php" => true,
-                "smarty_internal_compile_foreach.php" => true,
-                "smarty_internal_compile_function.php" => true,
-                "smarty_internal_compile_if.php" => true,
-                "smarty_internal_compile_include.php" => true,
-                "smarty_internal_compile_include_php.php" => true,
-                "smarty_internal_compile_insert.php" => true,
-                "smarty_internal_compile_ldelim.php" => true,
-                "smarty_internal_compile_nocache.php" => true,
-                "smarty_internal_compile_private_block_plugin.php" => true,
-                "smarty_internal_compile_private_function_plugin.php" => true,
-                "smarty_internal_compile_private_modifier.php" => true,
+                "smarty_cacheresource.php"                                  => true,
+                "smarty_cacheresource_custom.php"                           => true,
+                "smarty_cacheresource_keyvaluestore.php"                    => true,
+                "smarty_config_source.php"                                  => true,
+                "smarty_internal_cacheresource_file.php"                    => true,
+                "smarty_internal_compile_append.php"                        => true,
+                "smarty_internal_compile_assign.php"                        => true,
+                "smarty_internal_compile_block.php"                         => true,
+                "smarty_internal_compile_break.php"                         => true,
+                "smarty_internal_compile_call.php"                          => true,
+                "smarty_internal_compile_capture.php"                       => true,
+                "smarty_internal_compile_config_load.php"                   => true,
+                "smarty_internal_compile_continue.php"                      => true,
+                "smarty_internal_compile_debug.php"                         => true,
+                "smarty_internal_compile_eval.php"                          => true,
+                "smarty_internal_compile_extends.php"                       => true,
+                "smarty_internal_compile_for.php"                           => true,
+                "smarty_internal_compile_foreach.php"                       => true,
+                "smarty_internal_compile_function.php"                      => true,
+                "smarty_internal_compile_if.php"                            => true,
+                "smarty_internal_compile_include.php"                       => true,
+                "smarty_internal_compile_include_php.php"                   => true,
+                "smarty_internal_compile_insert.php"                        => true,
+                "smarty_internal_compile_ldelim.php"                        => true,
+                "smarty_internal_compile_nocache.php"                       => true,
+                "smarty_internal_compile_private_block_plugin.php"          => true,
+                "smarty_internal_compile_private_function_plugin.php"       => true,
+                "smarty_internal_compile_private_modifier.php"              => true,
                 "smarty_internal_compile_private_object_block_function.php" => true,
-                "smarty_internal_compile_private_object_function.php" => true,
-                "smarty_internal_compile_private_print_expression.php" => true,
-                "smarty_internal_compile_private_registered_block.php" => true,
-                "smarty_internal_compile_private_registered_function.php" => true,
-                "smarty_internal_compile_private_special_variable.php" => true,
-                "smarty_internal_compile_rdelim.php" => true,
-                "smarty_internal_compile_section.php" => true,
-                "smarty_internal_compile_setfilter.php" => true,
-                "smarty_internal_compile_while.php" => true,
-                "smarty_internal_compilebase.php" => true,
-                "smarty_internal_config.php" => true,
-                "smarty_internal_config_file_compiler.php" => true,
-                "smarty_internal_configfilelexer.php" => true,
-                "smarty_internal_configfileparser.php" => true,
-                "smarty_internal_data.php" => true,
-                "smarty_internal_debug.php" => true,
-                "smarty_internal_filter_handler.php" => true,
-                "smarty_internal_function_call_handler.php" => true,
-                "smarty_internal_get_include_path.php" => true,
-                "smarty_internal_nocache_insert.php" => true,
-                "smarty_internal_parsetree.php" => true,
-                "smarty_internal_resource_eval.php" => true,
-                "smarty_internal_resource_extends.php" => true,
-                "smarty_internal_resource_file.php" => true,
-                "smarty_internal_resource_registered.php" => true,
-                "smarty_internal_resource_stream.php" => true,
-                "smarty_internal_resource_string.php" => true,
-                "smarty_internal_smartytemplatecompiler.php" => true,
-                "smarty_internal_template.php" => true,
-                "smarty_internal_templatebase.php" => true,
-                "smarty_internal_templatecompilerbase.php" => true,
-                "smarty_internal_templatelexer.php" => true,
-                "smarty_internal_templateparser.php" => true,
-                "smarty_internal_utility.php" => true,
-                "smarty_internal_write_file.php" => true,
-                "smarty_resource.php" => true,
-                "smarty_resource_custom.php" => true,
-                "smarty_resource_recompiled.php" => true,
-                "smarty_resource_uncompiled.php" => true,
-                "smarty_security.php" => true,
+                "smarty_internal_compile_private_object_function.php"       => true,
+                "smarty_internal_compile_private_print_expression.php"      => true,
+                "smarty_internal_compile_private_registered_block.php"      => true,
+                "smarty_internal_compile_private_registered_function.php"   => true,
+                "smarty_internal_compile_private_special_variable.php"      => true,
+                "smarty_internal_compile_rdelim.php"                        => true,
+                "smarty_internal_compile_section.php"                       => true,
+                "smarty_internal_compile_setfilter.php"                     => true,
+                "smarty_internal_compile_while.php"                         => true,
+                "smarty_internal_compilebase.php"                           => true,
+                "smarty_internal_config.php"                                => true,
+                "smarty_internal_config_file_compiler.php"                  => true,
+                "smarty_internal_configfilelexer.php"                       => true,
+                "smarty_internal_configfileparser.php"                      => true,
+                "smarty_internal_data.php"                                  => true,
+                "smarty_internal_debug.php"                                 => true,
+                "smarty_internal_filter_handler.php"                        => true,
+                "smarty_internal_function_call_handler.php"                 => true,
+                "smarty_internal_get_include_path.php"                      => true,
+                "smarty_internal_nocache_insert.php"                        => true,
+                "smarty_internal_parsetree.php"                             => true,
+                "smarty_internal_resource_eval.php"                         => true,
+                "smarty_internal_resource_extends.php"                      => true,
+                "smarty_internal_resource_file.php"                         => true,
+                "smarty_internal_resource_registered.php"                   => true,
+                "smarty_internal_resource_stream.php"                       => true,
+                "smarty_internal_resource_string.php"                       => true,
+                "smarty_internal_smartytemplatecompiler.php"                => true,
+                "smarty_internal_template.php"                              => true,
+                "smarty_internal_templatebase.php"                          => true,
+                "smarty_internal_templatecompilerbase.php"                  => true,
+                "smarty_internal_templatelexer.php"                         => true,
+                "smarty_internal_templateparser.php"                        => true,
+                "smarty_internal_utility.php"                               => true,
+                "smarty_internal_write_file.php"                            => true,
+                "smarty_resource.php"                                       => true,
+                "smarty_resource_custom.php"                                => true,
+                "smarty_resource_recompiled.php"                            => true,
+                "smarty_resource_uncompiled.php"                            => true,
+                "smarty_security.php"                                       => true,
             );
             $iterator = new DirectoryIterator($source);
             foreach ($iterator as $file) {
@@ -713,7 +723,7 @@ class Smarty_Internal_Utility {
             }
             if ($expected) {
                 $status = false;
-                $message = "FAILED: files missing from libs/sysplugins: ". join(', ', array_keys($expected));
+                $message = "FAILED: files missing from libs/sysplugins: " . join(', ', array_keys($expected));
                 if ($errors === null) {
                     echo $message . ".\n";
                 } else {
@@ -724,7 +734,7 @@ class Smarty_Internal_Utility {
             }
         } else {
             $status = false;
-            $message = "FAILED: ". SMARTY_SYSPLUGINS_DIR .' is not a directory';
+            $message = "FAILED: " . SMARTY_SYSPLUGINS_DIR . ' is not a directory';
             if ($errors === null) {
                 echo $message . ".\n";
             } else {
@@ -739,53 +749,53 @@ class Smarty_Internal_Utility {
         $source = SMARTY_PLUGINS_DIR;
         if (is_dir($source)) {
             $expected = array(
-                "block.textformat.php" => true,
-                "function.counter.php" => true,
-                "function.cycle.php" => true,
-                "function.fetch.php" => true,
-                "function.html_checkboxes.php" => true,
-                "function.html_image.php" => true,
-                "function.html_options.php" => true,
-                "function.html_radios.php" => true,
-                "function.html_select_date.php" => true,
-                "function.html_select_time.php" => true,
-                "function.html_table.php" => true,
-                "function.mailto.php" => true,
-                "function.math.php" => true,
-                "modifier.capitalize.php" => true,
-                "modifier.date_format.php" => true,
-                "modifier.debug_print_var.php" => true,
-                "modifier.escape.php" => true,
-                "modifier.regex_replace.php" => true,
-                "modifier.replace.php" => true,
-                "modifier.spacify.php" => true,
-                "modifier.truncate.php" => true,
-                "modifiercompiler.cat.php" => true,
+                "block.textformat.php"                  => true,
+                "function.counter.php"                  => true,
+                "function.cycle.php"                    => true,
+                "function.fetch.php"                    => true,
+                "function.html_checkboxes.php"          => true,
+                "function.html_image.php"               => true,
+                "function.html_options.php"             => true,
+                "function.html_radios.php"              => true,
+                "function.html_select_date.php"         => true,
+                "function.html_select_time.php"         => true,
+                "function.html_table.php"               => true,
+                "function.mailto.php"                   => true,
+                "function.math.php"                     => true,
+                "modifier.capitalize.php"               => true,
+                "modifier.date_format.php"              => true,
+                "modifier.debug_print_var.php"          => true,
+                "modifier.escape.php"                   => true,
+                "modifier.regex_replace.php"            => true,
+                "modifier.replace.php"                  => true,
+                "modifier.spacify.php"                  => true,
+                "modifier.truncate.php"                 => true,
+                "modifiercompiler.cat.php"              => true,
                 "modifiercompiler.count_characters.php" => true,
                 "modifiercompiler.count_paragraphs.php" => true,
-                "modifiercompiler.count_sentences.php" => true,
-                "modifiercompiler.count_words.php" => true,
-                "modifiercompiler.default.php" => true,
-                "modifiercompiler.escape.php" => true,
-                "modifiercompiler.from_charset.php" => true,
-                "modifiercompiler.indent.php" => true,
-                "modifiercompiler.lower.php" => true,
-                "modifiercompiler.noprint.php" => true,
-                "modifiercompiler.string_format.php" => true,
-                "modifiercompiler.strip.php" => true,
-                "modifiercompiler.strip_tags.php" => true,
-                "modifiercompiler.to_charset.php" => true,
-                "modifiercompiler.unescape.php" => true,
-                "modifiercompiler.upper.php" => true,
-                "modifiercompiler.wordwrap.php" => true,
-                "outputfilter.trimwhitespace.php" => true,
-                "shared.escape_special_chars.php" => true,
-                "shared.literal_compiler_param.php" => true,
-                "shared.make_timestamp.php" => true,
-                "shared.mb_str_replace.php" => true,
-                "shared.mb_unicode.php" => true,
-                "shared.mb_wordwrap.php" => true,
-                "variablefilter.htmlspecialchars.php" => true,
+                "modifiercompiler.count_sentences.php"  => true,
+                "modifiercompiler.count_words.php"      => true,
+                "modifiercompiler.default.php"          => true,
+                "modifiercompiler.escape.php"           => true,
+                "modifiercompiler.from_charset.php"     => true,
+                "modifiercompiler.indent.php"           => true,
+                "modifiercompiler.lower.php"            => true,
+                "modifiercompiler.noprint.php"          => true,
+                "modifiercompiler.string_format.php"    => true,
+                "modifiercompiler.strip.php"            => true,
+                "modifiercompiler.strip_tags.php"       => true,
+                "modifiercompiler.to_charset.php"       => true,
+                "modifiercompiler.unescape.php"         => true,
+                "modifiercompiler.upper.php"            => true,
+                "modifiercompiler.wordwrap.php"         => true,
+                "outputfilter.trimwhitespace.php"       => true,
+                "shared.escape_special_chars.php"       => true,
+                "shared.literal_compiler_param.php"     => true,
+                "shared.make_timestamp.php"             => true,
+                "shared.mb_str_replace.php"             => true,
+                "shared.mb_unicode.php"                 => true,
+                "shared.mb_wordwrap.php"                => true,
+                "variablefilter.htmlspecialchars.php"   => true,
             );
             $iterator = new DirectoryIterator($source);
             foreach ($iterator as $file) {
@@ -798,7 +808,7 @@ class Smarty_Internal_Utility {
             }
             if ($expected) {
                 $status = false;
-                $message = "FAILED: files missing from libs/plugins: ". join(', ', array_keys($expected));
+                $message = "FAILED: files missing from libs/plugins: " . join(', ', array_keys($expected));
                 if ($errors === null) {
                     echo $message . ".\n";
                 } else {
@@ -809,7 +819,7 @@ class Smarty_Internal_Utility {
             }
         } else {
             $status = false;
-            $message = "FAILED: ". SMARTY_PLUGINS_DIR .' is not a directory';
+            $message = "FAILED: " . SMARTY_PLUGINS_DIR . ' is not a directory';
             if ($errors === null) {
                 echo $message . ".\n";
             } else {
@@ -824,7 +834,4 @@ class Smarty_Internal_Utility {
 
         return $status;
     }
-
 }
-
-?>
\ No newline at end of file
index e5d19ce8d6842c3314a5c45066a1358f6e1fbca7..f46fe2b6c77177f3a2eb28044db608c42212cb71 100644 (file)
@@ -2,25 +2,27 @@
 /**
  * Smarty write file plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsInternal
- * @author Monte Ohrt
+ * @author     Monte Ohrt
  */
 
 /**
  * Smarty Internal Write File Class
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage PluginsInternal
  */
-class Smarty_Internal_Write_File {
-
+class Smarty_Internal_Write_File
+{
     /**
      * Writes file in a safe way to disk
      *
-     * @param string $_filepath complete filepath
-     * @param string $_contents file content
-     * @param Smarty $smarty    smarty instance
+     * @param  string $_filepath complete filepath
+     * @param  string $_contents file content
+     * @param  Smarty $smarty    smarty instance
+     *
+     * @throws SmartyException
      * @return boolean true
      */
     public static function writeFile($_filepath, $_contents, Smarty $smarty)
@@ -38,17 +40,16 @@ class Smarty_Internal_Write_File {
         }
 
         // write to tmp file, then move to overt file lock race condition
-        $_tmp_file = $_dirpath . DS . uniqid('wrt', true);
+        $_tmp_file = $_dirpath . DS . str_replace(array('.', ','), '_', uniqid('wrt', true));
         if (!file_put_contents($_tmp_file, $_contents)) {
             error_reporting($_error_reporting);
             throw new SmartyException("unable to write file {$_tmp_file}");
-            return false;
-        }
-        
+       }
+
         /*
          * Windows' rename() fails if the destination exists,
          * Linux' rename() properly handles the overwrite.
-         * Simply unlink()ing a file might cause other processes 
+         * Simply unlink()ing a file might cause other processes
          * currently reading that file to fail, but linux' rename()
          * seems to be smart enough to handle that for us.
          */
@@ -71,7 +72,6 @@ class Smarty_Internal_Write_File {
         if (!$success) {
             error_reporting($_error_reporting);
             throw new SmartyException("unable to write file {$_filepath}");
-            return false;
         }
 
         if ($smarty->_file_perms !== null) {
@@ -80,9 +80,7 @@ class Smarty_Internal_Write_File {
             umask($old_umask);
         }
         error_reporting($_error_reporting);
+
         return true;
     }
-
 }
-
-?>
\ No newline at end of file
index f79373af3cd406b3fedd3c614f993a3692f77071..f478a533d2e8d317a56b8b0220ab71441be31b72 100644 (file)
@@ -2,84 +2,91 @@
 /**
  * Smarty Resource Plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author     Rodney Rehm
  */
 
 /**
  * Smarty Resource Plugin
- *
  * Base implementation for resource plugins
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
  */
-abstract class Smarty_Resource {
+abstract class Smarty_Resource
+{
     /**
      * cache for Smarty_Template_Source instances
+     *
      * @var array
      */
     public static $sources = array();
     /**
      * cache for Smarty_Template_Compiled instances
+     *
      * @var array
      */
     public static $compileds = array();
     /**
      * cache for Smarty_Resource instances
+     *
      * @var array
      */
     public static $resources = array();
     /**
      * resource types provided by the core
+     *
      * @var array
      */
     protected static $sysplugins = array(
-        'file' => true,
-        'string' => true,
+        'file'    => true,
+        'string'  => true,
         'extends' => true,
-        'stream' => true,
-        'eval' => true,
-        'php' => true
+        'stream'  => true,
+        'eval'    => true,
+        'php'     => true
     );
 
     /**
      * Name of the Class to compile this resource's contents with
+     *
      * @var string
      */
     public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler';
 
     /**
      * Name of the Class to tokenize this resource's contents with
+     *
      * @var string
      */
     public $template_lexer_class = 'Smarty_Internal_Templatelexer';
 
     /**
      * Name of the Class to parse this resource's contents with
+     *
      * @var string
      */
     public $template_parser_class = 'Smarty_Internal_Templateparser';
 
     /**
      * Load template's source into current template object
-     *
      * {@internal The loaded source is assigned to $_template->source->content directly.}}
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string template source
-     * @throws SmartyException if source cannot be loaded
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 template source
+     * @throws SmartyException        if source cannot be loaded
      */
-    public abstract function getContent(Smarty_Template_Source $source);
+    abstract public function getContent(Smarty_Template_Source $source);
 
     /**
      * populate Source Object with meta data from Resource
      *
-     * @param Smarty_Template_Source   $source source object
-     * @param Smarty_Internal_Template $_template     template object
+     * @param Smarty_Template_Source   $source    source object
+     * @param Smarty_Internal_Template $_template template object
      */
-    public abstract function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null);
+    abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null);
 
     /**
      * populate Source Object with timestamp and exists from Resource
@@ -91,17 +98,22 @@ abstract class Smarty_Resource {
         // intentionally left blank
     }
 
-
     /**
      * modify resource_name according to resource handlers specifications
      *
-     * @param Smarty $smarty        Smarty instance
-     * @param string $resource_name resource_name to make unique
+     * @param  Smarty  $smarty        Smarty instance
+     * @param  string  $resource_name resource_name to make unique
+     * @param  boolean $is_config     flag for config resource
+     *
      * @return string unique resource name
      */
-    protected function buildUniqueResourceName(Smarty $smarty, $resource_name)
+    protected function buildUniqueResourceName(Smarty $smarty, $resource_name, $is_config = false)
     {
-        return get_class($this) . '#' . $smarty->joined_template_dir . '#' . $resource_name;
+        if ($is_config) {
+            return get_class($this) . '#' . $smarty->joined_config_dir . '#' . $resource_name;
+        } else {
+            return get_class($this) . '#' . $smarty->joined_template_dir . '#' . $resource_name;
+        }
     }
 
     /**
@@ -117,9 +129,9 @@ abstract class Smarty_Resource {
         // if use_sub_dirs, break file into directories
         if ($_template->smarty->use_sub_dirs) {
             $_filepath = substr($_filepath, 0, 2) . DS
-             . substr($_filepath, 2, 2) . DS
-             . substr($_filepath, 4, 2) . DS
-             . $_filepath;
+                . substr($_filepath, 2, 2) . DS
+                . substr($_filepath, 4, 2) . DS
+                . $_filepath;
         }
         $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';
         if (isset($_compile_id)) {
@@ -135,7 +147,7 @@ abstract class Smarty_Resource {
         // set basename if not specified
         $_basename = $this->getBasename($compiled->source);
         if ($_basename === null) {
-            $_basename = basename( preg_replace('![^\w\/]+!', '_', $compiled->source->name) );
+            $_basename = basename(preg_replace('![^\w\/]+!', '_', $compiled->source->name));
         }
         // separate (optional) basename by dot
         if ($_basename) {
@@ -144,59 +156,63 @@ abstract class Smarty_Resource {
 
         $compiled->filepath = $_compile_dir . $_filepath . '.' . $compiled->source->type . $_basename . $_cache . '.php';
     }
-    
+
     /**
-     * Normalize Paths "foo/../bar" to "bar" 
+     * Normalize Paths "foo/../bar" to "bar"
+     *
+     * @param  string  $_path path to normalize
+     * @param  boolean $ds    respect windows directory separator
      *
-     * @param string $_path path to normalize
-     * @param boolean $ds respect windows directory separator
-     * @return string normalized path
+     * @return string  normalized path
      */
-    protected function normalizePath($_path, $ds=true)
+    protected function normalizePath($_path, $ds = true)
     {
         if ($ds) {
             // don't we all just love windows?
             $_path = str_replace('\\', '/', $_path);
         }
-        
+
+        $offset = 0;
+
         // resolve simples
-        $_path = preg_replace('#(/\./(\./)*)|/{2,}#', '/', $_path);
+        $_path = preg_replace('#/\./(\./)*#', '/', $_path);
         // resolve parents
         while (true) {
-            $_parent = strpos($_path, '/../');
-            if ($_parent === false) {
-                break;
-            } else if ($_parent === 0) {
-                $_path = substr($_path, 3);
+            $_parent = strpos($_path, '/../', $offset);
+            if (!$_parent) {
                 break;
+            } elseif ($_path[$_parent - 1] === '.') {
+                $offset = $_parent + 3;
+                continue;
             }
-            
+
             $_pos = strrpos($_path, '/', $_parent - strlen($_path) - 1);
             if ($_pos === false) {
                 // don't we all just love windows?
                 $_pos = $_parent;
             }
-            
+
             $_path = substr_replace($_path, '', $_pos, $_parent + 3 - $_pos);
         }
-        
+
         if ($ds && DS != '/') {
             // don't we all just love windows?
             $_path = str_replace('/', '\\', $_path);
         }
-        
+
         return $_path;
     }
-    
+
     /**
      * build template filepath by traversing the template_dir array
      *
-     * @param Smarty_Template_Source   $source    source object
-     * @param Smarty_Internal_Template $_template template object
-     * @return string fully qualified filepath
-     * @throws SmartyException if default template handler is registered but not callable
+     * @param  Smarty_Template_Source   $source    source object
+     * @param  Smarty_Internal_Template $_template template object
+     *
+     * @return string                   fully qualified filepath
+     * @throws SmartyException          if default template handler is registered but not callable
      */
-    protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+    protected function buildFilepath(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
         $file = $source->name;
         if ($source instanceof Smarty_Config_Source) {
@@ -225,8 +241,6 @@ abstract class Smarty_Resource {
         // resolve relative path
         if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) {
             // don't we all just love windows?
-            $_path = str_replace('\\', '/', $file);
-            $_was_relative_prefix = $file[0] == '.' ? substr($file, 0, strpos($_path, '/')) : null;
             $_path = DS . trim($file, '/');
             $_was_relative = true;
         } else {
@@ -240,11 +254,7 @@ abstract class Smarty_Resource {
         }
         // revert to relative
         if (isset($_was_relative)) {
-            if (isset($_was_relative_prefix)){
-                $_path = $_was_relative_prefix . $_path;
-            } else {
-                $_path = substr($_path, 1);
-            }
+            $_path = substr($_path, 1);
         }
 
         // this is only required for directories
@@ -261,7 +271,7 @@ abstract class Smarty_Resource {
             // try string indexes
             if (isset($_directories[$match['key']])) {
                 $_directory = $_directories[$match['key']];
-            } else if (is_numeric($match['key'])) {
+            } elseif (is_numeric($match['key'])) {
                 // try numeric index
                 $match['key'] = (int) $match['key'];
                 if (isset($_directories[$match['key']])) {
@@ -323,15 +333,17 @@ abstract class Smarty_Resource {
                 }
             }
             $_return = call_user_func_array($_default_handler,
-                array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty));
+                                            array($source->type, $source->name, &$_content, &$_timestamp, $source->smarty));
             if (is_string($_return)) {
                 $source->timestamp = @filemtime($_return);
                 $source->exists = !!$source->timestamp;
+
                 return $_return;
             } elseif ($_return === true) {
                 $source->content = $_content;
                 $source->timestamp = $_timestamp;
                 $source->exists = true;
+
                 return $_filepath;
             }
         }
@@ -343,22 +355,24 @@ abstract class Smarty_Resource {
     /**
      * test is file exists and save timestamp
      *
-     * @param Smarty_Template_Source   $source    source object
-     * @param string $file file name
-     * @return bool  true if file exists
+     * @param  Smarty_Template_Source $source source object
+     * @param  string                 $file   file name
+     *
+     * @return bool                   true if file exists
      */
     protected function fileExists(Smarty_Template_Source $source, $file)
     {
-        $source->timestamp = @filemtime($file);
-        return $source->exists = !!$source->timestamp;
+        $source->timestamp = is_file($file) ? @filemtime($file) : false;
 
+        return $source->exists = !!$source->timestamp;
     }
 
     /**
      * Determine basename for compiled filename
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string resource's basename
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 resource's basename
      */
     protected function getBasename(Smarty_Template_Source $source)
     {
@@ -368,8 +382,10 @@ abstract class Smarty_Resource {
     /**
      * Load Resource Handler
      *
-     * @param Smarty $smarty    smarty object
-     * @param string $type      name of the resource
+     * @param  Smarty $smarty smarty object
+     * @param  string $type   name of the resource
+     *
+     * @throws SmartyException
      * @return Smarty_Resource Resource Handler
      */
     public static function load(Smarty $smarty, $type)
@@ -403,6 +419,7 @@ abstract class Smarty_Resource {
                 $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type);
                 self::$resources[$type] = new $_resource_class();
             }
+
             return $smarty->_resource_handlers[$type] = self::$resources[$type];
         }
 
@@ -415,6 +432,7 @@ abstract class Smarty_Resource {
 
             if (class_exists($_resource_class, false)) {
                 self::$resources[$type] = new $_resource_class();
+
                 return $smarty->_resource_handlers[$type] = self::$resources[$type];
             } else {
                 $smarty->registerResource($type, array(
@@ -439,23 +457,25 @@ abstract class Smarty_Resource {
             if (!isset(self::$resources['stream'])) {
                 self::$resources['stream'] = new Smarty_Internal_Resource_Stream();
             }
+
             return $smarty->_resource_handlers[$type] = self::$resources['stream'];
         }
 
         // TODO: try default_(template|config)_handler
 
         // give up
-        throw new SmartyException("Unkown resource type '{$type}'");
+        throw new SmartyException("Unknown resource type '{$type}'");
     }
 
     /**
      * extract resource_type and resource_name from template_resource and config_resource
-     *
      * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including).
-     * @param string  $resource_name    template_resource or config_resource to parse
-     * @param string  $default_resource the default resource_type defined in $smarty
-     * @param string &$name             the parsed resource name
-     * @param string &$type             the parsed resource type
+     *
+     * @param  string $resource_name    template_resource or config_resource to parse
+     * @param  string $default_resource the default resource_type defined in $smarty
+     * @param  string &$name            the parsed resource name
+     * @param  string &$type            the parsed resource type
+     *
      * @return void
      */
     protected static function parseResourceName($resource_name, $default_resource, &$name, &$type)
@@ -472,41 +492,47 @@ abstract class Smarty_Resource {
         }
     }
 
-
     /**
      * modify resource_name according to resource handlers specifications
      *
-     * @param Smarty $smarty        Smarty instance
-     * @param string $resource_name resource_name to make unique
+     * @param  Smarty $smarty        Smarty instance
+     * @param  string $resource_name resource_name to make unique
+     *
      * @return string unique resource name
      */
 
     /**
      * modify template_resource according to resource handlers specifications
      *
-     * @param string $smarty            Smarty instance
-     * @param string $template_resource template_resource to extracate resource handler and name of
+     * @param  Smarty_Internal_template $template          Smarty instance
+     * @param  string                   $template_resource template_resource to extract resource handler and name of
+     *
      * @return string unique resource name
      */
-    public static function getUniqueTemplateName($smarty, $template_resource)
+    public static function getUniqueTemplateName($template, $template_resource)
     {
-        self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type);
+        self::parseResourceName($template_resource, $template->smarty->default_resource_type, $name, $type);
         // TODO: optimize for Smarty's internal resource types
-        $resource = Smarty_Resource::load($smarty, $type);
-        return $resource->buildUniqueResourceName($smarty, $name);
+        $resource = Smarty_Resource::load($template->smarty, $type);
+        // go relative to a given template?
+        $_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/' || $name[1] == "\\");
+        if ($template instanceof Smarty_Internal_Template && $_file_is_dotted && ($template->source->type == 'file' || $template->parent->source->type == 'extends')) {
+            $name = dirname($template->source->filepath) . DS . $name;
+        }
+        return $resource->buildUniqueResourceName($template->smarty, $name);
     }
 
     /**
      * initialize Source Object for given resource
-     *
      * Either [$_template] or [$smarty, $template_resource] must be specified
      *
-     * @param Smarty_Internal_Template $_template         template object
-     * @param Smarty                   $smarty            smarty object
-     * @param string                   $template_resource resource identifier
-     * @return Smarty_Template_Source Source Object
+     * @param  Smarty_Internal_Template $_template         template object
+     * @param  Smarty                   $smarty            smarty object
+     * @param  string                   $template_resource resource identifier
+     *
+     * @return Smarty_Template_Source   Source Object
      */
-    public static function source(Smarty_Internal_Template $_template=null, Smarty $smarty=null, $template_resource=null)
+    public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null)
     {
         if ($_template) {
             $smarty = $_template->smarty;
@@ -516,12 +542,19 @@ abstract class Smarty_Resource {
         // parse resource_name, load resource handler, identify unique resource name
         self::parseResourceName($template_resource, $smarty->default_resource_type, $name, $type);
         $resource = Smarty_Resource::load($smarty, $type);
-        $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name);
+        // go relative to a given template?
+        $_file_is_dotted = isset($name[0]) && $name[0] == '.' && ($name[1] == '.' || $name[1] == '/' || $name[1] == "\\");
+        if ($_file_is_dotted && isset($_template) && $_template->parent instanceof Smarty_Internal_Template && ($_template->parent->source->type == 'file' || $_template->parent->source->type == 'extends')) {
+            $name2 = dirname($_template->parent->source->filepath) . DS . $name;
+        } else {
+            $name2 = $name;
+        }
+        $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name2);
 
         // check runtime cache
         $_cache_key = 'template|' . $unique_resource_name;
         if ($smarty->compile_id) {
-            $_cache_key .= '|'.$smarty->compile_id;
+            $_cache_key .= '|' . $smarty->compile_id;
         }
         if (isset(self::$sources[$_cache_key])) {
             return self::$sources[$_cache_key];
@@ -533,14 +566,17 @@ abstract class Smarty_Resource {
 
         // runtime cache
         self::$sources[$_cache_key] = $source;
+
         return $source;
     }
 
     /**
      * initialize Config Source Object for given resource
      *
-     * @param Smarty_Internal_Config $_config config object
-     * @return Smarty_Config_Source Source Object
+     * @param  Smarty_Internal_Config $_config config object
+     *
+     * @throws SmartyException
+     * @return Smarty_Config_Source   Source Object
      */
     public static function config(Smarty_Internal_Config $_config)
     {
@@ -558,7 +594,7 @@ abstract class Smarty_Resource {
 
         // load resource handler, identify unique resource name
         $resource = Smarty_Resource::load($smarty, $type);
-        $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name);
+        $unique_resource_name = $resource->buildUniqueResourceName($smarty, $name, true);
 
         // check runtime cache
         $_cache_key = 'config|' . $unique_resource_name;
@@ -572,107 +608,119 @@ abstract class Smarty_Resource {
 
         // runtime cache
         self::$sources[$_cache_key] = $source;
+
         return $source;
     }
-
 }
 
 /**
  * Smarty Resource Data Object
- *
  * Meta Data Container for Template Files
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Rodney Rehm
- *
+ * @author     Rodney Rehm
  * @property integer $timestamp Source Timestamp
- * @property boolean $exists    Source Existance
+ * @property boolean $exists    Source Existence
  * @property boolean $template  Extended Template reference
  * @property string  $content   Source Content
  */
-class Smarty_Template_Source {
-
+class Smarty_Template_Source
+{
     /**
      * Name of the Class to compile this resource's contents with
+     *
      * @var string
      */
     public $compiler_class = null;
 
     /**
      * Name of the Class to tokenize this resource's contents with
+     *
      * @var string
      */
     public $template_lexer_class = null;
 
     /**
      * Name of the Class to parse this resource's contents with
+     *
      * @var string
      */
     public $template_parser_class = null;
 
     /**
      * Unique Template ID
+     *
      * @var string
      */
     public $uid = null;
 
     /**
      * Template Resource (Smarty_Internal_Template::$template_resource)
+     *
      * @var string
      */
     public $resource = null;
 
     /**
      * Resource Type
+     *
      * @var string
      */
     public $type = null;
 
     /**
      * Resource Name
+     *
      * @var string
      */
     public $name = null;
 
     /**
      * Unique Resource Name
+     *
      * @var string
      */
     public $unique_resource = null;
 
     /**
      * Source Filepath
+     *
      * @var string
      */
     public $filepath = null;
 
     /**
      * Source is bypassing compiler
+     *
      * @var boolean
      */
     public $uncompiled = null;
 
     /**
      * Source must be recompiled on every occasion
+     *
      * @var boolean
      */
     public $recompiled = null;
 
     /**
      * The Components an extended template is made of
+     *
      * @var array
      */
     public $components = null;
 
     /**
      * Resource Handler
+     *
      * @var Smarty_Resource
      */
     public $handler = null;
 
     /**
      * Smarty instance
+     *
      * @var Smarty
      */
     public $smarty = null;
@@ -680,12 +728,12 @@ class Smarty_Template_Source {
     /**
      * create Source Object container
      *
-     * @param Smarty_Resource $handler          Resource Handler this source object communicates with
-     * @param Smarty          $smarty           Smarty instance this source object belongs to
-     * @param string          $resource         full template_resource
-     * @param string          $type             type of resource
-     * @param string          $name             resource name
-     * @param string          $unique_resource  unqiue resource name
+     * @param Smarty_Resource $handler         Resource Handler this source object communicates with
+     * @param Smarty          $smarty          Smarty instance this source object belongs to
+     * @param string          $resource        full template_resource
+     * @param string          $type            type of resource
+     * @param string          $name            resource name
+     * @param string          $unique_resource unique resource name
      */
     public function __construct(Smarty_Resource $handler, Smarty $smarty, $resource, $type, $name, $unique_resource)
     {
@@ -707,10 +755,11 @@ class Smarty_Template_Source {
     /**
      * get a Compiled Object of this source
      *
-     * @param Smarty_Internal_Template $_template template objet
+     * @param  Smarty_Internal_Template|Smarty_Internal_Config $_template template object
+     *
      * @return Smarty_Template_Compiled compiled object
      */
-    public function getCompiled(Smarty_Internal_Template $_template)
+    public function getCompiled($_template)
     {
         // check runtime cache
         $_cache_key = $this->unique_resource . '#' . $_template->compile_id;
@@ -742,8 +791,9 @@ class Smarty_Template_Source {
     /**
      * <<magic>> Generic Setter.
      *
-     * @param string $property_name valid: timestamp, exists, content, template
-     * @param mixed  $value        new value (is not checked)
+     * @param  string $property_name valid: timestamp, exists, content, template
+     * @param  mixed  $value         new value (is not checked)
+     *
      * @throws SmartyException if $property_name is not valid
      */
     public function __set($property_name, $value)
@@ -753,7 +803,7 @@ class Smarty_Template_Source {
             case 'timestamp':
             case 'exists':
             case 'content':
-            // required for extends: only
+                // required for extends: only
             case 'template':
                 $this->$property_name = $value;
                 break;
@@ -766,7 +816,8 @@ class Smarty_Template_Source {
     /**
      * <<magic>> Generic getter.
      *
-     * @param string $property_name valid: timestamp, exists, content
+     * @param  string $property_name valid: timestamp, exists, content
+     *
      * @return mixed
      * @throws SmartyException if $property_name is not valid
      */
@@ -776,6 +827,7 @@ class Smarty_Template_Source {
             case 'timestamp':
             case 'exists':
                 $this->handler->populateTimestamp($this);
+
                 return $this->$property_name;
 
             case 'content':
@@ -785,62 +837,65 @@ class Smarty_Template_Source {
                 throw new SmartyException("source property '$property_name' does not exist.");
         }
     }
-
 }
 
 /**
  * Smarty Resource Data Object
- *
  * Meta Data Container for Template Files
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Rodney Rehm
- *
+ * @author     Rodney Rehm
  * @property string $content compiled content
  */
-class Smarty_Template_Compiled {
-
+class Smarty_Template_Compiled
+{
     /**
      * Compiled Filepath
+     *
      * @var string
      */
     public $filepath = null;
 
     /**
      * Compiled Timestamp
+     *
      * @var integer
      */
     public $timestamp = null;
 
     /**
-     * Compiled Existance
+     * Compiled Existence
+     *
      * @var boolean
      */
     public $exists = false;
 
     /**
      * Compiled Content Loaded
+     *
      * @var boolean
      */
     public $loaded = false;
 
     /**
      * Template was compiled
+     *
      * @var boolean
      */
     public $isCompiled = false;
 
     /**
      * Source Object
+     *
      * @var Smarty_Template_Source
      */
     public $source = null;
 
     /**
      * Metadata properties
-     *
      * populated by Smarty_Internal_Template::decodeProperties()
+     *
      * @var array
      */
     public $_properties = null;
@@ -854,7 +909,4 @@ class Smarty_Template_Compiled {
     {
         $this->source = $source;
     }
-
 }
-
-?>
\ No newline at end of file
index 9ec1f356b3b96ffd9f38b17efd3194bc6ce81081..7c11bd8c72ad33ced46329684bf0a7be240b9a93 100644 (file)
@@ -2,21 +2,20 @@
 /**
  * Smarty Resource Plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author     Rodney Rehm
  */
 
 /**
  * Smarty Resource Plugin
- *
  * Wrapper Implementation for custom resource plugins
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
  */
-abstract class Smarty_Resource_Custom extends Smarty_Resource {
-
+abstract class Smarty_Resource_Custom extends Smarty_Resource
+{
     /**
      * fetch template and its modification time from data source
      *
@@ -24,15 +23,15 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
      * @param string  &$source template source
      * @param integer &$mtime  template modification timestamp (epoch)
      */
-    protected abstract function fetch($name, &$source, &$mtime);
+    abstract protected function fetch($name, &$source, &$mtime);
 
     /**
      * Fetch template's modification timestamp from data source
-     *
      * {@internal implementing this method is optional.
      *  Only implement it if modification times can be accessed faster than loading the complete template source.}}
      *
-     * @param string $name template name
+     * @param  string $name template name
+     *
      * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
      */
     protected function fetchTimestamp($name)
@@ -46,9 +45,9 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
      * @param Smarty_Template_Source   $source    source object
      * @param Smarty_Internal_Template $_template template object
      */
-    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template=null)
+    public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
     {
-        $source->filepath = strtolower($source->type . ':' . $source->name);
+        $source->filepath = $source->type . ':' . $source->name;
         $source->uid = sha1($source->type . ':' . $source->name);
 
         $mtime = $this->fetchTimestamp($source->name);
@@ -57,8 +56,9 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
         } else {
             $this->fetch($source->name, $content, $timestamp);
             $source->timestamp = isset($timestamp) ? $timestamp : false;
-            if( isset($content) )
+            if (isset($content)) {
                 $source->content = $content;
+            }
         }
         $source->exists = !!$source->timestamp;
     }
@@ -66,9 +66,10 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
     /**
      * Load template's source into current template object
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string template source
-     * @throws SmartyException if source cannot be loaded
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 template source
+     * @throws SmartyException        if source cannot be loaded
      */
     public function getContent(Smarty_Template_Source $source)
     {
@@ -83,14 +84,12 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource {
     /**
      * Determine basename for compiled filename
      *
-     * @param Smarty_Template_Source $source source object
-     * @return string resource's basename
+     * @param  Smarty_Template_Source $source source object
+     *
+     * @return string                 resource's basename
      */
     protected function getBasename(Smarty_Template_Source $source)
     {
         return basename($source->name);
     }
-
 }
-
-?>
\ No newline at end of file
index ab55b93a604f3a7545d7228168cc671dd1206016..66b36e17a3c790fac876a12ef5d58b8f3cb848a3 100644 (file)
@@ -2,26 +2,26 @@
 /**
  * Smarty Resource Plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author     Rodney Rehm
  */
 
 /**
  * Smarty Resource Plugin
- *
  * Base implementation for resource plugins that don't compile cache
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
  */
-abstract class Smarty_Resource_Recompiled extends Smarty_Resource {
-
+abstract class Smarty_Resource_Recompiled extends Smarty_Resource
+{
     /**
      * populate Compiled Object with compiled filepath
      *
-     * @param Smarty_Template_Compiled $compiled compiled object
-     * @param Smarty_Internal_Template $_template template object
+     * @param  Smarty_Template_Compiled $compiled  compiled object
+     * @param  Smarty_Internal_Template $_template template object
+     *
      * @return void
      */
     public function populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template)
@@ -30,7 +30,4 @@ abstract class Smarty_Resource_Recompiled extends Smarty_Resource {
         $compiled->timestamp = false;
         $compiled->exists = false;
     }
-
 }
-
-?>
\ No newline at end of file
index ea8023507a2e7cba6932a09744fedfd0988e76f0..4ee5d790847dde0c44ce9d3030d093d52909fdcd 100644 (file)
@@ -2,29 +2,29 @@
 /**
  * Smarty Resource Plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
- * @author Rodney Rehm
+ * @author     Rodney Rehm
  */
 
 /**
  * Smarty Resource Plugin
- *
  * Base implementation for resource plugins that don't use the compiler
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage TemplateResources
  */
-abstract class Smarty_Resource_Uncompiled extends Smarty_Resource {
-
+abstract class Smarty_Resource_Uncompiled extends Smarty_Resource
+{
     /**
      * Render and output the template (without using the compiler)
      *
-     * @param Smarty_Template_Source   $source    source object
-     * @param Smarty_Internal_Template $_template template object
-     * @throws SmartyException on failure
+     * @param  Smarty_Template_Source   $source    source object
+     * @param  Smarty_Internal_Template $_template template object
+     *
+     * @throws SmartyException          on failure
      */
-    public abstract function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template);
+    abstract public function renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template);
 
     /**
      * populate compiled object with compiled filepath
@@ -38,7 +38,4 @@ abstract class Smarty_Resource_Uncompiled extends Smarty_Resource {
         $compiled->timestamp = false;
         $compiled->exists = false;
     }
-
 }
-
-?>
\ No newline at end of file
index f8b31d963240ed48eb4227b11f0e78c95b6c093d..75d8756ec07d01d92ee5d3d8fde342debcc3e42a 100644 (file)
@@ -2,25 +2,25 @@
 /**
  * Smarty plugin
  *
- * @package Smarty
+ * @package    Smarty
  * @subpackage Security
- * @author Uwe Tews
+ * @author     Uwe Tews
  */
+
 /*
  * FIXME: Smarty_Security API
  *      - getter and setter instead of public properties would allow cultivating an internal cache properly
  *      - current implementation of isTrustedResourceDir() assumes that Smarty::$template_dir and Smarty::$config_dir are immutable
  *        the cache is killed every time either of the variables change. That means that two distinct Smarty objects with differing
- *        $template_dir or $config_dir should NOT share the same Smarty_Security instance, 
- *        as this would lead to (severe) performance penalty! how should this be handled? 
+ *        $template_dir or $config_dir should NOT share the same Smarty_Security instance,
+ *        as this would lead to (severe) performance penalty! how should this be handled?
  */
 
 /**
  * This class does contain the security settings
  */
-class Smarty_Security {
-
+class Smarty_Security
+{
     /**
      * This determines how Smarty handles "<?php ... ?>" tags in templates.
      * possible values:
@@ -56,17 +56,17 @@ class Smarty_Security {
     public $trusted_uri = array();
     /**
      * This is an array of trusted static classes.
-     *
      * If empty access to all static classes is allowed.
      * If set to 'none' none is allowed.
+     *
      * @var array
      */
     public $static_classes = array();
     /**
      * This is an array of trusted PHP functions.
-     *
      * If empty all functions are allowed.
      * To disable all PHP functions set $php_functions = null.
+     *
      * @var array
      */
     public $php_functions = array(
@@ -77,10 +77,10 @@ class Smarty_Security {
         'nl2br',
     );
     /**
-     * This is an array of trusted PHP modifers.
-     *
+     * This is an array of trusted PHP modifiers.
      * If empty all modifiers are allowed.
      * To disable all modifier set $modifiers = null.
+     *
      * @var array
      */
     public $php_modifiers = array(
@@ -89,83 +89,90 @@ class Smarty_Security {
     );
     /**
      * This is an array of allowed tags.
-     *
      * If empty no restriction by allowed_tags.
+     *
      * @var array
      */
     public $allowed_tags = array();
     /**
      * This is an array of disabled tags.
-     *
      * If empty no restriction by disabled_tags.
+     *
      * @var array
      */
     public $disabled_tags = array();
     /**
      * This is an array of allowed modifier plugins.
-     *
      * If empty no restriction by allowed_modifiers.
+     *
      * @var array
      */
     public $allowed_modifiers = array();
     /**
      * This is an array of disabled modifier plugins.
-     *
      * If empty no restriction by disabled_modifiers.
+     *
      * @var array
      */
     public $disabled_modifiers = array();
     /**
      * This is an array of trusted streams.
-     *
      * If empty all streams are allowed.
      * To disable all streams set $streams = null.
+     *
      * @var array
      */
     public $streams = array('file');
     /**
      * + flag if constants can be accessed from template
+     *
      * @var boolean
      */
     public $allow_constants = true;
     /**
      * + flag if super globals can be accessed from template
+     *
      * @var boolean
      */
     public $allow_super_globals = true;
 
     /**
-     * Cache for $resource_dir lookups
+     * Cache for $resource_dir lookup
+     *
      * @var array
      */
     protected $_resource_dir = null;
     /**
-     * Cache for $template_dir lookups
+     * Cache for $template_dir lookup
+     *
      * @var array
      */
     protected $_template_dir = null;
     /**
-     * Cache for $config_dir lookups
+     * Cache for $config_dir lookup
+     *
      * @var array
      */
     protected $_config_dir = null;
     /**
-     * Cache for $secure_dir lookups
+     * Cache for $secure_dir lookup
+     *
      * @var array
      */
     protected $_secure_dir = null;
     /**
-     * Cache for $php_resource_dir lookups
+     * Cache for $php_resource_dir lookup
+     *
      * @var array
      */
     protected $_php_resource_dir = null;
     /**
-     * Cache for $trusted_dir lookups
+     * Cache for $trusted_dir lookup
+     *
      * @var array
      */
     protected $_trusted_dir = null;
-    
-    
+
     /**
      * @param Smarty $smarty
      */
@@ -173,13 +180,14 @@ class Smarty_Security {
     {
         $this->smarty = $smarty;
     }
-    
+
     /**
      * Check if PHP function is trusted.
      *
-     * @param string $function_name
-     * @param object $compiler compiler object
-     * @return boolean true if function is trusted
+     * @param  string $function_name
+     * @param  object $compiler compiler object
+     *
+     * @return boolean                 true if function is trusted
      * @throws SmartyCompilerException if php function is not trusted
      */
     public function isTrustedPhpFunction($function_name, $compiler)
@@ -189,15 +197,17 @@ class Smarty_Security {
         }
 
         $compiler->trigger_template_error("PHP function '{$function_name}' not allowed by security setting");
+
         return false; // should not, but who knows what happens to the compiler in the future?
     }
 
     /**
      * Check if static class is trusted.
      *
-     * @param string $class_name
-     * @param object $compiler compiler object
-     * @return boolean true if class is trusted
+     * @param  string $class_name
+     * @param  object $compiler compiler object
+     *
+     * @return boolean                 true if class is trusted
      * @throws SmartyCompilerException if static class is not trusted
      */
     public function isTrustedStaticClass($class_name, $compiler)
@@ -207,15 +217,17 @@ class Smarty_Security {
         }
 
         $compiler->trigger_template_error("access to static class '{$class_name}' not allowed by security setting");
+
         return false; // should not, but who knows what happens to the compiler in the future?
     }
 
     /**
      * Check if PHP modifier is trusted.
      *
-     * @param string $modifier_name
-     * @param object $compiler compiler object
-     * @return boolean true if modifier is trusted
+     * @param  string $modifier_name
+     * @param  object $compiler compiler object
+     *
+     * @return boolean                 true if modifier is trusted
      * @throws SmartyCompilerException if modifier is not trusted
      */
     public function isTrustedPhpModifier($modifier_name, $compiler)
@@ -225,22 +237,25 @@ class Smarty_Security {
         }
 
         $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting");
+
         return false; // should not, but who knows what happens to the compiler in the future?
     }
 
     /**
      * Check if tag is trusted.
      *
-     * @param string $tag_name
-     * @param object $compiler compiler object
-     * @return boolean true if tag is trusted
+     * @param  string $tag_name
+     * @param  object $compiler compiler object
+     *
+     * @return boolean                 true if tag is trusted
      * @throws SmartyCompilerException if modifier is not trusted
      */
     public function isTrustedTag($tag_name, $compiler)
     {
         // check for internal always required tags
         if (in_array($tag_name, array('assign', 'call', 'private_filter', 'private_block_plugin', 'private_function_plugin', 'private_object_block_function',
-                    'private_object_function', 'private_registered_function', 'private_registered_block', 'private_special_variable', 'private_print_expression', 'private_modifier'))) {
+                                      'private_object_function', 'private_registered_function', 'private_registered_block', 'private_special_variable', 'private_print_expression', 'private_modifier'))
+        ) {
             return true;
         }
         // check security settings
@@ -250,20 +265,22 @@ class Smarty_Security {
             } else {
                 $compiler->trigger_template_error("tag '{$tag_name}' disabled by security setting", $compiler->lex->taglineno);
             }
-        } else if (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
+        } elseif (in_array($tag_name, $this->allowed_tags) && !in_array($tag_name, $this->disabled_tags)) {
             return true;
         } else {
             $compiler->trigger_template_error("tag '{$tag_name}' not allowed by security setting", $compiler->lex->taglineno);
         }
+
         return false; // should not, but who knows what happens to the compiler in the future?
     }
 
     /**
      * Check if modifier plugin is trusted.
      *
-     * @param string $modifier_name
-     * @param object $compiler compiler object
-     * @return boolean true if tag is trusted
+     * @param  string $modifier_name
+     * @param  object $compiler compiler object
+     *
+     * @return boolean                 true if tag is trusted
      * @throws SmartyCompilerException if modifier is not trusted
      */
     public function isTrustedModifier($modifier_name, $compiler)
@@ -279,19 +296,21 @@ class Smarty_Security {
             } else {
                 $compiler->trigger_template_error("modifier '{$modifier_name}' disabled by security setting", $compiler->lex->taglineno);
             }
-        } else if (in_array($modifier_name, $this->allowed_modifiers) && !in_array($modifier_name, $this->disabled_modifiers)) {
+        } elseif (in_array($modifier_name, $this->allowed_modifiers) && !in_array($modifier_name, $this->disabled_modifiers)) {
             return true;
         } else {
             $compiler->trigger_template_error("modifier '{$modifier_name}' not allowed by security setting", $compiler->lex->taglineno);
         }
+
         return false; // should not, but who knows what happens to the compiler in the future?
     }
 
     /**
      * Check if stream is trusted.
      *
-     * @param string $stream_name
-     * @return boolean true if stream is trusted
+     * @param  string $stream_name
+     *
+     * @return boolean         true if stream is trusted
      * @throws SmartyException if stream is not trusted
      */
     public function isTrustedStream($stream_name)
@@ -306,8 +325,9 @@ class Smarty_Security {
     /**
      * Check if directory of file resource is trusted.
      *
-     * @param string $filepath
-     * @return boolean true if directory is trusted
+     * @param  string $filepath
+     *
+     * @return boolean         true if directory is trusted
      * @throws SmartyException if directory is not trusted
      */
     public function isTrustedResourceDir($filepath)
@@ -321,8 +341,8 @@ class Smarty_Security {
 
         // check if index is outdated
         if ((!$this->_template_dir || $this->_template_dir !== $_template_dir)
-                || (!$this->_config_dir || $this->_config_dir !== $_config_dir)
-                || (!empty($this->secure_dir) && (!$this->_secure_dir || $this->_secure_dir !== $this->secure_dir))
+            || (!$this->_config_dir || $this->_config_dir !== $_config_dir)
+            || (!empty($this->secure_dir) && (!$this->_secure_dir || $this->_secure_dir !== $this->secure_dir))
         ) {
             $this->_resource_dir = array();
             $_template = true;
@@ -365,8 +385,9 @@ class Smarty_Security {
             $_directory[$directory] = true;
             // test if the directory is trusted
             if (isset($this->_resource_dir[$directory])) {
-                // merge sub directories of current $directory into _resource_dir to speed up subsequent lookups
+                // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup
                 $this->_resource_dir = array_merge($this->_resource_dir, $_directory);
+
                 return true;
             }
             // abort if we've reached root
@@ -380,15 +401,16 @@ class Smarty_Security {
         // give up
         throw new SmartyException("directory '{$_filepath}' not allowed by security setting");
     }
-    
+
     /**
      * Check if URI (e.g. {fetch} or {html_image}) is trusted
-     *
      * To simplify things, isTrustedUri() resolves all input to "{$PROTOCOL}://{$HOSTNAME}".
      * So "http://username:password@hello.world.example.org:8080/some-path?some=query-string"
      * is reduced to "http://hello.world.example.org" prior to applying the patters from {@link $trusted_uri}.
-     * @param string $uri 
-     * @return boolean true if URI is trusted
+     *
+     * @param  string $uri
+     *
+     * @return boolean         true if URI is trusted
      * @throws SmartyException if URI is not trusted
      * @uses $trusted_uri for list of patterns to match against $uri
      */
@@ -403,15 +425,16 @@ class Smarty_Security {
                 }
             }
         }
-        
+
         throw new SmartyException("URI '{$uri}' not allowed by security setting");
     }
-    
+
     /**
      * Check if directory of file resource is trusted.
      *
-     * @param string $filepath
-     * @return boolean true if directory is trusted
+     * @param  string $filepath
+     *
+     * @return boolean         true if directory is trusted
      * @throws SmartyException if PHP directory is not trusted
      */
     public function isTrustedPHPDir($filepath)
@@ -439,8 +462,9 @@ class Smarty_Security {
             $_directory[] = $directory;
             // test if the directory is trusted
             if (isset($this->_php_resource_dir[$directory])) {
-                // merge sub directories of current $directory into _resource_dir to speed up subsequent lookups
+                // merge sub directories of current $directory into _resource_dir to speed up subsequent lookup
                 $this->_php_resource_dir = array_merge($this->_php_resource_dir, $_directory);
+
                 return true;
             }
             // abort if we've reached root
@@ -453,7 +477,4 @@ class Smarty_Security {
 
         throw new SmartyException("directory '{$_filepath}' not allowed by security setting");
     }
-
 }
-
-?>
\ No newline at end of file
index fc9c0878d40b5cbdcc454151dbb0fa656560e3d4..69b7ae50c7132c19b41b9e2629bd1f5c35b047a6 100644 (file)
@@ -1,23 +1,3 @@
-Version 3.5.11 (2014-05-08)
-       Fixed bug in paste plugin word import with lists that have strikethrough on numbers.
-       Fixed bug in word count plugin where characters with diacritical marks were split as seperate words.
-       Fixed bug in IE 11 where the selection of images would fail when they where at the end of blocks.
-Version 3.5.10 (2013-10-24)
-       Fixed bug where dialogs using inlinepopups plugin would display incorrectly sometimes
-       Fixed bug in paste plugin word import that was removing type from lists
-       Fixed bug where IE 11 wouldn't be properly detected if IE 10 emulation was enabled.
-Version 3.5.9 (2013-10-10)
-       Added IE 11 compatibility. IE 11 is treated as Gecko but it has still many IE bugs.
-       Fixed bug where importing CSS classes would fail if it contained @import rules to remote domain on Gecko.
-       Fixed bug in spelling plugin where misspelt words are not always marked.
-       Fixed bug where script tag was removed when nested inside a div or p.
-       Fixed full screen plugin state migration from original editor.
-       Fixed edgecase on up/down arrow keys scrolling with native lists.
-       Fixed bug where space can scroll webpage when using keyboard to access toolbar buttons.
-       Fixed bug where up/down arrow keys scroll entire webpage when using keyboard nav in menu ui.
-       Fixed bug where applying ins/del as inline elements would apply them as blocks.
-       Fixed bug where backspace on a space after an image would produce a BR on WebKit.
-       Fixed bug where it wasn't possible to change block type of text blocks.
 Version 3.5.8 (2012-11-20)
        Fixed bug where html5 data attributes where stripped from contents.
        Fixed bug where toolbar was annouced multiple times with JAWS on Firefox.
@@ -190,7 +170,7 @@ Version 3.5b1 (2012-03-08)
        Added new types and selector options to make it easier to create editor instances with different configs.
        Added new preview of formatting options in various listboxes.
        Added new preview_styles option that enables control over what gets previewed.
-       Fixed bug where content css would be loaded twice into iframe.
+       Fixed bug where content css would be loaded twice into iframe. 
        Fixed bug where start elements with only whitespace in the attribute part wouldn't be correctly parsed.
        Fixed bug where the advlink dialog would produce an error about the addSelectAccessibility function not being defined.
        Fixed bug where the caret would be placed at an incorrect position if span was removed by the invalid_elements setting.
@@ -198,7 +178,7 @@ Version 3.5b1 (2012-03-08)
 Version 3.4.9 (2012-02-23)
        Added settings to wordcount plugin to configure update rate and checking wordcount on backspace and delete using wordcount_update_rate and wordcount_update_on_delete.
        Fixed bug in Webkit and IE where deleting empty paragraphs would remove entire editor contents.
-       Fixed bug where pressing enter on end of list item with a heading would create a new item with heading.
+       Fixed bug where pressing enter on end of list item with a heading would create a new item with heading. 
        Fixed edit css style dialog text-decoration none checkbox so it disables other text-decoration options when enabled.
        Fixed bug in Gecko where undo wasn't added when focus was lost.
        Fixed bug in Gecko where shift-enter in table cell ending with BR doesn't move caret to new line.
@@ -225,8 +205,8 @@ Version 3.4.8 (2012-02-02)
        Added spacebar onclick handler to toolbar buttons to ensure that the accessibility behaviour works correctly.
        Fixed bug where a stranded bullet point would get created in WebKit.
        Fixed bug where selecting text in a blockquote and pressing backspace toggles the style.
-       Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property.
-       Fix white space in between spans from being deleted.
+       Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property. 
+       Fix white space in between spans from being deleted. 
        Fixed bug where scrollbars where visible in the character map dialog on Gecko.
        Fixed issue with missing translation for one of the emoticons.
        Fixed bug where dots in id:s where causing problems. Patch provided by Abhishek Dev.
index 5a253429948e53c66c8f5261e3488172b922bd1e..60d6d4c8f51c5c3910583e84d96fdf9e219afdd2 100644 (file)
@@ -20,7 +20,7 @@ free software--to make sure the software is free for all its users.
   This license, the Lesser General Public License, applies to some\r
 specially designated software packages--typically libraries--of the\r
 Free Software Foundation and other authors who decide to use it.  You\r
-can use it too, but we suggest you first think carefuly about whether\r
+can use it too, but we suggest you first think carefully about whether\r
 this license or the ordinary General Public License is the better\r
 strategy to use in any particular case, based on the explanations below.\r
 \r
index 3d83a9595e13f1a113290cf1d64864eb2302f74a..cbf5b61a98e60efcf1dfea9ff77c831846cfdaf2 100644 (file)
@@ -1 +1 @@
-(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(e,t){var n=this,r=e.getParam("bbcode_dialect","dfrn").toLowerCase();e.onBeforeSetContent.add(function(e,t){t.content=n["_"+r+"_bbcode2html"](t.content)});e.onPostProcess.add(function(e,t){if(t.set)t.content=n["_"+r+"_bbcode2html"](t.content);if(t.get)t.content=n["_"+r+"_html2bbcode"](t.content)})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_dfrn_html2bbcode:function(e){function t(t,n){e=e.replace(t,n)}function n(t){return e.match(t)}function r(e){var t,n,r=[],i=[];var s=/<span [^>]*class *= *[\"'](?:[^\"']* )*oembed(?: [^\"']*)*[\"'][^>]*>(.*?(?:<span[^>]*>(.*?)<\/span *>)*.*?)<\/span *>/ig;while(t=s.exec(e)){var o=/<a([^>]* rel=[\"']oembed[\"'][^>]*)>.*?<\/a *>/ig;if(n=o.exec(t[1])){var u=/href=[\"']([^\"']*)[\"']/ig;var a=u.exec(n[1]);if(a[1]){r.push(t[0]);i.push("[EMBED]"+a[1]+"[/EMBED]")}}}for(var f=0;f<r.length;f++)e=e.replace(r[f],i[f]);return e}e=tinymce.trim(e);if(e.indexOf('class="oembed')>=0){e=r(e)}var i=n(/<code>(.*?)<\/code>/gi);t(/<code>(.*?)<\/code>/gi,"[$!$!CODEBLOCK!$!$]");t(/<a class=\"bookmark\" href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[bookmark=$1]$2[/bookmark]");t(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");t(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");t(/<span style=\"color:(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");t(/<font>(.*?)<\/font>/gi,"$1");t(/<img[^>]*?width=\"([^>]*?)\"[^>]*?height=\"([^>]*?)\"[^>]*?src=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$1x$2]$3[/img]");t(/<img[^>]*?height=\"([^>]*?)\"[^>]*?width=\"([^>]*?)\"[^>]*?src=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$2x$1]$3[/img]");t(/<img[^>]*?src=\"([^>]*?)\"[^>]*?height=\"([^>]*?)\"[^>]*?width=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$3x$2]$1[/img]");t(/<img[^>]*?src=\"([^>]*?)\"[^>]*?width=\"([^>]*?)\"[^>]*?height=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$2x$3]$1[/img]");t(/<img[^>]*?src=\"([^>]*?)\"[^>]*?\/>/gi,"[img]$1[/img]");t(/<ul class=\"listbullet\" style=\"list-style-type\: circle\;\">(.*?)<\/ul>/gi,"[list]$1[/list]");t(/<ul class=\"listnone\" style=\"list-style-type\: none\;\">(.*?)<\/ul>/gi,"[list=]$1[/list]");t(/<ul class=\"listdecimal\" style=\"list-style-type\: decimal\;\">(.*?)<\/ul>/gi,"[list=1]$1[/list]");t(/<ul class=\"listlowerroman\" style=\"list-style-type\: lower-roman\;\">(.*?)<\/ul>/gi,"[list=i]$1[/list]");t(/<ul class=\"listupperroman\" style=\"list-style-type\: upper-roman\;\">(.*?)<\/ul>/gi,"[list=I]$1[/list]");t(/<ul class=\"listloweralpha\" style=\"list-style-type\: lower-alpha\;\">(.*?)<\/ul>/gi,"[list=a]$1[/list]");t(/<ul class=\"listupperalpha\" style=\"list-style-type\: upper-alpha\;\">(.*?)<\/ul>/gi,"[list=A]$1[/list]");t(/<li>(.*?)<\/li>/gi,"[li]$1[/li]");t(/<\/(strong|b)>/gi,"[/b]");t(/<(strong|b)>/gi,"[b]");t(/<\/(em|i)>/gi,"[/i]");t(/<(em|i)>/gi,"[i]");t(/<\/u>/gi,"[/u]");t(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");t(/<u>/gi,"[u]");t(/<blockquote[^>]*>/gi,"[quote]");t(/<\/blockquote>/gi,"[/quote]");t(/<hr \/>/gi,"[hr]");t(/<br (.*?)\/>/gi,"\n");t(/<br \/>/gi,"\n");t(/<br>/gi,"\n");t(/<p>/gi,"");t(/<\/p>/gi,"\n");t(/&nbsp;|\u00a0/gi," ");t(/&quot;/gi,'"');t(/&lt;/gi,"<");t(/&gt;/gi,">");t(/&/gi,"&");t(/<div>/gi,"");t(/<\/div>/gi,"");if(i!=null){for(var s=0;s<i.length;s++){i[s]=i[s].replace("<code>","");i[s]=i[s].replace("</code>","");t(/\[\$!\$!CODEBLOCK!\$!\$\]/i,"[code]"+i[s]+"[/code]")}}return e},_dfrn_bbcode2html:function(e){function t(t,n){e=e.replace(t,n)}function n(t){return e.match(t)}function i(e,t){function n(t){e=t}t=bin2hex(t);$.ajax({url:"oembed/b2h?url="+t,async:false,success:n,dataType:"html"});return e}e=tinymce.trim(e);var r=n(/\[code\](.*?)\[\/code\]/gi);t(/\[code\](.*?)\[\/code\]/gi,"[$!$!CODEBLOCK!$!$]");t(/\n/gi,"<br />");t(/\[b\]/gi,"<strong>");t(/\[\/b\]/gi,"</strong>");t(/\[i\]/gi,"<em>");t(/\[\/i\]/gi,"</em>");t(/\[u\]/gi,"<u>");t(/\[\/u\]/gi,"</u>");t(/\[hr\]/gi,"<hr />");t(/\[bookmark=([^\]]+)\](.*?)\[\/bookmark\]/gi,'<a class="bookmark" href="$1">$2</a>');t(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');t(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');t(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,'<img width="$1" height="$2" src="$3" />');t(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');t(/\[list\](.*?)\[\/list\]/gi,'<ul class="listbullet" style="list-style-type: circle;">$1</ul>');t(/\[list=\](.*?)\[\/list\]/gi,'<ul class="listnone" style="list-style-type: none;">$1</ul>');t(/\[list=1\](.*?)\[\/list\]/gi,'<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>');t(/\[list=i\](.*?)\[\/list\]/gi,'<ul class="listlowerroman" style="list-style-type: lower-roman;">$1</ul>');t(/\[list=I\](.*?)\[\/list\]/gi,'<ul class="listupperroman" style="list-style-type: upper-roman;">$1</ul>');t(/\[list=a\](.*?)\[\/list\]/gi,'<ul class="listloweralpha" style="list-style-type: lower-alpha;">$1</ul>');t(/\[list=A\](.*?)\[\/list\]/gi,'<ul class="listupperalpha" style="list-style-type: upper-alpha;">$1</ul>');t(/\[li\](.*?)\[\/li\]/gi,"<li>$1</li>");t(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<span style="color: $1;">$2</span>');t(/\[size=(.*?)\](.*?)\[\/size\]/gi,'<span style="font-size: $1;">$2</span>');t(/\[quote.*?\](.*?)\[\/quote\]/gi,"<blockquote>$1</blockquote>");e=e.replace(/\[embed\](.*?)\[\/embed\]/gi,i);if(r!=null){for(var s=0;s<r.length;s++){r[s]=r[s].replace("[code]","");r[s]=r[s].replace("[/code]","");t(/\[\$!\$!CODEBLOCK!\$!\$\]/i,"<code>"+r[s]+"</code>")}}return e}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})()
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(ed,url){var t=this,dialect=ed.getParam("bbcode_dialect","dfrn").toLowerCase();ed.onBeforeSetContent.add(function(ed,o){o.content=t["_"+dialect+"_bbcode2html"](o.content)});ed.onPostProcess.add(function(ed,o){if(o.set)o.content=t["_"+dialect+"_bbcode2html"](o.content);if(o.get)o.content=t["_"+dialect+"_html2bbcode"](o.content)})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_dfrn_html2bbcode:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str)}function get(re){return s.match(re)}function _h2b_cb(match){var f,g,tof=[],tor=[];var find_spanc=/<span [^>]*class *= *[\"'](?:[^\"']* )*oembed(?: [^\"']*)*[\"'][^>]*>(.*?(?:<span[^>]*>(.*?)<\/span *>)*.*?)<\/span *>/gi;while(f=find_spanc.exec(match)){var find_a=/<a([^>]* rel=[\"']oembed[\"'][^>]*)>.*?<\/a *>/gi;if(g=find_a.exec(f[1])){var find_href=/href=[\"']([^\"']*)[\"']/gi;var m2=find_href.exec(g[1]);if(m2[1]){tof.push(f[0]);tor.push("[EMBED]"+m2[1]+"[/EMBED]")}}}for(var i=0;i<tof.length;i++)match=match.replace(tof[i],tor[i]);return match}if(s.indexOf('class="oembed')>=0){s=_h2b_cb(s)}var codes=get(/<code>(.*?)<\/code>/gi);rep(/<code>(.*?)<\/code>/gi,"[$!$!CODEBLOCK!$!$]");rep(/<a class=\"bookmark\" href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[bookmark=$1]$2[/bookmark]");rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");rep(/<span style=\"color:(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");rep(/<font>(.*?)<\/font>/gi,"$1");rep(/<img[^>]*?width=\"([^>]*?)\"[^>]*?height=\"([^>]*?)\"[^>]*?src=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$1x$2]$3[/img]");rep(/<img[^>]*?height=\"([^>]*?)\"[^>]*?width=\"([^>]*?)\"[^>]*?src=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$2x$1]$3[/img]");rep(/<img[^>]*?src=\"([^>]*?)\"[^>]*?height=\"([^>]*?)\"[^>]*?width=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$3x$2]$1[/img]");rep(/<img[^>]*?src=\"([^>]*?)\"[^>]*?width=\"([^>]*?)\"[^>]*?height=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$2x$3]$1[/img]");rep(/<img[^>]*?src=\"([^>]*?)\"[^>]*?\/>/gi,"[img]$1[/img]");rep(/<ul class=\"listbullet\" style=\"list-style-type\: circle\;\">(.*?)<\/ul>/gi,"[list]$1[/list]");rep(/<ul class=\"listnone\" style=\"list-style-type\: none\;\">(.*?)<\/ul>/gi,"[list=]$1[/list]");rep(/<ul class=\"listdecimal\" style=\"list-style-type\: decimal\;\">(.*?)<\/ul>/gi,"[list=1]$1[/list]");rep(/<ul class=\"listlowerroman\" style=\"list-style-type\: lower-roman\;\">(.*?)<\/ul>/gi,"[list=i]$1[/list]");rep(/<ul class=\"listupperroman\" style=\"list-style-type\: upper-roman\;\">(.*?)<\/ul>/gi,"[list=I]$1[/list]");rep(/<ul class=\"listloweralpha\" style=\"list-style-type\: lower-alpha\;\">(.*?)<\/ul>/gi,"[list=a]$1[/list]");rep(/<ul class=\"listupperalpha\" style=\"list-style-type\: upper-alpha\;\">(.*?)<\/ul>/gi,"[list=A]$1[/list]");rep(/<li>(.*?)<\/li>/gi,"[li]$1[/li]");rep(/<\/(strong|b)>/gi,"[/b]");rep(/<(strong|b)>/gi,"[b]");rep(/<\/(em|i)>/gi,"[/i]");rep(/<(em|i)>/gi,"[i]");rep(/<\/u>/gi,"[/u]");rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");rep(/<u>/gi,"[u]");rep(/<blockquote[^>]*>/gi,"[quote]");rep(/<\/blockquote>/gi,"[/quote]");rep(/<hr \/>/gi,"[hr]");rep(/<br (.*?)\/>/gi,"\n");rep(/<br\/>/gi,"\n");rep(/<br>/gi,"\n");rep(/<p>/gi,"");rep(/<\/p>/gi,"\n");rep(/&nbsp;|\u00a0/gi," ");rep(/&quot;/gi,'"');rep(/&lt;/gi,"<");rep(/&gt;/gi,">");rep(/&amp;/gi,"&");rep(/<div>/gi,"");rep(/<\/div>/gi,"");if(codes!=null){for(var i=0;i<codes.length;i++){codes[i]=codes[i].replace("<code>","");codes[i]=codes[i].replace("</code>","");rep(/\[\$!\$!CODEBLOCK!\$!\$\]/i,"[code]"+codes[i]+"[/code]")}}return s},_dfrn_bbcode2html:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str)}function get(re){return s.match(re)}var codes=get(/\[code\](.*?)\[\/code\]/gi);rep(/\[code\](.*?)\[\/code\]/gi,"[$!$!CODEBLOCK!$!$]");rep(/\n/gi,"<br />");rep(/\[b\]/gi,"<strong>");rep(/\[\/b\]/gi,"</strong>");rep(/\[i\]/gi,"<em>");rep(/\[\/i\]/gi,"</em>");rep(/\[u\]/gi,"<u>");rep(/\[\/u\]/gi,"</u>");rep(/\[hr\]/gi,"<hr />");rep(/\[bookmark=([^\]]+)\](.*?)\[\/bookmark\]/gi,'<a class="bookmark" href="$1">$2</a>');rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');rep(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,'<img width="$1" height="$2" src="$3" />');rep(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');rep(/\[list\](.*?)\[\/list\]/gi,'<ul class="listbullet" style="list-style-type: circle;">$1</ul>');rep(/\[list=\](.*?)\[\/list\]/gi,'<ul class="listnone" style="list-style-type: none;">$1</ul>');rep(/\[list=1\](.*?)\[\/list\]/gi,'<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>');rep(/\[list=i\](.*?)\[\/list\]/gi,'<ul class="listlowerroman" style="list-style-type: lower-roman;">$1</ul>');rep(/\[list=I\](.*?)\[\/list\]/gi,'<ul class="listupperroman" style="list-style-type: upper-roman;">$1</ul>');rep(/\[list=a\](.*?)\[\/list\]/gi,'<ul class="listloweralpha" style="list-style-type: lower-alpha;">$1</ul>');rep(/\[list=A\](.*?)\[\/list\]/gi,'<ul class="listupperalpha" style="list-style-type: upper-alpha;">$1</ul>');rep(/\[li\](.*?)\[\/li\]/gi,"<li>$1</li>");rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<span style="color: $1;">$2</span>');rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,'<span style="font-size: $1;">$2</span>');rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<blockquote>$1</blockquote>");function _b2h_cb(match,url){url=bin2hex(url);function s_b2h(data){match=data}$.ajax({url:"oembed/b2h?url="+url,async:false,success:s_b2h,dataType:"html"});return match}s=s.replace(/\[embed\](.*?)\[\/embed\]/gi,_b2h_cb);if(codes!=null){for(var i=0;i<codes.length;i++){codes[i]=codes[i].replace("[code]","");codes[i]=codes[i].replace("[/code]","");rep(/\[\$!\$!CODEBLOCK!\$!\$\]/i,"<code>"+codes[i]+"</code>")}}return s}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})();
\ No newline at end of file
index 3d3a27faa4f006fe7bf87e749a3aa4646d74673a..ed200e702056b02ee3c337dd8d5ba03bc5d64212 100644 (file)
@@ -1,53 +1,88 @@
-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
 /* Macgirvin Aug-2010 changed from punbb to dfrn dialect */
 
-(function() {\r
-       tinymce.create('tinymce.plugins.BBCodePlugin', {\r
-               init : function(ed, url) {\r
+(function() {
+       tinymce.create('tinymce.plugins.BBCodePlugin', {
+               init : function(ed, url) {
                        var t = this, dialect = ed.getParam('bbcode_dialect', 'dfrn').toLowerCase();
-\r
-                       ed.onBeforeSetContent.add(function(ed, o) {\r
-                               o.content = t['_' + dialect + '_bbcode2html'](o.content);\r
-                       });\r
-\r
-                       ed.onPostProcess.add(function(ed, o) {\r
-                               if (o.set)\r
-                                       o.content = t['_' + dialect + '_bbcode2html'](o.content);\r
-\r
-                               if (o.get)\r
-                                       o.content = t['_' + dialect + '_html2bbcode'](o.content);\r
-                       });\r
-               },\r
-\r
-               getInfo : function() {\r
-                       return {\r
-                               longname : 'BBCode Plugin',\r
-                               author : 'Moxiecode Systems AB',\r
-                               authorurl : 'http://tinymce.moxiecode.com',\r
-                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',\r
-                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
-                       };\r
-               },\r
-\r
-               // Private methods\r
-\r
+
+                       ed.onBeforeSetContent.add(function(ed, o) {
+                               o.content = t['_' + dialect + '_bbcode2html'](o.content);
+                       });
+
+                       ed.onPostProcess.add(function(ed, o) {
+                               if (o.set)
+                                       o.content = t['_' + dialect + '_bbcode2html'](o.content);
+
+                               if (o.get)
+                                       o.content = t['_' + dialect + '_html2bbcode'](o.content);
+                       });
+               },
+
+               getInfo : function() {
+                       return {
+                               longname : 'BBCode Plugin',
+                               author : 'Moxiecode Systems AB',
+                               authorurl : 'http://tinymce.moxiecode.com',
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion
+                       };
+               },
+
+               // Private methods
+
                // HTML -> BBCode in DFRN dialect
                _dfrn_html2bbcode : function(s) {
-                       s = tinymce.trim(s);\r
-\r
-                       function rep(re, str) {\r
-                               s = s.replace(re, str);\r
-                       };\r
-\r
+                       s = tinymce.trim(s);
+
+                       function rep(re, str) {
+
+
+                               s = s.replace(re,str);
+
+                               //modify code to keep stuff intact within [code][/code] blocks
+                               //Waitman Gobble NO WARRANTY
+
+                               /* This doesn't seem to work well with
+                               [code]line1
+                               line2[/code]
+                               commenting out for now
+                               */
+
+/*
+                               var o = new Array();
+                               var x = s.split("[code]");
+                               var i = 0;
+
+                               var si = "";
+                               si = x.shift();
+                               si = si.replace(re,str);
+                               o.push(si);
+
+                               for (i = 0; i < x.length; i++) {
+                                       var no = new Array();
+                                       var j = x.shift();
+                                       var g = j.split("[/code]");
+                                       no.push(g.shift());
+                                       si = g.shift();
+                                       si = si.replace(re,str);
+                                       no.push(si);
+                                       o.push(no.join("[/code]"));
+                               }
+
+                               s = o.join("[code]");
+*/
+                       };
+
 
                        function get(re) {
                                return s.match(re);
                        var codes = get(/<code>(.*?)<\/code>/gi);
                        rep(/<code>(.*?)<\/code>/gi,"[$!$!CODEBLOCK!$!$]");
 
-                       // example: <strong> to [b]\r
+                       // example: <strong> to [b]
                        rep(/<a class=\"bookmark\" href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[bookmark=$1]$2[/bookmark]");
-                       rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");\r
-                       rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");\r
+                       rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");
+                       rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");
                        rep(/<span style=\"color:(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");
-                       rep(/<font>(.*?)<\/font>/gi,"$1");\r
+                       rep(/<font>(.*?)<\/font>/gi,"$1");
 
                        // Use [^>]* instead of .* to prevent a match against two separate <img> tags
                        rep(/<img[^>]*?width=\"([^>]*?)\"[^>]*?height=\"([^>]*?)\"[^>]*?src=\"([^>]*?)\"[^>]*?\/>/gi,"[img=$1x$2]$3[/img]");
                        rep(/<li>(.*?)<\/li>/gi,'[li]$1[/li]');
 
                        //rep(/<code>(.*?)<\/code>/gi,"[code]$1[/code]");
-                       rep(/<\/(strong|b)>/gi,"[/b]");\r
-                       rep(/<(strong|b)>/gi,"[b]");\r
-                       rep(/<\/(em|i)>/gi,"[/i]");\r
-                       rep(/<(em|i)>/gi,"[i]");\r
-                       rep(/<\/u>/gi,"[/u]");\r
-                       rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");\r
-                       rep(/<u>/gi,"[u]");\r
-                       rep(/<blockquote[^>]*>/gi,"[quote]");\r
-                       rep(/<\/blockquote>/gi,"[/quote]");\r
+                       rep(/<\/(strong|b)>/gi,"[/b]");
+                       rep(/<(strong|b)>/gi,"[b]");
+                       rep(/<\/(em|i)>/gi,"[/i]");
+                       rep(/<(em|i)>/gi,"[i]");
+                       rep(/<\/u>/gi,"[/u]");
+                       rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");
+                       rep(/<u>/gi,"[u]");
+                       rep(/<blockquote[^>]*>/gi,"[quote]");
+                       rep(/<\/blockquote>/gi,"[/quote]");
                        rep(/<hr \/>/gi,"[hr]");
                        rep(/<br (.*?)\/>/gi,"\n");
-                       rep(/<br \/>/gi,"\n");\r
-                       rep(/<br>/gi,"\n");\r
-                       rep(/<p>/gi,"");\r
-                       rep(/<\/p>/gi,"\n");\r
-                       rep(/&nbsp;|\u00a0/gi," ");\r
-                       rep(/&quot;/gi,"\"");\r
-                       rep(/&lt;/gi,"<");\r
-                       rep(/&gt;/gi,">");\r
-                       rep(/&amp;/gi,"&");\r
-\r
+                       rep(/<br\/>/gi,"\n");
+                       rep(/<br>/gi,"\n");
+                       rep(/<p>/gi,"");
+                       rep(/<\/p>/gi,"\n");
+                       rep(/&nbsp;|\u00a0/gi," ");
+                       rep(/&quot;/gi,"\"");
+                       rep(/&lt;/gi,"<");
+                       rep(/&gt;/gi,">");
+                       rep(/&amp;/gi,"&");
+
                        // Hack to fix an annoying bug of TinyMCE where block formats don't
                        // work when forced_root_block = ''. So set forced_root_block = 'div'
                        // and then strip out the divs manually
                                }
                        }
 
-                       return s; \r
-               },\r
-\r
+                       return s; 
+               },
+
                // BBCode -> HTML from DFRN dialect
                _dfrn_bbcode2html : function(s) {
-                       s = tinymce.trim(s);\r
-\r
-                       function rep(re, str) {\r
-                               s = s.replace(re, str);\r
-                       };\r
-\r
+                       s = tinymce.trim(s);
+
+
+            function rep(re, str) {
+
+
+                /*//modify code to keep stuff intact within [code][/code] blocks
+                //Waitman Gobble NO WARRANTY
+
+
+                var o = new Array();
+                var x = s.split("[code]");
+                var i = 0;
+
+                var si = "";
+                si = x.shift();
+                si = si.replace(re,str);
+                o.push(si);
+
+                for (i = 0; i < x.length; i++) {
+                        var no = new Array();
+                        var j = x.shift();
+                        var g = j.split("[/code]");
+                        no.push(g.shift());
+                        si = g.shift();
+                        si = si.replace(re,str);
+                        no.push(si);
+                        o.push(no.join("[/code]"));
+                }
+
+                s = o.join("[code]");*/
+
+                               s = s.replace(re, str);
+
+            };
+
 
 
                        function get(re) {
                        var codes = get(/\[code\](.*?)\[\/code\]/gi);
                        rep(/\[code\](.*?)\[\/code\]/gi,"[$!$!CODEBLOCK!$!$]");
 
-                       // example: [b] to <strong>\r
-                       rep(/\n/gi,"<br />");\r
-                       rep(/\[b\]/gi,"<strong>");\r
-                       rep(/\[\/b\]/gi,"</strong>");\r
-                       rep(/\[i\]/gi,"<em>");\r
-                       rep(/\[\/i\]/gi,"</em>");\r
-                       rep(/\[u\]/gi,"<u>");\r
-                       rep(/\[\/u\]/gi,"</u>");\r
+                       // example: [b] to <strong>
+                       rep(/\n/gi,"<br />");
+                       rep(/\[b\]/gi,"<strong>");
+                       rep(/\[\/b\]/gi,"</strong>");
+                       rep(/\[i\]/gi,"<em>");
+                       rep(/\[\/i\]/gi,"</em>");
+                       rep(/\[u\]/gi,"<u>");
+                       rep(/\[\/u\]/gi,"</u>");
                        rep(/\[hr\]/gi,"<hr />");
                        rep(/\[bookmark=([^\]]+)\](.*?)\[\/bookmark\]/gi,"<a class=\"bookmark\" href=\"$1\">$2</a>");
-                       rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");\r
-                       rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");\r
+                       rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");
+                       rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");
                        rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,"<img width=\"$1\" height=\"$2\" src=\"$3\" />");
-                       rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");\r
-\r
+                       rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");
+
                        rep(/\[list\](.*?)\[\/list\]/gi, '<ul class="listbullet" style="list-style-type: circle;">$1</ul>');
                        rep(/\[list=\](.*?)\[\/list\]/gi, '<ul class="listnone" style="list-style-type: none;">$1</ul>');
                        rep(/\[list=1\](.*?)\[\/list\]/gi, '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>');
                                }
                        }
 
-                       return s; \r
-               }\r
-       });\r
-\r
-       // Register plugin\r
-       tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);\r
-})();
\ No newline at end of file
+                       return s; 
+               }
+       });
+
+       // Register plugin
+       tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);
+})();
index 0a259471d2362188c66cf8b0778d22e8b3cbb51f..9a0e7da15dc8612b6541f0df65ecbb99d940d85b 100644 (file)
@@ -49,7 +49,7 @@
                },\r
 \r
                /**\r
-                * Creates control instances based in the incoming name. This method is normally not\r
+                * Creates control instances based in the incomming name. This method is normally not\r
                 * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons\r
                 * but you sometimes need to create more complex controls like listboxes, split buttons etc then this\r
                 * method can be used to create those.\r
index 1aa8cc443a21537ae66259989c7fdfabc2aa059b..a2eb0348392e93454246eca22df1c273f9524402 100644 (file)
@@ -1 +1 @@
-(function(){var b=tinymce.DOM;var a=function(d,f,e){var c=function(g){var i=d.controlManager.get(g);var h=f.controlManager.get(g);if(i&&h){h.displayColor(i.value)}};c("forecolor");c("backcolor");f.setContent(d.getContent({format:"raw"}),{format:"raw"});f.selection.moveToBookmark(e);if(d.plugins.spellchecker&&f.plugins.spellchecker){f.plugins.spellchecker.setLanguage(d.plugins.spellchecker.selectedLang)}};tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(i,c){var l=this,m={},k=b.doc.documentElement,d,o,h,g,f,e,j;i.addCommand("mceFullScreen",function(){var q,r;if(i.getParam("fullscreen_is_enabled")){if(i.getParam("fullscreen_new_window")){closeFullscreen()}else{b.win.setTimeout(function(){var t=i;var s=tinyMCE.get(t.getParam("fullscreen_editor_id"));s.plugins.fullscreen.saveState(t);tinyMCE.remove(t)},10)}return}if(i.getParam("fullscreen_new_window")){l.fullscreenSettings={bookmark:i.selection.getBookmark()};q=b.win.open(c+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{q.resizeTo(screen.availWidth,screen.availHeight)}catch(p){}}else{o=b.getStyle(b.doc.body,"overflow",1)||"auto";h=b.getStyle(k,"overflow",1);d=b.getViewPort();g=d.x;f=d.y;if(tinymce.isOpera&&o=="visible"){o="auto"}if(tinymce.isIE&&o=="scroll"){o="auto"}if(tinymce.isIE&&(h=="visible"||h=="scroll")){h="auto"}if(o=="0px"){o=""}b.setStyle(b.doc.body,"overflow","hidden");k.style.overflow="hidden";d=b.getViewPort();b.win.scrollTo(0,0);if(tinymce.isIE){d.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){e="absolute;top:"+d.y}else{e="fixed;top:0"}n=b.add(b.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+e+";left:0;width:"+d.w+"px;height:"+d.h+"px;z-index:200000;"});b.add(n,"div",{id:"mce_fullscreen"});tinymce.each(i.settings,function(s,t){m[t]=s});m.id="mce_fullscreen";m.width=n.clientWidth;m.height=n.clientHeight-15;m.fullscreen_is_enabled=true;m.fullscreen_editor_id=i.id;m.theme_advanced_resizing=false;m.save_onsavecallback=function(){i.setContent(tinyMCE.get(m.id).getContent());i.execCommand("mceSave")};tinymce.each(i.getParam("fullscreen_settings"),function(t,s){m[s]=t});l.fullscreenSettings={bookmark:i.selection.getBookmark(),fullscreen_overflow:o,fullscreen_html_overflow:h,fullscreen_scrollx:g,fullscreen_scrolly:f};if(m.theme_advanced_toolbar_location==="external"){m.theme_advanced_toolbar_location="top"}tinyMCE.oldSettings=tinyMCE.settings;l.fullscreenEditor=new tinymce.Editor("mce_fullscreen",m);l.fullscreenEditor.onInit.add(function(){l.loadState(l.fullscreenEditor)});l.fullscreenEditor.render();l.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");l.fullscreenElement.update();l.resizeFunc=tinymce.dom.Event.add(b.win,"resize",function(){var v=tinymce.DOM.getViewPort(),t=l.fullscreenEditor,s,u;s=t.dom.getSize(t.getContainer().getElementsByTagName("table")[0]);u=t.dom.getSize(t.getContainer().getElementsByTagName("iframe")[0]);t.theme.resizeTo(v.w-s.w+u.w,v.h-s.h+u.h)})}});i.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});i.onNodeChange.add(function(q,p){p.setActive("fullscreen",q.getParam("fullscreen_is_enabled"))});l.loadState=function(p){if(!(p&&l.fullscreenSettings)){throw"No fullscreen editor to load to"}a(i,p,l.fullscreenSettings.bookmark);p.focus()};l.saveState=function(q){if(!(q&&l.fullscreenSettings)){throw"No fullscreen editor to restore from"}var p=l.fullscreenSettings;a(q,i,q.selection.getBookmark());if(!i.getParam("fullscreen_new_window")){tinymce.dom.Event.remove(b.win,"resize",l.resizeFunc);delete l.resizeFunc;b.remove("mce_fullscreen_container");b.doc.documentElement.style.overflow=p.fullscreen_html_overflow;b.setStyle(b.doc.body,"overflow",p.fullscreen_overflow);b.win.scrollTo(p.fullscreen_scrollx,p.fullscreen_scrolly)}tinyMCE.settings=tinyMCE.oldSettings;delete tinyMCE.oldSettings;delete l.fullscreenEditor;delete l.fullscreenElement;delete l.fullscreenSettings;b.win.setTimeout(function(){i.selection.moveToBookmark(j);i.focus()},10)}},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();
\ No newline at end of file
+(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().getElementsByTagName("table")[0]);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();
\ No newline at end of file
index bec886f74f280e8ed9f5b0af1a12c7e8035f0844..524b487aa087c560c3ce38b59430eaf5d2d3863c 100644 (file)
 (function() {\r
        var DOM = tinymce.DOM;\r
 \r
-       // State Transfer function\r
-       var transferState = function(oldEditor, newEditor, bookmark) {\r
-               var transferColorButtonState = function(swapme) {\r
-                       var c = oldEditor.controlManager.get(swapme);\r
-                       var newC = newEditor.controlManager.get(swapme);\r
-\r
-                       if (c && newC) {\r
-                               newC.displayColor(c.value);\r
-                       }\r
-\r
-               };\r
-\r
-               transferColorButtonState('forecolor');\r
-               transferColorButtonState('backcolor');\r
-               newEditor.setContent(oldEditor.getContent({format : 'raw'}), {format : 'raw'});\r
-               newEditor.selection.moveToBookmark(bookmark);\r
-\r
-               if (oldEditor.plugins.spellchecker && newEditor.plugins.spellchecker) {\r
-                       newEditor.plugins.spellchecker.setLanguage(oldEditor.plugins.spellchecker.selectedLang);\r
-               }\r
-       };\r
-\r
        tinymce.create('tinymce.plugins.FullScreenPlugin', {\r
                init : function(ed, url) {\r
-                       var t = this, s = {}, de = DOM.doc.documentElement, vp, fullscreen_overflow, fullscreen_html_overflow, fullscreen_scrollx, fullscreen_scrolly, posCss, bookmark;\r
+                       var t = this, s = {}, vp, posCss;\r
+\r
+                       t.editor = ed;\r
 \r
                        // Register commands\r
                        ed.addCommand('mceFullScreen', function() {\r
-                               var win, oed;\r
+                               var win, de = DOM.doc.documentElement;\r
 \r
                                if (ed.getParam('fullscreen_is_enabled')) {\r
                                        if (ed.getParam('fullscreen_new_window'))\r
-                                               closeFullscreen(); // Call to close in fullscreen.htm\r
+                                               closeFullscreen(); // Call to close in new window\r
                                        else {\r
                                                DOM.win.setTimeout(function() {\r
-                                                       var fullscreenEditor = ed;\r
-\r
-                                                       // find the editor that opened this one, execute restore function there\r
-                                                       var originalEditor = tinyMCE.get(fullscreenEditor.getParam('fullscreen_editor_id'));\r
-                                                       originalEditor.plugins.fullscreen.saveState(fullscreenEditor);\r
-\r
-                                                       tinyMCE.remove(fullscreenEditor);\r
+                                                       tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);\r
+                                                       tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent());\r
+                                                       tinyMCE.remove(ed);\r
+                                                       DOM.remove('mce_fullscreen_container');\r
+                                                       de.style.overflow = ed.getParam('fullscreen_html_overflow');\r
+                                                       DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow'));\r
+                                                       DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly'));\r
+                                                       tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings\r
                                                }, 10);\r
                                        }\r
 \r
@@ -60,9 +41,6 @@
                                }\r
 \r
                                if (ed.getParam('fullscreen_new_window')) {\r
-                                       t.fullscreenSettings = {\r
-                                               bookmark: ed.selection.getBookmark()\r
-                                       };\r
                                        win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);\r
                                        try {\r
                                                win.resizeTo(screen.availWidth, screen.availHeight);\r
                                                // Ignore\r
                                        }\r
                                } else {\r
-                                       fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';\r
-                                       fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);\r
+                                       tinyMCE.oldSettings = tinyMCE.settings; // Store old settings\r
+                                       s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';\r
+                                       s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);\r
                                        vp = DOM.getViewPort();\r
-                                       fullscreen_scrollx = vp.x;\r
-                                       fullscreen_scrolly = vp.y;\r
+                                       s.fullscreen_scrollx = vp.x;\r
+                                       s.fullscreen_scrolly = vp.y;\r
 \r
                                        // Fixes an Opera bug where the scrollbars doesn't reappear\r
-                                       if (tinymce.isOpera && fullscreen_overflow == 'visible')\r
-                                               fullscreen_overflow = 'auto';\r
+                                       if (tinymce.isOpera && s.fullscreen_overflow == 'visible')\r
+                                               s.fullscreen_overflow = 'auto';\r
 \r
                                        // Fixes an IE bug where horizontal scrollbars would appear\r
-                                       if (tinymce.isIE && fullscreen_overflow == 'scroll')\r
-                                               fullscreen_overflow = 'auto';\r
+                                       if (tinymce.isIE && s.fullscreen_overflow == 'scroll')\r
+                                               s.fullscreen_overflow = 'auto';\r
 \r
                                        // Fixes an IE bug where the scrollbars doesn't reappear\r
-                                       if (tinymce.isIE && (fullscreen_html_overflow == 'visible' || fullscreen_html_overflow == 'scroll'))\r
-                                               fullscreen_html_overflow = 'auto';\r
+                                       if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll'))\r
+                                               s.fullscreen_html_overflow = 'auto';\r
 \r
-                                       if (fullscreen_overflow == '0px')\r
-                                               fullscreen_overflow = '';\r
+                                       if (s.fullscreen_overflow == '0px')\r
+                                               s.fullscreen_overflow = '';\r
 \r
                                        DOM.setStyle(DOM.doc.body, 'overflow', 'hidden');\r
                                        de.style.overflow = 'hidden'; //Fix for IE6/7\r
                                                s[k] = v;\r
                                        });\r
 \r
-                                       t.fullscreenSettings = {\r
-                                               bookmark: ed.selection.getBookmark(),\r
-                                               fullscreen_overflow: fullscreen_overflow,\r
-                                               fullscreen_html_overflow: fullscreen_html_overflow,\r
-                                               fullscreen_scrollx: fullscreen_scrollx,\r
-                                               fullscreen_scrolly: fullscreen_scrolly\r
-                                       };\r
-\r
                                        if (s.theme_advanced_toolbar_location === 'external')\r
                                                s.theme_advanced_toolbar_location = 'top';\r
 \r
-                                       tinyMCE.oldSettings = tinyMCE.settings; // Store old settings, the Editor constructor overwrites them\r
                                        t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);\r
                                        t.fullscreenEditor.onInit.add(function() {\r
-                                               t.loadState(t.fullscreenEditor);\r
+                                               t.fullscreenEditor.setContent(ed.getContent());\r
+                                               t.fullscreenEditor.focus();\r
                                        });\r
 \r
                                        t.fullscreenEditor.render();\r
                        ed.onNodeChange.add(function(ed, cm) {\r
                                cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled'));\r
                        });\r
-\r
-                       // fullscreenEditor is a param here because in window mode we don't create it\r
-                       t.loadState = function(fullscreenEditor) {\r
-                               if (!(fullscreenEditor && t.fullscreenSettings)) {\r
-                                       throw "No fullscreen editor to load to";\r
-                               }\r
-\r
-                               transferState(ed, fullscreenEditor, t.fullscreenSettings.bookmark);\r
-                               fullscreenEditor.focus();\r
-\r
-                       };\r
-\r
-                       // fullscreenEditor is a param here because in window mode we don't create it\r
-                       t.saveState = function(fullscreenEditor) {\r
-                               if (!(fullscreenEditor && t.fullscreenSettings)) {\r
-                                       throw "No fullscreen editor to restore from";\r
-                               }\r
-                               var settings = t.fullscreenSettings;\r
-\r
-                               transferState(fullscreenEditor, ed, fullscreenEditor.selection.getBookmark());\r
-\r
-                               // cleanup only required if window mode isn't used\r
-                               if (!ed.getParam('fullscreen_new_window')) {\r
-                                       tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);\r
-                                       delete t.resizeFunc;\r
-\r
-                                       DOM.remove('mce_fullscreen_container');\r
-\r
-                                       DOM.doc.documentElement.style.overflow = settings.fullscreen_html_overflow;\r
-                                       DOM.setStyle(DOM.doc.body, 'overflow', settings.fullscreen_overflow);\r
-                                       DOM.win.scrollTo(settings.fullscreen_scrollx, settings.fullscreen_scrolly);\r
-                               }\r
-                               tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings\r
-\r
-                               // clear variables\r
-                               delete tinyMCE.oldSettings;\r
-                               delete t.fullscreenEditor;\r
-                               delete t.fullscreenElement;\r
-                               delete t.fullscreenSettings;\r
-\r
-                               // allow the fullscreen editor to be removed before restoring focus and selection\r
-                               DOM.win.setTimeout(function() {\r
-                                       ed.selection.moveToBookmark(bookmark);\r
-                                       ed.focus();\r
-                               }, 10);\r
-                       };\r
                },\r
 \r
                getInfo : function() {\r
index baf028b79f7ff36c6c868526441593bc5cf0b9eb..ffe528e41737d68d98a4929c299dbe5e37920990 100644 (file)
@@ -46,7 +46,7 @@
                settings['strict_loading_mode'] = true;\r
 \r
                settings.save_onsavecallback = function() {\r
-                       moveContent();\r
+                       window.opener.tinyMCE.get(oeID).setContent(tinyMCE.get('fullscreenarea').getContent({format : 'raw'}), {format : 'raw'});\r
                        window.opener.tinyMCE.get(oeID).execCommand('mceSave');\r
                        window.close();\r
                };\r
                }\r
 \r
                function moveContent() {\r
-                       // find the original editor, execute restore state in it's plugin instance\r
-                       window.opener.tinyMCE.get(oeID).plugins.fullscreen.saveState(tinyMCE.activeEditor);\r
-\r
-                       // prevent moveContent from being called twice - e.g. if the unloadHandler runs after moveContent()\r
-                       tinymce.dom.Event.remove(window, "beforeunload", unloadHandler);\r
+                       window.opener.tinyMCE.get(oeID).setContent(tinyMCE.activeEditor.getContent());\r
                }\r
 \r
                function closeFullscreen() {\r
-                       // moveContent() will be called by the unload handler\r
+                       moveContent();\r
                        window.close();\r
                }\r
 \r
                function render() {\r
                        var e = document.getElementById('fullscreenarea'), vp, ed, ow, oh, dom = tinymce.DOM;\r
 \r
+                       e.value = window.opener.tinyMCE.get(oeID).getContent();\r
+\r
                        vp = dom.getViewPort();\r
                        settings.width = vp.w;\r
                        settings.height = vp.h - 15;\r
 \r
-                       settings.oninit = function() {\r
-                               var ed = tinyMCE.activeEditor;\r
-                               window.opener.tinyMCE.get(oeID).plugins.fullscreen.loadState(ed);\r
-\r
-                               tinymce.dom.Event.add(window, 'resize', function() {\r
-                                       var vp = dom.getViewPort();\r
+                       tinymce.dom.Event.add(window, 'resize', function() {\r
+                               var vp = dom.getViewPort();\r
 \r
-                                       tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h);\r
-                               });\r
-                       }\r
+                               tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h);\r
+                       });\r
 \r
                        tinyMCE.init(settings);\r
                }\r
index 2d71a2e174ef048afda7d7e8bd1dc989d59a0ac5..8bb96f9cbec31d66a874ed1c3e3438e3d74ad51d 100644 (file)
@@ -1 +1 @@
-(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId("mce_inlinepopups_");h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","<br />"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;g<h.length;g++){f._addAll(k,h[g])}}}},_startDrag:function(v,G,E){var o=this,u,z,C=d.doc,f,l=o.windows[v],h=l.element,y=h.getXY(),x,q,F,g,A,s,r,j,i,m,k,n,B;g={x:0,y:0};A=d.getViewPort();A.w-=2;A.h-=2;j=G.screenX;i=G.screenY;m=k=n=B=0;u=a.add(C,"mouseup",function(p){a.remove(C,"mouseup",u);a.remove(C,"mousemove",z);if(f){f.remove()}h.moveBy(m,k);h.resizeBy(n,B);q=h.getSize();d.setStyles(v+"_ifr",{width:q.w-l.deltaWidth,height:q.h-l.deltaHeight});o._fixIELayout(v,1);return a.cancel(p)});if(E!="Move"){D()}function D(){if(f){return}o._fixIELayout(v,0);d.add(C.body,"div",{id:"mceEventBlocker","class":"mceEventBlocker "+(o.editor.settings.inlinepopups_skin||"clearlooks2"),style:{zIndex:o.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceEventBlocker",{position:"absolute",left:A.x,top:A.y,width:A.w-2,height:A.h-2})}f=new b("mceEventBlocker");f.update();x=h.getXY();q=h.getSize();s=g.x+x.x-A.x;r=g.y+x.y-A.y;d.add(f.get(),"div",{id:"mcePlaceHolder","class":"mcePlaceHolder",style:{left:s,top:r,width:q.w,height:q.h}});F=new b("mcePlaceHolder")}z=a.add(C,"mousemove",function(w){var p,H,t;D();p=w.screenX-j;H=w.screenY-i;switch(E){case"ResizeW":m=p;n=0-p;break;case"ResizeE":n=p;break;case"ResizeN":case"ResizeNW":case"ResizeNE":if(E=="ResizeNW"){m=p;n=0-p}else{if(E=="ResizeNE"){n=p}}k=H;B=0-H;break;case"ResizeS":case"ResizeSW":case"ResizeSE":if(E=="ResizeSW"){m=p;n=0-p}else{if(E=="ResizeSE"){n=p}}B=H;break;case"mceMove":m=p;k=H;break}if(n<(t=l.features.min_width-q.w)){if(m!==0){m+=n-t}n=t}if(B<(t=l.features.min_height-q.h)){if(k!==0){k+=B-t}B=t}n=Math.min(n,l.features.max_width-q.w);B=Math.min(B,l.features.max_height-q.h);m=Math.max(m,A.x-(s+A.x));k=Math.max(k,A.y-(r+A.y));m=Math.min(m,(A.w+A.x)-(s+q.w+A.x));k=Math.min(k,(A.h+A.y)-(r+q.h+A.y));if(m+k!==0){if(s+m<0){m=0}if(r+k<0){k=0}F.moveTo(s+m,r+k)}if(n+B!==0){F.resizeTo(q.w+n,q.h+B)}return a.cancel(w)});return a.cancel(G)},resizeBy:function(g,h,i){var f=this.windows[i];if(f){f.element.resizeBy(g,h);f.iframeElement.resizeBy(g,h)}},close:function(i,k){var g=this,f,j=d.doc,h,k;k=g._findId(k||i);if(!g.windows[k]){g.parent(i);return}g.count--;if(g.count==0){d.remove("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","false");g.editor.focus()}if(f=g.windows[k]){g.onClose.dispatch(g);a.remove(j,"mousedown",f.mousedownFunc);a.remove(j,"click",f.clickFunc);a.clear(k);a.clear(k+"_ifr");d.setAttrib(k+"_ifr","src",'javascript:""');f.element.remove();delete g.windows[k];h=g._frontWindow();if(h){g.focus(h.id)}}},_frontWindow:function(){var g,f=0;e(this.windows,function(h){if(h.zIndex>f){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})();
\ No newline at end of file
+(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","<br />"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;g<h.length;g++){f._addAll(k,h[g])}}}},_startDrag:function(v,G,E){var o=this,u,z,C=d.doc,f,l=o.windows[v],h=l.element,y=h.getXY(),x,q,F,g,A,s,r,j,i,m,k,n,B;g={x:0,y:0};A=d.getViewPort();A.w-=2;A.h-=2;j=G.screenX;i=G.screenY;m=k=n=B=0;u=a.add(C,"mouseup",function(p){a.remove(C,"mouseup",u);a.remove(C,"mousemove",z);if(f){f.remove()}h.moveBy(m,k);h.resizeBy(n,B);q=h.getSize();d.setStyles(v+"_ifr",{width:q.w-l.deltaWidth,height:q.h-l.deltaHeight});o._fixIELayout(v,1);return a.cancel(p)});if(E!="Move"){D()}function D(){if(f){return}o._fixIELayout(v,0);d.add(C.body,"div",{id:"mceEventBlocker","class":"mceEventBlocker "+(o.editor.settings.inlinepopups_skin||"clearlooks2"),style:{zIndex:o.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceEventBlocker",{position:"absolute",left:A.x,top:A.y,width:A.w-2,height:A.h-2})}f=new b("mceEventBlocker");f.update();x=h.getXY();q=h.getSize();s=g.x+x.x-A.x;r=g.y+x.y-A.y;d.add(f.get(),"div",{id:"mcePlaceHolder","class":"mcePlaceHolder",style:{left:s,top:r,width:q.w,height:q.h}});F=new b("mcePlaceHolder")}z=a.add(C,"mousemove",function(w){var p,H,t;D();p=w.screenX-j;H=w.screenY-i;switch(E){case"ResizeW":m=p;n=0-p;break;case"ResizeE":n=p;break;case"ResizeN":case"ResizeNW":case"ResizeNE":if(E=="ResizeNW"){m=p;n=0-p}else{if(E=="ResizeNE"){n=p}}k=H;B=0-H;break;case"ResizeS":case"ResizeSW":case"ResizeSE":if(E=="ResizeSW"){m=p;n=0-p}else{if(E=="ResizeSE"){n=p}}B=H;break;case"mceMove":m=p;k=H;break}if(n<(t=l.features.min_width-q.w)){if(m!==0){m+=n-t}n=t}if(B<(t=l.features.min_height-q.h)){if(k!==0){k+=B-t}B=t}n=Math.min(n,l.features.max_width-q.w);B=Math.min(B,l.features.max_height-q.h);m=Math.max(m,A.x-(s+A.x));k=Math.max(k,A.y-(r+A.y));m=Math.min(m,(A.w+A.x)-(s+q.w+A.x));k=Math.min(k,(A.h+A.y)-(r+q.h+A.y));if(m+k!==0){if(s+m<0){m=0}if(r+k<0){k=0}F.moveTo(s+m,r+k)}if(n+B!==0){F.resizeTo(q.w+n,q.h+B)}return a.cancel(w)});return a.cancel(G)},resizeBy:function(g,h,i){var f=this.windows[i];if(f){f.element.resizeBy(g,h);f.iframeElement.resizeBy(g,h)}},close:function(i,k){var g=this,f,j=d.doc,h,k;k=g._findId(k||i);if(!g.windows[k]){g.parent(i);return}g.count--;if(g.count==0){d.remove("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","false");g.editor.focus()}if(f=g.windows[k]){g.onClose.dispatch(g);a.remove(j,"mousedown",f.mousedownFunc);a.remove(j,"click",f.clickFunc);a.clear(k);a.clear(k+"_ifr");d.setAttrib(k+"_ifr","src",'javascript:""');f.element.remove();delete g.windows[k];h=g._frontWindow();if(h){g.focus(h.id)}}},_frontWindow:function(){var g,f=0;e(this.windows,function(h){if(h.zIndex>f){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})();
\ No newline at end of file
index da6ee2493282ba4d74f053377bc28be6d3ac0eb3..67123ca3142ec46384858fda1a641ed6d2401700 100644 (file)
                        if (parentWindow && DOM.get(parentWindow.id + '_ifr')) {\r
                                parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement;\r
                        }\r
-\r
+                       \r
                        // Only store selection if the type is a normal window\r
                        if (!f.type)\r
                                t.bookmark = ed.selection.getBookmark(1);\r
 \r
-                       id = DOM.uniqueId("mce_inlinepopups_"); // Use a prefix so this can't conflict with other ids\r
+                       id = DOM.uniqueId();\r
                        vp = DOM.getViewPort();\r
                        f.width = parseInt(f.width || 320);\r
                        f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0);\r
                                opt += ' mceMovable';\r
 \r
                        // Create DOM objects\r
-                       t._addAll(DOM.doc.body,\r
-                               ['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'},\r
+                       t._addAll(DOM.doc.body, \r
+                               ['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, \r
                                        ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt},\r
-                                               ['div', {id : id + '_top', 'class' : 'mceTop'},\r
+                                               ['div', {id : id + '_top', 'class' : 'mceTop'}, \r
                                                        ['div', {'class' : 'mceLeft'}],\r
                                                        ['div', {'class' : 'mceCenter'}],\r
                                                        ['div', {'class' : 'mceRight'}],\r
                                                        ['span', {id : id + '_title'}, f.title || '']\r
                                                ],\r
 \r
-                                               ['div', {id : id + '_middle', 'class' : 'mceMiddle'},\r
+                                               ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, \r
                                                        ['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}],\r
                                                        ['span', {id : id + '_content'}],\r
                                                        ['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}]\r
 \r
                                DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'});\r
                                DOM.setHTML(id + '_content', f.content.replace('\n', '<br />'));\r
-\r
+                               \r
                                Event.add(id, 'keyup', function(evt) {\r
                                        var VK_ESCAPE = 27;\r
                                        if (evt.keyCode === VK_ESCAPE) {\r
                                        }\r
                                }\r
                        });\r
-\r
+                       \r
                        // Make sure the tab order loops within the dialog.\r
                        Event.add([id + '_left', id + '_right'], 'focus', function(evt) {\r
                                var iframe = DOM.get(id + '_ifr');\r
                                        DOM.get(id + '_ok').focus();\r
                                }\r
                        });\r
-\r
+                       \r
                        // Add window\r
                        w = t.windows[id] = {\r
                                id : id,\r
                                DOM.removeClass(t.lastId, 'mceFocus');\r
                                DOM.addClass(id, 'mceFocus');\r
                                t.lastId = id;\r
-\r
+                               \r
                                if (w.focussedElement) {\r
                                        w.focussedElement.focus();\r
                                } else if (DOM.get(id + '_ok')) {\r
 \r
                                        dw = v;\r
                                }\r
-\r
+       \r
                                if (dh < (v = w.features.min_height - sz.h)) {\r
                                        if (dy !== 0)\r
                                                dy += dh - v;\r
                                if (dx + dy !== 0) {\r
                                        if (sx + dx < 0)\r
                                                dx = 0;\r
-\r
+       \r
                                        if (sy + dy < 0)\r
                                                dy = 0;\r
 \r
                                        t.focus(fw.id);\r
                        }\r
                },\r
-\r
+               \r
                // Find front most window\r
                _frontWindow : function() {\r
                        var fw, ix = 0;\r
index 5d0626188461968b454b4606b8d23210632fbb7a..0ab05ebbb62733c04a1a4b98838f35b2dbdf00b1 100644 (file)
@@ -1 +1 @@
-(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_max_consecutive_linebreaks:2,paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<?!(ol|ul)[^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1");j=j.replace(/(<(ol|ul)[^>]*\s)(?:id|name|language|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*[\w|'<'|'>']+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j){var h=this.editor,f=b(h,"paste_text_linebreaktype"),k=b(h,"paste_text_replacements"),g=tinymce.is;function e(m){c(m,function(n){if(n.constructor==RegExp){j=j.replace(n,"")}else{j=j.replace(n[0],n[1])}})}if((typeof(j)==="string")&&(j.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(j)){e([/[\n\r]+/g])}else{e([/\r+/g])}e([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"]]);var d=Number(b(h,"paste_max_consecutive_linebreaks"));if(d>-1){var l=new RegExp("\n{"+(d+1)+",}","g");var i="";while(i.length<d){i+="\n"}e([[l,i]])}j=h.dom.decode(tinymce.html.Entities.encodeRaw(j));if(g(k,"array")){e(k)}else{if(g(k,"string")){e(new RegExp(k,"gi"))}}if(f=="none"){e([[/\n+/g," "]])}else{if(f=="br"){e([[/\n/g,"<br />"]])}else{if(f=="p"){e([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{e([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}h.execCommand("mceInsertContent",false,j)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
\ No newline at end of file
+(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_max_consecutive_linebreaks:2,paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j){var h=this.editor,f=b(h,"paste_text_linebreaktype"),k=b(h,"paste_text_replacements"),g=tinymce.is;function e(m){c(m,function(n){if(n.constructor==RegExp){j=j.replace(n,"")}else{j=j.replace(n[0],n[1])}})}if((typeof(j)==="string")&&(j.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(j)){e([/[\n\r]+/g])}else{e([/\r+/g])}e([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"]]);var d=Number(b(h,"paste_max_consecutive_linebreaks"));if(d>-1){var l=new RegExp("\n{"+(d+1)+",}","g");var i="";while(i.length<d){i+="\n"}e([[l,i]])}j=h.dom.decode(tinymce.html.Entities.encodeRaw(j));if(g(k,"array")){e(k)}else{if(g(k,"string")){e(new RegExp(k,"gi"))}}if(f=="none"){e([[/\n+/g," "]])}else{if(f=="br"){e([[/\n/g,"<br />"]])}else{if(f=="p"){e([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{e([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}h.execCommand("mceInsertContent",false,j)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
\ No newline at end of file
index 370b082814e092bd4b8bdf74d3dbb0ddc4f305d4..0154eceb58c0f87f00cd5e613c3d8de2e14f62a1 100644 (file)
                                }\r
                        }\r
 \r
-                       // Check if we should use the new auto process method\r
+                       // Check if we should use the new auto process method                   \r
                        if (getParam(ed, "paste_auto_cleanup_on_paste")) {\r
                                // Is it's Opera or older FF use key handler\r
                                if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {\r
                                                h = h.replace(v[0], v[1]);\r
                                });\r
                        }\r
-\r
+                       \r
                        if (ed.settings.paste_enable_default_filters == false) {\r
                                return;\r
                        }\r
                                // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot.\r
                                do {\r
                                        len = h.length;\r
-                                       // Don't remove the type attribute for lists so that non-default list types display correctly.\r
-                                       h = h.replace(/(<?!(ol|ul)[^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");\r
-                                       h = h.replace(/(<(ol|ul)[^>]*\s)(?:id|name|language|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");\r
+                                       h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");\r
                                } while (len != h.length);\r
 \r
                                // Remove all spans if no styles is to be retained\r
                        if (ed.settings.paste_enable_default_filters == false) {\r
                                return;\r
                        }\r
-\r
+                       \r
                        if (o.wordContent) {\r
                                // Remove named anchors or TOC links\r
                                each(dom.select('a', o.node), function(a) {\r
                                        if (type == 'ul')\r
                                                html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/, '');\r
                                        else\r
-                                               html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*[\w|'<'|'>']+\.(&nbsp;|\u00a0)+\s*/, '');;\r
+                                               html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');\r
 \r
                                        // Create li and add paragraph data into the new li\r
                                        li = listElm.appendChild(dom.create('li', 0, html));\r
index 35cfb2b04d586a4bd9b776a50a10b5fd70d6b6af..80284b9f3ff0b33d7348de16cbdf0a162bb89419 100644 (file)
@@ -14,7 +14,6 @@ var SearchReplaceDialog = {
                mcTabs.onChange.add(function(tab_id, panel_id) {\r
                        t.switchMode(tab_id.substring(0, tab_id.indexOf('_')));\r
                });\r
-\r
        },\r
 \r
        switchMode : function(m) {\r
@@ -40,11 +39,6 @@ var SearchReplaceDialog = {
        searchNext : function(a) {\r
                var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;\r
 \r
-               if (tinymce.isIE11 && !window.find) {\r
-                       ed.windowManager.alert("This feature is not available in IE 11+. Upgrade TinyMCE to 4.x to get this functionallity back.");\r
-                       return;\r
-               }\r
-\r
                // Get input\r
                f = document.forms[0];\r
                s = f[m + '_panel_searchstring'].value;\r
@@ -93,10 +87,6 @@ var SearchReplaceDialog = {
 \r
                                                if (b) {\r
                                                        r.moveEnd("character", -(rs.length)); // Otherwise will loop forever\r
-                                               } else {\r
-                                                       // to avoid looping for ever in MSIE 9/10 when just\r
-                                                       // changing the case\r
-                                                       r.moveStart("character", rs.length);\r
                                                }\r
                                        }\r
 \r
index 6b57241a90b4f395c49e246e04c4589254cab70b..48549c9239294c2588705e5b3a649e729c5de9ca 100644 (file)
@@ -1 +1 @@
-(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);f.menuItems={};c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}f._updateMenu(l);f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);f.menuItems[n]=l;if(n==f.selectedLang){f.selectedItem=l}})});return g}},setLanguage:function(e){var d=this;if(e==d.selectedLang){return}if(tinymce.grep(d.languages,function(f){return f===e}).length===0){throw"Unknown language: "+e}d.selectedLang=e;if(d.menuItems){d._updateMenu(d.menuItems[e])}if(d.active){d._done()}},_updateMenu:function(d){d.setSelected(1);this.selectedItem.setSelected(0);this.selectedItem=d},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={},h=[];this._walk(e.getBody(),function(i){if(i.nodeType==3){d+=i.nodeValue+" "}});if(e.getParam("spellchecker_word_pattern")){h=d.match("("+e.getParam("spellchecker_word_pattern")+")","gi")}else{d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));h=d.split(" ")}c(h,function(i){if(!f[i]){g.push(i);f[i]=1}});return g},_removeWords:function(d){var e=this.editor,h=e.dom,g=e.selection,f=g.getRng(true);c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!d||h.decode(i.innerHTML)==d){h.remove(i,1)}}});g.setRng(f)},_markWords:function(l){var h=this.editor,g=h.dom,j=h.getDoc(),i=h.selection,d=i.getRng(true),e=[],k=l.join("|"),m=this._getSeparators(),f=new RegExp("(^|["+m+"])("+k+")(?=["+m+"]|$)","g");this._walk(h.getBody(),function(o){if(o.nodeType==3){e.push(o)}});c(e,function(t){var r,q,o,s,p=t.nodeValue;f.lastIndex=0;if(f.test(p)){p=g.encode(p);q=g.create("span",{"class":"mceItemHidden"});if(tinymce.isIE){p=p.replace(f,"$1<mcespell>$2</mcespell>");while((s=p.indexOf("<mcespell>"))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("</mcespell>");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1<span class="mceItemHiddenSpellWord">$2</span>')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})();
\ No newline at end of file
+(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={},h=[];this._walk(e.getBody(),function(i){if(i.nodeType==3){d+=i.nodeValue+" "}});if(e.getParam("spellchecker_word_pattern")){h=d.match("("+e.getParam("spellchecker_word_pattern")+")","gi")}else{d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));h=d.split(" ")}c(h,function(i){if(!f[i]){g.push(i);f[i]=1}});return g},_removeWords:function(d){var e=this.editor,h=e.dom,g=e.selection,f=g.getRng(true);c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!d||h.decode(i.innerHTML)==d){h.remove(i,1)}}});g.setRng(f)},_markWords:function(l){var h=this.editor,g=h.dom,j=h.getDoc(),i=h.selection,d=i.getRng(true),e=[],k=l.join("|"),m=this._getSeparators(),f=new RegExp("(^|["+m+"])("+k+")(?=["+m+"]|$)","g");this._walk(h.getBody(),function(o){if(o.nodeType==3){e.push(o)}});c(e,function(t){var r,q,o,s,p=t.nodeValue;if(f.test(p)){p=g.encode(p);q=g.create("span",{"class":"mceItemHidden"});if(tinymce.isIE){p=p.replace(f,"$1<mcespell>$2</mcespell>");while((s=p.indexOf("<mcespell>"))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("</mcespell>");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1<span class="mceItemHiddenSpellWord">$2</span>')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})();
\ No newline at end of file
index 5751b0e52ccb32b61f74ee410df178a9bceb26dc..86fdfceb409ed46342668cc63e78e6d6d8350735 100644 (file)
 \r
                                c.onRenderMenu.add(function(c, m) {\r
                                        m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
-                                       t.menuItems = {};\r
                                        each(t.languages, function(v, k) {\r
                                                var o = {icon : 1}, mi;\r
 \r
                                                        if (v == t.selectedLang) {\r
                                                                return;\r
                                                        }\r
-                                                       t._updateMenu(mi);\r
+                                                       mi.setSelected(1);\r
+                                                       t.selectedItem.setSelected(0);\r
+                                                       t.selectedItem = mi;\r
                                                        t.selectedLang = v;\r
                                                };\r
 \r
                                                o.title = k;\r
                                                mi = m.add(o);\r
                                                mi.setSelected(v == t.selectedLang);\r
-                                               t.menuItems[v] = mi;\r
+\r
                                                if (v == t.selectedLang)\r
                                                        t.selectedItem = mi;\r
-                                       });\r
+                                       })\r
                                });\r
 \r
-\r
-\r
                                return c;\r
                        }\r
                },\r
 \r
-               setLanguage: function(lang) {\r
-                       var t = this;\r
-\r
-                       if (lang == t.selectedLang) {\r
-                               // allowed\r
-                               return;\r
-                       }\r
-\r
-                       if (tinymce.grep(t.languages, function(v) { return v === lang; }).length === 0) {\r
-                               throw "Unknown language: " + lang;\r
-                       }\r
-\r
-                       t.selectedLang = lang;\r
-\r
-                       // if the menu has been shown, update it as well\r
-                       if (t.menuItems) {\r
-                               t._updateMenu(t.menuItems[lang]);\r
-                       }\r
-\r
-                       if (t.active) {\r
-                               // clear error in the old language.\r
-                               t._done();\r
-\r
-                               // Don't immediately block the UI to check spelling in the new language, this is an API not a user action.\r
-                       }\r
-               },\r
-\r
                // Internal functions\r
 \r
-               _updateMenu: function(mi) {\r
-                       mi.setSelected(1);\r
-                       this.selectedItem.setSelected(0);\r
-                       this.selectedItem = mi;\r
-               },\r
-\r
                _walk : function(n, f) {\r
                        var d = this.editor.getDoc(), w;\r
 \r
                        each(nl, function(n) {\r
                                var node, elem, txt, pos, v = n.nodeValue;\r
 \r
-                               rx.lastIndex = 0;\r
                                if (rx.test(v)) {\r
                                        // Encode the content\r
                                        v = dom.encode(v);\r
index 4a92e1b364b77360d99ddf89d06b62d04ecb6198..4a35a5ef93106b46ee628110931cf522cc27f8d7 100644 (file)
@@ -1 +1 @@
-(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T<Q+U;T++){if(!g[T]){g[T]=[]}for(S=R;S<R+V;S++){g[T][S]={part:N,real:T==Q&&S==R,elm:W,rowspan:U,colspan:V}}}})});M+=O.length})}function z(M,O){var N;N=g[O];if(N){return N[M]}}function s(O,M,N){if(O){N=parseInt(N);if(N===1){O.removeAttribute(M,1)}else{O.setAttribute(M,N,1)}}}function j(M){return M&&(G.hasClass(M.elm,"mceSelected")||M==o)}function k(){var M=[];e(H.rows,function(N){e(N.cells,function(O){if(G.hasClass(O,"mceSelected")||O==o.elm){M.push(N);return false}})});return M}function r(){var M=G.createRng();M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H)}function f(M){var N;d.walk(M,function(P){var O;if(P.nodeType==3){e(G.getParents(P.parentNode,null,M).reverse(),function(Q){Q=A(Q,false);if(!N){N=O=Q}else{if(O){O.appendChild(Q)}}O=Q});if(O){O.innerHTML=d.isIE&&!d.isIE11?"&nbsp;":'<br data-mce-bogus="1" />'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE||d.isIE11){M.innerHTML='<br data-mce-bogus="1" />'}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q<S-1;Q++){G.insertAfter(f(P),P)}u(O,N,R-1,S)}}})})}function p(V,S,Y){var P,O,X,W,U,R,T,M,V,N,Q;if(V){pos=F(V);P=pos.x;O=pos.y;X=P+(S-1);W=O+(Y-1)}else{L=D=null;e(g,function(Z,aa){e(Z,function(ac,ab){if(j(ac)){if(!L){L={x:ab,y:aa}}D={x:ab,y:aa}}})});P=L.x;O=L.y;X=D.x;W=D.y}T=z(P,O);M=z(X,W);if(T&&M&&T.part==M.part){C();t();T=z(P,O).elm;s(T,"colSpan",(X-P)+1);s(T,"rowSpan",(W-O)+1);for(R=O;R<=W;R++){for(U=P;U<=X;U++){if(!g[R]||!g[R][U]){continue}V=g[R][U].elm;if(V!=T){N=d.grep(V.childNodes);e(N,function(Z){T.appendChild(Z)});if(N.length){N=d.grep(T.childNodes);Q=0;e(N,function(Z){if(Z.nodeName=="BR"&&G.getAttrib(Z,"data-mce-bogus")&&Q++<N.length-1){T.removeChild(Z)}})}G.remove(V)}}}q()}}function l(Q){var M,S,P,R,T,U,N,V,O;e(g,function(W,X){e(W,function(Z,Y){if(j(Z)){Z=Z.elm;T=Z.parentNode;U=A(T,false);M=X;if(Q){return false}}});if(Q){return !M}});for(R=0;R<g[0].length;R++){if(!g[M][R]){continue}S=g[M][R].elm;if(S!=P){if(!Q){O=a(S,"rowspan");if(O>1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){if(!O){return}var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;i<S;i++){R=T.cells[i];s(R,"colSpan",1);s(R,"rowSpan",1)}for(i=S;i<Q;i++){T.appendChild(f(T.cells[S-1]))}for(i=Q;i<S;i++){G.remove(T.cells[i])}if(N){M.parentNode.insertBefore(T,M)}else{G.insertAfter(T,M)}});G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected")}function F(M){var N;e(g,function(O,P){e(O,function(R,Q){if(R.elm==M){N={x:Q,y:P};return false}});return !N});return N}function w(M){L=F(M)}function I(){var O,N,M;N=M=0;e(g,function(P,Q){e(P,function(S,R){var U,T;if(j(S)){S=g[Q][R];if(R>N){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)<P){P-=S.colspan-1}}}for(x=P;x<=N;x++){S=g[O][x];if(!S.real){if(O-(S.rowspan-1)<O){O-=S.rowspan-1}}}for(y=O;y<=T;y++){for(x=P;x<=U;x++){S=g[y][x];if(S.real){Q=S.colspan-1;R=S.rowspan-1;if(Q){if(x+Q>N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){if(r.settings.forced_root_block){r.dom.add(r.getBody(),r.settings.forced_root_block,null,d.isIE&&!d.isIE11?"&nbsp;":'<br data-mce-bogus="1" />')}else{r.dom.add(r.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&(z.nodeName=="BR"||(z.childNodes.length==1&&(z.firstChild.nodeName=="BR"||z.firstChild.nodeValue=="\u00a0")))&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce);
\ No newline at end of file
+(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T<Q+U;T++){if(!g[T]){g[T]=[]}for(S=R;S<R+V;S++){g[T][S]={part:N,real:T==Q&&S==R,elm:W,rowspan:U,colspan:V}}}})});M+=O.length})}function z(M,O){var N;N=g[O];if(N){return N[M]}}function s(O,M,N){if(O){N=parseInt(N);if(N===1){O.removeAttribute(M,1)}else{O.setAttribute(M,N,1)}}}function j(M){return M&&(G.hasClass(M.elm,"mceSelected")||M==o)}function k(){var M=[];e(H.rows,function(N){e(N.cells,function(O){if(G.hasClass(O,"mceSelected")||O==o.elm){M.push(N);return false}})});return M}function r(){var M=G.createRng();M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H)}function f(M){var N;d.walk(M,function(P){var O;if(P.nodeType==3){e(G.getParents(P.parentNode,null,M).reverse(),function(Q){Q=A(Q,false);if(!N){N=O=Q}else{if(O){O.appendChild(Q)}}O=Q});if(O){O.innerHTML=d.isIE?"&nbsp;":'<br data-mce-bogus="1" />'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE){M.innerHTML='<br data-mce-bogus="1" />'}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q<S-1;Q++){G.insertAfter(f(P),P)}u(O,N,R-1,S)}}})})}function p(V,S,Y){var P,O,X,W,U,R,T,M,V,N,Q;if(V){pos=F(V);P=pos.x;O=pos.y;X=P+(S-1);W=O+(Y-1)}else{L=D=null;e(g,function(Z,aa){e(Z,function(ac,ab){if(j(ac)){if(!L){L={x:ab,y:aa}}D={x:ab,y:aa}}})});P=L.x;O=L.y;X=D.x;W=D.y}T=z(P,O);M=z(X,W);if(T&&M&&T.part==M.part){C();t();T=z(P,O).elm;s(T,"colSpan",(X-P)+1);s(T,"rowSpan",(W-O)+1);for(R=O;R<=W;R++){for(U=P;U<=X;U++){if(!g[R]||!g[R][U]){continue}V=g[R][U].elm;if(V!=T){N=d.grep(V.childNodes);e(N,function(Z){T.appendChild(Z)});if(N.length){N=d.grep(T.childNodes);Q=0;e(N,function(Z){if(Z.nodeName=="BR"&&G.getAttrib(Z,"data-mce-bogus")&&Q++<N.length-1){T.removeChild(Z)}})}G.remove(V)}}}q()}}function l(Q){var M,S,P,R,T,U,N,V,O;e(g,function(W,X){e(W,function(Z,Y){if(j(Z)){Z=Z.elm;T=Z.parentNode;U=A(T,false);M=X;if(Q){return false}}});if(Q){return !M}});for(R=0;R<g[0].length;R++){if(!g[M][R]){continue}S=g[M][R].elm;if(S!=P){if(!Q){O=a(S,"rowspan");if(O>1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){if(!O){return}var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;i<S;i++){R=T.cells[i];s(R,"colSpan",1);s(R,"rowSpan",1)}for(i=S;i<Q;i++){T.appendChild(f(T.cells[S-1]))}for(i=Q;i<S;i++){G.remove(T.cells[i])}if(N){M.parentNode.insertBefore(T,M)}else{G.insertAfter(T,M)}});G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected")}function F(M){var N;e(g,function(O,P){e(O,function(R,Q){if(R.elm==M){N={x:Q,y:P};return false}});return !N});return N}function w(M){L=F(M)}function I(){var O,N,M;N=M=0;e(g,function(P,Q){e(P,function(S,R){var U,T;if(j(S)){S=g[Q][R];if(R>N){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)<P){P-=S.colspan-1}}}for(x=P;x<=N;x++){S=g[O][x];if(!S.real){if(O-(S.rowspan-1)<O){O-=S.rowspan-1}}}for(y=O;y<=T;y++){for(x=P;x<=U;x++){S=g[y][x];if(S.real){Q=S.colspan-1;R=S.rowspan-1;if(Q){if(x+Q>N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){if(r.settings.forced_root_block){r.dom.add(r.getBody(),r.settings.forced_root_block,null,d.isIE?"&nbsp;":'<br data-mce-bogus="1" />')}else{r.dom.add(r.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&(z.nodeName=="BR"||(z.childNodes.length==1&&(z.firstChild.nodeName=="BR"||z.firstChild.nodeValue=="\u00a0")))&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce);
\ No newline at end of file
index 045648376d264fa649edd9b09043764e4aa49471..532b79c6faa2410dbdece76d9181736547d6ace4 100644 (file)
 
                                        // Add something to the inner node
                                        if (curNode)
-                                               curNode.innerHTML = tinymce.isIE && !tinymce.isIE11 ? '&nbsp;' : '<br data-mce-bogus="1" />';
+                                               curNode.innerHTML = tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />';
 
                                        return false;
                                }
                        if (formatNode) {
                                cell.appendChild(formatNode);
                        } else {
-                               if (!tinymce.isIE || tinymce.isIE11)
+                               if (!tinymce.isIE)
                                        cell.innerHTML = '<br data-mce-bogus="1" />';
                        }
 
 
                                        if (last && last.nodeName == 'TABLE') {
                                                if (ed.settings.forced_root_block)
-                                                       ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE && !tinymce.isIE11 ? '&nbsp;' : '<br data-mce-bogus="1" />');
+                                                       ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />');
                                                else
                                                        ed.dom.add(ed.getBody(), 'br', {'data-mce-bogus': '1'});
                                        }
index f427f5f87eec377b087daf1632e55b32b0eb6ca5..1db243b63a69a7c4d442703c08bd673efe85e62b 100644 (file)
@@ -91,7 +91,7 @@ function insertTable() {
                if (!capEl && caption) {\r
                        capEl = elm.ownerDocument.createElement('caption');\r
 \r
-                       if (!tinymce.isIE || tinymce.isIE11)\r
+                       if (!tinymce.isIE)\r
                                capEl.innerHTML = '<br data-mce-bogus="1"/>';\r
 \r
                        elm.insertBefore(capEl, elm.firstChild);\r
@@ -199,7 +199,7 @@ function insertTable() {
        html += '>';\r
 \r
        if (caption) {\r
-               if (!tinymce.isIE || tinymce.isIE11)\r
+               if (!tinymce.isIE)\r
                        html += '<caption><br data-mce-bogus="1"/></caption>';\r
                else\r
                        html += '<caption></caption>';\r
@@ -209,7 +209,7 @@ function insertTable() {
                html += "<tr>";\r
 \r
                for (var x=0; x<cols; x++) {\r
-                       if (!tinymce.isIE || tinymce.isIE11)\r
+                       if (!tinymce.isIE)\r
                                html += '<td><br data-mce-bogus="1"/></td>';\r
                        else\r
                                html += '<td></td>';\r
@@ -242,16 +242,16 @@ function insertTable() {
        } else\r
                inst.execCommand('mceInsertContent', false, html);\r
 \r
-       tinymce.each(dom.select('table[data-mce-new]'), function(node) {\r
+       tinymce.each(dom.select('table[data-mce-new]'), function(node) {
                var tdorth = dom.select('td,th', node);\r
-\r
+
                // Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document\r
-               if (tinymce.isIE && !tinymce.isIE11 && node.nextSibling == null) {\r
+               if (tinymce.isIE && node.nextSibling == null) {\r
                        if (inst.settings.forced_root_block)\r
                                dom.insertAfter(dom.create(inst.settings.forced_root_block), node);\r
                        else\r
                                dom.insertAfter(dom.create('br', {'data-mce-bogus': '1'}), node);\r
-               }\r
+               }
 \r
                try {\r
                        // IE9 might fail to do this selection \r
index 070fe5902ed8c66f0b43ad4e5031e04300c2ddb3..42ece2092f3808974cb9343354fc2d7d0052bd76 100644 (file)
@@ -1 +1 @@
-(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\u00co-\u00ff^\uc397^u00f7\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'<span id="'+e.id+'">0</span>')}}else{tinymce.DOM.add(k,"span",{},'<span id="'+e.id+'">0</span>')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})();
\ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'<span id="'+e.id+'">0</span>')}}else{tinymce.DOM.add(k,"span",{},'<span id="'+e.id+'">0</span>')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})();
\ No newline at end of file
index 8556772cb1f027380730ea53a493d828d961ad51..34b265553f30f107cb42dc5df0a14bff7a185194 100644 (file)
@@ -18,7 +18,7 @@
                init : function(ed, url) {\r
                        var t = this, last = 0, VK = tinymce.VK;\r
 \r
-                       t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\u00co-\u00ff^\uc397^u00f7\'-]+/g); // u2019 == &rsquo; u00c0-u00ff extended latin chars with diacritical marks. exclude uc397 multiplication & u00f7 division\r
+                       t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == &rsquo;\r
                        t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);\r
                        t.update_rate = ed.getParam('wordcount_update_rate', 2000);\r
                        t.update_on_delete = ed.getParam('wordcount_update_on_delete', false);\r
index 9d43222ad2da49573c987a0c1c285a91529b6127..44d9fd902df2961527d334042109fca7a332a216 100644 (file)
@@ -1 +1 @@
-(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.11",releaseDate:"2014-05-08",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isIE11=g.indexOf("Trident/")!=-1&&(g.indexOf("rv:")!=-1||o.appName.indexOf("Netscape")!=-1);s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName)||s.isIE11;s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&!s.isIE11&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){r=f[m].href;if(r){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==b}if(f=="array"&&c.isArray(g)){return true}return typeof(g)==f},isArray:Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==b){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];c.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];c.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(n,k){var j,f,h,g=arguments,m;for(j=1,f=g.length;j<f;j++){k=g[j];for(h in k){if(k.hasOwnProperty(h)){m=k[h];if(m!==b){n[h]=m}}}}return n},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}c.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}c.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||e;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||e;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this,g;g=function(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(e.detachEvent){e.detachEvent("onbeforeunload",k);e.detachEvent("onunload",g)}else{if(e.removeEventListener){e.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(e.CollectGarbage){CollectGarbage()}}};function k(){var l=document;function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l.readyState=="interactive"){if(l){l.attachEvent("onstop",f)}e.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}j={func:j,scope:i||this};if(!h.unloads){if(e.attachEvent){e.attachEvent("onunload",g);e.attachEvent("onbeforeunload",k)}else{if(e.addEventListener){e.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;c.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){if(!f||c.is(f,"array")){return f}return c.map(f.split(g||","),c.trim)},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(d){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===b){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};c._init();e.tinymce=e.tinyMCE=c})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,inDispatch:false,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(b,a){this.listeners.push({cb:b,scope:a||this.scope});return b},addToTop:function(d,b){var a=this,c={cb:d,scope:b||a.scope};if(a.inDispatch){a.listeners=[c].concat(a.listeners)}else{a.listeners.unshift(c)}return d},remove:function(c){var b=this.listeners,a=null;tinymce.each(b,function(e,d){if(c==e.cb){a=e;b.splice(d,1);return false}});return a},dispatch:function(){var a=this,e,b=arguments,c,d=a.listeners,f;a.inDispatch=true;for(c=0;c<d.length;c++){f=d[c];e=f.cb.apply(f.scope,b.length>0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,l=j.DELETE,e=a.dom,n=a.selection,J=a.settings,y=a.parser,q=a.serializer,G=tinymce.each;function C(P,O){try{a.getDoc().execCommand(P,false,O)}catch(N){}}function p(){var N=a.getDoc().documentMode;return N?N:6}function B(N){return N.isDefaultPrevented()}function L(){function N(T){var P,R,O,U,Q,S,V;function W(){if(Q.nodeType==3){if(T&&S==Q.length){return true}if(!T&&S===0){return true}}}P=n.getRng();var X=[P.startContainer,P.startOffset,P.endContainer,P.endOffset];if(!P.collapsed){T=true}Q=P[(T?"start":"end")+"Container"];S=P[(T?"start":"end")+"Offset"];if(Q.nodeType==3){R=e.getParent(P.startContainer,e.isBlock);if(T){R=e.getNext(R,e.isBlock)}if(R&&(W()||!P.collapsed)){O=e.create("em",{id:"__mceDel"});G(tinymce.grep(R.childNodes),function(Y){O.appendChild(Y)});R.appendChild(O)}}P=e.createRng();P.setStart(X[0],X[1]);P.setEnd(X[2],X[3]);n.setRng(P);a.getDoc().execCommand(T?"ForwardDelete":"Delete",false,null);if(O){U=n.getBookmark();while(V=e.get("__mceDel")){e.remove(V,true)}n.moveToBookmark(U)}}a.onKeyDown.add(function(O,Q){var P;P=Q.keyCode==l;if(!B(Q)&&(P||Q.keyCode==f)&&!j.modifierPressed(Q)){Q.preventDefault();N(P)}});a.addCommand("Delete",function(){N()})}function s(){function N(Q){var P=e.create("body");var R=Q.cloneContents();P.appendChild(R);return n.serializer.serialize(P,{format:"html"})}function O(P){var R=N(P);var S=e.createRng();S.selectNode(a.getBody());var Q=N(S);return R===Q}a.onKeyDown.add(function(Q,S){var R=S.keyCode,P;if(!B(S)&&(R==l||R==f)){P=Q.selection.isCollapsed();if(P&&!e.isEmpty(Q.getBody())){return}if(tinymce.isIE&&!P){return}if(!P&&!O(Q.selection.getRng())){return}Q.setContent("");Q.selection.setCursorLocation(Q.getBody(),0);Q.nodeChanged()}})}function K(){a.onKeyDown.add(function(N,O){if(!B(O)&&O.keyCode==65&&j.metaKeyPressed(O)){O.preventDefault();N.execCommand("SelectAll")}})}function M(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(N){n.setRng(n.getRng())});e.bind(a.getDoc(),"mousedown",function(N){if(N.target==a.getDoc().documentElement){a.getWin().focus();n.setRng(n.getRng())}})}}function D(){a.onKeyDown.add(function(N,Q){if(!B(Q)&&Q.keyCode===f){if(n.isCollapsed()&&n.getRng(true).startOffset===0){var P=n.getNode();var O=P.previousSibling;if(O&&O.nodeName&&O.nodeName.toLowerCase()==="hr"){e.remove(O);tinymce.dom.Event.cancel(Q)}}}})}function A(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(O,P){if(!B(P)&&P.target.nodeName==="HTML"){var N=O.getBody();N.blur();setTimeout(function(){N.focus()},0)}})}}function h(){a.onClick.add(function(N,O){O=O.target;if(/^(IMG|HR)$/.test(O.nodeName)){n.getSel().setBaseAndExtent(O,0,O,1)}if(O.nodeName=="A"&&e.hasClass(O,"mceItemAnchor")){n.select(O)}N.nodeChanged()})}function c(){function O(){var Q=e.getAttribs(n.getStart().cloneNode(false));return function(){var R=n.getStart();if(R!==a.getBody()){e.setAttrib(R,"style",null);G(Q,function(S){R.setAttributeNode(S.cloneNode(true))})}}}function N(){return !n.isCollapsed()&&e.getParent(n.getStart(),e.isBlock)!=e.getParent(n.getEnd(),e.isBlock)}function P(Q,R){R.preventDefault();return false}a.onKeyPress.add(function(Q,S){var R;if(!B(S)&&(S.keyCode==8||S.keyCode==46)&&N()){R=O();Q.getDoc().execCommand("delete",false,null);R();S.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(R){var Q;if(!B(R)&&N()){Q=O();a.onKeyUp.addToTop(P);setTimeout(function(){Q();a.onKeyUp.remove(P)},0)}})}function b(){var O,N;e.bind(a.getDoc(),"selectionchange",function(){if(N){clearTimeout(N);N=0}N=window.setTimeout(function(){var P=n.getRng();if(!O||!tinymce.dom.RangeUtils.compareRanges(P,O)){a.nodeChanged();O=P}},50)})}function z(){document.body.setAttribute("role","application")}function v(){a.onKeyDown.add(function(N,P){if(!B(P)&&P.keyCode===f){if(n.isCollapsed()&&n.getRng(true).startOffset===0){var O=n.getNode().previousSibling;if(O&&O.nodeName&&O.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(P)}}}})}function E(){if(p()>7){return}C("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");y.addNodeFilter("pre",function(N,P){var Q=N.length,S,O,T,R;while(Q--){S=N[Q].getAll("br");O=S.length;while(O--){T=S[O];R=T.prev;if(R&&R.type===3&&R.value.charAt(R.value-1)!="\n"){R.value+="\n"}else{T.parent.insert(new tinymce.html.Node("#text",3),T,true).value="\n"}}}});q.addNodeFilter("pre",function(N,P){var Q=N.length,S,O,T,R;while(Q--){S=N[Q].getAll("br");O=S.length;while(O--){T=S[O];R=T.prev;if(R&&R.type==3){R.value=R.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(P){var O,N=n.getNode();if(N.nodeName=="IMG"){if(O=e.getStyle(N,"width")){e.setAttrib(N,"width",O.replace(/[^0-9%]+/g,""));e.setStyle(N,"width","")}if(O=e.getStyle(N,"height")){e.setAttrib(N,"height",O.replace(/[^0-9%]+/g,""));e.setStyle(N,"height","")}}})}function d(){a.onKeyDown.add(function(T,U){var S,N,O,Q,R,V,P;S=U.keyCode==l;if(!B(U)&&(S||U.keyCode==f)&&!j.modifierPressed(U)){N=n.getRng();O=N.startContainer;Q=N.startOffset;P=N.collapsed;if(O.nodeType==3&&O.nodeValue.length>0&&((Q===0&&!P)||(P&&Q===(S?0:1)))){V=O.previousSibling;if(V&&V.nodeName=="IMG"){return}nonEmptyElements=T.schema.getNonEmptyElements();U.preventDefault();R=e.create("br",{id:"__tmp"});O.parentNode.insertBefore(R,O);T.getDoc().execCommand(S?"ForwardDelete":"Delete",false,null);O=n.getRng().startContainer;V=O.previousSibling;if(V&&V.nodeType==1&&!e.isBlock(V)&&e.isEmpty(V)&&!nonEmptyElements[V.nodeName.toLowerCase()]){e.remove(V)}e.remove("__tmp")}}})}function I(){a.onKeyDown.add(function(R,S){var P,O,T,N,Q;if(B(S)||S.keyCode!=j.BACKSPACE){return}P=n.getRng();O=P.startContainer;T=P.startOffset;N=e.getRoot();Q=O;if(!P.collapsed||T!==0){return}while(Q&&Q.parentNode&&Q.parentNode.firstChild==Q&&Q.parentNode!=N){Q=Q.parentNode}if(Q.tagName==="BLOCKQUOTE"){R.formatter.toggle("blockquote",null,Q);P=e.createRng();P.setStart(O,0);P.setEnd(O,0);n.setRng(P)}})}function H(){function N(){a._refreshContentEditable();C("StyleWithCSS",false);C("enableInlineTableEditing",false);if(!J.object_resizing){C("enableObjectResizing",false)}}if(!J.readonly){a.onBeforeExecCommand.add(N);a.onMouseDown.add(N)}}function u(){function N(O,P){G(e.select("a"),function(S){var Q=S.parentNode,R=e.getRoot();if(Q.lastChild===S){while(Q&&!e.isBlock(Q)){if(Q.parentNode.lastChild!==Q||Q===R){return}Q=Q.parentNode}e.add(Q,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(O,P){if(P==="CreateLink"){N(O)}});a.onSetContent.add(n.onSetContent.add(N))}function o(){if(J.forced_root_block){a.onInit.add(function(){C("DefaultParagraphSeparator",J.forced_root_block)})}}function r(){function N(P,O){if(!P||!O.initial){a.execCommand("mceRepaint")}}a.onUndo.add(N);a.onRedo.add(N);a.onSetContent.add(N)}function i(){a.onKeyDown.add(function(O,P){var N;if(!B(P)&&P.keyCode==f){N=O.getDoc().selection.createRange();if(N&&N.item){P.preventDefault();O.undoManager.beforeChange();e.remove(N.item(0));O.undoManager.add()}}})}function t(){var N;if(p()>=10){N="";G("p div h1 h2 h3 h4 h5 h6".split(" "),function(O,P){N+=(P>0?",":"")+O+":empty"});a.contentStyles.push(N+"{padding-right: 1px !important}")}}function x(){var P,O,af,N,aa,ad,ab,ae,Q,R,ac,Y,X,Z=document,V=a.getDoc();if(!J.object_resizing||J.webkit_fake_resize===false){return}C("enableObjectResizing",false);ac={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function T(aj){var ai,ah;ai=aj.screenX-ad;ah=aj.screenY-ab;Y=ai*aa[2]+ae;X=ah*aa[3]+Q;Y=Y<5?5:Y;X=X<5?5:X;if(j.modifierPressed(aj)||(af.nodeName=="IMG"&&aa[2]*aa[3]!==0)){Y=Math.round(X/R);X=Math.round(Y*R)}e.setStyles(N,{width:Y,height:X});if(aa[2]<0&&N.clientWidth<=Y){e.setStyle(N,"left",P+(ae-Y))}if(aa[3]<0&&N.clientHeight<=X){e.setStyle(N,"top",O+(Q-X))}}function ag(){function ah(ai,aj){if(aj){if(af.style[ai]||!a.schema.isValid(af.nodeName.toLowerCase(),ai)){e.setStyle(af,ai,aj)}else{e.setAttrib(af,ai,aj)}}}ah("width",Y);ah("height",X);e.unbind(V,"mousemove",T);e.unbind(V,"mouseup",ag);if(Z!=V){e.unbind(Z,"mousemove",T);e.unbind(Z,"mouseup",ag)}e.remove(N);S(af)}function S(ak){var ai,aj,ah;U();ai=e.getPos(ak);P=ai.x;O=ai.y;aj=ak.offsetWidth;ah=ak.offsetHeight;if(af!=ak){af=ak;Y=X=0}G(ac,function(an,al){var am;am=e.get("mceResizeHandle"+al);if(!am){am=e.add(V.documentElement,"div",{id:"mceResizeHandle"+al,"class":"mceResizeHandle",style:"cursor:"+al+"-resize; margin:0; padding:0"});e.bind(am,"mousedown",function(ao){ao.preventDefault();ag();ad=ao.screenX;ab=ao.screenY;ae=af.clientWidth;Q=af.clientHeight;R=Q/ae;aa=an;N=af.cloneNode(true);e.addClass(N,"mceClonedResizable");e.setStyles(N,{left:P,top:O,margin:0});V.documentElement.appendChild(N);e.bind(V,"mousemove",T);e.bind(V,"mouseup",ag);if(Z!=V){e.bind(Z,"mousemove",T);e.bind(Z,"mouseup",ag)}})}else{e.show(am)}e.setStyles(am,{left:(aj*an[0]+P)-(am.offsetWidth/2),top:(ah*an[1]+O)-(am.offsetHeight/2)})});if(!tinymce.isOpera&&af.nodeName=="IMG"){af.setAttribute("data-mce-selected","1")}}function U(){if(af){af.removeAttribute("data-mce-selected")}for(var ah in ac){e.hide("mceResizeHandle"+ah)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function W(){var ah=e.getParent(n.getNode(),"table,img");G(e.select("img[data-mce-selected]"),function(ai){ai.removeAttribute("data-mce-selected")});if(ah){S(ah)}else{U()}}a.onNodeChange.add(W);e.bind(V,"selectionchange",W);a.serializer.addAttributeFilter("data-mce-selected",function(ah,ai){var aj=ah.length;while(aj--){ah[aj].attr(ai,null)}})}function F(){if(p()<9){y.addNodeFilter("noscript",function(N){var O=N.length,P,Q;while(O--){P=N[O];Q=P.firstChild;if(Q){P.attr("data-mce-innertext",Q.value)}}});q.addNodeFilter("noscript",function(N){var O=N.length,P,R,Q;while(O--){P=N[O];R=N[O].firstChild;if(R){R.value=tinymce.html.Entities.decode(R.value)}else{Q=P.attributes.map["data-mce-innertext"];if(Q){P.attr("data-mce-innertext",null);R=new tinymce.html.Node("#text",3);R.value=Q;R.raw=true;P.append(R)}}}})}}function m(){a.contentStyles.push("body {min-height: 100px}");a.onClick.add(function(N,O){if(O.target.nodeName=="HTML"){a.execCommand("SelectAll");a.selection.collapse(true);a.nodeChanged()}})}function k(){a.onInit.add(function(){var N;a.getBody().addEventListener("mscontrolselect",function(O){setTimeout(function(){if(a.selection.getNode()!=O.target){N=a.selection.getRng();n.fakeRng=a.dom.createRng();n.fakeRng.setStartBefore(O.target);n.fakeRng.setEndAfter(O.target)}},0)},false);a.getDoc().addEventListener("selectionchange",function(O){if(N&&!tinymce.dom.RangeUtils.compareRanges(a.selection.getRng(),N)){n.fakeRng=N=null}},false)})}v();I();s();if(tinymce.isWebKit){d();L();M();h();o();if(tinymce.isIDevice){b()}else{x();K()}}if(tinymce.isIE&&!tinymce.isIE11){D();z();E();g();i();t();F()}if(tinymce.isIE11){m();k()}if(tinymce.isGecko&&!tinymce.isIE11){D();A();c();H();u();r()}if(tinymce.isOpera){x()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;"};d={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;if(z["border-image"]==="none"){delete z["border-image"]}F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object script",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K<G;K++){F=N.exec(L[K]);if(F){W=F[1];Q=F[2];E=F[3];X=F[4];O={};J=[];I={attributes:O,attributesOrder:J};if(W==="#"){I.paddEmpty=true}if(W==="-"){I.removeEmpty=true}if(S){for(ad in S){O[ad]=S[ad]}J.push.apply(J,H)}if(X){X=d(X,"|");for(Z=0,V=X.length;Z<V;Z++){F=R.exec(X[Z]);if(F){U={};ac=F[1];Y=F[2].replace(/::/g,":");W=F[3];T=F[4];if(ac==="!"){I.attributesRequired=I.attributesRequired||[];I.attributesRequired.push(Y);U.required=true}if(ac==="-"){delete O[Y];J.splice(f.inArray(J,Y),1);continue}if(W){if(W==="="){I.attributesDefault=I.attributesDefault||[];I.attributesDefault.push({name:Y,value:T});U.defaultValue=T}if(W===":"){I.attributesForced=I.attributesForced||[];I.attributesForced.push({name:Y,value:T});U.forcedValue=T}if(W==="<"){U.validValues=e(T,"?")}}if(M.test(Y)){I.attributePatterns=I.attributePatterns||[];U.pattern=i(Y);I.attributePatterns.push(U)}else{if(!O[Y]){J.push(Y)}O[Y]=U}}}}if(!S&&Q=="@"){S=O;H=J}if(E){I.outputName=Q;s[E]=I}if(M.test(Q)){I.pattern=i(Q);j.push(I)}else{s[Q]=I}}}}}function t(E){s={};j=[];C(E);g(y,function(G,F){k[F]=G.children})}function l(F){var E=/^(~)?(.+)$/;if(F){g(d(F),function(J){var H=E.exec(J),I=H[1]==="~",K=I?"span":"div",G=H[2];k[G]=k[K];p[G]=K;if(!I){v[G.toUpperCase()]={};v[G]={}}if(!s[G]){s[G]=s[K]}g(k,function(L,M){if(L[K]){L[G]=L[K]}})})}}function x(F){var E=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(F){g(d(F),function(J){var I=E.exec(J),G,H;if(I){H=I[1];if(H){G=k[I[2]]}else{G=k[I[2]]={"#comment":{}}}G=k[I[2]];g(d(I[3],"|"),function(K){if(H==="-"){delete G[K]}else{G[K]={}}})}})}}function B(E){var G=s[E],F;if(G){return G}F=j.length;while(F--){G=j[F];if(G.pattern.test(E)){return G}}}if(!A.valid_elements){g(y,function(F,E){s[E]={attributes:F.attributes,attributesOrder:F.attributesOrder};k[E]=F.children});if(A.schema!="html5"){g(d("strong/b,em/i"),function(E){E=d(E,"/");s[E[1]].outputName=E[0]})}s.img.attributesDefault=[{name:"alt",value:""}];g(d("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr,strong,em,b,i"),function(E){if(s[E]){s[E].removeEmpty=true}});g(d("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(E){s[E].paddEmpty=true})}else{t(A.valid_elements)}l(A.custom_elements);x(A.valid_children);C(A.extended_valid_elements);x("+ol[ul|ol],+ul[ul|ol]");if(A.invalid_elements){f.each(f.explode(A.invalid_elements),function(E){if(s[E]){delete s[E]}})}if(!B("span")){C("span[!data-mce-type|*]")}u.children=k;u.styles=D;u.getBoolAttrs=function(){return r};u.getBlockElements=function(){return v};u.getTextBlockElements=function(){return textBlockElementsMap};u.getShortEndedElements=function(){return z};u.getSelfClosingElements=function(){return q};u.getNonEmptyElements=function(){return n};u.getWhiteSpaceElements=function(){return o};u.isValidChild=function(E,G){var F=k[E];return !!(F&&F[G])};u.isValid=function(F,E){var H,G,I=B(F);if(I){if(E){if(I.attributes[E]){return true}H=I.attributePatterns;if(H){G=H.length;while(G--){if(H[G].pattern.test(F)){return true}}}}else{return true}}return false};u.getElementRule=B;u.getCustomElements=function(){return p};u.addValidElements=C;u.setValidElements=t;u.addCustomElements=l;u.addValidChildren=x;u.elements=s}})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(E){var n=this,g,G=0,I,B,A=[],N,Q,C,r,z,s,M,H,O,v,m,k,t,R,o,P,F,S,L,f,J,l,D,K,h,x=0,j=a.html.Entities.decode,y,q;function u(T){var V,U;V=A.length;while(V--){if(A[V].name===T){break}}if(V>=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G<g.index){n.text(j(E.substr(G,g.index-G)))}if(I=g[6]){I=I.toLowerCase();if(q&&o.test(I)){I=I.substr(1)}u(I)}else{if(I=g[7]){I=I.toLowerCase();if(q&&o.test(I)){I=I.substr(1)}O=I in M;if(y&&J[I]&&A.length>0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G<E.length){n.text(j(E.substr(G)))}for(Q=A.length-1;Q>=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-mce-")===0){return false}}}if(j.type===8){return false}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(n){var p,q,y,x,A,o,r,l,u,v,k,t,m,z,s;t=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();m=h.getTextBlockElements();for(p=0;p<n.length;p++){q=n[p];if(!q.parent||q.fixed){continue}if(m[q.name]&&q.parent.name=="li"){z=q.next;while(z){if(m[z.name]){z.name="li";z.fixed=true;q.parent.insert(z,q.parent)}else{break}z=z.next}q.unwrap(q);continue}x=[q];for(y=q.parent;y&&!h.isValidChild(y.name,q.name)&&!t[y.name];y=y.parent){x.push(y)}if(y&&x.length>1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u<x.length-1;u++){if(h.isValidChild(o.name,x[u].name)){r=f.filterNode(x[u].clone());o.append(r)}else{r=o}for(l=x[u].firstChild;l&&l!=x[u+1];){s=l.next;r.append(l);l=s}o=r}if(!A.isEmpty(k)){y.insert(A,x[0],true);y.insert(q,A)}else{y.insert(q,x[0],true)}y=x[0];if(y.isEmpty(k)||y.firstChild===y.lastChild&&y.firstChild.name==="br"){y.empty().remove()}}else{if(q.parent){if(q.name==="li"){z=q.prev;if(z&&(z.name==="ul"||z.name==="ul")){z.append(q);continue}z=q.next;if(z&&(z.name==="ul"||z.name==="ul")){z.insert(q,z.firstChild,true);continue}q.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(q.parent.name,"div")&&h.isValidChild("div",q.name)){q.wrap(f.filterNode(new a("div",1)))}else{if(q.name==="style"||q.name==="script"){q.empty().remove()}else{q.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,J,B,A,D,C,x,r,F,N,z,o,E,M=[],L,t,k,y,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;z=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();E=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;y=/^[ \t\r\n]+$/;function G(){var O=J.firstChild,l,P;while(O){l=O.next;if(O.type==3||(O.type==1&&O.name!=="p"&&!o[O.name]&&!O.attr("data-mce-type"))){if(!P){P=K(q,1);J.insert(P,O);P.append(O)}else{P.append(O)}}else{P=null}O=l}}function K(l,O){var P=new a(l,O),Q;if(l in e){Q=i[l];if(Q){Q.push(P)}else{i[l]=[P]}}return P}function I(P){var Q,l,O;for(Q=P.prev;Q&&Q.type===3;){l=Q.value.replace(t,"");if(l.length>0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;B.empty().remove();B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D<C;D++){F[D](A,N,m)}}for(D=0,C=d.length;D<C;D++){F=d[D];if(F.name in c){A=c[F.name];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(x=0,r=F.callbacks.length;x<r;x++){F.callbacks[x](A,F.name,m)}}}}return J};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,v=b.extend({},h.getBlockElements()),k=h.getNonEmptyElements(),t,s,p,u;v.body=1;for(r=0;r<q;r++){o=n[r];t=o.parent;if(v[o.parent.name]&&o===t.lastChild){p=o.prev;while(p){u=p.name;if(u!=="span"||p.attr("data-mce-type")!=="bookmark"){if(u!=="br"){break}if(u==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(t.isEmpty(k)){elementRule=h.getElementRule(t.name);if(elementRule){if(elementRule.removeEmpty){t.remove()}else{if(elementRule.paddEmpty){t.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}else{s=o;while(t.firstChild===s&&t.lastChild===s){s=t;if(v[t.name]){break}t=t.parent}if(s===t){textNode=new b.html.Node("#text",3);textNode.value="\u00a0";o.replace(textNode)}}}})}if(!g.allow_html_in_named_anchor){f.addAttributeFilter("id,name",function(k,l){var n=k.length,p,m,o,q;while(n--){q=k[n];if(q.name==="a"&&q.firstChild&&!q.attr("href")){o=q.parent;p=q.lastChild;do{m=p.prev;o.insert(p,q);p=m}while(p)}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);tinymce.dom={};(function(b,h){var g=!!document.addEventListener;function c(k,j,l,i){if(k.addEventListener){k.addEventListener(j,l,i||false)}else{if(k.attachEvent){k.attachEvent("on"+j,l)}}}function e(k,j,l,i){if(k.removeEventListener){k.removeEventListener(j,l,i||false)}else{if(k.detachEvent){k.detachEvent("on"+j,l)}}}function a(n,l){var i,k=l||{};function j(){return false}function m(){return true}for(i in n){if(i!=="layerX"&&i!=="layerY"){k[i]=n[i]}}if(!k.target){k.target=k.srcElement||document}k.preventDefault=function(){k.isDefaultPrevented=m;if(n){if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}}};k.stopPropagation=function(){k.isPropagationStopped=m;if(n){if(n.stopPropagation){n.stopPropagation()}else{n.cancelBubble=true}}};k.stopImmediatePropagation=function(){k.isImmediatePropagationStopped=m;k.stopPropagation()};if(!k.isDefaultPrevented){k.isDefaultPrevented=j;k.isPropagationStopped=j;k.isImmediatePropagationStopped=j}return k}function d(m,n,l){var k=m.document,j={type:"ready"};function i(){if(!l.domLoaded){l.domLoaded=true;n(j)}}if(k.readyState=="complete"){i();return}if(g){c(m,"DOMContentLoaded",i)}else{c(k,"readystatechange",function(){if(k.readyState==="complete"){e(k,"readystatechange",arguments.callee);i()}});if(k.documentElement.doScroll&&m===m.top){(function(){try{k.documentElement.doScroll("left")}catch(o){setTimeout(arguments.callee,0);return}i()})()}}c(m,"load",i)}function f(k){var q=this,p={},i,o,n,m,l;m="onmouseenter" in document.documentElement;n="onfocusin" in document.documentElement;l={mouseenter:"mouseover",mouseleave:"mouseout"};i=1;q.domLoaded=false;q.events=p;function j(t,x){var s,u,r,v;s=p[x][t.type];if(s){for(u=0,r=s.length;u<r;u++){v=s[u];if(v&&v.func.call(v.scope,t)===false){t.preventDefault()}if(t.isImmediatePropagationStopped()){return}}}}q.bind=function(x,A,D,E){var s,t,u,r,B,z,C,v=window;function y(F){j(a(F||v.event),s)}if(!x||x.nodeType===3||x.nodeType===8){return}if(!x[h]){s=i++;x[h]=s;p[s]={}}else{s=x[h];if(!p[s]){p[s]={}}}E=E||x;A=A.split(" ");u=A.length;while(u--){r=A[u];z=y;B=C=false;if(r==="DOMContentLoaded"){r="ready"}if((q.domLoaded||x.readyState=="complete")&&r==="ready"){q.domLoaded=true;D.call(E,a({type:r}));continue}if(!m){B=l[r];if(B){z=function(F){var H,G;H=F.currentTarget;G=F.relatedTarget;if(G&&H.contains){G=H.contains(G)}else{while(G&&G!==H){G=G.parentNode}}if(!G){F=a(F||v.event);F.type=F.type==="mouseout"?"mouseleave":"mouseenter";F.target=H;j(F,s)}}}}if(!n&&(r==="focusin"||r==="focusout")){C=true;B=r==="focusin"?"focus":"blur";z=function(F){F=a(F||v.event);F.type=F.type==="focus"?"focusin":"focusout";j(F,s)}}t=p[s][r];if(!t){p[s][r]=t=[{func:D,scope:E}];t.fakeName=B;t.capture=C;t.nativeHandler=z;if(!g){t.proxyHandler=k(s)}if(r==="ready"){d(x,z,q)}else{c(x,B||r,g?z:t.proxyHandler,C)}}else{t.push({func:D,scope:E})}}x=t=0;return D};q.unbind=function(x,z,A){var s,u,v,B,r,t;if(!x||x.nodeType===3||x.nodeType===8){return q}s=x[h];if(s){t=p[s];if(z){z=z.split(" ");v=z.length;while(v--){r=z[v];u=t[r];if(u){if(A){B=u.length;while(B--){if(u[B].func===A){u.splice(B,1)}}}if(!A||u.length===0){delete t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}}}}else{for(r in t){u=t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}t={}}for(r in t){return q}delete p[s];try{delete x[h]}catch(y){x[h]=null}}return q};q.fire=function(u,s,r){var v,t;if(!u||u.nodeType===3||u.nodeType===8){return q}t=a(null,r);t.type=s;do{v=u[h];if(v){j(t,v)}u=u.parentNode||u.ownerDocument||u.defaultView||u.parentWindow}while(u&&!t.isPropagationStopped());return q};q.clean=function(u){var s,r,t=q.unbind;if(!u||u.nodeType===3||u.nodeType===8){return q}if(u[h]){t(u)}if(!u.getElementsByTagName){u=u.document}if(u&&u.getElementsByTagName){t(u);r=u.getElementsByTagName("*");s=r.length;while(s--){u=r[s];if(u[h]){t(u)}}}return q};q.callNativeHandler=function(s,r){if(p){p[s][r.type].nativeHandler(r)}};q.destory=function(){p={}};q.add=function(v,s,u,t){if(typeof(v)==="string"){v=document.getElementById(v)}if(v&&v instanceof Array){var r=v.length;while(r--){q.add(v[r],s,u,t)}return}if(s==="init"){s="ready"}return q.bind(v,s instanceof Array?s.join(" "):s,u,t)};q.remove=function(v,s,u,t){if(!v){return q}if(typeof(v)==="string"){v=document.getElementById(v)}if(v instanceof Array){var r=v.length;while(r--){q.remove(v[r],s,u,t)}return q}return q.unbind(v,s instanceof Array?s.join(" "):s,u)};q.clear=function(r){if(typeof(r)==="string"){r=document.getElementById(r)}return q.clean(r)};q.cancel=function(r){if(r){q.prevent(r);q.stop(r)}return false};q.prevent=function(r){if(!r.preventDefault){r=a(r)}r.preventDefault();return false};q.stop=function(r){if(!r.stopPropagation){r=a(r)}r.stopPropagation();return false}}b.EventUtils=f;b.Event=new f(function(i){return function(j){tinymce.dom.Event.callNativeHandler(i,j)}});b.Event.bind(window,"ready",function(){});b=0})(tinymce.dom,"data-mce-expando");tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(e){var g=e.each,d=e.is,f=e.isWebKit,b=e.isIE,h=e.html.Entities,c=/^([a-z0-9],?)+$/i,a=/^[ \t\r\n]*$/;e.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(o,l){var k=this,i,j,n;k.doc=o;k.win=window;k.files={};k.cssFlicker=false;k.counter=0;k.stdMode=!e.isIE||o.documentMode>=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&!e.isIE11&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||e.isIE11||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+"</"+q+">"}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b&&!e.isIE11){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":(b&&!e.isIE11)?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&!e.isIE11&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="<br />"+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="<br />"+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(t){switch(t.type||1){case 1:if(t.selectorText){g(t.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:try{q(t.styleSheet)}catch(s){}break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab<aa){return -1}return 1}ac=X;while(ac&&ac.parentNode!=Z){ac=ac.parentNode}if(ac){Y=0;t=Z.firstChild;while(t!=ac&&Y<ab){Y++;t=t.nextSibling}if(ab<=Y){return -1}return 1}ac=Z;while(ac&&ac.parentNode!=X){ac=ac.parentNode}if(ac){Y=0;t=X.firstChild;while(t!=ac&&Y<aa){Y++;t=t.nextSibling}if(Y<aa){return -1}return 1}ad=c.findCommonAncestor(Z,X);af=Z;while(af&&af.parentNode!=ad){af=af.parentNode}if(!af){af=ad}ae=X;while(ae&&ae.parentNode!=ad){ae=ae.parentNode}if(!ae){ae=ad}if(af==ae){return 0}t=ad.firstChild;while(t){if(t==af){return -1}if(t==ae){return 1}t=t.nextSibling}}function C(X,aa,Z){var t,Y;if(X){O[h]=aa;O[W]=Z}else{O[Q]=aa;O[A]=Z}t=O[Q];while(t.parentNode){t=t.parentNode}Y=O[h];while(Y.parentNode){Y=Y.parentNode}if(Y==t){if(H(O[h],O[W],O[Q],O[A])>0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="<span>\uFEFF</span>";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="<span>\uFEFF</span><span>\uFEFF</span>";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e<y.length;e++){if(y[e]===y[e-1]){y.splice(e--,1)}}}}return y};d.matches=function(e,y){return d(e,null,null,y)};d.matchesSelector=function(e,y){return d(y,null,null,[e]).length>0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z<B;z++){C=k.order[z];if((A=k.leftMatch[C].exec(E))){y=A[1];A.splice(1,1);if(y.substr(y.length-1)!=="\\"){A[1]=(A[1]||"").replace(q,"");D=k.find[C](A,e,F);if(D!=null){E=E.replace(k.match[C],"");break}}}}if(!D){D=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:D,expr:E}};d.filter=function(I,H,L,B){var D,e,G,N,K,y,A,C,J,z=I,M=[],F=H,E=H&&H[0]&&d.isXML(H[0]);while(I&&H.length){for(G in k.filter){if((D=k.leftMatch[G].exec(I))!=null&&D[2]){y=k.filter[G];A=D[1];e=false;D.splice(1,1);if(A.substr(A.length-1)==="\\"){continue}if(F===M){M=[]}if(k.preFilter[G]){D=k.preFilter[G](D,F,L,M,B,E);if(!D){e=N=true}else{if(D===true){continue}}}if(D){for(C=0;(K=F[C])!=null;C++){if(K){N=y(K,D,C,F);J=B^N;if(L&&N!=null){if(J){e=true}else{F[C]=false}}else{if(J){M.push(K);e=true}}}}}if(N!==undefined){if(!L){F=M}I=I.replace(k.match[G],"");if(!e){return[]}break}}}if(I===z){if(e==null){d.error(I)}else{break}}z=I}return F};d.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var b=d.getText=function(B){var z,A,e=B.nodeType,y="";if(e){if(e===1||e===9||e===11){if(typeof B.textContent==="string"){return B.textContent}else{if(typeof B.innerText==="string"){return B.innerText.replace(u,"")}else{for(B=B.firstChild;B;B=B.nextSibling){y+=b(B)}}}}else{if(e===3||e===4){return B.nodeValue}}}else{for(z=0;(A=B[z]);z++){if(A.nodeType!==8){y+=b(A)}}}return y};var k=d.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(D,y){var A=typeof y==="string",C=A&&!x.test(y),E=A&&!C;if(C){y=y.toLowerCase()}for(var z=0,e=D.length,B;z<e;z++){if((B=D[z])){while((B=B.previousSibling)&&B.nodeType!==1){}D[z]=E||B&&B.nodeName.toLowerCase()===y?B||false:B===y}}if(E){d.filter(y,D,true)}},">":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z<e;z++){C=D[z];if(C){var A=C.parentNode;D[z]=A.nodeName.toLowerCase()===y?A:false}}}else{for(;z<e;z++){C=D[z];if(C){D[z]=B?C.parentNode:C.parentNode===y}}if(B){d.filter(y,D,true)}}},"":function(A,y,C){var B,z=o++,e=t;if(typeof y==="string"&&!x.test(y)){y=y.toLowerCase();B=y;e=a}e("parentNode",y,z,A,B,C)},"~":function(A,y,C){var B,z=o++,e=t;if(typeof y==="string"&&!x.test(y)){y=y.toLowerCase();B=y;e=a}e("previousSibling",y,z,A,B,C)}},find:{ID:function(y,z,A){if(typeof z.getElementById!=="undefined"&&!A){var e=z.getElementById(y[1]);return e&&e.parentNode?[e]:[]}},NAME:function(z,C){if(typeof C.getElementsByName!=="undefined"){var y=[],B=C.getElementsByName(z[1]);for(var A=0,e=B.length;A<e;A++){if(B[A].getAttribute("name")===z[1]){y.push(B[A])}}return y.length===0?null:y}},TAG:function(e,y){if(typeof y.getElementsByTagName!=="undefined"){return y.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(A,y,z,e,D,E){A=" "+A[1].replace(q,"")+" ";if(E){return A}for(var B=0,C;(C=y[B])!=null;B++){if(C){if(D^(C.className&&(" "+C.className+" ").replace(/[\t\n\r]/g," ").indexOf(A)>=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return y<e[3]-0},gt:function(z,y,e){return y>e[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C<B;C++){if(A[C]===z){return false}}return true}else{d.error(e)}}}},CHILD:function(z,B){var A,H,D,G,e,C,F,E=B[1],y=z;switch(E){case"only":case"first":while((y=y.previousSibling)){if(y.nodeType===1){return false}}if(E==="first"){return true}y=z;case"last":while((y=y.nextSibling)){if(y.nodeType===1){return false}}return true;case"nth":A=B[2];H=B[3];if(A===1&&H===0){return true}D=B[0];G=z.parentNode;if(G&&(G[i]!==D||!z.nodeIndex)){C=0;for(y=G.firstChild;y;y=y.nextSibling){if(y.nodeType===1){y.nodeIndex=++C}}G[i]=D}F=z.nodeIndex-H;if(A===0){return F===0}else{return(F%A===0&&F/A>=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z<e;z++){y.push(B[z])}}else{for(;B[z];z++){y.push(B[z])}}}return y}}var p,m;if(document.documentElement.compareDocumentPosition){p=function(y,e){if(y===e){h=true;return 0}if(!y.compareDocumentPosition||!e.compareDocumentPosition){return y.compareDocumentPosition?-1:1}return y.compareDocumentPosition(e)&4?-1:1}}else{p=function(F,E){if(F===E){h=true;return 0}else{if(F.sourceIndex&&E.sourceIndex){return F.sourceIndex-E.sourceIndex}}var C,y,z=[],e=[],B=F.parentNode,D=E.parentNode,G=B;if(B===D){return m(F,E)}else{if(!B){return -1}else{if(!D){return 1}}}while(G){z.unshift(G);G=G.parentNode}G=D;while(G){e.unshift(G);G=G.parentNode}C=z.length;y=e.length;for(var A=0;A<C&&A<y;A++){if(z[A]!==e[A]){return m(z[A],e[A])}}return A===C?m(F,e[A],-1):m(z[A],E,1)};m=function(y,e,z){if(y===e){return z}var A=y.nextSibling;while(A){if(A===e){return -1}A=A.nextSibling}return 1}}(function(){var y=document.createElement("div"),z="script"+(new Date()).getTime(),e=document.documentElement;y.innerHTML="<a name='"+z+"'/>";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="<p class='TEST'></p>";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A<z;A++){var e=G[A];if(e){var B=false;e=e[y];while(e){if(e[i]===C){B=G[e.sizset];break}if(e.nodeType===1&&!F){e[i]=C;e.sizset=A}if(e.nodeName.toLowerCase()===D){B=e;break}e=e[y]}G[A]=B}}}function t(y,D,C,G,E,F){for(var A=0,z=G.length;A<z;A++){var e=G[A];if(e){var B=false;e=e[y];while(e){if(e[i]===C){B=G[e.sizset];break}if(e.nodeType===1){if(!F){e[i]=C;e.sizset=A}if(typeof D!=="string"){if(e===D){B=true;break}}else{if(d.filter(D,[e]).length>0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A<y;A++){d(z,F[A],E,D)}return d.filter(B,E)};window.tinymce.dom.Sizzle=d})();(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(d){function f(g){return g.replace(/[\n\r]+/g,"")}var c=d.is,b=d.isIE,e=d.each,a=d.dom.TreeWalker;d.create("tinymce.dom.Selection",{Selection:function(k,j,i,h){var g=this;g.dom=k;g.win=j;g.serializer=i;g.editor=h;e(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(l){g[l]=new d.util.Dispatcher(g)});if(!g.win.getSelection){g.tridentSel=new d.dom.TridentSelection(g)}if(d.isIE&&!d.isIE11&&k.boxModel){this._fixIESelection()}d.addUnload(g.destroy,g)},setCursorLocation:function(i,j){var g=this;var h=g.dom.createRng();h.setStart(i,j);h.setEnd(i,j);g.setRng(h);g.collapse(false)},getContent:function(h){var g=this,i=g.getRng(),m=g.dom.create("body"),k=g.getSel(),j,l,o;h=h||{};j=l="";h.get=true;h.format=h.format||"html";h.forced_root_block="";g.onBeforeGetContent.dispatch(g,h);if(h.format=="text"){return g.isCollapsed()?"":(i.text||(k.toString?k.toString():""))}if(i.cloneContents){o=i.cloneContents();if(o){m.appendChild(o)}}else{if(c(i.item)||c(i.htmlText)){m.innerHTML="<br>"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='<span id="__caret">_</span>';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('<span id="__mce_tmp">_</span>'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){h=y.getRng();if(h.setStart){h={startContainer:h.startContainer,startOffset:h.startOffset,endContainer:h.endContainer,endOffset:h.endOffset}}return{rng:h}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML('<span data-mce-type="bookmark" id="'+j+'_start" style="'+x+'">'+m+"</span>");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML('<span data-mce-type="bookmark" id="'+j+'_end" style="'+x+'">'+m+"</span>")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(q){var v=this,n=v.dom,l,j,g,i,u,k,x,r,s;function h(C){var t=q[C?"start":"end"],z,A,B,y;if(t){B=t[0];for(A=u,z=t.length-1;z>=1;z--){y=A.childNodes;if(t[z]>y.length-1){return}A=y[t[z]]}if(A.nodeType===3){B=Math.min(t[0],A.nodeValue.length)}if(A.nodeType===1){B=Math.min(t[0],A.childNodes.length)}if(C){g.setStart(A,B)}else{g.setEnd(A,B)}}return true}function m(D){var y=n.get(q.id+"_"+D),C,t,A,B,z=q.keep;if(y){C=y.parentNode;if(D=="start"){if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}k=x=C;r=s=t}else{if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}x=C;s=t}if(!z){B=y.previousSibling;A=y.nextSibling;e(d.grep(y.childNodes),function(E){if(E.nodeType==3){E.nodeValue=E.nodeValue.replace(/\uFEFF/g,"")}});while(y=n.get(q.id+"_"+D)){n.remove(y,1)}if(B&&A&&B.nodeType==A.nodeType&&B.nodeType==3&&!d.isOpera){t=B.nodeValue.length;B.appendData(A.nodeValue);n.remove(A);if(D=="start"){k=x=B;r=s=t}else{x=B;s=t}}}}}function o(t){if(n.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='<br data-mce-bogus="1" />'}return t}if(q){if(q.start){g=n.createRng();u=n.getRoot();if(v.tridentSel){return v.tridentSel.moveToBookmark(q)}if(h(true)&&h()){v.setRng(g)}}else{if(q.id){m("start");m("end");if(k){g=n.createRng();g.setStart(o(k),r);g.setEnd(o(x),s);v.setRng(g)}}else{if(q.name){v.select(n.select(q.name)[q.index])}else{if(q.rng){g=q.rng;if(g.startContainer){i=v.dom.createRng();try{i.setStart(g.startContainer,g.startOffset);i.setEnd(g.endContainer,g.endOffset)}catch(p){}g=i}v.setRng(g)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(h.fakeRng){return h.fakeRng}if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&!d.isIE11&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(j<h.y||j+25>h.y+h.h){g.editor.getWin().scrollTo(0,j<h.y?j:j-h.h+25)}},destroy:function(h){var g=this;g.win=null;if(!h){d.removeUnload(g.destroy)}},_fixIESelection:function(){var h=this.dom,n=h.doc,i=n.body,k,o,g;function j(p,s){var q=i.createTextRange();try{q.moveToPoint(p,s)}catch(r){q=null}return q}function m(q){var p;if(q.button){p=j(q.x,q.y);if(p){if(p.compareEndPoints("StartToStart",o)>0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE||a.isIE11){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&d<h.nodeValue.length){i=f(h,d);h=i.previousSibling;if(g>d){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d<h.nodeValue.length){h=f(h,d);d=0}if(i.nodeType==3&&g>0&&g<i.nodeValue.length){i=f(i,g).previousSibling;g=i.nodeValue.length}}return{startContainer:h,startOffset:d,endContainer:i,endOffset:g}}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var q=this,n=e.root,m=e.items,o=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,l=e.excludeFromTabOrder,k,h,p,d,g;f=f||b.DOM;k=function(r){g=r.target.id};h=function(r){f.setAttrib(r.target.id,"tabindex","-1")};d=function(r){var s=f.get(g);f.setAttrib(s,"tabindex","0");s.focus()};q.focus=function(){f.get(g).focus()};q.destroy=function(){c(m,function(s){var t=f.get(s.id);f.unbind(t,"focus",k);f.unbind(t,"blur",h)});var r=f.get(n);f.unbind(r,"focus",d);f.unbind(r,"keydown",p);m=f=n=q.focus=k=h=p=d=null;q.destroy=function(){}};q.moveFocus=function(v,s){var r=-1,u=q.controls,t;if(!g){return}c(m,function(y,x){if(y.id===g){r=x;return false}});r+=v;if(r<0){r=m.length-1}else{if(r>=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}a.cancel(z);break;case u:if(i){q.moveFocus(1)}a.cancel(z);break;case y:if(o){q.moveFocus(-1)}a.cancel(z);break;case A:if(o){q.moveFocus(1)}a.cancel(z);break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<span class="mceIcon '+e["class"]+'"><img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" /></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keydown",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){b.dom.Event.cancel(f);return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='<span role="listbox" aria-haspopup="true" aria-labelledby="'+g.id+'_voiceDesc" aria-describedby="'+g.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+g.id+'" cellpadding="0" cellspacing="0" class="'+k+" "+k+"Enabled"+(i["class"]?(" "+i["class"]):"")+'"><tbody><tr>';j+="<td>"+d.createHTML("span",{id:g.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},g.settings.title);j+=d.createHTML("a",{id:g.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},d.encode(g.settings.title))+"</td>";j+="<td>"+d.createHTML("a",{id:g.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";j+="</tr></tbody></table></span>";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(q){var n,p=37,m=39,l=38,r=40,k=13,o=32;b.remove(h.id,"change",i);j=false;n=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",n)});if(q.keyCode==k||q.keyCode==o){g(q);return b.cancel(q)}else{if(q.keyCode==r||q.keyCode==l){q.stopImmediatePropagation()}}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE&&!j.isIE11){l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(k){var l=k.DOM,j=k.dom.Event,f=k.extend,i=k.each,a=k.isGecko,b=k.isIE,e=k.isWebKit,d=k.is,h=k.ThemeManager,c=k.PluginManager,g=k.explode;k.create("tinymce.Editor",{Editor:function(p,o){var m=this,n=true;m.settings=o=f({id:p,language:"en",theme:"advanced",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:k.documentBaseURL,add_form_submit_trigger:n,submit_patch:n,add_unload_trigger:n,convert_urls:n,relative_urls:n,remove_script_host:n,table_inline_editing:false,object_resizing:n,accessibility_focus:n,doctype:k.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y<z){y=z}}else{p=H.theme(G,C);if(p.editorContainer.nodeType){p.editorContainer=p.editorContainer.id=p.editorContainer.id||G.id+"_parent"}if(p.iframeContainer.nodeType){p.iframeContainer=p.iframeContainer.id=p.iframeContainer.id||G.id+"_iframecontainer"}y=p.iframeHeight||C.offsetHeight;if(b){G.onInit.add(function(n){n.dom.bind(n.getBody(),"beforedeactivate keydown keyup",function(){n.bookmark=n.selection.getBookmark(1)})});G.onNodeChange.add(function(n){if(document.activeElement.id==n.id+"_ifr"){n.bookmark=n.selection.getBookmark(1)}})}}G.editorContainer=p.editorContainer}if(H.content_css){i(g(H.content_css),function(n){G.contentCSS.push(G.documentBaseURI.toAbsolute(n))})}if(H.content_style){G.contentStyles.push(H.content_style)}if(H.content_editable){C=q=p=null;return G.initContentBody()}if(document.domain&&location.hostname!=document.domain){k.relaxedDomain=document.domain}G.iframeHTML=H.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+='<base href="'+G.documentBaseURI.getURI()+'" />'}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{G.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}}G.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';for(x=0;x<G.contentCSS.length;x++){G.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+G.contentCSS[x]+'" />'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='</head><body id="'+v+'" class="mceContentBody '+B+'" onload="window.parent.tinyMCE.get(\''+G.id+"').onLoad.dispatch();\"><br></body></html>";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return"<!--mce:protected "+escape(x)+"-->"})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.bookmark){t.moveToBookmark(u.bookmark);u.bookmark=null}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive&&!k.isIE11){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'><br data-mce-bogus="1"></'+q+">"}else{r='<br data-mce-bogus="1">'}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}if(!o.settings.content_editable||document.activeElement===o.getBody()){o.selection.normalize()}return p.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=d.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceToggleFormat:function(y,x,v){s(v)},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){if(!k.forced_root_block&&!m.getParent(p.getNode(),m.isBlock)){q.apply("div")}e(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(d.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m<e.length-1;m++){e[m]=e[m+1]}e.length--;i=e.length}}p.bookmark=h.selection.getBookmark(2,true);if(i<e.length-1){e.length=i+1}e.push(p);i=e.length-1;l.onAdd.dispatch(l,p);h.isNotDirty=0;return p},undo:function(){var n,m;if(l.typing){l.add();l.typing=false}if(i>0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i<e.length-1){m=e[++i];h.setContent(m.content,{format:"raw"});h.selection.moveToBookmark(m.bookmark);l.onRedo.dispatch(l,m)}return m},clear:function(){e=[];i=0;l.typing=false},hasUndo:function(){return i>0||this.typing},hasRedo:function(){return i<e.length-1&&!this.typing}};return l}})(tinymce);tinymce.ForceBlocks=function(c){var b=c.settings,e=c.dom,a=c.selection,d=c.schema.getBlockElements();function f(){var j=a.getStart(),h=c.getBody(),g,k,o,s,q,i,l,m=-16777215,p,r;if(!j||j.nodeType!==1||!b.forced_root_block){return}while(j&&j!=h){if(d[j.nodeName]){return}j=j.parentNode}g=a.getRng();if(g.setStart){k=g.startContainer;o=g.startOffset;s=g.endContainer;q=g.endOffset}else{if(g.item){j=g.item(0);g=c.getDoc().body.createTextRange();g.moveToElementText(j)}r=g.parentElement().ownerDocument===c.getDoc();tmpRng=g.duplicate();tmpRng.collapse(true);o=tmpRng.move("character",m)*-1;if(!tmpRng.collapsed){tmpRng=g.duplicate();tmpRng.collapse(false);q=(tmpRng.move("character",m)*-1)-o}}j=h.firstChild;while(j){if(j.nodeType===3||(j.nodeType==1&&!d[j.nodeName])){if(j.nodeType===3&&j.nodeValue.length==0){l=j;j=j.nextSibling;e.remove(l);continue}if(!i){i=e.create(b.forced_root_block);j.parentNode.insertBefore(i,j);p=true}l=j;j=j.nextSibling;i.appendChild(l)}else{i=null;j=j.nextSibling}}if(p){if(g.setStart){g.setStart(k,o);g.setEnd(s,q);a.setRng(g)}else{if(r){try{g=c.getDoc().body.createTextRange();g.moveToElementText(h);g.collapse(true);g.moveStart("character",o);if(q>0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k<g;k++){o=n[k].createControl(j,h);if(o){return h.add(o)}}if(j==="|"||j==="separator"){return h.createSeparator()}if(m.buttons&&(o=m.buttons[j])){return h.createButton(j,o)}return h.add(o)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}n["class"]+=i.settings.directionality=="rtl"?" mceRtl":"";f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(f,n,h){var l=this,j=l.editor,i,k,m;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,scope:n.scope,control_manager:l},n);f=l.prefix+f;function g(o){return o.settings.use_accessible_selects&&!c.isGecko}if(j.settings.use_native_selects||g(j)){k=new c.ui.NativeListBox(f,n)}else{m=h||l._cls.listbox||c.ui.ListBox;k=new m(f,n,j)}l.controls[f]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){j.bookmark=j.selection.getBookmark(1)});a.add(o,"focus",function(){j.selection.moveToBookmark(j.bookmark);j.bookmark=null})})}if(k.hideMenu){j.onMouseDown.add(k.hideMenu,k)}return l.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(aa){var Q={},T=a.each,c=aa.dom,r=aa.selection,t=a.dom.TreeWalker,N=new a.dom.RangeUtils(c),d=aa.schema.isValidChild,A=a.isArray,H=c.isBlock,m=aa.settings.forced_root_block,s=c.nodeIndex,G="\uFEFF",e=/^(src|href|style)$/,X=false,C=true,P,D,x=c.getContentEditable;function I(ab){if(ab.nodeType){ab=ab.nodeName}return !!aa.schema.getTextBlockElements()[ab.toLowerCase()]}function n(ac,ab){return c.getParents(ac,ab,c.getRoot())}function b(ab){return ab.nodeType===1&&ab.id==="_mce_caret"}function j(){l({alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(ab){return true},onformat:function(ad,ab,ac){T(ac,function(af,ae){c.setAttrib(ad,ae,af)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});T("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(ab){l(ab,{block:ab,remove:"all"})});l(aa.settings.formats)}function W(){aa.addShortcut("ctrl+b","bold_desc","Bold");aa.addShortcut("ctrl+i","italic_desc","Italic");aa.addShortcut("ctrl+u","underline_desc","Underline");for(var ab=1;ab<=6;ab++){aa.addShortcut("ctrl+"+ab,"",["FormatBlock",false,"h"+ab])}aa.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);aa.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);aa.addShortcut("ctrl+9","",["FormatBlock",false,"address"])}function V(ab){return ab?Q[ab]:Q}function l(ab,ac){if(ab){if(typeof(ab)!=="string"){T(ab,function(ae,ad){l(ad,ae)})}else{ac=ac.length?ac:[ac];T(ac,function(ad){if(ad.deep===D){ad.deep=!ad.selector}if(ad.split===D){ad.split=!ad.selector||ad.inline}if(ad.remove===D&&ad.selector&&!ad.inline){ad.remove="none"}if(ad.selector&&ad.inline){ad.mixed=true;ad.block_expand=true}if(typeof(ad.classes)==="string"){ad.classes=ad.classes.split(/\s+/)}});Q[ab]=ac}}}var i=function(ac){var ab;aa.dom.getParent(ac,function(ad){ab=aa.dom.getStyle(ad,"text-decoration");return ab&&ab!=="none"});return ab};var L=function(ab){var ac;if(ab.nodeType===1&&ab.parentNode&&ab.parentNode.nodeType===1){ac=i(ab.parentNode);if(aa.dom.getStyle(ab,"color")&&ac){aa.dom.setStyle(ab,"text-decoration",ac)}else{if(aa.dom.getStyle(ab,"textdecoration")===ac){aa.dom.setStyle(ab,"text-decoration",null)}}}};function Y(ae,al,ag){var ah=V(ae),am=ah[0],ak,ac,aj,ai=r.isCollapsed();function ab(aq,ap){ap=ap||am;if(aq){if(ap.onformat){ap.onformat(aq,ap,al,ag)}T(ap.styles,function(at,ar){c.setStyle(aq,ar,q(at,al))});T(ap.attributes,function(at,ar){c.setAttrib(aq,ar,q(at,al))});T(ap.classes,function(ar){ar=q(ar,al);if(!c.hasClass(aq,ar)){c.addClass(aq,ar)}})}}function af(){function ar(ay,aw){var ax=new t(aw);for(ag=ax.current();ag;ag=ax.prev()){if(ag.childNodes.length>1||ag==ay||ag.tagName=="BR"){return ag}}}var aq=aa.selection.getRng();var av=aq.startContainer;var ap=aq.endContainer;if(av!=ap&&aq.endOffset===0){var au=ar(av,ap);var at=au.nodeType==3?au.length:au.childNodes.length;aq.setEnd(au,at)}return aq}function ad(at,ay,aw,av,aq){var ap=[],ar=-1,ax,aA=-1,au=-1,az;T(at.childNodes,function(aC,aB){if(aC.nodeName==="UL"||aC.nodeName==="OL"){ar=aB;ax=aC;return false}});T(at.childNodes,function(aC,aB){if(aC.nodeName==="SPAN"&&c.getAttrib(aC,"data-mce-type")=="bookmark"){if(aC.id==ay.id+"_start"){aA=aB}else{if(aC.id==ay.id+"_end"){au=aB}}}});if(ar<=0||(aA<ar&&au>ar)){T(a.grep(at.childNodes),aq);return 0}else{az=c.clone(aw,X);T(a.grep(at.childNodes),function(aC,aB){if((aA<ar&&aB<ar)||(aA>ar&&aB>ar)){ap.push(aC);aC.parentNode.removeChild(aC)}});if(aA<ar){at.insertBefore(az,ax)}else{if(aA>ar){at.insertBefore(az,ax.nextSibling)}}av.push(az);T(ap,function(aB){az.appendChild(aB)});return az}}function an(aq,at,aw){var ap=[],av,ar,au=true;av=am.inline||am.block;ar=c.create(av);ab(ar);N.walk(aq,function(ax){var ay;function az(aA){var aF,aD,aB,aC,aE;aE=au;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=au;au=x(aA)==="true";aC=true}if(g(aF,"br")){ay=0;if(am.block){c.remove(aA)}return}if(am.wrapper&&y(aA,ae,al)){ay=0;return}if(au&&!aC&&am.block&&!am.wrapper&&I(aF)){aA=c.rename(aA,av);ab(aA);ap.push(aA);ay=0;return}if(am.selector){T(ah,function(aG){if("collapsed" in aG&&aG.collapsed!==ai){return}if(c.is(aA,aG.selector)&&!b(aA)){ab(aA,aG);aB=true}});if(!am.inline||aB){ay=0;return}}if(au&&!aC&&d(av,aF)&&d(aD,av)&&!(!aw&&aA.nodeType===3&&aA.nodeValue.length===1&&aA.nodeValue.charCodeAt(0)===65279)&&!b(aA)&&(!am.inline||!H(aA))){if(!ay){ay=c.clone(ar,X);aA.parentNode.insertBefore(ay,aA);ap.push(ay)}ay.appendChild(aA)}else{if(aF=="li"&&at){ay=ad(aA,at,ar,ap,az)}else{ay=0;T(a.grep(aA.childNodes),az);if(aC){au=aE}ay=0}}}T(ax,az)});if(am.wrap_links===false){T(ap,function(ax){function ay(aC){var aB,aA,az;if(aC.nodeName==="A"){aA=c.clone(ar,X);ap.push(aA);az=a.grep(aC.childNodes);for(aB=0;aB<az.length;aB++){aA.appendChild(az[aB])}aC.appendChild(aA)}T(a.grep(aC.childNodes),ay)}ay(ax)})}T(ap,function(az){var ax;function aA(aC){var aB=0;T(aC.childNodes,function(aD){if(!f(aD)&&!K(aD)){aB++}});return aB}function ay(aB){var aD,aC;T(aB.childNodes,function(aE){if(aE.nodeType==1&&!K(aE)&&!b(aE)){aD=aE;return X}});if(aD&&h(aD,am)){aC=c.clone(aD,X);ab(aC);c.replace(aC,aB,C);c.remove(aD,1)}return aC||aB}ax=aA(az);if((ap.length>1||!H(az))&&ax===0){c.remove(az,1);return}if(am.inline||am.wrapper){if(!am.exact&&ax===1){az=ay(az)}T(ah,function(aB){T(c.select(aB.inline,az),function(aD){var aC;if(aB.wrap_links===false){aC=aD.parentNode;do{if(aC.nodeName==="A"){return}}while(aC=aC.parentNode)}Z(aB,al,aD,aB.exact?aD:null)})});if(y(az.parentNode,ae,al)){c.remove(az,1);az=0;return C}if(am.merge_with_parents){c.getParent(az.parentNode,function(aB){if(y(aB,ae,al)){c.remove(az,1);az=0;return C}})}if(az&&am.merge_siblings!==false){az=u(E(az),az);az=u(az,E(az,C))}}})}if(am){if(ag){if(ag.nodeType){ac=c.createRng();ac.setStartBefore(ag);ac.setEndAfter(ag);an(p(ac,ah),null,true)}else{an(ag,null,true)}}else{if(!ai||!am.inline||c.select("td.mceSelected,th.mceSelected").length){var ao=aa.selection.getNode();if(!m&&ah[0].defaultBlock&&!c.getParent(ao,c.isBlock)){Y(ah[0].defaultBlock)}aa.selection.setRng(af());ak=r.getBookmark();an(p(r.getRng(C),ah),ak);if(am.styles&&(am.styles.color||am.styles.textDecoration)){a.walk(ao,L,"childNodes");L(ao)}r.moveToBookmark(ak);R(r.getRng(C));aa.nodeChanged()}else{U("apply",ae,al)}}}}function B(ad,am,af){var ag=V(ad),ao=ag[0],ak,aj,ac,al=true;function ae(av){var au,at,ar,aq,ax,aw;if(av.nodeType===3){return}if(av.nodeType===1&&x(av)){ax=al;al=x(av)==="true";aw=true}au=a.grep(av.childNodes);if(al&&!aw){for(at=0,ar=ag.length;at<ar;at++){if(Z(ag[at],am,av,av)){break}}}if(ao.deep){if(au.length){for(at=0,ar=au.length;at<ar;at++){ae(au[at])}if(aw){al=ax}}}}function ah(aq){var ar;T(n(aq.parentNode).reverse(),function(at){var au;if(!ar&&at.id!="_start"&&at.id!="_end"){au=y(at,ad,am);if(au&&au.split!==false){ar=at}}});return ar}function ab(au,aq,aw,az){var aA,ay,ax,at,av,ar;if(au){ar=au.parentNode;for(aA=aq.parentNode;aA&&aA!=ar;aA=aA.parentNode){ay=c.clone(aA,X);for(av=0;av<ag.length;av++){if(Z(ag[av],am,ay,ay)){ay=0;break}}if(ay){if(ax){ay.appendChild(ax)}if(!at){at=ay}ax=ay}}if(az&&(!ao.mixed||!H(au))){aq=c.split(au,aq)}if(ax){aw.parentNode.insertBefore(ax,aw);at.appendChild(aw)}}return aq}function an(aq){return ab(ah(aq),aq,aq,true)}function ai(at){var ar=c.get(at?"_start":"_end"),aq=ar[at?"firstChild":"lastChild"];if(K(aq)){aq=aq[at?"firstChild":"lastChild"]}c.remove(ar,true);return aq}function ap(aq){var at,au,ar;aq=p(aq,ag,C);if(ao.split){at=M(aq,C);au=M(aq);if(at!=au){if(/^(TR|TD)$/.test(at.nodeName)&&at.firstChild){at=(at.nodeName=="TD"?at.firstChild:at.firstChild.firstChild)||at}at=S(at,"span",{id:"_start","data-mce-type":"bookmark"});au=S(au,"span",{id:"_end","data-mce-type":"bookmark"});an(at);an(au);at=ai(C);au=ai()}else{at=au=an(at)}aq.startContainer=at.parentNode;aq.startOffset=s(at);aq.endContainer=au.parentNode;aq.endOffset=s(au)+1}N.walk(aq,function(av){T(av,function(aw){ae(aw);if(aw.nodeType===1&&aa.dom.getStyle(aw,"text-decoration")==="underline"&&aw.parentNode&&i(aw.parentNode)==="underline"){Z({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,aw)}})})}if(af){if(af.nodeType){ac=c.createRng();ac.setStartBefore(af);ac.setEndAfter(af);ap(ac)}else{ap(af)}return}if(!r.isCollapsed()||!ao.inline||c.select("td.mceSelected,th.mceSelected").length){ak=r.getBookmark();ap(r.getRng(C));r.moveToBookmark(ak);if(ao.inline&&k(ad,am,r.getStart())){R(r.getRng(true))}aa.nodeChanged()}else{U("remove",ad,am)}}function F(ac,ae,ad){var ab=V(ac);if(k(ac,ae,ad)&&(!("toggle" in ab[0])||ab[0].toggle)){B(ac,ae,ad)}else{Y(ac,ae,ad)}}function y(ac,ab,ah,af){var ad=V(ab),ai,ag,ae;function aj(an,ap,aq){var am,ao,ak=ap[aq],al;if(ap.onmatch){return ap.onmatch(an,ap,aq)}if(ak){if(ak.length===D){for(am in ak){if(ak.hasOwnProperty(am)){if(aq==="attributes"){ao=c.getAttrib(an,am)}else{ao=O(an,am)}if(af&&!ao&&!ap.exact){return}if((!af||ap.exact)&&!g(ao,q(ak[am],ah))){return}}}}else{for(al=0;al<ak.length;al++){if(aq==="attributes"?c.getAttrib(an,ak[al]):O(an,ak[al])){return ap}}}}return ap}if(ad&&ac){for(ag=0;ag<ad.length;ag++){ai=ad[ag];if(h(ac,ai)&&aj(ac,ai,"attributes")&&aj(ac,ai,"styles")){if(ae=ai.classes){for(ag=0;ag<ae.length;ag++){if(!c.hasClass(ac,ae[ag])){return}}}return ai}}}}function k(ad,af,ae){var ac;function ab(ag){ag=c.getParent(ag,function(ah){return !!y(ah,ad,af,true)});return y(ag,ad,af)}if(ae){return ab(ae)}ae=r.getNode();if(ab(ae)){return C}ac=r.getStart();if(ac!=ae){if(ab(ac)){return C}}return X}function v(ai,ah){var af,ag=[],ae={},ad,ac,ab;af=r.getStart();c.getParent(af,function(al){var ak,aj;for(ak=0;ak<ai.length;ak++){aj=ai[ak];if(!ae[aj]&&y(al,aj,ah)){ae[aj]=true;ag.push(aj)}}},c.getRoot());return ag}function z(af){var ah=V(af),ae,ad,ag,ac,ab;if(ah){ae=r.getStart();ad=n(ae);for(ac=ah.length-1;ac>=0;ac--){ab=ah[ac].selector;if(!ab){return C}for(ag=ad.length-1;ag>=0;ag--){if(c.is(ad[ag],ab)){return C}}}}return X}function J(ab,ae,ac){var ad;if(!P){P={};ad={};aa.onNodeChange.addToTop(function(ag,af,ai){var ah=n(ai),aj={};T(P,function(ak,al){T(ah,function(am){if(y(am,al,{},ak.similar)){if(!ad[al]){T(ak,function(an){an(true,{node:am,format:al,parents:ah})});ad[al]=ak}aj[al]=ak;return false}})});T(ad,function(ak,al){if(!aj[al]){delete ad[al];T(ak,function(am){am(false,{node:ai,format:al,parents:ah})})}})})}T(ab.split(","),function(af){if(!P[af]){P[af]=[];P[af].similar=ac}P[af].push(ae)});return this}a.extend(this,{get:V,register:l,apply:Y,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z,formatChanged:J});j();W();function h(ab,ac){if(g(ab,ac.inline)){return C}if(g(ab,ac.block)){return C}if(ac.selector){return c.is(ab,ac.selector)}}function g(ac,ab){ac=ac||"";ab=ab||"";ac=""+(ac.nodeName||ac);ab=""+(ab.nodeName||ab);return ac.toLowerCase()==ab.toLowerCase()}function O(ac,ab){var ad=c.getStyle(ac,ab);if(ab=="color"||ab=="backgroundColor"){ad=c.toHex(ad)}if(ab=="fontWeight"&&ad==700){ad="bold"}return""+ad}function q(ab,ac){if(typeof(ab)!="string"){ab=ab(ac)}else{if(ac){ab=ab.replace(/%(\w+)/g,function(ae,ad){return ac[ad]||ae})}}return ab}function f(ab){return ab&&ab.nodeType===3&&/^([\t \r\n]+|)$/.test(ab.nodeValue)}function S(ad,ac,ab){var ae=c.create(ac,ab);ad.parentNode.insertBefore(ae,ad);ae.appendChild(ad);return ae}function p(ab,am,ae){var ap,an,ah,al,ad=ab.startContainer,ai=ab.startOffset,ar=ab.endContainer,ak=ab.endOffset;function ao(aA){var au,ax,az,aw,av,at;au=ax=aA?ad:ar;av=aA?"previousSibling":"nextSibling";at=c.getRoot();function ay(aB){return aB.nodeName=="BR"&&aB.getAttribute("data-mce-bogus")&&!aB.nextSibling}if(au.nodeType==3&&!f(au)){if(aA?ai>0:ak<au.nodeValue.length){return au}}for(;;){if(!am[0].block_expand&&H(ax)){return ax}for(aw=ax[av];aw;aw=aw[av]){if(!K(aw)&&!f(aw)&&!ay(aw)){return ax}}if(ax.parentNode==at){au=ax;break}ax=ax.parentNode}return au}function ag(at,au){if(au===D){au=at.nodeType===3?at.length:at.childNodes.length}while(at&&at.hasChildNodes()){at=at.childNodes[au];if(at){au=at.nodeType===3?at.length:at.childNodes.length}}return{node:at,offset:au}}if(ad.nodeType==1&&ad.hasChildNodes()){an=ad.childNodes.length-1;ad=ad.childNodes[ai>an?an:ai];if(ad.nodeType==3){ai=0}}if(ar.nodeType==1&&ar.hasChildNodes()){an=ar.childNodes.length-1;ar=ar.childNodes[ak>an?an:ak-1];if(ar.nodeType==3){ak=ar.nodeValue.length}}function aq(au){var at=au;while(at){if(at.nodeType===1&&x(at)){return x(at)==="false"?at:au}at=at.parentNode}return au}function aj(au,ay,aA){var ax,av,az,at;function aw(aC,aE){var aF,aB,aD=aC.nodeValue;if(typeof(aE)=="undefined"){aE=aA?aD.length:0}if(aA){aF=aD.lastIndexOf(" ",aE);aB=aD.lastIndexOf("\u00a0",aE);aF=aF>aB?aF:aB;if(aF!==-1&&!ae){aF++}}else{aF=aD.indexOf(" ",aE);aB=aD.indexOf("\u00a0",aE);aF=aF!==-1&&(aB===-1||aF<aB)?aF:aB}return aF}if(au.nodeType===3){az=aw(au,ay);if(az!==-1){return{container:au,offset:az}}at=au}ax=new t(au,c.getParent(au,H)||aa.getBody());while(av=ax[aA?"prev":"next"]()){if(av.nodeType===3){at=av;az=aw(av);if(az!==-1){return{container:av,offset:az}}}else{if(H(av)){break}}}if(at){if(aA){ay=0}else{ay=at.length}return{container:at,offset:ay}}}function af(au,at){var av,aw,ay,ax;if(au.nodeType==3&&au.nodeValue.length===0&&au[at]){au=au[at]}av=n(au);for(aw=0;aw<av.length;aw++){for(ay=0;ay<am.length;ay++){ax=am[ay];if("collapsed" in ax&&ax.collapsed!==ab.collapsed){continue}if(c.is(av[aw],ax.selector)){return av[aw]}}}return au}function ac(au,at,aw){var av;if(!am[0].wrapper){av=c.getParent(au,am[0].block)}if(!av){av=c.getParent(au.nodeType==3?au.parentNode:au,I)}if(av&&am[0].wrapper){av=n(av,"ul,ol").reverse()[0]||av}if(!av){av=au;while(av[at]&&!H(av[at])){av=av[at];if(g(av,"br")){break}}}return av||au}ad=aq(ad);ar=aq(ar);if(K(ad.parentNode)||K(ad)){ad=K(ad)?ad:ad.parentNode;ad=ad.nextSibling||ad;if(ad.nodeType==3){ai=0}}if(K(ar.parentNode)||K(ar)){ar=K(ar)?ar:ar.parentNode;ar=ar.previousSibling||ar;if(ar.nodeType==3){ak=ar.length}}if(am[0].inline){if(ab.collapsed){al=aj(ad,ai,true);if(al){ad=al.container;ai=al.offset}al=aj(ar,ak);if(al){ar=al.container;ak=al.offset}}ah=ag(ar,ak);if(ah.node){while(ah.node&&ah.offset===0&&ah.node.previousSibling){ah=ag(ah.node.previousSibling)}if(ah.node&&ah.offset>0&&ah.node.nodeType===3&&ah.node.nodeValue.charAt(ah.offset-1)===" "){if(ah.offset>1){ar=ah.node;ar.splitText(ah.offset-1)}}}}if(am[0].inline||am[0].block_expand){if(!am[0].inline||(ad.nodeType!=3||ai===0)){ad=ao(true)}if(!am[0].inline||(ar.nodeType!=3||ak===ar.nodeValue.length)){ar=ao()}}if(am[0].selector&&am[0].expand!==X&&!am[0].inline){ad=af(ad,"previousSibling");ar=af(ar,"nextSibling")}if(am[0].block||am[0].selector){ad=ac(ad,"previousSibling");ar=ac(ar,"nextSibling");if(am[0].block){if(!H(ad)){ad=ao(true)}if(!H(ar)){ar=ao()}}}if(ad.nodeType==1){ai=s(ad);ad=ad.parentNode}if(ar.nodeType==1){ak=s(ar)+1;ar=ar.parentNode}return{startContainer:ad,startOffset:ai,endContainer:ar,endOffset:ak}}function Z(ah,ag,ae,ab){var ad,ac,af;if(!h(ae,ah)){return X}if(ah.remove!="all"){T(ah.styles,function(aj,ai){aj=q(aj,ag);if(typeof(ai)==="number"){ai=aj;ab=0}if(!ab||g(O(ab,ai),aj)){c.setStyle(ae,ai,"")}af=1});if(af&&c.getAttrib(ae,"style")==""){ae.removeAttribute("style");ae.removeAttribute("data-mce-style")}T(ah.attributes,function(ak,ai){var aj;ak=q(ak,ag);if(typeof(ai)==="number"){ai=ak;ab=0}if(!ab||g(c.getAttrib(ab,ai),ak)){if(ai=="class"){ak=c.getAttrib(ae,ai);if(ak){aj="";T(ak.split(/\s+/),function(al){if(/mce\w+/.test(al)){aj+=(aj?" ":"")+al}});if(aj){c.setAttrib(ae,ai,aj);return}}}if(ai=="class"){ae.removeAttribute("className")}if(e.test(ai)){ae.removeAttribute("data-mce-"+ai)}ae.removeAttribute(ai)}});T(ah.classes,function(ai){ai=q(ai,ag);if(!ab||c.hasClass(ab,ai)){c.removeClass(ae,ai)}});ac=c.getAttribs(ae);for(ad=0;ad<ac.length;ad++){if(ac[ad].nodeName.indexOf("_")!==0){return X}}}if(ah.remove!="none"){o(ae,ah);return C}}function o(ad,ae){var ab=ad.parentNode,ac;function af(ah,ag,ai){ah=E(ah,ag,ai);return !ah||(ah.nodeName=="BR"||H(ah))}if(ae.block){if(!m){if(H(ad)&&!H(ab)){if(!af(ad,X)&&!af(ad.firstChild,C,1)){ad.insertBefore(c.create("br"),ad.firstChild)}if(!af(ad,C)&&!af(ad.lastChild,X,1)){ad.appendChild(c.create("br"))}}}else{if(ab==c.getRoot()){if(!ae.list_block||!g(ad,ae.list_block)){T(a.grep(ad.childNodes),function(ag){if(d(m,ag.nodeName.toLowerCase())){if(!ac){ac=S(ag,m)}else{ac.appendChild(ag)}}else{ac=0}})}}}}if(ae.selector&&ae.inline&&!g(ae.inline,ad)){return}c.remove(ad,1)}function E(ac,ab,ad){if(ac){ab=ab?"nextSibling":"previousSibling";for(ac=ad?ac:ac[ab];ac;ac=ac[ab]){if(ac.nodeType==1||!f(ac)){return ac}}}}function K(ab){return ab&&ab.nodeType==1&&ab.getAttribute("data-mce-type")=="bookmark"}function u(af,ae){var ab,ad,ac;function ah(ak,aj){if(ak.nodeName!=aj.nodeName){return X}function ai(am){var an={};T(c.getAttribs(am),function(ao){var ap=ao.nodeName.toLowerCase();if(ap.indexOf("_")!==0&&ap!=="style"){an[ap]=c.getAttrib(am,ap)}});return an}function al(ap,ao){var an,am;for(am in ap){if(ap.hasOwnProperty(am)){an=ao[am];if(an===D){return X}if(ap[am]!=an){return X}delete ao[am]}}for(am in ao){if(ao.hasOwnProperty(am)){return X}}return C}if(!al(ai(ak),ai(aj))){return X}if(!al(c.parseStyle(c.getAttrib(ak,"style")),c.parseStyle(c.getAttrib(aj,"style")))){return X}return C}function ag(aj,ai){for(ad=aj;ad;ad=ad[ai]){if(ad.nodeType==3&&ad.nodeValue.length!==0){return aj}if(ad.nodeType==1&&!K(ad)){return ad}}return aj}if(af&&ae){af=ag(af,"previousSibling");ae=ag(ae,"nextSibling");if(ah(af,ae)){for(ad=af.nextSibling;ad&&ad!=ae;){ac=ad;ad=ad.nextSibling;af.appendChild(ac)}c.remove(ae);T(a.grep(ae.childNodes),function(ai){af.appendChild(ai)});return af}}return ae}function M(ac,ag){var ab,af,ad,ae;ab=ac[ag?"startContainer":"endContainer"];af=ac[ag?"startOffset":"endOffset"];if(ab.nodeType==1){ad=ab.childNodes.length-1;if(!ag&&af){af--}ab=ab.childNodes[af>ad?ad:af]}if(ab.nodeType===3&&ag&&af>=ab.nodeValue.length){ab=new t(ab,aa.getBody()).next()||ab}if(ab.nodeType===3&&!ag&&af===0){ab=new t(ab,aa.getBody()).prev()||ab}return ab}function U(ak,ab,ai){var al="_mce_caret",ac=aa.settings.caret_debug;function ad(ap){var ao=c.create("span",{id:al,"data-mce-bogus":true,style:ac?"color:red":""});if(ap){ao.appendChild(aa.getDoc().createTextNode(G))}return ao}function aj(ap,ao){while(ap){if((ap.nodeType===3&&ap.nodeValue!==G)||ap.childNodes.length>1){return false}if(ao&&ap.nodeType===1){ao.push(ap)}ap=ap.firstChild}return true}function ag(ao){while(ao){if(ao.id===al){return ao}ao=ao.parentNode}}function af(ao){var ap;if(ao){ap=new t(ao,ao);for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType===3){return ao}}}}function ae(aq,ap){var ar,ao;if(!aq){aq=ag(r.getStart());if(!aq){while(aq=c.get(al)){ae(aq,false)}}}else{ao=r.getRng(true);if(aj(aq)){if(ap!==false){ao.setStartBefore(aq);ao.setEndBefore(aq)}c.remove(aq)}else{ar=af(aq);if(ar.nodeValue.charAt(0)===G){ar=ar.deleteData(0,1)}c.remove(aq,1)}r.setRng(ao)}}function ah(){var aq,ao,av,au,ar,ap,at;aq=r.getRng(true);au=aq.startOffset;ap=aq.startContainer;at=ap.nodeValue;ao=ag(r.getStart());if(ao){av=af(ao)}if(at&&au>0&&au<at.length&&/\w/.test(at.charAt(au))&&/\w/.test(at.charAt(au-1))){ar=r.getBookmark();aq.collapse(true);aq=p(aq,V(ab));aq=N.split(aq);Y(ab,ai,aq);r.moveToBookmark(ar)}else{if(!ao||av.nodeValue!==G){ao=ad(true);av=ao.firstChild;aq.insertNode(ao);au=1;Y(ab,ai,ao)}else{Y(ab,ai,ao)}r.setCursorLocation(av,au)}}function am(){var ao=r.getRng(true),ap,at,aw,av,aq,az,ay=[],au,ax;ap=ao.startContainer;at=ao.startOffset;aq=ap;if(ap.nodeType==3){if(at!=ap.nodeValue.length||ap.nodeValue===G){av=true}aq=aq.parentNode}while(aq){if(y(aq,ab,ai)){az=aq;break}if(aq.nextSibling){av=true}ay.push(aq);aq=aq.parentNode}if(!az){return}if(av){aw=r.getBookmark();ao.collapse(true);ao=p(ao,V(ab),true);ao=N.split(ao);B(ab,ai,ao);r.moveToBookmark(aw)}else{ax=ad();aq=ax;for(au=ay.length-1;au>=0;au--){aq.appendChild(c.clone(ay[au],false));aq=aq.firstChild}aq.appendChild(c.doc.createTextNode(G));aq=aq.firstChild;var ar=c.getParent(az,I);if(ar&&c.isEmpty(ar)){az.parentNode.replaceChild(ax,az)}else{c.insertAfter(ax,az)}r.setCursorLocation(aq,1);if(c.isEmpty(az)){c.remove(az)}}}function an(){var ap,ao,aq;ao=ag(r.getStart());if(ao&&!c.isEmpty(ao)){a.walk(ao,function(ar){if(ar.nodeType==1&&ar.id!==al&&!c.isEmpty(ar)){c.setAttrib(ar,"data-mce-bogus",null)}},"childNodes")}}if(!self._hasCaretEvents){aa.onBeforeGetContent.addToTop(function(){var ao=[],ap;if(aj(ag(r.getStart()),ao)){ap=ao.length;while(ap--){c.setAttrib(ao[ap],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ao){aa[ao].addToTop(function(){ae();an()})});aa.onKeyDown.addToTop(function(ao,aq){var ap=aq.keyCode;if(ap==8||ap==37||ap==39){ae(ag(r.getStart()))}an()});r.onSetContent.add(an);self._hasCaretEvents=true}if(ak=="apply"){ah()}else{am()}}function R(ac){var ab=ac.startContainer,ai=ac.startOffset,ae,ah,ag,ad,af;if(ab.nodeType==3&&ai>=ab.nodeValue.length){ai=s(ab);ab=ab.parentNode;ae=true}if(ab.nodeType==1){ad=ab.childNodes;ab=ad[Math.min(ai,ad.length-1)];ah=new t(ab,c.getParent(ab,c.isBlock));if(ai>ad.length-1||ae){ah.next()}for(ag=ah.current();ag;ag=ah.next()){if(ag.nodeType==3&&!f(ag)){af=c.create("a",null,G);ag.parentNode.insertBefore(af,ag);ac.setStart(ag,0);r.setRng(ac);c.remove(af);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(B){var v=e.getRng(true),G,j,A,u,p,M,C,o,k,n,t,J,x,D;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&!b.isIE11&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function z(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(U<S.y||U+25>S.y+S.h){f.getWin().scrollTo(0,U<S.y?U:U-S.h+25)}}function r(O){var P=A,R,Q,N;R=O||t=="TABLE"?i.create(O||x):p.cloneNode(false);N=R;if(d.keep_styles!==false){do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(P.nodeName)){if(P.id=="_mce_caret"){continue}Q=P.cloneNode(false);i.setAttrib(Q,"id","");if(R.hasChildNodes()){Q.appendChild(R.firstChild);R.appendChild(Q)}else{N=Q;R.appendChild(Q)}}}while(P=P.parentNode)}if(!b.isIE||b.isIE11){N.innerHTML='<br data-mce-bogus="1">'}return R}function q(Q){var P,O,N;if(A.nodeType==3&&(Q?u>0:u<A.nodeValue.length)){return false}if(A.parentNode==p&&D&&!Q){return true}if(Q&&A.nodeType==1&&A==p.firstChild){return true}if(A.nodeName==="TABLE"||(A.previousSibling&&A.previousSibling.nodeName=="TABLE")){return(D&&!Q)||(!D&&Q)}P=new a(A,p);if(A.nodeType==3){if(Q&&u==0){P.prev()}else{if(!Q&&u==A.nodeValue.length){P.next()}}}while(O=P.current()){if(O.nodeType===1){if(!O.getAttribute("data-mce-bogus")){N=O.nodeName.toLowerCase();if(c[N]&&N!=="br"){return false}}}else{if(O.nodeType===3&&!/^[ \t\r\n]*$/.test(O.nodeValue)){return false}}if(Q){P.prev()}else{P.next()}}return true}function l(N,T){var U,S,P,R,Q,O=x||"P";S=i.getParent(N,i.isBlock);if(!S||!E(S)){S=S||j;if(!S.hasChildNodes()){U=i.create(O);S.appendChild(U);v.setStart(U,0);v.setEnd(U,0);return U}R=N;while(R.parentNode!=S){R=R.parentNode}while(R&&!i.isBlock(R)){P=R;R=R.previousSibling}if(P){U=i.create(O);P.parentNode.insertBefore(U,P);R=P;while(R&&!i.isBlock(R)){Q=R.nextSibling;U.appendChild(R);R=Q}v.setStart(N,T);v.setEnd(N,T)}}return N}function H(){function N(P){var O=n[P?"firstChild":"lastChild"];while(O){if(O.nodeType==1){break}O=O[P?"nextSibling":"previousSibling"]}return O===p}o=x?r(x):i.create("BR");if(N(true)&&N()){i.replace(o,n)}else{if(N(true)){n.parentNode.insertBefore(o,n)}else{if(N()){i.insertAfter(o,n);F(o)}else{G=v.cloneRange();G.setStartAfter(p);G.setEndAfter(n);k=G.extractContents();i.insertAfter(k,n);i.insertAfter(o,n)}}}i.remove(p);m(o);h.add()}function y(){var O=new a(A,p),N;while(N=O.next()){if(c[N.nodeName.toLowerCase()]||N.length>0){return true}}}function L(){var P,O,N;if(A&&A.nodeType==3&&u>=A.nodeValue.length){if((!b.isIE||b.isIE11)&&!y()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if((b.isIE&&!b.isIE11)&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{},"&nbsp;");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE||b.isIE11){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(B.isDefaultPrevented()){return}A=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;C=B.shiftKey;if(A.nodeType==1&&A.hasChildNodes()){D=u>A.childNodes.length-1;A=A.childNodes[Math.min(u,A.childNodes.length-1)]||A;if(D&&A.nodeType==3){u=A.nodeValue.length}else{u=0}}j=K(A);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||C){L()}return}if((x&&!C)||(!x&&C)){A=l(A,u)}p=i.getParent(A,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!B.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&C){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!C){L();return}}else{if((!x&&!C&&t!="LI")||(x&&C)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);z(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce);
\ No newline at end of file
+(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.8",releaseDate:"2012-11-20",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){r=f[m].href;if(r){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==b}if(f=="array"&&c.isArray(g)){return true}return typeof(g)==f},isArray:Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==b){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];c.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];c.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(n,k){var j,f,h,g=arguments,m;for(j=1,f=g.length;j<f;j++){k=g[j];for(h in k){if(k.hasOwnProperty(h)){m=k[h];if(m!==b){n[h]=m}}}}return n},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}c.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}c.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||e;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||e;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this,g;g=function(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(e.detachEvent){e.detachEvent("onbeforeunload",k);e.detachEvent("onunload",g)}else{if(e.removeEventListener){e.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(e.CollectGarbage){CollectGarbage()}}};function k(){var l=document;function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l.readyState=="interactive"){if(l){l.attachEvent("onstop",f)}e.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}j={func:j,scope:i||this};if(!h.unloads){if(e.attachEvent){e.attachEvent("onunload",g);e.attachEvent("onbeforeunload",k)}else{if(e.addEventListener){e.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;c.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){if(!f||c.is(f,"array")){return f}return c.map(f.split(g||","),c.trim)},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(d){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===b){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};c._init();e.tinymce=e.tinyMCE=c})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,inDispatch:false,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(b,a){this.listeners.push({cb:b,scope:a||this.scope});return b},addToTop:function(d,b){var a=this,c={cb:d,scope:b||a.scope};if(a.inDispatch){a.listeners=[c].concat(a.listeners)}else{a.listeners.unshift(c)}return d},remove:function(c){var b=this.listeners,a=null;tinymce.each(b,function(e,d){if(c==e.cb){a=e;b.splice(d,1);return false}});return a},dispatch:function(){var a=this,e,b=arguments,c,d=a.listeners,f;a.inDispatch=true;for(c=0;c<d.length;c++){f=d[c];e=f.cb.apply(f.scope,b.length>0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,k=j.DELETE,e=a.dom,l=a.selection,H=a.settings,v=a.parser,o=a.serializer,E=tinymce.each;function A(N,M){try{a.getDoc().execCommand(N,false,M)}catch(L){}}function n(){var L=a.getDoc().documentMode;return L?L:6}function z(L){return L.isDefaultPrevented()}function J(){function L(O){var M,Q,N,P;M=l.getRng();Q=e.getParent(M.startContainer,e.isBlock);if(O){Q=e.getNext(Q,e.isBlock)}if(Q){N=Q.firstChild;while(N&&N.nodeType==3&&N.nodeValue.length===0){N=N.nextSibling}if(N&&N.nodeName==="SPAN"){P=N.cloneNode(false)}}E(e.select("span",Q),function(R){R.setAttribute("data-mce-mark","1")});a.getDoc().execCommand(O?"ForwardDelete":"Delete",false,null);Q=e.getParent(M.startContainer,e.isBlock);E(e.select("span",Q),function(R){var S=l.getBookmark();if(P){e.replace(P.cloneNode(false),R,true)}else{if(!R.getAttribute("data-mce-mark")){e.remove(R,true)}else{R.removeAttribute("data-mce-mark")}}l.moveToBookmark(S)})}a.onKeyDown.add(function(M,O){var N;N=O.keyCode==k;if(!z(O)&&(N||O.keyCode==f)&&!j.modifierPressed(O)){O.preventDefault();L(N)}});a.addCommand("Delete",function(){L()})}function q(){function L(O){var N=e.create("body");var P=O.cloneContents();N.appendChild(P);return l.serializer.serialize(N,{format:"html"})}function M(N){var P=L(N);var Q=e.createRng();Q.selectNode(a.getBody());var O=L(Q);return P===O}a.onKeyDown.add(function(O,Q){var P=Q.keyCode,N;if(!z(Q)&&(P==k||P==f)){N=O.selection.isCollapsed();if(N&&!e.isEmpty(O.getBody())){return}if(tinymce.isIE&&!N){return}if(!N&&!M(O.selection.getRng())){return}O.setContent("");O.selection.setCursorLocation(O.getBody(),0);O.nodeChanged()}})}function I(){a.onKeyDown.add(function(L,M){if(!z(M)&&M.keyCode==65&&j.metaKeyPressed(M)){M.preventDefault();L.execCommand("SelectAll")}})}function K(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(L){l.setRng(l.getRng())});e.bind(a.getDoc(),"mousedown",function(L){if(L.target==a.getDoc().documentElement){a.getWin().focus();l.setRng(l.getRng())}})}}function B(){a.onKeyDown.add(function(L,O){if(!z(O)&&O.keyCode===f){if(l.isCollapsed()&&l.getRng(true).startOffset===0){var N=l.getNode();var M=N.previousSibling;if(M&&M.nodeName&&M.nodeName.toLowerCase()==="hr"){e.remove(M);tinymce.dom.Event.cancel(O)}}}})}function y(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(M,N){if(!z(N)&&N.target.nodeName==="HTML"){var L=M.getBody();L.blur();setTimeout(function(){L.focus()},0)}})}}function h(){a.onClick.add(function(L,M){M=M.target;if(/^(IMG|HR)$/.test(M.nodeName)){l.getSel().setBaseAndExtent(M,0,M,1)}if(M.nodeName=="A"&&e.hasClass(M,"mceItemAnchor")){l.select(M)}L.nodeChanged()})}function c(){function M(){var O=e.getAttribs(l.getStart().cloneNode(false));return function(){var P=l.getStart();if(P!==a.getBody()){e.setAttrib(P,"style",null);E(O,function(Q){P.setAttributeNode(Q.cloneNode(true))})}}}function L(){return !l.isCollapsed()&&e.getParent(l.getStart(),e.isBlock)!=e.getParent(l.getEnd(),e.isBlock)}function N(O,P){P.preventDefault();return false}a.onKeyPress.add(function(O,Q){var P;if(!z(Q)&&(Q.keyCode==8||Q.keyCode==46)&&L()){P=M();O.getDoc().execCommand("delete",false,null);P();Q.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(P){var O;if(!z(P)&&L()){O=M();a.onKeyUp.addToTop(N);setTimeout(function(){O();a.onKeyUp.remove(N)},0)}})}function b(){var M,L;e.bind(a.getDoc(),"selectionchange",function(){if(L){clearTimeout(L);L=0}L=window.setTimeout(function(){var N=l.getRng();if(!M||!tinymce.dom.RangeUtils.compareRanges(N,M)){a.nodeChanged();M=N}},50)})}function x(){document.body.setAttribute("role","application")}function t(){a.onKeyDown.add(function(L,N){if(!z(N)&&N.keyCode===f){if(l.isCollapsed()&&l.getRng(true).startOffset===0){var M=l.getNode().previousSibling;if(M&&M.nodeName&&M.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(N)}}}})}function C(){if(n()>7){return}A("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");v.addNodeFilter("pre",function(L,N){var O=L.length,Q,M,R,P;while(O--){Q=L[O].getAll("br");M=Q.length;while(M--){R=Q[M];P=R.prev;if(P&&P.type===3&&P.value.charAt(P.value-1)!="\n"){P.value+="\n"}else{R.parent.insert(new tinymce.html.Node("#text",3),R,true).value="\n"}}}});o.addNodeFilter("pre",function(L,N){var O=L.length,Q,M,R,P;while(O--){Q=L[O].getAll("br");M=Q.length;while(M--){R=Q[M];P=R.prev;if(P&&P.type==3){P.value=P.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(N){var M,L=l.getNode();if(L.nodeName=="IMG"){if(M=e.getStyle(L,"width")){e.setAttrib(L,"width",M.replace(/[^0-9%]+/g,""));e.setStyle(L,"width","")}if(M=e.getStyle(L,"height")){e.setAttrib(L,"height",M.replace(/[^0-9%]+/g,""));e.setStyle(L,"height","")}}})}function d(){a.onKeyDown.add(function(R,S){var Q,L,M,O,P,T,N;Q=S.keyCode==k;if(!z(S)&&(Q||S.keyCode==f)&&!j.modifierPressed(S)){L=l.getRng();M=L.startContainer;O=L.startOffset;N=L.collapsed;if(M.nodeType==3&&M.nodeValue.length>0&&((O===0&&!N)||(N&&O===(Q?0:1)))){nonEmptyElements=R.schema.getNonEmptyElements();S.preventDefault();P=e.create("br",{id:"__tmp"});M.parentNode.insertBefore(P,M);R.getDoc().execCommand(Q?"ForwardDelete":"Delete",false,null);M=l.getRng().startContainer;T=M.previousSibling;if(T&&T.nodeType==1&&!e.isBlock(T)&&e.isEmpty(T)&&!nonEmptyElements[T.nodeName.toLowerCase()]){e.remove(T)}e.remove("__tmp")}}})}function G(){a.onKeyDown.add(function(P,Q){var N,M,R,L,O;if(z(Q)||Q.keyCode!=j.BACKSPACE){return}N=l.getRng();M=N.startContainer;R=N.startOffset;L=e.getRoot();O=M;if(!N.collapsed||R!==0){return}while(O&&O.parentNode&&O.parentNode.firstChild==O&&O.parentNode!=L){O=O.parentNode}if(O.tagName==="BLOCKQUOTE"){P.formatter.toggle("blockquote",null,O);N=e.createRng();N.setStart(M,0);N.setEnd(M,0);l.setRng(N)}})}function F(){function L(){a._refreshContentEditable();A("StyleWithCSS",false);A("enableInlineTableEditing",false);if(!H.object_resizing){A("enableObjectResizing",false)}}if(!H.readonly){a.onBeforeExecCommand.add(L);a.onMouseDown.add(L)}}function s(){function L(M,N){E(e.select("a"),function(Q){var O=Q.parentNode,P=e.getRoot();if(O.lastChild===Q){while(O&&!e.isBlock(O)){if(O.parentNode.lastChild!==O||O===P){return}O=O.parentNode}e.add(O,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(M,N){if(N==="CreateLink"){L(M)}});a.onSetContent.add(l.onSetContent.add(L))}function m(){if(H.forced_root_block){a.onInit.add(function(){A("DefaultParagraphSeparator",H.forced_root_block)})}}function p(){function L(N,M){if(!N||!M.initial){a.execCommand("mceRepaint")}}a.onUndo.add(L);a.onRedo.add(L);a.onSetContent.add(L)}function i(){a.onKeyDown.add(function(M,N){var L;if(!z(N)&&N.keyCode==f){L=M.getDoc().selection.createRange();if(L&&L.item){N.preventDefault();M.undoManager.beforeChange();e.remove(L.item(0));M.undoManager.add()}}})}function r(){var L;if(n()>=10){L="";E("p div h1 h2 h3 h4 h5 h6".split(" "),function(M,N){L+=(N>0?",":"")+M+":empty"});a.contentStyles.push(L+"{padding-right: 1px !important}")}}function u(){var N,M,ad,L,Y,ab,Z,ac,O,P,aa,W,V,X=document,T=a.getDoc();if(!H.object_resizing||H.webkit_fake_resize===false){return}A("enableObjectResizing",false);aa={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function R(ah){var ag,af;ag=ah.screenX-ab;af=ah.screenY-Z;W=ag*Y[2]+ac;V=af*Y[3]+O;W=W<5?5:W;V=V<5?5:V;if(j.modifierPressed(ah)||(ad.nodeName=="IMG"&&Y[2]*Y[3]!==0)){W=Math.round(V/P);V=Math.round(W*P)}e.setStyles(L,{width:W,height:V});if(Y[2]<0&&L.clientWidth<=W){e.setStyle(L,"left",N+(ac-W))}if(Y[3]<0&&L.clientHeight<=V){e.setStyle(L,"top",M+(O-V))}}function ae(){function af(ag,ah){if(ah){if(ad.style[ag]||!a.schema.isValid(ad.nodeName.toLowerCase(),ag)){e.setStyle(ad,ag,ah)}else{e.setAttrib(ad,ag,ah)}}}af("width",W);af("height",V);e.unbind(T,"mousemove",R);e.unbind(T,"mouseup",ae);if(X!=T){e.unbind(X,"mousemove",R);e.unbind(X,"mouseup",ae)}e.remove(L);Q(ad)}function Q(ai){var ag,ah,af;S();ag=e.getPos(ai);N=ag.x;M=ag.y;ah=ai.offsetWidth;af=ai.offsetHeight;if(ad!=ai){ad=ai;W=V=0}E(aa,function(al,aj){var ak;ak=e.get("mceResizeHandle"+aj);if(!ak){ak=e.add(T.documentElement,"div",{id:"mceResizeHandle"+aj,"class":"mceResizeHandle",style:"cursor:"+aj+"-resize; margin:0; padding:0"});e.bind(ak,"mousedown",function(am){am.preventDefault();ae();ab=am.screenX;Z=am.screenY;ac=ad.clientWidth;O=ad.clientHeight;P=O/ac;Y=al;L=ad.cloneNode(true);e.addClass(L,"mceClonedResizable");e.setStyles(L,{left:N,top:M,margin:0});T.documentElement.appendChild(L);e.bind(T,"mousemove",R);e.bind(T,"mouseup",ae);if(X!=T){e.bind(X,"mousemove",R);e.bind(X,"mouseup",ae)}})}else{e.show(ak)}e.setStyles(ak,{left:(ah*al[0]+N)-(ak.offsetWidth/2),top:(af*al[1]+M)-(ak.offsetHeight/2)})});if(!tinymce.isOpera&&ad.nodeName=="IMG"){ad.setAttribute("data-mce-selected","1")}}function S(){if(ad){ad.removeAttribute("data-mce-selected")}for(var af in aa){e.hide("mceResizeHandle"+af)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function U(){var af=e.getParent(l.getNode(),"table,img");E(e.select("img[data-mce-selected]"),function(ag){ag.removeAttribute("data-mce-selected")});if(af){Q(af)}else{S()}}a.onNodeChange.add(U);e.bind(T,"selectionchange",U);a.serializer.addAttributeFilter("data-mce-selected",function(af,ag){var ah=af.length;while(ah--){af[ah].attr(ag,null)}})}function D(){if(n()<9){v.addNodeFilter("noscript",function(L){var M=L.length,N,O;while(M--){N=L[M];O=N.firstChild;if(O){N.attr("data-mce-innertext",O.value)}}});o.addNodeFilter("noscript",function(L){var M=L.length,N,P,O;while(M--){N=L[M];P=L[M].firstChild;if(P){P.value=tinymce.html.Entities.decode(P.value)}else{O=N.attributes.map["data-mce-innertext"];if(O){N.attr("data-mce-innertext",null);P=new tinymce.html.Node("#text",3);P.value=O;P.raw=true;N.append(P)}}}})}}t();G();q();if(tinymce.isWebKit){d();J();K();h();m();if(tinymce.isIDevice){b()}else{u();I()}}if(tinymce.isIE){B();x();C();g();i();r();D()}if(tinymce.isGecko){B();y();c();F();s();p()}if(tinymce.isOpera){u()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;"};d={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K<G;K++){F=N.exec(L[K]);if(F){W=F[1];Q=F[2];E=F[3];X=F[4];O={};J=[];I={attributes:O,attributesOrder:J};if(W==="#"){I.paddEmpty=true}if(W==="-"){I.removeEmpty=true}if(S){for(ad in S){O[ad]=S[ad]}J.push.apply(J,H)}if(X){X=d(X,"|");for(Z=0,V=X.length;Z<V;Z++){F=R.exec(X[Z]);if(F){U={};ac=F[1];Y=F[2].replace(/::/g,":");W=F[3];T=F[4];if(ac==="!"){I.attributesRequired=I.attributesRequired||[];I.attributesRequired.push(Y);U.required=true}if(ac==="-"){delete O[Y];J.splice(f.inArray(J,Y),1);continue}if(W){if(W==="="){I.attributesDefault=I.attributesDefault||[];I.attributesDefault.push({name:Y,value:T});U.defaultValue=T}if(W===":"){I.attributesForced=I.attributesForced||[];I.attributesForced.push({name:Y,value:T});U.forcedValue=T}if(W==="<"){U.validValues=e(T,"?")}}if(M.test(Y)){I.attributePatterns=I.attributePatterns||[];U.pattern=i(Y);I.attributePatterns.push(U)}else{if(!O[Y]){J.push(Y)}O[Y]=U}}}}if(!S&&Q=="@"){S=O;H=J}if(E){I.outputName=Q;s[E]=I}if(M.test(Q)){I.pattern=i(Q);j.push(I)}else{s[Q]=I}}}}}function t(E){s={};j=[];C(E);g(y,function(G,F){k[F]=G.children})}function l(F){var E=/^(~)?(.+)$/;if(F){g(d(F),function(J){var H=E.exec(J),I=H[1]==="~",K=I?"span":"div",G=H[2];k[G]=k[K];p[G]=K;if(!I){v[G.toUpperCase()]={};v[G]={}}if(!s[G]){s[G]=s[K]}g(k,function(L,M){if(L[K]){L[G]=L[K]}})})}}function x(F){var E=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(F){g(d(F),function(J){var I=E.exec(J),G,H;if(I){H=I[1];if(H){G=k[I[2]]}else{G=k[I[2]]={"#comment":{}}}G=k[I[2]];g(d(I[3],"|"),function(K){if(H==="-"){delete G[K]}else{G[K]={}}})}})}}function B(E){var G=s[E],F;if(G){return G}F=j.length;while(F--){G=j[F];if(G.pattern.test(E)){return G}}}if(!A.valid_elements){g(y,function(F,E){s[E]={attributes:F.attributes,attributesOrder:F.attributesOrder};k[E]=F.children});if(A.schema!="html5"){g(d("strong/b,em/i"),function(E){E=d(E,"/");s[E[1]].outputName=E[0]})}s.img.attributesDefault=[{name:"alt",value:""}];g(d("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr,strong,em,b,i"),function(E){if(s[E]){s[E].removeEmpty=true}});g(d("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(E){s[E].paddEmpty=true})}else{t(A.valid_elements)}l(A.custom_elements);x(A.valid_children);C(A.extended_valid_elements);x("+ol[ul|ol],+ul[ul|ol]");if(A.invalid_elements){f.each(f.explode(A.invalid_elements),function(E){if(s[E]){delete s[E]}})}if(!B("span")){C("span[!data-mce-type|*]")}u.children=k;u.styles=D;u.getBoolAttrs=function(){return r};u.getBlockElements=function(){return v};u.getTextBlockElements=function(){return textBlockElementsMap};u.getShortEndedElements=function(){return z};u.getSelfClosingElements=function(){return q};u.getNonEmptyElements=function(){return n};u.getWhiteSpaceElements=function(){return o};u.isValidChild=function(E,G){var F=k[E];return !!(F&&F[G])};u.isValid=function(F,E){var H,G,I=B(F);if(I){if(E){if(I.attributes[E]){return true}H=I.attributePatterns;if(H){G=H.length;while(G--){if(H[G].pattern.test(F)){return true}}}}else{return true}}return false};u.getElementRule=B;u.getCustomElements=function(){return p};u.addValidElements=C;u.setValidElements=t;u.addCustomElements=l;u.addValidChildren=x;u.elements=s}})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(E){var n=this,g,G=0,I,B,A=[],N,Q,C,r,z,s,M,H,O,v,m,k,t,R,o,P,F,S,L,f,J,l,D,K,h,x=0,j=a.html.Entities.decode,y,q;function u(T){var V,U;V=A.length;while(V--){if(A[V].name===T){break}}if(V>=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G<g.index){n.text(j(E.substr(G,g.index-G)))}if(I=g[6]){I=I.toLowerCase();if(q&&o.test(I)){I=I.substr(1)}u(I)}else{if(I=g[7]){I=I.toLowerCase();if(q&&o.test(I)){I=I.substr(1)}O=I in M;if(y&&J[I]&&A.length>0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G<E.length){n.text(j(E.substr(G)))}for(Q=A.length-1;Q>=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-mce-")===0){return false}}}if(j.type===8){return false}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(n){var p,q,y,x,A,o,r,l,u,v,k,t,m,z,s;t=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();m=h.getTextBlockElements();for(p=0;p<n.length;p++){q=n[p];if(!q.parent||q.fixed){continue}if(m[q.name]&&q.parent.name=="li"){z=q.next;while(z){if(m[z.name]){z.name="li";z.fixed=true;q.parent.insert(z,q.parent)}else{break}z=z.next}q.unwrap(q);continue}x=[q];for(y=q.parent;y&&!h.isValidChild(y.name,q.name)&&!t[y.name];y=y.parent){x.push(y)}if(y&&x.length>1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u<x.length-1;u++){if(h.isValidChild(o.name,x[u].name)){r=f.filterNode(x[u].clone());o.append(r)}else{r=o}for(l=x[u].firstChild;l&&l!=x[u+1];){s=l.next;r.append(l);l=s}o=r}if(!A.isEmpty(k)){y.insert(A,x[0],true);y.insert(q,A)}else{y.insert(q,x[0],true)}y=x[0];if(y.isEmpty(k)||y.firstChild===y.lastChild&&y.firstChild.name==="br"){y.empty().remove()}}else{if(q.parent){if(q.name==="li"){z=q.prev;if(z&&(z.name==="ul"||z.name==="ul")){z.append(q);continue}z=q.next;if(z&&(z.name==="ul"||z.name==="ul")){z.insert(q,z.firstChild,true);continue}q.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(q.parent.name,"div")&&h.isValidChild("div",q.name)){q.wrap(f.filterNode(new a("div",1)))}else{if(q.name==="style"||q.name==="script"){q.empty().remove()}else{q.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,J,B,A,D,C,x,r,F,N,z,o,E,M=[],L,t,k,y,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;z=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();E=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;y=/^[ \t\r\n]+$/;function G(){var O=J.firstChild,l,P;while(O){l=O.next;if(O.type==3||(O.type==1&&O.name!=="p"&&!o[O.name]&&!O.attr("data-mce-type"))){if(!P){P=K(q,1);J.insert(P,O);P.append(O)}else{P.append(O)}}else{P=null}O=l}}function K(l,O){var P=new a(l,O),Q;if(l in e){Q=i[l];if(Q){Q.push(P)}else{i[l]=[P]}}return P}function I(P){var Q,l,O;for(Q=P.prev;Q&&Q.type===3;){l=Q.value.replace(t,"");if(l.length>0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;B.empty().remove();B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D<C;D++){F[D](A,N,m)}}for(D=0,C=d.length;D<C;D++){F=d[D];if(F.name in c){A=c[F.name];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(x=0,r=F.callbacks.length;x<r;x++){F.callbacks[x](A,F.name,m)}}}}return J};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,v=b.extend({},h.getBlockElements()),k=h.getNonEmptyElements(),t,s,p,u;v.body=1;for(r=0;r<q;r++){o=n[r];t=o.parent;if(v[o.parent.name]&&o===t.lastChild){p=o.prev;while(p){u=p.name;if(u!=="span"||p.attr("data-mce-type")!=="bookmark"){if(u!=="br"){break}if(u==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(t.isEmpty(k)){elementRule=h.getElementRule(t.name);if(elementRule){if(elementRule.removeEmpty){t.remove()}else{if(elementRule.paddEmpty){t.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}else{s=o;while(t.firstChild===s&&t.lastChild===s){s=t;if(v[t.name]){break}t=t.parent}if(s===t){textNode=new b.html.Node("#text",3);textNode.value="\u00a0";o.replace(textNode)}}}})}if(!g.allow_html_in_named_anchor){f.addAttributeFilter("id,name",function(k,l){var n=k.length,p,m,o,q;while(n--){q=k[n];if(q.name==="a"&&q.firstChild&&!q.attr("href")){o=q.parent;p=q.lastChild;do{m=p.prev;o.insert(p,q);p=m}while(p)}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);tinymce.dom={};(function(b,h){var g=!!document.addEventListener;function c(k,j,l,i){if(k.addEventListener){k.addEventListener(j,l,i||false)}else{if(k.attachEvent){k.attachEvent("on"+j,l)}}}function e(k,j,l,i){if(k.removeEventListener){k.removeEventListener(j,l,i||false)}else{if(k.detachEvent){k.detachEvent("on"+j,l)}}}function a(n,l){var i,k=l||{};function j(){return false}function m(){return true}for(i in n){if(i!=="layerX"&&i!=="layerY"){k[i]=n[i]}}if(!k.target){k.target=k.srcElement||document}k.preventDefault=function(){k.isDefaultPrevented=m;if(n){if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}}};k.stopPropagation=function(){k.isPropagationStopped=m;if(n){if(n.stopPropagation){n.stopPropagation()}else{n.cancelBubble=true}}};k.stopImmediatePropagation=function(){k.isImmediatePropagationStopped=m;k.stopPropagation()};if(!k.isDefaultPrevented){k.isDefaultPrevented=j;k.isPropagationStopped=j;k.isImmediatePropagationStopped=j}return k}function d(m,n,l){var k=m.document,j={type:"ready"};function i(){if(!l.domLoaded){l.domLoaded=true;n(j)}}if(k.readyState=="complete"){i();return}if(g){c(m,"DOMContentLoaded",i)}else{c(k,"readystatechange",function(){if(k.readyState==="complete"){e(k,"readystatechange",arguments.callee);i()}});if(k.documentElement.doScroll&&m===m.top){(function(){try{k.documentElement.doScroll("left")}catch(o){setTimeout(arguments.callee,0);return}i()})()}}c(m,"load",i)}function f(k){var q=this,p={},i,o,n,m,l;m="onmouseenter" in document.documentElement;n="onfocusin" in document.documentElement;l={mouseenter:"mouseover",mouseleave:"mouseout"};i=1;q.domLoaded=false;q.events=p;function j(t,x){var s,u,r,v;s=p[x][t.type];if(s){for(u=0,r=s.length;u<r;u++){v=s[u];if(v&&v.func.call(v.scope,t)===false){t.preventDefault()}if(t.isImmediatePropagationStopped()){return}}}}q.bind=function(x,A,D,E){var s,t,u,r,B,z,C,v=window;function y(F){j(a(F||v.event),s)}if(!x||x.nodeType===3||x.nodeType===8){return}if(!x[h]){s=i++;x[h]=s;p[s]={}}else{s=x[h];if(!p[s]){p[s]={}}}E=E||x;A=A.split(" ");u=A.length;while(u--){r=A[u];z=y;B=C=false;if(r==="DOMContentLoaded"){r="ready"}if((q.domLoaded||x.readyState=="complete")&&r==="ready"){q.domLoaded=true;D.call(E,a({type:r}));continue}if(!m){B=l[r];if(B){z=function(F){var H,G;H=F.currentTarget;G=F.relatedTarget;if(G&&H.contains){G=H.contains(G)}else{while(G&&G!==H){G=G.parentNode}}if(!G){F=a(F||v.event);F.type=F.type==="mouseout"?"mouseleave":"mouseenter";F.target=H;j(F,s)}}}}if(!n&&(r==="focusin"||r==="focusout")){C=true;B=r==="focusin"?"focus":"blur";z=function(F){F=a(F||v.event);F.type=F.type==="focus"?"focusin":"focusout";j(F,s)}}t=p[s][r];if(!t){p[s][r]=t=[{func:D,scope:E}];t.fakeName=B;t.capture=C;t.nativeHandler=z;if(!g){t.proxyHandler=k(s)}if(r==="ready"){d(x,z,q)}else{c(x,B||r,g?z:t.proxyHandler,C)}}else{t.push({func:D,scope:E})}}x=t=0;return D};q.unbind=function(x,z,A){var s,u,v,B,r,t;if(!x||x.nodeType===3||x.nodeType===8){return q}s=x[h];if(s){t=p[s];if(z){z=z.split(" ");v=z.length;while(v--){r=z[v];u=t[r];if(u){if(A){B=u.length;while(B--){if(u[B].func===A){u.splice(B,1)}}}if(!A||u.length===0){delete t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}}}}else{for(r in t){u=t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}t={}}for(r in t){return q}delete p[s];try{delete x[h]}catch(y){x[h]=null}}return q};q.fire=function(u,s,r){var v,t;if(!u||u.nodeType===3||u.nodeType===8){return q}t=a(null,r);t.type=s;do{v=u[h];if(v){j(t,v)}u=u.parentNode||u.ownerDocument||u.defaultView||u.parentWindow}while(u&&!t.isPropagationStopped());return q};q.clean=function(u){var s,r,t=q.unbind;if(!u||u.nodeType===3||u.nodeType===8){return q}if(u[h]){t(u)}if(!u.getElementsByTagName){u=u.document}if(u&&u.getElementsByTagName){t(u);r=u.getElementsByTagName("*");s=r.length;while(s--){u=r[s];if(u[h]){t(u)}}}return q};q.callNativeHandler=function(s,r){if(p){p[s][r.type].nativeHandler(r)}};q.destory=function(){p={}};q.add=function(v,s,u,t){if(typeof(v)==="string"){v=document.getElementById(v)}if(v&&v instanceof Array){var r=v.length;while(r--){q.add(v[r],s,u,t)}return}if(s==="init"){s="ready"}return q.bind(v,s instanceof Array?s.join(" "):s,u,t)};q.remove=function(v,s,u,t){if(!v){return q}if(typeof(v)==="string"){v=document.getElementById(v)}if(v instanceof Array){var r=v.length;while(r--){q.remove(v[r],s,u,t)}return q}return q.unbind(v,s instanceof Array?s.join(" "):s,u)};q.clear=function(r){if(typeof(r)==="string"){r=document.getElementById(r)}return q.clean(r)};q.cancel=function(r){if(r){q.prevent(r);q.stop(r)}return false};q.prevent=function(r){if(!r.preventDefault){r=a(r)}r.preventDefault();return false};q.stop=function(r){if(!r.stopPropagation){r=a(r)}r.stopPropagation();return false}}b.EventUtils=f;b.Event=new f(function(i){return function(j){tinymce.dom.Event.callNativeHandler(i,j)}});b.Event.bind(window,"ready",function(){});b=0})(tinymce.dom,"data-mce-expando");tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(e){var g=e.each,d=e.is,f=e.isWebKit,b=e.isIE,h=e.html.Entities,c=/^([a-z0-9],?)+$/i,a=/^[ \t\r\n]*$/;e.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(o,l){var k=this,i,j,n;k.doc=o;k.win=window;k.files={};k.cssFlicker=false;k.counter=0;k.stdMode=!e.isIE||o.documentMode>=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+"</"+q+">"}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":b?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="<br />"+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="<br />"+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){g(s.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:q(s.styleSheet);break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab<aa){return -1}return 1}ac=X;while(ac&&ac.parentNode!=Z){ac=ac.parentNode}if(ac){Y=0;t=Z.firstChild;while(t!=ac&&Y<ab){Y++;t=t.nextSibling}if(ab<=Y){return -1}return 1}ac=Z;while(ac&&ac.parentNode!=X){ac=ac.parentNode}if(ac){Y=0;t=X.firstChild;while(t!=ac&&Y<aa){Y++;t=t.nextSibling}if(Y<aa){return -1}return 1}ad=c.findCommonAncestor(Z,X);af=Z;while(af&&af.parentNode!=ad){af=af.parentNode}if(!af){af=ad}ae=X;while(ae&&ae.parentNode!=ad){ae=ae.parentNode}if(!ae){ae=ad}if(af==ae){return 0}t=ad.firstChild;while(t){if(t==af){return -1}if(t==ae){return 1}t=t.nextSibling}}function C(X,aa,Z){var t,Y;if(X){O[h]=aa;O[W]=Z}else{O[Q]=aa;O[A]=Z}t=O[Q];while(t.parentNode){t=t.parentNode}Y=O[h];while(Y.parentNode){Y=Y.parentNode}if(Y==t){if(H(O[h],O[W],O[Q],O[A])>0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="<span>\uFEFF</span>";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="<span>\uFEFF</span><span>\uFEFF</span>";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e<y.length;e++){if(y[e]===y[e-1]){y.splice(e--,1)}}}}return y};d.matches=function(e,y){return d(e,null,null,y)};d.matchesSelector=function(e,y){return d(y,null,null,[e]).length>0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z<B;z++){C=k.order[z];if((A=k.leftMatch[C].exec(E))){y=A[1];A.splice(1,1);if(y.substr(y.length-1)!=="\\"){A[1]=(A[1]||"").replace(q,"");D=k.find[C](A,e,F);if(D!=null){E=E.replace(k.match[C],"");break}}}}if(!D){D=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:D,expr:E}};d.filter=function(I,H,L,B){var D,e,G,N,K,y,A,C,J,z=I,M=[],F=H,E=H&&H[0]&&d.isXML(H[0]);while(I&&H.length){for(G in k.filter){if((D=k.leftMatch[G].exec(I))!=null&&D[2]){y=k.filter[G];A=D[1];e=false;D.splice(1,1);if(A.substr(A.length-1)==="\\"){continue}if(F===M){M=[]}if(k.preFilter[G]){D=k.preFilter[G](D,F,L,M,B,E);if(!D){e=N=true}else{if(D===true){continue}}}if(D){for(C=0;(K=F[C])!=null;C++){if(K){N=y(K,D,C,F);J=B^N;if(L&&N!=null){if(J){e=true}else{F[C]=false}}else{if(J){M.push(K);e=true}}}}}if(N!==undefined){if(!L){F=M}I=I.replace(k.match[G],"");if(!e){return[]}break}}}if(I===z){if(e==null){d.error(I)}else{break}}z=I}return F};d.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var b=d.getText=function(B){var z,A,e=B.nodeType,y="";if(e){if(e===1||e===9||e===11){if(typeof B.textContent==="string"){return B.textContent}else{if(typeof B.innerText==="string"){return B.innerText.replace(u,"")}else{for(B=B.firstChild;B;B=B.nextSibling){y+=b(B)}}}}else{if(e===3||e===4){return B.nodeValue}}}else{for(z=0;(A=B[z]);z++){if(A.nodeType!==8){y+=b(A)}}}return y};var k=d.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(D,y){var A=typeof y==="string",C=A&&!x.test(y),E=A&&!C;if(C){y=y.toLowerCase()}for(var z=0,e=D.length,B;z<e;z++){if((B=D[z])){while((B=B.previousSibling)&&B.nodeType!==1){}D[z]=E||B&&B.nodeName.toLowerCase()===y?B||false:B===y}}if(E){d.filter(y,D,true)}},">":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z<e;z++){C=D[z];if(C){var A=C.parentNode;D[z]=A.nodeName.toLowerCase()===y?A:false}}}else{for(;z<e;z++){C=D[z];if(C){D[z]=B?C.parentNode:C.parentNode===y}}if(B){d.filter(y,D,true)}}},"":function(A,y,C){var B,z=o++,e=t;if(typeof y==="string"&&!x.test(y)){y=y.toLowerCase();B=y;e=a}e("parentNode",y,z,A,B,C)},"~":function(A,y,C){var B,z=o++,e=t;if(typeof y==="string"&&!x.test(y)){y=y.toLowerCase();B=y;e=a}e("previousSibling",y,z,A,B,C)}},find:{ID:function(y,z,A){if(typeof z.getElementById!=="undefined"&&!A){var e=z.getElementById(y[1]);return e&&e.parentNode?[e]:[]}},NAME:function(z,C){if(typeof C.getElementsByName!=="undefined"){var y=[],B=C.getElementsByName(z[1]);for(var A=0,e=B.length;A<e;A++){if(B[A].getAttribute("name")===z[1]){y.push(B[A])}}return y.length===0?null:y}},TAG:function(e,y){if(typeof y.getElementsByTagName!=="undefined"){return y.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(A,y,z,e,D,E){A=" "+A[1].replace(q,"")+" ";if(E){return A}for(var B=0,C;(C=y[B])!=null;B++){if(C){if(D^(C.className&&(" "+C.className+" ").replace(/[\t\n\r]/g," ").indexOf(A)>=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return y<e[3]-0},gt:function(z,y,e){return y>e[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C<B;C++){if(A[C]===z){return false}}return true}else{d.error(e)}}}},CHILD:function(z,B){var A,H,D,G,e,C,F,E=B[1],y=z;switch(E){case"only":case"first":while((y=y.previousSibling)){if(y.nodeType===1){return false}}if(E==="first"){return true}y=z;case"last":while((y=y.nextSibling)){if(y.nodeType===1){return false}}return true;case"nth":A=B[2];H=B[3];if(A===1&&H===0){return true}D=B[0];G=z.parentNode;if(G&&(G[i]!==D||!z.nodeIndex)){C=0;for(y=G.firstChild;y;y=y.nextSibling){if(y.nodeType===1){y.nodeIndex=++C}}G[i]=D}F=z.nodeIndex-H;if(A===0){return F===0}else{return(F%A===0&&F/A>=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z<e;z++){y.push(B[z])}}else{for(;B[z];z++){y.push(B[z])}}}return y}}var p,m;if(document.documentElement.compareDocumentPosition){p=function(y,e){if(y===e){h=true;return 0}if(!y.compareDocumentPosition||!e.compareDocumentPosition){return y.compareDocumentPosition?-1:1}return y.compareDocumentPosition(e)&4?-1:1}}else{p=function(F,E){if(F===E){h=true;return 0}else{if(F.sourceIndex&&E.sourceIndex){return F.sourceIndex-E.sourceIndex}}var C,y,z=[],e=[],B=F.parentNode,D=E.parentNode,G=B;if(B===D){return m(F,E)}else{if(!B){return -1}else{if(!D){return 1}}}while(G){z.unshift(G);G=G.parentNode}G=D;while(G){e.unshift(G);G=G.parentNode}C=z.length;y=e.length;for(var A=0;A<C&&A<y;A++){if(z[A]!==e[A]){return m(z[A],e[A])}}return A===C?m(F,e[A],-1):m(z[A],E,1)};m=function(y,e,z){if(y===e){return z}var A=y.nextSibling;while(A){if(A===e){return -1}A=A.nextSibling}return 1}}(function(){var y=document.createElement("div"),z="script"+(new Date()).getTime(),e=document.documentElement;y.innerHTML="<a name='"+z+"'/>";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="<p class='TEST'></p>";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A<z;A++){var e=G[A];if(e){var B=false;e=e[y];while(e){if(e[i]===C){B=G[e.sizset];break}if(e.nodeType===1&&!F){e[i]=C;e.sizset=A}if(e.nodeName.toLowerCase()===D){B=e;break}e=e[y]}G[A]=B}}}function t(y,D,C,G,E,F){for(var A=0,z=G.length;A<z;A++){var e=G[A];if(e){var B=false;e=e[y];while(e){if(e[i]===C){B=G[e.sizset];break}if(e.nodeType===1){if(!F){e[i]=C;e.sizset=A}if(typeof D!=="string"){if(e===D){B=true;break}}else{if(d.filter(D,[e]).length>0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A<y;A++){d(z,F[A],E,D)}return d.filter(B,E)};window.tinymce.dom.Sizzle=d})();(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(d){function f(g){return g.replace(/[\n\r]+/g,"")}var c=d.is,b=d.isIE,e=d.each,a=d.dom.TreeWalker;d.create("tinymce.dom.Selection",{Selection:function(k,j,i,h){var g=this;g.dom=k;g.win=j;g.serializer=i;g.editor=h;e(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(l){g[l]=new d.util.Dispatcher(g)});if(!g.win.getSelection){g.tridentSel=new d.dom.TridentSelection(g)}if(d.isIE&&k.boxModel){this._fixIESelection()}d.addUnload(g.destroy,g)},setCursorLocation:function(i,j){var g=this;var h=g.dom.createRng();h.setStart(i,j);h.setEnd(i,j);g.setRng(h);g.collapse(false)},getContent:function(h){var g=this,i=g.getRng(),m=g.dom.create("body"),k=g.getSel(),j,l,o;h=h||{};j=l="";h.get=true;h.format=h.format||"html";h.forced_root_block="";g.onBeforeGetContent.dispatch(g,h);if(h.format=="text"){return g.isCollapsed()?"":(i.text||(k.toString?k.toString():""))}if(i.cloneContents){o=i.cloneContents();if(o){m.appendChild(o)}}else{if(c(i.item)||c(i.htmlText)){m.innerHTML="<br>"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='<span id="__caret">_</span>';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('<span id="__mce_tmp">_</span>'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){return{rng:y.getRng()}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML('<span data-mce-type="bookmark" id="'+j+'_start" style="'+x+'">'+m+"</span>");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML('<span data-mce-type="bookmark" id="'+j+'_end" style="'+x+'">'+m+"</span>")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(o){var s=this,m=s.dom,j,i,g,r,k,u,p,q;function h(A){var t=o[A?"start":"end"],x,y,z,v;if(t){z=t[0];for(y=r,x=t.length-1;x>=1;x--){v=y.childNodes;if(t[x]>v.length-1){return}y=v[t[x]]}if(y.nodeType===3){z=Math.min(t[0],y.nodeValue.length)}if(y.nodeType===1){z=Math.min(t[0],y.childNodes.length)}if(A){g.setStart(y,z)}else{g.setEnd(y,z)}}return true}function l(B){var v=m.get(o.id+"_"+B),A,t,y,z,x=o.keep;if(v){A=v.parentNode;if(B=="start"){if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}k=u=A;p=q=t}else{if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}u=A;q=t}if(!x){z=v.previousSibling;y=v.nextSibling;e(d.grep(v.childNodes),function(C){if(C.nodeType==3){C.nodeValue=C.nodeValue.replace(/\uFEFF/g,"")}});while(v=m.get(o.id+"_"+B)){m.remove(v,1)}if(z&&y&&z.nodeType==y.nodeType&&z.nodeType==3&&!d.isOpera){t=z.nodeValue.length;z.appendData(y.nodeValue);m.remove(y);if(B=="start"){k=u=z;p=q=t}else{u=z;q=t}}}}}function n(t){if(m.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='<br data-mce-bogus="1" />'}return t}if(o){if(o.start){g=m.createRng();r=m.getRoot();if(s.tridentSel){return s.tridentSel.moveToBookmark(o)}if(h(true)&&h()){s.setRng(g)}}else{if(o.id){l("start");l("end");if(k){g=m.createRng();g.setStart(n(k),p);g.setEnd(n(u),q);s.setRng(g)}}else{if(o.name){s.select(m.select(o.name)[o.index])}else{if(o.rng){s.setRng(o.rng)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(j<h.y||j+25>h.y+h.h){g.editor.getWin().scrollTo(0,j<h.y?j:j-h.h+25)}},destroy:function(h){var g=this;g.win=null;if(!h){d.removeUnload(g.destroy)}},_fixIESelection:function(){var h=this.dom,n=h.doc,i=n.body,k,o,g;function j(p,s){var q=i.createTextRange();try{q.moveToPoint(p,s)}catch(r){q=null}return q}function m(q){var p;if(q.button){p=j(q.x,q.y);if(p){if(p.compareEndPoints("StartToStart",o)>0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&d<h.nodeValue.length){i=f(h,d);h=i.previousSibling;if(g>d){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d<h.nodeValue.length){h=f(h,d);d=0}if(i.nodeType==3&&g>0&&g<i.nodeValue.length){i=f(i,g).previousSibling;g=i.nodeValue.length}}return{startContainer:h,startOffset:d,endContainer:i,endOffset:g}}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var q=this,n=e.root,m=e.items,o=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,l=e.excludeFromTabOrder,k,h,p,d,g;f=f||b.DOM;k=function(r){g=r.target.id};h=function(r){f.setAttrib(r.target.id,"tabindex","-1")};d=function(r){var s=f.get(g);f.setAttrib(s,"tabindex","0");s.focus()};q.focus=function(){f.get(g).focus()};q.destroy=function(){c(m,function(s){var t=f.get(s.id);f.unbind(t,"focus",k);f.unbind(t,"blur",h)});var r=f.get(n);f.unbind(r,"focus",d);f.unbind(r,"keydown",p);m=f=n=q.focus=k=h=p=d=null;q.destroy=function(){}};q.moveFocus=function(v,s){var r=-1,u=q.controls,t;if(!g){return}c(m,function(y,x){if(y.id===g){r=x;return false}});r+=v;if(r<0){r=m.length-1}else{if(r>=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}break;case u:if(i){q.moveFocus(1)}break;case y:if(o){q.moveFocus(-1)}break;case A:if(o){q.moveFocus(1)}break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<span class="mceIcon '+e["class"]+'"><img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" /></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keyup",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='<span role="listbox" aria-haspopup="true" aria-labelledby="'+g.id+'_voiceDesc" aria-describedby="'+g.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+g.id+'" cellpadding="0" cellspacing="0" class="'+k+" "+k+"Enabled"+(i["class"]?(" "+i["class"]):"")+'"><tbody><tr>';j+="<td>"+d.createHTML("span",{id:g.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},g.settings.title);j+=d.createHTML("a",{id:g.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},d.encode(g.settings.title))+"</td>";j+="<td>"+d.createHTML("a",{id:g.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";j+="</tr></tbody></table></span>";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(l){var k;b.remove(h.id,"change",i);j=false;k=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",k)});if(e.isWebKit&&(l.keyCode==37||l.keyCode==39)){return b.prevent(l)}if(l.keyCode==13||l.keyCode==32){g(l);return b.cancel(l)}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(k){var l=k.DOM,j=k.dom.Event,f=k.extend,i=k.each,a=k.isGecko,b=k.isIE,e=k.isWebKit,d=k.is,h=k.ThemeManager,c=k.PluginManager,g=k.explode;k.create("tinymce.Editor",{Editor:function(p,o){var m=this,n=true;m.settings=o=f({id:p,language:"en",theme:"advanced",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:k.documentBaseURL,add_form_submit_trigger:n,submit_patch:n,add_unload_trigger:n,convert_urls:n,relative_urls:n,remove_script_host:n,table_inline_editing:false,object_resizing:n,accessibility_focus:n,doctype:k.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y<z){y=z}}else{p=H.theme(G,C);if(p.editorContainer.nodeType){p.editorContainer=p.editorContainer.id=p.editorContainer.id||G.id+"_parent"}if(p.iframeContainer.nodeType){p.iframeContainer=p.iframeContainer.id=p.iframeContainer.id||G.id+"_iframecontainer"}y=p.iframeHeight||C.offsetHeight;if(b){G.onInit.add(function(n){n.dom.bind(n.getBody(),"beforedeactivate keydown",function(){n.lastIERng=n.selection.getRng()})})}}G.editorContainer=p.editorContainer}if(H.content_css){i(g(H.content_css),function(n){G.contentCSS.push(G.documentBaseURI.toAbsolute(n))})}if(H.content_style){G.contentStyles.push(H.content_style)}if(H.content_editable){C=q=p=null;return G.initContentBody()}if(document.domain&&location.hostname!=document.domain){k.relaxedDomain=document.domain}G.iframeHTML=H.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+='<base href="'+G.documentBaseURI.getURI()+'" />'}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{G.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}}G.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';for(x=0;x<G.contentCSS.length;x++){G.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+G.contentCSS[x]+'" />'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='</head><body id="'+v+'" class="mceContentBody '+B+'" onload="window.parent.tinyMCE.get(\''+G.id+"').onLoad.dispatch();\"><br></body></html>";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return"<!--mce:protected "+escape(x)+"-->"})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.lastIERng){t.setRng(u.lastIERng)}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'><br data-mce-bogus="1"></'+q+">"}else{r='<br data-mce-bogus="1">'}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}if(!o.settings.content_editable||document.activeElement===o.getBody()){o.selection.normalize()}return p.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=d.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceToggleFormat:function(y,x,v){s(v)},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){if(!k.forced_root_block&&!m.getParent(p.getNode(),m.isBlock)){q.apply("div")}e(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(d.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m<e.length-1;m++){e[m]=e[m+1]}e.length--;i=e.length}}p.bookmark=h.selection.getBookmark(2,true);if(i<e.length-1){e.length=i+1}e.push(p);i=e.length-1;l.onAdd.dispatch(l,p);h.isNotDirty=0;return p},undo:function(){var n,m;if(l.typing){l.add();l.typing=false}if(i>0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i<e.length-1){m=e[++i];h.setContent(m.content,{format:"raw"});h.selection.moveToBookmark(m.bookmark);l.onRedo.dispatch(l,m)}return m},clear:function(){e=[];i=0;l.typing=false},hasUndo:function(){return i>0||this.typing},hasRedo:function(){return i<e.length-1&&!this.typing}};return l}})(tinymce);tinymce.ForceBlocks=function(c){var b=c.settings,e=c.dom,a=c.selection,d=c.schema.getBlockElements();function f(){var j=a.getStart(),h=c.getBody(),g,k,o,s,q,i,l,m=-16777215,p,r;if(!j||j.nodeType!==1||!b.forced_root_block){return}while(j&&j!=h){if(d[j.nodeName]){return}j=j.parentNode}g=a.getRng();if(g.setStart){k=g.startContainer;o=g.startOffset;s=g.endContainer;q=g.endOffset}else{if(g.item){j=g.item(0);g=c.getDoc().body.createTextRange();g.moveToElementText(j)}r=g.parentElement().ownerDocument===c.getDoc();tmpRng=g.duplicate();tmpRng.collapse(true);o=tmpRng.move("character",m)*-1;if(!tmpRng.collapsed){tmpRng=g.duplicate();tmpRng.collapse(false);q=(tmpRng.move("character",m)*-1)-o}}j=h.firstChild;while(j){if(j.nodeType===3||(j.nodeType==1&&!d[j.nodeName])){if(j.nodeType===3&&j.nodeValue.length==0){l=j;j=j.nextSibling;e.remove(l);continue}if(!i){i=e.create(b.forced_root_block);j.parentNode.insertBefore(i,j);p=true}l=j;j=j.nextSibling;i.appendChild(l)}else{i=null;j=j.nextSibling}}if(p){if(g.setStart){g.setStart(k,o);g.setEnd(s,q);a.setRng(g)}else{if(r){try{g=c.getDoc().body.createTextRange();g.moveToElementText(h);g.collapse(true);g.moveStart("character",o);if(q>0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k<g;k++){o=n[k].createControl(j,h);if(o){return h.add(o)}}if(j==="|"||j==="separator"){return h.createSeparator()}if(m.buttons&&(o=m.buttons[j])){return h.createButton(j,o)}return h.add(o)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}n["class"]+=i.settings.directionality=="rtl"?" mceRtl":"";f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(f,n,h){var l=this,j=l.editor,i,k,m;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,scope:n.scope,control_manager:l},n);f=l.prefix+f;function g(o){return o.settings.use_accessible_selects&&!c.isGecko}if(j.settings.use_native_selects||g(j)){k=new c.ui.NativeListBox(f,n)}else{m=h||l._cls.listbox||c.ui.ListBox;k=new m(f,n,j)}l.controls[f]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){j.bookmark=j.selection.getBookmark(1)});a.add(o,"focus",function(){j.selection.moveToBookmark(j.bookmark);j.bookmark=null})})}if(k.hideMenu){j.onMouseDown.add(k.hideMenu,k)}return l.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(aa){var Q={},T=a.each,c=aa.dom,r=aa.selection,t=a.dom.TreeWalker,N=new a.dom.RangeUtils(c),d=aa.schema.isValidChild,A=a.isArray,H=c.isBlock,m=aa.settings.forced_root_block,s=c.nodeIndex,G="\uFEFF",e=/^(src|href|style)$/,X=false,C=true,P,D,x=c.getContentEditable;function I(ab){return !!aa.schema.getTextBlocks()[ab.toLowerCase()]}function n(ac,ab){return c.getParents(ac,ab,c.getRoot())}function b(ab){return ab.nodeType===1&&ab.id==="_mce_caret"}function j(){l({alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(ab){return true},onformat:function(ad,ab,ac){T(ac,function(af,ae){c.setAttrib(ad,ae,af)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});T("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(ab){l(ab,{block:ab,remove:"all"})});l(aa.settings.formats)}function W(){aa.addShortcut("ctrl+b","bold_desc","Bold");aa.addShortcut("ctrl+i","italic_desc","Italic");aa.addShortcut("ctrl+u","underline_desc","Underline");for(var ab=1;ab<=6;ab++){aa.addShortcut("ctrl+"+ab,"",["FormatBlock",false,"h"+ab])}aa.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);aa.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);aa.addShortcut("ctrl+9","",["FormatBlock",false,"address"])}function V(ab){return ab?Q[ab]:Q}function l(ab,ac){if(ab){if(typeof(ab)!=="string"){T(ab,function(ae,ad){l(ad,ae)})}else{ac=ac.length?ac:[ac];T(ac,function(ad){if(ad.deep===D){ad.deep=!ad.selector}if(ad.split===D){ad.split=!ad.selector||ad.inline}if(ad.remove===D&&ad.selector&&!ad.inline){ad.remove="none"}if(ad.selector&&ad.inline){ad.mixed=true;ad.block_expand=true}if(typeof(ad.classes)==="string"){ad.classes=ad.classes.split(/\s+/)}});Q[ab]=ac}}}var i=function(ac){var ab;aa.dom.getParent(ac,function(ad){ab=aa.dom.getStyle(ad,"text-decoration");return ab&&ab!=="none"});return ab};var L=function(ab){var ac;if(ab.nodeType===1&&ab.parentNode&&ab.parentNode.nodeType===1){ac=i(ab.parentNode);if(aa.dom.getStyle(ab,"color")&&ac){aa.dom.setStyle(ab,"text-decoration",ac)}else{if(aa.dom.getStyle(ab,"textdecoration")===ac){aa.dom.setStyle(ab,"text-decoration",null)}}}};function Y(ae,al,ag){var ah=V(ae),am=ah[0],ak,ac,aj,ai=r.isCollapsed();function ab(aq,ap){ap=ap||am;if(aq){if(ap.onformat){ap.onformat(aq,ap,al,ag)}T(ap.styles,function(at,ar){c.setStyle(aq,ar,q(at,al))});T(ap.attributes,function(at,ar){c.setAttrib(aq,ar,q(at,al))});T(ap.classes,function(ar){ar=q(ar,al);if(!c.hasClass(aq,ar)){c.addClass(aq,ar)}})}}function af(){function ar(ay,aw){var ax=new t(aw);for(ag=ax.current();ag;ag=ax.prev()){if(ag.childNodes.length>1||ag==ay||ag.tagName=="BR"){return ag}}}var aq=aa.selection.getRng();var av=aq.startContainer;var ap=aq.endContainer;if(av!=ap&&aq.endOffset===0){var au=ar(av,ap);var at=au.nodeType==3?au.length:au.childNodes.length;aq.setEnd(au,at)}return aq}function ad(at,ay,aw,av,aq){var ap=[],ar=-1,ax,aA=-1,au=-1,az;T(at.childNodes,function(aC,aB){if(aC.nodeName==="UL"||aC.nodeName==="OL"){ar=aB;ax=aC;return false}});T(at.childNodes,function(aC,aB){if(aC.nodeName==="SPAN"&&c.getAttrib(aC,"data-mce-type")=="bookmark"){if(aC.id==ay.id+"_start"){aA=aB}else{if(aC.id==ay.id+"_end"){au=aB}}}});if(ar<=0||(aA<ar&&au>ar)){T(a.grep(at.childNodes),aq);return 0}else{az=c.clone(aw,X);T(a.grep(at.childNodes),function(aC,aB){if((aA<ar&&aB<ar)||(aA>ar&&aB>ar)){ap.push(aC);aC.parentNode.removeChild(aC)}});if(aA<ar){at.insertBefore(az,ax)}else{if(aA>ar){at.insertBefore(az,ax.nextSibling)}}av.push(az);T(ap,function(aB){az.appendChild(aB)});return az}}function an(aq,at,aw){var ap=[],av,ar,au=true;av=am.inline||am.block;ar=c.create(av);ab(ar);N.walk(aq,function(ax){var ay;function az(aA){var aF,aD,aB,aC,aE;aE=au;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=au;au=x(aA)==="true";aC=true}if(g(aF,"br")){ay=0;if(am.block){c.remove(aA)}return}if(am.wrapper&&y(aA,ae,al)){ay=0;return}if(au&&!aC&&am.block&&!am.wrapper&&I(aF)){aA=c.rename(aA,av);ab(aA);ap.push(aA);ay=0;return}if(am.selector){T(ah,function(aG){if("collapsed" in aG&&aG.collapsed!==ai){return}if(c.is(aA,aG.selector)&&!b(aA)){ab(aA,aG);aB=true}});if(!am.inline||aB){ay=0;return}}if(au&&!aC&&d(av,aF)&&d(aD,av)&&!(!aw&&aA.nodeType===3&&aA.nodeValue.length===1&&aA.nodeValue.charCodeAt(0)===65279)&&!b(aA)){if(!ay){ay=c.clone(ar,X);aA.parentNode.insertBefore(ay,aA);ap.push(ay)}ay.appendChild(aA)}else{if(aF=="li"&&at){ay=ad(aA,at,ar,ap,az)}else{ay=0;T(a.grep(aA.childNodes),az);if(aC){au=aE}ay=0}}}T(ax,az)});if(am.wrap_links===false){T(ap,function(ax){function ay(aC){var aB,aA,az;if(aC.nodeName==="A"){aA=c.clone(ar,X);ap.push(aA);az=a.grep(aC.childNodes);for(aB=0;aB<az.length;aB++){aA.appendChild(az[aB])}aC.appendChild(aA)}T(a.grep(aC.childNodes),ay)}ay(ax)})}T(ap,function(az){var ax;function aA(aC){var aB=0;T(aC.childNodes,function(aD){if(!f(aD)&&!K(aD)){aB++}});return aB}function ay(aB){var aD,aC;T(aB.childNodes,function(aE){if(aE.nodeType==1&&!K(aE)&&!b(aE)){aD=aE;return X}});if(aD&&h(aD,am)){aC=c.clone(aD,X);ab(aC);c.replace(aC,aB,C);c.remove(aD,1)}return aC||aB}ax=aA(az);if((ap.length>1||!H(az))&&ax===0){c.remove(az,1);return}if(am.inline||am.wrapper){if(!am.exact&&ax===1){az=ay(az)}T(ah,function(aB){T(c.select(aB.inline,az),function(aD){var aC;if(aB.wrap_links===false){aC=aD.parentNode;do{if(aC.nodeName==="A"){return}}while(aC=aC.parentNode)}Z(aB,al,aD,aB.exact?aD:null)})});if(y(az.parentNode,ae,al)){c.remove(az,1);az=0;return C}if(am.merge_with_parents){c.getParent(az.parentNode,function(aB){if(y(aB,ae,al)){c.remove(az,1);az=0;return C}})}if(az&&am.merge_siblings!==false){az=u(E(az),az);az=u(az,E(az,C))}}})}if(am){if(ag){if(ag.nodeType){ac=c.createRng();ac.setStartBefore(ag);ac.setEndAfter(ag);an(p(ac,ah),null,true)}else{an(ag,null,true)}}else{if(!ai||!am.inline||c.select("td.mceSelected,th.mceSelected").length){var ao=aa.selection.getNode();if(!m&&ah[0].defaultBlock&&!c.getParent(ao,c.isBlock)){Y(ah[0].defaultBlock)}aa.selection.setRng(af());ak=r.getBookmark();an(p(r.getRng(C),ah),ak);if(am.styles&&(am.styles.color||am.styles.textDecoration)){a.walk(ao,L,"childNodes");L(ao)}r.moveToBookmark(ak);R(r.getRng(C));aa.nodeChanged()}else{U("apply",ae,al)}}}}function B(ad,am,af){var ag=V(ad),ao=ag[0],ak,aj,ac,al=true;function ae(av){var au,at,ar,aq,ax,aw;if(av.nodeType===3){return}if(av.nodeType===1&&x(av)){ax=al;al=x(av)==="true";aw=true}au=a.grep(av.childNodes);if(al&&!aw){for(at=0,ar=ag.length;at<ar;at++){if(Z(ag[at],am,av,av)){break}}}if(ao.deep){if(au.length){for(at=0,ar=au.length;at<ar;at++){ae(au[at])}if(aw){al=ax}}}}function ah(aq){var ar;T(n(aq.parentNode).reverse(),function(at){var au;if(!ar&&at.id!="_start"&&at.id!="_end"){au=y(at,ad,am);if(au&&au.split!==false){ar=at}}});return ar}function ab(au,aq,aw,az){var aA,ay,ax,at,av,ar;if(au){ar=au.parentNode;for(aA=aq.parentNode;aA&&aA!=ar;aA=aA.parentNode){ay=c.clone(aA,X);for(av=0;av<ag.length;av++){if(Z(ag[av],am,ay,ay)){ay=0;break}}if(ay){if(ax){ay.appendChild(ax)}if(!at){at=ay}ax=ay}}if(az&&(!ao.mixed||!H(au))){aq=c.split(au,aq)}if(ax){aw.parentNode.insertBefore(ax,aw);at.appendChild(aw)}}return aq}function an(aq){return ab(ah(aq),aq,aq,true)}function ai(at){var ar=c.get(at?"_start":"_end"),aq=ar[at?"firstChild":"lastChild"];if(K(aq)){aq=aq[at?"firstChild":"lastChild"]}c.remove(ar,true);return aq}function ap(aq){var at,au,ar;aq=p(aq,ag,C);if(ao.split){at=M(aq,C);au=M(aq);if(at!=au){if(/^(TR|TD)$/.test(at.nodeName)&&at.firstChild){at=(at.nodeName=="TD"?at.firstChild:at.firstChild.firstChild)||at}at=S(at,"span",{id:"_start","data-mce-type":"bookmark"});au=S(au,"span",{id:"_end","data-mce-type":"bookmark"});an(at);an(au);at=ai(C);au=ai()}else{at=au=an(at)}aq.startContainer=at.parentNode;aq.startOffset=s(at);aq.endContainer=au.parentNode;aq.endOffset=s(au)+1}N.walk(aq,function(av){T(av,function(aw){ae(aw);if(aw.nodeType===1&&aa.dom.getStyle(aw,"text-decoration")==="underline"&&aw.parentNode&&i(aw.parentNode)==="underline"){Z({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,aw)}})})}if(af){if(af.nodeType){ac=c.createRng();ac.setStartBefore(af);ac.setEndAfter(af);ap(ac)}else{ap(af)}return}if(!r.isCollapsed()||!ao.inline||c.select("td.mceSelected,th.mceSelected").length){ak=r.getBookmark();ap(r.getRng(C));r.moveToBookmark(ak);if(ao.inline&&k(ad,am,r.getStart())){R(r.getRng(true))}aa.nodeChanged()}else{U("remove",ad,am)}}function F(ac,ae,ad){var ab=V(ac);if(k(ac,ae,ad)&&(!("toggle" in ab[0])||ab[0].toggle)){B(ac,ae,ad)}else{Y(ac,ae,ad)}}function y(ac,ab,ah,af){var ad=V(ab),ai,ag,ae;function aj(an,ap,aq){var am,ao,ak=ap[aq],al;if(ap.onmatch){return ap.onmatch(an,ap,aq)}if(ak){if(ak.length===D){for(am in ak){if(ak.hasOwnProperty(am)){if(aq==="attributes"){ao=c.getAttrib(an,am)}else{ao=O(an,am)}if(af&&!ao&&!ap.exact){return}if((!af||ap.exact)&&!g(ao,q(ak[am],ah))){return}}}}else{for(al=0;al<ak.length;al++){if(aq==="attributes"?c.getAttrib(an,ak[al]):O(an,ak[al])){return ap}}}}return ap}if(ad&&ac){for(ag=0;ag<ad.length;ag++){ai=ad[ag];if(h(ac,ai)&&aj(ac,ai,"attributes")&&aj(ac,ai,"styles")){if(ae=ai.classes){for(ag=0;ag<ae.length;ag++){if(!c.hasClass(ac,ae[ag])){return}}}return ai}}}}function k(ad,af,ae){var ac;function ab(ag){ag=c.getParent(ag,function(ah){return !!y(ah,ad,af,true)});return y(ag,ad,af)}if(ae){return ab(ae)}ae=r.getNode();if(ab(ae)){return C}ac=r.getStart();if(ac!=ae){if(ab(ac)){return C}}return X}function v(ai,ah){var af,ag=[],ae={},ad,ac,ab;af=r.getStart();c.getParent(af,function(al){var ak,aj;for(ak=0;ak<ai.length;ak++){aj=ai[ak];if(!ae[aj]&&y(al,aj,ah)){ae[aj]=true;ag.push(aj)}}},c.getRoot());return ag}function z(af){var ah=V(af),ae,ad,ag,ac,ab;if(ah){ae=r.getStart();ad=n(ae);for(ac=ah.length-1;ac>=0;ac--){ab=ah[ac].selector;if(!ab){return C}for(ag=ad.length-1;ag>=0;ag--){if(c.is(ad[ag],ab)){return C}}}}return X}function J(ab,ae,ac){var ad;if(!P){P={};ad={};aa.onNodeChange.addToTop(function(ag,af,ai){var ah=n(ai),aj={};T(P,function(ak,al){T(ah,function(am){if(y(am,al,{},ak.similar)){if(!ad[al]){T(ak,function(an){an(true,{node:am,format:al,parents:ah})});ad[al]=ak}aj[al]=ak;return false}})});T(ad,function(ak,al){if(!aj[al]){delete ad[al];T(ak,function(am){am(false,{node:ai,format:al,parents:ah})})}})})}T(ab.split(","),function(af){if(!P[af]){P[af]=[];P[af].similar=ac}P[af].push(ae)});return this}a.extend(this,{get:V,register:l,apply:Y,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z,formatChanged:J});j();W();function h(ab,ac){if(g(ab,ac.inline)){return C}if(g(ab,ac.block)){return C}if(ac.selector){return c.is(ab,ac.selector)}}function g(ac,ab){ac=ac||"";ab=ab||"";ac=""+(ac.nodeName||ac);ab=""+(ab.nodeName||ab);return ac.toLowerCase()==ab.toLowerCase()}function O(ac,ab){var ad=c.getStyle(ac,ab);if(ab=="color"||ab=="backgroundColor"){ad=c.toHex(ad)}if(ab=="fontWeight"&&ad==700){ad="bold"}return""+ad}function q(ab,ac){if(typeof(ab)!="string"){ab=ab(ac)}else{if(ac){ab=ab.replace(/%(\w+)/g,function(ae,ad){return ac[ad]||ae})}}return ab}function f(ab){return ab&&ab.nodeType===3&&/^([\t \r\n]+|)$/.test(ab.nodeValue)}function S(ad,ac,ab){var ae=c.create(ac,ab);ad.parentNode.insertBefore(ae,ad);ae.appendChild(ad);return ae}function p(ab,am,ae){var ap,an,ah,al,ad=ab.startContainer,ai=ab.startOffset,ar=ab.endContainer,ak=ab.endOffset;function ao(aA){var au,ax,az,aw,av,at;au=ax=aA?ad:ar;av=aA?"previousSibling":"nextSibling";at=c.getRoot();function ay(aB){return aB.nodeName=="BR"&&aB.getAttribute("data-mce-bogus")&&!aB.nextSibling}if(au.nodeType==3&&!f(au)){if(aA?ai>0:ak<au.nodeValue.length){return au}}for(;;){if(!am[0].block_expand&&H(ax)){return ax}for(aw=ax[av];aw;aw=aw[av]){if(!K(aw)&&!f(aw)&&!ay(aw)){return ax}}if(ax.parentNode==at){au=ax;break}ax=ax.parentNode}return au}function ag(at,au){if(au===D){au=at.nodeType===3?at.length:at.childNodes.length}while(at&&at.hasChildNodes()){at=at.childNodes[au];if(at){au=at.nodeType===3?at.length:at.childNodes.length}}return{node:at,offset:au}}if(ad.nodeType==1&&ad.hasChildNodes()){an=ad.childNodes.length-1;ad=ad.childNodes[ai>an?an:ai];if(ad.nodeType==3){ai=0}}if(ar.nodeType==1&&ar.hasChildNodes()){an=ar.childNodes.length-1;ar=ar.childNodes[ak>an?an:ak-1];if(ar.nodeType==3){ak=ar.nodeValue.length}}function aq(au){var at=au;while(at){if(at.nodeType===1&&x(at)){return x(at)==="false"?at:au}at=at.parentNode}return au}function aj(au,ay,aA){var ax,av,az,at;function aw(aC,aE){var aF,aB,aD=aC.nodeValue;if(typeof(aE)=="undefined"){aE=aA?aD.length:0}if(aA){aF=aD.lastIndexOf(" ",aE);aB=aD.lastIndexOf("\u00a0",aE);aF=aF>aB?aF:aB;if(aF!==-1&&!ae){aF++}}else{aF=aD.indexOf(" ",aE);aB=aD.indexOf("\u00a0",aE);aF=aF!==-1&&(aB===-1||aF<aB)?aF:aB}return aF}if(au.nodeType===3){az=aw(au,ay);if(az!==-1){return{container:au,offset:az}}at=au}ax=new t(au,c.getParent(au,H)||aa.getBody());while(av=ax[aA?"prev":"next"]()){if(av.nodeType===3){at=av;az=aw(av);if(az!==-1){return{container:av,offset:az}}}else{if(H(av)){break}}}if(at){if(aA){ay=0}else{ay=at.length}return{container:at,offset:ay}}}function af(au,at){var av,aw,ay,ax;if(au.nodeType==3&&au.nodeValue.length===0&&au[at]){au=au[at]}av=n(au);for(aw=0;aw<av.length;aw++){for(ay=0;ay<am.length;ay++){ax=am[ay];if("collapsed" in ax&&ax.collapsed!==ab.collapsed){continue}if(c.is(av[aw],ax.selector)){return av[aw]}}}return au}function ac(au,at,aw){var av;if(!am[0].wrapper){av=c.getParent(au,am[0].block)}if(!av){av=c.getParent(au.nodeType==3?au.parentNode:au,I)}if(av&&am[0].wrapper){av=n(av,"ul,ol").reverse()[0]||av}if(!av){av=au;while(av[at]&&!H(av[at])){av=av[at];if(g(av,"br")){break}}}return av||au}ad=aq(ad);ar=aq(ar);if(K(ad.parentNode)||K(ad)){ad=K(ad)?ad:ad.parentNode;ad=ad.nextSibling||ad;if(ad.nodeType==3){ai=0}}if(K(ar.parentNode)||K(ar)){ar=K(ar)?ar:ar.parentNode;ar=ar.previousSibling||ar;if(ar.nodeType==3){ak=ar.length}}if(am[0].inline){if(ab.collapsed){al=aj(ad,ai,true);if(al){ad=al.container;ai=al.offset}al=aj(ar,ak);if(al){ar=al.container;ak=al.offset}}ah=ag(ar,ak);if(ah.node){while(ah.node&&ah.offset===0&&ah.node.previousSibling){ah=ag(ah.node.previousSibling)}if(ah.node&&ah.offset>0&&ah.node.nodeType===3&&ah.node.nodeValue.charAt(ah.offset-1)===" "){if(ah.offset>1){ar=ah.node;ar.splitText(ah.offset-1)}}}}if(am[0].inline||am[0].block_expand){if(!am[0].inline||(ad.nodeType!=3||ai===0)){ad=ao(true)}if(!am[0].inline||(ar.nodeType!=3||ak===ar.nodeValue.length)){ar=ao()}}if(am[0].selector&&am[0].expand!==X&&!am[0].inline){ad=af(ad,"previousSibling");ar=af(ar,"nextSibling")}if(am[0].block||am[0].selector){ad=ac(ad,"previousSibling");ar=ac(ar,"nextSibling");if(am[0].block){if(!H(ad)){ad=ao(true)}if(!H(ar)){ar=ao()}}}if(ad.nodeType==1){ai=s(ad);ad=ad.parentNode}if(ar.nodeType==1){ak=s(ar)+1;ar=ar.parentNode}return{startContainer:ad,startOffset:ai,endContainer:ar,endOffset:ak}}function Z(ah,ag,ae,ab){var ad,ac,af;if(!h(ae,ah)){return X}if(ah.remove!="all"){T(ah.styles,function(aj,ai){aj=q(aj,ag);if(typeof(ai)==="number"){ai=aj;ab=0}if(!ab||g(O(ab,ai),aj)){c.setStyle(ae,ai,"")}af=1});if(af&&c.getAttrib(ae,"style")==""){ae.removeAttribute("style");ae.removeAttribute("data-mce-style")}T(ah.attributes,function(ak,ai){var aj;ak=q(ak,ag);if(typeof(ai)==="number"){ai=ak;ab=0}if(!ab||g(c.getAttrib(ab,ai),ak)){if(ai=="class"){ak=c.getAttrib(ae,ai);if(ak){aj="";T(ak.split(/\s+/),function(al){if(/mce\w+/.test(al)){aj+=(aj?" ":"")+al}});if(aj){c.setAttrib(ae,ai,aj);return}}}if(ai=="class"){ae.removeAttribute("className")}if(e.test(ai)){ae.removeAttribute("data-mce-"+ai)}ae.removeAttribute(ai)}});T(ah.classes,function(ai){ai=q(ai,ag);if(!ab||c.hasClass(ab,ai)){c.removeClass(ae,ai)}});ac=c.getAttribs(ae);for(ad=0;ad<ac.length;ad++){if(ac[ad].nodeName.indexOf("_")!==0){return X}}}if(ah.remove!="none"){o(ae,ah);return C}}function o(ad,ae){var ab=ad.parentNode,ac;function af(ah,ag,ai){ah=E(ah,ag,ai);return !ah||(ah.nodeName=="BR"||H(ah))}if(ae.block){if(!m){if(H(ad)&&!H(ab)){if(!af(ad,X)&&!af(ad.firstChild,C,1)){ad.insertBefore(c.create("br"),ad.firstChild)}if(!af(ad,C)&&!af(ad.lastChild,X,1)){ad.appendChild(c.create("br"))}}}else{if(ab==c.getRoot()){if(!ae.list_block||!g(ad,ae.list_block)){T(a.grep(ad.childNodes),function(ag){if(d(m,ag.nodeName.toLowerCase())){if(!ac){ac=S(ag,m)}else{ac.appendChild(ag)}}else{ac=0}})}}}}if(ae.selector&&ae.inline&&!g(ae.inline,ad)){return}c.remove(ad,1)}function E(ac,ab,ad){if(ac){ab=ab?"nextSibling":"previousSibling";for(ac=ad?ac:ac[ab];ac;ac=ac[ab]){if(ac.nodeType==1||!f(ac)){return ac}}}}function K(ab){return ab&&ab.nodeType==1&&ab.getAttribute("data-mce-type")=="bookmark"}function u(af,ae){var ab,ad,ac;function ah(ak,aj){if(ak.nodeName!=aj.nodeName){return X}function ai(am){var an={};T(c.getAttribs(am),function(ao){var ap=ao.nodeName.toLowerCase();if(ap.indexOf("_")!==0&&ap!=="style"){an[ap]=c.getAttrib(am,ap)}});return an}function al(ap,ao){var an,am;for(am in ap){if(ap.hasOwnProperty(am)){an=ao[am];if(an===D){return X}if(ap[am]!=an){return X}delete ao[am]}}for(am in ao){if(ao.hasOwnProperty(am)){return X}}return C}if(!al(ai(ak),ai(aj))){return X}if(!al(c.parseStyle(c.getAttrib(ak,"style")),c.parseStyle(c.getAttrib(aj,"style")))){return X}return C}function ag(aj,ai){for(ad=aj;ad;ad=ad[ai]){if(ad.nodeType==3&&ad.nodeValue.length!==0){return aj}if(ad.nodeType==1&&!K(ad)){return ad}}return aj}if(af&&ae){af=ag(af,"previousSibling");ae=ag(ae,"nextSibling");if(ah(af,ae)){for(ad=af.nextSibling;ad&&ad!=ae;){ac=ad;ad=ad.nextSibling;af.appendChild(ac)}c.remove(ae);T(a.grep(ae.childNodes),function(ai){af.appendChild(ai)});return af}}return ae}function I(ab){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(ab)}function M(ac,ag){var ab,af,ad,ae;ab=ac[ag?"startContainer":"endContainer"];af=ac[ag?"startOffset":"endOffset"];if(ab.nodeType==1){ad=ab.childNodes.length-1;if(!ag&&af){af--}ab=ab.childNodes[af>ad?ad:af]}if(ab.nodeType===3&&ag&&af>=ab.nodeValue.length){ab=new t(ab,aa.getBody()).next()||ab}if(ab.nodeType===3&&!ag&&af===0){ab=new t(ab,aa.getBody()).prev()||ab}return ab}function U(ak,ab,ai){var al="_mce_caret",ac=aa.settings.caret_debug;function ad(ap){var ao=c.create("span",{id:al,"data-mce-bogus":true,style:ac?"color:red":""});if(ap){ao.appendChild(aa.getDoc().createTextNode(G))}return ao}function aj(ap,ao){while(ap){if((ap.nodeType===3&&ap.nodeValue!==G)||ap.childNodes.length>1){return false}if(ao&&ap.nodeType===1){ao.push(ap)}ap=ap.firstChild}return true}function ag(ao){while(ao){if(ao.id===al){return ao}ao=ao.parentNode}}function af(ao){var ap;if(ao){ap=new t(ao,ao);for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType===3){return ao}}}}function ae(aq,ap){var ar,ao;if(!aq){aq=ag(r.getStart());if(!aq){while(aq=c.get(al)){ae(aq,false)}}}else{ao=r.getRng(true);if(aj(aq)){if(ap!==false){ao.setStartBefore(aq);ao.setEndBefore(aq)}c.remove(aq)}else{ar=af(aq);if(ar.nodeValue.charAt(0)===G){ar=ar.deleteData(0,1)}c.remove(aq,1)}r.setRng(ao)}}function ah(){var aq,ao,av,au,ar,ap,at;aq=r.getRng(true);au=aq.startOffset;ap=aq.startContainer;at=ap.nodeValue;ao=ag(r.getStart());if(ao){av=af(ao)}if(at&&au>0&&au<at.length&&/\w/.test(at.charAt(au))&&/\w/.test(at.charAt(au-1))){ar=r.getBookmark();aq.collapse(true);aq=p(aq,V(ab));aq=N.split(aq);Y(ab,ai,aq);r.moveToBookmark(ar)}else{if(!ao||av.nodeValue!==G){ao=ad(true);av=ao.firstChild;aq.insertNode(ao);au=1;Y(ab,ai,ao)}else{Y(ab,ai,ao)}r.setCursorLocation(av,au)}}function am(){var ao=r.getRng(true),ap,ar,av,au,aq,ay,ax=[],at,aw;ap=ao.startContainer;ar=ao.startOffset;aq=ap;if(ap.nodeType==3){if(ar!=ap.nodeValue.length||ap.nodeValue===G){au=true}aq=aq.parentNode}while(aq){if(y(aq,ab,ai)){ay=aq;break}if(aq.nextSibling){au=true}ax.push(aq);aq=aq.parentNode}if(!ay){return}if(au){av=r.getBookmark();ao.collapse(true);ao=p(ao,V(ab),true);ao=N.split(ao);B(ab,ai,ao);r.moveToBookmark(av)}else{aw=ad();aq=aw;for(at=ax.length-1;at>=0;at--){aq.appendChild(c.clone(ax[at],false));aq=aq.firstChild}aq.appendChild(c.doc.createTextNode(G));aq=aq.firstChild;c.insertAfter(aw,ay);r.setCursorLocation(aq,1)}}function an(){var ap,ao,aq;ao=ag(r.getStart());if(ao&&!c.isEmpty(ao)){a.walk(ao,function(ar){if(ar.nodeType==1&&ar.id!==al&&!c.isEmpty(ar)){c.setAttrib(ar,"data-mce-bogus",null)}},"childNodes")}}if(!self._hasCaretEvents){aa.onBeforeGetContent.addToTop(function(){var ao=[],ap;if(aj(ag(r.getStart()),ao)){ap=ao.length;while(ap--){c.setAttrib(ao[ap],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ao){aa[ao].addToTop(function(){ae();an()})});aa.onKeyDown.addToTop(function(ao,aq){var ap=aq.keyCode;if(ap==8||ap==37||ap==39){ae(ag(r.getStart()))}an()});r.onSetContent.add(an);self._hasCaretEvents=true}if(ak=="apply"){ah()}else{am()}}function R(ac){var ab=ac.startContainer,ai=ac.startOffset,ae,ah,ag,ad,af;if(ab.nodeType==3&&ai>=ab.nodeValue.length){ai=s(ab);ab=ab.parentNode;ae=true}if(ab.nodeType==1){ad=ab.childNodes;ab=ad[Math.min(ai,ad.length-1)];ah=new t(ab,c.getParent(ab,c.isBlock));if(ai>ad.length-1||ae){ah.next()}for(ag=ah.current();ag;ag=ah.next()){if(ag.nodeType==3&&!f(ag)){af=c.create("a",null,G);ag.parentNode.insertBefore(af,ag);ac.setStart(ag,0);r.setRng(ac);c.remove(af);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(A){var v=e.getRng(true),G,j,z,u,p,M,B,o,k,n,t,J,x,C;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function y(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(U<S.y||U+25>S.y+S.h){f.getWin().scrollTo(0,U<S.y?U:U-S.h+25)}}function r(O){var P=z,R,Q,N;R=O||t=="TABLE"?i.create(O||x):p.cloneNode(false);N=R;if(d.keep_styles!==false){do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(P.nodeName)){if(P.id=="_mce_caret"){continue}Q=P.cloneNode(false);i.setAttrib(Q,"id","");if(R.hasChildNodes()){Q.appendChild(R.firstChild);R.appendChild(Q)}else{N=Q;R.appendChild(Q)}}}while(P=P.parentNode)}if(!b.isIE){N.innerHTML='<br data-mce-bogus="1">'}return R}function q(Q){var P,O,N;if(z.nodeType==3&&(Q?u>0:u<z.nodeValue.length)){return false}if(z.parentNode==p&&C&&!Q){return true}if(Q&&z.nodeType==1&&z==p.firstChild){return true}if(z.nodeName==="TABLE"||(z.previousSibling&&z.previousSibling.nodeName=="TABLE")){return(C&&!Q)||(!C&&Q)}P=new a(z,p);if(z.nodeType==3){if(Q&&u==0){P.prev()}else{if(!Q&&u==z.nodeValue.length){P.next()}}}while(O=P.current()){if(O.nodeType===1){if(!O.getAttribute("data-mce-bogus")){N=O.nodeName.toLowerCase();if(c[N]&&N!=="br"){return false}}}else{if(O.nodeType===3&&!/^[ \t\r\n]*$/.test(O.nodeValue)){return false}}if(Q){P.prev()}else{P.next()}}return true}function l(N,T){var U,S,P,R,Q,O=x||"P";S=i.getParent(N,i.isBlock);if(!S||!E(S)){S=S||j;if(!S.hasChildNodes()){U=i.create(O);S.appendChild(U);v.setStart(U,0);v.setEnd(U,0);return U}R=N;while(R.parentNode!=S){R=R.parentNode}while(R&&!i.isBlock(R)){P=R;R=R.previousSibling}if(P){U=i.create(O);P.parentNode.insertBefore(U,P);R=P;while(R&&!i.isBlock(R)){Q=R.nextSibling;U.appendChild(R);R=Q}v.setStart(N,T);v.setEnd(N,T)}}return N}function H(){function N(P){var O=n[P?"firstChild":"lastChild"];while(O){if(O.nodeType==1){break}O=O[P?"nextSibling":"previousSibling"]}return O===p}o=x?r(x):i.create("BR");if(N(true)&&N()){i.replace(o,n)}else{if(N(true)){n.parentNode.insertBefore(o,n)}else{if(N()){i.insertAfter(o,n);F(o)}else{G=v.cloneRange();G.setStartAfter(p);G.setEndAfter(n);k=G.extractContents();i.insertAfter(k,n);i.insertAfter(o,n)}}}i.remove(p);m(o);h.add()}function D(){var O=new a(z,p),N;while(N=O.current()){if(N.nodeName=="BR"){return true}N=O.next()}}function L(){var P,O,N;if(z&&z.nodeType==3&&u>=z.nodeValue.length){if(!b.isIE&&!D()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if(b.isIE&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{},"&nbsp;");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(A.isDefaultPrevented()){return}z=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;B=A.shiftKey;if(z.nodeType==1&&z.hasChildNodes()){C=u>z.childNodes.length-1;z=z.childNodes[Math.min(u,z.childNodes.length-1)]||z;if(C&&z.nodeType==3){u=z.nodeValue.length}else{u=0}}j=K(z);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||B){L()}return}if((x&&!B)||(!x&&B)){z=l(z,u)}p=i.getParent(z,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!A.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&B){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!B){L();return}}else{if((!x&&!B&&t!="LI")||(x&&B)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);y(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce);
\ No newline at end of file
index 0808f8f9b23fe2497c23d051047dd8271f11302b..bb8e58c88a6b86169d25a1b15ea6be5a8031d6f0 100644 (file)
@@ -2,4 +2,4 @@
 // Uncomment and change this document.domain value if you are loading the script cross subdomains
 // document.domain = 'moxiecode.com';
 
-var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document,{ownEvents:true,proxy:tinyMCEPopup._eventProxy});b.dom.bind(window,"ready",b._onDOMLoaded,b);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(a){var a=(a&&a.target)||window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}if(!b.editor.getParam("browser_preferred_colors",false)||!b.isWindow){b.dom.addClass(document.body,"forceColors")}document.body.style.display="";if(tinymce.isIE&&!tinymce.isIE11){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}else{if(tinymce.isIE11){document.addEventListener("mouseup",tinyMCEPopup._restoreSelection,false)}}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){b.dom.bind(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){var b=a.target||a.srcElement;if(b.onchange){b.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_eventProxy:function(a){return function(b){tinyMCEPopup.dom.events.callNativeHandler(a,b)}}};tinyMCEPopup.init();
\ No newline at end of file
+var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document,{ownEvents:true,proxy:tinyMCEPopup._eventProxy});b.dom.bind(window,"ready",b._onDOMLoaded,b);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}if(!b.editor.getParam("browser_preferred_colors",false)||!b.isWindow){b.dom.addClass(document.body,"forceColors")}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){b.dom.bind(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){var b=a.target||a.srcElement;if(b.onchange){b.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_eventProxy:function(a){return function(b){tinyMCEPopup.dom.events.callNativeHandler(a,b)}}};tinyMCEPopup.init();
\ No newline at end of file
index c9442c4989dec4eb9522f58a9e2924deb0b06b3e..3bbe9ce95cfc7f9d24cdfa0ad478f7043e816825 100644 (file)
@@ -6,20 +6,18 @@
        var tinymce = {\r
                majorVersion : '3',\r
 \r
-               minorVersion : '5.11',\r
+               minorVersion : '5.8',\r
 \r
-               releaseDate : '2014-05-08',\r
+               releaseDate : '2012-11-20',\r
 \r
                _init : function() {\r
                        var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;\r
 \r
-                       t.isIE11 = ua.indexOf('Trident/') != -1 && (ua.indexOf('rv:') != -1 || na.appName.indexOf('Netscape') != -1);\r
-\r
                        t.isOpera = win.opera && opera.buildNumber;\r
 \r
                        t.isWebKit = /WebKit/.test(ua);\r
 \r
-                       t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName) || t.isIE11;\r
+                       t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);\r
 \r
                        t.isIE6 = t.isIE && /MSIE [56]/.test(ua);\r
 \r
@@ -29,7 +27,7 @@
 \r
                        t.isIE9 = t.isIE && /MSIE [9]/.test(ua);\r
 \r
-                       t.isGecko = !t.isWebKit && !t.isIE11 && /Gecko/.test(ua);\r
+                       t.isGecko = !t.isWebKit && /Gecko/.test(ua);\r
 \r
                        t.isMac = ua.indexOf('Mac') != -1;\r
 \r
@@ -1122,68 +1120,55 @@ tinymce.util.Quirks = function(editor) {
 \r
        function cleanupStylesWhenDeleting() {\r
                function removeMergedFormatSpans(isDelete) {\r
-                       var rng, blockElm, wrapperElm, bookmark, container, offset, elm;\r
-\r
-                       function isAtStartOrEndOfElm() {\r
-                               if (container.nodeType == 3) {\r
-                                       if (isDelete && offset == container.length) {\r
-                                               return true;\r
-                                       }\r
-\r
-                                       if (!isDelete && offset === 0) {\r
-                                               return true;\r
-                                       }\r
-                               }\r
-                       }\r
+                       var rng, blockElm, node, clonedSpan;\r
 \r
                        rng = selection.getRng();\r
-                       var tmpRng = [rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset];\r
 \r
-                       if (!rng.collapsed) {\r
-                               isDelete = true;\r
-                       }\r
+                       // Find root block\r
+                       blockElm = dom.getParent(rng.startContainer, dom.isBlock);\r
 \r
-                       container = rng[(isDelete ? 'start' : 'end') + 'Container'];\r
-                       offset = rng[(isDelete ? 'start' : 'end') + 'Offset'];\r
+                       // On delete clone the root span of the next block element\r
+                       if (isDelete) {\r
+                               blockElm = dom.getNext(blockElm, dom.isBlock);\r
+                       }\r
 \r
-                       if (container.nodeType == 3) {\r
-                               blockElm = dom.getParent(rng.startContainer, dom.isBlock);\r
+                       // Locate root span element and clone it since it would otherwise get merged by the "apple-style-span" on delete/backspace\r
+                       if (blockElm) {\r
+                               node = blockElm.firstChild;\r
 \r
-                               // On delete clone the root span of the next block element\r
-                               if (isDelete) {\r
-                                       blockElm = dom.getNext(blockElm, dom.isBlock);\r
+                               // Ignore empty text nodes\r
+                               while (node && node.nodeType == 3 && node.nodeValue.length === 0) {\r
+                                       node = node.nextSibling;\r
                                }\r
 \r
-                               if (blockElm && (isAtStartOrEndOfElm() || !rng.collapsed)) {\r
-                                       // Wrap children of block in a EM and let WebKit stick is\r
-                                       // runtime styles junk into that EM\r
-                                       wrapperElm = dom.create('em', {'id': '__mceDel'});\r
-\r
-                                       each(tinymce.grep(blockElm.childNodes), function(node) {\r
-                                               wrapperElm.appendChild(node);\r
-                                       });\r
-\r
-                                       blockElm.appendChild(wrapperElm);\r
+                               if (node && node.nodeName === 'SPAN') {\r
+                                       clonedSpan = node.cloneNode(false);\r
                                }\r
                        }\r
 \r
+                       each(dom.select('span', blockElm), function(span) {\r
+                               span.setAttribute('data-mce-mark', '1');\r
+                       });\r
+\r
                        // Do the backspace/delete action\r
-                       rng = dom.createRng();\r
-                       rng.setStart(tmpRng[0], tmpRng[1]);\r
-                       rng.setEnd(tmpRng[2], tmpRng[3]);\r
-                       selection.setRng(rng);\r
                        editor.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);\r
 \r
-                       // Remove temp wrapper element\r
-                       if (wrapperElm) {\r
-                               bookmark = selection.getBookmark();\r
+                       // Find all odd apple-style-spans\r
+                       blockElm = dom.getParent(rng.startContainer, dom.isBlock);\r
+                       each(dom.select('span', blockElm), function(span) {\r
+                               var bm = selection.getBookmark();\r
 \r
-                               while (elm = dom.get('__mceDel')) {\r
-                                       dom.remove(elm, true);\r
+                               if (clonedSpan) {\r
+                                       dom.replace(clonedSpan.cloneNode(false), span, true);\r
+                               } else if (!span.getAttribute('data-mce-mark')) {\r
+                                       dom.remove(span, true);\r
+                               } else {\r
+                                       span.removeAttribute('data-mce-mark');\r
                                }\r
 \r
-                               selection.moveToBookmark(bookmark);\r
-                       }\r
+                               // Restore the selection\r
+                               selection.moveToBookmark(bm);\r
+                       });\r
                }\r
 \r
                editor.onKeyDown.add(function(editor, e) {\r
@@ -1505,12 +1490,6 @@ tinymce.util.Quirks = function(editor) {
                                // Override delete if the start container is a text node and is at the beginning of text or\r
                                // just before/after the last character to be deleted in collapsed mode\r
                                if (container.nodeType == 3 && container.nodeValue.length > 0 && ((offset === 0 && !collapsed) || (collapsed && offset === (isDelete ? 0 : 1)))) {\r
-                                       // Edge case when deleting <p><b><img> |x</b></p>\r
-                                       sibling = container.previousSibling;\r
-                                       if (sibling && sibling.nodeName == "IMG") {\r
-                                               return;\r
-                                       }\r
-\r
                                        nonEmptyElements = editor.schema.getNonEmptyElements();\r
 \r
                                        // Prevent default logic since it's broken\r
@@ -1943,40 +1922,6 @@ tinymce.util.Quirks = function(editor) {
                }\r
        }\r
 \r
-       function bodyHeight() {\r
-               editor.contentStyles.push('body {min-height: 100px}');\r
-               editor.onClick.add(function(ed, e) {\r
-                       if (e.target.nodeName == 'HTML') {\r
-                               editor.execCommand('SelectAll');\r
-                               editor.selection.collapse(true);\r
-                               editor.nodeChanged();\r
-                       }\r
-               });\r
-       }\r
-\r
-       function fixControlSelection() {\r
-               editor.onInit.add(function() {\r
-                       var selectedRng;\r
-\r
-                       editor.getBody().addEventListener('mscontrolselect', function(e) {\r
-                               setTimeout(function() {\r
-                                       if (editor.selection.getNode() != e.target) {\r
-                                               selectedRng = editor.selection.getRng();\r
-                                               selection.fakeRng = editor.dom.createRng();\r
-                                               selection.fakeRng.setStartBefore(e.target);\r
-                                               selection.fakeRng.setEndAfter(e.target);\r
-                                       }\r
-                               }, 0);\r
-                       }, false);\r
-\r
-                       editor.getDoc().addEventListener('selectionchange', function(e) {\r
-                               if (selectedRng && !tinymce.dom.RangeUtils.compareRanges(editor.selection.getRng(), selectedRng)) {\r
-                                       selection.fakeRng = selectedRng = null;\r
-                               }\r
-                       }, false);\r
-               });\r
-       }\r
-\r
        // All browsers\r
        disableBackspaceIntoATable();\r
        removeBlockQuoteOnBackSpace();\r
@@ -2000,7 +1945,7 @@ tinymce.util.Quirks = function(editor) {
        }\r
 \r
        // IE\r
-       if (tinymce.isIE && !tinymce.isIE11) {\r
+       if (tinymce.isIE) {\r
                removeHrOnBackspace();\r
                ensureBodyHasRoleApplication();\r
                addNewLinesBeforeBrInPre();\r
@@ -2010,14 +1955,8 @@ tinymce.util.Quirks = function(editor) {
                keepNoScriptContents();\r
        }\r
 \r
-       // IE 11+\r
-       if (tinymce.isIE11) {\r
-               bodyHeight();\r
-               fixControlSelection();\r
-       }\r
-\r
        // Gecko\r
-       if (tinymce.isGecko && !tinymce.isIE11) {\r
+       if (tinymce.isGecko) {\r
                removeHrOnBackspace();\r
                focusBody();\r
                removeStylesWhenDeletingAccrossBlockElements();\r
@@ -2254,12 +2193,6 @@ tinymce.html.Styles = function(settings, schema) {
                        function compress(prefix, suffix) {\r
                                var top, right, bottom, left;\r
 \r
-                               // IE 11 will produce a border-image: none when getting the style attribute from <p style="border: 1px solid red"></p>\r
-                               // So lets asume it shouldn't be there\r
-                               if (styles['border-image'] === 'none') {\r
-                                       delete styles['border-image'];\r
-                               }\r
-\r
                                // Get values and check it it needs compressing\r
                                top = styles[prefix + '-top' + suffix];\r
                                if (!top)\r
@@ -2782,7 +2715,7 @@ tinymce.html.Styles = function(settings, schema) {
                selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\r
                shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link meta param embed source wbr');\r
                boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls');\r
-               nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object script', shortEndedElementsMap);\r
+               nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object', shortEndedElementsMap);\r
                textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + \r
                                                'blockquote center dir fieldset header footer article section hgroup aside nav figure');\r
                blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + \r
@@ -5303,7 +5236,7 @@ tinymce.dom.TreeWalker = function(start_node, root_node) {
                fixDoc: function(doc) {\r
                        var settings = this.settings, name;\r
 \r
-                       if (isIE && !tinymce.isIE11 && settings.schema) {\r
+                       if (isIE && settings.schema) {\r
                                // Add missing HTML 4/5 elements to IE\r
                                ('abbr article aside audio canvas ' +\r
                                'details figcaption figure footer ' +\r
@@ -5324,7 +5257,7 @@ tinymce.dom.TreeWalker = function(start_node, root_node) {
                        var self = this, clone, doc;\r
 \r
                        // TODO: Add feature detection here in the future\r
-                       if (!isIE || tinymce.isIE11 || node.nodeType !== 1 || deep) {\r
+                       if (!isIE || node.nodeType !== 1 || deep) {\r
                                return node.cloneNode(deep);\r
                        }\r
 \r
@@ -5597,7 +5530,7 @@ tinymce.dom.TreeWalker = function(start_node, root_node) {
                                switch (na) {\r
                                        case 'opacity':\r
                                                // IE specific opacity\r
-                                               if (isIE && ! tinymce.isIE11) {\r
+                                               if (isIE) {\r
                                                        s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")";\r
 \r
                                                        if (!n.currentStyle || !n.currentStyle.hasLayout)\r
@@ -5609,7 +5542,7 @@ tinymce.dom.TreeWalker = function(start_node, root_node) {
                                                break;\r
 \r
                                        case 'float':\r
-                                               (isIE && ! tinymce.isIE11) ? s.styleFloat = v : s.cssFloat = v;\r
+                                               isIE ? s.styleFloat = v : s.cssFloat = v;\r
                                                break;\r
                                        \r
                                        default:\r
@@ -5975,7 +5908,7 @@ tinymce.dom.TreeWalker = function(start_node, root_node) {
                                // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug\r
                                // This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading\r
                                // It's ugly but it seems to work fine.\r
-                               if (isIE && !tinymce.isIE11 && d.documentMode && d.recalc) {\r
+                               if (isIE && d.documentMode && d.recalc) {\r
                                        link.onload = function() {\r
                                                if (d.recalc)\r
                                                        d.recalc();\r
@@ -6294,12 +6227,7 @@ tinymce.dom.TreeWalker = function(start_node, root_node) {
 \r
                                                // Import\r
                                                case 3:\r
-                                                       try {\r
-                                                               addClasses(r.styleSheet);\r
-                                                       } catch (ex) {\r
-                                                               // Ignore\r
-                                                       }\r
-\r
+                                                       addClasses(r.styleSheet);\r
                                                        break;\r
                                        }\r
                                });\r
@@ -9401,7 +9329,7 @@ window.tinymce.dom.Sizzle = Sizzle;
                        if (!t.win.getSelection)\r
                                t.tridentSel = new tinymce.dom.TridentSelection(t);\r
 \r
-                       if (tinymce.isIE && ! tinymce.isIE11 && dom.boxModel)\r
+                       if (tinymce.isIE && dom.boxModel)\r
                                this._fixIESelection();\r
 \r
                        // Prevent leaks\r
@@ -9693,20 +9621,8 @@ window.tinymce.dom.Sizzle = Sizzle;
                        }\r
 \r
                        // Handle simple range\r
-                       if (type) {\r
-                               rng = t.getRng();\r
-\r
-                               if (rng.setStart) {\r
-                                       rng = {\r
-                                               startContainer: rng.startContainer,\r
-                                               startOffset: rng.startOffset,\r
-                                               endContainer: rng.endContainer,\r
-                                               endOffset: rng.endOffset\r
-                                       };\r
-                               }\r
-\r
-                               return {rng : rng};\r
-                       }\r
+                       if (type)\r
+                               return {rng : t.getRng()};\r
 \r
                        rng = t.getRng();\r
                        id = dom.uniqueId();\r
@@ -9772,7 +9688,7 @@ window.tinymce.dom.Sizzle = Sizzle;
                },\r
 \r
                moveToBookmark : function(bookmark) {\r
-                       var t = this, dom = t.dom, marker1, marker2, rng, rng2, root, startContainer, endContainer, startOffset, endOffset;\r
+                       var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset;\r
 \r
                        function setEndPoint(start) {\r
                                var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;\r
@@ -9902,24 +9818,8 @@ window.tinymce.dom.Sizzle = Sizzle;
                                        }\r
                                } else if (bookmark.name) {\r
                                        t.select(dom.select(bookmark.name)[bookmark.index]);\r
-                               } else if (bookmark.rng) {\r
-                                       rng = bookmark.rng;\r
-\r
-                                       if (rng.startContainer) {\r
-                                               rng2 = t.dom.createRng();\r
-\r
-                                               try {\r
-                                                       rng2.setStart(rng.startContainer, rng.startOffset);\r
-                                                       rng2.setEnd(rng.endContainer, rng.endOffset);\r
-                                               } catch (e) {\r
-                                                       // Might fail with index error\r
-                                               }\r
-\r
-                                               rng = rng2;\r
-                                       }\r
-\r
-                                       t.setRng(rng);\r
-                               }\r
+                               } else if (bookmark.rng)\r
+                                       t.setRng(bookmark.rng);\r
                        }\r
                },\r
 \r
@@ -10004,11 +9904,6 @@ window.tinymce.dom.Sizzle = Sizzle;
                getRng : function(w3c) {\r
                        var self = this, selection, rng, elm, doc = self.win.document;\r
 \r
-                       // Workaround for IE 11 not being able to select images properly see #6613 see quirk fix\r
-                       if (self.fakeRng) {\r
-                               return self.fakeRng;\r
-                       }\r
-\r
                        // Found tridentSel object then we need to use that one\r
                        if (w3c && self.tridentSel) {\r
                                return self.tridentSel.getRangeAt(0);\r
@@ -10023,7 +9918,7 @@ window.tinymce.dom.Sizzle = Sizzle;
                        }\r
 \r
                        // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet\r
-                       if (tinymce.isIE && ! tinymce.isIE11 && rng && rng.setStart && doc.selection.createRange().item) {\r
+                       if (tinymce.isIE && rng && rng.setStart && doc.selection.createRange().item) {\r
                                elm = doc.selection.createRange().item(0);\r
                                rng = doc.createRange();\r
                                rng.setStartBefore(elm);\r
@@ -10888,7 +10783,7 @@ window.tinymce.dom.Sizzle = Sizzle;
 \r
                        // Add onload listener for non IE browsers since IE9\r
                        // fires onload event before the script is parsed and executed\r
-                       if (!tinymce.isIE || tinymce.isIE11)\r
+                       if (!tinymce.isIE)\r
                                elm.onload = done;\r
 \r
                        // Add onerror event will get fired on some browsers but not all of them\r
@@ -11301,22 +11196,18 @@ window.tinymce.dom.Sizzle = Sizzle;
                                switch (evt.keyCode) {\r
                                        case DOM_VK_LEFT:\r
                                                if (enableLeftRight) t.moveFocus(-1);\r
-                                               Event.cancel(evt);\r
                                                break;\r
        \r
                                        case DOM_VK_RIGHT:\r
                                                if (enableLeftRight) t.moveFocus(1);\r
-                                               Event.cancel(evt);\r
                                                break;\r
        \r
                                        case DOM_VK_UP:\r
                                                if (enableUpDown) t.moveFocus(-1);\r
-                                               Event.cancel(evt);\r
                                                break;\r
 \r
                                        case DOM_VK_DOWN:\r
                                                if (enableUpDown) t.moveFocus(1);\r
-                                               Event.cancel(evt);\r
                                                break;\r
 \r
                                        case DOM_VK_ESCAPE:\r
@@ -12013,7 +11904,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
                        else\r
                                h += '<span class="mceIcon ' + s['class'] + '"></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '');\r
 \r
-                       h += '<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="' + this.id + '_voice">' + s.title + '</span>';\r
+                       h += '<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="' + this.id + '_voice">' + s.title + '</span>'; \r
                        h += '</a>';\r
                        return h;\r
                },\r
@@ -12038,11 +11929,9 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
                                        return s.onclick.call(s.scope, e);\r
                                }\r
                        });\r
-                       tinymce.dom.Event.add(t.id, 'keydown', function(e) {\r
-                               if (!t.isDisabled() && e.keyCode==tinymce.VK.SPACEBAR) {\r
-                                       tinymce.dom.Event.cancel(e);\r
+                       tinymce.dom.Event.add(t.id, 'keyup', function(e) {\r
+                               if (!t.isDisabled() && e.keyCode==tinymce.VK.SPACEBAR)\r
                                        return s.onclick.call(s.scope, e);\r
-                               }\r
                        });\r
                }\r
        });\r
@@ -12455,7 +12344,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
 \r
                        // Accessibility keyhandler\r
                        Event.add(t.id, 'keydown', function(e) {\r
-                               var bf, DOM_VK_LEFT = 37, DOM_VK_RIGHT = 39, DOM_VK_UP = 38, DOM_VK_DOWN = 40, DOM_VK_RETURN = 13, DOM_VK_SPACE = 32;\r
+                               var bf;\r
 \r
                                Event.remove(t.id, 'change', ch);\r
                                changeListenerAdded = false;\r
@@ -12467,12 +12356,14 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
                                        Event.remove(t.id, 'blur', bf);\r
                                });\r
 \r
-                               if (e.keyCode == DOM_VK_RETURN || e.keyCode == DOM_VK_SPACE) {\r
+                               //prevent default left and right keys on chrome - so that the keyboard navigation is used.\r
+                               if (tinymce.isWebKit && (e.keyCode==37 ||e.keyCode==39)) {\r
+                                       return Event.prevent(e);\r
+                               }\r
+                               \r
+                               if (e.keyCode == 13 || e.keyCode == 32) {\r
                                        onChange(e);\r
                                        return Event.cancel(e);\r
-                               } else if (e.keyCode == DOM_VK_DOWN || e.keyCode == DOM_VK_UP) {\r
-                                       // allow native implementation (navigate select element options)\r
-                                       e.stopImmediatePropagation();\r
                                }\r
                        });\r
 \r
@@ -13361,7 +13252,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
                                        ed.render();\r
 \r
                                        // Fix IE memory leaks\r
-                                       if (tinymce.isIE && ! tinymce.isIE11) {\r
+                                       if (tinymce.isIE) {\r
                                                w.attachEvent('onunload', clr);\r
                                        }\r
 \r
@@ -13759,16 +13650,10 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
                                        // Store away the selection when it's changed to it can be restored later with a editor.focus() call\r
                                        if (isIE) {\r
                                                t.onInit.add(function(ed) {\r
-                                                       ed.dom.bind(ed.getBody(), 'beforedeactivate keydown keyup', function() {\r
-                                                               ed.bookmark = ed.selection.getBookmark(1);\r
+                                                       ed.dom.bind(ed.getBody(), 'beforedeactivate keydown', function() {\r
+                                                               ed.lastIERng = ed.selection.getRng();\r
                                                        });\r
                                                });\r
-\r
-                                               t.onNodeChange.add(function(ed) {\r
-                                                       if (document.activeElement.id == ed.id + "_ifr") {\r
-                                                               ed.bookmark = ed.selection.getBookmark(1);\r
-                                                       }\r
-                                               });\r
                                        }\r
                                }\r
 \r
@@ -14088,9 +13973,8 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
                        var oed, self = this, selection = self.selection, contentEditable = self.settings.content_editable, ieRng, controlElm, doc = self.getDoc(), body;\r
 \r
                        if (!skip_focus) {\r
-                               if (self.bookmark) {\r
-                                       selection.moveToBookmark(self.bookmark);\r
-                                       self.bookmark = null;\r
+                               if (self.lastIERng) {\r
+                                       selection.setRng(self.lastIERng);\r
                                }\r
 \r
                                // Get selected control element\r
@@ -14111,7 +13995,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
                                        body = self.getBody();\r
 \r
                                        // Check for setActive since it doesn't scroll to the element\r
-                                       if (body.setActive && ! tinymce.isIE11) {\r
+                                       if (body.setActive) {\r
                                                body.setActive();\r
                                        } else {\r
                                                body.focus();\r
@@ -16521,11 +16405,7 @@ tinymce.ForceBlocks = function(editor) {
                        getContentEditable = dom.getContentEditable;\r
 \r
                function isTextBlock(name) {\r
-                       if (name.nodeType) {\r
-                               name = name.nodeName;\r
-                       }\r
-\r
-                       return !!ed.schema.getTextBlockElements()[name.toLowerCase()];\r
+                       return !!ed.schema.getTextBlocks()[name.toLowerCase()];\r
                }\r
 \r
                function getParents(node, selector) {\r
@@ -16886,7 +16766,7 @@ tinymce.ForceBlocks = function(editor) {
 \r
                                                // Is it valid to wrap this item\r
                                                if (contentEditable && !hasContentEditableState && isValid(wrapName, nodeName) && isValid(parentName, wrapName) &&\r
-                                                               !(!node_specific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!format.inline || !isBlock(node))) {\r
+                                                               !(!node_specific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node)) {\r
                                                        // Start wrapping\r
                                                        if (!currentWrapElm) {\r
                                                                // Wrap the node\r
@@ -18166,6 +18046,10 @@ tinymce.ForceBlocks = function(editor) {
                        return next;\r
                };\r
 \r
+               function isTextBlock(name) {\r
+                       return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name);\r
+               };\r
+\r
                function getContainer(rng, start) {\r
                        var container, offset, lastIdx, walker;\r
 \r
@@ -18401,23 +18285,11 @@ tinymce.ForceBlocks = function(editor) {
                                        node.appendChild(dom.doc.createTextNode(INVISIBLE_CHAR));\r
                                        node = node.firstChild;\r
 \r
-                                       var block = dom.getParent(formatNode, isTextBlock);\r
-\r
-                                       if (block && dom.isEmpty(block)) {\r
-                                               // Replace formatNode with caretContainer when removing format from empty block like <p><b>|</b></p>\r
-                                               formatNode.parentNode.replaceChild(caretContainer, formatNode);\r
-                                       } else {\r
-                                               // Insert caret container after the formated node\r
-                                               dom.insertAfter(caretContainer, formatNode);\r
-                                       }\r
+                                       // Insert caret container after the formated node\r
+                                       dom.insertAfter(caretContainer, formatNode);\r
 \r
                                        // Move selection to text node\r
                                        selection.setCursorLocation(node, 1);\r
-\r
-                                       // If the formatNode is empty, we can remove it safely. \r
-                                       if (dom.isEmpty(formatNode)) {\r
-                                               dom.remove(formatNode);\r
-                                       }\r
                                }\r
                        };\r
 \r
@@ -18607,7 +18479,7 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
                        function renderBlockOnIE(block) {\r
                                var oldRng;\r
 \r
-                               if (tinymce.isIE && !tinymce.isIE11 && dom.isBlock(block)) {\r
+                               if (tinymce.isIE && dom.isBlock(block)) {\r
                                        oldRng = selection.getRng();\r
                                        block.appendChild(dom.create('span', null, '\u00a0'));\r
                                        selection.select(block);\r
@@ -18742,7 +18614,7 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
                                }\r
 \r
                                // BR is needed in empty blocks on non IE browsers\r
-                               if (!tinymce.isIE || tinymce.isIE11) {\r
+                               if (!tinymce.isIE) {\r
                                        caretNode.innerHTML = '<br data-mce-bogus="1">';\r
                                }\r
 \r
@@ -18904,24 +18776,26 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
                                undoManager.add();\r
                        };\r
 \r
-                       // Walks the parent block to the right and look for any contents\r
-                       function hasRightSideContent() {\r
+                       // Walks the parent block to the right and look for BR elements\r
+                       function hasRightSideBr() {\r
                                var walker = new TreeWalker(container, parentBlock), node;\r
 \r
-                               while (node = walker.next()) {\r
-                                       if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\r
+                               while (node = walker.current()) {\r
+                                       if (node.nodeName == 'BR') {\r
                                                return true;\r
                                        }\r
+\r
+                                       node = walker.next();\r
                                }\r
                        }\r
-\r
+                       \r
                        // Inserts a BR element if the forced_root_block option is set to false or empty string\r
                        function insertBr() {\r
                                var brElm, extraBr, marker;\r
 \r
                                if (container && container.nodeType == 3 && offset >= container.nodeValue.length) {\r
                                        // Insert extra BR element at the end block elements\r
-                                       if ((!tinymce.isIE || tinymce.isIE11) && !hasRightSideContent()) {\r
+                                       if (!tinymce.isIE && !hasRightSideBr()) {\r
                                                brElm = dom.create('br');\r
                                                rng.insertNode(brElm);\r
                                                rng.setStartAfter(brElm);\r
@@ -18934,7 +18808,7 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
                                rng.insertNode(brElm);\r
 \r
                                // Rendering modes below IE8 doesn't display BR elements in PRE unless we have a \n before it\r
-                               if ((tinymce.isIE && !tinymce.isIE11) && parentBlockName == 'PRE' && (!documentMode || documentMode < 8)) {\r
+                               if (tinymce.isIE && parentBlockName == 'PRE' && (!documentMode || documentMode < 8)) {\r
                                        brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'), brElm);\r
                                }\r
 \r
@@ -18988,7 +18862,7 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
                                var lastChild;\r
 \r
                                // IE will render the blocks correctly other browsers needs a BR\r
-                               if (!tinymce.isIE || tinymce.isIE11) {\r
+                               if (!tinymce.isIE) {\r
                                        block.normalize(); // Remove empty text nodes that got left behind by the extract\r
 \r
                                        // Check if the block is empty or contains a floated last child\r