summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunjee Kim <hj0426.kim@samsung.com>2020-04-09 15:44:17 +0900
committerHyunjee Kim <hj0426.kim@samsung.com>2020-04-09 15:44:24 +0900
commitbf8648bd1b8647eef3dccaed2a34c78ba8715d3c (patch)
tree9534cab75c266bca631524359873dfd89daabe02
parent76bf43de2d74e5aa9a052cb82c0eab0f907f729c (diff)
downloadpython3-Cheetah-bf8648bd1b8647eef3dccaed2a34c78ba8715d3c.tar.gz
python3-Cheetah-bf8648bd1b8647eef3dccaed2a34c78ba8715d3c.tar.bz2
python3-Cheetah-bf8648bd1b8647eef3dccaed2a34c78ba8715d3c.zip
Imported Upstream version 3.2.0upstream/3.2.0
Change-Id: I989e6464b6855bab648938a2200c74a66f2e501c Signed-off-by: Hyunjee Kim <hj0426.kim@samsung.com>
-rw-r--r--.travis.yml41
-rw-r--r--ANNOUNCE.rst43
-rw-r--r--Cheetah/CacheRegion.py8
-rw-r--r--Cheetah/CheetahWrapper.py8
-rw-r--r--Cheetah/Compiler.py177
-rw-r--r--Cheetah/ErrorCatchers.py2
-rw-r--r--Cheetah/FileUtils.py4
-rw-r--r--Cheetah/Filters.py2
-rw-r--r--Cheetah/ImportHooks.py35
-rw-r--r--Cheetah/ImportManager.py54
-rw-r--r--Cheetah/LoadTemplate.py56
-rw-r--r--Cheetah/Macros/I18n.py2
-rwxr-xr-xCheetah/NameMapper.py10
-rw-r--r--Cheetah/Parser.py210
-rw-r--r--Cheetah/SettingsManager.py2
-rw-r--r--Cheetah/SourceReader.py24
-rw-r--r--Cheetah/Template.py117
-rw-r--r--Cheetah/TemplateCmdLineIface.py2
-rw-r--r--Cheetah/Templates/_SkeletonPage.py2
-rwxr-xr-xCheetah/Tests/Filters.py2
-rwxr-xr-xCheetah/Tests/ImportHooks.py81
-rw-r--r--Cheetah/Tests/ImportHooksTemplates/index.tmpl5
-rw-r--r--Cheetah/Tests/ImportHooksTemplates/layout.tmpl16
-rwxr-xr-xCheetah/Tests/LoadTemplate.py52
-rwxr-xr-xCheetah/Tests/NameMapper.py6
-rwxr-xr-xCheetah/Tests/NameMapper_pure.py13
-rwxr-xr-xCheetah/Tests/Performance.py2
-rwxr-xr-xCheetah/Tests/Regressions.py2
-rwxr-xr-xCheetah/Tests/SyntaxAndOutput.py32
-rwxr-xr-xCheetah/Tests/Template.py2
-rwxr-xr-xCheetah/Tests/Test.py40
-rwxr-xr-xCheetah/Tests/Unicode.py14
-rw-r--r--Cheetah/Tests/xmlrunner.py4
-rw-r--r--Cheetah/Tools/MondoReport.py6
-rw-r--r--Cheetah/Tools/SiteHierarchy.py12
-rw-r--r--Cheetah/Tools/turbocheetah/cheetahsupport.py2
-rw-r--r--Cheetah/Tools/turbocheetah/tests/test_template.py2
-rw-r--r--Cheetah/Utils/WebInputMixin.py2
-rw-r--r--Cheetah/Utils/statprof.py4
-rw-r--r--Cheetah/Version.py6
-rw-r--r--Cheetah3.egg-info/PKG-INFO23
-rw-r--r--Cheetah3.egg-info/SOURCES.txt276
-rw-r--r--LICENSE2
-rw-r--r--PKG-INFO23
-rw-r--r--README.rst2
-rw-r--r--SetupConfig.py64
-rw-r--r--SetupTools.py17
-rw-r--r--TODO6
-rw-r--r--docs/conf.py10
-rw-r--r--docs/dev_guide/bnf.rst6
-rw-r--r--docs/dev_guide/cache.rst9
-rw-r--r--docs/dev_guide/comments.rst2
-rw-r--r--docs/dev_guide/compiler.rst8
-rw-r--r--docs/dev_guide/design.rst6
-rw-r--r--docs/dev_guide/errorHandling.rst7
-rw-r--r--docs/dev_guide/files.rst11
-rw-r--r--docs/dev_guide/flowControl.rst10
-rw-r--r--docs/dev_guide/history.rst1
-rw-r--r--docs/dev_guide/index.rst5
-rw-r--r--docs/dev_guide/inheritanceEtc.rst9
-rw-r--r--docs/dev_guide/output.rst9
-rw-r--r--docs/dev_guide/parser.rst9
-rw-r--r--docs/dev_guide/parserInstructions.rst3
-rw-r--r--docs/dev_guide/patching.rst3
-rw-r--r--docs/dev_guide/placeholders.rst3
-rw-r--r--docs/dev_guide/pyModules.rst3
-rw-r--r--docs/dev_guide/safeDelegation.rst1
-rw-r--r--docs/dev_guide/template.rst11
-rw-r--r--docs/documentation.rst1
-rw-r--r--docs/download.rst2
-rw-r--r--docs/html/_sources/api/Cheetah.CacheRegion.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.CacheStore.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Compiler.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Django.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.FileUtils.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Filters.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.ImportHooks.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.ImportManager.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Macros.rst.txt15
-rw-r--r--docs/html/_sources/api/Cheetah.NameMapper.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Parser.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Servlet.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.SettingsManager.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.SourceReader.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Template.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Templates.rst.txt15
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Template.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Test.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.rst.txt31
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.rst.txt25
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt22
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt15
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Unspecified.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.rst.txt20
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Version.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.compat.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.rst.txt48
-rw-r--r--docs/html/_sources/api/modules.rst.txt7
-rw-r--r--docs/html/_sources/authors.rst.txt31
-rw-r--r--docs/html/_sources/chep.rst.txt17
-rw-r--r--docs/html/_sources/cheps/1_chep.rst.txt26
-rw-r--r--docs/html/_sources/cheps/2_import.rst.txt122
-rw-r--r--docs/html/_sources/cheps/3_super.rst.txt36
-rw-r--r--docs/html/_sources/dev_guide/bnf.rst.txt6
-rw-r--r--docs/html/_sources/dev_guide/cache.rst.txt404
-rw-r--r--docs/html/_sources/dev_guide/comments.rst.txt103
-rw-r--r--docs/html/_sources/dev_guide/compiler.rst.txt8
-rw-r--r--docs/html/_sources/dev_guide/design.rst.txt104
-rw-r--r--docs/html/_sources/dev_guide/errorHandling.rst.txt329
-rw-r--r--docs/html/_sources/dev_guide/files.rst.txt11
-rw-r--r--docs/html/_sources/dev_guide/flowControl.rst.txt394
-rw-r--r--docs/html/_sources/dev_guide/history.rst.txt88
-rw-r--r--docs/html/_sources/dev_guide/index.rst.txt30
-rw-r--r--docs/html/_sources/dev_guide/inheritanceEtc.rst.txt255
-rw-r--r--docs/html/_sources/dev_guide/introduction.rst.txt28
-rw-r--r--docs/html/_sources/dev_guide/output.rst.txt315
-rw-r--r--docs/html/_sources/dev_guide/parser.rst.txt9
-rw-r--r--docs/html/_sources/dev_guide/parserInstructions.rst.txt67
-rw-r--r--docs/html/_sources/dev_guide/patching.rst.txt149
-rw-r--r--docs/html/_sources/dev_guide/placeholders.rst.txt489
-rw-r--r--docs/html/_sources/dev_guide/pyModules.rst.txt252
-rw-r--r--docs/html/_sources/dev_guide/safeDelegation.rst.txt40
-rw-r--r--docs/html/_sources/dev_guide/template.rst.txt11
-rw-r--r--docs/html/_sources/developers.rst.txt53
-rw-r--r--docs/html/_sources/documentation.rst.txt10
-rw-r--r--docs/html/_sources/download.rst.txt14
-rw-r--r--docs/html/_sources/index.rst.txt89
-rw-r--r--docs/html/_sources/news.rst.txt66
-rw-r--r--docs/html/_sources/news2.rst.txt1701
-rw-r--r--docs/html/_sources/recipes/inheritance.rst.txt62
-rw-r--r--docs/html/_sources/recipes/precompiled.rst.txt59
-rw-r--r--docs/html/_sources/recipes/staticmethod.rst.txt54
-rw-r--r--docs/html/_sources/recipes/writing_a_recipe.rst.txt4
-rw-r--r--docs/html/_sources/roadmap.rst.txt14
-rw-r--r--docs/html/_sources/users_guide/comments.rst.txt101
-rw-r--r--docs/html/_sources/users_guide/comparisons.rst.txt515
-rw-r--r--docs/html/_sources/users_guide/editors.rst.txt37
-rw-r--r--docs/html/_sources/users_guide/errorHandling.rst.txt144
-rw-r--r--docs/html/_sources/users_guide/examples.rst.txt27
-rw-r--r--docs/html/_sources/users_guide/flowControl.rst.txt436
-rw-r--r--docs/html/_sources/users_guide/gettingStarted.rst.txt284
-rw-r--r--docs/html/_sources/users_guide/glossary.rst.txt99
-rw-r--r--docs/html/_sources/users_guide/index.rst.txt28
-rw-r--r--docs/html/_sources/users_guide/inheritanceEtc.rst.txt517
-rw-r--r--docs/html/_sources/users_guide/intro.rst.txt311
-rw-r--r--docs/html/_sources/users_guide/language.rst.txt741
-rw-r--r--docs/html/_sources/users_guide/libraries.rst.txt315
-rw-r--r--docs/html/_sources/users_guide/links.rst.txt120
-rw-r--r--docs/html/_sources/users_guide/nonHtml.rst.txt16
-rw-r--r--docs/html/_sources/users_guide/otherHtml.rst.txt101
-rw-r--r--docs/html/_sources/users_guide/output.rst.txt468
-rw-r--r--docs/html/_sources/users_guide/parserInstructions.rst.txt129
-rw-r--r--docs/html/_sources/users_guide/tipsAndTricks.rst.txt586
-rw-r--r--docs/html/_sources/users_guide/webware.rst.txt598
-rw-r--r--docs/html/_static/ajax-loader.gifbin673 -> 0 bytes
-rw-r--r--docs/html/_static/basic.css643
-rw-r--r--docs/html/_static/comment-bright.pngbin756 -> 0 bytes
-rw-r--r--docs/html/_static/comment-close.pngbin829 -> 0 bytes
-rw-r--r--docs/html/_static/comment.pngbin641 -> 0 bytes
-rw-r--r--docs/html/_static/contents.pngbin107 -> 0 bytes
-rw-r--r--docs/html/_static/doctools.js311
-rw-r--r--docs/html/_static/down-pressed.pngbin222 -> 0 bytes
-rw-r--r--docs/html/_static/down.pngbin202 -> 0 bytes
-rw-r--r--docs/html/_static/file.pngbin286 -> 0 bytes
-rw-r--r--docs/html/_static/jquery-3.1.0.js10074
-rw-r--r--docs/html/_static/jquery.js4
-rw-r--r--docs/html/_static/minus.pngbin90 -> 0 bytes
-rw-r--r--docs/html/_static/navigation.pngbin120 -> 0 bytes
-rw-r--r--docs/html/_static/plus.pngbin90 -> 0 bytes
-rw-r--r--docs/html/_static/pygments.css69
-rw-r--r--docs/html/_static/searchtools.js761
-rw-r--r--docs/html/_static/sphinxdoc.css345
-rw-r--r--docs/html/_static/underscore-1.3.1.js999
-rw-r--r--docs/html/_static/underscore.js31
-rw-r--r--docs/html/_static/up-pressed.pngbin214 -> 0 bytes
-rw-r--r--docs/html/_static/up.pngbin203 -> 0 bytes
-rw-r--r--docs/html/_static/websupport.js808
-rw-r--r--docs/html/api/Cheetah.CacheRegion.html200
-rw-r--r--docs/html/api/Cheetah.CacheStore.html224
-rw-r--r--docs/html/api/Cheetah.CheetahWrapper.html202
-rw-r--r--docs/html/api/Cheetah.Compiler.html918
-rw-r--r--docs/html/api/Cheetah.DirectiveAnalyzer.html138
-rw-r--r--docs/html/api/Cheetah.Django.html105
-rw-r--r--docs/html/api/Cheetah.DummyTransaction.html183
-rw-r--r--docs/html/api/Cheetah.ErrorCatchers.html162
-rw-r--r--docs/html/api/Cheetah.FileUtils.html192
-rw-r--r--docs/html/api/Cheetah.Filters.html240
-rw-r--r--docs/html/api/Cheetah.ImportHooks.html135
-rw-r--r--docs/html/api/Cheetah.ImportManager.html254
-rw-r--r--docs/html/api/Cheetah.Macros.I18n.html101
-rw-r--r--docs/html/api/Cheetah.Macros.html111
-rw-r--r--docs/html/api/Cheetah.NameMapper.html268
-rw-r--r--docs/html/api/Cheetah.Parser.html218
-rw-r--r--docs/html/api/Cheetah.Servlet.html143
-rw-r--r--docs/html/api/Cheetah.SettingsManager.html212
-rw-r--r--docs/html/api/Cheetah.SourceReader.html301
-rw-r--r--docs/html/api/Cheetah.Template.html816
-rw-r--r--docs/html/api/Cheetah.TemplateCmdLineIface.html118
-rw-r--r--docs/html/api/Cheetah.Templates.SkeletonPage.html117
-rw-r--r--docs/html/api/Cheetah.Templates.html111
-rw-r--r--docs/html/api/Cheetah.Tests.Analyzer.html111
-rw-r--r--docs/html/api/Cheetah.Tests.Boinker.html106
-rw-r--r--docs/html/api/Cheetah.Tests.CheetahWrapper.html638
-rw-r--r--docs/html/api/Cheetah.Tests.Cheps.html119
-rw-r--r--docs/html/api/Cheetah.Tests.Filters.html124
-rw-r--r--docs/html/api/Cheetah.Tests.Misc.html106
-rw-r--r--docs/html/api/Cheetah.Tests.NameMapper.html668
-rw-r--r--docs/html/api/Cheetah.Tests.NameMapper_pure.html116
-rw-r--r--docs/html/api/Cheetah.Tests.Parser.html127
-rw-r--r--docs/html/api/Cheetah.Tests.Performance.html250
-rw-r--r--docs/html/api/Cheetah.Tests.Pinger.html106
-rw-r--r--docs/html/api/Cheetah.Tests.Regressions.html228
-rw-r--r--docs/html/api/Cheetah.Tests.SyntaxAndOutput.html3020
-rw-r--r--docs/html/api/Cheetah.Tests.Template.html249
-rw-r--r--docs/html/api/Cheetah.Tests.Test.html112
-rw-r--r--docs/html/api/Cheetah.Tests.Unicode.html261
-rw-r--r--docs/html/api/Cheetah.Tests.html130
-rw-r--r--docs/html/api/Cheetah.Tests.xmlrunner.html235
-rw-r--r--docs/html/api/Cheetah.Tools.CGITemplate.html158
-rw-r--r--docs/html/api/Cheetah.Tools.MondoReport.html405
-rw-r--r--docs/html/api/Cheetah.Tools.RecursiveNull.html105
-rw-r--r--docs/html/api/Cheetah.Tools.SiteHierarchy.html148
-rw-r--r--docs/html/api/Cheetah.Tools.html144
-rw-r--r--docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html133
-rw-r--r--docs/html/api/Cheetah.Tools.turbocheetah.html163
-rw-r--r--docs/html/api/Cheetah.Tools.turbocheetah.tests.html111
-rw-r--r--docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html115
-rw-r--r--docs/html/api/Cheetah.Unspecified.html95
-rw-r--r--docs/html/api/Cheetah.Utils.Indenter.html269
-rw-r--r--docs/html/api/Cheetah.Utils.Misc.html138
-rw-r--r--docs/html/api/Cheetah.Utils.WebInputMixin.html103
-rw-r--r--docs/html/api/Cheetah.Utils.html116
-rw-r--r--docs/html/api/Cheetah.Utils.htmlDecode.html104
-rw-r--r--docs/html/api/Cheetah.Utils.htmlEncode.html104
-rw-r--r--docs/html/api/Cheetah.Utils.statprof.html95
-rw-r--r--docs/html/api/Cheetah.Version.html100
-rw-r--r--docs/html/api/Cheetah.compat.html95
-rw-r--r--docs/html/api/Cheetah.convertTmplPathToModuleName.html100
-rw-r--r--docs/html/api/Cheetah.html246
-rw-r--r--docs/html/api/modules.html158
-rw-r--r--docs/html/authors.html143
-rw-r--r--docs/html/chep.html137
-rw-r--r--docs/html/cheps/1_chep.html161
-rw-r--r--docs/html/cheps/2_import.html254
-rw-r--r--docs/html/cheps/3_super.html166
-rw-r--r--docs/html/dev_guide/bnf.html118
-rw-r--r--docs/html/dev_guide/cache.html451
-rw-r--r--docs/html/dev_guide/comments.html203
-rw-r--r--docs/html/dev_guide/compiler.html119
-rw-r--r--docs/html/dev_guide/design.html214
-rw-r--r--docs/html/dev_guide/errorHandling.html415
-rw-r--r--docs/html/dev_guide/files.html122
-rw-r--r--docs/html/dev_guide/flowControl.html455
-rw-r--r--docs/html/dev_guide/history.html193
-rw-r--r--docs/html/dev_guide/index.html150
-rw-r--r--docs/html/dev_guide/inheritanceEtc.html327
-rw-r--r--docs/html/dev_guide/introduction.html147
-rw-r--r--docs/html/dev_guide/output.html375
-rw-r--r--docs/html/dev_guide/parser.html120
-rw-r--r--docs/html/dev_guide/parserInstructions.html172
-rw-r--r--docs/html/dev_guide/patching.html243
-rw-r--r--docs/html/dev_guide/placeholders.html582
-rw-r--r--docs/html/dev_guide/pyModules.html346
-rw-r--r--docs/html/dev_guide/safeDelegation.html145
-rw-r--r--docs/html/dev_guide/template.html121
-rw-r--r--docs/html/developers.html167
-rw-r--r--docs/html/documentation.html132
-rw-r--r--docs/html/download.html123
-rw-r--r--docs/html/genindex.html3373
-rw-r--r--docs/html/index.html246
-rw-r--r--docs/html/news.html203
-rw-r--r--docs/html/news2.html2150
-rw-r--r--docs/html/py-modindex.html406
-rw-r--r--docs/html/recipes/inheritance.html179
-rw-r--r--docs/html/recipes/precompiled.html180
-rw-r--r--docs/html/recipes/staticmethod.html163
-rw-r--r--docs/html/recipes/writing_a_recipe.html118
-rw-r--r--docs/html/roadmap.html133
-rw-r--r--docs/html/search.html105
-rw-r--r--docs/html/searchindex.js1
-rw-r--r--docs/html/users_guide/comments.html208
-rw-r--r--docs/html/users_guide/comparisons.html573
-rw-r--r--docs/html/users_guide/editors.html145
-rw-r--r--docs/html/users_guide/errorHandling.html245
-rw-r--r--docs/html/users_guide/examples.html145
-rw-r--r--docs/html/users_guide/flowControl.html480
-rw-r--r--docs/html/users_guide/gettingStarted.html357
-rw-r--r--docs/html/users_guide/glossary.html197
-rw-r--r--docs/html/users_guide/index.html272
-rw-r--r--docs/html/users_guide/inheritanceEtc.html550
-rw-r--r--docs/html/users_guide/intro.html402
-rw-r--r--docs/html/users_guide/language.html713
-rw-r--r--docs/html/users_guide/libraries.html397
-rw-r--r--docs/html/users_guide/links.html281
-rw-r--r--docs/html/users_guide/nonHtml.html133
-rw-r--r--docs/html/users_guide/otherHtml.html205
-rw-r--r--docs/html/users_guide/output.html501
-rw-r--r--docs/html/users_guide/parserInstructions.html219
-rw-r--r--docs/html/users_guide/tipsAndTricks.html598
-rw-r--r--docs/html/users_guide/webware.html667
-rw-r--r--docs/news.rst41
-rw-r--r--docs/recipes/writing_a_recipe.rst4
-rw-r--r--docs/roadmap.rst7
-rw-r--r--docs/users_guide/comments.rst2
-rw-r--r--docs/users_guide/comparisons.rst9
-rw-r--r--docs/users_guide/editors.rst1
-rw-r--r--docs/users_guide/errorHandling.rst3
-rw-r--r--docs/users_guide/examples.rst1
-rw-r--r--docs/users_guide/flowControl.rst10
-rw-r--r--docs/users_guide/gettingStarted.rst8
-rw-r--r--docs/users_guide/inheritanceEtc.rst9
-rw-r--r--docs/users_guide/language.rst12
-rw-r--r--docs/users_guide/libraries.rst9
-rw-r--r--docs/users_guide/links.rst9
-rw-r--r--docs/users_guide/nonHtml.rst2
-rw-r--r--docs/users_guide/otherHtml.rst3
-rw-r--r--docs/users_guide/output.rst12
-rw-r--r--docs/users_guide/parserInstructions.rst3
-rw-r--r--docs/users_guide/tipsAndTricks.rst59
-rw-r--r--docs/users_guide/webware.rst13
-rw-r--r--setup.cfg8
-rw-r--r--tox.ini16
357 files changed, 903 insertions, 62854 deletions
diff --git a/.travis.yml b/.travis.yml
index 64d6b43..e68e027 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,12 +1,6 @@
-# Config file for automatic testing at travis-ci.org
+os: linux
-# Only test maint, master and pull requests; skip tags.
-# Other branches can allow themselves.
-branches:
- only:
- - maint
- - master
- - next
+dist: xenial
# Prefer docker containers
sudo: required
@@ -14,36 +8,53 @@ sudo: required
language: python
python:
- - "2.7"
+ - "3.7"
cache: pip
+addons:
+ apt:
+ packages:
+ - patchelf
+
+env:
+ global:
+ - TWINE_USERNAME=phd
+ # Note: TWINE_PASSWORD is set in Travis settings.
+ #- TWINE_REPOSITORY_URL=https://test.pypi.org/legacy/
+
matrix:
include:
- python: "2.7"
env: TOXENV=py27
- - python: "3.3"
- env: TOXENV=py33
- python: "3.4"
env: TOXENV=py34
- python: "3.5"
env: TOXENV=py35
- python: "3.6"
env: TOXENV=py36
+ - python: "3.7"
+ env: TOXENV=py37
- python: "2.7"
env: TOXENV=py27-flake8
- - python: "3.4"
- env: TOXENV=py34-flake8
- - python: "pypy"
+ - python: "3.7"
+ env: TOXENV=py37-flake8
+ - python: "pypy2.7-6.0"
env: TOXENV=pypy
fast_finish: true
install:
- - travis_retry pip install --upgrade pip setuptools tox ppu
+ - travis_retry pip install --upgrade "pip < 19.1" setuptools tox ppu
script:
- tox
before_cache:
- remove-old-files.py -o 180 ~/.cache/pip
+
+deploy:
+ provider: script
+ script: devscripts/CI/travisci-release
+ on:
+ tags: true
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index 889c00d..655cdb2 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -1,31 +1,48 @@
Hello!
-I'm pleased to announce version 3.1.0, the first stable release of branch
-3.1 of CheetahTemplate3.
+I'm pleased to announce version 3.2.0, the first stable release of branch
+3.2 of CheetahTemplate3.
What's new in CheetahTemplate3
==============================
-Contributors for this release is Mathias Stearn.
-
Features:
- - Fix Cheetah to work with PyPy. Pull request by Mathias Stearn.
+ - Dropped support for Python 3.3.
+ - Implement LoadTemplate.loadTemplate{Module,Class} to load templates
+ from .py[co], .py or .tmpl.
+ - CheetahDirOwner caches compiled template in the template directory.
+ - CheetahDirOwner now silently ignores errors on compiled templates
+ writing. To get tracebacks set CheetahDirOwner.debuglevel = 1.
+ - CheetahDirOwner and DirOwner byte-compile compiled templates
+ to .pyc/.pyo. Errors on writing are silently ignored.
Minor features:
- - Code cleanup: fix code style to satisfy flake8 linter.
+ - Implement Compiler.__unicode__ under Python 2 and Compiler.__bytes__
+ under Python 3.
+
+Bug fixes:
+
+ - Fix a bug in Compiler.__str__: under Python 2 the method now always
+ returns str; it encodes unicode to str using encoding from the
+ compiled source. Under Python 3 the method decodes bytes to str.
+
+Code:
+
+ - Source code was made flake8-clean using the latest flake8.
Documentation:
- - Rename www directory to docs.
+ - Remove outdated section markers.
+ - Better documentation for ImportHooks.
+ - Add an example of a universal makefile.
-Tests:
+CI:
- - Run pypy tests at AppVeyor.
- - Use remove-old-files.py from ppu to cleanup pip cache
- at Travis and AppVeyor.
+ - Run tests with Python 3.7.
+ - At travis deploy sdists and wheels for tags.
What is CheetahTemplate3
@@ -34,7 +51,7 @@ What is CheetahTemplate3
Cheetah3 is a free and open source template engine.
It's a fork of the original CheetahTemplate library.
-Python 2.7 or 3.3+ is required.
+Python 2.7 or 3.4+ is required.
Where is CheetahTemplate3
@@ -47,7 +64,7 @@ Development:
https://github.com/CheetahTemplate3
Download:
-https://pypi.python.org/pypi/Cheetah3/3.1.0
+https://pypi.org/project/Cheetah3/3.2.0/
News and changes:
http://cheetahtemplate.org/news.html
diff --git a/Cheetah/CacheRegion.py b/Cheetah/CacheRegion.py
index 130fa50..230e8ba 100644
--- a/Cheetah/CacheRegion.py
+++ b/Cheetah/CacheRegion.py
@@ -78,13 +78,13 @@ class _CacheDataStoreWrapper(object):
self._keyPrefix = keyPrefix
def get(self, key):
- return self._dataStore.get(self._keyPrefix+key)
+ return self._dataStore.get(self._keyPrefix + key)
def delete(self, key):
- self._dataStore.delete(self._keyPrefix+key)
+ self._dataStore.delete(self._keyPrefix + key)
def set(self, key, val, time=0):
- self._dataStore.set(self._keyPrefix+key, val, time=time)
+ self._dataStore.set(self._keyPrefix + key, val, time=time)
class CacheRegion(object):
@@ -108,7 +108,7 @@ class CacheRegion(object):
cacheStore = Cheetah.CacheStore.MemoryCacheStore()
self._cacheStore = cacheStore
self._wrappedCacheDataStore = _CacheDataStoreWrapper(
- cacheStore, keyPrefix=templateCacheIdPrefix+':'+regionID+':')
+ cacheStore, keyPrefix=templateCacheIdPrefix + ':' + regionID + ':')
self._cacheItems = {}
def isNew(self):
diff --git a/Cheetah/CheetahWrapper.py b/Cheetah/CheetahWrapper.py
index fcfa7a5..c43e31c 100644
--- a/Cheetah/CheetahWrapper.py
+++ b/Cheetah/CheetahWrapper.py
@@ -457,8 +457,8 @@ you do have write permission to and re-run the tests.""")
raise Error("source file '%s' is a directory" % path)
elif os.path.isfile(path):
files.append(path)
- elif (addIextIfMissing and not path.endswith(iext) and
- os.path.isfile(pathWithExt)):
+ elif (addIextIfMissing and not path.endswith(iext)
+ and os.path.isfile(pathWithExt)):
files.append(pathWithExt)
# Do not recurse directories discovered by iext appending.
elif os.path.exists(path):
@@ -531,8 +531,8 @@ you do have write permission to and re-run the tests.""")
if p >= 0:
mod = getattr(
- __import__(modname[:p], {}, {}, [modname[p+1:]]),
- modname[p+1:])
+ __import__(modname[:p], {}, {}, [modname[p+1:]]), # noqa: E226,E501 missing whitespace around operator
+ modname[p+1:]) # noqa: E226 missing whitespace around operator
else:
mod = __import__(modname, {}, {}, [])
diff --git a/Cheetah/Compiler.py b/Cheetah/Compiler.py
index 3160764..1305571 100644
--- a/Cheetah/Compiler.py
+++ b/Cheetah/Compiler.py
@@ -24,9 +24,9 @@ from Cheetah.SettingsManager import SettingsManager
from Cheetah.Utils.Indenter import indentize # an undocumented preprocessor
from Cheetah import NameMapper
from Cheetah.Parser import Parser, ParseError, specialVarRE, \
- STATIC_CACHE, REFRESH_CACHE, SET_GLOBAL, SET_MODULE, \
- unicodeDirectiveRE, encodingDirectiveRE, escapedNewlineRE
-from Cheetah.compat import string_type, unicode
+ STATIC_CACHE, REFRESH_CACHE, SET_GLOBAL, SET_MODULE, \
+ unicodeDirectiveRE, encodingDirectiveRE, escapedNewlineRE
+from Cheetah.compat import PY2, string_type, unicode
from Cheetah.NameMapper import valueForName, valueFromSearchList, \
valueFromFrameOrSearchList
@@ -147,15 +147,15 @@ class GenUtils(object):
if timeString[-1] == 's':
interval = float(timeString[:-1])
elif timeString[-1] == 'm':
- interval = float(timeString[:-1])*60
+ interval = float(timeString[:-1])*60 # noqa: E226,E501 missing whitespace around operator
elif timeString[-1] == 'h':
- interval = float(timeString[:-1])*60*60
+ interval = float(timeString[:-1])*60*60 # noqa: E226,E501 missing whitespace around operator
elif timeString[-1] == 'd':
- interval = float(timeString[:-1])*60*60*24
+ interval = float(timeString[:-1])*60*60*24 # noqa: E226,E501 missing whitespace around operator
elif timeString[-1] == 'w':
- interval = float(timeString[:-1])*60*60*24*7
+ interval = float(timeString[:-1])*60*60*24*7 # noqa: E226,E501 missing whitespace around operator
else: # default to minutes
- interval = float(timeString)*60
+ interval = float(timeString)*60 # noqa: E226,E501 missing whitespace around operator
return interval
def genCacheInfo(self, cacheTokenParts):
@@ -293,13 +293,13 @@ class GenUtils(object):
firstDotIdx = name.find('.')
if firstDotIdx != -1 and firstDotIdx < len(name):
beforeFirstDot = name[:firstDotIdx]
- afterDot = name[firstDotIdx+1:]
- pythonCode = ('VFN(' + beforeFirstDot +
- ',"' + afterDot +
- '",' + repr(defaultUseAC and useAC) + ')'
+ afterDot = name[firstDotIdx+1:] # noqa: E226,E501 missing whitespace around operator
+ pythonCode = ('VFN(' + beforeFirstDot
+ + ',"' + afterDot
+ + '",' + repr(defaultUseAC and useAC) + ')'
+ remainder)
else:
- pythonCode = name+remainder
+ pythonCode = name + remainder
elif self.setting('useStackFrames'):
pythonCode = ('VFFSL(SL,'
'"' + name + '",'
@@ -313,9 +313,9 @@ class GenUtils(object):
##
while nameChunks:
name, useAC, remainder = nameChunks.pop()
- pythonCode = ('VFN(' + pythonCode +
- ',"' + name +
- '",' + repr(defaultUseAC and useAC) + ')'
+ pythonCode = ('VFN(' + pythonCode
+ + ',"' + name
+ + '",' + repr(defaultUseAC and useAC) + ')'
+ remainder)
return pythonCode
@@ -417,11 +417,10 @@ class MethodCompiler(GenUtils):
if not self._docStringLines:
return ''
- ind = self._indent*2
- docStr = (ind + '"""\n' + ind +
- ('\n' + ind).join(
- [ln.replace('"""', "'''")
- for ln in self._docStringLines])
+ ind = self._indent*2 # noqa: E226 missing whitespace around operator
+ docStr = (ind + '"""\n' + ind
+ + ('\n' + ind).join([ln.replace('"""', "'''")
+ for ln in self._docStringLines])
+ '\n' + ind + '"""\n')
return docStr
@@ -491,7 +490,7 @@ class MethodCompiler(GenUtils):
if reprstr.startswith('u'):
i = 1
out = ['u']
- body = escapedNewlineRE.sub('\\1\n', reprstr[i+1:-1])
+ body = escapedNewlineRE.sub('\\1\n', reprstr[i+1:-1]) # noqa: E226,E501 missing whitespace around operator
if reprstr[i] == "'":
out.append("'''")
@@ -508,7 +507,7 @@ class MethodCompiler(GenUtils):
"""
if self._pendingStrConstChunks:
src = self._pendingStrConstChunks[-1]
- BOL = max(src.rfind('\n')+1, src.rfind('\r')+1, 0)
+ BOL = max(src.rfind('\n') + 1, src.rfind('\r') + 1, 0)
if BOL < len(src):
self._pendingStrConstChunks[-1] = src[:BOL]
@@ -530,7 +529,7 @@ class MethodCompiler(GenUtils):
def addMethComment(self, comm):
offSet = self.setting('commentOffset')
- self.addChunk('#' + ' '*offSet + comm)
+ self.addChunk('#' + ' '*offSet + comm) # noqa: E226,E501 missing whitespace around operator
def addPlaceholder(self, expr, filterArgs, rawPlaceholder,
cacheTokenParts, lineCol,
@@ -599,10 +598,10 @@ class MethodCompiler(GenUtils):
self.addChunk(expr)
def addInclude(self, sourceExpr, includeFrom, isRaw):
- self.addChunk('self._handleCheetahInclude(' + sourceExpr +
- ', trans=trans, ' +
- 'includeFrom="' + includeFrom + '", raw=' +
- repr(isRaw) + ')')
+ self.addChunk('self._handleCheetahInclude(' + sourceExpr
+ + ', trans=trans, '
+ + 'includeFrom="' + includeFrom + '", raw='
+ + repr(isRaw) + ')')
def addWhile(self, expr, lineCol=None):
self.addIndentingDirective(expr, lineCol=lineCol)
@@ -680,7 +679,7 @@ class MethodCompiler(GenUtils):
signature = \
"def " + functionName + "(" + ','.join(argStringChunks) + "):"
self.addIndentingDirective(signature)
- self.addChunk('#'+parserComment)
+ self.addChunk('#' + parserComment)
def addTry(self, expr, lineCol=None):
self.addIndentingDirective(expr, lineCol=lineCol)
@@ -757,7 +756,7 @@ class MethodCompiler(GenUtils):
self.indent()
def nextCacheID(self):
- return ('_'+str(random.randrange(100, 999))
+ return ('_' + str(random.randrange(100, 999))
+ str(random.randrange(10000, 99999)))
def startCacheRegion(self, cacheInfo, lineCol, rawPlaceholder=None):
@@ -852,7 +851,7 @@ class MethodCompiler(GenUtils):
self.addChunk('del _cacheCollector_%(ID)s' % locals())
self.addChunk('del _orig_trans%(ID)s' % locals())
self.dedent()
- self.addChunk('## END CACHE REGION: '+ID)
+ self.addChunk('## END CACHE REGION: ' + ID)
self.addChunk('')
def nextCallRegionID(self):
@@ -925,14 +924,14 @@ class MethodCompiler(GenUtils):
'_callCollector%(ID)s.response().getvalue()' % locals())
self.addChunk('del _callCollector%(ID)s' % locals())
if initialKwArgs:
- initialKwArgs = ', '+initialKwArgs
+ initialKwArgs = ', ' + initialKwArgs
self.addFilteredChunk(
'%(functionName)s(_callArgVal%(ID)s%(initialKwArgs)s)'
% locals())
self.addChunk('del _callArgVal%(ID)s' % locals())
else:
if initialKwArgs:
- initialKwArgs = initialKwArgs+', '
+ initialKwArgs = initialKwArgs + ', '
self._endCallArg()
reset()
self.addFilteredChunk(
@@ -990,8 +989,8 @@ class MethodCompiler(GenUtils):
'if "' + errorCatcherName + '" in self._CHEETAH__errorCatchers:')
self.indent()
self.addChunk(
- 'self._CHEETAH__errorCatcher = self._CHEETAH__errorCatchers["' +
- errorCatcherName + '"]')
+ 'self._CHEETAH__errorCatcher = self._CHEETAH__errorCatchers["'
+ + errorCatcherName + '"]')
self.dedent()
self.addChunk('else:')
self.indent()
@@ -999,7 +998,7 @@ class MethodCompiler(GenUtils):
'self._CHEETAH__errorCatcher = self._CHEETAH__errorCatchers["'
+ errorCatcherName + '"] = ErrorCatchers.'
+ errorCatcherName + '(self)'
- )
+ )
self.dedent()
def nextFilterRegionID(self):
@@ -1163,13 +1162,13 @@ class AutoMethodCompiler(MethodCompiler):
else:
self.addChunk('_filter = self._CHEETAH__currentFilter')
self.addChunk('')
- self.addChunk("#"*40)
+ self.addChunk("#"*40) # noqa: E226 missing whitespace around operator
self.addChunk('## START - generated method body')
self.addChunk('')
def _addAutoCleanupCode(self):
self.addChunk('')
- self.addChunk("#"*40)
+ self.addChunk("#"*40) # noqa: E226 missing whitespace around operator
self.addChunk('## END - generated method body')
self.addChunk('')
@@ -1203,8 +1202,8 @@ class AutoMethodCompiler(MethodCompiler):
output.append(''.join([self._indent + decorator + '\n'
for decorator in self._decorators]))
output.append(self._indent + "def "
- + self.methodName() + "(" +
- argString + "):\n\n")
+ + self.methodName() + "("
+ + argString + "):\n\n")
return ''.join(output)
@@ -1218,7 +1217,7 @@ if not self._CHEETAH__instanceInitialized:
for k,v in KWs.items():
if k in allowedKWs: cheetahKWArgs[k] = v
self._initCheetahInstance(**cheetahKWArgs)
-""".replace('\n', '\n'+' '*8)
+""".replace('\n', '\n' + ' '*8) # noqa: E226,E501 missing whitespace around operator
class ClassCompiler(GenUtils):
@@ -1293,7 +1292,7 @@ class ClassCompiler(GenUtils):
if self.setting('templateMetaclass'):
self._generatedAttribs.append(
- '__metaclass__ = '+self.setting('templateMetaclass'))
+ '__metaclass__ = ' + self.setting('templateMetaclass'))
self._initMethChunks = []
self._blockMetaData = {}
self._errorCatcherCount = 0
@@ -1308,8 +1307,9 @@ class ClassCompiler(GenUtils):
if self.setting('setup__str__method'):
self._generatedAttribs.append(
'def __str__(self): return self.respond()')
- self.addAttribute('_mainCheetahMethod_for_' + self._className +
- ' = ' + repr(self._mainMethodName))
+ self.addAttribute(
+ '_mainCheetahMethod_for_' + self._className
+ + ' = ' + repr(self._mainMethodName))
def _setupInitMethod(self):
__init__ = self._spawnMethodCompiler(
@@ -1332,8 +1332,9 @@ class ClassCompiler(GenUtils):
# the rest is added to the main output method of the class
# ('mainMethod')
- self.addChunk('if exists(self._filePath) and ' +
- 'getmtime(self._filePath) > self._fileMtime:')
+ self.addChunk(
+ 'if exists(self._filePath) and '
+ + 'getmtime(self._filePath) > self._fileMtime:')
self.indent()
self.addChunk(
'self._compile(file=self._filePath, moduleName='
@@ -1437,9 +1438,10 @@ class ClassCompiler(GenUtils):
# any fancy Cheetah syntax (placeholders, directives, etc.)
# inside the expression
if attribExpr.find('VFN(') != -1 or attribExpr.find('VFFSL(') != -1:
- raise ParseError(self,
- 'Invalid #attr directive.' +
- ' It should only contain simple Python literals.')
+ raise ParseError(
+ self,
+ 'Invalid #attr directive. It should only contain '
+ + 'simple Python literals.')
# now add the attribute
self._generatedAttribs.append(attribExpr)
@@ -1474,24 +1476,25 @@ class ClassCompiler(GenUtils):
catcherMeth = self._spawnMethodCompiler(
methodName,
klass=MethodCompiler,
- initialMethodComment=('## CHEETAH: Generated from ' + rawCode +
- ' at line %s, col %s' % lineCol + '.')
- )
+ initialMethodComment=(
+ '## CHEETAH: Generated from ' + rawCode
+ + ' at line %s, col %s' % lineCol + '.')
+ )
catcherMeth.setMethodSignature(
- 'def ' + methodName +
- '(self, localsDict={})') # is this use of localsDict right?
+ 'def ' + methodName
+ + '(self, localsDict={})') # is this use of localsDict right?
catcherMeth.addChunk('try:')
catcherMeth.indent()
- catcherMeth.addChunk("return eval('''" + codeChunk +
- "''', globals(), localsDict)")
+ catcherMeth.addChunk(
+ "return eval('''" + codeChunk + "''', globals(), localsDict)")
catcherMeth.dedent()
catcherMeth.addChunk(
'except self._CHEETAH__errorCatcher.exceptions() as e:')
catcherMeth.indent()
catcherMeth.addChunk(
- "return self._CHEETAH__errorCatcher.warn(exc_val=e, code= " +
- repr(codeChunk) + " , rawCode= " +
- repr(rawCode) + " , lineCol=" + str(lineCol) + ")")
+ "return self._CHEETAH__errorCatcher.warn(exc_val=e, code= "
+ + repr(codeChunk) + " , rawCode= "
+ + repr(rawCode) + " , lineCol=" + str(lineCol) + ")")
catcherMeth.cleanupState()
@@ -1543,19 +1546,19 @@ class ClassCompiler(GenUtils):
def addMethods():
classDefChunks.extend([
- ind + '#'*50,
+ ind + '#'*50, # noqa: E226 missing whitespace around operator
ind + '## CHEETAH GENERATED METHODS',
'\n',
self.methodDefs(),
- ])
+ ])
def addAttributes():
classDefChunks.extend([
- ind + '#'*50,
+ ind + '#'*50, # noqa: E226 missing whitespace around operator
ind + '## CHEETAH GENERATED ATTRIBUTES',
'\n',
self.attributes(),
- ])
+ ])
if self.setting('outputMethodsBeforeAttributes'):
addMethods()
addAttributes()
@@ -1574,9 +1577,9 @@ class ClassCompiler(GenUtils):
if not self._classDocStringLines:
return ''
ind = self.setting('indentationStep')
- docStr = ('%(ind)s"""\n%(ind)s' +
- '\n%(ind)s'.join(self._classDocStringLines) +
- '\n%(ind)s"""\n'
+ docStr = ('%(ind)s"""\n%(ind)s'
+ + '\n%(ind)s'.join(self._classDocStringLines)
+ + '\n%(ind)s"""\n'
) % {'ind': ind}
return docStr
@@ -1769,7 +1772,7 @@ class ModuleCompiler(SettingsManager, GenUtils):
"import Cheetah.Filters as Filters",
"import Cheetah.ErrorCatchers as ErrorCatchers",
"from Cheetah.compat import unicode",
- ]
+ ]
self._importedVarNames = ['sys',
'os',
@@ -1789,7 +1792,7 @@ class ModuleCompiler(SettingsManager, GenUtils):
"VFSL=valueFromSearchList",
"VFN=valueForName",
"currentTime=time.time",
- ]
+ ]
def compile(self):
classCompiler = self._spawnClassCompiler(self._mainClassName)
@@ -1891,11 +1894,12 @@ class ModuleCompiler(SettingsManager, GenUtils):
for chunk in chunks[1:-1]:
if modName in self.importedVarNames():
needToAddImport = False
- finalBaseClassName = klass.replace(modName+'.', '')
+ finalBaseClassName = klass.replace(modName + '.',
+ '')
baseclasses.append(finalBaseClassName)
break
else:
- modName += '.'+chunk
+ modName += '.' + chunk
if needToAddImport:
modName, finalClassName = (
'.'.join(chunks[:-1]), chunks[-1])
@@ -1962,7 +1966,7 @@ class ModuleCompiler(SettingsManager, GenUtils):
def addSpecialVar(self, basename, contents, includeUnderscores=True):
"""Adds module __specialConstant__ to the module globals.
"""
- name = includeUnderscores and '__'+basename+'__' or basename
+ name = includeUnderscores and '__' + basename + '__' or basename
self._specialVars[name] = contents.strip()
def addImportStatement(self, impStatement):
@@ -2027,7 +2031,24 @@ class ModuleCompiler(SettingsManager, GenUtils):
else:
return self.wrapModuleDef()
- __str__ = getModuleCode
+ def __to_bytes(self):
+ code = self.getModuleCode()
+ if isinstance(code, bytes):
+ return code
+ return code.encode(self.getModuleEncoding())
+
+ def __to_unicode(self):
+ code = self.getModuleCode()
+ if isinstance(code, bytes):
+ return code.decode(self.getModuleEncoding())
+ return code
+
+ if PY2:
+ __str__ = __to_bytes
+ __unicode__ = __to_unicode
+ else:
+ __bytes__ = __to_bytes
+ __str__ = __to_unicode
def wrapModuleDef(self):
self.addSpecialVar('CHEETAH_docstring', self.setting('defDocStrMsg'))
@@ -2087,7 +2108,7 @@ if not hasattr(%(mainClassName)s, '_initCheetahAttributes'):
'classes': self.classDefs(),
'footer': self.moduleFooter(),
'mainClassName': self._mainClassName,
- }
+ } # noqa
self._moduleDef = moduleDef
return moduleDef
@@ -2104,8 +2125,9 @@ if not hasattr(%(mainClassName)s, '_initCheetahAttributes'):
offSet = self.setting('commentOffset')
header += (
- '#' + ' '*offSet +
- ('\n#' + ' '*offSet).join(self._moduleHeaderLines) + '\n')
+ '#' + ' '*offSet # noqa: E226,E501 missing whitespace around operator
+ + ('\n#' + ' '*offSet).join(self._moduleHeaderLines) # noqa: E226,E501 missing whitespace around operator
+ + '\n')
return header
@@ -2113,9 +2135,8 @@ if not hasattr(%(mainClassName)s, '_initCheetahAttributes'):
if not self._moduleDocStringLines:
return ''
- return ('"""' +
- '\n'.join(self._moduleDocStringLines) +
- '\n"""\n')
+ return ('"""' + '\n'.join(self._moduleDocStringLines)
+ + '\n"""\n')
def specialVars(self):
chunks = []
diff --git a/Cheetah/ErrorCatchers.py b/Cheetah/ErrorCatchers.py
index 835683f..aad302d 100644
--- a/Cheetah/ErrorCatchers.py
+++ b/Cheetah/ErrorCatchers.py
@@ -26,7 +26,7 @@ Echo = ErrorCatcher
class BigEcho(ErrorCatcher):
def warn(self, exc_val, code, rawCode, lineCol):
- return "="*15 + "&lt;" + rawCode + " could not be found&gt;" + "="*15
+ return "="*15 + "&lt;" + rawCode + " could not be found&gt;" + "="*15 # noqa: E226,E501 missing whitespace around operator
class KeyError(ErrorCatcher):
diff --git a/Cheetah/FileUtils.py b/Cheetah/FileUtils.py
index c0f2afb..bdfa448 100644
--- a/Cheetah/FileUtils.py
+++ b/Cheetah/FileUtils.py
@@ -101,8 +101,8 @@ class FileFinder:
"""A hook for filtering out certain dirs. """
- return not (baseName in self._ignoreBasenames or
- fullPath in self._ignoreDirs)
+ return not (baseName in self._ignoreBasenames
+ or fullPath in self._ignoreDirs)
def processDir(self, dir, glob=glob):
extend = self._files.extend
diff --git a/Cheetah/Filters.py b/Cheetah/Filters.py
index a0e59a2..abb740b 100644
--- a/Cheetah/Filters.py
+++ b/Cheetah/Filters.py
@@ -67,7 +67,7 @@ class Markdown(EncodeUnicode):
tag, as it's usefulness with #filter is marginal at
best
'''
- def filter(self, value, **kwargs):
+ def filter(self, value, **kwargs):
# This is a bit of a hack to allow outright embedding
# of the markdown module.
import markdown
diff --git a/Cheetah/ImportHooks.py b/Cheetah/ImportHooks.py
index e2a26e9..2441fa2 100644
--- a/Cheetah/ImportHooks.py
+++ b/Cheetah/ImportHooks.py
@@ -7,8 +7,13 @@ To use these:
Cheetah.ImportHooks.install()
"""
+try:
+ from importlib import invalidate_caches
+except ImportError:
+ invalidate_caches = None
import sys
import os.path
+import py_compile
import types
try:
import builtins as builtin
@@ -44,6 +49,7 @@ class CheetahDirOwner(DirOwner):
_releaseLock = _lock.release
templateFileExtensions = ('.tmpl',)
+ debuglevel = 0
def getmod(self, name):
self._acquireLock()
@@ -71,22 +77,31 @@ class CheetahDirOwner(DirOwner):
self._releaseLock()
def _compile(self, name, tmplPath):
+ if invalidate_caches:
+ invalidate_caches()
+
# @@ consider adding an ImportError raiser here
code = str(Compiler(file=tmplPath, moduleName=name,
mainClassName=name))
if _cacheDir:
- __file__ = os.path.join(_cacheDir[0],
- convertTmplPathToModuleName(tmplPath)) \
- + '.py'
- try:
- open(__file__, 'w').write(code)
- except OSError:
- # @@ TR: need to add some error code here
- traceback.print_exc(file=sys.stderr)
- __file__ = tmplPath
+ __file__ = os.path.join(
+ _cacheDir[0], convertTmplPathToModuleName(tmplPath)) + '.py'
else:
+ __file__ = os.path.splitext(tmplPath)[0] + '.py'
+ try:
+ with open(__file__, 'w') as _py_file:
+ _py_file.write(code)
+ except (IOError, OSError):
+ # @@ TR: need to add some error code here
+ if self.debuglevel > 0:
+ traceback.print_exc(file=sys.stderr)
__file__ = tmplPath
- co = compile(code+'\n', __file__, 'exec')
+ else:
+ try:
+ py_compile.compile(__file__)
+ except IOError:
+ pass
+ co = compile(code + '\n', __file__, 'exec')
mod = types.ModuleType(name)
mod.__file__ = co.co_filename
diff --git a/Cheetah/ImportManager.py b/Cheetah/ImportManager.py
index dbb2c96..8ea7419 100644
--- a/Cheetah/ImportManager.py
+++ b/Cheetah/ImportManager.py
@@ -17,9 +17,10 @@ This is a hacked/documented version of Gordon McMillan's iu.py. I have:
- reorganized the code layout to enhance readability
"""
-import sys
import imp
import marshal
+import py_compile
+import sys
from Cheetah.compat import string_type
_installed = False
@@ -77,7 +78,7 @@ def _os_bootstrap():
if dirname is None:
def dirname(a, sep=sep):
- for i in range(len(a)-1, -1, -1):
+ for i in range(len(a) - 1, -1, -1):
c = a[i]
if c == '/' or c == sep:
return a[:i]
@@ -100,7 +101,7 @@ _os_bootstrap()
def packageName(s):
- for i in range(len(s)-1, -1, -1):
+ for i in range(len(s) - 1, -1, -1):
if s[i] == '.':
break
else:
@@ -114,14 +115,14 @@ def nameSplit(s):
for j in range(len(s)):
if s[j] == '.':
rslt.append(s[i:j])
- i = j+1
+ i = j + 1
if i < len(s):
rslt.append(s[i:])
return rslt
def getPathExt(fnm):
- for i in range(len(fnm)-1, -1, -1):
+ for i in range(len(fnm) - 1, -1, -1):
if fnm[i] == '.':
return fnm[i:]
return ''
@@ -186,18 +187,18 @@ class DirOwner(Owner):
py = pyc = None
for pth, ispkg, pkgpth in possibles:
for ext, mode, typ in getsuffixes():
- attempt = pth+ext
+ attempt = pth + ext
try:
st = _os_stat(attempt)
except Exception:
pass
else:
if typ == imp.C_EXTENSION:
- fp = open(attempt, 'rb')
- mod = imp.load_module(
- nm, fp, attempt, (ext, mode, typ))
- mod.__file__ = attempt
- return mod
+ with open(attempt, 'rb') as fp:
+ mod = imp.load_module(
+ nm, fp, attempt, (ext, mode, typ))
+ mod.__file__ = attempt
+ return mod
elif typ == imp.PY_SOURCE:
py = (attempt, st)
else:
@@ -209,23 +210,32 @@ class DirOwner(Owner):
while True:
if pyc is None or py and pyc[1][8] < py[1][8]:
try:
- co = compile(open(py[0], 'r').read()+'\n', py[0], 'exec')
+ with open(py[0], 'r') as py_code_file:
+ py_code = py_code_file.read()
+ co = compile(py_code + '\n', py[0], 'exec')
+ try:
+ py_compile.compile(py[0])
+ except IOError:
+ pass
+ __file__ = py[0]
break
except SyntaxError as e:
print("Invalid syntax in %s" % py[0])
print(e.args)
raise
elif pyc:
- stuff = open(pyc[0], 'rb').read()
+ with open(pyc[0], 'rb') as pyc_file:
+ stuff = pyc_file.read()
try:
co = loadco(stuff[8:])
+ __file__ = pyc[0]
break
except (ValueError, EOFError):
pyc = None
else:
return None
mod = newmod(nm)
- mod.__file__ = co.co_filename
+ mod.__file__ = __file__
if ispkg:
mod.__path__ = [pkgpth]
subimporter = PathImportDirector(mod.__path__)
@@ -268,7 +278,7 @@ class FrozenImportDirector(ImportDirector):
if hasattr(mod, '__path__'):
mod.__importsub__ = \
lambda name, pname=nm, owner=self: \
- owner.getmod(pname+'.'+name)
+ owner.getmod(pname + '.' + name)
return mod
return None
@@ -313,10 +323,10 @@ class RegistryImportDirector(ImportDirector):
stuff = self.map.get(nm)
if stuff:
fnm, desc = stuff
- fp = open(fnm, 'rb')
- mod = imp.load_module(nm, fp, fnm, desc)
- mod.__file__ = fnm
- return mod
+ with open(fnm, 'rb') as fp:
+ mod = imp.load_module(nm, fp, fnm, desc)
+ mod.__file__ = fnm
+ return mod
return None
@@ -466,7 +476,7 @@ class ImportManager:
raise ImportError("No module named %s" % fqname)
if fromlist is None:
if context:
- return sys.modules[context+'.'+nmparts[0]]
+ return sys.modules[context + '.' + nmparts[0]]
return sys.modules[nmparts[0]]
bottommod = sys.modules[ctx]
if hasattr(bottommod, '__path__'):
@@ -475,7 +485,7 @@ class ImportManager:
while i < len(fromlist):
nm = fromlist[i]
if nm == '*':
- fromlist[i:i+1] = list(getattr(bottommod, '__all__', []))
+ fromlist[i:i+1] = list(getattr(bottommod, '__all__', [])) # noqa: E226,E501 missing whitespace around operator
if i >= len(fromlist):
break
nm = fromlist[i]
@@ -483,7 +493,7 @@ class ImportManager:
if not hasattr(bottommod, nm):
if self.threaded:
self._acquire()
- mod = self.doimport(nm, ctx, ctx+'.'+nm)
+ mod = self.doimport(nm, ctx, ctx + '.' + nm)
if self.threaded:
self._release()
if not mod:
diff --git a/Cheetah/LoadTemplate.py b/Cheetah/LoadTemplate.py
new file mode 100644
index 0000000..6d4d173
--- /dev/null
+++ b/Cheetah/LoadTemplate.py
@@ -0,0 +1,56 @@
+import imp
+import os
+import sys
+from Cheetah.ImportHooks import CheetahDirOwner
+
+
+def _loadTemplate(templatePath, debuglevel=0):
+ """Load template by full or relative path (including extension)
+
+ Example: template = loadTemplate('views/index.tmpl')
+
+ Template is loaded from from .py[co], .py or .tmpl -
+ whatever will be found. Files *.tmpl are compiled to *.py;
+ *.py are byte-compiled to *.py[co]. Compiled files are cached
+ in the template directory. Errors on writing are silently ignored.
+ """
+ drive, localPath = os.path.splitdrive(templatePath)
+ dirname, filename = os.path.split(localPath)
+ filename, ext = os.path.splitext(filename)
+ if dirname:
+ # Cleanup: Convert /Templates//views/ -> /Templates/views
+ dirname_list = dirname.replace(os.sep, '/').split('/')
+ dirname_list = [d for (i, d) in enumerate(dirname_list)
+ if i == 0 or d] # Preserve root slash
+ dirname = os.sep.join(dirname_list)
+ # Add all "modules" to sys.modules
+ components = []
+ for d in dirname_list:
+ components.append(d)
+ _mod_name = '.'.join(components)
+ _mod = imp.new_module(_mod_name)
+ _d = os.path.abspath(os.sep.join(components))
+ _mod.__file__ = _d
+ _mod.__path__ = [_d]
+ sys.modules[_mod_name] = _mod
+ template_dir = CheetahDirOwner(drive + dirname)
+ if ext:
+ template_dir.templateFileExtensions = (ext,)
+ template_dir.debuglevel = debuglevel
+ mod = template_dir.getmod(filename)
+ fqname = os.path.join(dirname, filename).replace(os.sep, '.')
+ mod.__name__ = fqname
+ sys.modules[fqname] = mod
+ co = mod.__co__
+ del mod.__co__
+ exec(co, mod.__dict__)
+ return mod, filename
+
+
+def loadTemplateModule(templatePath, debuglevel=0):
+ return _loadTemplate(templatePath, debuglevel=debuglevel)[0]
+
+
+def loadTemplateClass(templatePath, debuglevel=0):
+ mod, filename = _loadTemplate(templatePath, debuglevel=debuglevel)
+ return getattr(mod, filename)
diff --git a/Cheetah/Macros/I18n.py b/Cheetah/Macros/I18n.py
index 02a815b..8a4ac09 100644
--- a/Cheetah/Macros/I18n.py
+++ b/Cheetah/Macros/I18n.py
@@ -49,6 +49,6 @@ class I18n(object):
# print macros['i18n']
src = _(src)
if isShortForm and endPos < len(parser):
- return src+EOLCharsInShortForm
+ return src + EOLCharsInShortForm
else:
return src
diff --git a/Cheetah/NameMapper.py b/Cheetah/NameMapper.py
index 68ded17..40cdf1f 100755
--- a/Cheetah/NameMapper.py
+++ b/Cheetah/NameMapper.py
@@ -197,8 +197,8 @@ def _isInstanceOrClass(obj):
if hasattr(obj, 'mro'):
# type/class
return True
- elif (hasattr(obj, '__func__') or hasattr(obj, '__code__') or
- hasattr(obj, '__self__')):
+ elif (hasattr(obj, '__func__') or hasattr(obj, '__code__')
+ or hasattr(obj, '__self__')):
# method, func, or builtin func
return False
elif hasattr(obj, '__init__'):
@@ -260,7 +260,7 @@ def hasName(obj, name):
try:
from Cheetah._namemapper import NotFound, valueForKey, valueForName, \
- valueFromSearchList, valueFromFrameOrSearchList, valueFromFrame
+ valueFromSearchList, valueFromFrameOrSearchList, valueFromFrame
C_VERSION = True
except Exception:
class NotFound(LookupError):
@@ -365,7 +365,7 @@ def example():
'default': 'default output',
'one': 'output option one',
'two': 'output option two'
- }
+ }
return values[whichOne]
a.dic = {
@@ -373,7 +373,7 @@ def example():
'method': a.method3,
'item': 'itemval',
'subDict': {'nestedMethod': a.method3}
- }
+ }
# b = 'this is local b'
print(valueForKey(a.dic, 'subDict'))
diff --git a/Cheetah/Parser.py b/Cheetah/Parser.py
index 0b7f508..5d6837e 100644
--- a/Cheetah/Parser.py
+++ b/Cheetah/Parser.py
@@ -42,20 +42,24 @@ def escapeRegexChars(txt,
return escapeRE.sub(r'\\\1', txt)
-def group(*choices): return '(' + '|'.join(choices) + ')'
+def group(*choices):
+ return '(' + '|'.join(choices) + ')'
-def nongroup(*choices): return '(?:' + '|'.join(choices) + ')'
+def nongroup(*choices):
+ return '(?:' + '|'.join(choices) + ')'
def namedGroup(name, *choices):
return '(P:<' + name + '>' + '|'.join(choices) + ')'
-def any(*choices): return group(*choices) + '*'
+def any(*choices):
+ return group(*choices) + '*'
-def maybe(*choices): return group(*choices) + '?'
+def maybe(*choices):
+ return group(*choices) + '?'
##################################################
# CONSTANTS & GLOBALS ##
@@ -73,8 +77,7 @@ SET_MODULE = 2
# Tokens for the parser ##
# generic
-identchars = "abcdefghijklmnopqrstuvwxyz" \
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ_"
+identchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
namechars = identchars + "0123456789"
# operators
@@ -91,19 +94,19 @@ assignmentOps = (assignOp,) + augAssignOps
compOps = ('<', '>', '==', '!=', '<=', '>=', '<>', 'is', 'in',)
booleanOps = ('and', 'or', 'not')
operators = (powerOp,) + unaryArithOps + binaryArithOps \
- + shiftOps + bitwiseOps + assignmentOps \
- + compOps + booleanOps
+ + shiftOps + bitwiseOps + assignmentOps \
+ + compOps + booleanOps
delimeters = ('(', ')', '{', '}', '[', ']',
',', '.', ':', ';', '=', '`') + augAssignOps
-keywords = ('and', 'del', 'for', 'is', 'raise',
- 'assert', 'elif', 'from', 'lambda', 'return',
- 'break', 'else', 'global', 'not', 'try',
- 'class', 'except', 'if', 'or', 'while',
- 'continue', 'exec', 'import', 'pass',
- 'def', 'finally', 'in', 'print',
+keywords = ('and', 'del', 'for', 'is', 'raise', # noqa: E241,E501 multiple spaces after ','
+ 'assert', 'elif', 'from', 'lambda', 'return', # noqa: E241,E501 multiple spaces after ','
+ 'break', 'else', 'global', 'not', 'try', # noqa: E241,E501 multiple spaces after ','
+ 'class', 'except', 'if', 'or', 'while', # noqa: E241,E501 multiple spaces after ','
+ 'continue', 'exec', 'import', 'pass', # noqa: E241,E501 multiple spaces after ','
+ 'def', 'finally', 'in', 'print', # noqa: E241,E501 multiple spaces after ','
)
single3 = "'''"
@@ -235,7 +238,7 @@ directiveNamesAndParsers = {
'encoding': 'eatEncoding',
'end': 'eatEndDirective',
- }
+}
endDirectiveNamesAndHandlers = {
'def': 'handleEndDef', # has short-form
@@ -252,7 +255,7 @@ endDirectiveNamesAndHandlers = {
'try': None, # has short-form
'repeat': None, # has short-form
'unless': None, # has short-form
- }
+}
##################################################
# CLASSES ##
@@ -285,7 +288,7 @@ class ParseError(ValueError):
if self.lineno:
lineno = self.lineno
row, col, line = (lineno, (self.col or 0),
- self.stream.splitlines()[lineno-1])
+ self.stream.splitlines()[lineno - 1])
else:
row, col, line = self.stream.getRowColLine()
@@ -295,13 +298,13 @@ class ParseError(ValueError):
for i in range(1, 4):
if row - 1 - i <= 0:
break
- prevLines.append((row-i, lines[row-1-i]))
+ prevLines.append((row - i, lines[row - 1 - i]))
nextLines = [] # (rowNum, content)
for i in range(1, 4):
- if not row-1+i < len(lines):
+ if not row - 1 + i < len(lines):
break
- nextLines.append((row+i, lines[row-1+i]))
+ nextLines.append((row + i, lines[row - 1 + i]))
nextLines.reverse()
# print the main message
@@ -315,7 +318,7 @@ class ParseError(ValueError):
report += "%(row)-4d|%(line)s\n" \
% {'row': lineInfo[0], 'line': lineInfo[1]}
report += "%(row)-4d|%(line)s\n" % {'row': row, 'line': line}
- report += ' '*5 + ' '*(col-1) + "^\n"
+ report += ' '*5 + ' '*(col - 1) + "^\n" # noqa: E226,E501 missing whitespace around operator
while nextLines:
lineInfo = nextLines.pop()
@@ -426,11 +429,11 @@ class _LowLevelParser(SourceReader):
self._makeDirectiveREs()
self._makePspREs()
self._possibleNonStrConstantChars = (
- self.setting('commentStartToken')[0] +
- self.setting('multiLineCommentStartToken')[0] +
- self.setting('cheetahVarStartToken')[0] +
- self.setting('directiveStartToken')[0] +
- self.setting('PSPStartToken')[0])
+ self.setting('commentStartToken')[0]
+ + self.setting('multiLineCommentStartToken')[0]
+ + self.setting('cheetahVarStartToken')[0]
+ + self.setting('directiveStartToken')[0]
+ + self.setting('PSPStartToken')[0])
self._nonStrConstMatchers = [
self.matchCommentStartToken,
self.matchMultiLineCommentStartToken,
@@ -439,7 +442,7 @@ class _LowLevelParser(SourceReader):
self.matchDirective,
self.matchPSPStartToken,
self.matchEOLSlurpToken,
- ]
+ ]
# regex setup ##
@@ -448,64 +451,66 @@ class _LowLevelParser(SourceReader):
"""Setup the regexs for Cheetah $var parsing."""
num = r'[0-9\.]+'
- interval = (r'(?P<interval>' +
- num + r's|' +
- num + r'm|' +
- num + r'h|' +
- num + r'd|' +
- num + r'w|' +
- num + ')'
+ interval = (r'(?P<interval>'
+ + num + r's|'
+ + num + r'm|'
+ + num + r'h|'
+ + num + r'd|'
+ + num + r'w|'
+ + num + ')'
)
- cacheToken = (r'(?:' +
- r'(?P<REFRESH_CACHE>\*' + interval + '\*)' +
- '|' +
- r'(?P<STATIC_CACHE>\*)' +
- '|' +
- r'(?P<NO_CACHE>)' +
- ')')
+ cacheToken = (r'(?:'
+ + r'(?P<REFRESH_CACHE>\*' + interval + '\*)'
+ + '|'
+ + r'(?P<STATIC_CACHE>\*)'
+ + '|'
+ + r'(?P<NO_CACHE>)'
+ + ')')
self.cacheTokenRE = cachedRegex(cacheToken)
- silentPlaceholderToken = (r'(?:' +
- r'(?P<SILENT>' + escapeRegexChars('!')+')' +
- '|' +
- r'(?P<NOT_SILENT>)' +
- ')')
+ silentPlaceholderToken = (r'(?:'
+ + r'(?P<SILENT>'
+ + escapeRegexChars('!') + ')'
+ + '|'
+ + r'(?P<NOT_SILENT>)'
+ + ')')
self.silentPlaceholderTokenRE = cachedRegex(silentPlaceholderToken)
self.cheetahVarStartRE = cachedRegex(
- escCharLookBehind + r'(?P<startToken>' +
- escapeRegexChars(self.setting('cheetahVarStartToken')) + ')' +
- r'(?P<silenceToken>' + silentPlaceholderToken+')' +
- r'(?P<cacheToken>' + cacheToken + ')' +
+ escCharLookBehind + r'(?P<startToken>'
+ + escapeRegexChars(self.setting('cheetahVarStartToken')) + ')'
+ + r'(?P<silenceToken>' + silentPlaceholderToken + ')'
+ + r'(?P<cacheToken>' + cacheToken + ')'
# allow WS after enclosure
- r'(?P<enclosure>|(?:(?:\{|\(|\[)[ \t\f]*))' + r'(?=[A-Za-z_])')
+ + r'(?P<enclosure>|(?:(?:\{|\(|\[)[ \t\f]*))' + r'(?=[A-Za-z_])')
validCharsLookAhead = r'(?=[A-Za-z_\*!\{\(\[])'
self.cheetahVarStartToken = self.setting('cheetahVarStartToken')
self.cheetahVarStartTokenRE = cachedRegex(
- escCharLookBehind +
- escapeRegexChars(self.setting('cheetahVarStartToken'))
+ escCharLookBehind
+ + escapeRegexChars(self.setting('cheetahVarStartToken'))
+ validCharsLookAhead
- )
+ )
self.cheetahVarInExpressionStartTokenRE = cachedRegex(
escapeRegexChars(self.setting('cheetahVarStartToken'))
+ r'(?=[A-Za-z_])'
- )
+ )
self.expressionPlaceholderStartRE = cachedRegex(
- escCharLookBehind + r'(?P<startToken>' +
- escapeRegexChars(self.setting('cheetahVarStartToken')) + ')' +
- r'(?P<cacheToken>' + cacheToken + ')' +
+ escCharLookBehind + r'(?P<startToken>'
+ + escapeRegexChars(self.setting('cheetahVarStartToken'))
+ + ')'
+ + r'(?P<cacheToken>' + cacheToken + ')'
# r'\[[ \t\f]*'
- r'(?:\{|\(|\[)[ \t\f]*' + r'(?=[^\)\}\]])')
+ + r'(?:\{|\(|\[)[ \t\f]*' + r'(?=[^\)\}\]])')
if self.setting('EOLSlurpToken'):
self.EOLSlurpRE = cachedRegex(
escapeRegexChars(self.setting('EOLSlurpToken'))
+ r'[ \t\f]*'
- + r'(?:'+EOL+')'
- )
+ + r'(?:' + EOL + ')'
+ )
else:
self.EOLSlurpRE = None
@@ -520,10 +525,10 @@ class _LowLevelParser(SourceReader):
self.setting('multiLineCommentStartToken'))
endTokenEsc = escapeRegexChars(
self.setting('multiLineCommentEndToken'))
- self.multiLineCommentTokenStartRE = cachedRegex(escCharLookBehind +
- startTokenEsc)
- self.multiLineCommentEndTokenRE = cachedRegex(escCharLookBehind +
- endTokenEsc)
+ self.multiLineCommentTokenStartRE = cachedRegex(
+ escCharLookBehind + startTokenEsc)
+ self.multiLineCommentEndTokenRE = cachedRegex(
+ escCharLookBehind + endTokenEsc)
def _makeDirectiveREs(self):
"""Construct the regexs that are used in directive parsing."""
@@ -744,7 +749,8 @@ class _LowLevelParser(SourceReader):
self.setPos(startPos)
return directiveName
- def matchDirectiveName(self, directiveNameChars=identchars+'0123456789-@'):
+ def matchDirectiveName(self,
+ directiveNameChars=identchars + '0123456789-@'):
startPos = self.pos()
possibleMatches = self._directiveNamesAndParsers.keys()
name = ''
@@ -791,7 +797,7 @@ class _LowLevelParser(SourceReader):
def matchColonForSingleLineShortFormDirective(self):
if not self.atEnd() and self.peek() == ':':
- restOfLine = self[self.pos()+1:self.findEOL()]
+ restOfLine = self[self.pos()+1:self.findEOL()] # noqa: E226,E501 missing whitespace around operator
restOfLine = restOfLine.strip()
if not restOfLine:
return False
@@ -937,7 +943,7 @@ class _LowLevelParser(SourceReader):
break
elif self.peek() == '.':
- if self.pos()+1 < len(self) and self.peek(1) in identchars:
+ if self.pos() + 1 < len(self) and self.peek(1) in identchars:
# discard the period as it isn't needed with NameMapper
self.advance()
else:
@@ -953,7 +959,7 @@ class _LowLevelParser(SourceReader):
period = max(dottedName.rfind('.'), 0)
if period:
chunks.append((dottedName[:period], autoCall, ''))
- dottedName = dottedName[period+1:]
+ dottedName = dottedName[period+1:] # noqa: E226,E501 missing whitespace around operator
if rest and rest[0] == '(':
autoCall = False
chunks.append((dottedName, autoCall, rest))
@@ -994,8 +1000,8 @@ class _LowLevelParser(SourceReader):
close = closurePairsRev[open]
self.setPos(enclosures[-1][1])
raise ParseError(
- self, msg="EOF was reached before a matching '" + close +
- "' was found for the '" + open + "'")
+ self, msg="EOF was reached before a matching '" + close
+ + "' was found for the '" + open + "'")
c = self.peek()
if c in ")}]": # get the ending enclosure and break
@@ -1163,8 +1169,8 @@ class _LowLevelParser(SourceReader):
self.setPos(enclosures[-1][1])
raise ParseError(
self,
- msg="EOF was reached before a matching '" + close +
- "' was found for the '" + open + "'")
+ msg="EOF was reached before a matching '" + close
+ + "' was found for the '" + open + "'")
else:
break
@@ -1189,18 +1195,18 @@ class _LowLevelParser(SourceReader):
self.setPos(enclosures[-1][1])
raise ParseError(
self,
- msg="A '" + c + "' was found at line " + str(row) +
- ", col " + str(col) +
- " before a matching '" + close +
- "' was found\nfor the '" + open + "'")
+ msg="A '" + c + "' was found at line " + str(row)
+ + ", col " + str(col)
+ + " before a matching '" + close
+ + "' was found\nfor the '" + open + "'")
self.advance()
elif c in " \f\t":
exprBits.append(self.getWhiteSpace())
elif self.matchDirectiveEndToken() and not enclosures:
break
- elif c == "\\" and self.pos()+1 < srcLen:
- eolMatch = EOLre.match(self.src(), self.pos()+1)
+ elif c == "\\" and self.pos() + 1 < srcLen:
+ eolMatch = EOLre.match(self.src(), self.pos() + 1)
if not eolMatch:
self.advance()
raise ParseError(self, msg='Line ending expected')
@@ -1275,23 +1281,23 @@ class _LowLevelParser(SourceReader):
startPosIdx = 3
else:
startPosIdx = 1
- self.setPos(beforeTokenPos+startPosIdx+1)
+ self.setPos(beforeTokenPos + startPosIdx + 1)
outputExprs = []
strConst = ''
- while self.pos() < (endPos-startPosIdx):
+ while self.pos() < (endPos - startPosIdx):
if self.matchCheetahVarStart() \
or self.matchExpressionPlaceholderStart():
if strConst:
outputExprs.append(repr(strConst))
strConst = ''
placeholderExpr = self.getPlaceholder()
- outputExprs.append('str('+placeholderExpr+')')
+ outputExprs.append('str(' + placeholderExpr + ')')
else:
strConst += self.getc()
self.setPos(endPos)
if strConst:
outputExprs.append(repr(strConst))
- token = "''.join(["+','.join(outputExprs)+"])"
+ token = "''.join([" + ','.join(outputExprs) + "])"
return token
def _raiseErrorAboutInvalidCheetahVarSyntaxInExpr(self):
@@ -1511,7 +1517,7 @@ class _HighLevelParser(_LowLevelParser):
but I haven't thought of a better name yet. Suggestions?
"""
for callback in self.setting('expressionFilterHooks'):
- expr = callback(parser=self, expr=expr, exprType=exprType,
+ expr = callback(parser=self, expr=expr, exprType=exprType,
rawExpr=rawExpr, startPos=startPos)
return expr
@@ -1675,13 +1681,13 @@ class _HighLevelParser(_LowLevelParser):
elif directiveName in self._simpleIndentingDirectives:
handlerName = self._directiveHandlerNames.get(directiveName)
if not handlerName:
- handlerName = 'add'+directiveName.capitalize()
+ handlerName = 'add' + directiveName.capitalize()
handler = getattr(self._compiler, handlerName)
self.eatSimpleIndentingDirective(directiveName, callback=handler)
elif directiveName in self._simpleExprDirectives:
handlerName = self._directiveHandlerNames.get(directiveName)
if not handlerName:
- handlerName = 'add'+directiveName.capitalize()
+ handlerName = 'add' + directiveName.capitalize()
handler = getattr(self._compiler, handlerName)
if directiveName in ('silent', 'echo'):
includeDirectiveNameInExpr = False
@@ -1936,12 +1942,12 @@ class _HighLevelParser(_LowLevelParser):
'An error occurred while processing '
'the following #compiler directive.\n')
sys.stderr.write(
- '------------------------------------'
- '----------------------------------\n')
+ '------------------------------------'
+ '----------------------------------\n')
sys.stderr.write('%s\n' % self[startPos:endPos])
sys.stderr.write(
- '------------------------------------'
- '----------------------------------\n')
+ '------------------------------------'
+ '----------------------------------\n')
sys.stderr.write('Please check the syntax of these settings.\n\n')
raise
@@ -1976,8 +1982,8 @@ class _HighLevelParser(_LowLevelParser):
'An error occurred while processing '
'the following compiler settings.\n')
sys.stderr.write(
- '------------------------------------'
- '----------------------------------\n')
+ '------------------------------------'
+ '----------------------------------\n')
sys.stderr.write('%s\n' % settingsStr.strip())
sys.stderr.write(
'------------------------------------'
@@ -2037,7 +2043,7 @@ class _HighLevelParser(_LowLevelParser):
self._compiler._blockMetaData[methodName] = {
'raw': rawSignature,
'lineCol': self.getRowCol(startPos),
- }
+ }
def eatClosure(self):
# filtered
@@ -2119,8 +2125,8 @@ class _HighLevelParser(_LowLevelParser):
endOfFirstLinePos = self.findEOL()
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
signature = ' '.join([line.strip() for line in signature.splitlines()])
- parserComment = ('## CHEETAH: generated from ' + signature +
- ' at line %s, col %s' % self.getRowCol(startPos)
+ parserComment = ('## CHEETAH: generated from ' + signature
+ + ' at line %s, col %s' % self.getRowCol(startPos)
+ '.')
isNestedDef = (self.setting('allowNestedDefScopes')
@@ -2140,8 +2146,8 @@ class _HighLevelParser(_LowLevelParser):
argsList, startPos, endPos):
# filtered in calling method
fullSignature = self[startPos:endPos]
- parserComment = ('## Generated from ' + fullSignature +
- ' at line %s, col %s' % self.getRowCol(startPos)
+ parserComment = ('## Generated from ' + fullSignature
+ + ' at line %s, col %s' % self.getRowCol(startPos)
+ '.')
isNestedDef = (self.setting('allowNestedDefScopes')
and [name for name in self._openDirectivesStack
@@ -2704,8 +2710,8 @@ class _HighLevelParser(_LowLevelParser):
expr = ''.join(expressionParts).strip()
expr = self._applyExpressionFilters(expr, 'if', startPos=startPos)
- isTernaryExpr = ('then' in expressionParts and
- 'else' in expressionParts)
+ isTernaryExpr = ('then' in expressionParts
+ and 'else' in expressionParts)
if isTernaryExpr:
conditionExpr = []
trueExpr = []
@@ -2744,9 +2750,9 @@ class _HighLevelParser(_LowLevelParser):
# end directive handlers
def handleEndDef(self):
- isNestedDef = (self.setting('allowNestedDefScopes') and
- [name for name in self._openDirectivesStack
- if name == 'def'])
+ isNestedDef = (self.setting('allowNestedDefScopes')
+ and [name for name in self._openDirectivesStack
+ if name == 'def'])
if not isNestedDef:
self._compiler.closeDef()
else:
diff --git a/Cheetah/SettingsManager.py b/Cheetah/SettingsManager.py
index e2e847d..ac6e598 100644
--- a/Cheetah/SettingsManager.py
+++ b/Cheetah/SettingsManager.py
@@ -114,7 +114,7 @@ class _SettingsCollector(object):
'False': (0 == 1),
}
newSettings = {'self': self}
- exec((theString+os.linesep), globalsDict, newSettings)
+ exec((theString + os.linesep), globalsDict, newSettings)
del newSettings['self']
module = types.ModuleType('temp_settings_module')
module.__dict__.update(newSettings)
diff --git a/Cheetah/SourceReader.py b/Cheetah/SourceReader.py
index 44eb3ba..a45f1eb 100644
--- a/Cheetah/SourceReader.py
+++ b/Cheetah/SourceReader.py
@@ -77,13 +77,13 @@ class SourceReader(object):
pos = self._pos
lineNum = self.lineNum(pos)
BOL = self._BOLs[lineNum]
- return lineNum+1, pos-BOL+1
+ return lineNum + 1, pos - BOL + 1
def getRowColLine(self, pos=None):
if pos is None:
pos = self._pos
row, col = self.getRowCol(pos)
- return row, col, self.splitlines()[row-1]
+ return row, col, self.splitlines()[row - 1]
def getLine(self, pos):
if pos is None:
@@ -105,7 +105,7 @@ class SourceReader(object):
if not pos <= self._breakPoint:
raise Error(
"pos (" + str(pos) + ") is invalid: beyond the stream's end ("
- + str(self._breakPoint-1) + ")")
+ + str(self._breakPoint - 1) + ")")
elif not pos >= 0:
raise Error("pos (" + str(pos) + ") is invalid: less than 0")
@@ -115,9 +115,9 @@ class SourceReader(object):
def setBreakPoint(self, pos):
if pos > self._srcLen:
raise Error(
- "New breakpoint (" + str(pos) +
- ") is invalid: beyond the end of stream's source string (" +
- str(self._srcLen) + ")")
+ "New breakpoint (" + str(pos)
+ + ") is invalid: beyond the end of stream's source string ("
+ + str(self._srcLen) + ")")
elif not pos >= 0:
raise Error(
"New breakpoint (" + str(pos) + ") is invalid: less than 0")
@@ -137,8 +137,8 @@ class SourceReader(object):
"Invalid bookmark (" + name + ") is invalid: does not exist")
pos = self._bookmarks[name]
if not self.validPos(pos):
- raise Error("Invalid bookmark (" + name + ', ' +
- str(pos) + ") is invalid: pos is out of range")
+ raise Error("Invalid bookmark (" + name + ', '
+ + str(pos) + ") is invalid: pos is out of range")
self._pos = pos
def atEnd(self):
@@ -148,13 +148,13 @@ class SourceReader(object):
return self._pos == 0
def peek(self, offset=0):
- self.checkPos(self._pos+offset)
+ self.checkPos(self._pos + offset)
pos = self._pos + offset
return self._src[pos]
def getc(self):
pos = self._pos
- if self.validPos(pos+1):
+ if self.validPos(pos + 1):
self._pos += 1
return self._src[pos]
@@ -215,7 +215,7 @@ class SourceReader(object):
if pos is None:
pos = self._pos
src = self.src()
- return max(src.rfind('\n', 0, pos)+1, src.rfind('\r', 0, pos)+1, 0)
+ return max(src.rfind('\n', 0, pos) + 1, src.rfind('\r', 0, pos) + 1, 0)
def findEOL(self, pos=None, gobble=False):
if pos is None:
@@ -250,7 +250,7 @@ class SourceReader(object):
start = self.pos()
breakPoint = self.breakPoint()
if max is not None:
- breakPoint = min(breakPoint, self.pos()+max)
+ breakPoint = min(breakPoint, self.pos() + max)
while self.pos() < breakPoint:
self.advance()
if not self.matchWhiteSpace(WSchars):
diff --git a/Cheetah/Template.py b/Cheetah/Template.py
index 2cfd404..c66c030 100644
--- a/Cheetah/Template.py
+++ b/Cheetah/Template.py
@@ -274,31 +274,31 @@ class Template(Servlet):
# this is used by ._addCheetahPlumbingCodeToClass()
_CHEETAH_requiredCheetahMethods = (
- '_initCheetahInstance',
- 'searchList',
- 'errorCatcher',
- 'getVar',
- 'varExists',
- 'getFileContents',
- 'i18n',
- 'runAsMainProgram',
- 'respond',
- 'shutdown',
- 'webInput',
- 'serverSidePath',
- 'generatedClassCode',
- 'generatedModuleCode',
-
- '_getCacheStore',
- '_getCacheStoreIdPrefix',
- '_createCacheRegion',
- 'getCacheRegion',
- 'getCacheRegions',
- 'refreshCache',
-
- '_handleCheetahInclude',
- '_getTemplateAPIClassForIncludeDirectiveCompilation',
- )
+ '_initCheetahInstance',
+ 'searchList',
+ 'errorCatcher',
+ 'getVar',
+ 'varExists',
+ 'getFileContents',
+ 'i18n',
+ 'runAsMainProgram',
+ 'respond',
+ 'shutdown',
+ 'webInput',
+ 'serverSidePath',
+ 'generatedClassCode',
+ 'generatedModuleCode',
+
+ '_getCacheStore',
+ '_getCacheStoreIdPrefix',
+ '_createCacheRegion',
+ 'getCacheRegion',
+ 'getCacheRegions',
+ 'refreshCache',
+
+ '_handleCheetahInclude',
+ '_getTemplateAPIClassForIncludeDirectiveCompilation',
+ )
_CHEETAH_requiredCheetahClassMethods = ('subclass',)
_CHEETAH_requiredCheetahClassAttributes = (
'cacheRegionClass', 'cacheStore',
@@ -979,15 +979,15 @@ class Template(Servlet):
compilerSettings=settings.compilerSettings,
placeholderToken=settings.placeholderToken,
directiveToken=settings.directiveToken
- )
+ )
return settings
@classmethod
def _updateSettingsWithPreprocessTokens(
klass, compilerSettings, placeholderToken, directiveToken):
- if (placeholderToken and
- 'cheetahVarStartToken' not in compilerSettings):
+ if (placeholderToken
+ and 'cheetahVarStartToken' not in compilerSettings):
compilerSettings['cheetahVarStartToken'] = placeholderToken
if directiveToken:
if 'directiveStartToken' not in compilerSettings:
@@ -995,13 +995,13 @@ class Template(Servlet):
if 'directiveEndToken' not in compilerSettings:
compilerSettings['directiveEndToken'] = directiveToken
if 'commentStartToken' not in compilerSettings:
- compilerSettings['commentStartToken'] = directiveToken*2
+ compilerSettings['commentStartToken'] = directiveToken*2 # noqa: E226,E501 missing whitespace around operator
if 'multiLineCommentStartToken' not in compilerSettings:
compilerSettings['multiLineCommentStartToken'] = (
- directiveToken+'*')
+ directiveToken + '*')
if 'multiLineCommentEndToken' not in compilerSettings:
compilerSettings['multiLineCommentEndToken'] = (
- '*'+directiveToken)
+ '*' + directiveToken)
if 'EOLSlurpToken' not in compilerSettings:
compilerSettings['EOLSlurpToken'] = directiveToken
@@ -1029,7 +1029,7 @@ class Template(Servlet):
classmethod(meth.__func__))
for attrname in klass._CHEETAH_requiredCheetahClassAttributes:
- attrname = '_CHEETAH_'+attrname
+ attrname = '_CHEETAH_' + attrname
if not hasattr(concreteTemplateClass, attrname):
attrVal = getattr(klass, attrname)
setattr(concreteTemplateClass, attrname, attrVal)
@@ -1236,8 +1236,8 @@ class Template(Servlet):
('file', 'string, file open for reading, or None'))
if not isinstance(filter, (string_type, type)) \
- and not (isinstance(filter, type) and
- issubclass(filter, Filters.Filter)):
+ and not (isinstance(filter, type)
+ and issubclass(filter, Filters.Filter)):
raise TypeError(errmsgextra %
('filter', 'string or class',
'(if class, must be subclass '
@@ -1266,8 +1266,8 @@ class Template(Servlet):
('compilerSettings', 'dictionary'))
if source is not None and file is not None:
- raise TypeError("you must supply either a source string or the" +
- " 'file' keyword argument, but not both")
+ raise TypeError("you must supply either a source string or the"
+ + " 'file' keyword argument, but not both")
##################################################
# Do superclass initialization.
@@ -1283,9 +1283,10 @@ class Template(Servlet):
convertVersionStringToTuple(compiledVersion)
if compiledVersionTuple < MinCompatibleVersionTuple:
raise AssertionError(
- 'This template was compiled with Cheetah version %s.'
- 'Templates compiled before version %s must be recompiled.'
- % (compiledVersion, MinCompatibleVersion))
+ 'This template was compiled with Cheetah version %s.'
+ 'Templates compiled before version %s '
+ 'must be recompiled.'
+ % (compiledVersion, MinCompatibleVersion))
except AssertionError:
raise
except Exception:
@@ -1348,9 +1349,9 @@ class Template(Servlet):
"""
return self._CHEETAH_generatedModuleCode[
- self._CHEETAH_generatedModuleCode.find('\nclass '):
- self._CHEETAH_generatedModuleCode.find(
- '\n## END CLASS DEFINITION')]
+ self._CHEETAH_generatedModuleCode.find('\nclass '):
+ self._CHEETAH_generatedModuleCode.find(
+ '\n## END CLASS DEFINITION')]
def searchList(self):
"""Return a reference to the searchlist
@@ -1919,28 +1920,28 @@ class Template(Servlet):
global _formUsedByWebInput
if _formUsedByWebInput is None:
_formUsedByWebInput = cgi.FieldStorage()
- source, func = 'field', _formUsedByWebInput.getvalue
+ source, func = 'field', _formUsedByWebInput.getvalue
elif isCgi and src == 'c':
raise RuntimeError("can't get cookies from a CGI script")
elif isCgi and src == 's':
raise RuntimeError("can't get session variables from a CGI script")
elif isCgi and src == 'v':
- source, func = 'value', self.request().value
+ source, func = 'value', self.request().value
elif isCgi and src == 's':
source, func = 'session', self.request().session().value
elif src == 'f':
- source, func = 'field', self.request().field
+ source, func = 'field', self.request().field
elif src == 'c':
- source, func = 'cookie', self.request().cookie
+ source, func = 'cookie', self.request().cookie
elif src == 'v':
- source, func = 'value', self.request().value
+ source, func = 'value', self.request().value
elif src == 's':
source, func = 'session', self.request().session().value # noqa: E501,F841
else:
raise TypeError("arg 'src' invalid")
converters = {
- '': _Converter('string', None, default, default),
- 'int': _Converter('int', int, defaultInt, badInt),
+ '': _Converter('string', None, default, default),
+ 'int': _Converter('int', int, defaultInt, badInt),
'float': _Converter('float', float, defaultFloat, badFloat),
}
# pprint.pprint(locals()); return {}
@@ -1986,15 +1987,15 @@ def genParserErrorFromPythonException(source, file,
prevLines = [] # (i, content)
for i in range(1, 4):
- if pyLineno-i <= 0:
+ if pyLineno - i <= 0:
break
- prevLines.append((pyLineno+1-i, lines[pyLineno-i]))
+ prevLines.append((pyLineno + 1 - i, lines[pyLineno - i]))
nextLines = [] # (i, content)
for i in range(1, 4):
- if not pyLineno+i < len(lines):
+ if not pyLineno + i < len(lines):
break
- nextLines.append((pyLineno+i, lines[pyLineno+i]))
+ nextLines.append((pyLineno + i, lines[pyLineno + i]))
nextLines.reverse()
report = 'Line|Python Code\n'
report += '----|--------------------------' \
@@ -2005,7 +2006,7 @@ def genParserErrorFromPythonException(source, file,
% {'row': lineInfo[0], 'line': lineInfo[1]}
if hasattr(exception, 'offset'):
- report += ' '*(3+(exception.offset or 0)) + '^\n'
+ report += ' '*(3 + (exception.offset or 0)) + '^\n' # noqa: E226,E501 missing whitespace around operator
while nextLines:
lineInfo = nextLines.pop()
@@ -2014,13 +2015,13 @@ def genParserErrorFromPythonException(source, file,
message = [
"Error in the Python code which Cheetah generated for this template:",
- '='*80,
+ '='*80, # noqa: E226 missing whitespace around operator
'',
str(exception),
'',
report,
- '='*80,
- ]
+ '='*80, # noqa: E226 missing whitespace around operator
+ ]
cheetahPosMatch = re.search('line (\d+), col (\d+)', formatedExc)
if cheetahPosMatch:
lineno = int(cheetahPosMatch.group(1))
@@ -2032,7 +2033,7 @@ def genParserErrorFromPythonException(source, file,
lineno = None
col = None
cheetahPosMatch = re.search('line (\d+), col (\d+)',
- '\n'.join(lines[max(pyLineno-2, 0):]))
+ '\n'.join(lines[max(pyLineno - 2, 0):]))
if cheetahPosMatch:
lineno = int(cheetahPosMatch.group(1))
col = int(cheetahPosMatch.group(2))
diff --git a/Cheetah/TemplateCmdLineIface.py b/Cheetah/TemplateCmdLineIface.py
index 17c8be5..eef0f2d 100644
--- a/Cheetah/TemplateCmdLineIface.py
+++ b/Cheetah/TemplateCmdLineIface.py
@@ -36,7 +36,7 @@ class CmdLineIface:
try:
self._opts, self._args = getopt.getopt(
self._cmdLineArgs, 'h', ['help', 'env', 'pickle=']
- )
+ )
except getopt.GetoptError as v:
# print help information and exit:
diff --git a/Cheetah/Templates/_SkeletonPage.py b/Cheetah/Templates/_SkeletonPage.py
index 085d625..1e0fcc5 100644
--- a/Cheetah/Templates/_SkeletonPage.py
+++ b/Cheetah/Templates/_SkeletonPage.py
@@ -38,7 +38,7 @@ class _SkeletonPage(Template):
'Content-Type': 'text/html; charset=iso-8859-1',
},
'NAME': {
- 'generator': 'Cheetah: The Python-Powered Template Engine'
+ 'generator': 'Cheetah: The Python-Powered Template Engine'
}
}
# metaTags = {
diff --git a/Cheetah/Tests/Filters.py b/Cheetah/Tests/Filters.py
index 23d2ebb..c973887 100755
--- a/Cheetah/Tests/Filters.py
+++ b/Cheetah/Tests/Filters.py
@@ -28,7 +28,7 @@ Header
except ImportError as ex:
print('>>> We probably failed to import markdown, bummer %s' % ex)
return
- except Exception as ex:
+ except Exception:
raise
diff --git a/Cheetah/Tests/ImportHooks.py b/Cheetah/Tests/ImportHooks.py
new file mode 100755
index 0000000..fb631ce
--- /dev/null
+++ b/Cheetah/Tests/ImportHooks.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+
+from glob import glob
+import os
+import shutil
+import sys
+import unittest
+import Cheetah.ImportHooks
+
+
+ImportHooksTemplatesDir = os.path.join(
+ os.path.dirname(__file__), 'ImportHooksTemplates')
+
+
+def setUpModule():
+ sys.path.append(ImportHooksTemplatesDir)
+
+
+def tearDownModule():
+ assert sys.path[-1] == ImportHooksTemplatesDir
+ del sys.path[-1]
+
+
+def _cleanup():
+ py_files = os.path.join(ImportHooksTemplatesDir, '*.py')
+ pyc_files = py_files + 'c'
+ for fname in glob(py_files) + glob(pyc_files):
+ os.remove(fname)
+ __pycache__ = os.path.join(ImportHooksTemplatesDir, '__pycache__')
+ if os.path.isdir(__pycache__):
+ shutil.rmtree(__pycache__)
+
+ for modname in list(sys.modules.keys()):
+ if '.ImportHooksTemplates.' in modname \
+ or modname.endswith('.ImportHooksTemplates'):
+ del sys.modules[modname]
+
+ for modname in 'index', 'layout':
+ if modname in sys.modules:
+ del sys.modules[modname]
+
+
+def _exec(code, _dict):
+ exec(code, _dict)
+
+
+class ImportHooksTest(unittest.TestCase):
+ def setUp(self):
+ _cleanup()
+
+ def test_CheetahDirOwner(self):
+ templates = list(sorted(os.listdir(ImportHooksTemplatesDir)))
+ self.assertListEqual(templates, ['index.tmpl', 'layout.tmpl'])
+
+ cdo = Cheetah.ImportHooks.CheetahDirOwner(ImportHooksTemplatesDir)
+ index_mod = cdo.getmod('index')
+ templates = os.listdir(ImportHooksTemplatesDir)
+ self.assertIn('index.py', templates)
+ self.assertNotIn('layout.py', templates)
+
+ index_co = index_mod.__co__
+ del index_mod.__co__
+ self.assertRaises(ImportError, _exec, index_co, index_mod.__dict__)
+
+ cdo.getmod('layout') # Compiled to layout.py and .pyc
+ self.assertIn('layout.py', os.listdir(ImportHooksTemplatesDir))
+
+ def test_ImportHooks(self):
+ templates = os.listdir(ImportHooksTemplatesDir)
+ self.assertNotIn('index.py', templates)
+ self.assertNotIn('layout.py', templates)
+ Cheetah.ImportHooks.install()
+ from index import index # noqa
+ templates = os.listdir(ImportHooksTemplatesDir)
+ self.assertIn('index.py', templates)
+ self.assertIn('layout.py', templates)
+ Cheetah.ImportHooks.uninstall()
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Cheetah/Tests/ImportHooksTemplates/index.tmpl b/Cheetah/Tests/ImportHooksTemplates/index.tmpl
new file mode 100644
index 0000000..9dd4ee3
--- /dev/null
+++ b/Cheetah/Tests/ImportHooksTemplates/index.tmpl
@@ -0,0 +1,5 @@
+#extends layout
+#attr $title = 'Index'
+#def body
+<h1>Index</h1>
+#end def
diff --git a/Cheetah/Tests/ImportHooksTemplates/layout.tmpl b/Cheetah/Tests/ImportHooksTemplates/layout.tmpl
new file mode 100644
index 0000000..d632430
--- /dev/null
+++ b/Cheetah/Tests/ImportHooksTemplates/layout.tmpl
@@ -0,0 +1,16 @@
+#attr $title = ''
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- THIS PAGE IS AUTOMATICALLY GENERATED USING CheetahTemplate. DO NOT EDIT. -->
+<head>
+<title>$title</title>
+<meta name="author" content="Oleg Broytman">
+<meta name="copyright" content="&copy; 2018 PhiloSoft Design">
+<link rev="made" href="mailto:phd@phdru.name">
+<meta name="generator" content="CheetahTemplate">
+</head>
+<body>
+$body
+</body>
+</html>
diff --git a/Cheetah/Tests/LoadTemplate.py b/Cheetah/Tests/LoadTemplate.py
new file mode 100755
index 0000000..c656d8b
--- /dev/null
+++ b/Cheetah/Tests/LoadTemplate.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+
+import os
+import unittest
+import Cheetah.ImportHooks
+from Cheetah.LoadTemplate import loadTemplateClass
+from Cheetah.Tests.ImportHooks import ImportHooksTemplatesDir, _cleanup
+from Cheetah.Tests.ImportHooks import setUpModule, tearDownModule # noqa
+
+
+class LoadTemplateTest(unittest.TestCase):
+ def setUp(self):
+ _cleanup()
+
+ def test_loadTemplate(self):
+ templates = os.listdir(ImportHooksTemplatesDir)
+ self.assertNotIn('index.py', templates)
+ self.assertNotIn('layout.py', templates)
+
+ self.assertRaises(ImportError, loadTemplateClass,
+ os.path.join(ImportHooksTemplatesDir, 'index.tmpl'))
+
+ templates = os.listdir(ImportHooksTemplatesDir)
+ self.assertIn('index.py', templates)
+ self.assertNotIn('layout.py', templates)
+
+ loadTemplateClass(
+ os.path.join(ImportHooksTemplatesDir, 'layout.tmpl'))
+
+ templates = os.listdir(ImportHooksTemplatesDir)
+ self.assertIn('index.py', templates)
+ self.assertIn('layout.py', templates)
+
+ loadTemplateClass(
+ os.path.join(ImportHooksTemplatesDir, 'index.tmpl'))
+
+ def test_ImportHooks(self):
+ templates = os.listdir(ImportHooksTemplatesDir)
+ self.assertNotIn('index.py', templates)
+ self.assertNotIn('layout.py', templates)
+
+ Cheetah.ImportHooks.install()
+ loadTemplateClass(
+ os.path.join(ImportHooksTemplatesDir, 'index.tmpl'))
+ templates = os.listdir(ImportHooksTemplatesDir)
+ self.assertIn('index.py', templates)
+ self.assertIn('layout.py', templates)
+ Cheetah.ImportHooks.uninstall()
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/Cheetah/Tests/NameMapper.py b/Cheetah/Tests/NameMapper.py
index 7a635ee..6066b6c 100755
--- a/Cheetah/Tests/NameMapper.py
+++ b/Cheetah/Tests/NameMapper.py
@@ -4,8 +4,8 @@ import sys
import unittest
from Cheetah.NameMapper import NotFound, \
- valueForName, valueFromSearchList, valueFromFrame, \
- valueFromFrameOrSearchList
+ valueForName, valueFromSearchList, valueFromFrame, \
+ valueFromFrameOrSearchList
class DummyClass(object):
@@ -76,7 +76,7 @@ testNamespace = {
'none': None,
'emptyString': '',
'funcThatRaises': funcThatRaises,
- }
+}
autoCallResults = {'aFunc': 'Scooby',
'aMeth': 'doo',
diff --git a/Cheetah/Tests/NameMapper_pure.py b/Cheetah/Tests/NameMapper_pure.py
index 2a26e3a..307882a 100755
--- a/Cheetah/Tests/NameMapper_pure.py
+++ b/Cheetah/Tests/NameMapper_pure.py
@@ -11,10 +11,7 @@ except ImportError:
pass
-def setUpModule():
- if 'Cheetah.NameMapper' in sys.modules:
- del sys.modules['Cheetah.NameMapper']
- sys.modules['Cheetah._namemapper'] = None
+def _setNameMapperFunctions():
from Cheetah.NameMapper import NotFound, \
valueForName, valueFromSearchList, valueFromFrame, \
valueFromFrameOrSearchList
@@ -26,10 +23,18 @@ def setUpModule():
setattr(NameMapper, func.__name__, func)
+def setUpModule():
+ if 'Cheetah.NameMapper' in sys.modules:
+ del sys.modules['Cheetah.NameMapper']
+ sys.modules['Cheetah._namemapper'] = None # emulate absence of the module
+ _setNameMapperFunctions()
+
+
def tearDownModule():
del sys.modules['Cheetah.NameMapper']
del sys.modules['Cheetah._namemapper']
del sys.modules['Cheetah.Tests.NameMapper']
+ _setNameMapperFunctions() # restore NameMapper
class NameMapperTest(unittest.TestCase):
diff --git a/Cheetah/Tests/Performance.py b/Cheetah/Tests/Performance.py
index 25272f4..e07dcee 100755
--- a/Cheetah/Tests/Performance.py
+++ b/Cheetah/Tests/Performance.py
@@ -20,7 +20,7 @@ DEBUG = False
# TOLERANCE in Pystones
kPS = 1000
-TOLERANCE = 0.5*kPS
+TOLERANCE = 0.5*kPS # noqa: E226 missing whitespace around operator
class DurationError(AssertionError):
diff --git a/Cheetah/Tests/Regressions.py b/Cheetah/Tests/Regressions.py
index c38c113..b380e6d 100755
--- a/Cheetah/Tests/Regressions.py
+++ b/Cheetah/Tests/Regressions.py
@@ -24,7 +24,7 @@ class GetAttrTest(unittest.TestCase):
o = CustomGetAttrClass()
try:
print(o.attr)
- except GetAttrException as e:
+ except GetAttrException:
# expected
return
except Exception as e:
diff --git a/Cheetah/Tests/SyntaxAndOutput.py b/Cheetah/Tests/SyntaxAndOutput.py
index dc14ec3..66b6825 100755
--- a/Cheetah/Tests/SyntaxAndOutput.py
+++ b/Cheetah/Tests/SyntaxAndOutput.py
@@ -99,12 +99,12 @@ defaultTestNameSpace = {
'list': [
{'index': 0, 'numOne': 1, 'numTwo': 2},
{'index': 1, 'numOne': 1, 'numTwo': 2},
- ],
+ ],
'nameList': [('john', 'doe'), ('jane', 'smith')],
'letterList': ['a', 'b', 'c'],
'_': lambda x: 'Translated: ' + x,
'unicodeData': u'aoeu12345\u1234',
- }
+}
##################################################
@@ -159,7 +159,7 @@ Template output mismatch:
compilerSettings=self._getCompilerSettings(),
keepRefToGeneratedCode=True,
**extraKwArgs
- )
+ )
moduleCode = templateClass._CHEETAH_generatedModuleCode
searchList = self.searchList() or self._searchList
self.template = templateObj = templateClass(searchList=searchList)
@@ -168,7 +168,7 @@ Template output mismatch:
input,
searchList=self.searchList(),
compilerSettings=self._getCompilerSettings(),
- )
+ )
moduleCode = templateObj._CHEETAH_generatedModuleCode
if self.DEBUGLEV >= 1:
print("Module: %s" % templateObj.__module__)
@@ -631,16 +631,16 @@ class Placeholders(OutputTest):
assert str(tmpl({'names': names})).strip() == namesStr
tmpl = tmpl.subclass('#for name in $names: $*name ')
- assert str(tmpl({'names': names})) == 'You '*len(names)
+ assert str(tmpl({'names': names})) == 'You ' * len(names)
tmpl = tmpl.subclass('#for name in $names: $*1*name ')
- assert str(tmpl({'names': names})) == 'You '*len(names)
+ assert str(tmpl({'names': names})) == 'You ' * len(names)
tmpl = tmpl.subclass('#for name in $names: $*1*(name) ')
- assert str(tmpl({'names': names})) == 'You '*len(names)
+ assert str(tmpl({'names': names})) == 'You ' * len(names)
tmpl = tmpl.subclass('#for name in $names: $*1*(name) ')
- assert str(tmpl(names=names)) == 'You '*len(names)
+ assert str(tmpl(names=names)) == 'You ' * len(names)
class Placeholders_Vals(OutputTest):
@@ -1130,7 +1130,7 @@ $i#slurp
$aStr#slurp
#end def
$foo$foo$foo$foo$foo""",
- "1\n01234blarg"*5)
+ "1\n01234blarg"*5) # noqa: E226,E501 missing whitespace around operator
def test5(self):
r"""nested #cache blocks"""
@@ -1148,7 +1148,7 @@ $*(6)#slurp
$aStr#slurp
#end def
$foo$foo$foo$foo$foo""",
- "1\n012346blarg"*5)
+ "1\n012346blarg"*5) # noqa: E226,E501 missing whitespace around operator
def test6(self):
r"""Make sure that partial directives don't match"""
@@ -1652,8 +1652,8 @@ class ForDirective(OutputTest):
def test15(self):
"""2 times single line #for"""
- self.verify("#for $i in range($aFunc(5)): $i#slurp\n"*2,
- "01234"*2)
+ self.verify("#for $i in range($aFunc(5)): $i#slurp\n"*2, # noqa: E226,E501 missing whitespace around operator
+ "01234"*2) # noqa: E226 missing whitespace around operator
def test16(self):
"""false single line #for """
@@ -1700,8 +1700,8 @@ class RepeatDirective(OutputTest):
"""single-line #repeat"""
self.verify("#repeat $numTwo: 1",
"11")
- self.verify("#repeat $numTwo: 1\n"*2,
- "1\n1\n"*2)
+ self.verify("#repeat $numTwo: 1\n"*2, # noqa: E226,E501 missing whitespace around operator
+ "1\n1\n"*2) # noqa: E226,E501 missing whitespace around operator
# false single-line
self.verify("#repeat 3: \n1\n#end repeat",
@@ -2434,7 +2434,7 @@ class UnlessDirective(OutputTest):
"""single-line #unless"""
self.verify("#unless 1: 1234", "")
self.verify("#unless 0: 1234", "1234")
- self.verify("#unless 0: 1234\n"*2, "1234\n"*2)
+ self.verify("#unless 0: 1234\n"*2, "1234\n"*2) # noqa: E226,E501 missing whitespace around operator
class PSP(OutputTest):
@@ -2443,7 +2443,7 @@ class PSP(OutputTest):
def test1(self):
"""simple <%= [int] %>"""
- self.verify("<%= 1234 %>", "1234")
+ self.verify("<%= 1234 %>", "1234")
def test2(self):
"""simple <%= [string] %>"""
diff --git a/Cheetah/Tests/Template.py b/Cheetah/Tests/Template.py
index 69461be..4316e6c 100755
--- a/Cheetah/Tests/Template.py
+++ b/Cheetah/Tests/Template.py
@@ -256,7 +256,7 @@ class Preprocessors(TemplateTest):
t = klass({'string': 'bit of text'})
# print str(t), repr(str(t))
assert str(t) == (
- 'This is a bit of text that needs translation\n'*2)[:-1]
+ 'This is a bit of text that needs translation\n'*2)[:-1] # noqa: E226,E501 missing whitespace around operator
class TryExceptImportTest(TemplateTest):
diff --git a/Cheetah/Tests/Test.py b/Cheetah/Tests/Test.py
index 3464081..d1a07dd 100755
--- a/Cheetah/Tests/Test.py
+++ b/Cheetah/Tests/Test.py
@@ -14,33 +14,37 @@ TODO
import sys
import unittest
-from Cheetah.Tests import SyntaxAndOutput
+from Cheetah.Tests import Analyzer
+from Cheetah.Tests import CheetahWrapper
+# from Cheetah.Tests import Cheps
+from Cheetah.Tests import Filters
+from Cheetah.Tests import ImportHooks
+from Cheetah.Tests import LoadTemplate
+from Cheetah.Tests import Misc
from Cheetah.Tests import NameMapper
from Cheetah.Tests import NameMapper_pure
-from Cheetah.Tests import Misc
-from Cheetah.Tests import Filters
-from Cheetah.Tests import Template
-# from Cheetah.Tests import Cheps
from Cheetah.Tests import Parser
from Cheetah.Tests import Regressions
+from Cheetah.Tests import SyntaxAndOutput
+from Cheetah.Tests import Template
from Cheetah.Tests import Unicode
-from Cheetah.Tests import CheetahWrapper
-from Cheetah.Tests import Analyzer
SyntaxAndOutput.install_eols()
suites = [
- unittest.findTestCases(SyntaxAndOutput),
- unittest.findTestCases(NameMapper),
- unittest.findTestCases(NameMapper_pure),
- unittest.findTestCases(Filters),
- unittest.findTestCases(Template),
- # unittest.findTestCases(Cheps),
- unittest.findTestCases(Regressions),
- unittest.findTestCases(Unicode),
- unittest.findTestCases(Misc),
- unittest.findTestCases(Parser),
- unittest.findTestCases(Analyzer),
+ unittest.findTestCases(Analyzer),
+ # unittest.findTestCases(Cheps),
+ unittest.findTestCases(Filters),
+ unittest.findTestCases(ImportHooks),
+ unittest.findTestCases(LoadTemplate),
+ unittest.findTestCases(Misc),
+ unittest.findTestCases(NameMapper),
+ unittest.findTestCases(Parser),
+ unittest.findTestCases(Regressions),
+ unittest.findTestCases(SyntaxAndOutput),
+ unittest.findTestCases(Template),
+ unittest.findTestCases(Unicode),
+ unittest.findTestCases(NameMapper_pure),
]
if not sys.platform.startswith('java'):
diff --git a/Cheetah/Tests/Unicode.py b/Cheetah/Tests/Unicode.py
index c574195..77ade04 100755
--- a/Cheetah/Tests/Unicode.py
+++ b/Cheetah/Tests/Unicode.py
@@ -8,6 +8,7 @@ import sys
from shutil import rmtree
import tempfile
import unittest
+from Cheetah.Compiler import Compiler
from Cheetah.Template import Template
from Cheetah import CheetahWrapper
from Cheetah.compat import PY2, unicode
@@ -215,7 +216,7 @@ class Unicode_in_SearchList_Test(CommandLineTest):
'adjective':
u'\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15'
u'\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a'
- }])
+ }])
assert template.respond()
def test_Thai_utf8(self):
@@ -272,5 +273,16 @@ class InlineSpanishTest(unittest.TestCase):
self.assertTrue(unicode(template))
+class CompilerTest(unittest.TestCase):
+ def test_compiler_str(self):
+ """ Test Compiler.__str__ """
+ source = """#encoding utf-8
+#set $someUnicodeString = u"Bébé"
+$someUnicodeString"""
+ compiler = Compiler(source)
+ self.assertIsInstance(str(compiler), str)
+ self.assertEqual(compiler.getModuleEncoding(), 'utf-8')
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/Cheetah/Tests/xmlrunner.py b/Cheetah/Tests/xmlrunner.py
index 9668d8d..2748bb4 100644
--- a/Cheetah/Tests/xmlrunner.py
+++ b/Cheetah/Tests/xmlrunner.py
@@ -58,8 +58,8 @@ class _TestInfo(object):
stream.write(
' <%s type="%s">%s\n'
% (tagname,
- issubclass(error[0], Exception) and
- error[0].__name__ or str(error[0]), text))
+ issubclass(error[0], Exception)
+ and error[0].__name__ or str(error[0]), text))
tb_stream = StringIO()
traceback.print_tb(error[2], None, tb_stream)
stream.write(escape(tb_stream.getvalue()))
diff --git a/Cheetah/Tools/MondoReport.py b/Cheetah/Tools/MondoReport.py
index bc7d476..e76de91 100644
--- a/Cheetah/Tools/MondoReport.py
+++ b/Cheetah/Tools/MondoReport.py
@@ -102,7 +102,7 @@ def mean(lis):
def median(lis):
lis = sorted(lis[:])
- return lis[int(len(lis)/2)]
+ return lis[int(len(lis)/2)] # noqa: E226,E501 missing whitespace around operator
def variance(lis):
@@ -320,9 +320,9 @@ class RecordStats(IndexFormats, ValuesGetterMixin):
start = 1
else:
start = 1
- end = start+size-1
+ end = start + size - 1
try:
- sequence[end+orphan-1]
+ sequence[end + orphan - 1]
except Exception:
end = len(sequence)
# if l - end < orphan: end=l
diff --git a/Cheetah/Tools/SiteHierarchy.py b/Cheetah/Tools/SiteHierarchy.py
index a1c6f73..3416ca0 100644
--- a/Cheetah/Tools/SiteHierarchy.py
+++ b/Cheetah/Tools/SiteHierarchy.py
@@ -92,11 +92,11 @@ class Hierarchy:
def menuLink(self, url, text, indent):
if url == self._currentURL or self._prefix + url == self._currentURL:
- return '%s<B%s>%s</B> <BR>\n' % ('&nbsp;'*2*indent,
+ return '%s<B%s>%s</B> <BR>\n' % ('&nbsp;' * 2 * indent,
self._menuCSSClass, text)
else:
return '%s<A HREF="%s%s"%s>%s</A> <BR>\n' % \
- ('&nbsp;'*2*indent, self._prefix, url,
+ ('&nbsp;'*2*indent, self._prefix, url, # noqa: E226,E501 missing whitespace around operator
self._menuCSSClass, text)
def crumbLink(self, url, text):
@@ -128,7 +128,7 @@ class Hierarchy:
stream.write(self.menuLink(url, text, indent))
if self._inContents(contents):
for item in rest:
- self._menubarRecurse(item, indent+1, stream)
+ self._menubarRecurse(item, indent + 1, stream)
def _inContents(self, contents):
if isinstance(contents, tuple):
@@ -154,13 +154,13 @@ if __name__ == '__main__':
('/services/prices', 'Prices'),
],
('/contact', 'Contact Us'),
- ]
+ ]
for url in ['/', '/services', '/services/products/widget', '/contact']:
- print('<p>', '='*50)
+ print('<p>', '='*50) # noqa: E226 missing whitespace around operator
print('<br> %s: <br>\n' % url)
n = Hierarchy(hierarchy, url, menuCSSClass='menu',
crumbCSSClass='crumb', prefix='/here')
print(n.menuList())
- print('<p>', '-'*50)
+ print('<p>', '-'*50) # noqa: E226 missing whitespace around operator
print(n.crumbs())
diff --git a/Cheetah/Tools/turbocheetah/cheetahsupport.py b/Cheetah/Tools/turbocheetah/cheetahsupport.py
index b7e77c3..6510896 100644
--- a/Cheetah/Tools/turbocheetah/cheetahsupport.py
+++ b/Cheetah/Tools/turbocheetah/cheetahsupport.py
@@ -66,7 +66,7 @@ class TurboCheetah:
divider = classname.rfind(".")
if divider > -1:
package = classname[0:divider]
- basename = classname[divider+1:]
+ basename = classname[divider+1:] # noqa: E226,E501 missing whitespace around operator
else:
raise ValueError("All templates must be in a package")
diff --git a/Cheetah/Tools/turbocheetah/tests/test_template.py b/Cheetah/Tools/turbocheetah/tests/test_template.py
index 045e5f9..50847c5 100644
--- a/Cheetah/Tools/turbocheetah/tests/test_template.py
+++ b/Cheetah/Tools/turbocheetah/tests/test_template.py
@@ -6,7 +6,7 @@ here = os.path.dirname(__file__)
values = {
'v': 'VV',
'one': 1,
- }
+}
def test_normal():
diff --git a/Cheetah/Utils/WebInputMixin.py b/Cheetah/Utils/WebInputMixin.py
index 12af587..9c06c08 100644
--- a/Cheetah/Utils/WebInputMixin.py
+++ b/Cheetah/Utils/WebInputMixin.py
@@ -39,7 +39,7 @@ def _lookup(name, func, multi, converters):
colon = name.find(':')
if colon != -1:
longName = name
- shortName, ext = name[:colon], name[colon+1:]
+ shortName, ext = name[:colon], name[colon+1:] # noqa: E226,E501 missing whitespace around operator
else:
longName = shortName = name
ext = ''
diff --git a/Cheetah/Utils/statprof.py b/Cheetah/Utils/statprof.py
index d26896c..b0f97dc 100644
--- a/Cheetah/Utils/statprof.py
+++ b/Cheetah/Utils/statprof.py
@@ -163,10 +163,10 @@ class ProfileState(object):
self.sample_count = 0
# a float
if frequency:
- self.sample_interval = 1.0/frequency
+ self.sample_interval = 1.0 / frequency
elif not hasattr(self, 'sample_interval'):
# default to 100 Hz
- self.sample_interval = 1.0/100.0
+ self.sample_interval = 1.0 / 100.0
else:
# leave the frequency as it was
pass
diff --git a/Cheetah/Version.py b/Cheetah/Version.py
index 01c6e1b..3ba1a4f 100644
--- a/Cheetah/Version.py
+++ b/Cheetah/Version.py
@@ -1,5 +1,5 @@
-Version = '3.1.0'
-VersionTuple = (3, 1, 0, 'final', 1)
+Version = '3.2.0'
+VersionTuple = (3, 2, 0, 'final', 0)
MinCompatibleVersion = '3.0.0a1'
MinCompatibleVersionTuple = (3, 0, 0, 'alpha', 1)
@@ -29,7 +29,7 @@ def convertVersionStringToTuple(s):
versionNum += [0]
releaseTypeSubNum = int(releaseTypeSubNum)
- return tuple(versionNum+[releaseType, releaseTypeSubNum])
+ return tuple(versionNum + [releaseType, releaseTypeSubNum])
if __name__ == '__main__':
diff --git a/Cheetah3.egg-info/PKG-INFO b/Cheetah3.egg-info/PKG-INFO
index 9028fc1..5552c9b 100644
--- a/Cheetah3.egg-info/PKG-INFO
+++ b/Cheetah3.egg-info/PKG-INFO
@@ -1,13 +1,20 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: Cheetah3
-Version: 3.1.0
+Version: 3.2.0
Summary: Cheetah is a template engine and code generation tool
Home-page: http://cheetahtemplate.org/
-Author: Oleg Broytman
-Author-email: phd@phdru.name
+Author: Tavis Rudd
+Author-email: tavis@damnsimple.com
+Maintainer: Oleg Broytman
+Maintainer-email: phd@phdru.name
License: MIT
-Download-URL: https://pypi.python.org/pypi/Cheetah3/3.1.0
-Description-Content-Type: UNKNOWN
+Download-URL: https://pypi.org/project/Cheetah3/3.2.0
+Project-URL: Wikipedia, https://en.wikipedia.org/wiki/CheetahTemplate
+Project-URL: Documentation, http://cheetahtemplate.org/users_guide/index.html
+Project-URL: Github repo, https://github.com/CheetahTemplate3
+Project-URL: Issue tracker, https://github.com/CheetahTemplate3/cheetah3/issues
+Project-URL: Download, https://pypi.org/project/Cheetah3/3.2.0/
+Project-URL: Homepage, http://cheetahtemplate.org/
Description: Cheetah3 is a free (BSD-style) and open source template engine and code
generation tool.
@@ -47,10 +54,10 @@ Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
@@ -58,3 +65,5 @@ Classifier: Topic :: Software Development :: Code Generators
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: User Interfaces
Classifier: Topic :: Text Processing
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
+Description-Content-Type: text/x-rst
diff --git a/Cheetah3.egg-info/SOURCES.txt b/Cheetah3.egg-info/SOURCES.txt
index daacb8a..33f0fde 100644
--- a/Cheetah3.egg-info/SOURCES.txt
+++ b/Cheetah3.egg-info/SOURCES.txt
@@ -23,6 +23,7 @@ Cheetah/FileUtils.py
Cheetah/Filters.py
Cheetah/ImportHooks.py
Cheetah/ImportManager.py
+Cheetah/LoadTemplate.py
Cheetah/NameMapper.py
Cheetah/Parser.py
Cheetah/Servlet.py
@@ -46,6 +47,8 @@ Cheetah/Tests/Boinker.py
Cheetah/Tests/CheetahWrapper.py
Cheetah/Tests/Cheps.py
Cheetah/Tests/Filters.py
+Cheetah/Tests/ImportHooks.py
+Cheetah/Tests/LoadTemplate.py
Cheetah/Tests/Misc.py
Cheetah/Tests/NameMapper.py
Cheetah/Tests/NameMapper_pure.py
@@ -59,6 +62,8 @@ Cheetah/Tests/Test.py
Cheetah/Tests/Unicode.py
Cheetah/Tests/__init__.py
Cheetah/Tests/xmlrunner.py
+Cheetah/Tests/ImportHooksTemplates/index.tmpl
+Cheetah/Tests/ImportHooksTemplates/layout.tmpl
Cheetah/Tools/CGITemplate.py
Cheetah/Tools/MondoReport.py
Cheetah/Tools/MondoReportDoc.txt
@@ -168,295 +173,24 @@ docs/api/modules.rst
docs/cheps/1_chep.rst
docs/cheps/2_import.rst
docs/cheps/3_super.rst
-docs/dev_guide/bnf.rst
docs/dev_guide/cache.rst
docs/dev_guide/comments.rst
-docs/dev_guide/compiler.rst
docs/dev_guide/design.rst
docs/dev_guide/errorHandling.rst
-docs/dev_guide/files.rst
docs/dev_guide/flowControl.rst
docs/dev_guide/history.rst
docs/dev_guide/index.rst
docs/dev_guide/inheritanceEtc.rst
docs/dev_guide/introduction.rst
docs/dev_guide/output.rst
-docs/dev_guide/parser.rst
docs/dev_guide/parserInstructions.rst
docs/dev_guide/patching.rst
docs/dev_guide/placeholders.rst
docs/dev_guide/pyModules.rst
docs/dev_guide/safeDelegation.rst
-docs/dev_guide/template.rst
-docs/html/authors.html
-docs/html/chep.html
-docs/html/developers.html
-docs/html/documentation.html
-docs/html/download.html
-docs/html/genindex.html
-docs/html/index.html
-docs/html/news.html
-docs/html/news2.html
-docs/html/py-modindex.html
-docs/html/roadmap.html
-docs/html/search.html
-docs/html/searchindex.js
-docs/html/_sources/authors.rst.txt
-docs/html/_sources/chep.rst.txt
-docs/html/_sources/developers.rst.txt
-docs/html/_sources/documentation.rst.txt
-docs/html/_sources/download.rst.txt
-docs/html/_sources/index.rst.txt
-docs/html/_sources/news.rst.txt
-docs/html/_sources/news2.rst.txt
-docs/html/_sources/roadmap.rst.txt
-docs/html/_sources/api/Cheetah.CacheRegion.rst.txt
-docs/html/_sources/api/Cheetah.CacheStore.rst.txt
-docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt
-docs/html/_sources/api/Cheetah.Compiler.rst.txt
-docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt
-docs/html/_sources/api/Cheetah.Django.rst.txt
-docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt
-docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt
-docs/html/_sources/api/Cheetah.FileUtils.rst.txt
-docs/html/_sources/api/Cheetah.Filters.rst.txt
-docs/html/_sources/api/Cheetah.ImportHooks.rst.txt
-docs/html/_sources/api/Cheetah.ImportManager.rst.txt
-docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt
-docs/html/_sources/api/Cheetah.Macros.rst.txt
-docs/html/_sources/api/Cheetah.NameMapper.rst.txt
-docs/html/_sources/api/Cheetah.Parser.rst.txt
-docs/html/_sources/api/Cheetah.Servlet.rst.txt
-docs/html/_sources/api/Cheetah.SettingsManager.rst.txt
-docs/html/_sources/api/Cheetah.SourceReader.rst.txt
-docs/html/_sources/api/Cheetah.Template.rst.txt
-docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt
-docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt
-docs/html/_sources/api/Cheetah.Templates.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt
-docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt
-docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt
-docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt
-docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Template.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Test.rst.txt
-docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt
-docs/html/_sources/api/Cheetah.Tests.rst.txt
-docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt
-docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt
-docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt
-docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt
-docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt
-docs/html/_sources/api/Cheetah.Tools.rst.txt
-docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt
-docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt
-docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt
-docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt
-docs/html/_sources/api/Cheetah.Unspecified.rst.txt
-docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt
-docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt
-docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt
-docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt
-docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt
-docs/html/_sources/api/Cheetah.Utils.rst.txt
-docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt
-docs/html/_sources/api/Cheetah.Version.rst.txt
-docs/html/_sources/api/Cheetah.compat.rst.txt
-docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt
-docs/html/_sources/api/Cheetah.rst.txt
-docs/html/_sources/api/modules.rst.txt
-docs/html/_sources/cheps/1_chep.rst.txt
-docs/html/_sources/cheps/2_import.rst.txt
-docs/html/_sources/cheps/3_super.rst.txt
-docs/html/_sources/dev_guide/bnf.rst.txt
-docs/html/_sources/dev_guide/cache.rst.txt
-docs/html/_sources/dev_guide/comments.rst.txt
-docs/html/_sources/dev_guide/compiler.rst.txt
-docs/html/_sources/dev_guide/design.rst.txt
-docs/html/_sources/dev_guide/errorHandling.rst.txt
-docs/html/_sources/dev_guide/files.rst.txt
-docs/html/_sources/dev_guide/flowControl.rst.txt
-docs/html/_sources/dev_guide/history.rst.txt
-docs/html/_sources/dev_guide/index.rst.txt
-docs/html/_sources/dev_guide/inheritanceEtc.rst.txt
-docs/html/_sources/dev_guide/introduction.rst.txt
-docs/html/_sources/dev_guide/output.rst.txt
-docs/html/_sources/dev_guide/parser.rst.txt
-docs/html/_sources/dev_guide/parserInstructions.rst.txt
-docs/html/_sources/dev_guide/patching.rst.txt
-docs/html/_sources/dev_guide/placeholders.rst.txt
-docs/html/_sources/dev_guide/pyModules.rst.txt
-docs/html/_sources/dev_guide/safeDelegation.rst.txt
-docs/html/_sources/dev_guide/template.rst.txt
-docs/html/_sources/recipes/inheritance.rst.txt
-docs/html/_sources/recipes/precompiled.rst.txt
-docs/html/_sources/recipes/staticmethod.rst.txt
-docs/html/_sources/recipes/writing_a_recipe.rst.txt
-docs/html/_sources/users_guide/comments.rst.txt
-docs/html/_sources/users_guide/comparisons.rst.txt
-docs/html/_sources/users_guide/editors.rst.txt
-docs/html/_sources/users_guide/errorHandling.rst.txt
-docs/html/_sources/users_guide/examples.rst.txt
-docs/html/_sources/users_guide/flowControl.rst.txt
-docs/html/_sources/users_guide/gettingStarted.rst.txt
-docs/html/_sources/users_guide/glossary.rst.txt
-docs/html/_sources/users_guide/index.rst.txt
-docs/html/_sources/users_guide/inheritanceEtc.rst.txt
-docs/html/_sources/users_guide/intro.rst.txt
-docs/html/_sources/users_guide/language.rst.txt
-docs/html/_sources/users_guide/libraries.rst.txt
-docs/html/_sources/users_guide/links.rst.txt
-docs/html/_sources/users_guide/nonHtml.rst.txt
-docs/html/_sources/users_guide/otherHtml.rst.txt
-docs/html/_sources/users_guide/output.rst.txt
-docs/html/_sources/users_guide/parserInstructions.rst.txt
-docs/html/_sources/users_guide/tipsAndTricks.rst.txt
-docs/html/_sources/users_guide/webware.rst.txt
-docs/html/_static/ajax-loader.gif
-docs/html/_static/basic.css
-docs/html/_static/comment-bright.png
-docs/html/_static/comment-close.png
-docs/html/_static/comment.png
-docs/html/_static/contents.png
-docs/html/_static/doctools.js
-docs/html/_static/down-pressed.png
-docs/html/_static/down.png
-docs/html/_static/file.png
-docs/html/_static/jquery-3.1.0.js
-docs/html/_static/jquery.js
-docs/html/_static/minus.png
-docs/html/_static/navigation.png
-docs/html/_static/plus.png
-docs/html/_static/pygments.css
-docs/html/_static/searchtools.js
-docs/html/_static/sphinxdoc.css
-docs/html/_static/underscore-1.3.1.js
-docs/html/_static/underscore.js
-docs/html/_static/up-pressed.png
-docs/html/_static/up.png
-docs/html/_static/websupport.js
-docs/html/api/Cheetah.CacheRegion.html
-docs/html/api/Cheetah.CacheStore.html
-docs/html/api/Cheetah.CheetahWrapper.html
-docs/html/api/Cheetah.Compiler.html
-docs/html/api/Cheetah.DirectiveAnalyzer.html
-docs/html/api/Cheetah.Django.html
-docs/html/api/Cheetah.DummyTransaction.html
-docs/html/api/Cheetah.ErrorCatchers.html
-docs/html/api/Cheetah.FileUtils.html
-docs/html/api/Cheetah.Filters.html
-docs/html/api/Cheetah.ImportHooks.html
-docs/html/api/Cheetah.ImportManager.html
-docs/html/api/Cheetah.Macros.I18n.html
-docs/html/api/Cheetah.Macros.html
-docs/html/api/Cheetah.NameMapper.html
-docs/html/api/Cheetah.Parser.html
-docs/html/api/Cheetah.Servlet.html
-docs/html/api/Cheetah.SettingsManager.html
-docs/html/api/Cheetah.SourceReader.html
-docs/html/api/Cheetah.Template.html
-docs/html/api/Cheetah.TemplateCmdLineIface.html
-docs/html/api/Cheetah.Templates.SkeletonPage.html
-docs/html/api/Cheetah.Templates.html
-docs/html/api/Cheetah.Tests.Analyzer.html
-docs/html/api/Cheetah.Tests.Boinker.html
-docs/html/api/Cheetah.Tests.CheetahWrapper.html
-docs/html/api/Cheetah.Tests.Cheps.html
-docs/html/api/Cheetah.Tests.Filters.html
-docs/html/api/Cheetah.Tests.Misc.html
-docs/html/api/Cheetah.Tests.NameMapper.html
-docs/html/api/Cheetah.Tests.NameMapper_pure.html
-docs/html/api/Cheetah.Tests.Parser.html
-docs/html/api/Cheetah.Tests.Performance.html
-docs/html/api/Cheetah.Tests.Pinger.html
-docs/html/api/Cheetah.Tests.Regressions.html
-docs/html/api/Cheetah.Tests.SyntaxAndOutput.html
-docs/html/api/Cheetah.Tests.Template.html
-docs/html/api/Cheetah.Tests.Test.html
-docs/html/api/Cheetah.Tests.Unicode.html
-docs/html/api/Cheetah.Tests.html
-docs/html/api/Cheetah.Tests.xmlrunner.html
-docs/html/api/Cheetah.Tools.CGITemplate.html
-docs/html/api/Cheetah.Tools.MondoReport.html
-docs/html/api/Cheetah.Tools.RecursiveNull.html
-docs/html/api/Cheetah.Tools.SiteHierarchy.html
-docs/html/api/Cheetah.Tools.html
-docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html
-docs/html/api/Cheetah.Tools.turbocheetah.html
-docs/html/api/Cheetah.Tools.turbocheetah.tests.html
-docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html
-docs/html/api/Cheetah.Unspecified.html
-docs/html/api/Cheetah.Utils.Indenter.html
-docs/html/api/Cheetah.Utils.Misc.html
-docs/html/api/Cheetah.Utils.WebInputMixin.html
-docs/html/api/Cheetah.Utils.html
-docs/html/api/Cheetah.Utils.htmlDecode.html
-docs/html/api/Cheetah.Utils.htmlEncode.html
-docs/html/api/Cheetah.Utils.statprof.html
-docs/html/api/Cheetah.Version.html
-docs/html/api/Cheetah.compat.html
-docs/html/api/Cheetah.convertTmplPathToModuleName.html
-docs/html/api/Cheetah.html
-docs/html/api/modules.html
-docs/html/cheps/1_chep.html
-docs/html/cheps/2_import.html
-docs/html/cheps/3_super.html
-docs/html/dev_guide/bnf.html
-docs/html/dev_guide/cache.html
-docs/html/dev_guide/comments.html
-docs/html/dev_guide/compiler.html
-docs/html/dev_guide/design.html
-docs/html/dev_guide/errorHandling.html
-docs/html/dev_guide/files.html
-docs/html/dev_guide/flowControl.html
-docs/html/dev_guide/history.html
-docs/html/dev_guide/index.html
-docs/html/dev_guide/inheritanceEtc.html
-docs/html/dev_guide/introduction.html
-docs/html/dev_guide/output.html
-docs/html/dev_guide/parser.html
-docs/html/dev_guide/parserInstructions.html
-docs/html/dev_guide/patching.html
-docs/html/dev_guide/placeholders.html
-docs/html/dev_guide/pyModules.html
-docs/html/dev_guide/safeDelegation.html
-docs/html/dev_guide/template.html
-docs/html/recipes/inheritance.html
-docs/html/recipes/precompiled.html
-docs/html/recipes/staticmethod.html
-docs/html/recipes/writing_a_recipe.html
-docs/html/users_guide/comments.html
-docs/html/users_guide/comparisons.html
-docs/html/users_guide/editors.html
-docs/html/users_guide/errorHandling.html
-docs/html/users_guide/examples.html
-docs/html/users_guide/flowControl.html
-docs/html/users_guide/gettingStarted.html
-docs/html/users_guide/glossary.html
-docs/html/users_guide/index.html
-docs/html/users_guide/inheritanceEtc.html
-docs/html/users_guide/intro.html
-docs/html/users_guide/language.html
-docs/html/users_guide/libraries.html
-docs/html/users_guide/links.html
-docs/html/users_guide/nonHtml.html
-docs/html/users_guide/otherHtml.html
-docs/html/users_guide/output.html
-docs/html/users_guide/parserInstructions.html
-docs/html/users_guide/tipsAndTricks.html
-docs/html/users_guide/webware.html
docs/recipes/inheritance.rst
docs/recipes/precompiled.rst
docs/recipes/staticmethod.rst
-docs/recipes/writing_a_recipe.rst
docs/users_guide/comments.rst
docs/users_guide/comparisons.rst
docs/users_guide/editors.rst
diff --git a/LICENSE b/LICENSE
index 6c4141a..da29eb3 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2017, Oleg Broytman and contributors.
+Copyright 2017-2018, Oleg Broytman and contributors.
Copyright 2009-2012, R. Tyler Croy and contributors.
Copyright 2001-2008, The Cheetah Development Team: Tavis Rudd, Mike Orr,
Chuck Esterbrook, Ian Bicking.
diff --git a/PKG-INFO b/PKG-INFO
index 9028fc1..5552c9b 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,13 +1,20 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: Cheetah3
-Version: 3.1.0
+Version: 3.2.0
Summary: Cheetah is a template engine and code generation tool
Home-page: http://cheetahtemplate.org/
-Author: Oleg Broytman
-Author-email: phd@phdru.name
+Author: Tavis Rudd
+Author-email: tavis@damnsimple.com
+Maintainer: Oleg Broytman
+Maintainer-email: phd@phdru.name
License: MIT
-Download-URL: https://pypi.python.org/pypi/Cheetah3/3.1.0
-Description-Content-Type: UNKNOWN
+Download-URL: https://pypi.org/project/Cheetah3/3.2.0
+Project-URL: Wikipedia, https://en.wikipedia.org/wiki/CheetahTemplate
+Project-URL: Documentation, http://cheetahtemplate.org/users_guide/index.html
+Project-URL: Github repo, https://github.com/CheetahTemplate3
+Project-URL: Issue tracker, https://github.com/CheetahTemplate3/cheetah3/issues
+Project-URL: Download, https://pypi.org/project/Cheetah3/3.2.0/
+Project-URL: Homepage, http://cheetahtemplate.org/
Description: Cheetah3 is a free (BSD-style) and open source template engine and code
generation tool.
@@ -47,10 +54,10 @@ Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
@@ -58,3 +65,5 @@ Classifier: Topic :: Software Development :: Code Generators
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: User Interfaces
Classifier: Topic :: Text Processing
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
+Description-Content-Type: text/x-rst
diff --git a/README.rst b/README.rst
index e58d79e..07d616a 100644
--- a/README.rst
+++ b/README.rst
@@ -1,4 +1,4 @@
-Cheetah Template 3.1.0
+Cheetah Template 3.2.0
======================
Cheetah3 is a free (BSD-style) and open source template engine and code
diff --git a/SetupConfig.py b/SetupConfig.py
index 3410fb3..157ad11 100644
--- a/SetupConfig.py
+++ b/SetupConfig.py
@@ -1,5 +1,5 @@
# -------Main Package Settings-----------#
-from distutils.core import Extension
+from setuptools import Extension
import os
import os.path
import sys
@@ -18,8 +18,17 @@ maintainer = "Oleg Broytman"
maintainer_email = "phd@phdru.name"
url = "http://cheetahtemplate.org/"
dev_tag = ""
-download_url = "https://pypi.python.org/pypi/%s/%s%s" \
+download_url = "https://pypi.org/project/%s/%s%s" \
% (name, version, dev_tag)
+project_urls = {
+ 'Homepage': 'http://cheetahtemplate.org/',
+ 'Documentation': 'http://cheetahtemplate.org/users_guide/index.html',
+ 'Download': 'https://pypi.org/project/%s/%s%s/'
+ % (name, version, dev_tag),
+ 'Github repo': 'https://github.com/CheetahTemplate3',
+ 'Issue tracker': 'https://github.com/CheetahTemplate3/cheetah3/issues',
+ 'Wikipedia': 'https://en.wikipedia.org/wiki/CheetahTemplate',
+}
del dev_tag
keywords = ["template"]
platforms = "Any"
@@ -42,10 +51,10 @@ classifiers = [line.strip() for line in '''\
Programming Language :: Python :: 2
Programming Language :: Python :: 2.7
Programming Language :: Python :: 3
- Programming Language :: Python :: 3.3
Programming Language :: Python :: 3.4
Programming Language :: Python :: 3.5
Programming Language :: Python :: 3.6
+ Programming Language :: Python :: 3.7
Topic :: Internet :: WWW/HTTP
Topic :: Internet :: WWW/HTTP :: Dynamic Content
Topic :: Internet :: WWW/HTTP :: Site Management
@@ -59,15 +68,15 @@ if PY2:
del PY2 # Hide it from setup()
ext_modules = [
- Extension("Cheetah._namemapper",
- [os.path.join('Cheetah', 'c', '_namemapper.c')]),
- # Extension("Cheetah._verifytype",
- # [os.path.join('Cheetah', 'c', '_verifytype.c')]),
- # Extension("Cheetah._filters",
- # [os.path.join('Cheetah', 'c', '_filters.c')]),
- # Extension('Cheetah._template',
- # [os.path.join('Cheetah', 'c', '_template.c')]),
- ]
+ Extension("Cheetah._namemapper",
+ [os.path.join('Cheetah', 'c', '_namemapper.c')]),
+ # Extension("Cheetah._verifytype",
+ # [os.path.join('Cheetah', 'c', '_verifytype.c')]),
+ # Extension("Cheetah._filters",
+ # [os.path.join('Cheetah', 'c', '_filters.c')]),
+ # Extension('Cheetah._template',
+ # [os.path.join('Cheetah', 'c', '_template.c')]),
+]
# Data Files and Scripts
scripts = ('bin/cheetah-compile',
@@ -77,20 +86,19 @@ scripts = ('bin/cheetah-compile',
data_files = ['recursive: Cheetah *.tmpl *.txt *.rst LICENSE README.rst TODO']
-if not os.getenv('CHEETAH_INSTALL_WITHOUT_SETUPTOOLS'):
- try:
- if sys.platform == 'win32':
- # use 'entry_points' instead of 'scripts'
- del scripts
- entry_points = {
- 'console_scripts': [
- 'cheetah = Cheetah.CheetahWrapper:_cheetah',
- 'cheetah-compile = '
- 'Cheetah.CheetahWrapper:_cheetah_compile',
- ]
- }
- except ImportError:
- pass
+try:
+ if sys.platform == 'win32':
+ # use 'entry_points' instead of 'scripts'
+ del scripts
+ entry_points = {
+ 'console_scripts': [
+ 'cheetah = Cheetah.CheetahWrapper:_cheetah',
+ 'cheetah-compile = '
+ 'Cheetah.CheetahWrapper:_cheetah_compile',
+ ]
+ }
+except ImportError:
+ pass
long_description = '''\
Cheetah3 is a free (BSD-style) and open source template engine and code
@@ -119,3 +127,7 @@ Recent Changes
See http://cheetahtemplate.org/news.html for full details
'''
+
+long_description_content_type = "text/x-rst"
+
+python_requires = '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*'
diff --git a/SetupTools.py b/SetupTools.py
index 470198e..1d89680 100644
--- a/SetupTools.py
+++ b/SetupTools.py
@@ -3,22 +3,16 @@ import os
import os.path
import sys
-from distutils.command.build_ext import build_ext
from distutils.command.install_data import install_data
-from distutils.core import setup
from distutils.errors import CCompilerError, DistutilsExecError, \
DistutilsPlatformError
+from setuptools import setup
+from setuptools.command.build_ext import build_ext
# imports from Cheetah ...
from Cheetah.FileUtils import findFiles
from Cheetah.compat import string_type
-if not os.getenv('CHEETAH_INSTALL_WITHOUT_SETUPTOOLS'):
- try:
- from setuptools import setup # noqa: F811
- except ImportError:
- pass
-
if sys.platform == 'win32':
# 2.6's distutils.msvc9compiler can raise an IOError when failing to
# find the compiler
@@ -36,7 +30,7 @@ class BuildFailed(Exception):
class mod_build_ext(build_ext):
- """A modified version of the distutils build_ext command that raises an
+ """A modified version of build_ext command that raises an
exception when building of the extension fails.
"""
@@ -118,7 +112,7 @@ class mod_install_data(install_data):
def run_setup(configurations):
- """Run distutils setup.
+ """Run distutils/setuptools setup.
The parameters passed to setup() are extracted from the list of modules,
classes or instances given in configurations.
@@ -145,11 +139,10 @@ def run_setup(configurations):
cmdclasses = {
'build_ext': mod_build_ext,
'install_data': mod_install_data,
- }
+ }
kws['cmdclass'] = cmdclasses
- # Invoke distutils setup
try:
setup(**kws)
except BuildFailed as x:
diff --git a/TODO b/TODO
index d8a63fc..09d2181 100644
--- a/TODO
+++ b/TODO
@@ -1,7 +1,7 @@
-- https://pypi.python.org/pypi/cibuildwheel or
+- https://pypi.org/project/cibuildwheel/ or
https://github.com/matthew-brett/multibuild or
- https://pypi.python.org/pypi/wheelhouse-uploader
+ https://pypi.org/project/wheelhouse-uploader/
-- https://pypi.python.org/pypi/appveyor-artifacts
+- https://pypi.org/project/appveyor-artifacts/
- Support PyPy3.
diff --git a/docs/conf.py b/docs/conf.py
index c9fdf71..2437be8 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -29,7 +29,7 @@ sys.path.insert(0, os.path.abspath('..'))
# or your custom ones.
extensions = [
'sphinx.ext.autodoc',
- ]
+]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
@@ -45,7 +45,7 @@ master_doc = 'index'
# General information about the project.
project = u'Cheetah3'
-copyright = u'2017, Oleg Broytman; 2009-2012, R. Tyler Croy; ' \
+copyright = u'2017-2018, Oleg Broytman; 2009-2012, R. Tyler Croy; ' \
u'2001-2008, The Cheetah Development Team.'
# The version info for the project you're documenting, acts as replacement for
@@ -181,9 +181,9 @@ htmlhelp_basename = 'CheetahTemplateEnginedoc'
# (source start file, target name, title,
# author, documentclass [howto/manual]).
latex_documents = [
- ('index', 'CheetahTemplateEngine.tex',
- u'Cheetah Template Engine Documentation',
- u'R. Tyler Ballance', 'manual'),
+ ('index', 'CheetahTemplateEngine.tex',
+ u'Cheetah Template Engine Documentation',
+ u'R. Tyler Ballance', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
diff --git a/docs/dev_guide/bnf.rst b/docs/dev_guide/bnf.rst
deleted file mode 100644
index ef214b4..0000000
--- a/docs/dev_guide/bnf.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-A BNF Grammar of Cheetah
-========================
-
-(bnf)
-
-
diff --git a/docs/dev_guide/cache.rst b/docs/dev_guide/cache.rst
index ce0829c..18014c5 100644
--- a/docs/dev_guide/cache.rst
+++ b/docs/dev_guide/cache.rst
@@ -1,12 +1,10 @@
Caching placeholders and #cache
===============================
-(cache)
Dynamic placeholder - no cache
------------------------------
-(cache.dynamic)
The template:
@@ -34,7 +32,6 @@ Just what we expected, like any other dynamic placeholder.
Static placeholder
------------------
-(cache.static)
The template:
@@ -105,7 +102,6 @@ into the cache.
Timed-refresh placeholder
-------------------------
-(cache.timed)
The template:
@@ -192,7 +188,6 @@ can you figure that out.
Timed-refresh placeholder with braces
-------------------------------------
-(cache.timed.braces)
This example is the same but with the long placeholder syntax. It's
here because it's a Cheetah FAQ whether to put the cache interval
@@ -239,7 +234,6 @@ text.
#cache
------
-(cache.directive)
The template:
@@ -286,7 +280,6 @@ text around the placeholder is inside the second if-block.
#cache with timer and id
------------------------
-(cache.directive.timer)
The template:
@@ -319,7 +312,6 @@ first if-block:
#cache with test: expression and method conditions
--------------------------------------------------
-(cache.directive.test)
The template:
@@ -329,7 +321,6 @@ The template:
This is a cached region. $voom
#end cache
-(Analysis postponed: bug in Cheetah produces invalid Python.)
The template:
diff --git a/docs/dev_guide/comments.rst b/docs/dev_guide/comments.rst
index c2f9a89..51e285b 100644
--- a/docs/dev_guide/comments.rst
+++ b/docs/dev_guide/comments.rst
@@ -1,7 +1,6 @@
Directives: Comments
====================
-(comments)
The template:
@@ -38,7 +37,6 @@ The generated code:
Docstring and header comments
-----------------------------
-(comments.docstring)
The template:
diff --git a/docs/dev_guide/compiler.rst b/docs/dev_guide/compiler.rst
deleted file mode 100644
index 33f3bcd..0000000
--- a/docs/dev_guide/compiler.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-The compiler
-============
-
-(compiler)
-
-How templates are compiled: a walk through Compiler.py.
-
-
diff --git a/docs/dev_guide/design.rst b/docs/dev_guide/design.rst
index 1ffabbd..e144a46 100644
--- a/docs/dev_guide/design.rst
+++ b/docs/dev_guide/design.rst
@@ -1,12 +1,10 @@
Design Decisions and Tradeoffs
==============================
-(design)
Delimiters
----------
-(design.Delimiters)
One of the first decisions we encountered was which delimiter
syntax to use. We decided to follow Velocity's {$placeholder} and
@@ -41,7 +39,6 @@ disappearing as bogus HTML tags do in browsers.
Late binding
------------
-(design.lateBinding)
One of Cheetah's unique features is the name mapper, which lets you
write {$a.b} without worrying much about the type of {a} or {b}.
@@ -89,16 +86,13 @@ goals are unattainable due to performance considerations.
Caching framework
-----------------
-(design.cache)
Webware compatibility and the transaction framework
---------------------------------------------------
-(design.webware)
Single inheritance
------------------
-(design.singleInheritance)
diff --git a/docs/dev_guide/errorHandling.rst b/docs/dev_guide/errorHandling.rst
index e97d1fb..6768203 100644
--- a/docs/dev_guide/errorHandling.rst
+++ b/docs/dev_guide/errorHandling.rst
@@ -1,12 +1,10 @@
Directives: Error Handling
==========================
-(errorHandling)
#try and #raise
---------------
-(errorHandling.try)
The template:
@@ -67,7 +65,6 @@ The generated code:
#assert
-------
-(errorHandling.assert)
The template:
@@ -101,12 +98,10 @@ The generated code:
#errorCatcher
-------------
-(errorHandling.errorCatcher)
No error catcher
~~~~~~~~~~~~~~~~
-(errorHandling.errorCatcher.no)
The template:
@@ -143,7 +138,6 @@ The generated code:
Echo and BigEcho
~~~~~~~~~~~~~~~~
-(errorHandling.errorCatcher.echo)
The template:
@@ -184,7 +178,6 @@ The generated code:
ListErrors
~~~~~~~~~~
-(errorHandling.errorCatcher.listErrors)
The template:
diff --git a/docs/dev_guide/files.rst b/docs/dev_guide/files.rst
deleted file mode 100644
index ab8d7a1..0000000
--- a/docs/dev_guide/files.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Files
-=====
-
-(files)
-
-This chapter will be an overview of the files in the Cheetah
-package, and how they interrelate in compiling and filling a
-template. We'll also look at files in the Cheetah tarball that
-don't get copied into the package.
-
-
diff --git a/docs/dev_guide/flowControl.rst b/docs/dev_guide/flowControl.rst
index d391b2f..06e5366 100644
--- a/docs/dev_guide/flowControl.rst
+++ b/docs/dev_guide/flowControl.rst
@@ -1,12 +1,10 @@
Directives: Flow Control
========================
-(flowControl)
#for
----
-(flowControl.for)
The template:
@@ -33,7 +31,6 @@ The generated code:
#repeat
-------
-(flowControl.repeat)
The template:
@@ -53,7 +50,6 @@ The output:
My bonnie lies over the ocean
O, bring back my bonnie to me!
-(OK, so the second line should be "sea" instead of "ocean".)
The generated code:
@@ -69,7 +65,6 @@ for each instance of {repeat} in order to permit nesting.
#while
------
-(flowControl.while)
The template:
@@ -135,7 +130,6 @@ The generated code:
#unless
-------
-(flowControl.unless)
The template:
@@ -167,7 +161,6 @@ calculating something different than it should.
#break and #continue
--------------------
-(flowControl.break)
The template:
@@ -206,7 +199,6 @@ The generated code:
#pass
-----
-(flowControl.pass)
The template:
@@ -247,7 +239,6 @@ The generated code:
#stop
-----
-(flowControl.stop)
The template:
@@ -285,7 +276,6 @@ The generated code:
#return
-------
-(flowControl.return)
The template:
diff --git a/docs/dev_guide/history.rst b/docs/dev_guide/history.rst
index d0e1ceb..ca42d83 100644
--- a/docs/dev_guide/history.rst
+++ b/docs/dev_guide/history.rst
@@ -1,7 +1,6 @@
History of Cheetah
==================
-(history)
In Spring 2001, several members of the webware-discuss mailing list
expressed the need for a template engine. Webware like Python is
diff --git a/docs/dev_guide/index.rst b/docs/dev_guide/index.rst
index 83ff7d9..4a289bd 100644
--- a/docs/dev_guide/index.rst
+++ b/docs/dev_guide/index.rst
@@ -9,8 +9,6 @@ This guide needs to really be filled out more
:maxdepth: 1
introduction.rst
- compiler.rst
- parser.rst
errorHandling.rst
placeholders.rst
patching.rst
@@ -19,12 +17,9 @@ This guide needs to really be filled out more
safeDelegation.rst
history.rst
output.rst
- files.rst
cache.rst
- bnf.rst
pyModules.rst
comments.rst
parserInstructions.rst
- template.rst
inheritanceEtc.rst
diff --git a/docs/dev_guide/inheritanceEtc.rst b/docs/dev_guide/inheritanceEtc.rst
index 0b06ab9..1d89f46 100644
--- a/docs/dev_guide/inheritanceEtc.rst
+++ b/docs/dev_guide/inheritanceEtc.rst
@@ -1,12 +1,10 @@
Directives: Import, Inheritance, Declaration and Assignment
===========================================================
-(inheritanceEtc)
#import and #from
-----------------
-(inheritanceEtc.import)
The template:
@@ -25,7 +23,6 @@ The generated module, at the bottom of the import section:
#extends
--------
-(inheritanceEtc.extends)
The template:
@@ -49,7 +46,6 @@ The generated class:
#implements
-----------
-(inheritanceEtc.implements)
The template:
@@ -67,7 +63,6 @@ In the generated class, the main method is {.doOutput} instead of
#set and #set global
--------------------
-(inheritanceEtc.set)
The template:
@@ -104,7 +99,6 @@ very first namespace.)
#del
----
-(inheritanceEtc.del)
The template:
@@ -129,7 +123,6 @@ In the generated class:
#attr
-----
-(inheritanceEtc.attr)
The template:
@@ -148,7 +141,6 @@ In the generated class:
#def
----
-(inheritanceEtc.def)
The template:
@@ -219,7 +211,6 @@ default values.
#block
------
-(inheritanceEtc.block)
The template:
diff --git a/docs/dev_guide/output.rst b/docs/dev_guide/output.rst
index 55172d1..2e945f8 100644
--- a/docs/dev_guide/output.rst
+++ b/docs/dev_guide/output.rst
@@ -1,12 +1,10 @@
Directives: Output
==================
-(output)
#echo
-----
-(output.echo)
The template:
@@ -31,7 +29,6 @@ The generated code:
#silent
-------
-(output.silent)
The template:
@@ -59,7 +56,6 @@ but it almost succeeds.
#raw
----
-(output.raw)
The template:
@@ -96,7 +92,6 @@ a separate {write} call.
#include
--------
-(output.include)
The main template:
@@ -127,7 +122,6 @@ The generated code:
#include raw
~~~~~~~~~~~~
-(output.include.raw)
The main template:
@@ -154,7 +148,6 @@ That last argument, {raw}, makes the difference.
#include from a string or expression (eval)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-(output.include.expression)
The template:
@@ -192,7 +185,6 @@ Later in the generated class:
#slurp
------
-(output.slurp)
The template:
@@ -235,7 +227,6 @@ in the template definition.
#filter
-------
-(output.filter)
The template:
diff --git a/docs/dev_guide/parser.rst b/docs/dev_guide/parser.rst
deleted file mode 100644
index 802b43f..0000000
--- a/docs/dev_guide/parser.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-The parser
-==========
-
-(parser)
-
-How templates are compiled: a walk through Parser.py's source.
-(Also need to look at Lexer.py, but not too closely.)
-
-
diff --git a/docs/dev_guide/parserInstructions.rst b/docs/dev_guide/parserInstructions.rst
index 805df7c..af9e4aa 100644
--- a/docs/dev_guide/parserInstructions.rst
+++ b/docs/dev_guide/parserInstructions.rst
@@ -1,12 +1,10 @@
Directives: Parser Instructions
===============================
-(parserInstructions)
#breakpoint
-----------
-(parserInstructions.breakpoint)
The template:
@@ -34,7 +32,6 @@ Nothing after the breakpoint was compiled.
#compiler
---------
-(parserInstructions.compiler)
The template:
diff --git a/docs/dev_guide/patching.rst b/docs/dev_guide/patching.rst
index 095d9a2..4d7441a 100644
--- a/docs/dev_guide/patching.rst
+++ b/docs/dev_guide/patching.rst
@@ -1,7 +1,6 @@
Patching Cheetah
================
-(patching)
How to commit changes to CVS or submit patches, how to run the test
suite. Describe distutils and how the regression tests work.
@@ -9,7 +8,6 @@ suite. Describe distutils and how the regression tests work.
File Requirements
-----------------
-(patching.fileRequirements)
The code{Template} class contains not only the Cheetah
infrastructure, but also some convenience methods useful in all
@@ -37,7 +35,6 @@ imported that subsystem).
Testing Changes and Building Regression Tests
---------------------------------------------
-(patching.testing)
Cheetah ships with a regression test suite. To run the built-in
tests, execute at the shell prompt:
diff --git a/docs/dev_guide/placeholders.rst b/docs/dev_guide/placeholders.rst
index 60aa0d2..fa306db 100644
--- a/docs/dev_guide/placeholders.rst
+++ b/docs/dev_guide/placeholders.rst
@@ -1,12 +1,10 @@
Placeholders
============
-(placeholders)
Simple placeholders
-------------------
-(placeholders.simple)
Let's add a few $placeholders to our template:
@@ -181,7 +179,6 @@ outputs for true {and} expressions.)
Complex placeholders
--------------------
-(placeholders.complex)
Placeholders can get far more complicated than that. This example
shows what kind of code the various NameMapper features produce.
diff --git a/docs/dev_guide/pyModules.rst b/docs/dev_guide/pyModules.rst
index 86c95dc..64bdcee 100644
--- a/docs/dev_guide/pyModules.rst
+++ b/docs/dev_guide/pyModules.rst
@@ -1,7 +1,6 @@
.py Template Modules
====================
-(pyModules)
This chapter examines the structure of a .py template module. The
following few chapters will then show how each placeholder and
@@ -10,7 +9,6 @@ directive affects the generated Python code.
An example
----------
-(pyModules.example)
Our first template follows a long noble tradition in computer
tutorials. It produces a familiar, friendly greeting. Here's the
@@ -170,7 +168,6 @@ The examples were generated from CVS versions of Cheetah between
A walk through the example
--------------------------
-(pyModules.walk)
Lines 20-24 are the Cheetah-specific imports. Line 33 introduces
our generated class, {x}, a subclass of {Template}. It's called x
diff --git a/docs/dev_guide/safeDelegation.rst b/docs/dev_guide/safeDelegation.rst
index 87f3dc1..03609e9 100644
--- a/docs/dev_guide/safeDelegation.rst
+++ b/docs/dev_guide/safeDelegation.rst
@@ -1,7 +1,6 @@
Safe Delegation
===============
-(safeDelegation)
Safe delegation, as provided by Zope and Allaire's Spectra, is not
implemented in Cheetah. The core aim has been to help developers
diff --git a/docs/dev_guide/template.rst b/docs/dev_guide/template.rst
deleted file mode 100644
index 8dd23d9..0000000
--- a/docs/dev_guide/template.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Template
-========
-
-(template)
-
-This chapter will mainly walk through the {Cheetah.Template}
-constructor and not at what point the template is compiled.
-
-(Also need to look at Transaction,py and Servlet.py.)
-
-
diff --git a/docs/documentation.rst b/docs/documentation.rst
index af5cc44..835389d 100644
--- a/docs/documentation.rst
+++ b/docs/documentation.rst
@@ -7,4 +7,3 @@ Cheetah Recipes
recipes/inheritance.rst
recipes/precompiled.rst
recipes/staticmethod.rst
- recipes/writing_a_recipe.rst
diff --git a/docs/download.rst b/docs/download.rst
index dc73d33..8c318d7 100644
--- a/docs/download.rst
+++ b/docs/download.rst
@@ -2,7 +2,7 @@ Downloading Cheetah
===================
You can download wheels, eggs and tarballs of Cheetah from the `Python
-Package Index <http://pypi.python.org/pypi/Cheetah3>`_.
+Package Index <http://pypi.org/project/Cheetah3/>`_.
You can keep up to date with release candidates or other downloads of
Cheetah by visiting the `CheetahTemplate GitHub page
diff --git a/docs/html/_sources/api/Cheetah.CacheRegion.rst.txt b/docs/html/_sources/api/Cheetah.CacheRegion.rst.txt
deleted file mode 100644
index f9d3643..0000000
--- a/docs/html/_sources/api/Cheetah.CacheRegion.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.CacheRegion module
-===========================
-
-.. automodule:: Cheetah.CacheRegion
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.CacheStore.rst.txt b/docs/html/_sources/api/Cheetah.CacheStore.rst.txt
deleted file mode 100644
index dd3acce..0000000
--- a/docs/html/_sources/api/Cheetah.CacheStore.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.CacheStore module
-==========================
-
-.. automodule:: Cheetah.CacheStore
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt b/docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt
deleted file mode 100644
index 437699b..0000000
--- a/docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.CheetahWrapper module
-==============================
-
-.. automodule:: Cheetah.CheetahWrapper
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Compiler.rst.txt b/docs/html/_sources/api/Cheetah.Compiler.rst.txt
deleted file mode 100644
index 88adbb5..0000000
--- a/docs/html/_sources/api/Cheetah.Compiler.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Compiler module
-========================
-
-.. automodule:: Cheetah.Compiler
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt b/docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt
deleted file mode 100644
index c8a6c9c..0000000
--- a/docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.DirectiveAnalyzer module
-=================================
-
-.. automodule:: Cheetah.DirectiveAnalyzer
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Django.rst.txt b/docs/html/_sources/api/Cheetah.Django.rst.txt
deleted file mode 100644
index 861e95a..0000000
--- a/docs/html/_sources/api/Cheetah.Django.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Django module
-======================
-
-.. automodule:: Cheetah.Django
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt b/docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt
deleted file mode 100644
index 193d5eb..0000000
--- a/docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.DummyTransaction module
-================================
-
-.. automodule:: Cheetah.DummyTransaction
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt b/docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt
deleted file mode 100644
index 1fb9140..0000000
--- a/docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.ErrorCatchers module
-=============================
-
-.. automodule:: Cheetah.ErrorCatchers
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.FileUtils.rst.txt b/docs/html/_sources/api/Cheetah.FileUtils.rst.txt
deleted file mode 100644
index 3302322..0000000
--- a/docs/html/_sources/api/Cheetah.FileUtils.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.FileUtils module
-=========================
-
-.. automodule:: Cheetah.FileUtils
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Filters.rst.txt b/docs/html/_sources/api/Cheetah.Filters.rst.txt
deleted file mode 100644
index 5612700..0000000
--- a/docs/html/_sources/api/Cheetah.Filters.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Filters module
-=======================
-
-.. automodule:: Cheetah.Filters
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.ImportHooks.rst.txt b/docs/html/_sources/api/Cheetah.ImportHooks.rst.txt
deleted file mode 100644
index 0217927..0000000
--- a/docs/html/_sources/api/Cheetah.ImportHooks.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.ImportHooks module
-===========================
-
-.. automodule:: Cheetah.ImportHooks
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.ImportManager.rst.txt b/docs/html/_sources/api/Cheetah.ImportManager.rst.txt
deleted file mode 100644
index 7200c3d..0000000
--- a/docs/html/_sources/api/Cheetah.ImportManager.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.ImportManager module
-=============================
-
-.. automodule:: Cheetah.ImportManager
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt b/docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt
deleted file mode 100644
index 338726b..0000000
--- a/docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Macros\.I18n module
-============================
-
-.. automodule:: Cheetah.Macros.I18n
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Macros.rst.txt b/docs/html/_sources/api/Cheetah.Macros.rst.txt
deleted file mode 100644
index 1cf8052..0000000
--- a/docs/html/_sources/api/Cheetah.Macros.rst.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Cheetah\.Macros package
-=======================
-
-.. automodule:: Cheetah.Macros
- :members:
- :undoc-members:
- :show-inheritance:
-
-Submodules
-----------
-
-.. toctree::
-
- Cheetah.Macros.I18n
-
diff --git a/docs/html/_sources/api/Cheetah.NameMapper.rst.txt b/docs/html/_sources/api/Cheetah.NameMapper.rst.txt
deleted file mode 100644
index d995359..0000000
--- a/docs/html/_sources/api/Cheetah.NameMapper.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.NameMapper module
-==========================
-
-.. automodule:: Cheetah.NameMapper
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Parser.rst.txt b/docs/html/_sources/api/Cheetah.Parser.rst.txt
deleted file mode 100644
index f459b45..0000000
--- a/docs/html/_sources/api/Cheetah.Parser.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Parser module
-======================
-
-.. automodule:: Cheetah.Parser
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Servlet.rst.txt b/docs/html/_sources/api/Cheetah.Servlet.rst.txt
deleted file mode 100644
index ca3cc39..0000000
--- a/docs/html/_sources/api/Cheetah.Servlet.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Servlet module
-=======================
-
-.. automodule:: Cheetah.Servlet
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.SettingsManager.rst.txt b/docs/html/_sources/api/Cheetah.SettingsManager.rst.txt
deleted file mode 100644
index d067e6c..0000000
--- a/docs/html/_sources/api/Cheetah.SettingsManager.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.SettingsManager module
-===============================
-
-.. automodule:: Cheetah.SettingsManager
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.SourceReader.rst.txt b/docs/html/_sources/api/Cheetah.SourceReader.rst.txt
deleted file mode 100644
index 5e3d318..0000000
--- a/docs/html/_sources/api/Cheetah.SourceReader.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.SourceReader module
-============================
-
-.. automodule:: Cheetah.SourceReader
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Template.rst.txt b/docs/html/_sources/api/Cheetah.Template.rst.txt
deleted file mode 100644
index 0eb6c21..0000000
--- a/docs/html/_sources/api/Cheetah.Template.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Template module
-========================
-
-.. automodule:: Cheetah.Template
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt b/docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt
deleted file mode 100644
index 9eb13f9..0000000
--- a/docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.TemplateCmdLineIface module
-====================================
-
-.. automodule:: Cheetah.TemplateCmdLineIface
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt b/docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt
deleted file mode 100644
index 1689faa..0000000
--- a/docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Templates\.SkeletonPage module
-=======================================
-
-.. automodule:: Cheetah.Templates.SkeletonPage
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Templates.rst.txt b/docs/html/_sources/api/Cheetah.Templates.rst.txt
deleted file mode 100644
index a1cab72..0000000
--- a/docs/html/_sources/api/Cheetah.Templates.rst.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Cheetah\.Templates package
-==========================
-
-.. automodule:: Cheetah.Templates
- :members:
- :undoc-members:
- :show-inheritance:
-
-Submodules
-----------
-
-.. toctree::
-
- Cheetah.Templates.SkeletonPage
-
diff --git a/docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt
deleted file mode 100644
index 674b25e..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Analyzer module
-===============================
-
-.. automodule:: Cheetah.Tests.Analyzer
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt
deleted file mode 100644
index dfaee8b..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Boinker module
-==============================
-
-.. automodule:: Cheetah.Tests.Boinker
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt b/docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt
deleted file mode 100644
index 66dadcf..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.CheetahWrapper module
-=====================================
-
-.. automodule:: Cheetah.Tests.CheetahWrapper
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt
deleted file mode 100644
index a7bcacc..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Cheps module
-============================
-
-.. automodule:: Cheetah.Tests.Cheps
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt
deleted file mode 100644
index 8d97947..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Filters module
-==============================
-
-.. automodule:: Cheetah.Tests.Filters
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt
deleted file mode 100644
index ec9133b..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Misc module
-===========================
-
-.. automodule:: Cheetah.Tests.Misc
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt b/docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt
deleted file mode 100644
index fb76c2a..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.NameMapper module
-=================================
-
-.. automodule:: Cheetah.Tests.NameMapper
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt b/docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt
deleted file mode 100644
index 927661f..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.NameMapper\_pure module
-=======================================
-
-.. automodule:: Cheetah.Tests.NameMapper_pure
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt
deleted file mode 100644
index dd1bc7f..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Parser module
-=============================
-
-.. automodule:: Cheetah.Tests.Parser
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt
deleted file mode 100644
index a2ebf49..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Performance module
-==================================
-
-.. automodule:: Cheetah.Tests.Performance
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt
deleted file mode 100644
index a714077..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Pinger module
-=============================
-
-.. automodule:: Cheetah.Tests.Pinger
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt
deleted file mode 100644
index 249e4b6..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Regressions module
-==================================
-
-.. automodule:: Cheetah.Tests.Regressions
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt b/docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt
deleted file mode 100644
index 5b2fbab..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.SyntaxAndOutput module
-======================================
-
-.. automodule:: Cheetah.Tests.SyntaxAndOutput
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Template.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Template.rst.txt
deleted file mode 100644
index eb24526..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Template.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Template module
-===============================
-
-.. automodule:: Cheetah.Tests.Template
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Test.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Test.rst.txt
deleted file mode 100644
index 23d5291..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Test.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Test module
-===========================
-
-.. automodule:: Cheetah.Tests.Test
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt
deleted file mode 100644
index f3ee955..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.Unicode module
-==============================
-
-.. automodule:: Cheetah.Tests.Unicode
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tests.rst.txt b/docs/html/_sources/api/Cheetah.Tests.rst.txt
deleted file mode 100644
index 8d6c879..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.rst.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-Cheetah\.Tests package
-======================
-
-.. automodule:: Cheetah.Tests
- :members:
- :undoc-members:
- :show-inheritance:
-
-Submodules
-----------
-
-.. toctree::
-
- Cheetah.Tests.Analyzer
- Cheetah.Tests.Boinker
- Cheetah.Tests.CheetahWrapper
- Cheetah.Tests.Cheps
- Cheetah.Tests.Filters
- Cheetah.Tests.Misc
- Cheetah.Tests.NameMapper
- Cheetah.Tests.NameMapper_pure
- Cheetah.Tests.Parser
- Cheetah.Tests.Performance
- Cheetah.Tests.Pinger
- Cheetah.Tests.Regressions
- Cheetah.Tests.SyntaxAndOutput
- Cheetah.Tests.Template
- Cheetah.Tests.Test
- Cheetah.Tests.Unicode
- Cheetah.Tests.xmlrunner
-
diff --git a/docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt b/docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt
deleted file mode 100644
index 23e34f4..0000000
--- a/docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tests\.xmlrunner module
-================================
-
-.. automodule:: Cheetah.Tests.xmlrunner
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt b/docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt
deleted file mode 100644
index 3e72776..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tools\.CGITemplate module
-==================================
-
-.. automodule:: Cheetah.Tools.CGITemplate
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt b/docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt
deleted file mode 100644
index e875ead..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tools\.MondoReport module
-==================================
-
-.. automodule:: Cheetah.Tools.MondoReport
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt b/docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt
deleted file mode 100644
index eb5f72b..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tools\.RecursiveNull module
-====================================
-
-.. automodule:: Cheetah.Tools.RecursiveNull
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt b/docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt
deleted file mode 100644
index 9c8b983..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tools\.SiteHierarchy module
-====================================
-
-.. automodule:: Cheetah.Tools.SiteHierarchy
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tools.rst.txt b/docs/html/_sources/api/Cheetah.Tools.rst.txt
deleted file mode 100644
index e5dd5a2..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.rst.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-Cheetah\.Tools package
-======================
-
-.. automodule:: Cheetah.Tools
- :members:
- :undoc-members:
- :show-inheritance:
-
-Subpackages
------------
-
-.. toctree::
-
- Cheetah.Tools.turbocheetah
-
-Submodules
-----------
-
-.. toctree::
-
- Cheetah.Tools.CGITemplate
- Cheetah.Tools.MondoReport
- Cheetah.Tools.RecursiveNull
- Cheetah.Tools.SiteHierarchy
-
diff --git a/docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt
deleted file mode 100644
index c488cdd..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tools\.turbocheetah\.cheetahsupport module
-===================================================
-
-.. automodule:: Cheetah.Tools.turbocheetah.cheetahsupport
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt
deleted file mode 100644
index 6ea7430..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Cheetah\.Tools\.turbocheetah package
-====================================
-
-.. automodule:: Cheetah.Tools.turbocheetah
- :members:
- :undoc-members:
- :show-inheritance:
-
-Subpackages
------------
-
-.. toctree::
-
- Cheetah.Tools.turbocheetah.tests
-
-Submodules
-----------
-
-.. toctree::
-
- Cheetah.Tools.turbocheetah.cheetahsupport
-
diff --git a/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt
deleted file mode 100644
index a7b1e4e..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Cheetah\.Tools\.turbocheetah\.tests package
-===========================================
-
-.. automodule:: Cheetah.Tools.turbocheetah.tests
- :members:
- :undoc-members:
- :show-inheritance:
-
-Submodules
-----------
-
-.. toctree::
-
- Cheetah.Tools.turbocheetah.tests.test_template
-
diff --git a/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt
deleted file mode 100644
index b04f2cf..0000000
--- a/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Tools\.turbocheetah\.tests\.test\_template module
-==========================================================
-
-.. automodule:: Cheetah.Tools.turbocheetah.tests.test_template
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Unspecified.rst.txt b/docs/html/_sources/api/Cheetah.Unspecified.rst.txt
deleted file mode 100644
index 52fc6f7..0000000
--- a/docs/html/_sources/api/Cheetah.Unspecified.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Unspecified module
-===========================
-
-.. automodule:: Cheetah.Unspecified
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt b/docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt
deleted file mode 100644
index 74c8bd6..0000000
--- a/docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Utils\.Indenter module
-===============================
-
-.. automodule:: Cheetah.Utils.Indenter
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt b/docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt
deleted file mode 100644
index 5baddfa..0000000
--- a/docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Utils\.Misc module
-===========================
-
-.. automodule:: Cheetah.Utils.Misc
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt b/docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt
deleted file mode 100644
index 3083ae3..0000000
--- a/docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Utils\.WebInputMixin module
-====================================
-
-.. automodule:: Cheetah.Utils.WebInputMixin
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt b/docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt
deleted file mode 100644
index dc09574..0000000
--- a/docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Utils\.htmlDecode module
-=================================
-
-.. automodule:: Cheetah.Utils.htmlDecode
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt b/docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt
deleted file mode 100644
index 4d8efa6..0000000
--- a/docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Utils\.htmlEncode module
-=================================
-
-.. automodule:: Cheetah.Utils.htmlEncode
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Utils.rst.txt b/docs/html/_sources/api/Cheetah.Utils.rst.txt
deleted file mode 100644
index 54d238c..0000000
--- a/docs/html/_sources/api/Cheetah.Utils.rst.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Cheetah\.Utils package
-======================
-
-.. automodule:: Cheetah.Utils
- :members:
- :undoc-members:
- :show-inheritance:
-
-Submodules
-----------
-
-.. toctree::
-
- Cheetah.Utils.Indenter
- Cheetah.Utils.Misc
- Cheetah.Utils.WebInputMixin
- Cheetah.Utils.htmlDecode
- Cheetah.Utils.htmlEncode
- Cheetah.Utils.statprof
-
diff --git a/docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt b/docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt
deleted file mode 100644
index 30628cf..0000000
--- a/docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Utils\.statprof module
-===============================
-
-.. automodule:: Cheetah.Utils.statprof
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.Version.rst.txt b/docs/html/_sources/api/Cheetah.Version.rst.txt
deleted file mode 100644
index 5560b29..0000000
--- a/docs/html/_sources/api/Cheetah.Version.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.Version module
-=======================
-
-.. automodule:: Cheetah.Version
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.compat.rst.txt b/docs/html/_sources/api/Cheetah.compat.rst.txt
deleted file mode 100644
index 58b262c..0000000
--- a/docs/html/_sources/api/Cheetah.compat.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.compat module
-======================
-
-.. automodule:: Cheetah.compat
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt b/docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt
deleted file mode 100644
index f6efa39..0000000
--- a/docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah\.convertTmplPathToModuleName module
-===========================================
-
-.. automodule:: Cheetah.convertTmplPathToModuleName
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/html/_sources/api/Cheetah.rst.txt b/docs/html/_sources/api/Cheetah.rst.txt
deleted file mode 100644
index 1a39047..0000000
--- a/docs/html/_sources/api/Cheetah.rst.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-Cheetah package
-===============
-
-.. automodule:: Cheetah
- :members:
- :undoc-members:
- :show-inheritance:
-
-Subpackages
------------
-
-.. toctree::
-
- Cheetah.Macros
- Cheetah.Templates
- Cheetah.Tests
- Cheetah.Tools
- Cheetah.Utils
-
-Submodules
-----------
-
-.. toctree::
-
- Cheetah.CacheRegion
- Cheetah.CacheStore
- Cheetah.CheetahWrapper
- Cheetah.Compiler
- Cheetah.DirectiveAnalyzer
- Cheetah.Django
- Cheetah.DummyTransaction
- Cheetah.ErrorCatchers
- Cheetah.FileUtils
- Cheetah.Filters
- Cheetah.ImportHooks
- Cheetah.ImportManager
- Cheetah.NameMapper
- Cheetah.Parser
- Cheetah.Servlet
- Cheetah.SettingsManager
- Cheetah.SourceReader
- Cheetah.Template
- Cheetah.TemplateCmdLineIface
- Cheetah.Unspecified
- Cheetah.Version
- Cheetah.compat
- Cheetah.convertTmplPathToModuleName
-
diff --git a/docs/html/_sources/api/modules.rst.txt b/docs/html/_sources/api/modules.rst.txt
deleted file mode 100644
index 3aee30a..0000000
--- a/docs/html/_sources/api/modules.rst.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Cheetah
-=======
-
-.. toctree::
- :maxdepth: 4
-
- Cheetah
diff --git a/docs/html/_sources/authors.rst.txt b/docs/html/_sources/authors.rst.txt
deleted file mode 100644
index 9140385..0000000
--- a/docs/html/_sources/authors.rst.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-Authors and contributors
-========================
-
-Cheetah was originally written by Tavis Rudd <tavis at damnsimple.com>.
-
-Contributions have been made by:
-
-* Mike Orr <sluggoster at gmail.com>
-* Chuck Esterbrook <echuck at mindspring.com>
-* Shannon JJ Behrens <jjinux at gmail.com>
-* Ian Bicking <ian at ianbicking.org>
-* \R. Tyler Croy <tyler at monkeypox.org>
-* James Abbatiello <abbeyj at gmail.com>
-* Jean-Baptiste Quenot <jbq at caraldi.com>
-* Marc Abramowitz <marc at marc-abramowitz.com>
-* Mike Bonnet <mikeb at redhat.com>
-* Doug Knight <karmix0 at gmail.com>
-* Jon Siddle <js at corefiling.co.uk>
-* Anwesha Das <anwesha at das.community>
-* Arun Kumar <arunkakorp at gmail.com>
-* Austin Haigh <austin at haigh.com>
-* Darren Yin <darren.yin at gmail.com>
-* Evan Klitzke <evan at yelp.com>
-* Kurt Schwehr <schwehr at google.com>
-* Lakshmi Vyasarajan <lakshmi.vyas at gmail.com>
-* Mika Eloranta <mel at ohmu.fi>
-* mikola <mikola at tut.by>
-* Adam Karpierz <python at python.pl>
-* Jonathan Ross Rogers <jrogers at socialserve.com>
-* Mathias Stearn <redbeard0531 at gmail.com>
-* Oleg Broytman <phd@phdru.name>
diff --git a/docs/html/_sources/chep.rst.txt b/docs/html/_sources/chep.rst.txt
deleted file mode 100644
index abe8d22..0000000
--- a/docs/html/_sources/chep.rst.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-Cheetah Enhancement Proposals
-=============================
-
-The concept of the **Cheetah Enhancement Proposal** is similar to the
-`Python Enhancement Proposal <http://www.python.org/dev/peps/>`_ in that
-they are used to outline the future development of Cheetah as both a
-language and a framework.
-
-Existing CHEPs
---------------
-
-.. toctree::
- :maxdepth: 1
-
- cheps/1_chep.rst
- cheps/2_import.rst
- cheps/3_super.rst
diff --git a/docs/html/_sources/cheps/1_chep.rst.txt b/docs/html/_sources/cheps/1_chep.rst.txt
deleted file mode 100644
index 0dae336..0000000
--- a/docs/html/_sources/cheps/1_chep.rst.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-(#1) CHEP Purpose and Guidelines
-=================================
-
-
-:CHEP: 1
-:Title: CHEP Purpose and Guidelines
-:Version: 1
-:Author: R Tyler Ballance <tyler at slide.com>
-:Status: Active
-:Type: Process
-:Content-Type: text/x-rst
-:Created: 07-Jun-2009
-
-----
-
-Abstract
---------
-One can consider the basis for all CHEP documents to be
-modeled after `PEP #1 <http://www.python.org/dev/peps/pep-0001/>`_,
-for this reason you should refer to `PEP #1 <http://www.python.org/dev/peps/pep-0001/>`_
-for the true CHEP "purpose and guidelines" instead of them being
-enumerated here (and duplicated).
-
-Copyright
----------
-This document has been placed in the public domain.
diff --git a/docs/html/_sources/cheps/2_import.rst.txt b/docs/html/_sources/cheps/2_import.rst.txt
deleted file mode 100644
index 25fc4b7..0000000
--- a/docs/html/_sources/cheps/2_import.rst.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-(#2) Conditionalized #import behavior
-=====================================
-
-
-:CHEP: 2
-:Title: Conditionalized #import behavior
-:Version: 1
-:Author: R Tyler Ballance <tyler at slide.com>
-:Status: Draft
-:Type: Standards Track
-:Content-Type: text/x-rst
-:Created: 07-Jun-2009
-
-----
-
-Abstract
---------
-This CHEP proposes an update to the way the #import and #from
-directives are handled such that locally scoped imports and
-module-level imports are handled appropriately.
-
-
-Motivation
-----------
-Currently Cheetah (v2.2.1) provides two different, but mutually exclusive,
-means of importing Python modules with the #from/#import directives. The
-"traditional" handling for #from/#import (hereafter referred to as "module imports")
-is that the generated import statements shall all be relocated to
-the top of the generated module's source code, i.e. ::
-
- #import cjson
-
- Hello $cjson.encode([1, 2, 3])
-
-
-Will result in generated module code along the lines of::
-
- import cjson
-
- class Foo(Template):
- def writeBody(self):
- write('Hello ')
- write(cjson.encode([1, 2, 3]))
-
-
-Also currently in Cheetah is the ability to switch off this
-behavior and enable location specific #from/#import handling
-(hereafter referred to as "function imports") in the generated
-code, with this block of Cheetah for example::
-
- #def aFunction(arg)
- #try
- #from hashlib import md5
- #except ImportError
- #from md5 import md5
- #end try
- #return $md5.new(arg).hexdigest()
- #end def
-
-Will result in code generated with everything in
-place such that the Python looks something like::
-
- class Foo(Template):
- def aFunction(self, arg):
- try:
- from hashlib import md5
- except ImportError:
- from md5 import md5
- return md5.new(arg).hexdigest()
-
-
-These two approaches to handling the #from/#import directives
-are both beneficial for different situations but currently they
-are handled in mutually exclusive code paths and in mutually
-exclusive fashions.
-
-Specification
--------------
-The change in #from/#import behavior and how these directives
-are handled is all based on context of their use, making the
-#from/#import handling "intelligent". For module imports, the
-"traditional" handling of the #from/#import directives will
-still apply. Whereas function imports will result in inline
-generated import code.
-
-The basic premise of the change proposed by this document is
-that all #from/#import directives contained within a #def/#end def
-closure will result in import statements contained within that
-function block whereas everywhere else the statements will be relocated
-to the top of the generated module code (i.e. the module import)
-
-
-Rationale
----------
-The concept of the "function import" was introduced in Cheetah v2.1.0
-and quickly retrofitted to "live" behind a compiler setting due to the
-regressions with older templates or templates that were designed to utilize
-module imports (through heavy #block/#end block use, etc). Through discussion
-with Tavis Rudd, this middle ground between the two styles of importing was
-concluded to be the most reasonable solution to providing "pythonic" import
-functionality (i.e. "function import" also known as "inline imports") while
-still providing the ability to have #from/#import directives declared at the
-module scope within the template (within the Cheetah templates, markup and most
-directives declared within the module scope are placed inside the default method).
-
-
-Backwards Compatibility
------------------------
-Changes proposed in this document should be *mostly* backwards
-compatible with current versions of Cheetah, Any unforeseen issues
-could arise from the use of #from/#import inside of a function
-expecting those symbols to be available outside of the function
-that they're declared in.
-
-
-Reference Implementation
-------------------------
-*still in development*
-
-Copyright
----------
-This document has been placed in the public domain.
diff --git a/docs/html/_sources/cheps/3_super.rst.txt b/docs/html/_sources/cheps/3_super.rst.txt
deleted file mode 100644
index 71f15f3..0000000
--- a/docs/html/_sources/cheps/3_super.rst.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-(#3) Exposing of super() and self via Template searchList
-=========================================================
-
-
-:CHEP: 3
-:Title: Exposing of super() and self via Template searchList
-:Version: 1
-:Author: R Tyler Ballance <tyler at slide.com>
-:Status: Draft
-:Type: Standards Track
-:Content-Type: text/x-rst
-:Created: 07-Jun-2009
-
-----
-
-Abstract
---------
-
-Specification
--------------
-
-Motivation
-----------
-
-Rationale
----------
-
-Backwards Compatibility
------------------------
-
-Reference Implementation
-------------------------
-
-Copyright
----------
-This document has been placed in the public domain.
diff --git a/docs/html/_sources/dev_guide/bnf.rst.txt b/docs/html/_sources/dev_guide/bnf.rst.txt
deleted file mode 100644
index ef214b4..0000000
--- a/docs/html/_sources/dev_guide/bnf.rst.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-A BNF Grammar of Cheetah
-========================
-
-(bnf)
-
-
diff --git a/docs/html/_sources/dev_guide/cache.rst.txt b/docs/html/_sources/dev_guide/cache.rst.txt
deleted file mode 100644
index ce0829c..0000000
--- a/docs/html/_sources/dev_guide/cache.rst.txt
+++ /dev/null
@@ -1,404 +0,0 @@
-Caching placeholders and #cache
-===============================
-
-(cache)
-
-Dynamic placeholder - no cache
-------------------------------
-
-(cache.dynamic)
-
-The template:
-
-::
-
- Dynamic variable: $voom
-
-The command line and the output:
-
-::
-
- % voom='Voom!' python x.py --env
- Dynamic variable: Voom!
-
-The generated code:
-
-::
-
- write('Dynamic variable: ')
- write(filter(VFS(SL,"voom",1))) # generated from '$voom' at line 1, col 20.
- write('\n')
-
-Just what we expected, like any other dynamic placeholder.
-
-Static placeholder
-------------------
-
-(cache.static)
-
-The template:
-
-::
-
- Cached variable: $*voom
-
-The command line and output:
-
-::
-
- % voom='Voom!' python x.py --env
- Cached variable: Voom!
-
-The generated code, with line numbers:
-
-::
-
- 1 write('Cached variable: ')
- 2 ## START CACHE REGION: at line, col (1, 19) in the source.
- 3 RECACHE = True
- 4 if '19760169' not in self._cacheData:
- 5 pass
- 6 else:
- 7 RECACHE = False
- 8 if RECACHE:
- 9 orig_trans = trans
- 10 trans = cacheCollector = DummyTransaction()
- 11 write = cacheCollector.response().write
- 12 write(filter(VFS(SL,"voom",1))) # generated from '$*voom' at line 1,
- # col 19.
- 13 trans = orig_trans
- 14 write = trans.response().write
- 15 self._cacheData['19760169'] = cacheCollector.response().getvalue()
- 16 del cacheCollector
- 17 write(self._cacheData['19760169'])
- 18 ## END CACHE REGION
-
- 19 write('\n')
-
-That one little star generated a whole lotta code. First, instead
-of an ordinary {VFS} lookup (searchList) lookup, it converted the
-placeholder to a lookup in the {.\_cacheData} dictionary. Cheetah
-also generated a unique key ({'19760169'}) for our cached item -
-this is its cache ID.
-
-Second, Cheetah put a pair of if-blocks before the {write}. The
-first (lines 3-7) determine whether the cache value is missing or
-out of date, and sets local variable {RECACHE} true or false. This
-stanza may look unnecessarily verbose - lines 3-7 could be
-eliminated if line 8 was changed to
-
-::
-
- if '19760169' not in self._cacheData:
-
-- but this model is expandable for some of the cache features we'll
-see below.
-
-The second if-block, lines 8-16, do the cache updating if
-necessary. Clearly, the programmer is trying to stick as close to
-normal (dynamic) workflow as possible. Remember that {write}, even
-though it looks like a local function, is actually a method of a
-file-like object. So we create a temporary file-like object to
-divert the {write} object into, then read the result and stuff it
-into the cache.
-
-Timed-refresh placeholder
--------------------------
-
-(cache.timed)
-
-The template:
-
-::
-
- Timed cache: $*.5m*voom
-
-The command line and the output:
-
-::
-
- % voom='Voom!' python x.py --env
- Timed cache: Voom!
-
-The generated method's docstring:
-
-::
-
- """
- This is the main method generated by Cheetah
- This cache will be refreshed every 30.0 seconds.
- """
-
-The generated code:
-
-::
-
- 1 write('Timed cache: ')
- 2 ## START CACHE REGION: at line, col (1, 15) in the source.
- 3 RECACHE = True
- 4 if '55048032' not in self._cacheData:
- 5 self.__cache55048032__refreshTime = currentTime() + 30.0
- 6 elif currentTime() > self.__cache55048032__refreshTime:
- 7 self.__cache55048032__refreshTime = currentTime() + 30.0
- 8 else:
- 9 RECACHE = False
- 10 if RECACHE:
- 11 orig_trans = trans
- 12 trans = cacheCollector = DummyTransaction()
- 13 write = cacheCollector.response().write
- 14 write(filter(VFS(SL,"voom",1))) # generated from '$*.5m*voom' at
- # line 1, col 15.
- 15 trans = orig_trans
- 16 write = trans.response().write
- 17 self._cacheData['55048032'] = cacheCollector.response().getvalue()
- 18 del cacheCollector
- 19 write(self._cacheData['55048032'])
- 20 ## END CACHE REGION
-
- 21 write('\n')
-
-This code is identical to the static cache example except for the
-docstring and the first if-block. (OK, so the cache ID is different
-and the comment on line 14 is different too. Big deal.)
-
-Each timed-refresh cache item has a corrsponding private attribute
-{.\_\_cache########\_\_refreshTime} giving the refresh time in
-ticks (=seconds since January 1, 1970). The first if-block (lines
-3-9) checks whether the cache value is missing or its update time
-has passed, and if so, sets {RECACHE} to true and also schedules
-another refresh at the next interval.
-
-The method docstring reminds the user how often the cache will be
-refreshed. This information is unfortunately not as robust as it
-could be. Each timed-cache placeholder blindly generates a line in
-the docstring. If all refreshes are at the same interval, there
-will be multiple identical lines in the docstring. If the refreshes
-are at different intervals, you get a situation like this:
-
-::
-
- """
- This is the main method generated by Cheetah
- This cache will be refreshed every 30.0 seconds.
- This cache will be refreshed every 60.0 seconds.
- This cache will be refreshed every 120.0 seconds.
- """
-
-The docstring tells only that "something" will be refreshed every
-60.0 seconds, but doesn't reveal { which} placeholder that is. Only
-if you know the relative order of the placeholders in the template
-can you figure that out.
-
-Timed-refresh placeholder with braces
--------------------------------------
-
-(cache.timed.braces)
-
-This example is the same but with the long placeholder syntax. It's
-here because it's a Cheetah FAQ whether to put the cache interval
-inside or outside the braces. (It's also here so I can look it up
-because I frequently forget.) The answer is: outside. The braces go
-around only the placeholder name (and perhaps some output-filter
-arguments.)
-
-The template:
-
-::
-
- Timed with {}: $*.5m*{voom}
-
-The output:
-
-::
-
- Timed with {}: Voom!
-
-The generated code differs only in the comment. Inside the
-cache-refresh if-block:
-
-::
-
- write(filter(VFS(SL,"voom",1))) # generated from '$*.5m*{voom}' at line 1,
- #col 17.
-
-If you try to do it this way:
-
-::
-
- Timed with {}: ${*.5m*voom} ## Wrong!
-
-you get:
-
-::
-
- Timed with {}: ${*.5m*voom}
-
-``${`` is not a valid placeholder, so it gets treated as ordinary
-text.
-
-#cache
-------
-
-(cache.directive)
-
-The template:
-
-::
-
- #cache
- This is a cached region. $voom
- #end cache
-
-The output:
-
-::
-
- This is a cached region. Voom!
-
-The generated code:
-
-::
-
- 1 ## START CACHE REGION: at line, col (1, 1) in the source.
- 2 RECACHE = True
- 3 if '23711421' not in self._cacheData:
- 4 pass
- 5 else:
- 6 RECACHE = False
- 7 if RECACHE:
- 8 orig_trans = trans
- 9 trans = cacheCollector = DummyTransaction()
- 10 write = cacheCollector.response().write
- 11 write('This is a cached region. ')
- 12 write(filter(VFS(SL,"voom",1))) # generated from '$voom' at line 2,
- # col 27.
- 13 write('\n')
- 14 trans = orig_trans
- 15 write = trans.response().write
- 16 self._cacheData['23711421'] = cacheCollector.response().getvalue()
- 17 del cacheCollector
- 18 write(self._cacheData['23711421'])
- 19 ## END CACHE REGION
-
-This is the same as the {$\*voom} example, except that the plain
-text around the placeholder is inside the second if-block.
-
-#cache with timer and id
-------------------------
-
-(cache.directive.timer)
-
-The template:
-
-::
-
- #cache timer='.5m', id='cache1'
- This is a cached region. $voom
- #end cache
-
-The output:
-
-::
-
- This is a cached region. Voom!
-
-The generated code is the same as the previous example except the
-first if-block:
-
-::
-
- RECACHE = True
- if '13925129' not in self._cacheData:
- self._cacheIndex['cache1'] = '13925129'
- self.__cache13925129__refreshTime = currentTime() + 30.0
- elif currentTime() > self.__cache13925129__refreshTime:
- self.__cache13925129__refreshTime = currentTime() + 30.0
- else:
- RECACHE = False
-
-#cache with test: expression and method conditions
---------------------------------------------------
-
-(cache.directive.test)
-
-The template:
-
-::
-
- #cache test=$isDBUpdated
- This is a cached region. $voom
- #end cache
-
-(Analysis postponed: bug in Cheetah produces invalid Python.)
-
-The template:
-
-::
-
- #cache id='cache1', test=($isDBUpdated or $someOtherCondition)
- This is a cached region. $voom
- #end cache
-
-The output:
-
-::
-
- This is a cached region. Voom!
-
-The first if-block in the generated code:
-
-::
-
- RECACHE = True
- if '36798144' not in self._cacheData:
- self._cacheIndex['cache1'] = '36798144'
- elif (VFS(SL,"isDBUpdated",1) or VFS(SL,"someOtherCondition",1)):
- RECACHE = True
- else:
- RECACHE = False
-
-The second if-block is the same as in the previous example. If you
-leave out the {()} around the test expression, the result is the
-same, although it may be harder for the template maintainer to
-read.
-
-You can even combine arguments, although this is of questionable
-value.
-
-The template:
-
-::
-
- #cache id='cache1', timer='30m', test=$isDBUpdated or $someOtherCondition
- This is a cached region. $voom
- #end cache
-
-The output:
-
-::
-
- This is a cached region. Voom!
-
-The first if-block:
-
-::
-
- RECACHE = True
- if '88939345' not in self._cacheData:
- self._cacheIndex['cache1'] = '88939345'
- self.__cache88939345__refreshTime = currentTime() + 1800.0
- elif currentTime() > self.__cache88939345__refreshTime:
- self.__cache88939345__refreshTime = currentTime() + 1800.0
- elif VFS(SL,"isDBUpdated",1) or VFS(SL,"someOtherCondition",1):
- RECACHE = True
- else:
- RECACHE = False
-
-We are planning to add a {'varyBy'} keyword argument in the future
-that will allow separate cache instances to be created for a
-variety of conditions, such as different query string parameters or
-browser types. This is inspired by ASP.net's varyByParam and
-varyByBrowser output caching keywords. Since this is not
-implemented yet, I cannot provide examples here.
-
-
diff --git a/docs/html/_sources/dev_guide/comments.rst.txt b/docs/html/_sources/dev_guide/comments.rst.txt
deleted file mode 100644
index c2f9a89..0000000
--- a/docs/html/_sources/dev_guide/comments.rst.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-Directives: Comments
-====================
-
-(comments)
-
-The template:
-
-::
-
- Text before the comment.
- ## The comment.
- Text after the comment.
- #* A multi-line comment spanning several lines.
- It spans several lines, too.
- *#
- Text after the multi-line comment.
-
-The output:
-
-::
-
- Text before the comment.
- Text after the comment.
-
- Text after the multi-line comment.
-
-The generated code:
-
-::
-
- write('Text before the comment.\n')
- # The comment.
- write('Text after the comment.\n')
- # A multi-line comment spanning several lines.
- # It spans several lines, too.
- write('\nText after the multi-line comment.\n')
-
-Docstring and header comments
------------------------------
-
-(comments.docstring)
-
-The template:
-
-::
-
- ##doc: .respond() method comment.
- ##doc-method: Another .respond() method comment.
- ##doc-class: A class comment.
- ##doc-module: A module comment.
- ##header: A header comment.
-
-The output:
-
-::
-
-
-
-The beginning of the generated {.respond} method:
-
-::
-
- def respond(self,
- trans=None,
- dummyTrans=False,
- VFS=valueFromSearchList,
- VFN=valueForName,
- getmtime=getmtime,
- currentTime=time.time):
-
- """
- This is the main method generated by Cheetah
- .respond() method comment.
- Another .respond() method comment.
- """
-
-The class docstring:
-
-::
-
- """
- A class comment.
-
- Autogenerated by CHEETAH: The Python-Powered Template Engine
- """
-
-The top of the module:
-
-::
-
- #!/usr/bin/env python
- # A header comment.
-
- """A module comment.
-
- Autogenerated by CHEETAH: The Python-Powered Template Engine
- CHEETAH VERSION: 0.9.13a1
- Generation time: Fri Apr 26 22:39:23 2002
- Source file: x.tmpl
- Source file last modified: Fri Apr 26 22:36:23 2002
- """
-
-
diff --git a/docs/html/_sources/dev_guide/compiler.rst.txt b/docs/html/_sources/dev_guide/compiler.rst.txt
deleted file mode 100644
index 33f3bcd..0000000
--- a/docs/html/_sources/dev_guide/compiler.rst.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-The compiler
-============
-
-(compiler)
-
-How templates are compiled: a walk through Compiler.py.
-
-
diff --git a/docs/html/_sources/dev_guide/design.rst.txt b/docs/html/_sources/dev_guide/design.rst.txt
deleted file mode 100644
index 1ffabbd..0000000
--- a/docs/html/_sources/dev_guide/design.rst.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-Design Decisions and Tradeoffs
-==============================
-
-(design)
-
-Delimiters
-----------
-
-(design.Delimiters)
-
-One of the first decisions we encountered was which delimiter
-syntax to use. We decided to follow Velocity's {$placeholder} and
-{#directive} syntax because the former is widely used in other
-languages for the same purpose, and the latter stands out in an
-HTML or text document. We also implemented the
-``${longPlaceholder}`` syntax like the shells for cases where
-Cheetah or you might be confused where a placeholder ends. Tavis
-went ahead and made ``${longPlaceholder}`` and
-``$[longPlaceholder]`` interchangeable with it since it was trivial
-to implement. Finally, the {#compiler} directive allows you to
-change the delimiters if you don't like them or if they conflict
-with the text in your document. (Obviously, if your document
-contains a Perl program listing, you don't necessarily want to
-backslash each and every {$} and {#}, do you?)
-
-The choice of comment delimiters was more arbitrary. {##} and {#\*
-... \*#} doesn't match any language, but it's reminiscent of Python
-and C while also being consistent with our "{#} is for directives"
-convention.
-
-We specifically chose { not} to use pseudo HTML tags for
-placeholders and directives, as described more thoroughly in the
-Cheetah Users' Guide introduction. Pseudo HTML tags may be easier
-to see in a visual editor (supposedly), but in text editors they're
-hard to distinguish from "real" HTML tags unless you look closely,
-and they're many more keystrokes to type. Also, if you make a
-mistake, the tag will show up as literal text in the rendered HTML
-page where it will be easy to notice and eradicate, rather than
-disappearing as bogus HTML tags do in browsers.
-
-Late binding
-------------
-
-(design.lateBinding)
-
-One of Cheetah's unique features is the name mapper, which lets you
-write {$a.b} without worrying much about the type of {a} or {b}.
-Prior to version 0.9.7, Cheetah did the entire NameMapper lookup at
-runtime. This provided maximum flexibility at the expense of speed.
-Doing a NameMapper lookup is intrinsically more expensive than an
-ordinary Python expression because Cheetah has to decide what type
-of container {a} is, whether the the value is a function (autocall
-it), issue the appropriate Python incantation to look up {b} in it,
-autocall again if necessary, and then convert the result to a
-string.
-
-To maximize run-time (filling-time) performance, Cheetah 0.9.7
-pushed much of this work back into the compiler. The compiler
-looked up {a} in the searchList at compile time, noted its type,
-and generated an eval'able Python expression based on that.
-
-This approach had two significant drawbacks. What if {a} later
-changes type before a template filling? Answer: unpredictable
-exceptions occur. What if {a} does not exist in the searchList at
-compile time? Answer: the template can't compile.
-
-To prevent these catastrophes, users were required to prepopulate
-the searchList before instantiating the template instance, and then
-not to change {a}'s type. Static typing is repugnant in a dynamic
-language like Python, and having to prepopulate the searchList made
-certain usages impossible. For example, you couldn't instantiate
-the template object without a searchList and then set {self}
-attributes to specify the values.
-
-After significant user complaints about the fragility of this
-system, Tavis rewrote placeholder handling, and in version 0.9.8a3
-(August 2001), Tavis moved the name mapper lookup back into
-runtime. Performance wasn't crippled because he discovered that
-writing a C version of the name mapper was easier than anticipated,
-and the C version completed the lookup quickly. Now Cheetah had
-"late binding", meaning the compiler does not look up {a} or care
-whether it exists. This allows users to create {a} or change its
-type anytime before a template filling.
-
-The lesson we learned is that it's better to decide what you want
-and then figure out how to do it, rather than assuming that certain
-goals are unattainable due to performance considerations.
-
-Caching framework
------------------
-
-(design.cache)
-
-Webware compatibility and the transaction framework
----------------------------------------------------
-
-(design.webware)
-
-Single inheritance
-------------------
-
-(design.singleInheritance)
-
-
diff --git a/docs/html/_sources/dev_guide/errorHandling.rst.txt b/docs/html/_sources/dev_guide/errorHandling.rst.txt
deleted file mode 100644
index e97d1fb..0000000
--- a/docs/html/_sources/dev_guide/errorHandling.rst.txt
+++ /dev/null
@@ -1,329 +0,0 @@
-Directives: Error Handling
-==========================
-
-(errorHandling)
-
-#try and #raise
----------------
-
-(errorHandling.try)
-
-The template:
-
-::
-
- #import traceback
- #try
- #raise RuntimeError
- #except RuntimeError
- A runtime error occurred.
- #end try
-
- #try
- #raise RuntimeError("Hahaha!")
- #except RuntimeError
- #echo $sys.exc_info()[1]
- #end try
-
- #try
- #echo 1/0
- #except ZeroDivisionError
- You can't divide by zero, idiot!
- #end try
-
-The output:
-
-::
-
- A runtime error occurred.
-
- Hahaha!
-
- You can't divide by zero, idiot!
-
-The generated code:
-
-::
-
- try:
- raise RuntimeError
- except RuntimeError:
- write('A runtime error occurred.\n')
- write('\n')
- try:
- raise RuntimeError("Hahaha!")
- except RuntimeError:
- write(filter(VFN(sys,"exc_info",0)()[1]))
- write('\n')
- write('\n')
- try:
- write(filter(1/0))
- write('\n')
- except ZeroDivisionError:
- write("You can't divide by zero, idiot!\n")
-
-{#finally} works just like in Python.
-
-#assert
--------
-
-(errorHandling.assert)
-
-The template:
-
-::
-
- #assert False, "You lose, buster!"
-
-The output:
-
-::
-
- Traceback (most recent call last):
- File "x.py", line 117, in ?
- x().runAsMainProgram()
- File "/local/opt/Python/lib/python2.2/site-packages/Webware/Cheetah/
- Template.py", line 331, in runAsMainProgram
- CmdLineIface(templateObj=self).run()
- File "/local/opt/Python/lib/python2.2/site-packages/Webware/Cheetah/
- TemplateCmdLineIface.py", line 59, in run
- print self._template
- File "x.py", line 91, in respond
- assert False, "You lose, buster!"
- AssertionError: You lose, buster!
-
-The generated code:
-
-::
-
- assert False, "You lose, buster!"
-
-#errorCatcher
--------------
-
-(errorHandling.errorCatcher)
-
-No error catcher
-~~~~~~~~~~~~~~~~
-
-(errorHandling.errorCatcher.no)
-
-The template:
-
-::
-
- $noValue
-
-The output:
-
-::
-
- Traceback (most recent call last):
- File "x.py", line 118, in ?
- x().runAsMainProgram()
- File "/local/opt/Python/lib/python2.2/site-packages/Webware/Cheetah/
- Template.py", line 331, in runAsMainProgram
- CmdLineIface(templateObj=self).run()
- File "/local/opt/Python/lib/python2.2/site-packages/Webware/Cheetah/
- TemplateCmdLineIface.py", line 59, in run
- print self._template
- File "x.py", line 91, in respond
- write(filter(VFS(SL,"noValue",1))) # generated from '$noValue' at line
- 1, col 1.
- NameMapper.NotFound: noValue
-
-The generated code:
-
-::
-
- write(filter(VFS(SL,"noValue",1))) # generated from '$noValue' at line 1,
- # col 1.
- write('\n')
-
-Echo and BigEcho
-~~~~~~~~~~~~~~~~
-
-(errorHandling.errorCatcher.echo)
-
-The template:
-
-::
-
- #errorCatcher Echo
- $noValue
- #errorCatcher BigEcho
- $noValue
-
-The output:
-
-::
-
- $noValue
- ===============&lt;$noValue could not be found&gt;===============
-
-The generated code:
-
-::
-
- if "Echo" in self._errorCatchers:
- self._errorCatcher = self._errorCatchers["Echo"]
- else:
- self._errorCatcher = self._errorCatchers["Echo"] = ErrorCatchers.Echo(self)
- write(filter(self.__errorCatcher1(localsDict=locals())))
- # generated from '$noValue' at line 2, col 1.
- write('\n')
- if "BigEcho" in self._errorCatchers:
- self._errorCatcher = self._errorCatchers["BigEcho"]
- else:
- self._errorCatcher = self._errorCatchers["BigEcho"] = \
- ErrorCatchers.BigEcho(self)
- write(filter(self.__errorCatcher1(localsDict=locals())))
- # generated from '$noValue' at line 4, col 1.
- write('\n')
-
-ListErrors
-~~~~~~~~~~
-
-(errorHandling.errorCatcher.listErrors)
-
-The template:
-
-::
-
- #import pprint
- #errorCatcher ListErrors
- $noValue
- $anotherMissingValue.really
- $pprint.pformat($errorCatcher.listErrors)
- ## This is really self.errorCatcher().listErrors()
-
-The output:
-
-::
-
- $noValue
- $anotherMissingValue.really
- [{'code': 'VFS(SL,"noValue",1)',
- 'exc_val': <NameMapper.NotFound instance at 0x8170ecc>,
- 'lineCol': (3, 1),
- 'rawCode': '$noValue',
- 'time': 'Wed May 15 00:38:23 2002'},
- {'code': 'VFS(SL,"anotherMissingValue.really",1)',
- 'exc_val': <NameMapper.NotFound instance at 0x816d0fc>,
- 'lineCol': (4, 1),
- 'rawCode': '$anotherMissingValue.really',
- 'time': 'Wed May 15 00:38:23 2002'}]
-
-The generated import:
-
-::
-
- import pprint
-
-Then in the generated class, we have our familiar {.respond} method
-and several new methods:
-
-::
-
- def __errorCatcher1(self, localsDict={}):
- """
- Generated from $noValue at line, col (3, 1).
- """
-
- try:
- return eval('''VFS(SL,"noValue",1)''', globals(), localsDict)
- except self._errorCatcher.exceptions(), e:
- return self._errorCatcher.warn(exc_val=e, code= 'VFS(SL,"noValue",1)' ,
- rawCode= '$noValue' , lineCol=(3, 1))
-
- def __errorCatcher2(self, localsDict={}):
- """
- Generated from $anotherMissingValue.really at line, col (4, 1).
- """
-
- try:
- return eval('''VFS(SL,"anotherMissingValue.really",1)''', globals(),
- localsDict)
- except self._errorCatcher.exceptions(), e:
- return self._errorCatcher.warn(exc_val=e,
- code= 'VFS(SL,"anotherMissingValue.really",1)' ,
- rawCode= '$anotherMissingValue.really' , lineCol=(4, 1))
-
- def __errorCatcher3(self, localsDict={}):
- """
- Generated from $pprint.pformat($errorCatcher.listErrors) at line, col
- (5, 1).
- """
-
- try:
- return eval('''VFN(pprint,"pformat",0)(VFS(SL,
- "errorCatcher.listErrors",1))''', globals(), localsDict)
- except self._errorCatcher.exceptions(), e:
- return self._errorCatcher.warn(exc_val=e, code=
- 'VFN(pprint,"pformat",0)(VFS(SL,"errorCatcher.listErrors",1))' ,
- rawCode= '$pprint.pformat($errorCatcher.listErrors)' ,
- lineCol=(5, 1))
-
-::
-
- def respond(self,
- trans=None,
- dummyTrans=False,
- VFS=valueFromSearchList,
- VFN=valueForName,
- getmtime=getmtime,
- currentTime=time.time):
-
-
- """
- This is the main method generated by Cheetah
- """
-
- if not trans:
- trans = DummyTransaction()
- dummyTrans = True
- write = trans.response().write
- SL = self._searchList
- filter = self._currentFilter
- globalSetVars = self._globalSetVars
-
- ########################################
- ## START - generated method body
-
- if exists(self._filePath) and getmtime(self._filePath) > self._fileMtime:
- self.compile(file=self._filePath)
- write(getattr(self, self._mainCheetahMethod_for_x)(trans=trans))
- if dummyTrans:
- return trans.response().getvalue()
- else:
- return ""
- if "ListErrors" in self._errorCatchers:
- self._errorCatcher = self._errorCatchers["ListErrors"]
- else:
- self._errorCatcher = self._errorCatchers["ListErrors"] = \
- ErrorCatchers.ListErrors(self)
- write(filter(self.__errorCatcher1(localsDict=locals())))
- # generated from '$noValue' at line 3, col 1.
- write('\n')
- write(filter(self.__errorCatcher2(localsDict=locals())))
- # generated from '$anotherMissingValue.really' at line 4, col 1.
- write('\n')
- write(filter(self.__errorCatcher3(localsDict=locals())))
- # generated from '$pprint.pformat($errorCatcher.listErrors)' at line
- # 5, col 1.
- write('\n')
- # This is really self.errorCatcher().listErrors()
-
- ########################################
- ## END - generated method body
-
- if dummyTrans:
- return trans.response().getvalue()
- else:
- return ""
-
-So whenever an error catcher is active, each placeholder gets
-wrapped in its own method. No wonder error catchers slow down the
-system!
-
-
diff --git a/docs/html/_sources/dev_guide/files.rst.txt b/docs/html/_sources/dev_guide/files.rst.txt
deleted file mode 100644
index ab8d7a1..0000000
--- a/docs/html/_sources/dev_guide/files.rst.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Files
-=====
-
-(files)
-
-This chapter will be an overview of the files in the Cheetah
-package, and how they interrelate in compiling and filling a
-template. We'll also look at files in the Cheetah tarball that
-don't get copied into the package.
-
-
diff --git a/docs/html/_sources/dev_guide/flowControl.rst.txt b/docs/html/_sources/dev_guide/flowControl.rst.txt
deleted file mode 100644
index d391b2f..0000000
--- a/docs/html/_sources/dev_guide/flowControl.rst.txt
+++ /dev/null
@@ -1,394 +0,0 @@
-Directives: Flow Control
-========================
-
-(flowControl)
-
-#for
-----
-
-(flowControl.for)
-
-The template:
-
-::
-
- #for $i in $range(10)
- $i #slurp
- #end for
-
-The output:
-
-::
-
- 0 1 2 3 4 5 6 7 8 9
-
-The generated code:
-
-::
-
- for i in range(10):
- write(filter(i)) # generated from '$i' at line 2, col 1.
- write(' ')
-
-#repeat
--------
-
-(flowControl.repeat)
-
-The template:
-
-::
-
- #repeat 3
- My bonnie lies over the ocean
- #end repeat
- O, bring back my bonnie to me!
-
-The output:
-
-::
-
- My bonnie lies over the ocean
- My bonnie lies over the ocean
- My bonnie lies over the ocean
- O, bring back my bonnie to me!
-
-(OK, so the second line should be "sea" instead of "ocean".)
-
-The generated code:
-
-::
-
- for __i0 in range(3):
- write('My bonnie lies over the ocean\n')
- write('O, bring back my bonnie to me!\n')
-
-Note that a new local variable of the form {\_\_i$num} will be used
-for each instance of {repeat} in order to permit nesting.
-
-#while
-------
-
-(flowControl.while)
-
-The template:
-
-::
-
- #set $alive = True
- #while $alive
- I am alive!
- #set $alive = False
- #end while
-
-The output:
-
-::
-
- I am alive!
-
-The generated code:
-
-::
-
- alive = True
- while alive:
- write('I am alive!\n')
- alive = False
-
-#if
----
-
-()
-
-The template:
-
-::
-
- #set $size = 500
- #if $size >= 1500
- It's big
- #else if $size < 1500 and $size > 0
- It's small
- #else
- It's not there
- #end if
-
-The output:
-
-::
-
- It's small
-
-The generated code:
-
-::
-
- size = 500
- if size >= 1500:
- write("It's big\n")
- elif size < 1500 and size > 0:
- write("It's small\n")
- else:
- write("It's not there\n")
-
-#unless
--------
-
-(flowControl.unless)
-
-The template:
-
-::
-
- #set $count = 9
- #unless $count + 5 > 15
- Count is in range.
- #end unless
-
-The output:
-
-::
-
- Count is in range.
-
-The generated code:
-
-::
-
- count = 9
- if not (count + 5 > 15):
- write('Count is in range.\n')
-
-{ Note:} There is a bug in Cheetah 0.9.13. It's forgetting the
-parentheses in the {if} expression, which could lead to it
-calculating something different than it should.
-
-#break and #continue
---------------------
-
-(flowControl.break)
-
-The template:
-
-::
-
- #for $i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'James', 'Joe', 'Snow']
- #if $i == 10
- #continue
- #end if
- #if $i == 'Joe'
- #break
- #end if
- $i - #slurp
- #end for
-
-The output:
-
-::
-
- 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 11 - 12 - James -
-
-The generated code:
-
-::
-
- for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'James', 'Joe', 'Snow']:
- if i == 10:
- write('')
- continue
- if i == 'Joe':
- write('')
- break
- write(filter(i)) # generated from '$i' at line 8, col 1.
- write(' - ')
-
-#pass
------
-
-(flowControl.pass)
-
-The template:
-
-::
-
- Let's check the number.
- #set $size = 500
- #if $size >= 1500
- It's big
- #elif $size > 0
- #pass
- #else
- Invalid entry
- #end if
- Done checking the number.
-
-The output:
-
-::
-
- Let's check the number.
- Done checking the number.
-
-The generated code:
-
-::
-
- write("Let's check the number.\n")
- size = 500
- if size >= 1500:
- write("It's big\n")
- elif size > 0:
- pass
- else:
- write('Invalid entry\n')
- write('Done checking the number.\n')
-
-#stop
------
-
-(flowControl.stop)
-
-The template:
-
-::
-
- A cat
- #if 1
- sat on a mat
- #stop
- watching a rat
- #end if
- in a flat.
-
-The output:
-
-::
-
- A cat
- sat on a mat
-
-The generated code:
-
-::
-
- write('A cat\n')
- if 1:
- write(' sat on a mat\n')
- if dummyTrans:
- return trans.response().getvalue()
- else:
- return ""
- write(' watching a rat\n')
- write('in a flat.\n')
-
-#return
--------
-
-(flowControl.return)
-
-The template:
-
-::
-
- 1
- $test[1]
- 3
- #def test
- 1.5
- #if 1
- #return '123'
- #else
- 99999
- #end if
- #end def
-
-The output:
-
-::
-
- 1
- 2
- 3
-
-The generated code:
-
-::
-
- def test(self,
- trans=None,
- dummyTrans=False,
- VFS=valueFromSearchList,
- VFN=valueForName,
- getmtime=getmtime,
- currentTime=time.time):
-
-
- """
- Generated from #def test at line 5, col 1.
- """
-
- if not trans:
- trans = DummyTransaction()
- dummyTrans = True
- write = trans.response().write
- SL = self._searchList
- filter = self._currentFilter
- globalSetVars = self._globalSetVars
-
- ########################################
- ## START - generated method body
-
- write('1.5\n')
- if 1:
- return '123'
- else:
- write('99999\n')
-
- ########################################
- ## END - generated method body
-
- if dummyTrans:
- return trans.response().getvalue()
- else:
- return ""
-
-::
-
- def respond(self,
- trans=None,
- dummyTrans=False,
- VFS=valueFromSearchList,
- VFN=valueForName,
- getmtime=getmtime,
- currentTime=time.time):
-
-
- """
- This is the main method generated by Cheetah
- """
-
- if not trans:
- trans = DummyTransaction()
- dummyTrans = True
- write = trans.response().write
- SL = self._searchList
- filter = self._currentFilter
- globalSetVars = self._globalSetVars
-
- ########################################
- ## START - generated method body
-
- write('\n1\n')
- write(filter(VFS(SL,"test",1)[1])) # generated from '$test[1]' at line 3, col 1.
- write('\n3\n')
-
- ########################################
- ## END - generated method body
-
- if dummyTrans:
- return trans.response().getvalue()
- else:
- return ""
-
-
diff --git a/docs/html/_sources/dev_guide/history.rst.txt b/docs/html/_sources/dev_guide/history.rst.txt
deleted file mode 100644
index d0e1ceb..0000000
--- a/docs/html/_sources/dev_guide/history.rst.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-History of Cheetah
-==================
-
-(history)
-
-In Spring 2001, several members of the webware-discuss mailing list
-expressed the need for a template engine. Webware like Python is
-great for organizing logic, but they both suffer when you need to
-do extensive variable interpolation into large pieces of text, or
-to build up a text string from its nested parts. Python's {%}
-operator gets you only so far, the syntax is cumbersome, and you
-have to use a separate format string for each nested part. Most of
-us had used template systems from other platforms-chiefly Zope's
-DTML, PHPLib's Template object and Java's Velocity-and wanted to
-port something like those so it could be used both in Webware
-servlets and in standalone Python programs.
-
-Since I (Mike Orr) am writing this history, I'll describe how I
-encountered Cheetah. I had written a template module called
-PlowPlate based on PHPLib's Template library. Like PHPLib, it used
-regular expressions to search and destroy-er, replace-placeholders,
-behaved like a dictionary to specify placeholder values, contained
-no directives, but did have BEGIN and END markers which could be
-used to extract a named block (subtemplate). Meanwhile, Tavis Rudd
-was also on webware-discuss and interested in templates, and he
-lived just a few hours away. So on 12 May 2001 we met in Vancouver
-at a gelato shop on Denman Street and discussed Webware, and he
-drew on a napkin the outline of a template system he was working
-on.
-
-[Note from Tavis: Mikes got the dates and sequence of things a
-little out of order, but what the hell ...]
-
-Instead of filling the template by search-and-replace, he wanted to
-break it up into parts. This was a primitive form of template
-compiling: do the time-consuming work once and put it to a state
-where you can fill the template quickly multiple times. A template
-without directives happens to break down naturally into a list of
-alternating text/placeholder pairs. The odd subscript values are
-literal strings; the even subscripts are string keys into a
-dictionary of placeholder values. The project was called
-TemplateServer.
-
-In a couple months, Tavis decided that instead of compiling to a
-list, he wanted to compile to Python source code: a series of
-{write} calls that would output into a file-like object. This was
-the nucleus that became Cheetah. I thought that idea was stupid,
-but it turned out that this not-so-stupid idea blew all the others
-out of the water in terms of performance.
-
-Another thing Tavis pushed hard for from near the beginning was
-"display logic", or simple directives like {#for}, {#if} and
-{#echo}. (OK, {#echo} came later, but conceptually it belongs here.
-I thought display logic was even stupider than compiling to Python
-source code because it would just lead to "DTML hell"-complicated
-templates that are hard to read and maintain, and for which you
-have to learn (and debug) a whole new language when Python does it
-just fine. But others (hi Chuck!) had templates that were
-maintained by secretaries who didn't know Python, and the
-secretaries needed display logic, so that was that. Finally, after
-working with Cheetah templates (with display logic) and PlowPlate
-templates (with just blocks rather than display logic), I realized
-Tavis was smarter than I was and display logic really did belong in
-the template.
-
-The next step was making directives for all the Python flow-control
-statements: {#while}, {#try}, {#assert}, etc. Some of them we
-couldn't think of a use for. Nevertheless, they were easy to code,
-and "somebody" would probably need them "someday", so we may as
-well implement them now.
-
-During all this, Chuck Esterbrook, Ian Bicking and others offered
-(and still offer) their support and suggestions, and Chuck gave us
-feedback about his use of Cheetah-its first deployment in a
-commercial production environment. Later, Edmund Lian became our #1
-bug reporter and suggester as he used Cheetah in his web
-applications.
-
-We were going to release 1.0 in January 2002, but we decided to
-delay it until more people used it in real-world situations and
-gave us feedback about what is still needed. This has led to many
-refinements, and we have added (and removed) features according to
-this feedback. Nevertheless, Cheetah has been changing but stable
-since the late-binding rewrite in fall 2001, and anybody who keeps
-up with the cheetah-discuss mailing list will know when changes
-occur that require modifying one's template, and since most people
-use point releases rather than CVS, they generally have a few
-week's warning about any significant changes.
diff --git a/docs/html/_sources/dev_guide/index.rst.txt b/docs/html/_sources/dev_guide/index.rst.txt
deleted file mode 100644
index 83ff7d9..0000000
--- a/docs/html/_sources/dev_guide/index.rst.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-Cheetah Developer's Guide
-==========================
-
-Overview
---------
-This guide needs to really be filled out more
-
-.. toctree::
- :maxdepth: 1
-
- introduction.rst
- compiler.rst
- parser.rst
- errorHandling.rst
- placeholders.rst
- patching.rst
- flowControl.rst
- design.rst
- safeDelegation.rst
- history.rst
- output.rst
- files.rst
- cache.rst
- bnf.rst
- pyModules.rst
- comments.rst
- parserInstructions.rst
- template.rst
- inheritanceEtc.rst
-
diff --git a/docs/html/_sources/dev_guide/inheritanceEtc.rst.txt b/docs/html/_sources/dev_guide/inheritanceEtc.rst.txt
deleted file mode 100644
index 0b06ab9..0000000
--- a/docs/html/_sources/dev_guide/inheritanceEtc.rst.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-Directives: Import, Inheritance, Declaration and Assignment
-===========================================================
-
-(inheritanceEtc)
-
-#import and #from
------------------
-
-(inheritanceEtc.import)
-
-The template:
-
-::
-
- #import math
-
-This construct does not produce any output.
-
-The generated module, at the bottom of the import section:
-
-::
-
- import math
-
-#extends
---------
-
-(inheritanceEtc.extends)
-
-The template:
-
-::
-
- #extends SomeClass
-
-The generated import (skipped if {SomeClass} has already been
-imported):
-
-::
-
- from SomeClass import SomeClass
-
-The generated class:
-
-::
-
- class x(SomeClass):
-
-#implements
------------
-
-(inheritanceEtc.implements)
-
-The template:
-
-::
-
- #implements doOutput
-
-In the generated class, the main method is {.doOutput} instead of
-{.respond}, and the attribute naming this method is:
-
-::
-
- _mainCheetahMethod_for_x2= 'doOutput'
-
-#set and #set global
---------------------
-
-(inheritanceEtc.set)
-
-The template:
-
-::
-
- #set $namesList = ['Moe','Larry','Curly']
- $namesList
- #set global $toes = ['eeny', 'meeny', 'miney', 'moe']
- $toes
-
-The output:
-
-::
-
- ['Moe', 'Larry', 'Curly']
- ['eeny', 'meeny', 'miney', 'moe']
-
-The generated code:
-
-::
-
- 1 namesList = ['Moe','Larry','Curly']
- 2 write(filter(namesList)) # generated from '$namesList' at line 2, col 1.
- 3 write('\n')
- 4 globalSetVars["toes"] = ['eeny', 'meeny', 'miney', 'moe']
- 5 write(filter(VFS(SL,"toes",1))) # generated from '$toes' at line 4, col 1.
- 6 write('\n')
-
-{globalSetVars} is a local variable referencing {.\_globalSetVars}.
-Writes go into it directly, but reads take advantage of the fact
-that {.\_globalSetVars} is on the searchList. (In fact, it's the
-very first namespace.)
-
-#del
-----
-
-(inheritanceEtc.del)
-
-The template:
-
-::
-
- #set $a = 1
- #del $a
- #set $a = 2
- #set $arr = [0, 1, 2]
- #del $a, $arr[1]
-
-In the generated class:
-
-::
-
- 1 a = 1
- 2 del a
- 3 a = 2
- 4 arr = [0, 1, 2]
- 5 del a, arr[1]
-
-#attr
------
-
-(inheritanceEtc.attr)
-
-The template:
-
-::
-
- #attr $namesList = ['Moe', 'Larry', 'Curly']
-
-In the generated class:
-
-::
-
- ## GENERATED ATTRIBUTES
-
- namesList = ['Moe', 'Larry', 'Curly']
-
-#def
-----
-
-(inheritanceEtc.def)
-
-The template:
-
-::
-
- #def printArg($arg)
- The argument is $arg.
- #end def
- My method returned $printArg(5).
-
-The output:
-
-::
-
- My method returned The argument is 5.
- .
-
-Hmm, not exactly what we expected. The method returns a trailing
-newline because we didn't end the last line with {#slurp}. So the
-second period (outside the method) appears on a separate line.
-
-The {#def} generates a method {.printArg} whose structure is
-similar to the main method:
-
-::
-
- def printArg(self,
- arg,
- trans=None,
- dummyTrans=False,
- VFS=valueFromSearchList,
- VFN=valueForName,
- getmtime=getmtime,
- currentTime=time.time):
-
-
- """
- Generated from #def printArg($arg) at line 1, col 1.
- """
-
- if not trans:
- trans = DummyTransaction()
- dummyTrans = True
- write = trans.response().write
- SL = self._searchList
- filter = self._currentFilter
- globalSetVars = self._globalSetVars
-
- ########################################
- ## START - generated method body
-
- write('The argument is ')
- write(filter(arg)) # generated from '$arg' at line 2, col 17.
- write('.\n')
-
- ########################################
- ## END - generated method body
-
- if dummyTrans:
- return trans.response().getvalue()
- else:
- return ""
-
-When {.printArg} is called from a placeholder, only the arguments
-the user supplied are passed. The other arguments retain their
-default values.
-
-#block
-------
-
-(inheritanceEtc.block)
-
-The template:
-
-::
-
- #block content
- This page is under construction.
- #end block
-
-The output:
-
-::
-
- This page is under construction.
-
-This construct generates a method {.content} in the same structure
-as {.printArg} above, containing the write code:
-
-::
-
- write('This page is under construction.\n')
-
-In the main method, the write code is:
-
-::
-
- self.content(trans=trans) # generated from ('content', '#block content')
- # at line 1, col 1.
-
-So a block placeholder implicitly passes the current transaction to
-the method.
-
-
diff --git a/docs/html/_sources/dev_guide/introduction.rst.txt b/docs/html/_sources/dev_guide/introduction.rst.txt
deleted file mode 100644
index c77e1e5..0000000
--- a/docs/html/_sources/dev_guide/introduction.rst.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-Introduction
-============
-
-Who should read this Guide?
----------------------------
-
-The Cheetah Developers' Guide is for those who want to learn how
-Cheetah works internally, or wish to modify or extend Cheetah. It
-is assumed that you've read the Cheetah Users' Guide and have an
-intermediate knowledge of Python.
-
-Contents
---------
-
-This Guide takes a behaviorist approach. First we'll look at what
-the Cheetah compiler generates when it compiles a template
-definition, and how it compiles the various $placeholder features
-and #directives. Then we'll stroll through the files in the Cheetah
-source distribution and show how each file contributes to the
-compilation and/or filling of templates. Then we'll list every
-method/attribute inherited by a template object. Finally, we'll
-describe how to submit bugfixes/enhancements to Cheetah, and how to
-add to the documentation.
-
-Appendix A will contain a BNF syntax of the Cheetah template
-language.
-
-
diff --git a/docs/html/_sources/dev_guide/output.rst.txt b/docs/html/_sources/dev_guide/output.rst.txt
deleted file mode 100644
index 55172d1..0000000
--- a/docs/html/_sources/dev_guide/output.rst.txt
+++ /dev/null
@@ -1,315 +0,0 @@
-Directives: Output
-==================
-
-(output)
-
-#echo
------
-
-(output.echo)
-
-The template:
-
-::
-
- Here is my #echo ', '.join(['silly']*5) # example
-
-The output:
-
-::
-
- Here is my silly, silly, silly, silly, silly example
-
-The generated code:
-
-::
-
- write('Here is my ')
- write(filter(', '.join(['silly']*5) ))
- write(' example\n')
-
-#silent
--------
-
-(output.silent)
-
-The template:
-
-::
-
- Here is my #silent ', '.join(['silly']*5) # example
-
-The output:
-
-::
-
- Here is my example
-
-The generated code:
-
-::
-
- write('Here is my ')
- ', '.join(['silly']*5)
- write(' example\n')
-
-OK, it's not quite covert because that extra space gives it away,
-but it almost succeeds.
-
-#raw
-----
-
-(output.raw)
-
-The template:
-
-::
-
- Text before raw.
- #raw
- Text in raw. $alligator. $croc.o['dile']. #set $a = $b + $c.
- #end raw
- Text after raw.
-
-The output:
-
-::
-
- Text before raw.
- Text in raw. $alligator. $croc.o['dile']. #set $a = $b + $c.
- Text after raw.
-
-The generated code:
-
-::
-
- write('''Text before raw.
- Text in raw. $alligator. $croc.o['dile']. #set $a = $b + $c.
- Text after raw.
- ''')
-
-So we see that {#raw} is really like a quoting mechanism. It says
-that anything inside it is ordinary text, and Cheetah joins a
-{#raw} section with adjacent string literals rather than generating
-a separate {write} call.
-
-#include
---------
-
-(output.include)
-
-The main template:
-
-::
-
- #include "y.tmpl"
-
-The included template y.tmpl:
-
-::
-
- Let's go $voom!
-
-The shell command and output:
-
-::
-
- % voom="VOOM" x.py --env
- Let's go VOOM!
-
-The generated code:
-
-::
-
- write(self._includeCheetahSource("y.tmpl", trans=trans, includeFrom="file",
- raw=0))
-
-#include raw
-~~~~~~~~~~~~
-
-(output.include.raw)
-
-The main template:
-
-::
-
- #include raw "y.tmpl"
-
-The shell command and output:
-
-::
-
- % voom="VOOM" x.py --env
- Let's go $voom!
-
-The generated code:
-
-::
-
- write(self._includeCheetahSource("y.tmpl", trans=trans, includeFrom="fil
- e", raw=1))
-
-That last argument, {raw}, makes the difference.
-
-#include from a string or expression (eval)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-(output.include.expression)
-
-The template:
-
-::
-
- #attr $y = "Let's go $voom!"
- #include source=$y
- #include raw source=$y
- #include source="Bam! Bam!"
-
-The output:
-
-::
-
- % voom="VOOM" x.py --env
- Let's go VOOM!Let's go $voom!Bam! Bam!
-
-The generated code:
-
-::
-
- write(self._includeCheetahSource(VFS(SL,"y",1), trans=trans,
- includeFrom="str", raw=0, includeID="481020889808.74"))
- write(self._includeCheetahSource(VFS(SL,"y",1), trans=trans,
- includeFrom="str", raw=1, includeID="711020889808.75"))
- write(self._includeCheetahSource("Bam! Bam!", trans=trans,
- includeFrom="str", raw=0, includeID="1001020889808.75"))
-
-Later in the generated class:
-
-::
-
- y = "Let's go $voom!"
-
-#slurp
-------
-
-(output.slurp)
-
-The template:
-
-::
-
- #for $i in range(5)
- $i
- #end for
- #for $i in range(5)
- $i #slurp
- #end for
- Line after slurp.
-
-The output:
-
-::
-
- 0
- 1
- 2
- 3
- 4
- 0 1 2 3 4 Line after slurp.
-
-The generated code:
-
-::
-
- for i in range(5):
- write(filter(i)) # generated from '$i' at line 2, col 1.
- write('\n')
- for i in range(5):
- write(filter(i)) # generated from '$i' at line 5, col 1.
- write(' ')
- write('Line after slurp.\n')
-
-The space after each number is because of the space before {#slurp}
-in the template definition.
-
-#filter
--------
-
-(output.filter)
-
-The template:
-
-::
-
- #attr $ode = ">> Rubber Ducky, you're the one! You make bathtime so much fun! <<"
- $ode
- #filter WebSafe
- $ode
- #filter MaxLen
- ${ode, maxlen=13}
- #filter None
- ${ode, maxlen=13}
-
-The output:
-
-::
-
- >> Rubber Ducky, you're the one! You make bathtime so much fun! <<
- &gt;&gt; Rubber Ducky, you're the one! You make bathtime so much fun! &lt;&lt;
- >> Rubber Duc
- >> Rubber Ducky, you're the one! You make bathtime so much fun! <<
-
-The {WebSafe} filter escapes characters that have a special meaning
-in HTML. The {MaxLen} filter chops off values at the specified
-length. {#filter None} returns to the default filter, which ignores
-the {maxlen} argument.
-
-The generated code:
-
-::
-
- 1 write(filter(VFS(SL,"ode",1))) # generated from '$ode' at line 2, col 1.
- 2 write('\n')
- 3 filterName = 'WebSafe'
- 4 if "WebSafe" in self._filters:
- 5 filter = self._currentFilter = self._filters[filterName]
- 6 else:
- 7 filter = self._currentFilter = \
- 8 self._filters[filterName] = getattr(self._filtersLib,
- filterName)(self).filter
- 9 write(filter(VFS(SL,"ode",1))) # generated from '$ode' at line 4, col 1.
- 10 write('\n')
- 11 filterName = 'MaxLen'
- 12 if "MaxLen" in self._filters:
- 13 filter = self._currentFilter = self._filters[filterName]
- 14 else:
- 15 filter = self._currentFilter = \
- 16 self._filters[filterName] = getattr(self._filtersLib,
- filterName)(self).filter
- 17 write(filter(VFS(SL,"ode",1), maxlen=13)) # generated from
- #'${ode, maxlen=13}' at line 6, col 1.
- 18 write('\n')
- 19 filter = self._initialFilter
- 20 write(filter(VFS(SL,"ode",1), maxlen=13)) # generated from
- #'${ode, maxlen=13}' at line 8, col 1.
- 21 write('\n')
-
-As we've seen many times, Cheetah wraps all placeholder lookups in
-a {filter} call. (This also applies to non-searchList lookups:
-local, global and builtin variables.) The {filter} "function" is
-actually an alias to the current filter object:
-
-::
-
- filter = self._currentFilter
-
-as set at the top of the main method. Here in lines 3-8 and 11-16
-we see the filter being changed. Whoops, I lied. {filter} is not an
-alias to the filter object itself but to that object's {.filter}
-method. Line 19 switches back to the default filter.
-
-In line 17 we see the {maxlen} argument being passed as a keyword
-argument to {filter} (not to {VFS}). In line 20 the same thing
-happens although the default filter ignores the argument.
-
-
diff --git a/docs/html/_sources/dev_guide/parser.rst.txt b/docs/html/_sources/dev_guide/parser.rst.txt
deleted file mode 100644
index 802b43f..0000000
--- a/docs/html/_sources/dev_guide/parser.rst.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-The parser
-==========
-
-(parser)
-
-How templates are compiled: a walk through Parser.py's source.
-(Also need to look at Lexer.py, but not too closely.)
-
-
diff --git a/docs/html/_sources/dev_guide/parserInstructions.rst.txt b/docs/html/_sources/dev_guide/parserInstructions.rst.txt
deleted file mode 100644
index 805df7c..0000000
--- a/docs/html/_sources/dev_guide/parserInstructions.rst.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-Directives: Parser Instructions
-===============================
-
-(parserInstructions)
-
-#breakpoint
------------
-
-(parserInstructions.breakpoint)
-
-The template:
-
-::
-
- Text before breakpoint.
- #breakpoint
- Text after breakpoint.
- #raise RuntimeError
-
-The output:
-
-::
-
- Text before breakpoint.
-
-The generated code:
-
-::
-
- write('Text before breakpoint.\n')
-
-Nothing after the breakpoint was compiled.
-
-#compiler
----------
-
-(parserInstructions.compiler)
-
-The template:
-
-::
-
- // Not a comment
- #compiler commentStartToken = '//'
- // A comment
- #compiler reset
- // Not a comment
-
-The output:
-
-::
-
- // Not a comment
- // Not a comment
-
-The generated code:
-
-::
-
- write('// Not a comment\n')
- # A comment
- write('// Not a comment\n')
-
-So this didn't affect the generated program, it just affected how
-the template definition was read.
-
-
diff --git a/docs/html/_sources/dev_guide/patching.rst.txt b/docs/html/_sources/dev_guide/patching.rst.txt
deleted file mode 100644
index 095d9a2..0000000
--- a/docs/html/_sources/dev_guide/patching.rst.txt
+++ /dev/null
@@ -1,149 +0,0 @@
-Patching Cheetah
-================
-
-(patching)
-
-How to commit changes to CVS or submit patches, how to run the test
-suite. Describe distutils and how the regression tests work.
-
-File Requirements
------------------
-
-(patching.fileRequirements)
-
-The code{Template} class contains not only the Cheetah
-infrastructure, but also some convenience methods useful in all
-templates. More methods may be added if it's generally agreed among
-Cheetah developers that the method is sufficiently useful to all
-types of templates, or at least to all types of HTML-output
-templates. If a method is too long to fit into {Template} -
-especially if it has helper methods - put it in a mixin class under
-{Cheetah.Utils} and inherit it.
-
-Routines for a specific problem domain should be put under
-{Cheetah.Tools}, so that it doesn't clutter the namespace unless
-the user asks for it.
-
-Remember: {Cheetah.Utils} is for objects required by any part of
-Cheetah's core. {Cheetah.Tools} is for completely optional objects.
-It should always be possible to delete {Cheetah.Tools} without
-breaking Cheetah's core services.
-
-If a core method needs to look up an attribute defined under
-{Cheetah.Tools}, it should use {hasattr()} and gracefully provide a
-default if the attribute does not exist (meaning the user has not
-imported that subsystem).
-
-Testing Changes and Building Regression Tests
----------------------------------------------
-
-(patching.testing)
-
-Cheetah ships with a regression test suite. To run the built-in
-tests, execute at the shell prompt:
-
-::
-
- cheetah test
-
-Before checking any changes in, run the tests and verify they all
-pass. That way, users can check out the CVS version of Cheetah at
-any time with a fairly high confidence that it will work. If you
-fix a bug or add a feature, please take the time to add a test that
-exploits the bug/feature. This will help in the future, to prevent
-somebody else from breaking it again without realizing it. Users
-can also run the test suite to verify all the features work on
-their particular platform and computer.
-
-The general procedure for modifying Cheetah is as follows:
-
-
-#. Write a simple Python program that exploits the bug/feature
- you're working on. You can either write a regression test (see
- below), or a separate program that writes the template output to
- one file and put the expected output in another file; then you can
- run {diff} on the two outputs. ({diff} is a utility included on all
- Unix-like systems. It shows the differences between two files line
- by line. A precompiled Windows version is at
- http://gnuwin32.sourceforge.net/packages/diffutils.htm, and MacOS
- sources at
- http://perso.wanadoo.fr/gilles.depeyrot/DevTools\_en.html.)
-
-#. Make the change in your Cheetah CVS sandbox or in your installed
- version of Cheetah. If you make it in the sandbox, you'll have to
- run {python setup.py install} before testing it. If you make it in
- the installed version, do { not} run the installer or it will
- overwrite your changes!
-
-#. Run {cheetah test} to verify you didn't break anything. Then run
- your little test program.
-
-#. Repeat steps 2-3 until everything is correct.
-
-#. Turn your little program into a regression test as described
- below.
-
-#. When {cheetah test} runs cleanly with your regression test
- included, update the {docs/news.rst} file and check in your changes. If
- you made the changes in your installed copy of Cheetah, you'll have
- to copy them back into the CVS sandbox first. If you added any
- files that must be distributed, { be sure to} {cvs add} them before
- committing. Otherwise Cheetah will run fine on your computer but
- fail on anybody else's, and the test suite can't check for this.
-
-#. Announce the change on the cheetahtemplate-discuss list and
- provide a tutorial if necessary. The documentation maintainer will
- update the Users' Guide and Developers' Guide based on this message
- and on the changelog.
-
-
-If you add a directory to Cheetah, you have to mention it in
-{setup.py} or it won't be installed.
-
-The tests are in the {Cheetah.Tests} package, aka the {src/Tests/}
-directory of your CVS sandbox. Most of the tests are in
-{SyntaxAndOutput.py}. You can either run all the tests or choose
-which to run:
-
- Run all the tests. (Equivalent to {cheetah test}.)
-
- Run only the tests in that module.
-
- Run only the tests in the class {CGI} inside the module. The class
- must be a direct or indirect subclass of
- {unittest\_local\_copy.TestCase}.
-
- Run the tests in classes {CGI} and {Indenter}.
-
- Run only test {test1}, which is a method in the {CGI} class.
-
-
-To make a SyntaxAndOutput test, first see if your test logically
-fits into one of the existing classes. If so, simply add a method;
-e.g., {test16}. The method should not require any arguments except
-{self}, and should call {.verify(source, expectedOutput)}, where
-the two arguments are a template definition string and a control
-string. The tester will complain if the template output does not
-match the control string. You have a wide variety of placeholder
-variables to choose from, anything that's included in the
-{defaultTestNameSpace} global dictionary. If that's not enough, add
-items to the dictionary, but please keep it from being cluttered
-with wordy esoteric items for a single test).
-
-If your test logically belongs in a separate class, create a
-subclass of {OutputTest}. You do not need to do anything else; the
-test suite will automatically find your class in the module. Having
-a separate class allows you to define state variables needed by
-your tests (see the {CGI} class) or override {.searchList()} (see
-the {Indenter} class) to provide your own searchList.
-
-To modify another test module or create your own test module,
-you'll have to study the existing modules, the
-{unittest\_local\_copy} source, and the {unittest} documentation in
-the Python Library Reference. Note that we are using a hacked
-version of {unittest} to make a more convenient test structure for
-Cheetah. The differences between {unittest\_local\_copy} and
-Python's standard {unittest} are documented at the top of the
-module.
-
-
diff --git a/docs/html/_sources/dev_guide/placeholders.rst.txt b/docs/html/_sources/dev_guide/placeholders.rst.txt
deleted file mode 100644
index 60aa0d2..0000000
--- a/docs/html/_sources/dev_guide/placeholders.rst.txt
+++ /dev/null
@@ -1,489 +0,0 @@
-Placeholders
-============
-
-(placeholders)
-
-Simple placeholders
--------------------
-
-(placeholders.simple)
-
-Let's add a few $placeholders to our template:
-
-::
-
- >>> from Cheetah.Template import Template
- >>> values = {'what': 'surreal', 'punctuation': '?'}
- >>> t = Template("""\
- ... Hello, $what world$punctuation
- ... One of Python's least-used functions is $xrange.
- ... """, [values])
- >>> print t
- Hello, surreal world?
- One of Python's least-used functions is <built-in function xrange>.
-
- >>> print t.generatedModuleCode()
- 1 #!/usr/bin/env python
-
- 2 """
- 3 Autogenerated by CHEETAH: The Python-Powered Template Engine
- 4 CHEETAH VERSION: 0.9.12
- 5 Generation time: Sun Apr 21 00:53:01 2002
- 6 """
-
- 7 __CHEETAH_genTime__ = 'Sun Apr 21 00:53:01 2002'
- 8 __CHEETAH_version__ = '0.9.12'
-
- 9 ##################################################
- 10 ## DEPENDENCIES
-
- 11 import sys
- 12 import os
- 13 import os.path
- 14 from os.path import getmtime, exists
- 15 import time
- 16 import types
- 17 from Cheetah.Template import Template
- 18 from Cheetah.DummyTransaction import DummyTransaction
- 19 from Cheetah.NameMapper import NotFound, valueForName,
- valueFromSearchList
- 20 import Cheetah.Filters as Filters
- 21 import Cheetah.ErrorCatchers as ErrorCatchers
-
- 22 ##################################################
- 23 ## MODULE CONSTANTS
-
- 24 try:
- 25 True, False
- 26 except NameError:
- 27 True, False = (1==1), (1==0)
-
- 28 ##################################################
- 29 ## CLASSES
-
- 30 class GenTemplate(Template):
- 31 """
- 32
- 33 Autogenerated by CHEETAH: The Python-Powered Template Engine
- 34 """
-
- 35 ##################################################
- 36 ## GENERATED METHODS
-
-
-::
-
- 37 def __init__(self, *args, **KWs):
- 38 """
- 39
- 40 """
-
- 41 Template.__init__(self, *args, **KWs)
-
- 42 def respond(self,
- 43 trans=None,
- 44 dummyTrans=False,
- 45 VFS=valueFromSearchList,
- 46 VFN=valueForName,
- 47 getmtime=getmtime,
- 48 currentTime=time.time):
-
-
- 49 """
- 50 This is the main method generated by Cheetah
- 51 """
-
- 52 if not trans:
- 53 trans = DummyTransaction()
- 54 dummyTrans = True
- 55 write = trans.response().write
- 56 SL = self._searchList
- 57 filter = self._currentFilter
- 58 globalSetVars = self._globalSetVars
- 59
- 60 ########################################
- 61 ## START - generated method body
- 62
- 63 write('Hello, ')
- 64 write(filter(VFS(SL,"what",1))) # generated from '$what' at
- # line 1, col 8.
- 65 write(' world')
- 66 write(filter(VFS(SL,"punctuation",1))) # generated from
- # '$punctuation' at line 1, col 19.
- 67 write("\nOne of Python's least-used methods is ")
- 68 write(filter(xrange)) # generated from '$xrange' at line 2,
- # col 39.
- 69 write('.\n')
- 70
- 71 ########################################
- 72 ## END - generated method body
- 73
- 74 if dummyTrans:
- 75 return trans.response().getvalue()
- 76 else:
- 77 return ""
-
-::
-
- 78
- 79 ##################################################
- 80 ## GENERATED ATTRIBUTES
-
- 81 __str__ = respond
- 82 _mainCheetahMethod_for_GenTemplate= 'respond'
-
- 83 # CHEETAH was developed by Tavis Rudd, Chuck Esterbrook, Ian Bicking
- # and Mike Orr;
- 84 # with code, advice and input from many other volunteers.
- 85 # For more information visit http://cheetahtemplate.org/
-
- 86 ##################################################
- 87 ## if run from command line:
- 88 if __name__ == '__main__':
- 89 GenTemplate().runAsMainProgram()
-
-
-(Again, I have added line numbers and split the lines as in the
-previous chapter.)
-
-This generated template module is different from the previous one
-in several trivial respects and one important respect. Trivially,
-{.\_filePath} and {.\_fileMtime} are not updated in
-{.\_\_init\_\_}, so they inherit the value {None} from {Template}.
-Also, that if-stanza in {.respond} that recompiles the template if
-the source file changes is missing - because there is no source
-file. So this module is several lines shorter than the other one.
-
-But the important way this module is different is that instead of
-the one {write} call outputting a string literal, this module has a
-series of {write} calls (lines 63-69) outputting successive chunks
-of the template. Regular text has been translated into a string
-literal, and placeholders into function calls. Every placeholder is
-wrapped inside a {filter} call to apply the current output filter.
-(The default output filter converts all objects to strings, and
-{None} to {""}.)
-
-Placeholders referring to a Python builtin like {xrange} (line 68)
-generate a bare variable name. Placeholders to be looked up in the
-searchList have a nested function call; e.g.,
-
-::
-
- write(filter(VFS(SL,"what",1))) # generated from '$what' at line 1, col 8.
-
-{VFS}, remember, is a function imported from {Cheetah.NameMapper}
-that looks up a value in a searchList. So we pass it the
-searchList, the name to look up, and a boolean (1) indicating we
-want autocalling. (It's {1} rather than {True} because it's
-generated from an {and} expression, and that's what Python 2.2
-outputs for true {and} expressions.)
-
-Complex placeholders
---------------------
-
-(placeholders.complex)
-
-Placeholders can get far more complicated than that. This example
-shows what kind of code the various NameMapper features produce.
-The formulas are taken from Cheetah's test suite, in the
-{Cheetah.Tests.SyntaxAndOutput.Placeholders} class.
-
-::
-
- 1 placeholder: $aStr
- 2 placeholders: $aStr $anInt
- 2 placeholders, back-to-back: $aStr$anInt
- 1 placeholder enclosed in {}: ${aStr}
- 1 escaped placeholder: \$var
- func placeholder - with (): $aFunc()
- func placeholder - with (int): $aFunc(1234)
- func placeholder - with (string): $aFunc('aoeu')
- func placeholder - with ('''\nstring'\n'''): $aFunc('''\naoeu'\n''')
- func placeholder - with (string*int): $aFunc('aoeu'*2)
- func placeholder - with (int*float): $aFunc(2*2.0)
- Python builtin values: $None $True $False
- func placeholder - with ($arg=float): $aFunc($arg=4.0)
- deeply nested argstring: $aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) ):
- function with None: $aFunc(None)
- autocalling: $aFunc! $aFunc().
- nested autocalling: $aFunc($aFunc).
- list subscription: $aList[0]
- list slicing: $aList[:2]
- list slicing and subcription combined: $aList[:2][0]
- dict - NameMapper style: $aDict.one
- dict - Python style: $aDict['one']
- dict combined with autocalled string method: $aDict.one.upper
- dict combined with string method: $aDict.one.upper()
- nested dict - NameMapper style: $aDict.nestedDict.two
- nested dict - Python style: $aDict['nestedDict']['two']
- nested dict - alternating style: $aDict['nestedDict'].two
- nested dict - NameMapper style + method: $aDict.nestedDict.two.upper
- nested dict - alternating style + method: $aDict['nestedDict'].two.upper
- nested dict - NameMapper style + method + slice: $aDict.nestedDict.two.upper[:4]
- nested dict - Python style, variable key: $aDict[$anObj.meth('nestedDict')].two
- object method: $anObj.meth1
- object method + complex slice: $anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ]
- very complex slice: $( anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ] )
- $_('a call to gettext')
-
-We'll need a big program to set up the placeholder values. Here it
-is:
-
-::
-
- #!/usr/bin/env python
- from ComplexExample import ComplexExample
-
- try: # Python >= 2.2.1
- True, False
- except NameError: # Older Python
- True, False = (1==1), (1==0)
-
- class DummyClass:
- _called = False
- def __str__(self):
- return 'object'
-
- def meth(self, arg="arff"):
- return str(arg)
-
- def meth1(self, arg="doo"):
- return arg
-
- def meth2(self, arg1="a1", arg2="a2"):
- return str(arg1) + str(arg2)
-
- def callIt(self, arg=1234):
- self._called = True
- self._callArg = arg
-
- def dummyFunc(arg="Scooby"):
- return arg
-
- defaultTestNameSpace = {
- 'aStr':'blarg',
- 'anInt':1,
- 'aFloat':1.5,
- 'aList': ['item0','item1','item2'],
- 'aDict': {'one':'item1',
- 'two':'item2',
- 'nestedDict':{1:'nestedItem1',
- 'two':'nestedItem2'
- },
- 'nestedFunc':dummyFunc,
- },
- 'aFunc': dummyFunc,
- 'anObj': DummyClass(),
- 'aMeth': DummyClass().meth1,
- '_': lambda x: 'translated ' + x
- }
-
- print ComplexExample( searchList=[defaultTestNameSpace] )
-
-Here's the output:
-
-::
-
- 1 placeholder: blarg
- 2 placeholders: blarg 1
- 2 placeholders, back-to-back: blarg1
- 1 placeholder enclosed in {}: blarg
- 1 escaped placeholder: $var
- func placeholder - with (): Scooby
- func placeholder - with (int): 1234
- func placeholder - with (string): aoeu
- func placeholder - with ('''\nstring'\n'''):
- aoeu'
-
- func placeholder - with (string*int): aoeuaoeu
- func placeholder - with (int*float): 4.0
- Python builtin values: 1 0
- func placeholder - with ($arg=float): 4.0
- deeply nested argstring: 1:
- function with None:
- autocalling: Scooby! Scooby.
- nested autocalling: Scooby.
- list subscription: item0
- list slicing: ['item0', 'item1']
- list slicing and subcription combined: item0
- dict - NameMapper style: item1
- dict - Python style: item1
- dict combined with autocalled string method: ITEM1
- dict combined with string method: ITEM1
- nested dict - NameMapper style: nestedItem2
- nested dict - Python style: nestedItem2
- nested dict - alternating style: nestedItem2
- nested dict - NameMapper style + method: NESTEDITEM2
- nested dict - alternating style + method: NESTEDITEM2
- nested dict - NameMapper style + method + slice: NEST
- nested dict - Python style, variable key: nestedItem2
- object method: doo
- object method + complex slice: do
- very complex slice: do
- translated a call to gettext
-
-And here - tada! - is the generated module. To save space, I've
-included only the lines containing the {write} calls. The rest of
-the module is the same as in the first example, chapter
-pyModules.example. I've split some of the lines to make them fit on
-the page.
-
-::
-
- 1 write('1 placeholder: ')
- 2 write(filter(VFS(SL,"aStr",1))) # generated from '$aStr' at line 1, col 16.
- 3 write('\n2 placeholders: ')
- 4 write(filter(VFS(SL,"aStr",1))) # generated from '$aStr' at line 2, col 17.
- 5 write(' ')
- 6 write(filter(VFS(SL,"anInt",1)))
- # generated from '$anInt' at line 2, col 23.
- 7 write('\n2 placeholders, back-to-back: ')
- 8 write(filter(VFS(SL,"aStr",1))) # generated from '$aStr' at line 3, col 31.
- 9 write(filter(VFS(SL,"anInt",1)))
- # generated from '$anInt' at line 3, col 36.
- 10 write('\n1 placeholder enclosed in {}: ')
- 11 write(filter(VFS(SL,"aStr",1))) # generated from '${aStr}' at line 4,
- # col 31.
- 12 write('\n1 escaped placeholder: $var\nfunc placeholder - with (): ')
- 13 write(filter(VFS(SL,"aFunc",0)())) # generated from '$aFunc()' at line 6,
- # col 29.
- 14 write('\nfunc placeholder - with (int): ')
- 15 write(filter(VFS(SL,"aFunc",0)(1234))) # generated from '$aFunc(1234)' at
- # line 7, col 32.
- 16 write('\nfunc placeholder - with (string): ')
- 17 write(filter(VFS(SL,"aFunc",0)('aoeu'))) # generated from "$aFunc('aoeu')"
- # at line 8, col 35.
- 18 write("\nfunc placeholder - with ('''\\nstring'\\n'''): ")
- 19 write(filter(VFS(SL,"aFunc",0)('''\naoeu'\n'''))) # generated from
- # "$aFunc('''\\naoeu'\\n''')" at line 9, col 46.
- 20 write('\nfunc placeholder - with (string*int): ')
- 21 write(filter(VFS(SL,"aFunc",0)('aoeu'*2))) # generated from
- # "$aFunc('aoeu'*2)" at line 10, col 39.
- 22 write('\nfunc placeholder - with (int*float): ')
- 23 write(filter(VFS(SL,"aFunc",0)(2*2.0))) # generated from '$aFunc(2*2.0)'
- # at line 11, col 38.
- 24 write('\nPython builtin values: ')
- 25 write(filter(None)) # generated from '$None' at line 12, col 24.
- 26 write(' ')
- 27 write(filter(True)) # generated from '$True' at line 12, col 30.
- 28 write(' ')
- 29 write(filter(False)) # generated from '$False' at line 12, col 36.
- 30 write('\nfunc placeholder - with ($arg=float): ')
- 31 write(filter(VFS(SL,"aFunc",0)(arg=4.0))) # generated from
- # '$aFunc($arg=4.0)' at line 13, col 40.
- 32 write('\ndeeply nested argstring: ')
- 33 write(filter(VFS(SL,"aFunc",0)(
- arg = VFS(SL,"aMeth",0)( arg = VFS(SL,"aFunc",0)( 1 ) ) )))
- # generated from '$aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) )'
- # at line 14, col 26.
- 34 write(':\nfunction with None: ')
- 35 write(filter(VFS(SL,"aFunc",0)(None))) # generated from '$aFunc(None)' at
- # line 15, col 21.
- 36 write('\nautocalling: ')
- 37 write(filter(VFS(SL,"aFunc",1))) # generated from '$aFunc' at line 16,
- # col 14.
- 38 write('! ')
- 39 write(filter(VFS(SL,"aFunc",0)())) # generated from '$aFunc()' at line 16,
- # col 22.
-
-::
-
- 40 write('.\nnested autocalling: ')
- 41 write(filter(VFS(SL,"aFunc",0)(VFS(SL,"aFunc",1)))) # generated from
- # '$aFunc($aFunc)' at line 17, col 21.
- 42 write('.\nlist subscription: ')
- 43 write(filter(VFS(SL,"aList",1)[0])) # generated from '$aList[0]' at line
- # 18, col 20.
- 44 write('\nlist slicing: ')
- 45 write(filter(VFS(SL,"aList",1)[:2])) # generated from '$aList[:2]' at
- # line 19, col 15.
- 46 write('\nlist slicing and subcription combined: ')
- 47 write(filter(VFS(SL,"aList",1)[:2][0])) # generated from '$aList[:2][0]'
- # at line 20, col 40.
- 48 write('\ndict - NameMapper style: ')
- 49 write(filter(VFS(SL,"aDict.one",1))) # generated from '$aDict.one' at line
- # 21, col 26.
- 50 write('\ndict - Python style: ')
- 51 write(filter(VFS(SL,"aDict",1)['one'])) # generated from "$aDict['one']"
- # at line 22, col 22.
- 52 write('\ndict combined with autocalled string method: ')
- 53 write(filter(VFS(SL,"aDict.one.upper",1))) # generated from
- # '$aDict.one.upper' at line 23, col 46.
- 54 write('\ndict combined with string method: ')
- 55 write(filter(VFN(VFS(SL,"aDict.one",1),"upper",0)())) # generated from
- # '$aDict.one.upper()' at line 24, col 35.
- 56 write('\nnested dict - NameMapper style: ')
- 57 write(filter(VFS(SL,"aDict.nestedDict.two",1))) # generated from
- # '$aDict.nestedDict.two' at line 25, col 33.
- 58 write('\nnested dict - Python style: ')
- 59 write(filter(VFS(SL,"aDict",1)['nestedDict']['two'])) # generated from
- # "$aDict['nestedDict']['two']" at line 26, col 29.
- 60 write('\nnested dict - alternating style: ')
- 61 write(filter(VFN(VFS(SL,"aDict",1)['nestedDict'],"two",1))) # generated
- # from "$aDict['nestedDict'].two" at line 27, col 34.
- 62 write('\nnested dict - NameMapper style + method: ')
- 63 write(filter(VFS(SL,"aDict.nestedDict.two.upper",1))) # generated from
- # '$aDict.nestedDict.two.upper' at line 28, col 42.
- 64 write('\nnested dict - alternating style + method: ')
- 65 write(filter(VFN(VFS(SL,"aDict",1)['nestedDict'],"two.upper",1)))
- # generated from "$aDict['nestedDict'].two.upper" at line 29, col 43.
- 66 write('\nnested dict - NameMapper style + method + slice: ')
-
-::
-
- 67 write(filter(VFN(VFS(SL,"aDict.nestedDict.two",1),"upper",1)[:4]))
- # generated from '$aDict.nestedDict.two.upper[:4]' at line 30, col 50.
- 68 write('\nnested dict - Python style, variable key: ')
- 69 write(filter(VFN(VFS(SL,"aDict",1)
- [VFN(VFS(SL,"anObj",1),"meth",0)('nestedDict')],"two",1)))
- # generated from "$aDict[$anObj.meth('nestedDict')].two" at line 31,
- # col 43.
- 70 write('\nobject method: ')
- 71 write(filter(VFS(SL,"anObj.meth1",1))) # generated from '$anObj.meth1' at
- # line 32, col 16.
- 72 write('\nobject method + complex slice: ')
- 73 write(filter(VFN(VFS(SL,"anObj",1),"meth1",1)
- [0: ((4/4*2)*2)/VFN(VFS(SL,"anObj",1),"meth1",0)(2) ]))
- # generated from '$anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ]'
- # at line 33, col 32.
- 74 write('\nvery complex slice: ')
- 75 write(filter(VFN(VFS(SL,"anObj",1),"meth1",1)
- [0: ((4/4*2)*2)/VFN(VFS(SL,"anObj",1),"meth1",0)(2) ] ))
- # generated from '$( anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ] )'
- # at line 34, col 21.
- 76 if False:
- 77 _('foo')
- 78 write(filter(VFS(SL,"_",0)("a call to gettext")))
- # generated from "$_('a call to gettext')"
- # at line 35, col 1.
- 79 write('\n')
-
-For each placeholder lookup, the the innermost level of nesting is
-a {VFS} call, which looks up the first (leftmost) placeholder
-component in the searchList. This is wrapped by zero or more {VFN}
-calls, which perform Universal Dotted Notation lookup on the next
-dotted component of the placeholder, looking for an attribute or
-key by that name within the previous object (not in the
-searchList). Autocalling is performed by {VFS} and {VFN}: that's
-the reason for their third argument.
-
-Explicit function/method arguments, subscripts and keys (which are
-all expressions) are left unchanged, besides expanding any embedded
-$placeholders in them. This means they must result in valid Python
-expressions, following the standard Python quoting rules.
-
-Built-in Python values ({None}, {True} and {False}) are converted
-to {filter(None)}, etc. They use normal Python variable lookup
-rather than {VFS}. (Cheetah emulates {True} and {False} using
-global variables for Python < 2.2.1, when they weren't builtins
-yet.)
-
-Notice the last line is a call to {\_} (i.e. {gettext}) which is
-used for internationalization (see
-http://docs.python.org/lib/module-gettext.html). The code is
-converted normally, but an {if False} block is used so that gettext
-can successfully mark the string for translation when parsing the
-generated Python. Otherwise, the NameMapper syntax would get in the
-way of this.
-
-
diff --git a/docs/html/_sources/dev_guide/pyModules.rst.txt b/docs/html/_sources/dev_guide/pyModules.rst.txt
deleted file mode 100644
index 86c95dc..0000000
--- a/docs/html/_sources/dev_guide/pyModules.rst.txt
+++ /dev/null
@@ -1,252 +0,0 @@
-.py Template Modules
-====================
-
-(pyModules)
-
-This chapter examines the structure of a .py template module. The
-following few chapters will then show how each placeholder and
-directive affects the generated Python code.
-
-An example
-----------
-
-(pyModules.example)
-
-Our first template follows a long noble tradition in computer
-tutorials. It produces a familiar, friendly greeting. Here's the
-template:
-
-::
-
- Hello, world!
-
-... the output:
-
-::
-
- Hello, world!
-
-... and the .py template module cheetah-compile produced, with line
-numbers added:
-
-::
-
- 1 #!/usr/bin/env python
-
- 2 """
- 3 Autogenerated by CHEETAH: The Python-Powered Template Engine
- 4 CHEETAH VERSION: 0.9.12
- 5 Generation time: Sat Apr 20 14:27:47 2002
- 6 Source file: x.tmpl
- 7 Source file last modified: Wed Apr 17 22:10:59 2002
- 8 """
-
- 9 __CHEETAH_genTime__ = 'Sat Apr 20 14:27:47 2002'
- 10 __CHEETAH_src__ = 'x.tmpl'
- 11 __CHEETAH_version__ = '0.9.12'
-
- 12 ##################################################
- 13 ## DEPENDENCIES
-
- 14 import sys
- 15 import os
- 16 import os.path
- 17 from os.path import getmtime, exists
- 18 import time
- 19 import types
- 20 from Cheetah.Template import Template
- 21 from Cheetah.DummyTransaction import DummyTransaction
- 22 from Cheetah.NameMapper import NotFound, valueForName,
- valueFromSearchList
- 23 import Cheetah.Filters as Filters
- 24 import Cheetah.ErrorCatchers as ErrorCatchers
-
- 25 ##################################################
- 26 ## MODULE CONSTANTS
-
- 27 try:
- 28 True, False
- 29 except NameError:
- 30 True, False = (1==1), (1==0)
-
- 31 ##################################################
- 32 ## CLASSES
-
- 33 class x(Template):
- 34 """
- 35
- 36 Autogenerated by CHEETAH: The Python-Powered Template Engine
- 37 """
-
-::
-
- 38 ##################################################
- 39 ## GENERATED METHODS
-
-
- 40 def __init__(self, *args, **KWs):
- 41 """
- 42
- 43 """
-
- 44 Template.__init__(self, *args, **KWs)
- 45 self._filePath = 'x.tmpl'
- 46 self._fileMtime = 1019106659
-
- 47 def respond(self,
- 48 trans=None,
- 49 dummyTrans=False,
- 50 VFS=valueFromSearchList,
- 51 VFN=valueForName,
- 52 getmtime=getmtime,
- 53 currentTime=time.time):
-
-
- 54 """
- 55 This is the main method generated by Cheetah
- 56 """
-
- 57 if not trans:
- 58 trans = DummyTransaction()
- 59 dummyTrans = True
- 60 write = trans.response().write
- 61 SL = self._searchList
- 62 filter = self._currentFilter
- 63 globalSetVars = self._globalSetVars
- 64
- 65 ########################################
- 66 ## START - generated method body
- 67
- 68 if exists(self._filePath) and getmtime(self._filePath) > \
- self._fileMtime:
- 69 self.compile(file=self._filePath)
- 70 write(getattr(self, self._mainCheetahMethod_for_x)
- (trans=trans))
- 71 if dummyTrans:
- 72 return trans.response().getvalue()
- 73 else:
- 74 return ""
- 75 write('Hello, world!\n')
- 76
- 77 ########################################
- 78 ## END - generated method body
- 79
- 80 if dummyTrans:
- 81 return trans.response().getvalue()
- 82 else:
- 83 return ""
-
-::
-
- 84
- 85 ##################################################
- 86 ## GENERATED ATTRIBUTES
-
-
- 87 __str__ = respond
-
- 88 _mainCheetahMethod_for_x= 'respond'
-
-
- 89 # CHEETAH was developed by Tavis Rudd, Chuck Esterbrook, Ian Bicking
- # and Mike Orr;
- 90 # with code, advice and input from many other volunteers.
- 91 # For more information visit http://cheetahtemplate.org/
-
- 92 ##################################################
- 93 ## if run from command line:
- 94 if __name__ == '__main__':
- 95 x().runAsMainProgram()
-
-
-(I added the line numbers for this Guide, and split a few lines to
-fit the page width. The continuation lines don't have line numbers,
-and I added indentation, backslashes and '#' as necessary to make
-the result a valid Python program.)
-
-The examples were generated from CVS versions of Cheetah between
-0.9.12 and 0.9.14.
-
-A walk through the example
---------------------------
-
-(pyModules.walk)
-
-Lines 20-24 are the Cheetah-specific imports. Line 33 introduces
-our generated class, {x}, a subclass of {Template}. It's called x
-because the source file was x.tmpl.
-
-Lines 40-46 are the {.\_\_init\_\_} method called when the template
-is instantiated or used as a Webware servlet, or when the module is
-run as a standalone program. We can see it calling its superclass
-constructor and setting {.\_filePath} and {.\_fileMtime} to the
-filename and modification time (in Unix ticks) of the source .tmpl
-file.
-
-Lines 47-84 are the main method {.respond}, the one that fills the
-template. Normally you call it without arguments, but Webware calls
-it with a Webware {Transaction} object representing the current
-request. Lines 57-59 set up the {trans} variable. If a real or
-dummy transaction is passed in, the method uses it. Otherwise (if
-the {trans} argument is {None}), the method creates a
-{DummyTransaction} instance. {dummyTrans} is a flag that just tells
-whether a dummy transaction is in effect; it'll be used at the end
-of the method.
-
-The other four {.respond} arguments aren't anything you'd ever want
-to pass in; they exist solely to speed up access to these
-frequently-used global functions. This is a standard Python trick
-described in question 4.7 of the Python FAQ
-(http://www.python.org/cgi-bin/faqw.py). {VFS} and {VFN} are the
-functions that give your template the benefits of NameMapper
-lookup, such as the ability to use the searchList.
-
-Line 60 initializes the {write} variable. This important variable
-is discussed below.
-
-Lines 60-63 initialize a few more local variables. {SL} is the
-searchList. {filter} is the current output filter. {globalSetVars}
-are the variables that have been defined with {#set global}.
-
-The comments at lines 65 and 78 delimit the start and end of the
-code that varies with each template. The code outside this region
-is identical in all template modules. That's not quite true -
-{#import} for instance generates additional {import} statements at
-the top of the module - but it's true enough for the most part.
-
-Lines 68-74 exist only if the template source was a named file
-rather than a string or file object. The stanza recompiles the
-template if the source file has changed. Lines 70-74 seem to be
-redundant with 75-83: both fill the template and send the output.
-The reason the first set of lines exists is because the second set
-may become invalid when the template is recompiled. (This is for {
-re} compilation only. The initial compilation happened in the
-{.\_\_init\_\_} method if the template wasn't precompiled.)
-
-Line 75 is the most interesting line in this module. It's a direct
-translation of what we put in the template definition,
-"Hello, world!" Here the content is a single string literal.
-{write} looks like an ordinary function call, but remember that
-line 60 made it an alias to {trans.response().write}, a method in
-the transaction. The next few chapters describe how the different
-placeholders and directives influence this portion of the generated
-class.
-
-Lines 80-83 finish the template filling. If {trans} is a real
-Webware transaction, {write} has already sent the output to Webware
-for handling, so we return {""}. If {trans} is a dummy transaction,
-{write} has been accumulating the output in a Python {StringIO}
-object rather than sending it anywhere, so we have to return it.
-
-Line 83 is the end of the {.respond} method.
-
-Line 87 makes code{.\_\_str\_\_} an alias for the main method, so
-that you can {print} it or apply {str} to it and it will fill the
-template. Line 88 gives the name of the main method, because
-sometimes it's not {.respond}.
-
-Lines 94-95 allow the module to be run directly as a script.
-Essentially, they process the command-line arguments and them make
-the template fill itself.
-
-
diff --git a/docs/html/_sources/dev_guide/safeDelegation.rst.txt b/docs/html/_sources/dev_guide/safeDelegation.rst.txt
deleted file mode 100644
index 87f3dc1..0000000
--- a/docs/html/_sources/dev_guide/safeDelegation.rst.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-Safe Delegation
-===============
-
-(safeDelegation)
-
-Safe delegation, as provided by Zope and Allaire's Spectra, is not
-implemented in Cheetah. The core aim has been to help developers
-and template maintainers get things done, without throwing
-unnecessary complications in their way. So you should give write
-access to your templates only to those whom you trust. However,
-several hooks have been built into Cheetah so that safe delegation
-can be implemented at a later date.
-
-It should be possible to implement safe delegation via a future
-configuration Setting {safeDelegationLevel} (0=none, 1=semi-secure,
-2-alcatraz). This is not implemented but the steps are listed here
-in case somebody wants to try them out and test them.
-
-Of course, you would also need to benchmark your code and verify it
-does not impact performance when safe delegation is off, and
-impacts it only modestly when it is on." All necessary changes can
-be made at compile time, so there should be no performance impact
-when filling the same TO multiple times.
-
-
-#. Only give untrusted developers access to the .tmpl files.
- (Verifying what this means. Why can't trusted developers access
- them?)
-
-#. Disable the {#attr} directive and maybe the {#set} directive.
-
-#. Use Cheetah's directive validation hooks to disallow references
- to {self}, etc (e.g. {#if $steal(self.thePrivateVar)} )
-
-#. Implement a validator for the $placeholders and use it to
- disallow '\_\_' in $placeholders so that tricks like
- {$obj.\_\_class\_\_.\_\_dict\_\_} are not possible.
-
-
-
diff --git a/docs/html/_sources/dev_guide/template.rst.txt b/docs/html/_sources/dev_guide/template.rst.txt
deleted file mode 100644
index 8dd23d9..0000000
--- a/docs/html/_sources/dev_guide/template.rst.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Template
-========
-
-(template)
-
-This chapter will mainly walk through the {Cheetah.Template}
-constructor and not at what point the template is compiled.
-
-(Also need to look at Transaction,py and Servlet.py.)
-
-
diff --git a/docs/html/_sources/developers.rst.txt b/docs/html/_sources/developers.rst.txt
deleted file mode 100644
index 7cf96e8..0000000
--- a/docs/html/_sources/developers.rst.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-Contributing to Cheetah
-=======================
-
-Cheetah is the work of many volunteers. If you use Cheetah, share your
-experiences, tricks, customizations, and frustrations. Please visit
-https://github.com/CheetahTemplate3/cheetah3 and file bug reports, feature
-requests or pull requests.
-
-
-Getting the Code
-----------------
-The Cheetah source code is stored in a central **Git** repository
-hosted primarily by `GitHub <http://github.com>`_. The primary Git
-repository can be found `here <http://github.com/CheetahTemplate3/cheetah3>`_.
-
-
-Development Process
--------------------
-The typical development workflow for Cheetah revolves around
-two primary branches **maint** and **next**. The **next** branch is where development
-planned for the next release of Cheetah is. The **maint** branch
-on the otherhand is where backported fixes and patches will be applied for
-the current release of Cheetah will go, it's common for a patch
-to be applied to maint and next at the same time.
-
-Anyone and everyone is encouraged to submit patches at any time, but as far
-as bugs or feature requests go, we try to file those *first* in the `Cheetah3 Bug Tracker <https://github.com/CheetahTemplate3/cheetah3/issues>`_
-and then they can be organized into particular releases as is necessary.
-
-In addition to the bug tracker, Cheetah uses Travis CI for automating builds
-and test runs (see: `Cheetah at Travis
-<https://travis-ci.org/CheetahTemplate3/cheetah3>`_).
-
-Prior to the tarballing of a release, **all** tests must be passing before the
-**next** branch is merged down to the Git **master** branch where the release
-tarball will actually be created from.
-
-
-Filing Bugs
------------
-No software is perfect, and unfortunately no bug report is either. If you've
-found yourself faced with a bug in Cheetah, or just have a good idea for a
-new feature, we kindly ask that you create an issue in the `Cheetah3 Bug Tracker <https://github.com/CheetahTemplate3/cheetah3/issues>`_.
-
-Some tips for filing a *useful* bug report, try to include the following:
-
-* A description of what you were trying to do, and what happened (i.e. reproduction steps), the more code you can include the better.
-* Any and all tracebacks or compiler errors
-* The version of Cheetah you're using
-* The version of Python you're using
-* The operating system you're running Cheetah on
-* Any other pieces of information you might think are relevant
-
diff --git a/docs/html/_sources/documentation.rst.txt b/docs/html/_sources/documentation.rst.txt
deleted file mode 100644
index af5cc44..0000000
--- a/docs/html/_sources/documentation.rst.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Cheetah Recipes
-==================
-
-.. toctree::
- :maxdepth: 2
-
- recipes/inheritance.rst
- recipes/precompiled.rst
- recipes/staticmethod.rst
- recipes/writing_a_recipe.rst
diff --git a/docs/html/_sources/download.rst.txt b/docs/html/_sources/download.rst.txt
deleted file mode 100644
index dc73d33..0000000
--- a/docs/html/_sources/download.rst.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Downloading Cheetah
-===================
-
-You can download wheels, eggs and tarballs of Cheetah from the `Python
-Package Index <http://pypi.python.org/pypi/Cheetah3>`_.
-
-You can keep up to date with release candidates or other downloads of
-Cheetah by visiting the `CheetahTemplate GitHub page
-<http://github.com/CheetahTemplate3/cheetah3>`_
-
-**Note to Windows users:** You should install the compiled version of
-Cheetah's NameMapper. It is dramatically faster than the pure Python
-version. Installing from wheels from PyPI is the simplest way to get the
-precompiled NameMapper extension.
diff --git a/docs/html/_sources/index.rst.txt b/docs/html/_sources/index.rst.txt
deleted file mode 100644
index 2f18cb6..0000000
--- a/docs/html/_sources/index.rst.txt
+++ /dev/null
@@ -1,89 +0,0 @@
-.. Cheetah Template Engine documentation master file, created by
- sphinx-quickstart on Sun May 31 22:23:43 2009.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
-
-Cheetah3, the Python-Powered Template Engine
-============================================
-
-Introduction
-------------
-Cheetah3 is a free (BSD-style) and `open source
-<https://github.com/CheetahTemplate3/cheetah3>`_ template engine and
-code-generation tool written in `Python <http://python.org>`_. Cheetah can be
-used unto itself, or incorporated with other technologies and stacks regardless
-of whether they're written in Python or not.
-
-At its core, Cheetah is a domain-specific language for markup generation and
-templating which allows for full integration with existing Python code but also
-offers extensions to traditional Python syntax to allow for easier text-generation.
-
-It's a fork of the `original <https://github.com/cheetahtemplate/cheetah>`_
-CheetahTemplate library.
-
-Talk Cheetah
-^^^^^^^^^^^^
-You can get involved and talk with Cheetah developers on the `Cheetah3 issue
-tracker <https://github.com/CheetahTemplate3/cheetah3/issues>`_.
-
-Contents
-^^^^^^^^^
-
-.. toctree::
- :maxdepth: 2
-
- authors.rst
- news.rst
- developers.rst
- download.rst
- users_guide/index.rst
- documentation.rst
- roadmap.rst
- dev_guide/index.rst
- chep.rst
-
-
-Cheetah in a nutshell
----------------------
-Below is a simple example of some Cheetah code, as you can see it's practically
-Python. You can import, inherit and define methods just like in a regular Python
-module, since that's what your Cheetah templates are compiled to :) ::
-
- #from Cheetah.Template import Template
- #extends Template
-
- #set $people = [{'name' : 'Tom', 'mood' : 'Happy'}, {'name' : 'Dick',
- 'mood' : 'Sad'}, {'name' : 'Harry', 'mood' : 'Hairy'}]
-
- <strong>How are you feeling?</strong>
- <ul>
- #for $person in $people
- <li>
- $person['name'] is $person['mood']
- </li>
- #end for
- </ul>
-
-
-Why Cheetah?
-------------
-
-* Cheetah is supported by every major Python web framework.
-* It is fully documented and is supported by an active user community.
-* It can output/generate any text-based format.
-* Cheetah compiles templates into optimized, yet readable, Python code.
-* It blends the power and flexibility of Python with a simple template language that non-programmers can understand.
-* It gives template authors full access to any Python data structure, module, function, object, or method in their templates. Meanwhile, it provides a way for administrators to selectively restrict access to Python when needed.
-* Cheetah makes code reuse easy by providing an object-oriented interface to templates that is accessible from Python code or other Cheetah templates. One template can subclass another and selectively reimplement sections of it. Cheetah templates can be subclasses of any Python class and vice-versa.
-* It provides a simple, yet powerful, caching mechanism that can dramatically improve the performance of a dynamic website.
-* It encourages clean separation of content, graphic design, and program code. This leads to highly modular, flexible, and reusable site architectures, shorter development time, and HTML and program code that is easier to understand and maintain. It is particularly well suited for team efforts.
-* Cheetah can be used to generate static html via its command-line tool.
-
-
-Indices and tables
-------------------
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
-
diff --git a/docs/html/_sources/news.rst.txt b/docs/html/_sources/news.rst.txt
deleted file mode 100644
index 2a6ff8c..0000000
--- a/docs/html/_sources/news.rst.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-News
-====
-
-Development (master)
---------------------
-
-3.1.0 (2018-03-03)
-------------------
-
-Features:
-
- - Fix Cheetah to work with PyPy. Pull request by Mathias Stearn.
-
-Minor features:
-
- - Code cleanup: fix code style to satisfy flake8 linter.
-
-Documentation:
-
- - Rename www directory to docs.
-
-Tests:
-
- - Run pypy tests at AppVeyor.
- - Use remove-old-files.py from ppu to cleanup pip cache
- at Travis and AppVeyor.
-
-
-3.0.1 (2018-02-27)
-------------------
-
-Bug fixes:
-
- - Fix a minor bug in Compiler.
-
-
-3.0.0 (2017-05-07)
-------------------
-
-Major features:
-
- - !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- - Stop supporting Python older than 2.7.
- - Update code to work with Python 3.3+. Tested with 3.3, 3.4, 3.5 and 3.6.
-
-Minor features:
-
- - Use '/usr/bin/env python' for scripts;
- this allows eggs/wheels to be installed into virtual environments.
-
-Bug fixes:
-
- - Fix a bug in multiple inheritance (#extend Parent1, Parent2).
- Pull request by Jonathan Ross Rogers.
- - Fix bugs in pure-python NameMapper.py. Bugs reported by Noah Ingham,
- patches by Adam Karpierz, tests by Oleg Broytman.
-
-Tests:
-
- - Run tests at Travis (Linux) and AppVeyor (w32) with Python 2.7, 3.3, 3.4,
- 3.5 and 3.6; x86 and x64.
- - Fix a problem in Unicode tests - cleanup temporary files.
-
-`Older news`_
-
-.. _`Older news`: news2.html
diff --git a/docs/html/_sources/news2.rst.txt b/docs/html/_sources/news2.rst.txt
deleted file mode 100644
index d295478..0000000
--- a/docs/html/_sources/news2.rst.txt
+++ /dev/null
@@ -1,1701 +0,0 @@
-2.4.2 (February 8th, 2010)
- - Fix issue where subclasses of Template failed to pick up attributes in the
- searchlist
- - Remove old/outdated bundled memcached python client
- - Allow for #encoding directives to exist after a comment (i.e. not the first
- line in a module)
- - Remove support for WebWare servlets (which caused significant performance
- slowdowns on Mac OS X)
- - Old/stale code pruned in preparation for Python 3 support
-
-2.4.1 (December 19th, 2009)
- - --quiet flag added to `cheetah` to silence printing to stdout (abbeyj)
- - Refactoring to minimize the amount of forked code for Python3 (rtyler)
- - Template.compile() will no longer create class names with numerous leading
- underscores (rtyler; reported by Kirill Uhanov)
- - DirectiveAnalyzer (cheetah-analyze script) added to report directive usage in templates (rtyler)
- - Older LaTeX docs converted to rst for Sphinx (rtyler)
- - Prevent #raw blocks from evaluating \$-placeholders and escaped strings (karmix0)
- - New tests added to verify PSP behavior and other untested internals (rtyler)
-
-2.4.0 (October 24th, 2009)
- - Fix a major performance regression in Template.__init__()
- - More graceful handling of unicode when calling .respond() to render a template
- - Minor code updates
- - Update the default filter (thanks mikeb!)
-
-2.3.0 (October 24th, 2009) (loosely equivalent to 2.4.0)
- - Fix a major performance regression in Template.__init__()
- - More graceful handling of unicode when calling .respond() to render a template
- - Minor code updates
- - Update the default filter (thanks mikeb!)
-
-2.2.2 (September 10th, 2009)
- - Prevent _namemapper.c from segfaulting when PyImport_ImportModule fails for some reason (Bogdano Arendartchuk <debogdano@gmail.com>)
- - Removal of the contrib/markdown module (in favor of a setuptools dependency)
- - Default setup.py to use setuptools by default, failing that, fall back to distutils
- - Improvements to setup.py to support building for Windows (thanks abbeyj!)
- - Improvements to C-based NameMapper for Windows
- - Fixes for a swath of unit tests on Windows
- - Re-enabling the EOL tests (whoops)
- - Fix for unicode/utf-8 dynamic compilation error (thanks mikeb!) (Test.Unicode.JBQ_UTF8_Test8)
- - 0000010: [Templates] Failure to execute templates on Google App Engine (rtyler)
- - 0000026: [Compiler] Support multiple inheritance (rtyler)
-
-
-2.2.1 (June 1st, 2009)
- - 0000020: [Templates] Builtin support for using Cheetah with Django (rtyler)
- - 0000021: [Compiler] @static and @classmethod don't properly define the _filter local (rtyler)
- - 0000023: [Compiler] Update Template super calls to use super() (rtyler)
- - Update all references to communitycheetah.org to point back at cheetahtemplate.org
-
-2.2.0 (May 17th, 2009)
- - Switch all internal representations of template code to unicode objects instead of str() objects
- - Convert unicode compiled template to an utf8 char buffer when writing to a file (Jean-Baptiste Quenot <jbq@caraldi.com>)
- - 0000011: [Templates] Calling a function with arguments calls the function with None (rtyler)
- - 0000015: [Tests] Resolve test failures in 'next' branch (rtyler)
- - 0000019: [Templates] Properly warn when joining unicode and non-unicode objects in DummyTransaction (rtyler)
-
-2.1.2 (May 5, 2009)
- - 0000006: [Templates] Support @staticmethod and @classmethod (rtyler)
-
-2.1.1 (April 16, 2009)
- - Support __eq__() and __ne__() the way you might expect in src/Tools/RecursiveNull (patch suggested by Peter Warasin <peter@endian.com>)
- - Applied patch to avoid hitting the filesystem to get the file modification time everytime a #include directive is processed (Jean-Baptiste Quenot <jbq@caraldi.com>)
- - Applied patch to fix some annoying cases when Cheetah writes to stderr instead of propagating the exception (Jean-Baptiste Quenot <jbq@caraldi.com>)
- - Added KDE editor support
- - Applied patch to correct importHook behavior on Python 2.6 (reported/patched by Toshio Ernie Kuratomi <a.badger@gmail.com>)
- - Correct unicode issue when calling/embedding unicode templates inside of other templtes (testcase Tests.Unicode.JPQ_UTF8_Test3. reported by Jean-Baptiste Quenot <jbq@caraldi.com>)
- - Added --shbang option (e.g. "cheetah compile --shbang '#!/usr/bin/python2.6' ")
- - Removed dependency on optik OptionParser in favor of builtin Python optparse module
- - Introduction of the #transform directive for whole-document filtering
- - Introduction of Cheetah.contrib.markdown and Cheetah.Filters.Markdown for outputting a markdown processed template (meant for #transform)
- - Cheetah.Filters.CodeHighlighter, pygments-based code highlighting filter for use with #transform
- - Addition of "useLegacyImportMode" compiler setting (defaulted to True) to allow for older (read: broken) import behavior
-
-2.1.0.1 (March 27, 2009)
- - Fix inline import issue introduced in v2.1.0
-
-2.1.0 (March 16, 2009)
- - Quiet DeprecationWarnings being printed to stderr when using Cheetah on Python 2.6 and up. Patch suggested by Satoru SATOH <satoru.satoh@gmail.com>
- - Apply patch to support parallel compilation of templates courtesy of Evan Klitzke <evan@eklitzke.org>
- - Corrected issue when __getattr__ calls on searchList objects raise exceptions (tyler@slide.com)
- - make autocalling in valueForName correctly ignore newstyle classes and instances
- that are callable, as it does for oldstyle classes and instances. Patch
- from lucas@endian.com
- [TR]
- - made it possible to chain multiple decorators to a method #def [TR with
- patch from Graham Dennis]
- - fixed a bug in _eatMultiLineDef that Graham Dennis reported. [TR]
- - fixed 'module.__init__() argument 1 must be string, not unicode' bug in
- Template.py reported by Erwin Ambrosch [TR]
-
-2.0.1 (Nov 16, 2007)
- - fixed a deadlock Christoph Zwerschke found in Cheetah.ImportHooks.
- [TR]
-
-2.0 (Oct 12, 2007)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- - fixed exception handling issue in the C implemenation of NameMapper
- [patch from Eric Huss]
-
- - fixed filtering of #included subtemplates
- [patch from Brian Bird]
-
- See the release notes from 2.0b1-5 and 2.0rc1-8 for other changes since
- Cheetah 1.0.
-
-
-2.0rc8 (April 11, 2007)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - added a '#unicode <encoding>' directive to indicate that the output of the
- template should be a unicode string even if the template source is a
- normal byte string.
-
- - #unicode and #encoding are mutually exclusive. Use one or the other.
- - #unicode must be on a line by itself.
- - Strings in embedded code must be explictly marked as unicode if they
- contain non-ascii chars::
-
- #unicode latin-1
- \$f(u"<some non-ascii char>") ## right
- \$f("<some non-ascii char>") ## wrong
-
- However, this works fine::
-
- #unicode latin-1
- blah blah <some non-ascii char> blah blah
-
- - fixed several unicode bugs in the compiler.
- - fixed some unicode issues in the standard filters.
- - fixed a few minor bugs in code that never gets called. Thanks to
- Alejandro Dubrovsky for pointing them out.
- - make RawOrEncodedUnicode the baseclass of all filters and remove some
- unused/redudant filters
- - added new compiler setting 'addTimestampsToCompilerOutput'. See Brian
- Bird's post about it. He stores his cheetah generated .py files in
- subversion and needed to disable the timestamp code so svn wouldn't care
- when he recompiles those .py modules.
- - added the #super directive, which calls the method from the parent class
- which has the same as the current #def or #block method::
-
- #def foo
- ... child output
- #super ## includes output of super(<CurrentClass>, self).foo()
- ... child output
- #end def
-
- #def bar(arg)
- ... child output
- #super(arg) ## includes output of super(<CurrentClass>, self).bar(arg)
- ... child output
- #end def
- - added some unit tests for the new directives
-
-
-2.0rc7 (July 4, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - extended the #implements directive so an arguments list can be declared in
- the same fashion as #def and #block.
- - made the parser raise ParseError when \$\*placeholder, \$\*5\*placeholder,
- \$(placeholder), etc. are found within expressions. They are only valid in
- top-level text.
- - tweaked the parser so it's possible to place a comment on the same line as
- a directive without needing to explicitly close the directive first. This
- works regardless of whether or not you added a colon::
-
- self.verify("#if 1:\\n\$aStr\\n#end if\\n",
- "blarg\\n")
-
- self.verify("#if 1: \\n\$aStr\\n#end if\\n",
- "blarg\\n")
-
- self.verify("#if 1: ##comment \\n\$aStr\\n#end if\\n",
- "blarg\\n")
-
- self.verify("#if 1 ##comment \\n\$aStr\\n#end if\\n",
- "blarg\\n")
-
- Previously, that last test would have required an extra # to close the #if
- directive before the comment directive started::
-
- self.verify("#if 1 ###comment \\n\$aStr\\n#end if\\n",
- "blarg\\n")
-
- Code that makes use of explicit directive close tokens immediately followed by
- another directive will still work as expected:
- #if test##for i in range(10)# foo \$i#end for##end if
-
- - safer handling of the baseclass arg to Template.compile(). It now does
- the right thing if the user passes in an instance rather than a class.
-
- ImportHooks: [TR]
-
- - made it possible to specify a list of template filename extentions that are
- looped through while searching for template modules. E.g.::
-
- import Cheetah.ImportHooks
- Cheetah.ImportHooks.install(templateFileExtensions=('.tmpl','.cheetah'))
-
- Core changes by MO:
-
- - Filters are now new-style classes.
- - WebSafe and the other optional filters in Filters.py now use
- RawOrEncodedUnicode instead of Filter as a base class. This allows them
- to work with Unicode values containing non-ASCII characters.
- - User-written custom filters should inherit from RawOrEncodedUnicode
- and call the superclass .filter() instead of str(). str() as of
- Python 2.4.2 still converts Unicode to string using ASCII codec,
- which raises UnicodeEncodeError if it contains non-ASCII characters.
-
-2.0rc6 (Feb 4, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - added a Cheetah version dependency check that raises an assertion if a
- template was compiled with a previous version of Cheetah whose templates
- must be recompiled.
- - made the Cheetah compilation metadata accessible via class attributes in
- addition to module globals
- - major improvement to exception reporting in cases where bad Python syntax
- slips past the Cheetah parser::
-
- File "/usr/lib/python2.4/site-packages/Cheetah/Template.py", line 792, in compile
- raise parseError
- Cheetah.Parser.ParseError:
-
- Error in the Python code which Cheetah generated for this template:
- ================================================================================
-
- invalid syntax (DynamicallyCompiledCheetahTemplate.py, line 86)
-
- Line|Python Code
- ----|-------------------------------------------------------------
- 84 |
- 85 | write('\\n\\n')
- 86 | for i an range(10): # generated from line 4, col 1
- ^
- 87 | _v = i # '\$i' on line 5, col 3
- 88 | if _v is not None: write(_filter(_v, rawExpr='\$i')) # from line 5, col 3.
- 89 | write('\\n')
-
- ================================================================================
-
- Here is the corresponding Cheetah code:
-
- Line 4, column 1
-
- Line|Cheetah Code
- ----|-------------------------------------------------------------
- 2 |#compiler useNameMapper=False
- 3 |
- 4 |#for i an range(10)
- ^
- 5 | \$i
- 6 |#end for
- 7 |
-
-2.0rc5 (Feb 3, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - fixed a memory leak in Template.compile(), reported by Andrea Arcangeli
- - simplified concurrency locking and compile caching in Template.compile()
-
- The command line tool (CheetahWrapper.py):
-
- - added new option --settings for supplying compiler settings
- - added new option --templateAPIClass to replace the environment var
- CHEETAH_TEMPLATE_CLASS lookup I added in 2.0b1
-
-2.0rc4 (Jan 31, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - fixed a typo-bug in the compile hashing code in Template.compile()
- - improved the macros framework and made it possible to implement macros in
- Python code so they can be shared between templates
- - more work on the #i18n directive. It's now a macro directive.
- - added new Cheetah.Macros package
- - more tests
-
-2.0rc3 (Jan 29, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - added short-form single line versions of all directives that have an #end
- tag, except for #errorCatcher::
-
- #if, #else, #elif, #unless,
- #for, #while, #repeat,
- #try, #except, #finally,
- #cache, #raw
- #call, #capture
-
- The #def and #block directives already had single-line versions::
-
- #if cond: foo
- #elif cond2: bar
- #else: blarg
-
- #for i, val in enumerate(vals): \$i-\$val
-
- Note that if you accidentally leave a colon at the end of one of these
- directives but nothing else follows it, aside from whitespace, the parser
- will treat it as a normal multi-line directive.
-
- The first leading space after the colon is discarded. Any additional
- spaces will be included in the output.
-
- Also note, if you use the short form versions of #if/#else/#elif you must
- it for all three. The following is not valid::
-
- #if cond: foo
- #elif cond2
- bar
- #else: blarg
-
- - added support for \$!silentModePlaceholders. This is the same as quiet
- mode in Velocity: http://jakarta.apache.org/velocity/docs/user-guide.html#Quiet%20Reference%20Notation
- - added support for function/method @decorators. It also works with blocks.
- As in vanilla Python, the @decorator statement must be followed with a
- function/method definition (i.e. #def or #block)::
-
- #from xxx import aDecorator
- ...
- ...
- #@aDecorator
- #def func
- foo
- #end def
-
- #@aDecorator
- #def singleLineShortFormfunc: foo
-
- #@aDecorator
- #block func2
- bar
- #end block
-
- - added a new callback hook 'handlerForExtendsDirective' to the compiler settings. It
- can be used to customize the handling of #extends directives. The
- callback can dynamically add import statements or rewrite the baseclass'
- name if needed::
-
- baseClassName = handler(compiler, baseClassName)
-
- See the discussion on the mailing list on Jan 25th for more details.
- - changed the default filter to the one that doesn't try to encode Unicode
- It was 'EncodeUnicode' and is now 'RawOrEncodedUnicode'.
- - added optional support for parsing whitespace between the directive start
- token (#) and directive names, per Christophe Eymard's request. For the
- argument behind this see the mailing list archives for Jan 29th. This is
- off by default. You must turn it on using the compiler setting
- allowWhitespaceAfterDirectiveStartToken=True::
-
- #for \$something in \$another
- # for \$somethin2 in \$another2
- blahblah \$something in \$something2
- # end for
- #end for
-
- - made the handling of Template.compile()'s preprocessors arg simpler and
- fixed a bug in it.
- - fixed attribute name bug in the .compile() method (it affected the feature
- that allows generated module files to be cached for better exception
- tracebacks)
- - refactored the #cache/CacheRegions code to support abitrary backend cache
- data stores.
- - added MemcachedCacheStore, which allows cache data to be stored in a
- memcached backend. See http://www.linuxjournal.com/article/7451 and
- http://www.danga.com/memcached/. This is only appropriate for systems
- running many Python server processes that need to share cached data to
- reduce memory requirements. Don't bother with this unless you actually
- need it. If you have a limited number of Python server processes it is
- much faster, simpler, and more secure to just cache in the memory of each
- process.
-
- KEEP MEMCACHED'S LIMITED SECURITY IN MIND!! It has no authentication or
- encryption and will introduce a gaping hole in your defenses unless you
- are careful. If you are caching sensitive data you should take measures
- to ensure that a) untrusted local system users cannot connect to memcached
- server, b) untrusted external servers cannot connect, and c) untrusted
- users on trusted external servers cannot connect. Case (a) can be dealt
- with via iptable's owner match module for one way to do this: "iptables -A
- ... -m owner ..." Cases (b) and (c) can be handled by tunnelling
- memcached network connections over stunnel and implementing stunnel
- authentication with mandatory peer/client certs.
- - some under-the-hood refactoring of the parser
- - made it possible to add custom directives, or customize the
- parsing/handling of existing ones, via the compiler settings
- 'directiveNamesAndParsers' and 'endDirectiveNamesAndHandlers'
- - added a compile-time macro facility to Cheetah. These macros are very
- similar to macros in Lisp:
- http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html.
-
- As with Lisp macros, they take source code (Cheetah source) as input and
- return source code (again Cheetah source) as output. They are executed at
- compile-time, just like in Lisp and C. The resultant code
- gets executed at run-time.
-
- The new #defmacro directive allows users to create macros inside the
- source of their templates. Macros can also be provided via the compiler
- setting 'macroDirectives'. The 'macroDirectives' setting allows you to
- share common macros between templates.
-
- The syntax for the opening tag of #defmacro is the same as for #def and
- #block. It expects a macro name followed by an optional argument list in
- brackets. A `src` argument is automatically added to the beginning of
- every macro's argument list. The value of the `src` is the block of
- input source code that is provided during a macro call (see below)::
-
- #defmacro <macroname>[(argspec)]
- <macrobody>
- #end defmacro
-
- All of Cheetah's syntax is available for use inside macros, but the
- placeholderStartToken is @ instead of \$ and the
- directiveStartToken/EndToken is % instead of #. Any syntax using the
- standard \$/# tokens will be treated as plain text and included in the output
- of the macro.
-
- Here are some examples::
-
- #defmacro addHeaderFooter
- header
- @src
- footer
- #end defmacro
-
- #defmacro addHeaderFooter(header='h', footer='f')
- @header
- @src
- @footer
- #end defmacro
-
- There is a single-line short form like for other directives::
-
- #defmacro addHeaderFooter: header @src footer
- #defmacro addHeaderFooter(header='h', footer='f'): @header @src @footer
-
- The syntax for calling a macro is similar to the simplest usage of the
- #call directive::
-
- #addHeaderFooter
- Source \$code to wrap
- #end addHeaderFooter
-
- #addHeaderFooter: Source \$code to wrap
-
- #addHeaderFooter header='header', footer='footer: Source \$code to wrap
-
- In Elisp you write
- (defmacro inc (var)
- (list 'setq var (list '1+ var)))
- to define the macro `inc` and write
- (inc x)
- which expands to
- (setq x (1+ x))
-
- In Cheetah you'd write
- #defmacro inc: #set @src +=1
- #inc: \$i
- which expands to
- #set \$i += 1
-
- print Template("""\\
- #defmacro inc: #set @src +=1
- #set i = 1
- #inc: \$i
- \$i""").strip()==2
-
- - fixed some bugs related to advanced usage of Template.compile(). These
- were found via new unit tests. No one had actually run into them yet.
- - added the initial bits of an #i18n directive. It has the same semantics
- as::
-
- #call self.handleI18n
- Some \$var cheetah source
- #end call
-
- but has a simpler syntax::
-
- #i18n
- Some \$var cheetah source
- #end i18n
-
- ## single-line short form:
- #i18n: Some \$var cheetah source
-
- The method it calls, self.handleI18n, is just a stub at the moment, but it
- will soon be a wrapper around gettext. It currently has one required
- positional argument `message`. I anticipate supporting the following
- optional arguments::
-
- id = msgid in the translation catalog
- domain = translation domain
- source = source lang
- target = a specific target lang
- comment = a comment to the translation team
-
- plural = the plural form of the message
- n = a sized argument to distinguish between single and plural forms
-
- #i18n is executed at runtime, but it can also be used in conjunction with
- a Cheetah preprocessor or macro (see above) to support compile time
- translation of strings that don't have to deal with plural forms.
- - added Cheetah.Utils.htmlEncode and Cheetah.Utils.htmlDecode
- - more docstring text
-
- Unit tests: [TR]
-
- - extended the caching tests
- - added tests for the various calling styles of Template.compile()
- - added copies of all the SyntaxAndOutput tests that use a template
- baseclass other than `Template`. This ensures that all syntax & core
- features work with 2.0's support for arbitrary baseclasses.
- - added tests for all the new directives and the new single-line short forms
-
-2.0rc2 (Jan 13th, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - fixed some python 2.4isms that slipped in. All the tests pass with Python
- 2.2 now
- - added lots more docstring content in the Template class
- - made multiline comments gobble whitespace like other directives, per JJ's
- request. The rather longwinded compiler setting
- gobbleWhitespaceAroundMultiLineComments can be used to go back to the old
- non-gobbling behaviour if needed.
- - added #capture directive to complement the #call directive.
- #call executes a region of Cheetah code and passes its output into a function call
- #capture executes a region of Cheetah code and assigns its output to a variable
- - extended the compile caching code in Template.compile so it works with the
- 'file' arg.
- - added cacheModuleFilesForTracebacks and cacheDirForModuleFiles args to
- Template.compile(). See the docstring for details.
- - misc internal refactoring in the parser
- - improved handling of keyword args in the __init__ method and fixed a
- potential clash between the namespaces and searchList args
-
- WWW: [TR]
-
- - added the source for the new Cheetah website layout/content
-
-2.0rc1 (Jan 10, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - made it possible nest #filter directives
- - added lots more docstring content in the Template class
- - added Template.subclass() classmethod for quickly creating subclasses of
- existing Cheetah template classes. It takes the same args as the
- .compile() classmethod and returns a template that is a subclass of the
- template .subclass() is called from::
-
- T1 = Template.compile(' foo - \$meth1 - bar\\n#def meth1: this is T1.meth1')
- T2 = T1.subclass('#implements meth1\\n this is T2.meth1')
-
- - added baseclass arg to Template.compile(). It simplifies the reuse of
- dynamically compiled templates::
-
- # example 1, quickly subclassing a normal Python class and using its
- # __init__ call signature:
- dictTemplate = Template.compile('hello \$name from \$caller', baseclass=dict)
- print dictTemplate(name='world', caller='me')
-
- # example 2, mixing a Cheetah method into a class definition::
-
- class Foo(dict):
- def meth1(self):
- return 'foo'
- def meth2(self):
- return 'bar'
- Foo = Template.compile('#implements meth3\\nhello \$name from \$caller',
- baseclass=Foo)
- print Foo(name='world', caller='me')
-
- A side-benefit is the possibility to use the same Cheetah source with
- several baseclass, as the baseclass is orthogonal to the source code,
- unlike the #extends directive.
- - added 'namespaces' as an alias for 'searchList' in Template.__init__
- - made it possible to pass in a single namespace to 'searchList', which will
- automatically be converted into a list.
- - fixed issue with buffering and use of #call when template is used as a
- webkit servlet
- - added Cheetah.Utils.htmlEncode and htmlDecode
-
- The command line tool (CheetahWrapper.py):
-
- - changed insertion order for the --env and --pickle options so they match the
- commandline UI of the compiled template modules themselves [TR]
-
-2.0b5 (Jan 7, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - made Cheetah.Template a new-style class by inserting 'object' into its'
- inheritance tree. Templates can now use super(), properties and all the
- other goodies that come with new-style classes.
- - removed the WebInputMixin by placing its one method directly in the
- Template class.
- - removed the SettingsManager Mixin. It wasn't being used by anything
- anymore.
- - added a framework for caching the results of compilations in
- Template.compile(). This is on by default and protects against bad
- performance issues that are due to programmers misguidedly compiling
- templates inside tight loops. It also saves on memory usage.
- - misc attr name changes to avoid namespace pollution
- - more + improved docstrings
- - replaced the oldstyle dynamic compile hacks with a wrapper around
- Template.compile(). The old usage pattern Template(src) now benefits from
- most of the recent changes::
-
- Template(src).__class__ == Template.compile(src)
-
- - removed all the extra imports required by oldstyle dynamic compile hacks
- - converted the cheetah #include mechanism to newstyle compilation and made it
- more flexible
- - made the #include mechanism work with file objects in addition to file names
- - made the handling of args to Template.compile() more flexible. You can now
- provide defaults via class attributes.
- - made preprocessors for Template.compile() work with file arguments
- - added support for specifying a __metaclass__ on cheetah template classes
- - refactored both the class and instance initialization processes
- - improved the handling of __str__ in _assignRequiredMethodsToClass
-
- The command line tool (CheetahWrapper.py): [TR]
-
- - improved error output in CheetahWrapper
- - switched fill command over to new style compile usage
-
- Unit tests: [TR]
-
- - fixed format string bug in unittest_local_copy.py
-
-2.0b4 (Jan 6, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - fixed up parsing of target lists in for loops. This was previously limited
- to fairly simple target lists::
-
- #for (\$i, \$j) in [('aa','bb'),('cc','dd')]
- \$i.upper,\$j.upper
- #end for"
- #for (i, j) in [('aa','bb'),('cc','dd')]
- \$i.upper,\$j.upper
- #end for"
- #for i,(j, k) in enumerate([('aa','bb'),('cc','dd')])
- \$j.upper,\$k.upper
- #end for"
-
- - refactored the class initialization process
- - improved handling of target lists in #set directive. This was previously
- limited to fairly simple target lists.
- #set i,j = [1,2] ... #set \$i,\$j = [1,2]
- #set (i,j) = [1,2] ... #set (\$i,\$j) = [1,2]
- #set i, (j,k) = [1,(2,3)] ... #set \$i, (\$j,\$k) = [1,(2,3)]
-
- - made it possible for the expressionFilter hooks to modify the code chunks
- they are fed. Also documented the hooks in a docstring. Thus the hooks
- can be used as preprocessors for expressions, 'restricted execution', or
- even enforcement of style guidelines.
-
- - removed cheetah junk from docstrings and placed it all in comments or
- __moduleVars__. Per JJ's suggestion.
-
- - made it possible to nest #cache directives to any level
- - made it possible to nest #call directives to any level
-
- Unit Tests [TR]
-
- - extended tests for #for directive
- - expanded tests for #set directive
- - expanded tests for #call directive
- - expanded tests for #cache directive
- - added basic tests for the new \$placeholder string expressions:
- c'text \$placeholder text'
-
-2.0b3 (Jan 5, 2006)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
- Core Changes: [TR]
-
- - added #yield statement
- - added ability to create nested scopes/functions via nested #def statements
- - added new #call directive and related #arg directive, per Ian Bicking's
- suggestion.
- - added new expression syntax c"text \$placeholder text"
-
- for those basic function calling cases where you just need to pass in a
- small bit of cheetah output as an argument::
-
- c'a string with \$placeholders',
- c'''a string with \$placeholders''',
- c"a string with \$placeholders",
- c"""a string with \$placeholders"""
-
- - They can't contain #directives, but accept any valid \$placeholder syntax
- except caching placeholders. Caching placeholders don't make any sense in
- this context.
- - They can be used \*any\* place where a python expression is expected.
- - They can be nested to any depth::
-
- \$func(c'<li>\$var1-\$var2</li>')
- \$func(c'<li>\$var1-\$var2</li>', doSomething=True)
- \$func(content=c'<li>\$var1-\$var2</li>', doSomething=True)
- \$func(lambda x,y: c'<li>\$x-\$y</li>')
- \$func(callback=lambda x,y: c'<li>\$x-\$y</li>')
- \$func(lambda x,y: c'<li>\$x-\$y-\$varInSearchList</li>')
- \$func(c'<li>\$var1-\$var2-\$(var3\*10)-\$(94.3\*58)</li>')
- \$func(c'<li>\$var1-\$var2-\$func2(c"a nested expr \$var99")</li>')
- #if \$cond then c'<li>\$var1-\$var2</li>' else c'<p>\$var1-\$var2</p>'
- #def foo(arg1=c'\$var1<span class="foo">\$var2</span>'): blah \$arg1 blah
- \$foo(c'\$var1<i>\$var2</i>')
-
- - added preprocessor hooks to Template.compile()
- can be used for partial completion or 'compile-time-caching'
- ... more details and examples coming. It's very useful, but takes a bit
- of explaining.
- - added '#set module varName = expr' for adding module globals. JJ's suggestion
- - improved generated docstring notes about cached vars
- - fixed silly bug related to """ in docstring comments and statements like
- this '#def foo: \$str("""foo""")'. Reported by JJ.
- - changed the handling of single-line defs so that
- '#def xxx:<just whitespace>\\n' will be treated as a multi-line #def.
- The same applies to #block. There's a compiler setting to turn this off
- if you really need empty single-line #def:'s.
- JJ reported that this was causing great confusion with beginners.
- - improved error message for unclosed directives, per Mike Orr's suggestion.
- - added optional support for passing the trans arg to methods via \*\*KWS rather
- than trans=None. See the discussion on the mailing list Jan 4th (JJ's post) for
- details. The purpose is to avoid a positional argument clash that
- apparently is very confusing for beginners.
-
- Note that any existing client code that passing the trans arg in
- positionally rather than as a keyword will break as a result. WebKit
- does this with the .respond method so I've kept the old style there.
- You can also turn this new behaviour off by either manually including
- the trans arg in your method signature (see the example below) or by
- using the compiler setting 'useKWsDictArgForPassingTrans'=False::
-
- #def manualOverride(arg1, trans=None)
- foo \$arg1
- #end def
-
- ImportHooks:
-
- - made the ImportHook more robust against compilation errors during import [TR]
-
- Install scripts: [TR]
-
- - added optional support for pje's setuptools
- - added cheeseshop classifiers
- - removed out of date install instructions in __init__.py
-
- Servlet Base Class For Webkit: [TR]
-
- - disabled assignment of self.application (was a webware hack)
-
- Unit Tests: [TR]
-
- - unit tests for most of the new syntax elements
- - tidied up some old tests
- - misc refactoring
-
-2.0b2 (Dec 30, 2005)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- Core Changes:
-
- - In previous versions of Cheetah tracebacks from exceptions that were raised
- inside dynamically compiled Cheetah templates were opaque because
- Python didn't have access to a python source file to use in the traceback::
-
- File "xxxx.py", line 192, in getTextiledContent
- content = str(template(searchList=searchList))
- File "cheetah_yyyy.py", line 202, in __str__
- File "cheetah_yyyy.py", line 187, in respond
- File "cheetah_yyyy.py", line 139, in writeBody
- ZeroDivisionError: integer division or modulo by zero
-
- It is now possible to keep the generated source code from the python
- classes returned by Template.compile() in a cache dir. Having these files
- around allows Python to include the actual source lines in tracebacks and
- makes them much easier to understand::
-
- File "/usr/local/unsnarl/lib/python/us/ui/views/WikiPageRenderer.py", line 192, in getTextiledContent
- content = str(template(searchList=searchList))
- File "/tmp/CheetahCacheDir/cheetah_yyyy.py", line 202, in __str__
- def __str__(self): return self.respond()
- File "/tmp/CheetahCacheDir/cheetah_yyyy.py", line 187, in respond
- self.writeBody(trans=trans)
- File "/tmp/CheetahCacheDir/cheetah_yyyy.py", line 139, in writeBody
- __v = 0/0 # \$(0/0)
- ZeroDivisionError: integer division or modulo by zero
-
- This is turned off by default. To turn it on, do this::
-
- class NiceTracebackTemplate(Template):
- _CHEETAH_cacheModuleFilesForTracebacks = True
- _CHEETAH_cacheDirForModuleFiles = '/tmp/CheetahCacheDir' # change to a dirname
-
- templateClass = NiceTracebackTemplate.compile(src)
-
- # or
- templateClass = Template.compile(src,
- cacheModuleFilesForTracebacks=True, cacheDirForModuleFiles='/tmp/CheetahCacheDir')
-
-
- This only works with the new Template.compile(src) usage style!
-
- Note, Cheetah generated modules that are compiled on the command line have
- never been affected by this issue. [TR]
- - added an extra comment per \$placeholder to generated python code so it is
- easier to grok. [TR]
-
-2.0b1 (Dec 29, 2005)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- Core Changes:
-
- - enabled use of any expression in \${placeholders}. See the examples I posted to
- the email list on Dec 12th. All use cases of the #echo directive can now
- be handled with \${placeholders}. This came from a suggestion by Mike
- Orr. [TR]
- - made it possible for templates to #extend (aka subclass) any arbitrary
- baseclass, including Python's new style classes. You must either compile
- your classes on the command line or use the new classmethod
- Template.compile() as described below. The old Template(src) interface
- still works, provided you don't try to use this new arbitrary baseclass
- stuff. See my messages to the email list for more details. [TR]
- - made it possible to create template classes dynamically, rather than just
- instances. See the new classmethod Template.compile(). See my messages
- to the email list for more details. [TR]
-
- klass = Template.compile(src)
- - made it easier to work with custom compiler settings, particularly from
- the command line tool. You can now define a subclass of Template which
- will compile your templates using custom compilerSettings, or even a
- custom compiler class, without requiring you to manually pass in your
- compilerSettings each time or define them in the template src itself via
- the #compiler directive. You can make the command line tool use your
- subclass by defining the environment variable CHEETAH_TEMPLATE_CLASS. It
- should be in the form 'package.module:class'. See my messages
- to the email list for more details. [TR]
- - made it possible to pass the searchList in as an argument to #def'ined
- methods. This makes all lookup that occur within the scope of that method
- use the provided searchList rather than self._searchList. This does not
- carry over to other methods called within the top method, unless they
- explicitly accept the searchList in their signature AND you pass it to
- them when calling them. This behaviour can be turned off with the
- corresponding compilerSetting 'allowSearchListAsMethArg' [TR]
- - added hooks for filtering / restricting dangerous stuff in cheetah source
- code at compile time. These hooks can be used to enable Cheetah template
- authoring by untrusted users. See my messages to the email list for more
- details. Note, it filters expressions at parse/compile time, unlike Python's
- old rexec module which restricted the Python environment at runtime. [TR]
-
- # Here are the relevant compiler settings:
- # use lower case keys here!!
- 'disabledDirectives':[], # list of directive keys, without the start token
- 'enabledDirectives':[], # list of directive keys, without the start token
-
- 'disabledDirectiveHooks':[], # callable(parser, directiveKey),
- # called when a disabled directive is found, prior to raising an exception
-
- 'preparseDirectiveHooks':[], # callable(parser, directiveKey)
- 'postparseDirectiveHooks':[], # callable(parser, directiveKey)
-
- 'preparsePlaceholderHooks':[], # callable(parser)
- 'postparsePlaceholderHooks':[], # callable(parser)
-
- 'expressionFilterHooks':[],
- # callable(parser, expr, exprType, rawExpr=None, startPos=None)
- # exprType is the name of the directive, 'psp', or 'placeholder'.
- #all lowercase
- - added support for a short EOLSlurpToken to supplement the #slurp
- directive. It's currently re.compile('#\\s\*\\n') (i.e # followed by
- arbitrary whitespace and a new line), but this is not set in stone. One
- other suggestion was the backslash char, but I believe Python's own
- interpretation of backslashes will lead to confusion. The compiler
- setting 'EOLSlurpToken' controls this. You can turn it off completely by
- setting 'EOLSlurpToken' to None. See the email list for more details. [TR]
- - added '_CHEETAH_' prefix to all instance attribute names in compiled
- templates. This is related to the arbitrary baseclass change. [TR]
- - shifted instance attribute setup to _initCheetahAttributes() method. This
- is related to the arbitrary baseclass change. [TR]
- - made it possible to use full expressions in the #extends directive, rather
- than just dotted names. This allows you to do things like this:
-
- #from xx.TemplateRepository import getTemplateClass
- #extends getTemplateClass('someName')
-
- I don't expect this to be used much. I needed it for a wiki system in
- which the baseclasses for the templates are dynamically compiled at run
- time and are not available via simple imports. [TR]
- - added compiler setting autoImportForExtendDirective=True, so this existing
- default behaviour can be turned off when needed. [TR]
- - fixed a bug in the parsing of single-line #def's and #block's when they
- are enclosed within #if ... #end if. Reported by Marcin Gajda [TR]
- - tweak to remove needless write('') calls in generated code [TR]
-
- The command line tool (CheetahWrapper.py):
-
- - added code to cleanup trailing slashes on path arguments (code originally
- from Mike Orr) [TR]
- - turned on the ImportHooks by default for the 'cheetah fill' command. See the
- discussion on the email list [TR]
-
- ImportHooks:
-
- - fixed a name error bug in the ImportHooks [TR]
-
-1.0 (Dec 4, 2005)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- Version bump from 1.0rc3
-
-1.0rc3 (Nov 30, 2005)
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- - added useSearchList compiler setting [TR]
- This defaults to True, but if false, the compiler assumes the first
- portion of a \$variable (before the first dot) is a global, builtin, or local
- var that doesn't need looking up in the searchlist. NameMapper's unified
- dotted notation will still be used on the rest of the lookup (provide the
- setting useNameMapper==True)::
-
- \$aLocalDictVar.aKey.somethingElse
-
-1.0rc2 (Nov 19, 2005)
-
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- See my email to the cheetahtemplate-discuss list on Sat. Nov. 12th for more
- details on these changes:
-
- - faster list-based buffering in DummyTrans, rather than StringIO (my
- benchmarks showed it to be significantly faster. collections.deque wasn't
- any faster than a simple list.) [TR]
- - new CompilerSettings to tweak generated code: [TR]
- \* alwaysFilterNone: filter out None immediately, before the filter is called
- \* useFilters: allows you to turn them off completely and default to str()
- \* includeRawExprInFilterArgs: allows you to disable this behaviour
- \* autoAssignDummyTransactionToSelf: off by default
- - and automatic \$trans finding without having to pass it as an arg to methods
- based Jonathan Mark's suggestion. If the template's self.transaction
- attribute has been set, each method of the template will use it when
- called. [TR]
- - applied Chris Murphy's patch to fix a bug in the #shBang directive. [TR]
-
-1.0rc1 (Nov 2, 2005)
-
- !!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-
- - added the compiler option "useStackFrames" for optionally turning off the
- default lookup method which doesn't work with psyco because it uses stack
- frame introspection. When useStackFrames=False, an alternative psyco
- friendly lookup method is used. [TR]
- - fixed treatment of None in several filters, bug reported by Daniele Varrazzo
- [TR]
-
-0.9.18 (Aug 22, 2005)
-
- - version bump from 0.9.18rc1 [TR]
-
-0.9.18rc1 (Aug 15, 2005)
-
- - applied Philippe Normand's patch for extended cache support [TR]
- - added filter RawOrEncodedUnicode to fix a unicode issue that was discussed
- on the email list on Aug. 9th 2005 [TR]
-
-0.9.17 (May 30, 2005)
-
- - this is just 0.9.17rc1 repackaged [TR]
-
-0.9.17-rc1 (May 12, 2005)
-
- This simple bug fix release resolves some issues introduced by
- under-the-hood changes in release 0.9.16a1.
-
- - removed the use of temp files for handling imports with dynamic
- compilation. This removes a whole slew of issues, including a temp file
- security issue reported on the email list by Brian Bird. [TR]
- - fixed bug with handling of the searchList with dynamic inheritance, as
- reported by Brian Bird. [TR]
-
-0.9.16 (Mar 27, 2005)
-
- - this is just 0.9.16b1 repackaged [TR]
-
-0.9.16b1 (Feb 28, 2005)
-
- - fixed attr error in Parser.eatEncoding [TR]
- - some tweaks to Compiler.py to prevent errors with dynamically compiled
- templates [TR]
- - added tests for the #encoding directive [TR]
-
-0.9.16a1 (Jan 6, 2005)
-
- - fixed a unicode bug in Compiler.py [TR]
- - added new EncodeUnicode filter that Rene Pijlman contributed (I optimized it
- slightly) and made it the default filter for all templates. [TR]
- - added test cases for handling unicode with the default filter [TR]
- - fixed a caching bug related to the #include directive. Thanks to Michael
- Engelhart for reporting it.[TR]
- - added the new #encoding directive to handle PEP 263
- http://www.python.org/doc/2.3/whatsnew/section-encodings.html [TR]
- - Tools.CGITemplate: fix bug in comment.[MO]
- - Abort with a helpful error message if user runs 'cheetah test' in a
- directory without write permission. (Kludge in CheetahWrapper.py; we
- should probably move the temp files under the system tmp directory.) [MO]
- - added better string type checking for args in Template.py, as suggested by
- Terrel Shumway [TR]
- - minor tweak to the class attribute lookup style in the Compiler.py
- __getattr__ methods [TR]
- - Fix printf format bug in "cheetah c --debug", found by Terry MacDonald. [MO]
- - Disabled NameMapperDict test (in SyntaxAndOutput.py) because the
- namemappers still have the dict-method bug. (Reminder: don't use
- placehold names like \$update that match dict method names.) [MO]
- - #repeat now uses a local variable of the form __i\$num which permits
- nesting [JJ]
- - implemented a modified version of Bob and JJ's patch for better parser
- warnings about mismatched directives and #end directives [TR]
- - lots of little cleanups and refactoring [TR]
- - refactored the class tree for the Parser and Compiler. They are now
- completely separate trees and the communication between them is one-way:
- explicit commands from the parser to the compiler. The parser now handles
- all parsing tasks by itself and delegates \*all\* code generation to the
- compiler. This last bit was my original intention, but things got a bit
- mixed up over time. Also, all SettingsManager stuff for handling
- compiler/parser settings is now handled by ModuleCompiler. This should make
- it easier to grok, maintain, and extend both. [TR]
- - improved the parsing of singe-line #if directives. [TR]
- - removed the old webware example of the cheetah site, as it was way out of
- date and was more confusing than helpful. [TR]
- - added two new lookup functions to NameMapper (valueFromFrame and
- valueFromFrameOrSearchList) and synchronized the behaviour of the C and
- Python versions of all functions. [TR]
- - improved the exception handling of both versions of NameMapper. NotFound
- exceptions now include more detail about what wasn't found. [TR]
- - made NameMapper's searchList lookup functions work with any iterable
- type/class rather than just with lists. [TR]
- - added and updated a variety of test cases. [TR]
- - checked in a patch to CheetahWrapper that improves handling of the odir
- option when the path is absolute. I can't remember where the patch came
- from. [TR]
- - checked in a patch to Template.py for better include/import support under
- Jython. Again, I've forgotten who contributed it. [TR]
- - updated various bits of the user guide. [TR]
- - made the Cheetah NameMapper calls in the generated code use the new function
- valueFromFrameOrSearchList rather than passing locals, searchList, globals,
- and __builtins__ into valueFromSearchList. This is faster, less bug prone
- and simpler to read/grok. I also removed all tracking of local
- variable names by the compiler. [TR]
- - other misc. refactorings [TR]
-
-0.9.15 (Mar 25, 2003)
-
- - a minor tweak to the cleanup actions of one of the test cases [TR]
-
-0.9.15rc2 (Mar 23, 2003)
-
- - Fixed a python version dependency bug related to Compiler.py's use of
- isinstance() [TR]
-
-0.9.15rc1 (Mar 21, 2003)
-
- This is just 0.9.15b1 renamed.
-
-0.9.15b1 (Mar 17, 2003)
-
- - The Cheetah version of unittest now prints a blank line after each
- traceback to separate them. (MO)
- - .webInput() now saves the cgi.FieldStorage() instance in a global
- variable rather than recreating it each call. That should allow the
- method to be called multiple times with POST variables outside Webware.
- (MO)
- - CheetahWrapper: no verbose output on stdout with --stdout/-p. (MO)
- - "#indent" is now undocumented. The existing code remains intact for now.
- See the TODO file for our future plans. (MO)
- - Apply 2 unicode-support patches from Rodrigo B. de Oliveira (rodrigobamboo)
- that affected the Template and ModuleCompiler classes. (TR)
- - Template: compiling a template from a string now works if the current
- directory doesn't have write permission. (MO)
- - remove temporary .pyo files in addition to .py and .pyc files (TR)
-
-0.9.15a3 (Nov 10, 2002)
-
- - corrected a dictionary bug in the Python version of NameMapper (TR)
- - Rewrote the "cheetah" command (CheetahWrapper.py) again and added test
- cases. New options --flat and --nobackup; --stdout is now a synonym for
- -p. See the "cheetah compile" section in the Users' Guide for details.
- Deleted Utils.dualglob: merged into CheetahWrapper. (MO)
- - .addToSearchList() and .prependToSearchList() are gone. Instead of
- adding containers to the searchList after instantiation, pass all the
- containers you need to the constuctor, keep another reference somewhere
- to the containers, and modify the containers directly. Generic libraries
- that want to add a new kind of information to the searchList (e.g.,
- web variables) should do "self.searchList().insert(0, myContainer)". (MO)
-
-0.9.15a2 (Nov 4th, 2002)
-
- - Filters now have access to the name of the placeholder they're filtering.
- In the .filter() method, kw['rawExpr'] gives the entire placeholder name
- including subscripts and arguments, exactly as it appears in the template
- definition. (TR)
- - Fix three bugs in "cheetah compile -R": (1) the generated class name
- contained the subdirectory, (2) the destination path did not contain the
- subdirectory, (3) Cheetah failed to create the destination subdirectory
- if missing. All subdirectories created have an "__init__.py" file.
- "cheetah fill -R" does the same thing but does not create
- "__init__.py". (MO) NOTE: this is still buggy!
- - New directory "attic" in source contains code that has been abandoned
- for now but may come in handy someday. (MO)
- - Tests.CheetahWrapper: test suite for "cheetah compile" and
- "cheetah fill". If the module is run from the command line, the
- option "--list PATH/CheetahWrapper.py", lists all scenarios that would be
- tested; the argument is the path to the test module itself. (MO)
- - made Cheetah.NameMapper.NotFound subclass the builtin LookupError (TR)
- - added an initial implementation of single line #if directives
- #if <condition> then <true> else <false>
- The parsing is fairly rudimentary for now and assumes that the keywords
- 'then' and 'else' won't appear any inside a string in this directive (TR)
-
-0.9.15a1 (Oct 6th, 2002)
-
- - fixed a package-relative import bug in ImportHooks.py (TR)
- - set 'monitorSrcFile' to false as it was causing problems with the
- ImportHooks ... This might be temporary as the problem needs more thought
- (TR)
- - fixed meta tag http_equiv to be http-equiv in SkeletonPage (TR)
- - \$webInput (Utils.WebInputMixin) 'source' arg can be either case. (MO)
- - fixed code-gen bug in MethodCompiler.commitStrConst that was leading to
- triple single quotes followed immediately by another single quote if the
- template def contained a '\$placeholder' surrounded in single quotes and
- multiple \\n newlines ... plus added new test case.(TR)
- - undocumented the '#settings' directive. The directive itself will be
- removed soon. (MO)
- - Utils.optik: Optik 1.3 package by Gregory P Ward, for parsing
- command-line options in 'cheetah' comamnd. Copied unchanged into
- Cheetah except added "Cheetah.Utils.optik." prefix to intra-package
- imports. Optik's copyright and license is in an appendix in the
- Cheetah Users' Guide. (MO)
- - rewrite of the "cheetah" and "cheetah-compile" commands.
- The command-line options have changed! Removed CheetahCompile module
- removed and its test suite too; CheetahWrapper now takes its place. (MO)
- - Utils.dualglob: new module to recursively generate source+destination
- filenames from command-line filespecs. (MO)
- - The command-line options of .py template modules have also changed
- to conform with the "cheetah" command. Also a --pickle bug was
- fixed. (MO)
- - Utils.WebMixin: made a string type comparision backward compatible.
- This was why the Cheetah test suite was failing on Python < 2.2! (MO)
- - SettingsManager._createConfigFile(): bugfix in default argument. (MO)
- - \$hasVar('varName') is an alias for \$varExists('varName'). (MO)
- - \$_fileDirName and \$_filePath are now None rather than missing if
- the template definition did not come from a named file. (MO)
- - applied patch on SourceForge for "%" in default arguments of a block (TR)
- - removed the _underscored attribute lookup step from NameMapper NOTE THIS
- MIGHT BREAK EXISTING TEMPLATES (TR)
- - Install Cheetah into site-packages/Cheetah/ rather than
- site-packages/Webware/Cheetah/. Added code to automatically remove the old
- dir.(TR)
- - fixed the variable name resolution order bug in \$placeholders. The new
- implementation uses::
-
- valueFromSearchList([locals()] + searchList + [globals(), __builtin__],
- rest of the args) for all lookups. (TR)
-
- - removed the #settings directive (TR)
- - added the #del directive, for using Python's del statement (TR)
- - I think I've fixed the problem with the searchList arg being discarded when a
- template is generated from a .tmpl file that #extends another template. This
- bug was reported by Edmund on Aug 30th
- (subject: "Bug? Was: Really basic searchList question") (TR)
-
-0.9.14 (July 14, 2002)
-
- - Precompiled template Templates/SkeletonPage.py added to CVS. This file is
- needed for Cheetah's regression tests. (MO)
- - removed automatic recompilation of .py template in memory if the
- .tmpl file has changed. (TR)
-
-0.9.14b1 (June 30, 2002)
-
- - moved the Users' Guide and the Developers' Guide into a separate CVS module,
- 'CheetahDocs', so they can be distributed separately from the source distro
- (TR,MO)
- - added TypeType to the types that NameMapper won't do autocalling on (TR)
- - in Template.py moved the global LegalKWs to Template._legalKWs (TR)
- - made #set work with RVALUES that are missing the recommended \$ (TR)
- - added some new test cases for the #set directive (TR)
- - fixed bug in the output of the #unless directive that Mike found (TR)
- - added some module constants to clear up a missing name bug that Mike found
- in cases where you use \*\*KW in a Cheetah method definition (TR)
- - fixed a bug in Parser.py:_LowLevelSemanticsParser.getExpression() that was
- related to the default enclosures=[] argument. This arg was unintentionally
- being shared between calls and thus leading to parsing errors as reported by
- Greg Czajkowski (TR)
- - Filter: fixed an '== None' expression (should be 'is None'). (MO)
- - TemplateMisc: new base class for Template. This is for optional
- convenience methods that don't require Webware. (MO)
- - User's Guide: new sections "Non-Webware HTML Output" and "Non-HTML
- Output". (MO)
- - Expanded \$webInput() -- renamed from \$cgiImport() -- to work both with
- Webware input and CGI scripts. Handles GET/POST/cookie/session vars under
- Webware, and GET/POST under CGI. Defined in Cheetah.Utils.WebInputMixin,
- now inherited by Template directly. (MO)
- - Tools.CGITemplate has methods to output CGI headers: .isCgi, .cgiHeaders
- and .cgiHeadersHook in TemplateMisc. (MO)
- - New #indent directive allows you to indent block constructs in the
- template definition without having that indentation in the output, and
- allows you to set the output indentation per line independent of the
- indentation in the template definition. This version uses Robert
- Kuzelj's #indent syntax exactly. In the next few days,
- Cheetah.Utils.Indenter will be refactored and
- \*\*\* THE #INDENT SYNTAX WILL CHANGE! \*\*\* (MO)
- - added the #return directive as requested by Robert Kulezj (TR)
- - added some test cases for the #return directive (TR)
- - removed buggy import statement that had been left in Servlet.py after the
- CGIInputMixin changes (TR)
-
-
-0.9.13 (May 8, 2002)
-
- - changed Cheetah.Servlet.isRunningFromWebKit to isWebwareInstalled (TR)
- - fixed parsing bug that would exit an expression if the directiveEndToken was a
- valid Python token and was found inside the directive. (TR)
-
- E.g.::
-
- #compiler-settings
- directiveStartToken = .
- directiveEndToken = :
- commentStartToken = #
- #end compiler-settings
-
- .for a in [1,2,3,4][2:3]:
- blag
- .end for
-
- - fixed #include bug that was resulting in non-unique includeIDs (TR)
-
-0.9.13b2 (May 3, 2002)
-
- - fixed the bug in Cheetah.Servlet.Servlet.serverSidePath that Jeff Johnson
- found. (TR)
- - changed the attribute Cheetah.Servlet.ServletisRunningFromWebKit to
- isControlledByWebKit and set the default to False unless the .awake method
- is called. This makes a clear distinction between templates that are being
- used with WebKit via the inheritance approach and the containment approach
- (TR)
-
-
-0.9.13b1 (May 1, 2002)
-
- - Was going to import cStringIO instead of StringIO, but it made the
- DummyTransaction.py unittest fail so I undid it. Cheetah aims to provide
- Unicode support, which cStringIO does not provide. (TR/MO)
- - Utils.Misc.CheckKeywords(): prevent misspelled keyword arguments,
- used by Template constructor. (MO)
- - removed support for multiple inheritance (TR)
- - added some bounds-checking code to _namemapper.c's getNameChunks function
- (TR)
- - changed the exceptions in _namemapper.c from the old string exceptions
- to proper exception objects (TR)
- - first portion of Developers' Guide written (MO)
- - implemented the extended #extends directive, which does automatic importing
- (MO,TR)
- - added some new testcases for the extended #extends directive (TR)
- - lots of work on the Users' Guide (MO)
- - implemented and tested an import hook for .tmpl files (TR):
- import MyTemplate # will compile and import MyTemplate.tmpl
- - made my True/False declarations friendly with Python 2.2.1, which already
- includes True/False as builtins (TR)
- - implemented the #compiler directive that Edmund Lian suggested (TR)
- e.g.:
- #compiler commentStartToken = '//'
- // a comment
- #compiler reset
- // no longer a comment
- - fixed the bug that Edmund Lian found in .addSet() when useNameMapper = 0
- (TR)
- - fixed bug in comment creation using lineCol that Mike found (TR)
-
-0.9.12 (April 3, 2002)
-
- - no code changes from beta 2
- - more work on the docs (MO)
-
-0.9.12b2 (Mar 28, 2002)
-
- - fixed Win32 path bug in Template._makeDummyPackageForDir() (TR)
- - prettied up the format of the debug comments in the Cheetah generated
- Python code (TR)
- - fixed the non-unique key error in Template._includeCheetahSource (TR)
- - fixed the module import bug in 'cheetah compile -w' (TR)
-
-0.9.12b1 (Mar 24, 2002)
-
- - \$request().field(args) now works, identical to \$request.field(args)
- to implement this, the request object is now self.request() instead of
- self.request. This provides compatibility with Webware's servlet API.
- (self.session already was an accessor method). New read-only attribute
- self.isRunningFromWebKit is boolean. All changes are in Servlet.py. (MO)
- - fixed nested-NotFound bug in _namemapper.c's valueFromSearchList (TR)
- - 'cheetah' wrapper script has abbreviation -c for the 'compile' command,
- -t for 'test', and an ASCII-art cheetah face in the help message. (MO)
- - CheetahCompile.py: fixed to recognize --help option and to show --help/-h
- in help message. (MO)
- - CheetahCompile.py:
- changed the order of the VERBOSE mode printouts, as per Mike's request (TR)
- - Template.py:
- fixed the #include'd template searchList sharing problem, as reported by
- Johannes (TR)
- - corrected namemapper translation bug in
- Compiler.GenUtils.genNameMapperVar() (TR)
- - Utils.Misc.UseOrRaise(): convenience function to return a
- value, or raise it if it's a subclass of Exception. (MO)
- - Utils.CGIImportMixin replaces Tools.WebwareMixin. Servlet now
- subclasses it. This adds the .cgiImport() method to all servlets, allowing
- sophisticated retrieval of form fields, cookies or session variables from
- one line of Cheetah or Python code. See module docstring. (MO)
- - lots of updates to the docs (MO)
-
-0.9.11 (Mar 07, 2002)
-
- - fixed a careless bug in cheetah-compile (TR)
- - implemented the new 'cheetah' wrapper script (TR)
- - refactored the local copy of unittest a bit (TR)
-
-0.9.10 (Mar 06, 2002): Primarily a bug fix release
-
- - fixed bug in srcfile-mtime monitoring / update code (TR)
- - fixed the parsing of single-line #defs and #blocks so they can have
- arguments (TR)
- - added test cases for single-line #defs and #blocks with args (TR)
- - fixed a silly typo bug in Parser.py where a comma was left at the end of
- regex definition, make it a tuple rather than a regex
- - fixed the directive matching bug that Jeff Johnson reported. It was
- causing #else# to not match, while #else # was matching. + added a test
- for it.(TR)
- - fixed bug in a regex that was preventing bare \$'s followed by whitespace
- and then valid varname chars from parsing as just \$ instead of as a
- placeholder (TR)
- - added some code to break reference cycles after the compilation is
- complete. This helps prevent memory leaks when a process in creating then
- discarding lots of Templates. You also need to manually call
- "template.shutdown()" to clear the remaining reference cycles.
- (TR)
- - fixed string formating bug in the autogenerated docstring code (TR)
- - added better error message for the #attr directive (TR)
- - removed some residual code that was causing a bug with cheetahvars that
- started with the name of one of the imported modules, such as 'time'. (TR)
-
-0.9.9 (Dec 14, 2001)
-
- - implemented one-line #def's and #block's (TR)::
-
- #def aTest: This is a \$adj test ---- READ THE MANUAL FOR MORE INFO.
-
- NOTE: leading and trailing whitespace is stripped. These should only be
- used on lines by themselves as it reads to the end of the line.
- - made cheetah-compile accept input on standard input (TR)
- - made sure that #def and #block work with \$'s on the method names (TR)
-
-0.9.9b1 (Dec 6, 2001)
-
- - template constructor arg 'outputFilter' now 'filter', for consistency
- with #filter (MO)
- - template constructor raises TypeError if bad arguments (MO)
- - Cheetah.Utils.VerifyType new module containing functions for verifying the
- type of an argument (MO)
- - Cheetah.Utils: new package for non-Cheetah-specific modules needed by
- Cheetah (MO)
- - Cheetah.Filters: new filter WebSafe, several bugfixes (MO)
- - more work on the Users' Guide (MO)
- - fixed bug with adding Python's __builtins__ to the local vars list (TR)
- - fixed bug with #echo (TR)
- - fixed bug that was preventing \${a, \$b=1234} from working like \${a, b=1234} (TR)
- - fixed some bugs in Template.varExists and Template.getVar()
- (TR - thanks to MH for spotting them)
- - made it possible to use filenames like 'spam-eggs.txt' that have invalid
- characters for module names with Template(): Template(file='spam-eggs.txt')
- (TR/MH)
- - refactored 'cheetah-compile' a little (TR)
- - Cheetah.Filters.Strip: new filter to strip leading/trailing whitespace
- but preserve newlines. Suitable for #filter directive or (possible)
- future #sed directive. (MO)
- - Cheetah.Filters.StripSqueeze: new filter to canonicalize all whitespace
- chunks to ' '. Also removes all newlines (joining multi-line input into
- one long line), and leading/trailing whitespace from the final result. (MO)
- - Filters can now be used standalone for debugging or for use outside
- Cheetah. This works transparently; details are in Filters.py docstring.
- (MO)
- - Cheetah.Tools.MondoReport: new module for dividing a long list into
- "pages", and for calculating statistics useful in reports. (MO)
- - refactored Cheetah.Servlet.Servlet.Awake a little (TR)
- - fixed an output bug in the #block generated code that turned up when you
- tried to override a block method from Python rather than Cheetah. (TR)
- - started preparing to shift some of the 'shared' utility classes, such as
- SettingsManager, to the Webware core. Cheetah 1.0 will probably require
- Webware to be installed so it can access those shared classes. (TR)
- - extended the template module command line interface(TR/MO)
-
-0.9.9a6 (Nov 6, 2001)
-
- - fixed bug with quotations in longer constant string chunks (TR)
- - fixed another bug in the cheetah-compile script (TR)
- - fixed a bug in the file-update monitoring code that was resulting in
- infinite loops when used with Template sub-classes (TR)
- - extended the #filter framework according to Mike's suggestions (TR)
- - added test modules for cheetah-compile and the file-update monitoring code (TR)
- - extended the capabilities of cheetah-compile ... (IB)
- - updated the docs (MO)
-
-0.9.9a5 (October 31, 2001)
-
- - fixed a bug I created yesterday (TR)
-
-0.9.9a4 (October 30, 2001)
-
- - added #repeat (TR implementing Chuck's suggestion)
- - added #unless (TR implementing Mike's suggestion)
- - updates to the Users' Guide (MO)
- - fixed a small bug in the cheetah-compile script, as reported by Ian on the
- list (TR)
-
-0.9.9a3 (October 12, 2001)
-
- - more in the Users Guide (TR)
- - renamed #attribute as #attr (TR)
- - renamed #call as #silent (TR)
- - added #echo directive (TR)
-
-0.9.9a2 (October 11, 2001)
-
- - updated the example site and the SkeletonPage framework (TR)
- - fixed some small bugs (TR)
- - corrected some typos in the docs (TR + MO)
- - added Ian's sitehiearchy class to Cheetah.Tools (TR + IB)
-
-0.9.9a1 (October 9, 2001) [many changes and bug-fixes]
-
- - a complete reimplementation of Cheetah's core (the parser and compiler
- classes) (TR + IB)
- - implemented the #def, #implements, #import, and #from directives
- + removed #redefine and #macros
- + renamed #extend as #extends (TR + IB)
- - replaced #data with #settings, see the docs (TR)
- - restructured and updated the docs (TR + MO + IB)
- - reimplemented the cheetah-compile script, without the -g option that Ian
- had added (TR)
- - changed the signature of Template.__init__. See the docs. (TR)
- - made #set distinguish between local and global vars. See the docs. (TR)
- - added hundreds of new test cases (TR)
- - added the #breakpoint and #compiler-settings directives (TR)
- - started restructuring the SkeletonPage framework [not complete yet] (TR)
- - started restructuring the example sites [not complete yet] (TR)
-
-0.9.8 (October 9, 2001)
-
- - added a few new language constructs (aka 'directives') to Cheetah (TR)
- #while ... #end while
- #try ... #except ... #else ... #finally ... #end try
- - fixed a bug in the handling of local vars in #for loops that was preventing
- callable local vars from being handled properly. See Chuck's post of Sept
- 10. (TR)
- - fixed a pointer bug in the C version of NameMapper.valueFromSearchList()
- that was yielding undefined values for the NotFound exception when it was
- raised (TR)
- - prefaced all internal args to Template() with underscores (TR)
- - fixed the problem with parsing triple quoted strings in arg lists (TR)
- - updated the docs (TR)
-
-0.9.8a4 (September 7, 2001)
-
- - Added -g (appendGen function argument), which compiles x.tmpl to xGen.py,
- with x.py being for non-generated Python code. Also changed option handling
- a little and added a comment to the top of compiled files. (IB + MO)
- - finalized the #include syntax after a lengthy discussion on the list
- This is different from in 0.9.8a3 (TR):
-
- #include <ARGS> <EXPR>
- ... uses the value of EXPR as the path of the file to include.
-
- #include <ARGS> source = <EXPR>
- ... includes the value of the EXPR
-
- where <ARGS> is 'raw' or ''
- - re-implemented the output mechanism to use streaming via Webware's
- Transaction and Response objects when available and fake it with the
- DummyTransaction DummyResponse classes when the Webware Transaction is not
- avialable. This behaviour is roughly the same as in Webware's PSP. Will
- implement output buffering PHP-style later if there is any demand. (TR)
- - made #include a run-time directive rather than compile-time. This is
- slower, but the semantics are better. (TR)
- - various small optimizations to the generated code (TR)
- - updated the docs (TR)
-
-0.9.8a3 (August 22, 2001) [includes changes for 0.9.8a1 and 0.9.8a2]
-
- - Added package ./src/Tools/ for contributed classes/functions/packages not
- necessary to run Cheetah. The first such class is RecursiveNull.py by Ian
- Bicking. Added package Cheetah.Tools to list in ./setup.py . (MO)
- - Template.__init__ keyword arg 'searchList': no longer has to be a tuple. It
- may be a list or any type that that Python's 'tuple' function accepts. (MO)
- - Template.__init__ new keyword arg 'file': this may be a filename or file
- object to read the Template Definition from. If you use this, you must not
- pass a Template Definition string also. New instance variables
- ._fileName and ._fileMtime are set if a filename was passed; otherwise they
- are None. (MO)
- - CodeGenerator new function 'varNotFound_KeyError': raises KeyError if a
- placeholder name is missing when filling the template. Disabled by default.
- (MO) NB - this change has been superceeded by 'errorCheckers'
- - Template.getUnknowns (new method): returns a list of Placeholder Names
- missing in the Search List. (MO) - this change has been superceeded by
- 'errorCheckers'
- - made changes to Template.py, CodeGenerator.py, PlaceholderProcessor.py,
- and TagProcessor.py to enable customization of the placeholderStartToken so
- it can be set to any character sequence, rather than just the default '\$'.
- This is configurable by the Template setting 'placeholderStartToken' (TR)
- - fixed a small bug in PlaceholderProcessor.processTag() that prevented
- static caching (i.e. \$\*) of a value containing ''' style quotes
- - added #break and #continue (TR)
- - fixed the relative path problem with #include when using Cheetah with WebKit
- (TR)
- - implemented the #stop directive (TR)
- - fixed a bug in the macro processing that prevented macros defined inside
- #includes from being visible at the top level (TR)
- - fixed a bug in the handling of the setting 'useAutocalling' (TR)
- - fixed some bugs in the handling of macros (TR)
- - completed the transition to nested template #includes (TR)
- - added direct #includes (TR)
- - completed the transition to run-time evaluation (TR)
- - renamed the .startServer() method of Template to .compile() (TR)
- - renamed the 'delayedStart' setting as 'delayedCompile' (TR)
- - added .redefineTemplateBlock as an alias to Template.defineTemplateBlock
- (TR)
- - got relative path includes working with Webware and Cheetah.Servlet (TR)
- - lots of changes in the docs (TR & MO)
- - implemented a C version of NameMapper (TR + CE)
- - added the 'errorCheckers' framwork (TR)
- - added the 'formatters' framework and the #formatter directive
- - a major restructuring of the modules and internal API (TR)
- - made sure that all the #directives with start and end tags are
- implemented in such a way that they won't cause 'maximum recursion' limit
- errors if their content block is long. Simple regexes didn't cut it in these
- cases. (TR)
-
- - #macro
- - multiline comments
- - #data
- - #block
- - #raw
- - the parsing of the core tags (the state-dependent ones) after they have been
- translated to the internal delimiters
-
- - made a Template.shutdown() method for cleaning up reference cycles before a
- template object is deleted. (TR)
- - made the parsing and processing of #macros() more robust (TR)
- - implemented the file update checking mechanism (TR)
- NOTE, the syntax for the #include is now::
-
- #include <ARGS> file = <EXPR>
- ... uses the value of EXPR as the path of the file to include.
-
- #include <ARGS> <EXPR>
- ... includes the value of the EXPR
-
- where <ARGS> is 'raw' or 'direct'
-
-0.9.7 (July 13, 2001)
-
- - reimplemented the parsing of \$placeholders using the Python tokenize module (TR)
-
- - now translates into Python code instead of going through NameMapper for
- each request
- - supports arg lists and nested placeholders
- - maintained support for autocalling of functions and methods,
- will do this serially for \$func.otherFunc, etc.
-
- - reimplemented the #include and #raw directives using nested templates for
- parsed includes and string attributes of 'Template' to store raw text
- The support for file update monitoring of includes is still not implemented (TR)
- - moved some stuff from __init__.py into CHANGES and TODO (TR)
- - added a new command 'sdist_docs' to setup.py which rebuilds the docs
- when making a source distribution (TR)
- - changed the name of the ./Cheetah dir to ./src (TR)
- - fixed a bug in one of the code filters that was preventing commas from
- being used between \$placeholders (TR)
- - generalized the line ending regex for single-line comments (TR)
- - corrected the spelling of 'Delimiters' throughout Cheetah (TR)
- - made insertLines in Utilities.py more robust (Chuck)
- - added key argument to raising some NotFound exceptions in NameMapper (Chuck)
- - fixed strange bug involving missing templateObj parameter
- in PlaceholderProcessor.py(Chuck)
- - expanded on the docs (Mike)
-
-0.9.6 (June 12, 2001)
-
- - fixed a bug in NameMapper that was preventing 'obj.__class__.__name__' from mapping (TR)
-
-0.9.5 (June 10, 2001)
-
- - implemented the #cache directive - see the mailing list (TR)
- - reworked the handling of cached \$placeholders and set \$var to mean NO_CACHE,
- \$\*var to mean STATIC_CACHE, and \$\*15\*var to mean TIMED_REFRESH_CACHE (TR)
- - renamed Template._getValueForName as Template.mapName (TR)
-
-0.9.4 (June 9, 2001)
-
- - created a SettingsManager base class to handle settings for the Template class (TR)
- - moved the HTML docs icons into the same dir as the HTML (TR)
-
-0.9.3
-
- - updated the User's Guide Makefile. Builds HTML, PDF, and PS in the ./docs dir now. (TR)
- - changed the refs to 'Tavis Rudd' in the docs to 'The Cheetah Development Team' (TR)
- - added a few bits to the docs (TR)
- - did some internal renaming so 'nameMapperTags' are referred as 'placeholderTags' (TR)
- - added the #slurp directive (TR)
-
-0.9.2
-
- - got the PSP plugin working again. It still need test cases. (TR)
-
-0.9.1
-
- - Changed the name of the package to 'Cheetah' from TemplateServer (TR)
- - Changed the name of the Server module and its TemplateServer class to 'Template' (TR)
- - Changed the name of the 'TScompile' script to 'cheetah-compile' (TR)
- - updated the docs (TR)
-
-0.9.0
-
- - changed the names and behaviour of the #parse and #include directives (TR)
- see the docs for more. (TR)
- - changed #verbatim to #raw (TR)
- - fixed a bug in Tests.py that caused an error on the first run. (TR)
- - more docs (TR + MO)
- - ! all tests pass with Python 2.1 and 2.0 (TR)
-
-0.8.4
-
- - changed the #directive end tags to #end if instead of #/if and #end (TR)
- macro instead of #/macro (TR)
- - more work on the User's Guide (TR)
- - fixed a bug in TScompile (TR)
-
-0.8.3
-
- - fixed a problem with the regexs that caused \$vars and #directives at the (TR)
- very beginning of the template string not to match in Python 2.0 (TR)
- - removed some Test cases that made invalid assumptions about the order (TR)
- of items in dictionaries. (TR)
-
-0.8.2
-
- - finished half of the User's Guide (TR)
- - fixed several small bugs (TR)
- - added the #comment directive and removed the old <# multiline comment tag #> (TR)
- - changed the explicit directive closure to /# from ;# (TR)
-
-0.7.6
-
- - several small bug fixes (TR)
- - reimplemented the #block directive to avoid maximum recursion depth errors (TR)
- with large blocks. (TR)
- - created many new test cases in the regression testing suite (TR)
- - added an example site to the examples/ directory (TR)
- - started the User's Guide (TR)
-
-0.7.5
-
- - implemented the command-line compiler (TR)
-
-0.7.3-4
-
- - implemented the regression testing suite (TR)
- - fixed a number of small bugs (TR)
-
-0.7.2
-
- - implemented the #longMacro directive (TR)
-
-
-KEY TO INITIALS USED ABOVE::
-
- TR - Tavis Rudd
- MO - Mike Orr
- JJ - Shannon 'jj' Behrens
- IB - Ian Bicking
- CE - Chuck Esterbrook
- MH - Mike Halle
diff --git a/docs/html/_sources/recipes/inheritance.rst.txt b/docs/html/_sources/recipes/inheritance.rst.txt
deleted file mode 100644
index 267fa1f..0000000
--- a/docs/html/_sources/recipes/inheritance.rst.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-Basic Inheritance
-=================
-
-Introduction
-------------
-Cheetah, like Python, is an object-oriented language if you so choose to
-use it in that fashion. That is to say that you can use Cheetah in with
-object-oriented principles *or* you can use Cheetah in a strictly functional
-sense, like Python, Cheetah does not place restrictions on these barriers.
-
-While Cheetah is not strictly Python, it was designed as such to interoperate,
-particularly with the notion of classes, with Python itself. In effect you can
-define Python classes that inherit and extend from Cheetah-derived classes and
-vice versa. For this, Cheetah defines a few **directives** (denoted with the `\#`
-hash-mark) that are of some help, the most important one being the `\#extends`
-directive, with others playing important roles like `\#import`, `\#attr` and `\#super`
-
-In this recipe/tutorial I intend to explain and define a few key inheritance
-patterns with Cheetah, being:
-
-* A Cheetah Template inheriting from Python
-* Python inheriting from a Cheetah Template
-* Cheetah Templates and "*mixins*"
-
-This document also operates on the assumption that the reader is at least
-somewhat familiar with the basic tenets of object-oriented programming in
-Python.
-
-
-Cheetah inheriting from Python
-------------------------------
-Whether or not you are aware of it, Cheetah templates are always inheriting from
-a Python class by default. Unless otherwise denoted, Cheetah templates are compiled
-to Python classes that subclass from the `Cheetah.Template.Template` class.
-
-What if you would like to introduce your own Template base class? Easily acheived by
-defining your own Template class in a Python module, for example::
-
- import Cheetah.Template
-
- class CookbookTemplate(Cheetah.Template.Template):
- _page = 'Cookbook'
- author = 'R. Tyler Ballance'
- def pageName(self):
- return self._page or 'Unknown'
-
-**Figure 1. cookbook.py**
-
-For this example, I want all my subclasses of the `CookbookTemplate` to define a
-page author which will be used in some shared rendering code, to accomplish this
-my templates will need to subclass from `CookbookTemplate` explicitly instead of
-implicitly subclassing from `Cheetah.Template.Template`::
-
- #import cookbook
- #extends cookbook.CookbookTemplate
- #attr author = 'Tavis Rudd'
-
- ## The rest of my recipe template would be below
-
-**Figure 2. recipe1.tmpl**
-
-
diff --git a/docs/html/_sources/recipes/precompiled.rst.txt b/docs/html/_sources/recipes/precompiled.rst.txt
deleted file mode 100644
index 7705106..0000000
--- a/docs/html/_sources/recipes/precompiled.rst.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-Precompiled Templates
-=====================
-
-Why bother?
------------
-Since Cheetah supports two basic modes: dynamic and precompiled templates, you have
-a lot of options when it comes to utilizing Cheetah, particularly in web environments.
-
-There is added speed to be gained by using pre-compiled templates, especially when
-using mod_python with Apache. Precompiling your templates means Apache/mod_python
-can load your template's generated module into memory and then execution is only
-limited by the speed of the Python being executed, and not the Cheetah compiler.
-You can further optimize things by then pre-compiling the generated Python files
-(.py) down to Python byte-code (.pyc) so save cycles interpreting the Python.
-
-
-Basic Pre-compilation
----------------------
-Suppose you have a template that looks something like this::
-
- #attr title = "This is my Template"
- <html>
- <head>
- <title>\${title}</title>
- </head>
- <body>
- Hello \${who}!
- </body>
- </html>
-**Figure 1. hello.tmpl**
-
-In order to compile this down to a Python file, you need to only execute the
-`cheetah compile hello.tmpl` command. The results will be a Python file (.py)
-which you can then treat as any other Python module in your code base.
-
-
-Importing and lookup
---------------------
-Typically for the template in *Figure 1*, I could easily import it post-compilation
-as any other Python module::
-
- from templates import hello
-
- def myMethod():
- tmpl = hello.hello(searchList=[{'who' : 'world'}])
- results = tmpl.respond()
-
-**Figure 2. runner.py**
-
-*Note:* If you use the `\#implements` directive, `respond` may not be your "main
-method" for executing the Cheetah template. You can adjust the example above in
-*Figure 2* by using `getattr()` to make the lookup of the main method dynamic::
-
- def myMethod():
- tmpl = hello.hello(searchList=[{'who' : 'world'}])
- mainMethod = getattr(tmpl, '_mainCheetahMethod_for_%s' % tmpl.__class__.__name__)
- results = getattr(tmpl, mainMethod)()
-
-**Figure 3. Dynamic runner.py**
diff --git a/docs/html/_sources/recipes/staticmethod.rst.txt b/docs/html/_sources/recipes/staticmethod.rst.txt
deleted file mode 100644
index cf55ec1..0000000
--- a/docs/html/_sources/recipes/staticmethod.rst.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-@staticmethod and @classmethod
-==============================
-
-Refer the Python's documentation if you're unfamiliar with either
-`@staticmethod <http://docs.python.org/library/functions.html#staticmethod>`_ or
-`@classmethod <http://docs.python.org/library/functions.html#classmethod>`_ and their uses in Python, as they
-pertain to their uses in Cheetah as well. Using `@staticmethod <http://docs.python.org/library/functions.html#staticmethod>`_ it's
-trivial to create *utility templates* which are common when using
-Cheetah for web development. These *utility templates* might contain
-a number of small functions which generate useful snippets of markup.
-
-For example::
-
- #def copyright()
- #import time
- &copy; CheetahCorp, Inc. $time.strftime('%Y', time.gmtime())
- #end def
-
-**Figure 1, util.tmpl**
-
-Prior to version **v2.2.0** of Cheetah, there wasn't really an easy means
-of filling templates with bunches of these small utility functions. In
-**v2.2.0** however, you can decorate these methods with `#@staticmethod`
-and use "proper" Python syntax for calling them, **fig 1** revisited::
-
- #@staticmethod
- #def copyright()
- #import time
- &copy; CheetahCorp, Inc. $time.strftime('%Y', time.gmtime())
- #end def
-
-**Figure 1.1, util.tmpl**
-
-With the addition of the `@staticmethod <http://docs.python.org/library/functions.html#staticmethod>`_ decorator, the `copyright()`
-function can now be used without instantiating an instance of the `util`
-template class. In effect::
-
- #from util import util
-
- <strong>This is my page</strong>
- <br/>
- <hr noshade/>
- $util.copyright()
-
-**Figure 2, index.tmpl**
-
-
-This approach is however no means to structure anything complex,
-`@staticmethod <http://docs.python.org/library/functions.html#staticmethod>`_ and `@classmethod <http://docs.python.org/library/functions.html#classmethod>`_ use in Cheetah is not meant as a
-replacement for properly structured class hierarchies (which
-Cheetah supports). That said if you are building a web application
-`@staticmethod <http://docs.python.org/library/functions.html#staticmethod>`_/`@classmethod <http://docs.python.org/library/functions.html#classmethod>`_ are quite useful for the little snippets
-of markup, etc that are needed (Google AdSense blocks, footers,
-banners, etc).
diff --git a/docs/html/_sources/recipes/writing_a_recipe.rst.txt b/docs/html/_sources/recipes/writing_a_recipe.rst.txt
deleted file mode 100644
index 73d146a..0000000
--- a/docs/html/_sources/recipes/writing_a_recipe.rst.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Writing a "Recipe"
-==================
-
-This document isn't quite there yet ;)
diff --git a/docs/html/_sources/roadmap.rst.txt b/docs/html/_sources/roadmap.rst.txt
deleted file mode 100644
index 5057742..0000000
--- a/docs/html/_sources/roadmap.rst.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Cheetah Roadmap
-===============
-
-Cheetah v3.0
-^^^^^^^^^^^^
-*in development*
-
-Cheetah v3.0 is for support for Python 2.7 and Python 3.
-
-
-Cheetah v2
-^^^^^^^^^^
-
-Old versions of Cheetah are no longer supported.
diff --git a/docs/html/_sources/users_guide/comments.rst.txt b/docs/html/_sources/users_guide/comments.rst.txt
deleted file mode 100644
index 5bd45dc..0000000
--- a/docs/html/_sources/users_guide/comments.rst.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-Comments
-========
-
-(comments)
-
-Comments are used to mark notes, explanations, and decorative text
-that should not appear in the output. Cheetah maintains the
-comments in the Python module it generates from the Cheetah source
-code. There are two forms of the comment directive: single-line and
-multi-line.
-
-All text in a template definition that lies between two hash
-characters ({##}) and the end of the line is treated as a
-single-line comment and will not show up in the output, unless the
-two hash characters are escaped with a backslash.
-
-::
-
- ##============================= this is a decorative comment-bar
- $var ## this is an end-of-line comment
- ##=============================
-
-Any text between {#\*} and {\*#} will be treated as a multi-line
-comment.
-
-::
-
- #*
- Here is some multiline
- comment text
- *#
-
-If you put blank lines around method definitions or loops to
-separate them, be aware that the blank lines will be output as is.
-To avoid this, make sure the blank lines are enclosed in a comment.
-Since you normally have a comment before the next method definition
-(right?), you can just extend that comment to include the blank
-lines after the previous method definition, like so:
-
-::
-
- #def method1
- ... lines ...
- #end def
- #*
-
-
- Description of method2.
- $arg1, string, a phrase.
- *#
- #def method2($arg1)
- ... lines ...
- #end def
-
-Docstring Comments
-------------------
-
-(comments.docstring)
-
-Python modules, classes, and methods can be documented with inline
-'documentation strings' (aka 'docstrings'). Docstrings, unlike
-comments, are accesible at run-time. Thus, they provide a useful
-hook for interactive help utilities.
-
-Cheetah comments can be transformed into doctrings by adding one of
-the following prefixes:
-
-::
-
- ##doc: This text will be added to the method docstring
- #*doc: If your template file is MyTemplate.tmpl, running "cheetah compile"
- on it will produce MyTemplate.py, with a class MyTemplate in it,
- containing a method .respond(). This text will be in the .respond()
- method's docstring. *#
-
- ##doc-method: This text will also be added to .respond()'s docstring
- #*doc-method: This text will also be added to .respond()'s docstring *#
-
- ##doc-class: This text will be added to the MyTemplate class docstring
- #*doc-class: This text will be added to the MyTemplate class docstring *#
-
- ##doc-module: This text will be added to the module docstring MyTemplate.py
- #*doc-module: This text will be added to the module docstring MyTemplate.py*#
-
-Header Comments
----------------
-
-(comments.headers) Cheetah comments can also be transformed into
-module header comments using the following syntax:
-
-::
-
- ##header: This text will be added to the module header comment
- #*header: This text will be added to the module header comment *#
-
-Note the difference between {##doc-module: } and {header: }:
-"cheetah-compile" puts {##doc-module: } text inside the module
-docstring. {header: } makes the text go { above} the docstring, as
-a set of #-prefixed comment lines.
-
-
diff --git a/docs/html/_sources/users_guide/comparisons.rst.txt b/docs/html/_sources/users_guide/comparisons.rst.txt
deleted file mode 100644
index 6886035..0000000
--- a/docs/html/_sources/users_guide/comparisons.rst.txt
+++ /dev/null
@@ -1,515 +0,0 @@
-Cheetah vs. Other Template Engines
-==================================
-
-(comparisons)
-
-This appendix compares Cheetah with various other template/emdedded
-scripting languages and Internet development frameworks. As Cheetah
-is similar to Velocity at a superficial level, you may also wish to
-read comparisons between Velocity and other languages at
-http://jakarta.apache.org/velocity/ymtd/ymtd.html.
-
-Which features are unique to Cheetah
-------------------------------------
-
-(comparisons.unique)
-
-
-- The { block framework} (section inheritanceEtc.block)
-
-- Cheetah's powerful yet simple { caching framework} (section
- output.caching)
-
-- Cheetah's { Unified Dotted Notation} and { autocalling}
- (sections language.namemapper.dict and
- language.namemapper.autocalling)
-
-- Cheetah's searchList (section language.searchList) information.
-
-- Cheetah's {#raw} directive (section output.raw)
-
-- Cheetah's {#slurp} directive (section output.slurp)
-
-- Cheetah's tight integration with Webware for Python (section
- webware)
-
-- Cheetah's { SkeletonPage framework} (section
- libraries.templates.skeletonPage)
-
-- Cheetah's ability to mix PSP-style code with Cheetah Language
- syntax (section tips.PSP) Because of Cheetah's design and Python's
- flexibility it is relatively easy to extend Cheetah's syntax with
- syntax elements from almost any other template or embedded
- scripting language.
-
-
-Cheetah vs. Velocity
---------------------
-
-(comparisons.velocity)
-
-For a basic introduction to Velocity, visit
-http://jakarta.apache.org/velocity.
-
-Velocity is a Java template engine. It's older than Cheetah, has a
-larger user base, and has better examples and docs at the moment.
-Cheetah, however, has a number of advantages over Velocity:
-
-
-- Cheetah is written in Python. Thus, it's easier to use and
- extend.
-
-- Cheetah's syntax is closer to Python's syntax than Velocity's is
- to Java's.
-
-- Cheetah has a powerful caching mechanism. Velocity has no
- equivalent.
-
-- It's far easier to add data/objects into the namespace where
- $placeholder values are extracted from in Cheetah. Velocity calls
- this namespace a 'context'. Contexts are dictionaries/hashtables.
- You can put anything you want into a context, BUT you have to use
- the .put() method to populate the context; e.g.,
-
- ::
-
- VelocityContext context1 = new VelocityContext();
- context1.put("name","Velocity");
- context1.put("project", "Jakarta");
- context1.put("duplicate", "I am in context1");
-
- Cheetah takes a different approach. Rather than require you to
- manually populate the 'namespace' like Velocity, Cheetah will
- accept any existing Python object or dictionary AS the 'namespace'.
- Furthermore, Cheetah allows you to specify a list namespaces that
- will be searched in sequence to find a varname-to-value mapping.
- This searchList can be extended at run-time.
-
- If you add a 'foo' object to the searchList and the 'foo' has an
- attribute called 'bar', you can simply type {$bar} in the template.
- If the second item in the searchList is dictionary 'foofoo'
- containing {{'spam':1234, 'parrot':666}}, Cheetah will first look
- in the 'foo' object for a 'spam' attribute. Not finding it, Cheetah
- will then go to 'foofoo' (the second element in the searchList) and
- look among its dictionary keys for 'spam'. Finding it, Cheetah will
- select {foofoo['spam']} as {$spam}'s value.
-
-- In Cheetah, the tokens that are used to signal the start of
- $placeholders and #directives are configurable. You can set them to
- any character sequences, not just $ and #.
-
-
-Cheetah vs. WebMacro
---------------------
-
-(comparisons.webmacro)
-
-For a basic introduction to WebMacro, visit http://webmacro.org.
-
-The points discussed in section comparisons.velocity also apply to
-the comparison between Cheetah and WebMacro. For further
-differences please refer to
-http://jakarta.apache.org/velocity/differences.html.
-
-Cheetah vs. Zope's DTML
------------------------
-
-(comparisons.dtml)
-
-For a basic introduction to DTML, visit
-http://www.zope.org/Members/michel/ZB/DTML.dtml.
-
-
-- Cheetah is faster than DTML.
-
-- Cheetah does not use HTML-style tags; DTML does. Thus, Cheetah
- tags are visible in rendered HTML output if something goes wrong.
-
-- DTML can only be used with ZOPE for web development; Cheetah can
- be used as a standalone tool for any purpose.
-
-- Cheetah's documentation is more complete than DTML's.
-
-- Cheetah's learning curve is shorter than DTML's.
-
-- DTML has no equivalent of Cheetah's blocks, caching framework,
- unified dotted notation, and {#raw} directive.
-
-
-Here are some examples of syntax differences between DTML and
-Cheetah:
-
-::
-
- <ul>
- <dtml-in frogQuery>
- <li><dtml-var animal_name></li>
- </dtml-in>
- </ul>
-
-::
-
- <ul>
- #for $animal_name in $frogQuery
- <li>$animal_name</li>
- #end for
- </ul>
-
-::
-
- <dtml-if expr="monkeys > monkey_limit">
- <p>There are too many monkeys!</p>
- <dtml-elif expr="monkeys < minimum_monkeys">
- <p>There aren't enough monkeys!</p>
- <dtml-else>
- <p>There are just enough monkeys.</p>
- </dtml-if>
-
-::
-
- #if $monkeys > $monkey_limit
- <p>There are too many monkeys!</p>
- #else if $monkeys < $minimum_monkeys
- <p>There aren't enough monkeys!</p>
- #else
- <p>There are just enough monkeys.</p>
- #end if
-
-::
-
- <table>
- <dtml-in expr="objectValues('File')">
- <dtml-if sequence-even>
- <tr bgcolor="grey">
- <dtml-else>
- <tr>
- </dtml-if>
- <td>
- <a href="&dtml-absolute_url;"><dtml-var title_or_id></a>
- </td></tr>
- </dtml-in>
- </table>
-
-::
-
- <table>
- #set $evenRow = 0
- #for $file in $files('File')
- #if $evenRow
- <tr bgcolor="grey">
- #set $evenRow = 0
- #else
- <tr>
- #set $evenRow = 1
- #end if
- <td>
- <a href="$file.absolute_url">$file.title_or_id</a>
- </td></tr>
- #end for
- </table>
-
-The last example changed the name of {$objectValues} to {$files}
-because that's what a Cheetah developer would write. The developer
-would be responsible for ensuring {$files} returned a list (or
-tuple) of objects (or dictionaries) containing the attributes (or
-methods or dictionary keys) 'absolute\_url' and 'title\_or\_id'.
-All these names ('objectValues', 'absolute\_url' and
-'title\_or\_id') are standard parts of Zope, but in Cheetah the
-developer is in charge of writing them and giving them a reasonable
-behaviour.
-
-Some of DTML's features are being ported to Cheetah, such as
-{Cheetah.Tools.MondoReport}, which is based on the {<dtml-in>} tag.
-We are also planning an output filter as flexible as the
-{<dtml-var>} formatting options. However, neither of these are
-complete yet.
-
-Cheetah vs. Zope Page Templates
--------------------------------
-
-(comparisons.zpt)
-
-For a basic introduction to Zope Page Templates, please visit
-http://www.zope.org/Documentation/Articles/ZPT2.
-
-Cheetah vs. PHP's Smarty templates
-----------------------------------
-
-(comparisons.smarty)
-
-PHP (http://www.php.net/) is one of the few scripting languages
-expressly designed for web servlets. However, it's also a
-full-fledged programming language with libraries similar to
-Python's and Perl's. The syntax and functions are like a cross
-between Perl and C plus some original ideas (e.g.; a single array
-type serves as both a list and a dictionary, ``$arr[]="value";``
-appends to an array).
-
-Smarty (http://smarty.php.net/) is an advanced template engine for
-PHP. ({ Note:} this comparision is based on Smarty's on-line
-documentation. The author has not used Smarty. Please send
-corrections or ommissions to the Cheetah mailing list.) Like
-Cheetah, Smarty:
-
-
-- compiles to the target programming language (PHP).
-
-- has configurable delimeters.
-
-- passes if-blocks directly to PHP, so you can use any PHP
- expression in them.
-
-- allows you to embed PHP code in a template.
-
-- has a caching framework (although it works quite differently).
-
-- can read the template definition from any arbitrary source.
-
-
-Features Smarty has that Cheetah lacks:
-
-
-- Preprocessors, postprocessors and output filters. You can
- emulate a preprocessor in Cheetah by running your template
- definition through a filter program or function before Cheetah sees
- it. To emulate a postprocessor, run a .py template module through a
- filter program/function. To emulate a Smarty output filter, run the
- template output through a filter program/function. If you want to
- use "cheetah compile" or "cheetah fill" in a pipeline, use {-} as
- the input file name and {-stdout} to send the result to standard
- output. Note that Cheetah uses the term "output filter" differently
- than Smarty: Cheetah output filters ({#filter}) operate on
- placeholders, while Smarty output filters operate on the entire
- template output. There has been a proposed {#sed} directive that
- would operate on the entire output line by line, but it has not
- been implemented.
-
-- Variable modifiers. In some cases, Python has equivalent string
- methods ({.strip}, {.capitalize}, {.replace(SEARCH, REPL)}), but in
- other cases you must wrap the result in a function call or write a
- custom output filter ({#filter}).
-
-- Certain web-specific functions, which can be emulated with
- third-party functions.
-
-- The ability to "plug in" new directives in a modular way.
- Cheetah directives are tightly bound to the compiler. However,
- third-party { functions} can be freely imported and called from
- placeholders, and { methods} can be mixed in via {#extends}. Part
- of this is because Cheetah distinguishes between functions and
- directives, while Smarty treats them all as "functions". Cheetah's
- design does not allow functions to have flow control effect outside
- the function (e.g., {#if} and {#for}, which operate on template
- body lines), so directives like these cannot be encoded as
- functions.
-
-- Configuration variables read from an .ini-style file. The
- {Cheetah.SettingsManager} module can parse such a file, but you'd
- have to invoke it manually. (See the docstrings in the module for
- details.) In Smarty, this feature is used for multilingual
- applications. In Cheetah, the developers maintain that everybody
- has their own preferred way to do this (such as using Python's
- {gettext} module), and it's not worth blessing one particular
- strategy in Cheetah since it's easy enough to integrate third-party
- code around the template, or to add the resulting values to the
- searchList.
-
-
-Features Cheetah has that Smarty lacks:
-
-
-- Saving the compilation result in a Python (PHP) module for quick
- reading later.
-
-- Caching individual placeholders or portions of a template.
- Smarty caches only the entire template output as a unit.
-
-
-Comparisions of various Smarty constructs:
-
-::
-
- {assign var="name" value="Bob"} (#set has better syntax in the author's opinion)
- counter (looks like equivalent to #for)
- eval (same as #include with variable)
- fetch: insert file content into output (#include raw)
- fetch: insert URL content into output (no euqivalent, user can write
- function calling urllib, call as $fetchURL('URL') )
- fetch: read file into variable (no equivalent, user can write function
- based on the 'open/file' builtin, or on .getFileContents() in
- Template.)
- fetch: read URL content into variable (no equivalent, use above
- function and call as: #set $var = $fetchURL('URL')
- html_options: output an HTML option list (no equivalent, user can
- write custom function. Maybe FunFormKit can help.)
- html_select_date: output three dropdown controls to specify a date
- (no equivalent, user can write custom function)
- html_select_time: output four dropdown controls to specify a time
- (no equvalent, user can write custom function)
- math: eval calculation and output result (same as #echo)
- math: eval calculation and assign to variable (same as #set)
- popup_init: library for popup windows (no equivalent, user can write
- custom method outputting Javascript)
-
-
- Other commands:
- capture (no equivalent, collects output into variable. A Python
- program would create a StringIO instance, set sys.stdout to
- it temporarily, print the output, set sys.stdout back, then use
- .getvalue() to get the result.)
- config_load (roughly analagous to #settings, which was removed
- from Cheetah. Use Cheetah.SettingsManager manually or write
- a custom function.)
- include (same as #include, but can include into variable.
- Variables are apparently shared between parent and child.)
- include_php: include a PHP script (e.g., functions)
- (use #extends or #import instead)
- insert (same as #include not in a #cache region)
- {ldelim}{rdelim} (escape literal $ and # with a backslash,
- use #compiler-settings to change the delimeters)
- literal (#raw)
- php (``<% %>'' tags)
- section (#for $i in $range(...) )
- foreach (#for)
- strip (like the #sed tag which was never implemented. Strips
- leading/trailing whitespace from lines, joins several lines
- together.)
-
-
- Variable modifiers:
- capitalize ( $STRING.capitalize() )
- count_characters ( $len(STRING) )
- count_paragraphs/sentances/words (no equivalent, user can write function)
- date_format (use 'time' module or download Egenix's mx.DateTime)
- default ($getVar('varName', 'default value') )
- escape: html encode ($cgi.escape(VALUE) )
- escape: url encode ($urllib.quote_plus(VALUE) )
- escape: hex encode (no equivalent? user can write function)
- escape: hex entity encode (no equivalent? user can write function)
- indent: indent all lines of a var's output (may be part of future
- #indent directive)
- lower ($STRING.lower() )
- regex_replace ('re' module)
- replace ($STRING.replace(OLD, NEW, MAXSPLIT) )
- spacify (#echo "SEPARATOR".join(SEQUENCE) )
- string_format (#echo "%.2f" % FLOAT , etc.)
- strip_tags (no equivalent, user can write function to strip HTML tags,
- or customize the WebSafe filter)
- truncate (no equivalent, user can write function)
- upper ($STRING.upper() )
- wordwrap ('writer' module, or a new module coming in Python 2.3)
-
-Some of these modifiers could be added to the super output filter
-we want to write someday.
-
-Cheetah vs. PHPLib's Template class
------------------------------------
-
-(comparisons.php)
-
-PHPLib ((http://phplib.netuse.de/) is a collection of classes for
-various web objects (authentication, shopping cart, sessions, etc),
-but what we're interested in is the {Template} object. It's much
-more primitive than Smarty, and was based on an old Perl template
-class. In fact, one of the precursors to Cheetah was based on it
-too. Differences from Cheetah:
-
-
-- Templates consist of text with {{placeholders}} in braces.
-
-- Instead of a searchList, there is one flat namespace. Every
- variable must be assigned via the {set\_var} method. However, you
- can pass this method an array (dictionary) of several variables at
- once.
-
-- You cannot embed lookups or calculations into the template.
- Every placeholder must be an exact variable name.
-
-- There are no directives. You must do all display logic (if, for,
- etc) in the calling routine.
-
-- There is, however, a "block" construct. A block is a portion of
- text between the comment markers {<!- BEGIN blockName -> ... <!-
- END blockName>}. The {set\_block} method extracts this text into a
- namespace variable and puts a placeholder referring to it in the
- template. This has a few parallels with Cheetah's {#block}
- directive but is overall quite different.
-
-- To do the equivalent of {#if}, extract the block. Then if true,
- do nothing. If false, assign the empty string to the namespace
- variable.
-
-- To do the equivalent of {#for}, extract the block. Set any
- namespace variables needed inside the loop. To parse one iteration,
- use the {parse} method to fill the block variable (a mini-template)
- into another namespace variable, appending to it. Refresh the
- namespace variables needed inside the loop and parse again; repeat
- for each iteration. You'll end up with a mini-result that will be
- plugged into the main template's placeholder.
-
-- To read a template definition from a file, use the {set\_file}
- method. This places the file's content in a namespace variable. To
- read a template definition from a string, assign it to a namespace
- variable.
-
-- Thus, for complicated templates, you are doing a lot of
- recursive block filling and file reading and parsing mini-templates
- all into one flat namespace as you finally build up values for the
- main template. In Cheetah, all this display logic can be embedded
- into the template using directives, calling out to Python methods
- for the more complicated tasks.
-
-- Although you can nest blocks in the template, it becomes tedious
- and arguably hard to read, because all blocks have identical
- syntax. Unless you choose your block names carefully and put
- comments around them, it's hard to tell which blocks are if-blocks
- and which are for-blocks, or what their nesting order is.
-
-- PHPLib templates do not have caching, output filters, etc.
-
-
-Cheetah vs. PSP, PHP, ASP, JSP, Embperl, etc.
----------------------------------------------
-
-(comparisons.pspEtc)
-
-Webware's PSP Component
- - http://webware.sourceforge.net/Webware/PSP/Docs/
-
-Tomcat JSP Information
- - http://jakarta.apache.org/tomcat/index.html
-
-ASP Information at ASP101
- - http://www.asp101.com/
-
-Embperl
- - http://perl.apache.org/embperl/
-
-
-Here's a basic Cheetah example:
-
-::
-
- <TABLE>
- #for $client in $service.clients
- <TR>
- <TD>$client.surname, $client.firstname</TD>
- <TD><A HREF="mailto:$client.email" >$client.email</A></TD>
- </TR>
- #end for
- </TABLE>
-
-Compare this with PSP:
-
-::
-
- <TABLE>
- <% for client in service.clients(): %>
- <TR>
- <TD><%=client.surname()%>, <%=client.firstname()%></TD>
- <TD><A HREF="mailto:<%=client.email()%>"><%=client.email()%></A></TD>
- </TR>
- <%end%>
- </TABLE>
-
-
diff --git a/docs/html/_sources/users_guide/editors.rst.txt b/docs/html/_sources/users_guide/editors.rst.txt
deleted file mode 100644
index 35bf0a5..0000000
--- a/docs/html/_sources/users_guide/editors.rst.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-Visual Editors
-==============
-
-(visualEditors)
-
-This chapter is about maintaining Cheetah templates with visual
-editors, and the tradeoffs between making it friendly to both text
-editors and visual editors.
-
-Cheetah's main developers do not use visual editors. Tavis uses
-{emacs}; Mike uses {vim}. So our first priority is to make
-templates easy to maintain in text editors. In particular, we don't
-want to add features like Zope Page Template's
-placeholder-value-with-mock-text-for-visual-editors-all-in-an-XML-tag.
-The syntax is so verbose it makes for a whole lotta typing just to
-insert a simple placeholder, for the benefit of editors we never
-use. However, as users identify features which would help their
-visual editing without making it harder to maintain templates in a
-text editor, we're all for it.
-
-As it said in the introduction, Cheetah purposely does not use
-HTML/XML tags for $placeholders or #directives. That way, when you
-preview the template in an editor that interprets HTML tags, you'll
-still see the placeholder and directive source definitions, which
-provides some "mock text" even if it's not the size the final
-values will be, and allows you to use your imagination to translate
-how the directive output will look visually in the final.
-
-If your editor has syntax highlighting, turn it on. That makes a
-big difference in terms of making the template easier to edit.
-Since no "Cheetah mode" has been invented yet, set your
-highlighting to Perl mode, and at least the directives/placeholders
-will show up in different colors, although the editor won't
-reliably guess where the directive/placeholder ends and normal text
-begins.
-
-
diff --git a/docs/html/_sources/users_guide/errorHandling.rst.txt b/docs/html/_sources/users_guide/errorHandling.rst.txt
deleted file mode 100644
index 752c5b5..0000000
--- a/docs/html/_sources/users_guide/errorHandling.rst.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-Error Handling
-==============
-
-(errorHandling)
-
-There are two ways to handle runtime errors (exceptions) in
-Cheetah. The first is with the Cheetah directives that mirror
-Python's structured exception handling statements. The second is
-with Cheetah's {ErrorCatcher} framework. These are described
-below.
-
-#try ... #except ... #end try, #finally, and #assert
-----------------------------------------------------
-
-(errorHandling.directives)
-
-Cheetah's exception-handling directives are exact mirrors Python's
-exception-handling statements. See Python's documentation for
-details. The following Cheetah code demonstrates their use:
-
-::
-
- #try
- $mightFail()
- #except
- It failed
- #end try
-
- #try
- #assert $x == $y
- #except AssertionError
- They're not the same!
- #end try
-
- #try
- #raise ValueError
- #except ValueError
- #pass
- #end try
-
-
- #try
- $mightFail()
- #except ValueError
- Hey, it raised a ValueError!
- #except NameMapper.NotFound
- Hey, it raised a NameMapper.NotFound!
- #else
- It didn't raise anything!
- #end try
-
- #try
- $mightFail()
- #finally
- $cleanup()
- #end try
-
-Like Python, {#except} and {#finally} cannot appear in the same
-try-block, but can appear in nested try-blocks.
-
-#errorCatcher and ErrorCatcher objects
---------------------------------------
-
-(errorHandling.errorCatcher)
-
-Syntax:
-
-::
-
- #errorCatcher CLASS
- #errorCatcher $PLACEHOLDER_TO_AN_ERROR_CATCHER_INSTANCE
-
-{ErrorCatcher} is a debugging tool that catches exceptions that
-occur inside {$placeholder} tags and provides a customizable
-warning to the developer. Normally, the first missing namespace
-value raises a {NameMapper.NotFound} error and halts the filling of
-the template. This requires the developer to resolve the exceptions
-in order without seeing the subsequent output. When an
-{ErrorCatcher} is enabled, the developer can see all the exceptions
-at once as well as the template output around them.
-
-The {Cheetah.ErrorCatchers} module defines the base class for
-ErrorCatchers:
-
-::
-
- class ErrorCatcher:
- _exceptionsToCatch = (NameMapper.NotFound,)
-
- def __init__(self, templateObj):
- pass
-
- def exceptions(self):
- return self._exceptionsToCatch
-
- def warn(self, exc_val, code, rawCode, lineCol):
- return rawCode
-
-This ErrorCatcher catches {NameMapper.NotFound} exceptions and
-leaves the offending placeholder visible in its raw form in the
-template output. If the following template is executed:
-
-::
-
- #errorCatcher Echo
- #set $iExist = 'Here I am!'
- Here's a good placeholder: $iExist
- Here's bad placeholder: $iDontExist
-
-the output will be:
-
-::
-
- Here's a good placeholder: Here I am!
- Here's bad placeholder: $iDontExist
-
-The base class shown above is also accessible under the alias
-{Cheetah.ErrorCatchers.Echo}. {Cheetah.ErrorCatchers} also provides
-a number of specialized subclasses that warn about exceptions in
-different ways. {Cheetah.ErrorCatchers.BigEcho} will output
-
-::
-
- Here's a good placeholder: Here I am!
- Here's bad placeholder: ===============&lt;$iDontExist could not be found&gt;===============
-
-ErrorCatcher has a significant performance impact and is turned off
-by default. It can also be turned on with the {Template} class'
-{'errorCatcher'} keyword argument. The value of this argument
-should either be a string specifying which of the classes in
-{Cheetah.ErrorCatchers} to use, or a class that subclasses
-{Cheetah.ErrorCatchers.ErrorCatcher}. The {#errorCatcher} directive
-can also be used to change the errorCatcher part way through a
-template.
-
-{Cheetah.ErrorCatchers.ListErrors} will produce the same ouput as
-{Echo} while maintaining a list of the errors that can be retrieved
-later. To retrieve the list, use the {Template} class'
-{'errorCatcher'} method to retrieve the errorCatcher and then call
-its {listErrors} method.
-
-ErrorCatcher doesn't catch exceptions raised inside directives.
-
-
diff --git a/docs/html/_sources/users_guide/examples.rst.txt b/docs/html/_sources/users_guide/examples.rst.txt
deleted file mode 100644
index 7304cd1..0000000
--- a/docs/html/_sources/users_guide/examples.rst.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Examples
-========
-
-(examples)
-
-The Cheetah distribution comes with an 'examples' directory. Browse
-the files in this directory and its subdirectories for examples of
-how Cheetah can be used.
-
-Syntax examples
----------------
-
-The {Cheetah.Tests} module contains a large number of test cases
-that can double as examples of how the Cheetah Language works. To
-view these cases go to the base directory of your Cheetah
-distribution and open the file {Cheetah/Tests/SyntaxAndOutput.py}
-in a text editor.
-
-Webware Examples
-----------------
-
-For examples of Cheetah in use with Webware visit the Cheetah and
-Webware wikis or use google. We used to have more examples in the
-cheetah source tarball, but they were out of date and confused
-people.
-
-
diff --git a/docs/html/_sources/users_guide/flowControl.rst.txt b/docs/html/_sources/users_guide/flowControl.rst.txt
deleted file mode 100644
index dbaecd3..0000000
--- a/docs/html/_sources/users_guide/flowControl.rst.txt
+++ /dev/null
@@ -1,436 +0,0 @@
-Flow Control
-============
-
-(flowControl)
-
-#for ... #end for
------------------
-
-(flowControl.for)
-
-Syntax:
-
-::
-
- #for $var in EXPR
- #end for
-
-The {#for} directive iterates through a sequence. The syntax is the
-same as Python, but remember the {$} before variables.
-
-Here's a simple client listing:
-
-::
-
- <TABLE>
- #for $client in $service.clients
- <TR>
- <TD>$client.surname, $client.firstname</TD>
- <TD><A HREF="mailto:$client.email" >$client.email</A></TD>
- </TR>
- #end for
- </TABLE>
-
-Here's how to loop through the keys and values of a dictionary:
-
-::
-
- <PRE>
- #for $key, $value in $dict.items()
- $key: $value
- #end for
- </PRE>
-
-Here's how to create list of numbers separated by hyphens. This
-"#end for" tag shares the last line to avoid introducing a newline
-character after each hyphen.
-
-::
-
- #for $i in range(15)
- $i - #end for
-
-If the location of the {#end for} offends your sense of
-indentational propriety, you can do this instead:
-
-::
-
- #for $i in $range(15)
- $i - #slurp
- #end for
-
-The previous two examples will put an extra hyphen after last
-number. Here's how to get around that problem, using the {#set}
-directive, which will be dealt with in more detail below.
-
-::
-
- #set $sep = ''
- #for $name in $names
- $sep$name
- #set $sep = ', '
- #end for
-
-Although to just put a separator between strings, you don't need a
-for loop:
-
-::
-
- #echo ', '.join($names)
-
-#repeat ... #end repeat
------------------------
-
-(flowControl.repeat)
-
-Syntax:
-
-::
-
- #repeat EXPR
- #end repeat
-
-Do something a certain number of times. The argument may be any
-numeric expression. If it's zero or negative, the loop will execute
-zero times.
-
-::
-
- #repeat $times + 3
- She loves me, she loves me not.
- #repeat
- She loves me.
-
-Inside the loop, there's no way to tell which iteration you're on.
-If you need a counter variable, use {#for} instead with Python's
-{range} function. Since Python's ranges are base 0 by default,
-there are two ways to start counting at 1. Say we want to count
-from 1 to 5, and that {$count} is 5.
-
-::
-
- #for $i in $range($count)
- #set $step = $i + 1
- $step. Counting from 1 to $count.
- #end for
-
-
- #for $i in $range(1, $count + 1)
- $i. Counting from 1 to $count.
- #end for
-
-A previous implementation used a local variable {$i} as the repeat
-counter. However, this prevented instances of {#repeat} from being
-nested. The current implementation does not have this problem as it
-uses a new local variable for every instance of {#repeat}.
-
-#while ... #end while
----------------------
-
-(flowControl.while)
-
-Syntax:
-
-::
-
- #while EXPR
- #end while
-
-{#while} is the same as Python's {while} statement. It may be
-followed by any boolean expression:
-
-::
-
- #while $someCondition('arg1', $arg2)
- The condition is true.
- #end while
-
-Be careful not to create an infinite loop. {#while 1} will loop
-until the computer runs out of memory.
-
-#if ... #else if ... #else ... #end if
---------------------------------------
-
-(flowControl.if)
-
-Syntax:
-
-::
-
- #if EXPR
- #else if EXPR
- #elif EXPR
- #else
- #end if
-
-The {#if} directive and its kin are used to display a portion of
-text conditionally. {#if} and {#else if} should be followed by a
-true/false expression, while {#else} should not. Any valid Python
-expression is allowed. As in Python, the expression is true unless
-it evaluates to 0, '', None, an empty list, or an empty dictionary.
-In deference to Python, {#elif} is accepted as a synonym for {#else
-if}.
-
-Here are some examples:
-
-::
-
- #if $size >= 1500
- It's big
- #else if $size < 1500 and $size > 0
- It's small
- #else
- It's not there
- #end if
-
-::
-
- #if $testItem($item)
- The item $item.name is OK.
- #end if
-
-Here's an example that combines an {#if} tag with a {#for} tag.
-
-::
-
- #if $people
- <table>
- <tr>
- <th>Name</th>
- <th>Address</th>
- <th>Phone</th>
- </tr>
- #for $p in $people
- <tr>
- <td>$p.name</td>
- <td>$p.address</td>
- <td>$p.phone</td>
- </tr>
- #end for
- </table>
- #else
- <p> Sorry, the search did not find any people. </p>
- #end if
-
-See section output.oneLineIf for the one-line {#if} directive,
-which is equivalent to Perl's and C's {?:} operator.
-
-#unless ... #end unless
------------------------
-
-(flowControl.unless)
-
-Syntax:
-
-::
-
- #unless EXPR
- #end unless
-
-{#unless} is the opposite of {#if}: the text is executed if the
-condition is { false}. Sometimes this is more convenient. {#unless
-EXPR} is equivalent to {#if not (EXPR)}.
-
-::
-
- #unless $alive
- This parrot is no more! He has ceased to be!
- 'E's expired and gone to meet 'is maker! ...
- THIS IS AN EX-PARROT!!
- #end unless
-
-You cannot use {#else if} or {#else} inside an {#unless} construct.
-If you need those, use {#if} instead.
-
-#break and #continue
---------------------
-
-(flowControl.break)
-
-Syntax:
-
-::
-
- #break
- #continue
-
-These directives are used as in Python. {#break} will exit a {#for}
-loop prematurely, while {#continue} will immediately jump to the
-next iteration in the {#for} loop.
-
-In this example the output list will not contain "10 -".
-
-::
-
- #for $i in range(15)
- #if $i == 10
- #continue
- #end if
- $i - #slurp
- #end for
-
-In this example the loop will exit if it finds a name that equals
-'Joe':
-
-::
-
- #for $name in $names
- #if $name == 'Joe'
- #break
- #end if
- $name - #slurp
- #end for
-
-#pass
------
-
-(flowControl.pass)
-
-Syntax:
-
-::
-
- #pass
-
-The {#pass} directive is identical to Python {pass} statement: it
-does nothing. It can be used when a statement is required
-syntactically but the program requires no action.
-
-The following example does nothing if only $A is true
-
-::
-
- #if $A and $B
- do something
- #elif $A
- #pass
- #elif $B
- do something
- #else
- do something
- #end if
-
-#stop
------
-
-(flowControl.stop)
-
-Syntax:
-
-::
-
- #stop
-
-The {#stop} directive is used to stop processing of a template at a
-certain point. The output will show { only} what has been processed
-up to that point.
-
-When {#stop} is called inside an {#include} it skips the rest of
-the included code and continues on from after the {#include}
-directive. stop the processing of the included code. Likewise, when
-{#stop} is called inside a {#def} or {#block}, it stops only the
-{#def} or {#block}.
-
-::
-
- A cat
- #if 1
- sat on a mat
- #stop
- watching a rat
- #end if
- in a flat.
-
-will print
-
-::
-
- A cat
- sat on a mat
-
-And
-
-::
-
- A cat
- #block action
- sat on a mat
- #stop
- watching a rat
- #end block
- in a flat.
-
-will print
-
-::
-
- A cat
- sat on a mat
- in a flat.
-
-#return
--------
-
-(flowControl.return)
-
-Syntax:
-
-::
-
- #return
-
-This is used as in Python. {#return} will exit the current method
-with a default return value of {None} or the value specified. It
-may be used only inside a {#def} or a {#block}.
-
-Note that {#return} is different from the {#stop} directive, which
-returns the sum of all text output from the method in which it is
-called. The following examples illustrate this point:
-
-::
-
- 1
- $test[1]
- 3
- #def test
- 1.5
- #if 1
- #return '123'
- #else
- 99999
- #end if
- #end def
-
-will produce
-
-::
-
- 1
- 2
- 3
-
-while
-
-::
-
- 1
- $test
- 3
- #def test
- 1.5
- #if 1
- #stop
- #else
- 99999
- #end if
- #end def
-
-will produce
-
-::
-
- 1
- 1.5
- 3
-
-
diff --git a/docs/html/_sources/users_guide/gettingStarted.rst.txt b/docs/html/_sources/users_guide/gettingStarted.rst.txt
deleted file mode 100644
index de4159f..0000000
--- a/docs/html/_sources/users_guide/gettingStarted.rst.txt
+++ /dev/null
@@ -1,284 +0,0 @@
-Getting Started
-===============
-
-(gettingStarted)
-
-Requirements
-------------
-
-(gettingStarted.requirements)
-
-Cheetah requires Python release 2.7 (there are plans to support 3.4+).
-It is known to run on Linux, Windows, FreeBSD and Solaris,
-and should run anywhere Python runs.
-
-99% of Cheetah is written in Python. There is one small C module
-({\_namemapper.so}) for speed, but Cheetah automatically falls back
-to a Python equivalent ({NameMapper.py}) if the C module is not
-available.
-
-Cheetah can use an additional module Markdown but it's not strictly required.
-
-Installation
-------------
-
-(gettingStarted.install)
-
-To install Cheetah in your system-wide Python library:
-
-
-#. Login as a user with privileges to install system-wide Python
- packages. On POSIX systems (AIX, Solaris, Linux, IRIX, etc.), the
- command is normally 'su root'. On non-POSIX systems such as Windows
- NT, login as an administrator.
-
-#. Run {pip install Cheetah3} at the command prompt.
-
-#. Or download source code and run {python setup.py install}.
-
-#. The setup program will install the wrapper script { cheetah} to
- wherever it usually puts Python binaries ("/usr/bin/", "bin/" in
- the Python install directory, etc.)
-
-#. If you cannot login as as an administrator install Cheetah as user to your
- own home directory: add option {--user} to commands: either
- {pip install --user Cheetah3} or {python setup.py install --user}.
-
-Cheetah's installation is managed by Python's Distribution
-Utilities ('distutils'). There are many options for customization.
-Type {python setup.py help} for more information.
-
-To install Cheetah in an alternate location - someplace outside
-Python's {site-packages/} directory, use one of these options:
-
-::
-
- python setup.py install --home /home/tavis
- python setup.py install --install-lib /home/tavis/lib/python
-
-Either way installs to /home/tavis/lib/python/Cheetah/ . Of course,
-/home/tavis/lib/python must be in your Python path in order for
-Python to find Cheetah.
-
-Files
------
-
-(gettingstarted.files)
-
-If you do the systemwide install, all Cheetah modules are installed
-in the { site-packages/Cheetah/} subdirectory of your standard
-library directory; e.g.,
-/opt/Python2.2/lib/python2.2/site-packages/Cheetah.
-
-Two commands are installed in Python's {bin/} directory or a system
-bin directory: {cheetah} (section gettingStarted.cheetah) and
-{cheetah-compile} (section howWorks.cheetah-compile).
-
-Uninstalling
-------------
-
-(gettingstarted.uninstalling)
-
-To uninstall Cheetah, merely delete the site-packages/Cheetah/
-directory. Then delete the "cheetah" and "cheetah-compile" commands
-from whichever bin/ directory they were put in.
-
-The 'cheetah' command
----------------------
-
-(gettingStarted.cheetah)
-
-Cheetah comes with a utility {cheetah} that provides a command-line
-interface to various housekeeping tasks. The command's first
-argument is the name of the task. The following commands are
-currently supported:
-
-::
-
- cheetah compile [options] [FILES ...] : Compile template definitions
- cheetah fill [options] [FILES ...] : Fill template definitions
- cheetah help : Print this help message
- cheetah options : Print options help message
- cheetah test : Run Cheetah's regression tests
- cheetah version : Print Cheetah version number
-
-You only have to type the first letter of the command: {cheetah c}
-is the same as {cheetah compile}.
-
-The test suite is described in the next section. The {compile}
-command will be described in section howWorks.cheetah-compile, and
-the {fill} command in section howWorks.cheetah-fill.
-
-The depreciated {cheetah-compile} program does the same thing as
-{cheetah compile}.
-
-Testing your installation
--------------------------
-
-(gettingStarted.test)
-
-After installing Cheetah, you can run its self-test routine to
-verify it's working properly on your system. Change directory to
-any directory you have write permission in (the tests write
-temporary files). Do not run the tests in the directory you
-installed Cheetah from, or you'll get unnecessary errors. Type the
-following at the command prompt:
-
-::
-
- cheetah test
-
-The tests will run for about three minutes and print a
-success/failure message. If the tests pass, start Python in
-interactive mode and try the example in the next section.
-
-Certain test failures are insignificant:
-
- Python 2.3 changed the string representation of booleans, and the
- tests haven't yet been updated to reflect this.
-
- Certain tests run "cheetah" as a subcommand. The failure may mean
- the command wasn't found in your system path. (What happens if you
- run "cheetah" on the command line?) The failure also happens on
- some Windows systems for unknown reasons. This failure has never
- been observed outside the test suite. Long term, we plan to rewrite
- the tests to do a function call rather than a subcommand, which
- will also make the tests run significantly faster.
-
- The test tried to write a temporary module in the current directory
- and {import} it. Reread the first paragraph in this section about
- the current directory.
-
- May be the same problem as SampleBaseClass; let us know if changing
- the current directory doesn't work.
-
-
-If any other tests fail, please send a message to the e-mail list
-with a copy of the test output and the following details about your
-installation:
-
-
-#. your version of Cheetah
-
-#. your version of Python
-
-#. your operating system
-
-#. whether you have changed anything in the Cheetah installation
-
-
-Quickstart tutorial
--------------------
-
-(gettingStarted.tutorial)
-
-This tutorial briefly introduces how to use Cheetah from the Python
-prompt. The following chapters will discuss other ways to use
-templates and more of Cheetah's features.
-
-The core of Cheetah is the {Template} class in the
-{Cheetah.Template} module. The following example shows how to use
-the {Template} class in an interactive Python session. {t} is the
-Template instance. Lines prefixed with {>>>} and {...} are user
-input. The remaining lines are Python output.
-
-::
-
- >>> from Cheetah.Template import Template
- >>> templateDef = """
- ... <HTML>
- ... <HEAD><TITLE>$title</TITLE></HEAD>
- ... <BODY>
- ... $contents
- ... ## this is a single-line Cheetah comment and won't appear in the output
- ... #* This is a multi-line comment and won't appear in the output
- ... blah, blah, blah
- ... *#
- ... </BODY>
- ... </HTML>"""
- >>> nameSpace = {'title': 'Hello World Example', 'contents': 'Hello World!'}
- >>> t = Template(templateDef, searchList=[nameSpace])
- >>> print t
-
- <HTML>
- <HEAD><TITLE>Hello World Example</TITLE></HEAD>
- <BODY>
- Hello World!
- </BODY>
- </HTML>
- >>> print t # print it as many times as you want
- [ ... same output as above ... ]
- >>> nameSpace['title'] = 'Example #2'
- >>> nameSpace['contents'] = 'Hiya Planet Earth!'
- >>> print t # Now with different plug-in values.
- <HTML>
- <HEAD><TITLE>Example #2</TITLE></HEAD>
- <BODY>
- Hiya Planet Earth!
- </BODY>
- </HTML>
-
-Since Cheetah is extremely flexible, you can achieve the same
-result this way:
-
-::
-
- >>> t2 = Template(templateDef)
- >>> t2.title = 'Hello World Example!'
- >>> t2.contents = 'Hello World'
- >>> print t2
- [ ... same output as the first example above ... ]
- >>> t2.title = 'Example #2'
- >>> t2.contents = 'Hello World!'
- >>> print t2
- [ ... same as Example #2 above ... ]
-
-Or this way:
-
-::
-
- >>> class Template3(Template):
- >>> title = 'Hello World Example!'
- >>> contents = 'Hello World!'
- >>> t3 = Template3(templateDef)
- >>> print t3
- [ ... you get the picture ... ]
-
-The template definition can also come from a file instead of a
-string, as we will see in section howWorks.constructing.
-
-The above is all fine for short templates, but for long templates
-or for an application that depends on many templates in a
-hierarchy, it's easier to store the templates in separate \*.tmpl
-files and use the { cheetah compile} program to convert them into
-Python classes in their own modules. This will be covered in
-section howWorks.cheetah-compile.
-
-As an appetizer, we'll just briefly mention that you can store
-constant values { inside} the template definition, and they will be
-converted to attributes in the generated class. You can also create
-methods the same way. You can even use inheritance to arrange your
-templates in a hierarchy, with more specific templates overriding
-certain parts of more general templates (e.g., a "page" template
-overriding a sidebar in a "section" template).
-
-For the minimalists out there, here's a template definition,
-instantiation and filling all in one Python statement:
-
-::
-
- >>> print Template("Templates are pretty useless without placeholders.")
- Templates are pretty useless without placeholders.
-
-You use a precompiled template the same way, except you don't
-provide a template definition since it was already established:
-
-::
-
- from MyPrecompiledTemplate import MyPrecompiledTemplate
- t = MyPrecompiledTemplate()
- t.name = "Fred Flintstone"
- t.city = "Bedrock City"
- print t
-
-
diff --git a/docs/html/_sources/users_guide/glossary.rst.txt b/docs/html/_sources/users_guide/glossary.rst.txt
deleted file mode 100644
index 62e27f9..0000000
--- a/docs/html/_sources/users_guide/glossary.rst.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-Vocabulary
-==========
-
-(glossary) (vocabulary)
-
-{ Template} is an informal term meaning a template definition, a
-template instance or a template class. A { template definition} is
-what the human { template maintainer} writes: a string consisting
-of text, placeholders and directives. { Placeholders} are variables
-that will be looked up when the template is filled. { Directives}
-are commands to be executed when the template is filled, or
-instructions to the Cheetah compiler. The conventional suffix for a
-file containing a template definition is { .tmpl}.
-
-There are two things you can do with a template: compile it or fill
-it. { Filling} is the reason you have a template in the first
-place: to get a finished string out of it. Compiling is a necessary
-prerequisite: the { Cheetah compiler} takes a template definition
-and produces Python code to create the finished string. Cheetah
-provides several ways to compile and fill templates, either as one
-step or two.
-
-Cheetah's compiler produces a subclass of {Cheetah.Template}
-specific to that template definition; this is called the {
-generated class}. A { template instance} is an instance of a
-generated class.
-
-If the user calls the {Template} constructor directly (rather than
-a subclass constructor), s/he will get what appears to be an
-instance of {Template} but is actually a subclass created
-on-the-fly.
-
-The user can make the subclass explicit by using the
-"cheetah compile" command to write the template class to a Python
-module. Such a module is called a { .py template module}.
-
-The { Template Definition Language} - or the "Cheetah language" for
-short - is the syntax rules governing placeholders and directives.
-These are discussed in sections language and following in this
-Guide.
-
-To fill a template, you call its { main method}. This is normally
-{.respond()}, but it may be something else, and you can use the
-{#implements} directive to choose the method name. (Section
-inheritanceEtc.implements.
-
-A { template-servlet} is a .py template module in a Webware servlet
-directory. Such templates can be filled directly through the web by
-requesting the URL. "Template-servlet" can also refer to the
-instance being filled by a particular web request. If a Webware
-servlet that is not a template-servlet invokes a template, that
-template is not a template-servlet either.
-
-A { placeholder tag} is the substring in the template definition
-that is the placeholder, including the start and end delimeters (if
-there is an end delimeter). The { placeholder name} is the same but
-without the delimeters.
-
-Placeholders consist of one or more { identifiers} separated by
-periods (e.g., {a.b}). Each identifier must follow the same rules
-as Python identifiers; that is, a letter or underscore followed by
-one or more letters, digits or underscores. (This is the regular
-expression ``[A-Za-z_][A-Za-z0-9_]*``.)
-
-The first (or only) identifier of a placeholder name represents a {
-variable} to be looked up. Cheetah looks up variables in various {
-namespaces}: the searchList, local variables, and certain other
-places. The searchList is a list of objects ({ containers}) with
-attributes and/or keys: each container is a namespace. Every
-template instance has exactly one searchList. Identifiers after the
-first are looked up only in the parent object. The final value
-after all lookups have been performed is the { placeholder value}.
-
-Placeholders may occur in three positions: top-level, expression
-and LVALUE. { Top-level} placeholders are those in ordinary text
-("top-level text"). { Expression} placeholders are those in Python
-expressions. { LVALUE} placeholders are those naming a variable to
-receive a value. (LVALUE is computerese for
-"the left side of the equal sign".) Section
-language.placeholders.positions explains the differences between
-these three positions.
-
-The routine that does the placeholder lookups is called the {
-NameMapper}. Cheetah's NameMapper supports universal dotted
-notation and autocalling. { Universal dotted notation} means that
-keys may be written as if they were attributes: {a.b} instead of
-{a['b']}. { Autocalling} means that if any identifier's value is
-found to be a function or method, Cheetah will call it without
-arguments if there is no ``()`` following. More about the
-NameMapper is in section language.namemapper.
-
-Some directives are multi-line, meaning they have a matching {
-#end} tag. The lines of text between the start and end tags is the
-{ body} of the directive. Arguments on the same line as the start
-tag, in contrast, are considered part of the directive tag. More
-details are in section language.directives.syntax (Directive Syntax
-Rules).
-
-
diff --git a/docs/html/_sources/users_guide/index.rst.txt b/docs/html/_sources/users_guide/index.rst.txt
deleted file mode 100644
index efbf343..0000000
--- a/docs/html/_sources/users_guide/index.rst.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-Cheetah User's Guide
-====================
-
-.. toctree::
- :maxdepth: 2
-
- intro.rst
- glossary.rst
- gettingStarted.rst
- language.rst
- comments.rst
- output.rst
- inheritanceEtc.rst
- flowControl.rst
- errorHandling.rst
- parserInstructions.rst
-
- tipsAndTricks.rst
- webware.rst
- otherHtml.rst
- nonHtml.rst
- libraries.rst
- editors.rst
- links.rst
- examples.rst
- comparisons.rst
-
-
diff --git a/docs/html/_sources/users_guide/inheritanceEtc.rst.txt b/docs/html/_sources/users_guide/inheritanceEtc.rst.txt
deleted file mode 100644
index e0bb125..0000000
--- a/docs/html/_sources/users_guide/inheritanceEtc.rst.txt
+++ /dev/null
@@ -1,517 +0,0 @@
-Import, Inheritance, Declaration and Assignment
-===============================================
-
-(inheritanceEtc)
-
-#import and #from directives
-----------------------------
-
-(inheritanceEtc.import)
-
-Syntax:
-
-::
-
- #import MODULE_OR_OBJECT [as NAME] [, ...]
- #from MODULE import MODULE_OR_OBJECT [as NAME] [, ...]
-
-The {#import} and {#from} directives are used to make external
-Python modules or objects available to placeholders. The syntax is
-identical to the import syntax in Python. Imported modules are
-visible globally to all methods in the generated Python class.
-
-::
-
- #import math
- #import math as mathModule
- #from math import sin, cos
- #from math import sin as _sin
- #import random, re
- #from mx import DateTime # ## Part of Egenix's mx package.
-
-After the above imports, {$math}, {$mathModule}, {$sin}, {$cos} and
-{$\_sin}, {$random}, {$re} and {$DateTime} may be used in
-{$placeholders} and expressions.
-
-#extends
---------
-
-(inheritanceEtc.extends)
-
-Syntax:
-
-::
-
- #extends CLASS
-
-All templates are subclasses of {Cheetah.Template.Template}.
-However, it's possible for a template to subclass another template
-or a pure Python class. This is where {#extends} steps in: it
-specifies the parent class. It's equivalent to PSP's
-{"@page extends="} directive.
-
-Cheetah imports the class mentioned in an {#extends} directive
-automatically if you haven't imported it yet. The implicit
-importing works like this:
-
-::
-
- #extends Superclass
- ## Implicitly does '#from Superclass import Superclass'.
-
- #extends Cheetah.Templates.SkeletonPage
- ## Implicitly does '#from Cheetah.Templates.SkeletonPage import SkeletonPage'.
-
-If your superclass is in an unusual location or in a module named
-differently than the class, you must import it explicitly. There is
-no support for extending from a class that is not imported; e.g.,
-from a template dynamically created from a string. Since the most
-practical way to get a parent template into a module is to
-precompile it, all parent templates essentially have to be
-precompiled.
-
-There can be only one {#extends} directive in a template and it may
-list only one class. In other words, templates don't do multiple
-inheritance. This is intentional: it's too hard to initialize
-multiple base classes correctly from inside a template. However,
-you can do multiple inheritance in your pure Python classes.
-
-If your pure Python class overrides any of the standard {Template}
-methods such as {.\_\_init\_\_} or {.awake}, be sure to call the
-superclass method in your method or things will break. Examples of
-calling the superclass method are in section
-tips.callingSuperclassMethods. A list of all superclass methods is
-in section tips.allMethods.
-
-In all cases, the root superclass must be {Template}. If your
-bottommost class is a template, simply omit the {#extends} in it
-and it will automatically inherit from {Template}. { If your
-bottommost class is a pure Python class, it must inherit from
-{Template} explicitly: }
-
-::
-
- from Cheetah.Template import Template
- class MyPurePythonClass(Template):
-
-If you're not keen about having your Python classes inherit from
-{Template}, create a tiny glue class that inherits both from your
-class and from {Template}.
-
-Before giving any examples we'll stress that Cheetah does { not}
-dictate how you should structure your inheritance tree. As long as
-you follow the rules above, many structures are possible.
-
-Here's an example for a large web site that has not only a general
-site template, but also a template for this section of the site,
-and then a specific template-servlet for each URL. (This is the
-"inheritance approach" discussed in the Webware chapter.) Each
-template inherits from a pure Python class that contains
-methods/attributes used by the template. We'll begin with the
-bottommost superclass and end with the specific template-servlet:
-
-::
-
- 1. SiteLogic.py (pure Python class containing methods for the site)
- from Cheetah.Template import Template
- class SiteLogic(Template):
-
- 2. Site.tmpl/py (template containing the general site framework;
- this is the template that controls the output,
- the one that contains "<HTML><HEAD>...", the one
- that contains text outside any #def/#block.)
- #from SiteLogic import SiteLogic
- #extends SiteLogic
- #implements respond
-
- 3. SectionLogic.py (pure Python class with helper code for the section)
- from Site import Site
- class SectionLogic(Site)
-
- 4. Section.tmpl/py (template with '#def' overrides etc. for the section)
- #from SectionLogic import SectionLogic
- #extends SectionLogic
-
- 5. page1Logic.py (pure Python class with helper code for the template-servlet)
- from Section import Section
- class indexLogic(Section):
-
- 6. page1.tmpl/py (template-servlet for a certain page on the site)
- #from page1Logic import page1Logic
- #extends page1Logic
-
-A pure Python classes might also contain methods/attributes that
-aren't used by their immediate child template, but are available
-for any descendant template to use if it wishes. For instance, the
-site template might have attributes for the name and e-mail address
-of the site administrator, ready to use as $placeholders in any
-template that wants it.
-
-{ Whenever you use {#extends}, you often need {#implements} too,}
-as in step 2 above. Read the next section to understand what
-{#implements} is and when to use it.
-
-#implements
------------
-
-(inheritanceEtc.implements)
-
-Syntax:
-
-::
-
- #implements METHOD
-
-You can call any {#def} or {#block} method directly and get its
-outpt. The top-level content - all the text/placeholders/directives
-outside any {#def}/{#block} - gets concatenated and wrapped in a
-"main method", by default {.respond()}. So if you call
-{.respond()}, you get the "whole template output". When Webware
-calls {.respond()}, that's what it's doing. And when you do 'print
-t' or 'str(t)' on a template instance, you're taking advantage of
-the fact that Cheetah makes {.\_\_str\_\_()} an alias for the main
-method.
-
-That's all fine and dandy, but what if your application prefers to
-call another method name rather than {.respond()}? What if it wants
-to call, say, {.send\_output()} instead? That's where {#implements}
-steps in. It lets you choose the name for the main method. Just put
-this in your template definition:
-
-::
-
- #implements send_output
-
-When one template extends another, every template in the
-inheritance chain has its own main method. To fill the template,
-you invoke exactly one of these methods and the others are ignored.
-The method you call may be in any of the templates in the
-inheritance chain: the base template, the leaf template, or any in
-between, depending on how you structure your application. So you
-have two problems: (1) calling the right method name, and (2)
-preventing an undesired same-name subclass method from overriding
-the one you want to call.
-
-Cheetah assumes the method you will call is {.respond()} because
-that's what Webware calls. It further assumes the desired main
-method is the one in the lowest-level base template, because that
-works well with {#block} as described in the Inheritance Approach
-for building Webware servlets (section webware.inheritance), which
-was originally the principal use for Cheetah. So when you use
-{#extends}, Cheetah changes that template's main method to
-{.writeBody()} to get it out of the way and prevent it from
-overriding the base template's {.respond()}.
-
-Unfortunately this assumption breaks down if the template is used
-in other ways. For instance, you may want to use the main method in
-the highest-level leaf template, and treat the base template(s) as
-merely a library of methods/attributes. In that case, the leaf
-template needs {#implements respond} to change its main method name
-back to {.respond()} (or whatever your application desires to
-call). Likewise, if your main method is in one of the intermediate
-templates in an inheritance chain, that template needs {#implements
-respond}.
-
-The other way the assumption breaks down is if the main method {
-is} in the base template but that template extends a pure Python
-class. Cheetah sees the {#extends} and dutifully but incorrectly
-renames the method to {.writeBody()}, so you have to use
-{#implements respond} to change it back. Otherwise the dummy
-{.respond()} in {Cheetah.Template} is found, which outputs...
-nothing. { So if you're using {#extends} and get no output, the {
-first} thing you should think is,
-"Do I need to add {#implements respond} somewhere?" }
-
-#set
-----
-
-(inheritanceEtc.set)
-
-Syntax:
-
-::
-
- #set [global] $var = EXPR
-
-{#set} is used to create and update local variables at run time.
-The expression may be any Python expression. Remember to preface
-variable names with $ unless they're part of an intermediate result
-in a list comprehension.
-
-Here are some examples:
-
-::
-
- #set $size = $length * 1096
- #set $buffer = $size + 1096
- #set $area = $length * $width
- #set $namesList = ['Moe','Larry','Curly']
- #set $prettyCountry = $country.replace(' ', '&nbsp;')
-
-{#set} variables are useful to assign a short name to a
-{$deeply.nested.value}, to a calculation, or to a printable version
-of a value. The last example above converts any spaces in the
-'country' value into HTML non-breakable-space entities, to ensure
-the entire value appears on one line in the browser.
-
-{#set} variables are also useful in {#if} expressions, but remember
-that complex logical routines should be coded in Python, not in
-Cheetah!
-
-::
-
- #if $size > 1500
- #set $adj = 'large'
- #else
- #set $adj = 'small'
- #end if
-
-Or Python's one-line equivalent, "A and B or C". Remember that in
-this case, B must be a true value (not None, '', 0, [] or {}).
-
-::
-
- #set $adj = $size > 1500 and 'large' or 'small'
-
-(Note: Cheetah's one-line {#if} will not work for this, since it
-produces output rather than setting a variable.
-
-You can also use the augmented assignment operators:
-
-::
-
- ## Increment $a by 5.
- #set $a += 5
-
-By default, {#set} variables are not visible in method calls or
-include files unless you use the {global} attribute: {#set global
-$var = EXPRESSION}. Global variables are visible in all methods,
-nested templates and included files. Use this feature with care to
-prevent surprises.
-
-#del
-----
-
-(inheritanceEtc.del)
-
-Syntax:
-
-::
-
- #del $var
-
-{#del} is the opposite of {#set}. It deletes a { local} variable.
-Its usage is just like Python's {del} statement:
-
-::
-
- #del $myVar
- #del $myVar, $myArray[5]
-
-Only local variables can be deleted. There is no directive to
-delete a {#set global} variable, a searchList variable, or any
-other type of variable.
-
-#attr
------
-
-(inheritanceEtc.attr)
-
-Syntax:
-
-::
-
- #attr $var = EXPR
-
-The {#attr} directive creates class attributes in the generated
-Python class. It should be used to assign simple Python literals
-such as numbers or strings. In particular, the expression must {
-not} depend on searchList values or {#set} variables since those
-are not known at compile time.
-
-::
-
- #attr $title = "Rob Roy"
- #attr $author = "Sir Walter Scott"
- #attr $version = 123.4
-
-This template or any child template can output the value thus:
-
-::
-
- $title, by $author, version $version
-
-If you have a library of templates derived from etexts
-(http://www.gutenberg.org/), you can extract the titles and authors
-and put them in a database (assuming the templates have been
-compiled into .py template modules):
-
-#def
-----
-
-(inheritanceEtc.def)
-
-Syntax:
-
-::
-
- #def METHOD[(ARGUMENTS)]
- #end def
-
-Or the one-line variation:
-
-::
-
- #def METHOD[(ARGUMENTS)] : TEXT_AND_PLACEHOLDERS
-
-The {#def} directive is used to define new methods in the generated
-Python class, or to override superclass methods. It is analogous to
-Python's {def} statement. The directive is silent, meaning it does
-not itself produce any output. However, the content of the method
-will be inserted into the output (and the directives executed)
-whenever the method is later called by a $placeholder.
-
-::
-
- #def myMeth()
- This is the text in my method
- $a $b $c(123) ## these placeholder names have been defined elsewhere
- #end def
-
- ## and now use it...
- $myMeth()
-
-The arglist and parentheses can be omitted:
-
-::
-
- #def myMeth
- This is the text in my method
- $a $b $c(123)
- #end def
-
- ## and now use it...
- $myMeth
-
-Methods can have arguments and have defaults for those arguments,
-just like in Python. Remember the {$} before variable names:
-
-::
-
- #def myMeth($a, $b=1234)
- This is the text in my method
- $a - $b
- #end def
-
- ## and now use it...
- $myMeth(1)
-
-The output from this last example will be:
-
-::
-
- This is the text in my method
- 1 - 1234
-
-There is also a single line version of the {#def} directive. {
-Unlike the multi-line directives, it uses a colon (:) to delimit
-the method signature and body}:
-
-::
-
- #attr $adj = 'trivial'
- #def myMeth: This is the $adj method
- $myMeth
-
-Leading and trailing whitespace is stripped from the method. This
-is in contrast to:
-
-::
-
- #def myMeth2
- This is the $adj method
- #end def
-
-where the method includes a newline after "method". If you don't
-want the newline, add {#slurp}:
-
-::
-
- #def myMeth3
- This is the $adj method#slurp
- #end def
-
-Because {#def} is handled at compile time, it can appear above or
-below the placeholders that call it. And if a superclass
-placeholder calls a method that's overridden in a subclass, it's
-the subclass method that will be called.
-
-#block ... #end block
----------------------
-
-(inheritanceEtc.block)
-
-The {#block} directive allows you to mark a section of your
-template that can be selectively reimplemented in a subclass. It is
-very useful for changing part of a template without having to
-copy-paste-and-edit the entire thing. The output from a template
-definition that uses blocks will be identical to the output from
-the same template with the {#block ... #end block} tags removed.
-
-({ Note:} don't be confused by the generic word 'block'' in this
-Guide, which means a section of code inside { any} {#TAG ... #end
-TAG} pair. Thus, an if-block, for-block, def-block, block-block
-etc. In this section we are talking only of block-blocks.)
-
-To reimplement the block, use the {#def} directive. The magical
-effect is that it appears to go back and change the output text {
-at the point the original block was defined} rather than at the
-location of the reimplementation.
-
-::
-
- #block testBlock
- Text in the contents
- area of the block directive
- #if $testIt
- $getFoo()
- #end if
- #end block testBlock
-
-You can repeat the block name in the {#end block} directive or not,
-as you wish.
-
-{#block} directives can be nested to any depth.
-
-::
-
- #block outerBlock
- Outer block contents
-
- #block innerBlock1
- inner block1 contents
- #end block innerBlock1
-
- #block innerBlock2
- inner block2 contents
- #end block innerBlock2
-
- #end block outerBlock
-
-Note that the name of the block is optional for the {#end block}
-tag.
-
-Technically, {#block} directive is equivalent to a {#def} directive
-followed immediately by a {#placeholder} for the same name. In
-fact, that's what Cheetah does. Which means you can use
-{$theBlockName} elsewhere in the template to output the block
-content again.
-
-There is a one-line {#block} syntax analagous to the one-line
-{#def}.
-
-The block must not require arguments because the implicit
-placeholder that's generated will call the block without
-arguments.
-
-
diff --git a/docs/html/_sources/users_guide/intro.rst.txt b/docs/html/_sources/users_guide/intro.rst.txt
deleted file mode 100644
index 096bdef..0000000
--- a/docs/html/_sources/users_guide/intro.rst.txt
+++ /dev/null
@@ -1,311 +0,0 @@
-Introduction
-===============
-
-Who should read this Guide?
----------------------------
-
-This Users' Guide provides a technical overview and reference for
-the Cheetah template system. Knowledge of Python and
-object-oriented programming is assumed. The emphasis in this Guide
-is on features useful in a wide variety of situations. Information
-on less common situations and troubleshooting tips are gradually
-being moved to the Cheetah FAQ. There is also a Cheetah Developer's
-Guide for those who want to know what goes on under the hood.
-
-What is Cheetah?
-----------------
-
-Cheetah is a Python-powered template engine and code generator. It
-may be used as a standalone utility or combined with other tools.
-Cheetah has many potential uses, but web developers looking for a
-viable alternative to ASP, JSP, PHP and PSP are expected to be its
-principle user group.
-
-Cheetah:
-
-
-- generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX,
- or any other text-based format. It has also been used to produce
- Python, Java and PHP source code.
-
-- cleanly separates content, graphic design, and program code.
- This leads to highly modular, flexible, and reusable site
- architectures; faster development time; and HTML and program code
- that is easier to understand and maintain. It is particularly well
- suited for team efforts.
-
-- blends the power and flexibility of Python with a simple
- template language that non-programmers can understand.
-
-- gives template writers full access in their templates to any
- Python data structure, module, function, object, or method.
-
-- makes code reuse easy by providing an object-oriented interface
- to templates that is accessible from Python code or other Cheetah
- templates. One template can subclass another and selectively
- reimplement sections of it. A compiled template **is** a Python
- class, so it can subclass a pure Python class and vice-versa.
-
-- provides a simple yet powerful caching mechanism
-
-Like its namesake, Cheetah is fast, flexible and powerful.
-
-
-What is the philosophy behind Cheetah?
---------------------------------------
-Cheetah's design was guided by these principles:
-
-
-- Python for the back end, Cheetah for the front end. Cheetah was
- designed to complement Python, not replace it.
-
-- Cheetah's core syntax should be easy for non-programmers to
- learn.
-
-- Cheetah should make code reuse easy by providing an
- object-oriented interface to templates that is accessible from
- Python code or other Cheetah templates.
-
-- Python objects, functions, and other data structures should be
- fully accessible in Cheetah.
-
-- Cheetah should provide flow control and error handling. Logic
- that belongs in the front end shouldn't be relegated to the back
- end simply because it's complex.
-
-- It should be easy to **separate** content, graphic design, and
- program code, but also easy to **integrate** them.
-
- A clean separation makes it easier for a team of content writers,
- HTML/graphic designers, and programmers to work together without
- stepping on each other's toes and polluting each other's work. The
- HTML framework and the content it contains are two separate things,
- and analytical calculations (program code) is a third thing. Each
- team member should be able to concentrate on their specialty and to
- implement their changes without having to go through one of the
- others (i.e., the dreaded "webmaster bottleneck").
-
- While it should be easy to develop content, graphics and program
- code separately, it should be easy to integrate them together into
- a website. In particular, it should be easy:
-
-
- - for **programmers** to create reusable components and functions
- that are accessible and understandable to designers.
-
- - for **designers** to mark out placeholders for content and
- dynamic components in their templates.
-
- - for **designers** to soft-code aspects of their design that are
- either repeated in several places or are subject to change.
-
- - for **designers** to reuse and extend existing templates and thus
- minimize duplication of effort and code.
-
- - and, of course, for **content writers** to use the templates that
- designers have created.
-
-
-
-Why Cheetah doesn't use HTML-style tags
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Cheetah does not use HTML/XML-style tags like some other template
-languages for the following reasons: Cheetah is not limited to
-HTML, HTML-style tags are hard to distinguish from real HTML tags,
-HTML-style tags are not visible in rendered HTML when something
-goes wrong, HTML-style tags often lead to invalid HTML (e.g., ``<img
-src="<template-directive>">``), Cheetah tags are less verbose and
-easier to understand than HTML-style tags, and HTML-style tags
-aren't compatible with most WYSIWYG editors
-
-Besides being much more compact, Cheetah also has some advantages
-over languages that put information inside the HTML tags, such as
-Zope Page Templates or PHP: HTML or XML-bound languages do not work
-well with other languages, While ZPT-like syntaxes work well in
-many ways with WYSIWYG HTML editors, they also give up a
-significant advantage of those editors - concrete editing of the
-document. When logic is hidden away in (largely inaccessible) tags
-it is hard to understand a page simply by viewing it, and it is
-hard to confirm or modify that logic.
-
-Give me an example!
--------------------
-
-Here's a very simple example that illustrates some of Cheetah's
-basic syntax:
-
-::
-
- <HTML>
- <HEAD><TITLE>$title</TITLE></HEAD>
- <BODY>
-
- <TABLE>
- #for $client in $clients
- <TR>
- <TD>$client.surname, $client.firstname</TD>
- <TD><A HREF="mailto:$client.email">$client.email</A></TD>
- </TR>
- #end for
- </TABLE>
-
- </BODY>
- </HTML>
-
-Compare this with PSP:
-
-::
-
- <HTML>
- <HEAD><TITLE><%=title%></TITLE></HEAD>
- <BODY>
-
- <TABLE>
- <% for client in clients: %>
- <TR>
- <TD><%=client['surname']%>, <%=client['firstname']%></TD>
- <TD><A HREF="mailto:<%=client['email']%>"><%=client['email']%></A></TD>
- </TR>
- <%end%>
- </TABLE>
-
- </BODY>
- </HTML>
-
-Section gettingStarted.tutorial has a more typical example that
-shows how to get the plug-in values **into** Cheetah, and section
-howWorks.cheetah-compile explains how to turn your template
-definition into an object-oriented Python module.
-
-Give me an example of a Webware servlet!
-----------------------------------------
-
-This example uses an HTML form to ask the user's name, then invokes
-itself again to display a **personalized** friendly greeting.
-
-::
-
- <HTML><HEAD><TITLE>My Template-Servlet</TITLE></HEAD><BODY>
- #set $name = $request.field('name', None)
- #if $name
- Hello $name
- #else
- <FORM ACTION="" METHOD="GET">
- Name: <INPUT TYPE="text" NAME="name"><BR>
- <INPUT TYPE="submit">
- </FORM>
- #end if
- </BODY></HTML>
-
-To try it out for yourself on a Webware system:
-
-
-#. copy the template definition to a file **test.tmpl** in your
- Webware servlet directory.
-
-#. Run ``cheetah compile test.tmpl``. This produces ``test.py`` (a
- .py template module) in the same directory.
-
-#. In your web browser, go to ``test.py``, using whatever site and
- directory is appropriate.
-
-At the first request, field 'name' will be blank (false) so the
-"#else" portion will execute and present a form. You type your name
-and press submit. The form invokes the same page. Now 'name' is
-true so the "#if" portion executes, which displays the greeting.
-The "#set" directive creates a local variable that lasts while the
-template is being filled.
-
-How mature is Cheetah?
-----------------------
-
-Cheetah is stable, production quality, post-beta code. Cheetah's
-syntax, semantics and performance have been generally stable since
-a performance overhaul in mid 2001. Most of the changes since
-October 2001 have been in response to specific requests by
-production sites, things they need that we hadn't considered.
-
-As of summer 2003, we are putting in the final touches before the
-1.0 release.
-
-
-Where can I get news?
----------------------
-
-Cheetah releases can be obtained from the `Cheetah
-website <http://cheetahtemplate.org/>`_
-
-If you encounter difficulties, or are unsure about how to do something, please
-post a detailed message to the `bug tracker
-<https://github.com/CheetahTemplate3/cheetah3/issues>`.
-
-How can I contribute?
----------------------
-
-Cheetah is the work of many volunteers. If you use Cheetah please
-share your experiences, tricks, customizations, and frustrations.
-
-Bug reports and patches
-~~~~~~~~~~~~~~~~~~~~~~~
-
-If you think there is a bug in Cheetah, send a message to the
-e-mail list with the following information:
-
-
-#. a description of what you were trying to do and what happened
-
-#. all tracebacks and error output
-
-#. your version of Cheetah
-
-#. your version of Python
-
-#. your operating system
-
-#. whether you have changed anything in the Cheetah installation
-
-
-Template libraries and function libraries
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-We hope to build up a framework of Template libraries (see section
-libraries.templates) to distribute with Cheetah and would
-appreciate any contributions.
-
-Test cases
-~~~~~~~~~~
-
-Cheetah is packaged with a regression testing suite that is run
-with each new release to ensure that everything is working as
-expected and that recent changes haven't broken anything. The test
-cases are in the Cheetah.Tests module. If you find a reproduceable
-bug please consider writing a test case that will pass only when
-the bug is fixed. Send any new test cases to the email list with
-the subject-line "new test case for Cheetah."
-
-Publicity
-~~~~~~~~~
-
-Help spread the word ... recommend it to others, write articles
-about it, etc.
-
-Acknowledgements
-----------------
-
-Cheetah is one of several templating frameworks that grew out of a
-'templates' thread on the Webware For Python email list. Tavis
-Rudd, Mike Orr, Chuck Esterbrook and Ian Bicking are the core
-developers.
-
-We'd like to thank the following people for contributing valuable
-advice, code and encouragement: Geoff Talvola, Jeff Johnson, Graham
-Dumpleton, Clark C. Evans, Craig Kattner, Franz Geiger, Geir
-Magnusson, Tom Schwaller, Rober Kuzelj, Jay Love, Terrel Shumway,
-Sasa Zivkov, Arkaitz Bitorika, Jeremiah Bellomy, Baruch Even, Paul
-Boddie, Stephan Diehl, Chui Tey, Michael Halle, Edmund Lian and
-Aaron Held.
-
-The Velocity, WebMacro and Smarty projects provided inspiration and
-design ideas. Cheetah has benefitted from the creativity and energy
-of their developers. Thank you.
diff --git a/docs/html/_sources/users_guide/language.rst.txt b/docs/html/_sources/users_guide/language.rst.txt
deleted file mode 100644
index 679fe7b..0000000
--- a/docs/html/_sources/users_guide/language.rst.txt
+++ /dev/null
@@ -1,741 +0,0 @@
-.. role:: math(raw)
- :format: html latex
-
-Language Overview
-=================
-
-(language)
-
-Cheetah's basic syntax was inspired by the Java-based template
-engines Velocity and WebMacro. It has two types of tags: {
-$placeholders} and { #directives}. Both types are case-sensitive.
-
-Placeholder tags begin with a dollar sign ({$varName}) and are
-similar to data fields in a form letter or to the {%(key)s} fields
-on the left side of Python's {%} operator. When the template is
-filled, the placeholders are replaced with the values they refer
-to.
-
-Directive tags begin with a hash character (#) and are used for
-comments, loops, conditional blocks, includes, and all other
-advanced features. ({ Note:} you can customize the start and end
-delimeters for placeholder and directive tags, but in this Guide
-we'll assume you're using the default.)
-
-Placeholders and directives can be escaped by putting a backslash
-before them. ``\$var`` and ``\#if`` will be output as literal
-text.
-
-A placeholder or directive can span multiple physical lines,
-following the same rules as Python source code: put a backslash
-(``\``) at the end of all lines except the last line. However, if
-there's an unclosed parenthesis, bracket or brace pending, you
-don't need the backslash.
-
-::
-
- #if $this_is_a_very_long_line and $has_lots_of_conditions \
- and $more_conditions:
- <H1>bla</H1>
- #end if
-
- #if $country in ('Argentina', 'Uruguay', 'Peru', 'Colombia',
- 'Costa Rica', 'Venezuela', 'Mexico')
- <H1>Hola, senorita!</H1>
- #else
- <H1>Hey, baby!</H1>
- #end if
-
-Language Constructs - Summary
------------------------------
-
-(language.constructs)
-
-
-#. Comments and documentation strings
-
-
- #. {## single line}
-
- #. {#\* multi line \*#}
-
-
-#. Generation, caching and filtering of output
-
-
- #. plain text
-
- #. look up a value: {$placeholder}
-
- #. evaluate an expression: {#echo} ...
-
- #. same but discard the output: {#silent} ...
-
- #. one-line if: {#if EXPR then EXPR else EXPR}
-
- #. gobble the EOL: {#slurp}
-
- #. parsed file includes: {#include} ...
-
- #. raw file includes: {#include raw} ...
-
- #. verbatim output of Cheetah code: {#raw} ... {#end raw}
-
- #. cached placeholders: {$\*var}, {$\*<interval>\*var}
-
- #. cached regions: {#cache} ... {#end cache}
-
- #. set the output filter: {#filter} ...
-
- #. control output indentation: {#indent} ... ({ not implemented
- yet})
-
-
-#. Importing Python modules and objects: {#import} ..., {#from}
- ...
-
-#. Inheritance
-
-
- #. set the base class to inherit from: {#extends}
-
- #. set the name of the main method to implement: {#implements}
- ...
-
-
-#. Compile-time declaration
-
-
- #. define class attributes: {#attr} ...
-
- #. define class methods: {#def} ... {#end def}
-
- #. {#block} ... {#end block} provides a simplified interface to
- {#def} ... {#end def}
-
-
-#. Run-time assignment
-
-
- #. local vars: {#set} ...
-
- #. global vars: {#set global} ...
-
- #. deleting local vars: {#del} ...
-
-
-#. Flow control
-
-
- #. {#if} ... {#else} ... {#else if} (aka {#elif}) ... {#end if}
-
- #. {#unless} ... {#end unless}
-
- #. {#for} ... {#end for}
-
- #. {#repeat} ... {#end repeat}
-
- #. {#while} ... {#end while}
-
- #. {#break}
-
- #. {#continue}
-
- #. {#pass}
-
- #. {#stop}
-
-
-#. error/exception handling
-
-
- #. {#assert}
-
- #. {#raise}
-
- #. {#try} ... {#except} ... {#else} ... {#end try}
-
- #. {#try} ... {#finally} ... {#end try}
-
- #. {#errorCatcher} ... set a handler for exceptions raised by
- $placeholder calls.
-
-
-#. Instructions to the parser/compiler
-
-
- #. {#breakpoint}
-
- #. {#compiler-settings} ... {#end compiler-settings}
-
-
-#. Escape to pure Python code
-
-
- #. evalute expression and print the output: {<%=} ... {%>}
-
- #. execute code and discard output: {<%} ... {%>}
-
-
-#. Fine control over Cheetah-generated Python modules
-
-
- #. set the source code encoding of compiled template modules:
- {#encoding}
-
- #. set the sh-bang line of compiled template modules: {#shBang}
-
-
-
-The use of all these constructs will be covered in the next several
-chapters.
-
-Placeholder Syntax Rules
-------------------------
-
-(language.placeholders.syntax)
-
-
-- Placeholders follow the same syntax rules as Python variables
- except that they are preceded by {$} (the short form) or enclosed
- in {${}} (the long form). Examples:
-
- ::
-
- $var
- ${var}
- $var2.abc['def']('gh', $subplaceholder, 2)
- ${var2.abc['def']('gh', $subplaceholder, 2)}
-
- We recommend {$} in simple cases, and {${}} when followed directly
- by a letter or when Cheetah or a human template maintainer might
- get confused about where the placeholder ends. You may alternately
- use ``$()`` or ``$[]``, although this may confuse the (human)
- template maintainer:
-
- ::
-
- $(var)
- $[var]
- $(var2.abc['def']('gh', $subplaceholder, 2))
- $[var2.abc['def']('gh', $subplaceholder, 2)]
-
- { Note:} Advanced users can change the delimiters to anything they
- want via the {#compiler} directive.
-
- { Note 2:} The long form can be used only with top-level
- placeholders, not in expressions. See section
- language.placeholders.positions for an elaboration on this.
-
-- To reiterate Python's rules, placeholders consist of one or more
- identifiers separated by periods. Each identifier must start with a
- letter or an underscore, and the subsequent characters must be
- letters, digits or underscores. Any identifier may be followed by
- arguments enclosed in ``()`` and/or keys/subscripts in ``[]``.
-
-- Identifiers are case sensitive. {$var} does not equal {$Var} or
- {$vAr} or {$VAR}.
-
-- Arguments inside ``()`` or ``[]`` are just like in Python.
- Strings may be quoted using any Python quoting style. Each argument
- is an expression and may use any of Python's expression operators.
- Variables used in argument expressions are placeholders and should
- be prefixed with {$}. This also applies to the \*arg and \*\*kw
- forms. However, you do { not} need the {$} with the special Python
- constants {None}, {True} and {False}. Examples:
-
- ::
-
- $hex($myVar)
- $func($arg=1234)
- $func2($*args, $**kw)
- $func3(3.14159, $arg2, None, True)
- $myList[$mySubscript]
-
-- Trailing periods are ignored. Cheetah will recognize that the
- placeholder name in {$varName.} is {varName}, and the period will
- be left alone in the template output.
-
-- The syntax {${placeholderName, arg1="val1"}} passes arguments to
- the output filter (see {#filter}, section output.filter. The braces
- and comma are required in this case. It's conventional to omit the
- {$} before the keyword arguments (i.e. {arg1}) in this case.
-
-- Cheetah ignores all dollar signs ({$}) that are not followed by
- a letter or an underscore.
-
-
-The following are valid $placeholders:
-
-::
-
- $a $_ $var $_var $var1 $_1var $var2_ $dict.key $list[3]
- $object.method $object.method() $object.method
- $nest($nest($var))
-
-These are not $placeholders but are treated as literal text:
-
-::
-
- $@var $^var $15.50 $$
-
-Where can you use placeholders?
--------------------------------
-
-(language.placeholders.positions)
-
-There are three places you can use placeholders: top-level
-position, expression position and LVALUE position. Each has
-slightly different syntax rules.
-
-Top-level position means interspersed in text. This is the only
-place you can use the placeholder long form: {${var}}.
-
-{ Expression position} means inside a Cheetah expression, which is
-the same as a Python expression. The placeholder names a searchList
-or other variable to be read. Expression position occurs inside ()
-and :math:`$[]$` arguments within placeholder tags (i.e., a
-placeholder inside a placeholder), and in several directive tags.
-
-{ LVALUE position} means naming a variable that will be written to.
-LVALUE is a computer science term meaning
-"the left side of an assignment statement". The first argument of
-directives {#set}, {#for}, {#def}, {#block} and {#attr} is an
-LVALUE.
-
-This stupid example shows the three positions. Top-level position
-is shown in {courier}, expression position is { italic}, and LVALUE
-position is { bold}.
-
- #for { $count} in { $range}({ $ninetyNine}, 0, -1)
- #set { $after} = { $count} - 1
- {$count} bottles of beer on the wall. {$count} bottles of beer!
- Take one down, pass it around. {$after} bottles of beer on the
- wall.
- #end for
- {$hex}({ $myVar}, { $default}={ None})
-
-
-The output of course is:
-
-::
-
- 99 bottles of beer on the wall. 99 bottles of beer!
- Take one down, pass it around. 98 bottles of beer on the wall.
- 98 bottles of beer on the wall. 98 bottles of beer!
- Take one down, pass it around. 97 bottles of beer on the wall.
- ...
-
-Are all those dollar signs really necessary?
---------------------------------------------
-
-(language.placeholders.dollar-signs)
-
-{$} is a "smart variable prefix". When Cheetah sees {$}, it
-determines both the variable's position and whether it's a
-searchList value or a non-searchList value, and generates the
-appropriate Python code.
-
-In top-level position, the {$} is { required}. Otherwise there's
-nothing to distinguish the variable from ordinary text, and the
-variable name is output verbatim.
-
-In expression position, the {$} is { required} if the value comes
-from the searchList or a "#set global" variable, { recommended} for
-local/global/builtin variables, and { not necessary} for the
-special constants {None}, {True} and {False}. This works because
-Cheetah generates a function call for a searchList placeholder, but
-a bare variable name for a local/global/builtin variable.
-
-In LVALUE position, the {$} is { recommended}. Cheetah knows where
-an LVALUE is expected, so it can handle your variable name whether
-it has {$} or not.
-
-EXCEPTION: Do { not} use the {$} prefix for intermediate variables
-in a Python list comprehensions. This is a limitation of Cheetah's
-parser; it can't tell which variables in a list comprehension are
-the intermediate variables, so you have to help it. For example:
-
-::
-
- #set $theRange = [x ** 2 for x in $range(10)]
-
-{$theRange} is a regular {#set} variable. {$range} is a Python
-built-in function. But {x} is a scratch variable internal to the
-list comprehension: if you type {$x}, Cheetah will miscompile it.
-
-NameMapper Syntax
------------------
-
-(language.namemapper)
-
-One of our core aims for Cheetah was to make it easy for
-non-programmers to use. Therefore, Cheetah uses a simplified syntax
-for mapping placeholders in Cheetah to values in Python. It's known
-as the { NameMapper syntax} and allows for non-programmers to use
-Cheetah without knowing (a) the difference between an instance and
-a dictionary, (b) what functions and methods are, and (c) what
-'self' is. A side benefit is that you can change the underlying
-data structure (e.g., instance to dictionary or vice-versa) without
-having to modify the templates.
-
-NameMapper syntax is used for all variables in Cheetah placeholders
-and directives. If desired, it can be turned off via the {Template}
-class' {'useNameMapper'} compiler setting. But it's doubtful you'd
-ever want to turn it off.
-
-Example
-~~~~~~~
-
-(language.namemapper.example)
-
-Consider this scenario:
-
-You are building a customer information system. The designers with
-you want to use information from your system on the client's
-website -AND- they want to understand the display code and so they
-can maintian it themselves.
-
-You write a UI class with a 'customers' method that returns a
-dictionary of all the customer objects. Each customer object has an
-'address' method that returns the a dictionary with information
-about the customer's address. The designers want to be able to
-access that information.
-
-Using PSP, the display code for the website would look something
-like the following, assuming your servlet subclasses the class you
-created for managing customer information:
-
-::
-
- <%= self.customer()[ID].address()['city'] %> (42 chars)
-
-With Cheetah's NameMapper syntax, you can use any of the
-following:
-
-::
-
- $self.customers()[$ID].address()['city'] (39 chars)
- --OR--
- $customers()[$ID].address()['city']
- --OR--
- $customers()[$ID].address().city
- --OR--
- $customers()[$ID].address.city
- --OR--
- $customers[$ID].address.city (27 chars)
-
-Which of these would you prefer to explain to the designers, who
-have no programming experience? The last form is 15 characters
-shorter than the PSP version and - conceptually - far more
-accessible. With PHP or ASP, the code would be even messier than
-with PSP.
-
-This is a rather extreme example and, of course, you could also
-just implement {$getCustomer($ID).city} and obey the Law of Demeter
-(search Google for more on that). But good object orientated design
-isn't the point of this example.
-
-Dictionary Access
-~~~~~~~~~~~~~~~~~
-
-(language.namemapper.dict)
-
-NameMapper syntax allows access to dictionary items with the same
-dotted notation used to access object attributes in Python. This
-aspect of NameMapper syntax is known as 'Unified Dotted Notation'.
-For example, with Cheetah it is possible to write:
-
-::
-
- $customers()['kerr'].address() --OR-- $customers().kerr.address()
-
-where the second form is in NameMapper syntax.
-
-This works only with dictionary keys that also happen to be valid
-Python identifiers.
-
-Autocalling
-~~~~~~~~~~~
-
-(language.namemapper.autocalling)
-
-Cheetah automatically detects functions and methods in Cheetah
-$variables and calls them if the parentheses have been left off.
-Our previous example can be further simplified to:
-
-::
-
- $customers.kerr.address
-
-As another example, if 'a' is an object, 'b' is a method
-
-::
-
- $a.b
-
-is equivalent to
-
-::
-
- $a.b()
-
-If b returns a dictionary, then following variations are possible
-
-::
-
- $a.b.c --OR-- $a.b().c --OR-- $a.b()['c']
-
-where 'c' is a key in the dictionary that a.b() returns.
-
-Further notes:
-
-
-- When Cheetah autocalls a function/method, it calls it without
- any arguments. Thus, the function/method must have been declared
- without arguments (except {self} for methods) or to provide default
- values for all arguments. If the function requires arguments, you
- must use the {()}.
-
-- Cheetah autocalls only functions and methods. Classes and other
- callable objects are not autocalled. The reason is that the primary
- purpose of a function/method is to call it, whereas the primary
- purpose of an instance is to look up its attributes or call its
- methods, not to call the instance itself. And calling a class may
- allocate large sums of memory uselessly or have other side effects,
- depending on the class. For instance, consider {$myInstance.fname}.
- Do we want to look up {fname} in the namespace of {myInstance} or
- in the namespace of whatever {myinstance} returns? It could go
- either way, so Cheetah follows the principle of least surprise. If
- you { do} want to call the instance, put the {()} on, or rename the
- {.\_\_call\_\_()} method to {.\_\_str\_\_}.
-
-- Autocalling can be disabled via Cheetah's 'useAutocalling'
- compiler setting. You can also disable it for one placeholder by
- using the syntax {$getVar('varName', 'default value', False)}.
- ({.getVar()} works only with searchList values.)
-
-
-Namespace cascading and the searchList
---------------------------------------
-
-(language.searchList)
-
-When Cheetah maps a variable name in a template to a Python value,
-it searches several namespaces in order:
-
-
-#. { Local variables:} created by {#set}, {#for}, or predefined by
- Cheetah.
-
-#. The { searchList}, consisting of:
-
-
- #. {#set global} variables.
-
- #. The { searchList} containers you passed to the {Template}
- constructor, if any.
-
- #. The { Template instance} ("self"). This contains any attributes
- you assigned, {#def} methods and {#block methods},
- attributes/methods inherited via {#extends}, and other
- attributes/methods built into {Template} or inherited by it
- (there's a list of all these methods in section tips.allMethods).
-
-
-#. { Python globals:} created by {#import}, {#from ... import}, or
- otherwise predefined by Cheetah.
-
-#. { Python builtins:} {None}, {max}, etc.
-
-
-The first matching name found is used.
-
-Remember, these namespaces apply only to the { first} identifier
-after the {$}. In a placeholder like {$a.b}, only 'a' is looked up
-in the searchList and other namespaces. 'b' is looked up only
-inside 'a'.
-
-A searchList container can be any Python object with attributes or
-keys: dictionaries, instances, classes or modules. If an instance
-contains both attributes and keys, its attributes are searched
-first, then its keys.
-
-Because the {Template} instance is part of the searchList, you can
-access its attributes/methods without 'self': {$myAttr}. However,
-use the 'self' if you want to make sure you're getting the
-{Template} attribute and not a same-name variable defined in a
-higher namespace: {$self.myAttr}. This works because "self" itself
-is a local variable.
-
-The final resulting value, after all lookups and function calls
-(but before the filter is applied) is called the { placeholder
-value}, no matter which namespace it was found in.
-
-{ { Note carefully:}} if you put an object 'myObject' in the
-searchList, you { cannot} look up {$myObject}! You can look up only
-the attributes/keys { inside} 'myObject'.
-
-Earlier versions of Cheetah did not allow you to override Python
-builtin names, but this was fixed in Cheetah 0.9.15.
-
-If your template will be used as a Webware servlet, do not override
-methods 'name' and 'log' in the {Template} instance or it will
-interfere with Webware's logging. However, it { is} OK to use those
-variables in a higher namespace, since Webware doesn't know about
-Cheetah namespaces.
-
-Missing Values
---------------
-
-(language.namemapper.missing)
-
-If NameMapper can not find a Python value for a Cheetah variable
-name, it will raise the NameMapper.NotFound exception. You can use
-the {#errorCatcher} directive (section errorHandling.errorCatcher)
-or { errorCatcher} Template constructor argument (section
-howWorks.constructing) to specify an alternate behaviour. BUT BE
-AWARE THAT errorCatcher IS ONLY INTENDED FOR DEBUGGING!
-
-To provide a default value for a placeholder, write it like this:
-{$getVar('varName', 'default value')}. If you don't specify a
-default and the variable is missing, {NameMapper.NotFound} will be
-raised.
-
-Directive Syntax Rules
-----------------------
-
-(language.directives.syntax)
-
-Directive tags begin with a hash character (#) and are used for
-comments, loops, conditional blocks, includes, and all other
-advanced features. Cheetah uses a Python-like syntax inside
-directive tags and understands any valid Python expression. {
-However, unlike Python, Cheetah does not use colons (:) and
-indentation to mark off multi-line directives.} That doesn't work
-in an environment where whitespace is significant as part of the
-text. Instead, multi-line directives like {#for} have corresponding
-closing tags ({#end for}). Most directives are direct mirrors of
-Python statements.
-
-Many directives have arguments after the opening tag, which must be
-in the specified syntax for the tag. All end tags have the
-following syntax:
-
-::
-
- #end TAG_NAME [EXPR]
-
-The expression is ignored, so it's essentially a comment.
-
-Directive closures and whitespace handling
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-(language.directives.closures) Directive tags can be closed
-explicitly with {#}, or implicitly with the end of the line if
-you're feeling lazy.
-
-::
-
- #block testBlock #
- Text in the body of the
- block directive
- #end block testBlock #
-
-is identical to:
-
-::
-
- #block testBlock
- Text in the body of the
- block directive
- #end block testBlock
-
-When a directive tag is closed explicitly, it can be followed with
-other text on the same line:
-
-::
-
- bah, bah, #if $sheep.color == 'black'# black#end if # sheep.
-
-When a directive tag is closed implicitly with the end of the line,
-all trailing whitespace is gobbled, including the newline
-character:
-
-::
-
- """
- foo #set $x = 2
- bar
- """
- outputs
- """
- foo bar
- """
-
- while
- """
- foo #set $x = 2 #
- bar
- """
- outputs
- """
- foo
- bar
- """
-
-When a directive tag is closed implicitly AND there is no other
-text on the line, the ENTIRE line is gobbled up including any
-preceeding whitespace:
-
-::
-
- """
- foo
- #set $x = 2
- bar
- """
- outputs
- """
- foo
- bar
- """
-
- while
- """
- foo
- - #set $x = 2
- bar
- """
- outputs
- """
- foo
- - bar
- """
-
-The {#slurp} directive (section output.slurp) also gobbles up
-whitespace.
-
-Spaces outside directives are output { exactly} as written. In the
-black sheep example, there's a space before "black" and another
-before "sheep". So although it's legal to put multiple directives
-on one line, it can be hard to read.
-
-::
-
- #if $a# #echo $a + 1# #end if
- - There's a space between each directive,
- or two extra spaces total.
- #if $a##echo $a + 1##end if
- - No spaces, but you have to look closely
- to verify none of the ``##'' are comment markers.
- #if $a##echo $a + 1##end if ### A comment.
- - In ``###'', the first ``#'' ends the directive,
- the other two begin the comment. (This also shows
- how you can add extra whitespace in the directive
- tag without affecting the output.)
- #if $a##echo $a + 1##end if # ## A comment.
- - More readable, but now there's a space before the
- comment.
-
-
diff --git a/docs/html/_sources/users_guide/libraries.rst.txt b/docs/html/_sources/users_guide/libraries.rst.txt
deleted file mode 100644
index cbdeb14..0000000
--- a/docs/html/_sources/users_guide/libraries.rst.txt
+++ /dev/null
@@ -1,315 +0,0 @@
-Batteries included: templates and other libraries
-=================================================
-
-(libraries)
-
-Cheetah comes "batteries included" with libraries of templates,
-functions, classes and other objects you can use in your own
-programs. The different types are listed alphabetically below,
-followed by a longer description of the SkeletonPage framework.
-Some of the objects are classes for specific purposes (e.g.,
-filters or error catchers), while others are standalone and can be
-used without Cheetah.
-
-If you develop any objects which are generally useful for Cheetah
-sites, please consider posting them on the wiki with an
-announcement on the mailing list so we can incorporate them into
-the standard library. That way, all Cheetah users will benefit, and
-it will encourage others to contribute their objects, which might
-include something you want.
-
-ErrorCatchers
--------------
-
-(libraries.ErrorCatchers)
-
-Module {Cheetah.ErrorCatchers} contains error-handling classes
-suitable for the {#errorCatcher} directive. These are debugging
-tools that are not intended for use in production systems. See
-section errorHandling.errorCatcher for a description of the error
-catchers bundled with Cheetah.
-
-FileUtils
----------
-
-(libraries.FileUtils)
-
-Module {Cheetah.FileUtils} contains generic functions and classes
-for doing bulk search-and-replace on several files, and for finding
-all the files in a directory hierarchy whose names match a glob
-pattern.
-
-Filters
--------
-
-(libraries.Filters)
-
-Module {Filters} contains filters suitable for the {#Filter}
-directive. See section output.filter for a description of the
-filters bundled with Cheetah.
-
-SettingsManager
----------------
-
-(libraries.SettingsManager)
-
-The {SettingsManager} class in the {Cheetah.SettingsManager} module
-is a baseclass that provides facilities for managing application
-settings. It facilitates the use of user-supplied configuration
-files to fine tune an application. A setting is a key/value pair
-that an application or component (e.g., a filter, or your own
-servlets) looks up and treats as a configuration value to modify
-its (the component's) behaviour.
-
-SettingsManager is designed to:
-
-
-- work well with nested settings dictionaries of any depth
-
-- read/write {.ini style config files} (or strings)
-
-- read settings from Python source files (or strings) so that
- complex Python objects can be stored in the application's settings
- dictionary. For example, you might want to store references to
- various classes that are used by the application, and plugins to
- the application might want to substitute one class for another.
-
-- allow sections in {.ini config files} to be extended by settings
- in Python src files. If a section contains a setting like
- "{importSettings=mySettings.py}", {SettingsManager} will merge all
- the settings defined in "{mySettings.py}" with the settings for
- that section that are defined in the {.ini config file}.
-
-- maintain the case of setting names, unlike the ConfigParser
- module
-
-
-Cheetah uses {SettingsManager} to manage its configuration
-settings. {SettingsManager} might also be useful in your own
-applications. See the source code and docstrings in the file
-{src/SettingsManager.py} for more information.
-
-Templates
----------
-
-(libraries.templates)
-
-Package {Cheetah.Templates} contains stock templates that you can
-either use as is, or extend by using the {#def} directive to
-redefine specific { blocks}. Currently, the only template in here
-is SkeletonPage, which is described in detail below in section
-libraries.templates.skeletonPage. (Contributed by Tavis Rudd.)
-
-Tools
------
-
-(libraries.Tools)
-
-Package {Cheetah.Tools} contains functions and classes contributed
-by third parties. Some are Cheetah-specific but others are generic
-and can be used standalone. None of them are imported by any other
-Cheetah component; you can delete the Tools/ directory and Cheetah
-will function fine.
-
-Some of the items in Tools/ are experimental and have been placed
-there just to see how useful they will be, and whether they attract
-enough users to make refining them worthwhile (the tools, not the
-users :).
-
-Nothing in Tools/ is guaranteed to be: (A) tested, (B) reliable,
-(C) immune from being deleted in a future Cheetah version, or (D)
-immune from backwards-incompatable changes. If you depend on
-something in Tools/ on a production system, consider making a copy
-of it outside the Cheetah/ directory so that this version won't be
-lost when you upgrade Cheetah. Also, learn enough about Python and
-about the Tool so that you can maintain it and bugfix it if
-necessary.
-
-If anything in Tools/ is found to be necessary to Cheetah's
-operation (i.e., if another Cheetah component starts importing it),
-it will be moved to the {Cheetah.Utils} package.
-
-Current Tools include:
-
- an ambitious class useful when iterating over records of data
- ({#for} loops), displaying one pageful of records at a time (with
- previous/next links), and printing summary statistics about the
- records or the current page. See {MondoReportDoc.txt} in the same
- directory as the module. Some features are not implemented yet.
- {MondoReportTest.py} is a test suite (and it shows there are
- currently some errors in MondoReport, hmm). Contributed by Mike
- Orr.
-
- Nothing, but in a friendly way. Good for filling in for objects you
- want to hide. If {$form.f1} is a RecursiveNull object, then
- {$form.f1.anything["you"].might("use")} will resolve to the empty
- string. You can also put a {RecursiveNull} instance at the end of
- the searchList to convert missing values to '' rather than raising
- a {NotFound} error or having a (less efficient) errorCatcher handle
- it. Of course, maybe you prefer to get a {NotFound} error...
- Contributed by Ian Bicking.
-
- Provides navigational links to this page's parents and children.
- The constructor takes a recursive list of (url,description) pairs
- representing a tree of hyperlinks to every page in the site (or
- section, or application...), and also a string containing the
- current URL. Two methods 'menuList' and 'crumbs' return
- output-ready HTML showing an indented menu (hierarchy tree) or
- crumbs list (Yahoo-style bar: home > grandparent > parent >
- currentURL). Contributed by Ian Bicking.
-
-
-Utils
------
-
-(libraries.Utils)
-
-Package {Cheetah.Utils} contains non-Cheetah-specific functions and
-classes that are imported by other Cheetah components. Many of
-these utils can be used standalone in other applications too.
-
-Current Utils include:
-
- This is inherited by {Template} objects, and provides the method,
- {.cgiImport} method (section webware.cgiImport).
-
- A catch-all module for small functions.
-
- Raise 'thing' if it's a subclass of Exception, otherwise return it.
- Useful when one argument does double duty as a default value or an
- exception to throw. Contribyted by Mike Orr.
-
- Verifies the dictionary does not contain any keys not listed in
- 'legalKeywords'. If it does, raise TypeError. Useful for checking
- the keyword arguments to a function. Contributed by Mike Orr.
-
-
- Not implemented yet, but will contain the {.uploadFile} method (or
- three methods) to "safely" copy a form-uploaded file to a local
- file, to a searchList variable, or return it. When finished, this
- will be inherited by {Template}, allowing all templates to do this.
- If you want this feature, read the docstring in the source and let
- us know on the mailing list what you'd like this method to do.
- Contributed by Mike Orr.
-
- Functions to verify the type of a user-supplied function argument.
- Contributed by Mike Orr.
-
-
-Cheetah.Templates.SkeletonPage
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-(libraries.templates.skeletonPage)
-
-A stock template class that may be useful for web developers is
-defined in the {Cheetah.Templates.SkeletonPage} module. The
-{SkeletonPage} template class is generated from the following
-Cheetah source code:
-
-::
-
- ##doc-module: A Skeleton HTML page template, that provides basic structure and utility methods.
- ################################################################################
- #extends Cheetah.Templates._SkeletonPage
- #implements respond
- ################################################################################
- #cache id='header'
- $docType
- $htmlTag
- <!-- This document was autogenerated by Cheetah (http://cheetahtemplate.org/).
- Do not edit it directly!
-
- Copyright $currentYr - $siteCopyrightName - All Rights Reserved.
- Feel free to copy any javascript or html you like on this site,
- provided you remove all links and/or references to $siteDomainName
- However, please do not copy any content or images without permission.
-
- $siteCredits
-
- -->
-
-
- #block writeHeadTag
- <head>
- <title>$title</title>
- $metaTags
- $stylesheetTags
- $javascriptTags
- </head>
- #end block writeHeadTag
-
- #end cache header
- #################
-
- $bodyTag
-
- #block writeBody
- This skeleton page has no flesh. Its body needs to be implemented.
- #end block writeBody
-
- </body>
- </html>
-
-You can redefine any of the blocks defined in this template by
-writing a new template that {#extends} SkeletonPage. (As you
-remember, using {#extends} makes your template implement the
-{.writeBody()} method instead of {.respond()} - which happens to be
-the same method SkeletonPage expects the page content to be (note
-the writeBody block in SkeletonPage).)
-
-::
-
- #def bodyContents
- Here's my new body. I've got some flesh on my bones now.
- #end def bodyContents
-
-All of the $placeholders used in the {SkeletonPage} template
-definition are attributes or methods of the {SkeletonPage} class.
-You can reimplement them as you wish in your subclass. Please read
-the source code of the file {src/Templates/\_SkeletonPage.py}
-before doing so.
-
-You'll need to understand how to use the following methods of the
-{SkeletonPage} class: {$metaTags()}, {$stylesheetTags()},
-{$javascriptTags()}, and {$bodyTag()}. They take the data you
-define in various attributes and renders them into HTML tags.
-
-
-- { metaTags()} - Returns a formatted vesion of the
- self.\_metaTags dictionary, using the formatMetaTags function from
- {\_SkeletonPage.py}.
-
-- { stylesheetTags()} - Returns a formatted version of the
- {self.\_stylesheetLibs} and {self.\_stylesheets} dictionaries. The
- keys in {self.\_stylesheets} must be listed in the order that they
- should appear in the list {self.\_stylesheetsOrder}, to ensure that
- the style rules are defined in the correct order.
-
-- { javascriptTags()} - Returns a formatted version of the
- {self.\_javascriptTags} and {self.\_javascriptLibs} dictionaries.
- Each value in {self.\_javascriptTags} should be a either a code
- string to include, or a list containing the JavaScript version
- number and the code string. The keys can be anything. The same
- applies for {self.\_javascriptLibs}, but the string should be the
- SRC filename rather than a code string.
-
-- { bodyTag()} - Returns an HTML body tag from the entries in the
- dict {self.\_bodyTagAttribs}.
-
-
-The class also provides some convenience methods that can be used
-as $placeholders in your template definitions:
-
-
-- { imgTag(self, src, alt='', width=None, height=None, border=0)}
- - Dynamically generate an image tag. Cheetah will try to convert
- the "{src}" argument to a WebKit serverSidePath relative to the
- servlet's location. If width and height aren't specified they are
- calculated using PIL or ImageMagick if either of these tools are
- available. If all your images are stored in a certain directory you
- can reimplement this method to append that directory's path to the
- "{src}" argument. Doing so would also insulate your template
- definitions from changes in your directory structure.
-
-
-
diff --git a/docs/html/_sources/users_guide/links.rst.txt b/docs/html/_sources/users_guide/links.rst.txt
deleted file mode 100644
index 1927ff8..0000000
--- a/docs/html/_sources/users_guide/links.rst.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-Useful Web Links
-================
-
-(links)
-
-See the wiki for more links. (The wiki is also updated more often
-than this chapter is.)
-
-Cheetah Links
--------------
-
-(links.cheetah)
-
-Home Page, issue tracker
- - https://github.com/CheetahTemplate3/cheetah3
-
-On-line Documentation
- - http://cheetahtemplate.org/
-
-Questions can also be asked and answered on `StackOverflow
-<https://stackoverflow.com/questions/tagged/cheetah>`_.
-
-
-Third-party Cheetah Stuff
--------------------------
-
-(links.thirdParty)
-
-
-- Steve Howell has written a photo viewer using Python.
- http://mountainwebtools.com/PicViewer/install.htm
-
-
-Webware Links
--------------
-
-(links.webware)
-
-Home Page
- - https://cito.github.io/w4py/
-
-On-line Documentation
- - https://webware.sf.net/Webware/Docs/
-
-SourceForge Project Page
- - https://sf.net/projects/webware/
-
-Mailing List Subscription Page
- - http://lists.sourceforge.net/lists/listinfo/webware-discuss
-
-
-Python Links
-------------
-
-(links.python)
-
-Home Page
- - http://www.python.org/
-
-On-line Documentation
- - http://www.python.org/doc/
-
-Python Cookbook
- - https://code.activestate.com/recipes/langs/python/
-
-
-Other Useful Links
-------------------
-
-(links.other)
-
-Python Database Modules and Open Source Databases
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-(links.database)
-
-Python Database Topic Guide
- - http://python.org/topics/database/
-
-PostgreSQL Database
- - http://www.postgresql.org/index.html
-
-MySQL Database
- - http://www.mysql.com/
-
-A comparison of PostgreSQL and MySQL
- - http://phpbuilder.com/columns/tim20001112.php3
-
-
-Other Template Systems
-~~~~~~~~~~~~~~~~~~~~~~
-
-(links.other.templateSystems)
-
-Python Wiki
- - https://wiki.python.org/moin/Templating
-
-
-Other Internet development frameworks
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-(links.internet)
-
-ZOPE (Z Object Publishing Environment)
- - http://zope.org/
-
-Server Side Java
- - http://jakarta.apache.org/
-
-PHP
- - http://php.net/
-
-IBM Websphere
- - http://www.ibm.com/websphere/
-
-Coldfusion and Spectra
- - http://www.macromedia.com/
-
-
-
diff --git a/docs/html/_sources/users_guide/nonHtml.rst.txt b/docs/html/_sources/users_guide/nonHtml.rst.txt
deleted file mode 100644
index 19f9667..0000000
--- a/docs/html/_sources/users_guide/nonHtml.rst.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-Non-HTML Output
-===============
-
-(nonHTML)
-
-Cheetah can also output any other text format besides HTML.
-
-Python source code
-------------------
-
-(nonHTML.python)
-
-To be written. We're in the middle of working on an autoindenter to
-make it easier to encode Python indentation in a Cheetah template.
-
-
diff --git a/docs/html/_sources/users_guide/otherHtml.rst.txt b/docs/html/_sources/users_guide/otherHtml.rst.txt
deleted file mode 100644
index eeceaab..0000000
--- a/docs/html/_sources/users_guide/otherHtml.rst.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-non-Webware HTML output
-=======================
-
-(otherHTML)
-
-Cheetah can be used with all types of HTML output, not just with
-Webware.
-
-Static HTML Pages
------------------
-
-(otherHTML.static)
-
-Some sites like Linux Gazette (http://www.linuxgazette.com/)
-require completely static pages because they are mirrored on
-servers running completely different software from the main site.
-Even dynamic sites may have one or two pages that are static for
-whatever reason, and the site administrator may wish to generate
-those pages from Cheetah templates.
-
-There's nothing special here. Just create your templates as usual.
-Then compile and fill them whenever the template definition
-changes, and fill them again whenever the placeholder values
-change. You may need an extra step to copy the .html files to their
-final location. A Makefile (chapter tips.Makefile) can help
-encapsulate these steps.
-
-CGI scripts
------------
-
-(otherHTML)
-
-Unlike Webware servlets, which don't have to worry about the HTTP
-headers, CGI scripts must emit their own headers. To make a
-template CGI aware, add this at the top:
-
-::
-
- #extends Cheetah.Tools.CGITemplate
- #implements respond
- $cgiHeaders#slurp
-
-Or if your template is inheriting from a Python class:
-
-::
-
- #extends MyPythonClass
- #implements respond
- $cgiHeaders#slurp
-
-A sample Python class:
-
-::
-
- from Cheetah.Tools import CGITemplate
- class MyPythonClass(CGITemplate):
- def cgiHeadersHook(self):
- return "Content-Type: text/html; charset=koi8-r\n\n"
-
-Compile the template as usual, put the .py template module in your
-cgi-bin directory and give it execute permission. {.cgiHeaders()}
-is a "smart" method that outputs the headers if the module is
-called as a CGI script, or outputs nothing if not. Being
-"called as a CGI script" means the environmental variable
-{REQUEST\_METHOD} exists and {self.isControlledByWebKit} is false.
-If you don't agree with that definition, override {.isCgi()} and
-provide your own.
-
-The default header is a simple ``Content-type: text/html\n\n``,
-which works with all CGI scripts. If you want to customize the
-headers (e.g., to specify the character set), override
-{.cgiHeadersHook()} and return a string containing all the headers.
-Don't forget to include the extra newline at the end of the string:
-the HTTP protocol requires this empty line to mark the end of the
-headers.
-
-To read GET/POST variables from form input, use the {.webInput()}
-method (section webware.webInput), or extract them yourself using
-Python's {cgi} module or your own function. Although {.webInput()}
-was originally written for Webware servlets, it now handles CGI
-scripts too. There are a couple behavioral differences between CGI
-scripts and Webware servlets regarding input variables:
-
-
-#. CGI scripts, using Python's {cgi} module, believe
- {REQUEST\_METHOD} and recognize { either} GET variables { or} POST
- variables, not both. Webware servlets, doing additional processing,
- ignore {REQUEST\_METHOD} and recognize both, like PHP does.
-
-#. Webware servlets can ask for cookies or session variables
- instead of GET/POST variables, by passing the argument {src='c'} or
- {src='s'}. CGI scripts get a {RuntimeError} if they try to do
- this.
-
-
-If you keep your .tmpl files in the same directory as your CGI
-scripts, make sure they don't have execute permission. Apache at
-least refuses to serve files in a {ScriptAlias} directory that
-don't have execute permission.
-
-
diff --git a/docs/html/_sources/users_guide/output.rst.txt b/docs/html/_sources/users_guide/output.rst.txt
deleted file mode 100644
index d7fb8e0..0000000
--- a/docs/html/_sources/users_guide/output.rst.txt
+++ /dev/null
@@ -1,468 +0,0 @@
-.. role:: math(raw)
- :format: html latex
-
-Generating, Caching and Filtering Output
-========================================
-
-(output)
-
-Output from complex expressions: #echo
---------------------------------------
-
-(output.echo)
-
-Syntax:
-
-::
-
- #echo EXPR
-
-The {#echo} directive is used to echo the output from expressions
-that can't be written as simple $placeholders.
-
-::
-
- Here is my #echo ', '.join(['silly']*5) # example
-
-This produces:
-
-::
-
- Here is my silly, silly, silly, silly, silly example.
-
-Executing expressions without output: #silent
----------------------------------------------
-
-(output.silent)
-
-Syntax:
-
-::
-
- #silent EXPR
-
-{#silent} is the opposite of {#echo}. It executes an expression but
-discards the output.
-
-::
-
- #silent $myList.reverse()
- #silent $myList.sort()
- Here is #silent $covertOperation() # nothing
-
-If your template requires some Python code to be executed at the
-beginning; (e.g., to calculate placeholder values, access a
-database, etc), you can put it in a "doEverything" method you
-inherit, and call this method using {#silent} at the top of the
-template.
-
-One-line #if
-------------
-
-(output.oneLineIf)
-
-Syntax:
-
-::
-
- #if EXPR1 then EXPR2 else EXPR3#
-
-The {#if} flow-control directive (section flowControl.if) has a
-one-line counterpart akin to Perl's and C's {?:} operator. If
-{EXPR1} is true, it evaluates {EXPR2} and outputs the result (just
-like {#echo EXPR2#}). Otherwise it evaluates {EXPR3} and outputs
-that result. This directive is short-circuiting, meaning the
-expression that isn't needed isn't evaluated.
-
-You MUST include both 'then' and 'else'. If this doesn't work for
-you or you don't like the style use multi-line {#if} directives
-(section flowControl.if).
-
-The trailing {#} is the normal end-of-directive character. As usual
-it may be omitted if there's nothing after the directive on the
-same line.
-
-Caching Output
---------------
-
-(output.caching)
-
-Caching individual placeholders
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-(output.caching.placeholders)
-
-By default, the values of each $placeholder is retrieved and
-interpolated for every request. However, it's possible to cache the
-values of individual placeholders if they don't change very often,
-in order to speed up the template filling.
-
-To cache the value of a single {$placeholder}, add an asterisk
-after the $; e.g., {$\*var}. The first time the template is filled,
-{$var} is looked up. Then whenever the template is filled again,
-the cached value is used instead of doing another lookup.
-
-The {$\*} format caches "forever"; that is, as long as the template
-instance remains in memory. It's also possible to cache for a
-certain time period using the form {$\*<interval>\*variable}, where
-{<interval>} is the interval. The time interval can be specified in
-seconds (5s), minutes (15m), hours (3h), days (2d) or weeks (1.5w).
-The default is minutes.
-
-::
-
- <HTML>
- <HEAD><TITLE>$title</TITLE></HEAD>
- <BODY>
-
- $var ${var} ## dynamic - will be reinterpolated for each request
- $*var2 $*{var2} ## static - will be interpolated only once at start-up
- $*5*var3 $*5*{var3} ## timed refresh - will be updated every five minutes.
-
- </BODY>
- </HTML>
-
-Note that "every five minutes" in the example really means every
-five minutes: the variable is looked up again when the time limit
-is reached, whether the template is being filled that frequently or
-not. Keep this in mind when setting refresh times for CPU-intensive
-or I/O intensive operations.
-
-If you're using the long placeholder syntax, ``${}``, the braces go
-only around the placeholder name: ``$*.5h*{var.func('arg')}``.
-
-Sometimes it's preferable to explicitly invalidate a cached item
-whenever you say so rather than at certain time intervals. You
-can't do this with individual placeholders, but you can do it with
-cached regions, which will be described next.
-
-Caching entire regions
-~~~~~~~~~~~~~~~~~~~~~~
-
-(output.caching.regions)
-
-Syntax:
-
-::
-
- #cache [id=EXPR] [timer=EXPR] [test=EXPR]
- #end cache
-
-The {#cache} directive is used to cache a region of content in a
-template. The region is cached as a single unit, after placeholders
-and directives inside the region have been evaluated. If there are
-any {$\*<interval>\*var} placholders inside the cache region, they
-are refreshed only when { both} the cache region { and} the
-placeholder are simultaneously due for a refresh.
-
-Caching regions offers more flexibility than caching individual
-placeholders. You can specify the refresh interval using a
-placeholder or expression, or refresh according to other criteria
-rather than a certain time interval.
-
-{#cache} without arguments caches the region statically, the same
-way as {$\*var}. The region will not be automatically refreshed.
-
-To refresh the region at an interval, use the {timer=EXPRESSION}
-argument, equivalent to {$\*<interval>\*}. The expression should
-evaluate to a number or string that is a valid interval (e.g., 0.5,
-'3m', etc).
-
-To refresh whenever an expression is true, use {test=EXPRESSION}.
-The expression can be a method/function returning true or false, a
-boolean placeholder, several of these joined by {and} and/or {or},
-or any other expression. If the expression contains spaces, it's
-easier to read if you enclose it in {()}, but this is not
-required.
-
-To refresh whenever you say so, use {id=EXPRESSION}. Your program
-can then call {.refreshCache(ID)} whenever it wishes. This is
-useful if the cache depends on some external condition that changes
-infrequently but has just changed now.
-
-You can combine arguments by separating them with commas. For
-instance, you can specify both {id=} and {interval=}, or {id=} and
-{test=}. (You can also combine interval and test although it's not
-very useful.) However, repeating an argument is undefined.
-
-::
-
- #cache
- This is a static cache. It will not be refreshed.
- $a $b $c
- #end cache
-
- #cache timer='30m', id='cache1'
- #for $cust in $customers
- $cust.name:
- $cust.street - $cust.city
- #end for
- #end cache
-
- #cache id='sidebar', test=$isDBUpdated
- ... left sidebar HTML ...
- #end cache
-
- #cache id='sidebar2', test=($isDBUpdated or $someOtherCondition)
- ... right sidebar HTML ...
- #end cache
-
-The {#cache} directive cannot be nested.
-
-We are planning to add a {'varyBy'} keyword argument in the future
-that will allow a separate cache instances to be created for a
-variety of conditions, such as different query string parameters or
-browser types. This is inspired by ASP.net's varyByParam and
-varyByBrowser output caching keywords.
-
-#raw
-----
-
-(output.raw)
-
-Syntax:
-
-::
-
- #raw
- #end raw
-
-Any section of a template definition that is inside a {#raw ...
-#end raw} tag pair will be printed verbatim without any parsing of
-$placeholders or other directives. This can be very useful for
-debugging, or for Cheetah examples and tutorials.
-
-{#raw} is conceptually similar to HTML's {<PRE>} tag and LaTeX's {
-verbatim{}} tag, but unlike those tags, {#raw} does not cause the
-body to appear in a special font or typeface. It can't, because
-Cheetah doesn't know what a font is.
-
-#include
---------
-
-(output.include)
-
-Syntax:
-
-::
-
- #include [raw] FILENAME_EXPR
- #include [raw] source=STRING_EXPR
-
-The {#include} directive is used to include text from outside the
-template definition. The text can come from an external file or
-from a {$placeholder} variable. When working with external files,
-Cheetah will monitor for changes to the included file and update as
-necessary.
-
-This example demonstrates its use with external files:
-
-::
-
- #include "includeFileName.txt"
-
-The content of "includeFileName.txt" will be parsed for Cheetah
-syntax.
-
-And this example demonstrates use with {$placeholder} variables:
-
-::
-
- #include source=$myParseText
-
-The value of {$myParseText} will be parsed for Cheetah syntax. This
-is not the same as simply placing the $placeholder tag
-"{$myParseText}" in the template definition. In the latter case,
-the value of $myParseText would not be parsed.
-
-By default, included text will be parsed for Cheetah tags. The
-argument "{raw}" can be used to suppress the parsing.
-
-::
-
- #include raw "includeFileName.txt"
- #include raw source=$myParseText
-
-Cheetah wraps each chunk of {#include} text inside a nested
-{Template} object. Each nested template has a copy of the main
-template's searchList. However, {#set} variables are visible across
-includes only if the defined using the {#set global} keyword.
-
-All directives must be balanced in the include file. That is, if
-you start a {#for} or {#if} block inside the include, you must end
-it in the same include. (This is unlike PHP, which allows
-unbalanced constructs in include files.)
-
-#slurp
-------
-
-(output.slurp)
-
-Syntax:
-
-::
-
- #slurp
-
-The {#slurp} directive eats up the trailing newline on the line it
-appears in, joining the following line onto the current line.
-
-It is particularly useful in {#for} loops:
-
-::
-
- #for $i in range(5)
- $i #slurp
- #end for
-
-outputs:
-
-::
-
- 0 1 2 3 4
-
-#indent
--------
-
-(output.indent)
-
-This directive is not implemented yet. When/if it's completed, it
-will allow you to
-
-
-#. indent your template definition in a natural way (e.g., the
- bodies of {#if} blocks) without affecting the output
-
-#. add indentation to output lines without encoding it literally in
- the template definition. This will make it easier to use Cheetah to
- produce indented source code programmatically (e.g., Java or Python
- source code).
-
-
-There is some experimental code that recognizes the {#indent}
-directive with options, but the options are purposely undocumented
-at this time. So pretend it doesn't exist. If you have a use for
-this feature and would like to see it implemented sooner rather
-than later, let us know on the mailing list.
-
-The latest specification for the future {#indent} directive is in
-the TODO file in the Cheetah source distribution.
-
-Ouput Filtering and #filter
----------------------------
-
-(output.filter)
-
-Syntax:
-
-::
-
- #filter FILTER_CLASS_NAME
- #filter $PLACEHOLDER_TO_A_FILTER_INSTANCE
- #filter None
-
-Output from $placeholders is passed through an ouput filter. The
-default filter merely returns a string representation of the
-placeholder value, unless the value is {None}, in which case the
-filter returns an empty string. Only top-level placeholders invoke
-the filter; placeholders inside expressions do not.
-
-Certain filters take optional arguments to modify their behaviour.
-To pass arguments, use the long placeholder syntax and precede each
-filter argument by a comma. By convention, filter arguments don't
-take a {$} prefix, to avoid clutter in the placeholder tag which
-already has plenty of dollar signs. For instance, the MaxLen filter
-takes an argument 'maxlen':
-
-::
-
- ${placeholderName, maxlen=20}
- ${functionCall($functionArg), maxlen=$myMaxLen}
-
-To change the output filter, use the {'filter'} keyword to the
-{Template} class constructor, or the {#filter} directive at runtime
-(details below). You may use {#filter} as often as you wish to
-switch between several filters, if certain {$placeholders} need one
-filter and other {$placeholders} need another.
-
-The standard filters are in the module {Cheetah.Filters}. Cheetah
-currently provides:
-
- The default filter, which converts None to '' and everything else
- to {str(whateverItIs)}. This is the base class for all other
- filters, and the minimum behaviour for all filters distributed with
- Cheetah.
-
- Same.
-
- Same, but truncate the value if it's longer than a certain length.
- Use the 'maxlen' filter argument to specify the length, as in the
- examples above. If you don't specify 'maxlen', the value will not
- be truncated.
-
- Output a "pageful" of a long string. After the page, output HTML
- hyperlinks to the previous and next pages. This filter uses several
- filter arguments and environmental variables, which have not been
- documented yet.
-
- Same as default, but convert HTML-sensitive characters
- (':math:`$<$`', '&', ':math:`$>$`') to HTML entities so that the
- browser will display them literally rather than interpreting them
- as HTML tags. This is useful with database values or user input
- that may contain sensitive characters. But if your values contain
- embedded HTML tags you want to preserve, you do not want this
- filter.
-
- The filter argument 'also' may be used to specify additional
- characters to escape. For instance, say you want to ensure a value
- displays all on one line. Escape all spaces in the value with
- '&nbsp', the non-breaking space:
-
- ::
-
- ${$country, also=' '}}
-
-
-To switch filters using a class object, pass the class using the {
-filter} argument to the Template constructor, or via a placeholder
-to the {#filter} directive: {#filter $myFilterClass}. The class
-must be a subclass of {Cheetah.Filters.Filter}. When passing a
-class object, the value of { filtersLib} does not matter, and it
-does not matter where the class was defined.
-
-To switch filters by name, pass the name of the class as a string
-using the { filter} argument to the Template constructor, or as a
-bare word (without quotes) to the {#filter} directive: {#filter
-TheFilter}. The class will be looked up in the { filtersLib}.
-
-The filtersLib is a module containing filter classes, by default
-{Cheetah.Filters}. All classes in the module that are subclasses of
-{Cheetah.Filters.Filter} are considered filters. If your filters
-are in another module, pass the module object as the { filtersLib}
-argument to the Template constructor.
-
-Writing a custom filter is easy: just override the {.filter}
-method.
-
-::
-
- def filter(self, val, **kw): # Returns a string.
-
-Return the { string} that should be output for 'val'. 'val' may be
-any type. Most filters return \`' for {None}. Cheetah passes one
-keyword argument: ``kw['rawExpr']`` is the placeholder name as it
-appears in the template definition, including all subscripts and
-arguments. If you use the long placeholder syntax, any options you
-pass appear as keyword arguments. Again, the return value must be a
-string.
-
-You can always switch back to the default filter this way: {#filter
-None}. This is easy to remember because "no filter" means the
-default filter, and because None happens to be the only object the
-default filter treats specially.
-
-We are considering additional filters; see
-http://webware.colorstudy.net/twiki/bin/view/Cheetah/MoreFilters
-for the latest ideas.
-
-
diff --git a/docs/html/_sources/users_guide/parserInstructions.rst.txt b/docs/html/_sources/users_guide/parserInstructions.rst.txt
deleted file mode 100644
index b187e7f..0000000
--- a/docs/html/_sources/users_guide/parserInstructions.rst.txt
+++ /dev/null
@@ -1,129 +0,0 @@
-Instructions to the Parser/Compiler
-===================================
-
-(parserInstructions)
-
-#breakpoint
------------
-
-(parserInstructions.breakpoint)
-
-Syntax:
-
-::
-
- #breakpoint
-
-{#breakpoint} is a debugging tool that tells the parser to stop
-parsing at a specific point. All source code from that point on
-will be ignored.
-
-The difference between {#breakpoint} and {#stop} is that {#stop}
-occurs in normal templates (e.g., inside an {#if}) but
-{#breakpoint} is used only when debugging Cheetah. Another
-difference is that {#breakpoint} operates at compile time, while
-{#stop} is executed at run time while filling the template.
-
-#compiler-settings
-------------------
-
-(parserInstructions.compiler-settings)
-
-Syntax:
-
-::
-
- #compiler-settings
- key = value (no quotes)
- #end compiler-settings
-
- #compiler-settings reset
-
-The {#compiler-settings} directive overrides Cheetah's standard
-settings, changing how it parses source code and generates Python
-code. This makes it possible to change the behaviour of Cheetah's
-parser/compiler for a certain template, or within a portion of the
-template.
-
-The {reset} argument reverts to the default settings. With {reset},
-there's no end tag.
-
-Here are some examples of what you can do:
-
-::
-
- $myVar
- #compiler-settings
- cheetahVarStartToken = @
- #end compiler-settings
- @myVar
- #compiler-settings reset
- $myVar
-
-::
-
- ## normal comment
- #compiler-settings
- commentStartToken = //
- #end compiler-settings
-
- // new style of comment
-
- #compiler-settings reset
-
- ## back to normal comments
-
-::
-
- #slurp
- #compiler-settings
- directiveStartToken = %
- #end compiler-settings
-
- %slurp
- %compiler-settings reset
-
- #slurp
-
-Here's a partial list of the settings you can change:
-
-
-#. syntax settings
-
-
- #. cheetahVarStartToken
-
- #. commentStartToken
-
- #. multilineCommentStartToken
-
- #. multilineCommentEndToken
-
- #. directiveStartToken
-
- #. directiveEndToken
-
-
-#. code generation settings
-
-
- #. commentOffset
-
- #. outputRowColComments
-
- #. defDocStrMsg
-
- #. useNameMapper
-
- #. useAutocalling
-
- #. reprShortStrConstants
-
- #. reprNewlineThreshold
-
-
-
-The meaning of these settings and their default values will be
-documented in the future.
-
-
diff --git a/docs/html/_sources/users_guide/tipsAndTricks.rst.txt b/docs/html/_sources/users_guide/tipsAndTricks.rst.txt
deleted file mode 100644
index 8e06952..0000000
--- a/docs/html/_sources/users_guide/tipsAndTricks.rst.txt
+++ /dev/null
@@ -1,586 +0,0 @@
-Tips, Tricks and Troubleshooting
-================================
-
-(tips)
-
-This chapter contains short stuff that doesn't fit anywhere else.
-
-See the Cheetah FAQ for more specialized issues and for
-troubleshooting tips. Check the wiki periodically for recent tips
-contributed by users. If you get stuck and none of these resources
-help, ask on the mailing list.
-
-Placeholder Tips
-----------------
-
-(tips.placeholder)
-
-Here's how to do certain important lookups that may not be obvious.
-For each, we show first the Cheetah expression and then the Python
-equivalent, because you can use these either in templates or in
-pure Python subclasses. The Cheetah examples use NameMapper
-shortcuts (uniform dotted notation, autocalling) as much as
-possible.
-
-To verify whether a variable exists in the searchList:
-
-::
-
- $varExists('theVariable')
- self.varExists('theVariable')
-
-This is useful in {#if} or {#unless} constructs to avoid a
-{#NameMapper.NotFound} error if the variable doesn't exist. For
-instance, a CGI GET parameter that is normally supplied but in this
-case the user typed the URL by hand and forgot the parameter (or
-didn't know about it). ({.hasVar} is a synonym for {.varExists}.)
-
-To look up a variable in the searchList from a Python method:
-
-::
-
- self.getVar('theVariable')
- self.getVar('theVariable', myDefault)
-
-This is the equivalent to {$theVariable} in the template. If the
-variable is missing, it returns the second argument, {myDefault},
-if present, or raises {NameMapper.NotFound} if there is no second
-argument. However, it usually easier to write your method so that
-all needed searchList values come in as method arguments. That way
-the caller can just use a {$placeholder} to specify the argument,
-which is less verbose than you writing a getVar call.
-
-To do a "safe" placeholder lookup that returns a default value if
-the variable is missing:
-
-::
-
- $getVar('theVariable', None)
- $getVar('theVariable', $myDefault)
-
-To get an environmental variable, put {os.environ} on the
-searchList as a container. Or read the envvar in Python code and
-set a placeholder variable for it.
-
-Remember that variables found earlier in the searchList override
-same-name variables located in a later searchList object. Be
-careful when adding objects containing other variables besides the
-ones you want (e.g., {os.environ}, CGI parameters). The "other"
-variables may override variables your application depends on,
-leading to hard-to-find bugs. Also, users can inadvertently or
-maliciously set an environmental variable or CGI parameter you
-didn't expect, screwing up your program. To avoid all this, know
-what your namespaces contain, and place the namespaces you have the
-most control over first. For namespaces that could contain
-user-supplied "other" variables, don't put the namespace itself in
-the searchList; instead, copy the needed variables into your own
-"safe" namespace.
-
-Diagnostic Output
------------------
-
-(tips.diagnostic)
-
-If you need send yourself some debugging output, you can use
-{#silent} to output it to standard error:
-
-::
-
- #silent $sys.stderr.write("Incorrigible var is '$incorrigible'.\n")
- #silent $sys.stderr.write("Is 'unknown' in the searchList? " +
- $getVar("unknown", "No.") + "\n" )
-
-(Tip contributed by Greg Czajkowski.)
-
-When to use Python methods
---------------------------
-
-(tips.pythonMethods)
-
-You always have a choice whether to code your methods as Cheetah
-{#def} methods or Python methods (the Python methods being located
-in a class your template inherits). So how do you choose?
-
-Generally, if the method consists mostly of text and placeholders,
-use a Cheetah method (a {#def} method). That's why {#def} exists,
-to take the tedium out of writing those kinds of methods. And if
-you have a couple {#if} stanzas to {#set} some variables, followed
-by a {#for} loop, no big deal. But if your method consists mostly
-of directives and only a little text, you're better off writing it
-in Python. Especially be on the watch for extensive use of {#set},
-{#echo} and {#silent} in a Cheetah method-it's a sure sign you're
-probably using the wrong language. Of course, though, you are free
-to do so if you wish.
-
-Another thing that's harder to do in Cheetah is adjacent or nested
-multiline stanzas (all those directives with an accompanying {#end}
-directive). Python uses indentation to show the beginning and end
-of nested stanzas, but Cheetah can't do that because any
-indentation shows up in the output, which may not be desired. So
-unless all those extra spaces and tabs in the output are
-acceptable, you have to keep directives flush with the left margin
-or the preceding text.
-
-The most difficult decisions come when you have conflicting goals.
-What if a method generates its output in parts (i.e., output
-concatenation), contains many searchList placeholders and lots of
-text, { and} requires lots of {#if ... #set ... #else #set ... #end
-if} stanzas. A Cheetah method would be more advantageous in some
-ways, but a Python method in others. You'll just have to choose,
-perhaps coding groups of methods all the same way. Or maybe you can
-split your method into two, one Cheetah and one Python, and have
-one method call the other. Usually this means the Cheetah method
-calling the Python method to calculate the needed values, then the
-Cheetah method produces the output. One snag you might run into
-though is that {#set} currently can set only one variable per
-statement, so if your Python method needs to return multiple values
-to your Cheetah method, you'll have to do it another way.
-
-Calling superclass methods, and why you have to
------------------------------------------------
-
-(tips.callingSuperclassMethods)
-
-If your template or pure Python class overrides a standard method
-or attribute of {Template} or one of its base classes, you should
-call the superclass method in your method to prevent various things
-from breaking. The most common methods to override are {.awake} and
-{.\_\_init\_\_}. {.awake} is called automatically by Webware early
-during the web transaction, so it makes a convenient place to put
-Python initialization code your template needs. You'll definitely
-want to call the superclass {.awake} because it sets up many
-wonderful attributes and methods, such as those to access the CGI
-input fields.
-
-There's nothing Cheetah-specific to calling superclass methods, but
-because it's vital, we'll recap the standard Python techniques
-here. We mention only the solution for old-style classes because
-Cheetah classes are old-style (in other Python documentation, you
-will find the technique for new-style classes, but they are not
-listed here because they cannot be used with Cheetah if you use
-dynamically-compiled templates).
-
-::
-
- from Cheetah.Template import Template
- class MyClass(Template):
- def awake(self, trans):
- Template.awake(self, trans)
- ... great and exciting features written by me ...
-
-[ @@MO: Need to test this. .awake is in Servlet, which is a
-superclass of Template. Do we really need both imports? Can we call
-Template.awake? ]
-
-To avoid hardcoding the superclass name, you can use this function
-{callbase()}, which emulates {super()} for older versions of
-Python. It also works even {super()} does exist, so you don't have
-to change your servlets immediately when upgrading. Note that the
-argument sequence is different than {super} uses.
-
-::
-
- ===========================================================================
- # Place this in a module SOMEWHERE.py . Contributed by Edmund Lian.
- class CallbaseError(AttributeError):
- pass
-
- def callbase(obj, base, methodname='__init__', args=(), kw={},
- raiseIfMissing=None):
- try: method = getattr(base, methodname)
- except AttributeError:
- if raiseIfMissing:
- raise CallbaseError, methodname
- return None
- if args is None: args = ()
- return method(obj, *args, **kw)
- ===========================================================================
- # Place this in your class that's overriding .awake (or any method).
- from SOMEWHERE import callbase
- class MyMixin:
- def awake(self, trans):
- args = (trans,)
- callbase(self, MyMixin, 'awake', args)
- ... everything else you want to do ...
- ===========================================================================
-
-All methods
------------
-
-(tips.allMethods)
-
-Here is a list of all the standard methods and attributes that can
-be accessed from a placeholder. Some of them exist for you to call,
-others are mainly used by Cheetah internally but you can call them
-if you wish, and others are only for internal use by Cheetah or
-Webware. Do not use these method names in mixin classes
-({#extends}, section inheritanceEtc.extends) unless you intend to
-override the standard method.
-
-Variables with a star prefix ({ \*}) are frequently used in
-templates or in pure Python classes.
-
-\*{Inherited from Cheetah.Template}
-
- Compile the template. Automatically called by {.\_\_init\_\_}.
-
- Return the module code the compiler generated, or {None} if no
- compilation took place.
-
- Return the class code the compiler generated, or {None} if no
- compilation took place.
-
- Return a reference to the underlying search list. (a list of
- objects). Use this to print out your searchList for debugging.
- Modifying the returned list will affect your placeholder searches!
-
- Return a reference to the current error catcher.
-
- If 'cacheKey' is not {None}, refresh that item in the cache. If
- {None}, delete all items in the cache so they will be recalculated
- the next time they are encountered.
-
- Break reference cycles before discarding a servlet.
-
- Look up a variable in the searchList. Same as {$varName} but allows
- you to specify a default value and control whether autocalling
- occurs.
-
- Read the named file. If used as a placeholder, inserts the file's
- contents in the output without interpretation, like {#include raw}.
- If used in an expression, returns the file's content (e.g., to
- assign it to a variable).
-
- This is what happens if you run a .py template module as a
- standalone program.
-
-
-\*{Inherited from Cheetah.Utils.WebInputMixin}
-
- Exception raised by {.webInput}.
-
- Convenience method to access GET/POST variables from a Webware
- servlet or CGI script, or Webware cookie or session variables. See
- section webware.webInput for usage information.
-
-
-\*{Inherited from Cheetah.SettingsManager}
-
- Get a compiler setting.
-
- Does this compiler setting exist?
-
- Set setting 'name' to 'value'. See {#compiler-settings}, section
- parserInstructions.compiler-settings.
-
- Return the underlying settings dictionary. (Warning: modifying this
- dictionary will change Cheetah's behavior.)
-
- Return a copy of the underlying settings dictionary.
-
- Return a deep copy of the underlying settings dictionary. See
- Python's {copy} module.
-
- Update Cheetah's compiler settings from the 'newSettings'
- dictionary. If 'merge' is true, update only the names in
- newSettings and leave the other names alone. (The SettingsManager
- is smart enough to update nested dictionaries one key at a time
- rather than overwriting the entire old dictionary.) If 'merge' is
- false, delete all existing settings so that the new ones are the
- only settings.
-
- Same, but pass a string of {name=value} pairs rather than a
- dictionary, the same as you would provide in a {#compiler-settings}
- directive, section parserInstructions.compiler-settings.
-
- Same, but exec a Python source file and use the variables it
- contains as the new settings. (e.g.,
- {cheetahVarStartToken = "@"}).
-
- Same, but get the new settings from a text file in ConfigParser
- format (similar to Windows' \*.ini file format). See Python's
- {ConfigParser} module.
-
- Same, but read the open file object 'inFile' for the new settings.
-
- Same, but read the new settings from a string in ConfigParser
- format.
-
- Write the current compiler settings to a file named 'path' in
- \*.ini format.
-
- Return a string containing the current compiler settings in \*.ini
- format.
-
-
-\*{Inherited from Cheetah.Servlet}
-
-{ Do not override these in a subclass or assign to them as
-attributes if your template will be used as a servlet,} otherwise
-Webware will behave unpredictably. However, it { is} OK to put
-same-name variables in the searchList, because Webware does not use
-the searchList.
-
-EXCEPTION: It's OK to override { awake} and { sleep} as long as you
-call the superclass methods. (See section
-tips.callingSuperclassMethods.)
-
- True if this template instance is part of a live transaction in a
- running WebKit servlet.
-
- True if Webware is installed and the template instance inherits
- from WebKit.Servlet. If not, it inherits from
- Cheetah.Servlet.DummyServlet.
-
- Called by WebKit at the beginning of the web transaction.
-
- Called by WebKit at the end of the web transaction.
-
- Called by WebKit to produce the web transaction content. For a
- template-servlet, this means filling the template.
-
- Break reference cycles before deleting instance.
-
- The filesystem pathname of the template-servlet (as opposed to the
- URL path).
-
- The current Webware transaction.
-
- The current Webware application.
-
- The current Webware response.
-
- The current Webware request.
-
- The current Webware session.
-
- Call this method to insert text in the filled template output.
-
-
-Several other goodies are available to template-servlets under the
-{request} attribute, see section webware.input.
-
-{transaction}, {response}, {request} and {session} are created from
-the current transaction when WebKit calls {awake}, and don't exist
-otherwise. Calling {awake} yourself (rather than letting WebKit
-call it) will raise an exception because the {transaction} argument
-won't have the right attributes.
-
-\*{Inherited from WebKit.Servlet} These are accessible only if
-Cheetah knows Webware is installed. This listing is based on a CVS
-snapshot of Webware dated 22 September 2002, and may not include
-more recent changes.
-
-The same caveats about overriding these methods apply.
-
- The simple name of the class. Used by Webware's logging and
- debugging routines.
-
- Used by Webware's logging and debugging routines.
-
- True if the servlet can be multithreaded.
-
- True if the servlet can be used for another transaction after the
- current transaction is finished.
-
- Depreciated by {.serverSidePath()}.
-
-
-Optimizing templates
---------------------
-
-(tips.optimizing)
-
-Here are some things you can do to make your templates fill faster
-and user fewer CPU cycles. Before you put a lot of energy into
-this, however, make sure you really need to. In many situations,
-templates appear to initialize and fill instantaneously, so no
-optimization is necessary. If you do find a situation where your
-templates are filling slowly or taking too much memory or too many
-CPU cycles, we'd like to hear about it on the mailing list.
-
-Cache $placeholders whose values don't change frequently. (Section
-output.caching).
-
-Use {#set} for values that are very frequently used, especially if
-they come out of an expensive operation like a
-deeply.nested.structure or a database lookup. {#set} variables are
-set to Python local variables, which have a faster lookup time than
-Python globals or values from Cheetah's searchList.
-
-Moving variable lookups into Python code may provide a speedup in
-certain circumstances. If you're just reading {self} attributes,
-there's no reason to use NameMapper lookup ($placeholders) for
-them. NameMapper does a lot more work than simply looking up a
-{self} attribute.
-
-On the other hand, if you don't know exactly where the value will
-come from (maybe from {self}, maybe from the searchList, maybe from
-a CGI input variable, etc), it's easier to just make that an
-argument to your method, and then the template can handle all the
-NameMapper lookups for you:
-
-::
-
- #silent $myMethod($arg1, $arg2, $arg3)
-
-Otherwise you'd have to call {self.getVar('arg1')} etc in your
-method, which is more wordy, and tedious.
-
-PSP-style tags
---------------
-
-(tips.PSP)
-
-{<%= ... %>} and {<% ... %>} allow an escape to Python syntax
-inside the template. You do not need it to use Cheetah effectively,
-and we're hard pressed to think of a case to recommend it.
-Nevertheless, it's there in case you encounter a situation you
-can't express adequately in Cheetah syntax. For instance, to set a
-local variable to an elaborate initializer.
-
-{<%= ... %>} encloses a Python expression whose result will be
-printed in the output.
-
-{<% ... %>} encloses a Python statement or expression (or set of
-statements or expressions) that will be included as-is into the
-generated method. The statements themselves won't produce any
-output, but you can use the local function {write(EXPRESSION)} to
-produce your own output. (Actually, it's a method of a file-like
-object, but it looks like a local function.) This syntax also may
-be used to set a local variable with a complicated initializer.
-
-To access Cheetah services, you must use Python code like you would
-in an inherited Python class. For instance, use {self.getVar()} to
-look up something in the searchList.
-
-{ Warning:} { No error checking is done!} If you write:
-
-::
-
- <% break %> ## Wrong!
-
-you'll get a {SyntaxError} when you fill the template, but that's
-what you deserve.
-
-Note that these are PSP-{ style} tags, not PSP tags. A Cheetah
-template is not a PSP document, and you can't use PSP commands in
-it.
-
-Makefiles
----------
-
-(tips.Makefile)
-
-If your project has several templates and you get sick of typing
-"cheetah compile FILENAME.tmpl" all the time-much less remembering
-which commands to type when-and your system has the {make} command
-available, consider building a Makefile to make your life easier.
-
-Here's a simple Makefile that controls two templates,
-ErrorsTemplate and InquiryTemplate. Two external commands,
-{inquiry} and {receive}, depend on ErrorsTemplate.py. Aditionally,
-InquiryTemplate itself depends on ErrorsTemplate.
-
-::
-
- all: inquiry receive
-
- .PHONY: all receive inquiry printsource
-
- printsource:
- a2ps InquiryTemplate.tmpl ErrorsTemplate.tmpl
-
- ErrorsTemplate.py: ErrorsTemplate.tmpl
- cheetah compile ErrorsTemplate.tmpl
-
- InquiryTemplate.py: InquiryTemplate.tmpl ErrorsTemplate.py
- cheetah compile InquiryTemplate.tmpl
-
- inquiry: InquiryTemplate.py ErrorsTemplate.py
-
- receive: ErrorsTemplate.py
-
-Now you can type {make} anytime and it will recompile all the
-templates that have changed, while ignoring the ones that haven't.
-Or you can recompile all the templates {receive} needs by typing
-{make receive}. Or you can recompile only ErrorsTemplate by typing
-{make ErrorsTemplate}. There's also another target, "printsource":
-this sends a Postscript version of the project's source files to
-the printer. The .PHONY target is explained in the {make}
-documentation; essentially, you have it depend on every target that
-doesn't produce an output file with the same name as the target.
-
-Using Cheetah in a Multi-Threaded Application
----------------------------------------------
-
-(tips.threads)
-
-Template classes may be shared freely between threads. However,
-template instances should not be shared unless you either:
-
-
-- Use a lock (mutex) to serialize template fills, to prevent two
- threads from filling the template at the same time.
-
-- Avoid thread-unsafe features:
-
-
- - Modifying searchList values or instance variables.
-
- - Caching ({$\*var}, {#cache}, etc).
-
- - {#set global}, {#filter}, {#errorCatcher}.
-
-
- Any changes to these in one thread will be visible in other
- threads, causing them to give inconsistent output.
-
-
-About the only advantage in sharing a template instance is building
-up the placeholder cache. But template instances are so low
-overhead that it probably wouldn't take perceptibly longer to let
-each thread instantiate its own template instance. Only if you're
-filling templates several times a second would the time difference
-be significant, or if some of the placeholders trigger extremely
-slow calculations (e.g., parsing a long text file each time). The
-biggest overhead in Cheetah is importing the {Template} module in
-the first place, but that has to be done only once in a
-long-running application.
-
-You can use Python's {mutex} module for the lock, or any similar
-mutex. If you have to change searchList values or instance
-variables before each fill (which is usually the case), lock the
-mutex before doing this, and unlock it only after the fill is
-complete.
-
-For Webware servlets, you're probably better off using Webware's
-servlet caching rather than Cheetah's caching. Don't override the
-servlet's {.canBeThreaded()} method unless you avoid the unsafe
-operations listed above.
-
-Using Cheetah with gettext
---------------------------
-
-(tips.gettext)
-
-{ gettext} is a project for creating internationalized
-applications. For more details, visit
-http://docs.python.org/lib/module-gettext.html. gettext can be used
-with Cheetah to create internationalized applications, even for CJK
-character sets, but you must keep a couple things in mind:
-
-
-- xgettext is used on compiled templates, not on the templates
- themselves.
-
-- The way the NameMapper syntax gets compiled to Python gets in
- the way of the syntax that xgettext recognizes. Hence, a special
- case exists for the functions {\_}, {N\_}, and {ngettext}. If you
- need to use a different set of functions for marking strings for
- translation, you must set the Cheetah setting {gettextTokens} to a
- list of strings representing the names of the functions you are
- using to mark strings for translation.
-
-
-
diff --git a/docs/html/_sources/users_guide/webware.rst.txt b/docs/html/_sources/users_guide/webware.rst.txt
deleted file mode 100644
index bc36a2b..0000000
--- a/docs/html/_sources/users_guide/webware.rst.txt
+++ /dev/null
@@ -1,598 +0,0 @@
-Using Cheetah with Webware
-==========================
-
-(webware)
-
-{ Webware for Python} is a 'Python-Powered Internet Platform' that
-runs servlets in a manner similar to Java servlets. { WebKit} is
-the name of Webware's application server. For more details, please
-visit https://cito.github.io/w4py/.
-
-All comments below refer to the official version of Webware, the
-DamnSimple! offshoot at ?, and the now-abandoned
-WebwareExperimental implementation at
-http://sourceforge.net/projects/expwebware/, except where noted.
-All the implementations are 95% identical to the servlet writer:
-their differences lie in their internal structure and configuration
-files. One difference is that the executable you run to launch
-standard Webware is called {AppServer}, whereas in
-WebwareExperimental it's called {webkit}. But to servlets they're
-both "WebKit, Webware's application server", so it's one half dozen
-to the other. In this document, we generally use the term { WebKit}
-to refer to the currently-running application server.
-
-Installing Cheetah on a Webware system
---------------------------------------
-
-(webware.installing)
-
-Install Cheetah after you have installed Webware, following the
-instructions in chapter gettingStarted.
-
-The standard Cheetah test suite ('cheetah test') does not test
-Webware features. We plan to build a test suite that can run as a
-Webware servlet, containing Webware-specific tests, but that has
-not been built yet. In the meantime, you can make a simple template
-containing something like "This is a very small template.", compile
-it, put the \*.py template module in a servlet directory, and see
-if Webware serves it up OK.
-
-{ You must not have a Webware context called "Cheetah".} If you do,
-Webware will mistake that directory for the Cheetah module
-directory, and all template-servlets will bomb out with a
-"ImportError: no module named Template". (This applies only to the
-standard Webware; WebwareExperimental does not have contexts.)
-
-If Webware complains that it cannot find your servlet, make sure
-'.tmpl' is listed in 'ExtensionsToIgnore' in your
-'Application.config' file.
-
-Containment vs Inheritance
---------------------------
-
-(webware.background)
-
-Because Cheetah's core is flexible, there are many ways to
-integrate it with Webware servlets. There are two broad strategies:
-the { Inheritance approach} and the { Containment approach}. The
-difference is that in the Inheritance approach, your template
-object { is} the servlet, whereas in the Containment approach, the
-servlet is not a template but merely { uses} template(s) for
-portion(s) of its work.
-
-The Inheritance approach is recommended for new sites because it's
-simpler, and because it scales well for large sites with a
-site->section->subsection->servlet hierarchy. The Containment
-approach is better for existing servlets that you don't want to
-restructure. For instance, you can use the Containment approach to
-embed a discussion-forum table at the bottom of a web page.
-
-However, most people who use Cheetah extensively seem to prefer the
-Inheritance approach because even the most analytical servlet needs
-to produce { some} output, and it has to fit the site's look and
-feel { anyway}, so you may as well use a template-servlet as the
-place to put the output. Especially since it's so easy to add a
-template-servlet to a site once the framework is established. So we
-recommend you at least evaluate the effort that would be required
-to convert your site framework to template superclasses as
-described below, vs the greater flexibility and manageability it
-might give the site over the long term. You don't necessarily have
-to convert all your existing servlets right away: just build common
-site templates that are visually and behaviorally compatible with
-your specification, and use them for new servlets. Existing
-servlets can be converted later, if at all.
-
-Edmund Liam is preparing a section on a hybrid approach, in which
-the servlet is not a template, but still calls template(s) in an
-inheritance chain to produce the output. The advantage of this
-approach is that you aren't dealing with {Template} methods and
-Webware methods in the same object.
-
-The Containment Approach
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-(webware.containment)
-
-In the Containment approach, your servlet is not a template.
-Instead, it it makes its own arrangements to create and use
-template object(s) for whatever it needs. The servlet must
-explicitly call the template objects' {.respond()} (or
-{.\_\_str\_\_()}) method each time it needs to fill the template.
-This does not present the output to the user; it merely gives the
-output to the servlet. The servlet then calls its
-{#self.response().write()} method to send the output to the user.
-
-The developer has several choices for managing her templates. She
-can store the template definition in a string, file or database and
-call {Cheetah.Template.Template} manually on it. Or she can put the
-template definition in a \*.tmpl file and use { cheetah compile}
-(section howWorks.cheetah-compile) to convert it to a Python class
-in a \*.py module, and then import it into her servlet.
-
-Because template objects are not thread safe, you should not store
-one in a module variable and allow multiple servlets to fill it
-simultaneously. Instead, each servlet should instantiate its own
-template object. Template { classes}, however, are thread safe,
-since they don't change once created. So it's safe to store a
-template class in a module global variable.
-
-The Inheritance Approach
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-(webware.inheritance)
-
-In the Inheritance approach, your template object doubles as as
-Webware servlet, thus these are sometimes called {
-template-servlets}. { cheetah compile} (section
-howWorks.cheetah-compile) automatically creates modules containing
-valid Webware servlets. A servlet is a subclass of Webware's
-{WebKit.HTTPServlet} class, contained in a module with the same
-name as the servlet. WebKit uses the request URL to find the
-module, and then instantiates the servlet/template. The servlet
-must have a {.respond()} method (or {.respondToGet()},
-{.respondToPut()}, etc., but the Cheetah default is {.respond()}).
-Servlets created by {cheetah compile} meet all these requirements.
-
-(Cheetah has a Webware plugin that automatically converts a {.tmpl
-servlet file} into a {.py servlet file} when the {.tmpl servlet
-file} is requested by a browser. However, that plugin is currently
-unavailable because it's being redesigned. For now, use {cheetah
-compile} instead.)
-
-What about logic code? Cheetah promises to keep content (the
-placeholder values), graphic design (the template definition and is
-display logic), and algorithmic logic (complex calculations and
-side effects) separate. How? Where do you do form processing?
-
-The answer is that your template class can inherit from a pure
-Python class containing the analytical logic. You can either use
-the {#extends} directive in Cheetah to indicate the superclass(es),
-or write a Python {class} statement to do the same thing. See the
-template {Cheetah.Templates.SkeletonPage.tmpl} and its pure Python
-class {Cheetah.Templates.\_SkeletonPage.py} for an example of a
-template inheriting logic code. (See sections
-inheritanceEtc.extends and inheritanceEtc.implements for more
-information about {#extends} and {#implements}. They have to be
-used a certain right way.)
-
-If {#WebKit.HTTPServlet} is not available, Cheetah fakes it with a
-dummy class to satisfy the dependency. This allows servlets to be
-tested on the command line even on systems where Webware is not
-installed. This works only with servlets that don't call back into
-WebKit for information about the current web transaction, since
-there is no web transaction. Trying to access form input, for
-instance, will raise an exception because it depends on a live web
-request object, and in the dummy class the request object is
-{None}.
-
-Because Webware servlets must be valid Python modules, and
-"cheetah compile" can produce only valid module names, if you're
-converting an existing site that has .html filenames with hyphens
-(-), extra dots (.), etc, you'll have to rename them (and possibly
-use redirects).
-
-Site frameworks
----------------
-
-(webware.siteFrameworks)
-
-Web sites are normally arranged hierarchically, with certain
-features common to every page on the site, other features common to
-certain sections or subsections, and others unique to each page.
-You can model this easily with a hierarchy of classes, with
-specific servlets inheriting from their more general superclasses.
-Again, you can do this two ways, using Cheetah's { Containment}
-approach or { Inheritance} approach.
-
-In the Inheritance approach, parents provide {#block}s and children
-override them using {#def}. Each child {#extend}s its immediate
-parent. Only the leaf servlets need to be under WebKit's document
-root directory. The superclass servlets can live anywhere in the
-filesystem that's in the Python path. (You may want to modify your
-WebKit startup script to add that library directory to your
-{PYTHONPATH} before starting WebKit.)
-
-Section libraries.templates.skeletonPage contains information on a
-stock template that simplifies defining the basic HTML structure of
-your web page templates.
-
-In the Containment approach, your hierarchy of servlets are not
-templates, but each uses one or more templates as it wishes.
-Children provide callback methods to to produce the various
-portions of the page that are their responsibility, and parents
-call those methods. Webware's {WebKit.Page} and
-{WebKit.SidebarPage} classes operate like this.
-
-Note that the two approaches are not compatible! {WebKit.Page} was
-not designed to intermix with {Cheetah.Templates.SkeletonPage}.
-Choose either one or the other, or expect to do some integration
-work.
-
-If you come up with a different strategy you think is worth noting
-in this chapter, let us know.
-
-Directory structure
--------------------
-
-(webware.directoryStructure)
-
-Here's one way to organize your files for Webware+Cheetah.
-
-::
-
- www/ # Web root directory.
- site1.example.com/ # Site subdirectory.
- apache/ # Web server document root (for non-servlets).
- www/ # WebKit document root.
- index.py # http://site1.example.com/
- index.tmpl # Source for above.
- servlet2.py # http://site1.example.com/servlet2
- servlet2.tmpl # Source for above.
- lib/ # Directory for helper classes.
- Site.py # Site superclass ("#extends Site").
- Site.tmpl # Source for above.
- Logic.py # Logic class inherited by some template.
- webkit.config # Configuration file (for WebwareExperimental).
- Webware/ # Standard Webware's MakeAppWorkDir directory.
- AppServer # Startup program (for standard Webware).
- Configs/ # Configuration directory (for standard Webware).
- Application.config
- # Configuration file (for standard Webware).
- site2.example.org/ # Another virtual host on this computer....
-
-Initializing your template-servlet with Python code
----------------------------------------------------
-
-(webware.calculations)
-
-If you need a place to initialize variables or do calculations for
-your template-servlet, you can put it in an {.awake()} method
-because WebKit automatically calls that early when processing the
-web transaction. If you do override {.awake()}, be sure to call the
-superclass {.awake} method. You probably want to do that first so
-that you have access to the web transaction data {Servlet.awake}
-provides. You don't have to worry about whether your parent class
-has its own {.awake} method, just call it anyway, and somebody up
-the inheritance chain will respond, or at minimum {Servlet.awake}
-will respond. Section tips.callingSuperclassMethods gives examples
-of how to call a superclass method.
-
-As an alternative, you can put all your calculations in your own
-method and call it near the top of your template. ({#silent},
-section output.silent).
-
-Form processing
----------------
-
-(webware.form)
-
-There are many ways to display and process HTML forms with Cheetah.
-But basically, all form processing involves two steps.
-
-
-#. Display the form.
-
-#. In the next web request, read the parameters the user submitted,
- check for user errors, perform any side effects (e.g.,
- reading/writing a database or session data) and present the user an
- HTML response or another form.
-
-
-The second step may involve choosing between several templates to
-fill (or several servlets to redirect to), or a big
-if-elif-elif-else construct to display a different portion of the
-template depending on the situation.
-
-In the oldest web applications, step 1 and step 2 were handled by
-separate objects. Step 1 was a static HTML file, and step 2 was a
-CGI script. Frequently, a better strategy is to have a single
-servlet handle both steps. That way, the servlet has better control
-over the entire situation, and if the user submits unacceptable
-data, the servlet can redisplay the form with a "try again" error
-message at the top and and all the previous input filled in. The
-servlet can use the presence or absence of certain CGI parameters
-(e.g., the submit button, or a hidden mode field) to determine
-which step to take.
-
-One neat way to build a servlet that can handle both the form
-displaying and form processing is like this:
-
-
-#. Put your form HTML into an ordinary template-servlet. In each
- input field, use a placeholder for the value of the {VALUE=}
- attribue. Place another placeholder next to each field, for that
- field's error message.
-
-#. Above the form, put a {$processFormData} method call.
-
-#. Define that method in a Python class your template {#extend}s.
- (Or if it's a simple method, you can define it in a {#def}.) The
- method should:
-
-
- #. Get the form input if any.
-
- #. If the input variable corresponding to the submit field is
- empty, there is no form input, so we're showing the form for the
- first time. Initialize all VALUE= variables to their default value
- (usually ""), and all error variables to "". Return "", which will
- be the value for {$processFormData}.
-
- #. If the submit variable is not empty, fill the VALUE= variables
- with the input data the user just submitted.
-
- #. Now check the input for errors and put error messages in the
- error placeholders.
-
- #. If there were any user errors, return a general error message
- string; this will be the value for {$processFormData}.
-
- #. If there were no errors, do whatever the form's job is (e.g.,
- update a database) and return a success message; this will be the
- value for {$processFormData}.
-
-
-#. The top of the page will show your success/failure message (or
- nothing the first time around), with the form below. If there are
- errors, the user will have a chance to correct them. After a
- successful submit, the form will appear again, so the user can
- either review their entry, or change it and submit it again.
- Depending on the application, this may make the servlet update the
- same database record again, or it may generate a new record.
-
-
-{FunFormKit} is a third-party Webware package that makes it easier
-to produce forms and handle their logic. It has been successfully
-been used with Cheetah. You can download FunFormKit from
-http://colorstudy.net/software/funformkit/ and try it out for
-yourself.
-
-Form input, cookies, session variables and web server variables
----------------------------------------------------------------
-
-(webware.input)
-
-General variable tips that also apply to servlets are in section
-tips.placeholder.
-
-To look up a CGI GET or POST parameter (with POST overriding):
-
-::
-
- $request.field('myField')
- self.request().field('myField')
-
-These will fail if Webware is not available, because {$request}
-(aka {self.request()} will be {None} rather than a Webware
-{WebKit.Request} object. If you plan to read a lot of CGI
-parameters, you may want to put the {.fields} method into a local
-variable for convenience:
-
-::
-
- #set $fields = $request.fields
- $fields.myField
-
-But remember to do complicated calculations in Python, and assign
-the results to simple variables in the searchList for display.
-These {$request} forms are useful only for occasions where you just
-need one or two simple request items that going to Python for would
-be overkill.
-
-To get a cookie or session parameter, subsitute "cookie" or
-"session" for "field" above. To get a dictionary of all CGI
-parameters, substitute "fields" (ditto for "cookies"). To verify a
-field exists, substitute "hasField" (ditto for "hasCookie").
-
-Other useful request goodies:
-
-::
-
- ## Defined in WebKit.Request
- $request.field('myField', 'default value')
- $request.time ## Time this request began in Unix ticks.
- $request.timeStamp ## Time in human-readable format ('asctime' format).
- ## Defined in WebKit.HTTPRequest
- $request.hasField.myField ## Is a CGI parameter defined?
- $request.fields ## Dictionary of all CGI parameters.
- $request.cookie.myCookie ## A cookie parameter (also .hasCookie, .cookies).
- $request.value.myValue ## A field or cookie variable (field overrides)
- ## (also .hasValue).
- $request.session.mySessionVar # A session variable.
- $request.extraURLPath ## URL path components to right of servlet, if any.
- $request.serverDictionary ## Dict of environmental vars from web server.
- $request.remoteUser ## Authenticated username. HTTPRequest.py source
- ## suggests this is broken and always returns None.
- $request.remoteAddress ## User's IP address (string).
- $request.remoteName ## User's domain name, or IP address if none.
- $request.urlPath ## URI of this servlet.
- $request.urlPathDir ## URI of the directory containing this servlet.
- $request.serverSidePath ## Absolute path of this servlet on local filesystem.
- $request.serverURL ## URL of this servlet, without "http://" prefix,
- ## extra path info or query string.
- $request.serverURLDir ## URL of this servlet's directory, without "http://".
- $log("message") ## Put a message in the Webware server log. (If you
- ## define your own 'log' variable, it will override
- ## this; use $self.log("message") in that case.
-
-.webInput()
-~~~~~~~~~~~
-
-(webware.webInput)
-
-From the method docstring:
-
-::
-
- def webInput(self, names, namesMulti=(), default='', src='f',
- defaultInt=0, defaultFloat=0.00, badInt=0, badFloat=0.00, debug=False):
-
- This method places the specified GET/POST fields, cookies or session variables
- into a dictionary, which is both returned and put at the beginning of the
- searchList. It handles:
- * single vs multiple values
- * conversion to integer or float for specified names
- * default values/exceptions for missing or bad values
- * printing a snapshot of all values retrieved for debugging
- All the 'default*' and 'bad*' arguments have "use or raise" behavior, meaning
- that if they're a subclass of Exception, they're raised. If they're anything
- else, that value is substituted for the missing/bad value.
-
- The simplest usage is:
-
- #silent $webInput(['choice'])
- $choice
-
- dic = self.webInput(['choice'])
- write(dic['choice'])
-
- Both these examples retrieves the GET/POST field 'choice' and print it. If you
- leave off the "#silent", all the values would be printed too. But a better way
- to preview the values is
-
- #silent $webInput(['name'], $debug=1)
-
- because this pretty-prints all the values inside HTML <PRE> tags.
-
- Since we didn't specify any coversions, the value is a string. It's a "single"
- value because we specified it in 'names' rather than 'namesMulti'. Single
- values work like this:
- * If one value is found, take it.
- * If several values are found, choose one arbitrarily and ignore the rest.
- * If no values are found, use or raise the appropriate 'default*' value.
-
- Multi values work like this:
- * If one value is found, put it in a list.
- * If several values are found, leave them in a list.
- * If no values are found, use the empty list ([]). The 'default*'
- arguments are *not* consulted in this case.
-
- Example: assume 'days' came from a set of checkboxes or a multiple combo box
- on a form, and the user chose "Monday", "Tuesday" and "Thursday".
-
- #silent $webInput([], ['days'])
- The days you chose are: #slurp
- #for $day in $days
- $day #slurp
- #end for
-
- dic = self.webInput([], ['days'])
- write("The days you chose are: ")
- for day in dic['days']:
- write(day + " ")
-
- Both these examples print: "The days you chose are: Monday Tuesday Thursday".
-
- By default, missing strings are replaced by "" and missing/bad numbers by zero.
- (A "bad number" means the converter raised an exception for it, usually because
- of non-numeric characters in the value.) This mimics Perl/PHP behavior, and
- simplifies coding for many applications where missing/bad values *should* be
- blank/zero. In those relatively few cases where you must distinguish between
- ""/zero on the one hand and missing/bad on the other, change the appropriate
- 'default*' and 'bad*' arguments to something like:
- * None
- * another constant value
- * $NonNumericInputError/self.NonNumericInputError
- * $ValueError/ValueError
- (NonNumericInputError is defined in this class and is useful for
- distinguishing between bad input vs a TypeError/ValueError
- thrown for some other reason.)
-
- Here's an example using multiple values to schedule newspaper deliveries.
- 'checkboxes' comes from a form with checkboxes for all the days of the week.
- The days the user previously chose are preselected. The user checks/unchecks
- boxes as desired and presses Submit. The value of 'checkboxes' is a list of
- checkboxes that were checked when Submit was pressed. Our task now is to
- turn on the days the user checked, turn off the days he unchecked, and leave
- on or off the days he didn't change.
-
- dic = self.webInput([], ['dayCheckboxes'])
- wantedDays = dic['dayCheckboxes'] # The days the user checked.
- for day, on in self.getAllValues():
- if not on and day in wantedDays:
- self.TurnOn(day)
- # ... Set a flag or insert a database record ...
- elif on and day not in wantedDays:
- self.TurnOff(day)
- # ... Unset a flag or delete a database record ...
-
- 'source' allows you to look up the variables from a number of different
- sources:
- 'f' fields (CGI GET/POST parameters)
- 'c' cookies
- 's' session variables
- 'v' "values", meaning fields or cookies
-
- In many forms, you're dealing only with strings, which is why the
- 'default' argument is third and the numeric arguments are banished to
- the end. But sometimes you want automatic number conversion, so that
- you can do numeric comparisons in your templates without having to
- write a bunch of conversion/exception handling code. Example:
-
- #silent $webInput(['name', 'height:int'])
- $name is $height cm tall.
- #if $height >= 300
- Wow, you're tall!
- #else
- Pshaw, you're short.
- #end if
-
- dic = self.webInput(['name', 'height:int'])
- name = dic[name]
- height = dic[height]
- write("%s is %s cm tall." % (name, height))
- if height > 300:
- write("Wow, you're tall!")
- else:
- write("Pshaw, you're short.")
-
- To convert a value to a number, suffix ":int" or ":float" to the name. The
- method will search first for a "height:int" variable and then for a "height"
- variable. (It will be called "height" in the final dictionary.) If a numeric
- conversion fails, use or raise 'badInt' or 'badFloat'. Missing values work
- the same way as for strings, except the default is 'defaultInt' or
- 'defaultFloat' instead of 'default'.
-
- If a name represents an uploaded file, the entire file will be read into
- memory. For more sophisticated file-upload handling, leave that name out of
- the list and do your own handling, or wait for Cheetah.Utils.UploadFileMixin.
-
- This mixin class works only in a subclass that also inherits from
- Webware's Servlet or HTTPServlet. Otherwise you'll get an AttributeError
- on 'self.request'.
-
- EXCEPTIONS: ValueError if 'source' is not one of the stated characters.
- TypeError if a conversion suffix is not ":int" or ":float".
-
-More examples
--------------
-
-(webware.examples)
-
-Example A - a standalone servlet
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Example B - a servlet under a site framework
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Example C - several servlets with a common template
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Other Tips
-----------
-
-(webware.otherTips)
-
-If your servlet accesses external files (e.g., via an {#include}
-directive), remember that the current directory is not necessarily
-directory the servlet is in. It's probably some other directory
-WebKit chose. To find a file relative to the servlet's directory,
-prefix the path with whatever {self.serverSidePath()} returns (from
-{Servlet.serverSidePath()}.
-
-If you don't understand how {#extends} and {#implements} work, and
-about a template's main method, read the chapter on inheritance
-(sections inheritanceEtc.extends and inheritanceEtc.implements).
-This may help you avoid buggy servlets.
-
-
diff --git a/docs/html/_static/ajax-loader.gif b/docs/html/_static/ajax-loader.gif
deleted file mode 100644
index 61faf8c..0000000
--- a/docs/html/_static/ajax-loader.gif
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/basic.css b/docs/html/_static/basic.css
deleted file mode 100644
index 3c7223b..0000000
--- a/docs/html/_static/basic.css
+++ /dev/null
@@ -1,643 +0,0 @@
-/*
- * basic.css
- * ~~~~~~~~~
- *
- * Sphinx stylesheet -- basic theme.
- *
- * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/* -- main layout ----------------------------------------------------------- */
-
-div.clearer {
- clear: both;
-}
-
-/* -- relbar ---------------------------------------------------------------- */
-
-div.related {
- width: 100%;
- font-size: 90%;
-}
-
-div.related h3 {
- display: none;
-}
-
-div.related ul {
- margin: 0;
- padding: 0 0 0 10px;
- list-style: none;
-}
-
-div.related li {
- display: inline;
-}
-
-div.related li.right {
- float: right;
- margin-right: 5px;
-}
-
-/* -- sidebar --------------------------------------------------------------- */
-
-div.sphinxsidebarwrapper {
- padding: 10px 5px 0 10px;
-}
-
-div.sphinxsidebar {
- float: left;
- width: 230px;
- margin-left: -100%;
- font-size: 90%;
- word-wrap: break-word;
- overflow-wrap : break-word;
-}
-
-div.sphinxsidebar ul {
- list-style: none;
-}
-
-div.sphinxsidebar ul ul,
-div.sphinxsidebar ul.want-points {
- margin-left: 20px;
- list-style: square;
-}
-
-div.sphinxsidebar ul ul {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-div.sphinxsidebar form {
- margin-top: 10px;
-}
-
-div.sphinxsidebar input {
- border: 1px solid #98dbcc;
- font-family: sans-serif;
- font-size: 1em;
-}
-
-div.sphinxsidebar #searchbox input[type="text"] {
- width: 170px;
-}
-
-img {
- border: 0;
- max-width: 100%;
-}
-
-/* -- search page ----------------------------------------------------------- */
-
-ul.search {
- margin: 10px 0 0 20px;
- padding: 0;
-}
-
-ul.search li {
- padding: 5px 0 5px 20px;
- background-image: url(file.png);
- background-repeat: no-repeat;
- background-position: 0 7px;
-}
-
-ul.search li a {
- font-weight: bold;
-}
-
-ul.search li div.context {
- color: #888;
- margin: 2px 0 0 30px;
- text-align: left;
-}
-
-ul.keywordmatches li.goodmatch a {
- font-weight: bold;
-}
-
-/* -- index page ------------------------------------------------------------ */
-
-table.contentstable {
- width: 90%;
- margin-left: auto;
- margin-right: auto;
-}
-
-table.contentstable p.biglink {
- line-height: 150%;
-}
-
-a.biglink {
- font-size: 1.3em;
-}
-
-span.linkdescr {
- font-style: italic;
- padding-top: 5px;
- font-size: 90%;
-}
-
-/* -- general index --------------------------------------------------------- */
-
-table.indextable {
- width: 100%;
-}
-
-table.indextable td {
- text-align: left;
- vertical-align: top;
-}
-
-table.indextable ul {
- margin-top: 0;
- margin-bottom: 0;
- list-style-type: none;
-}
-
-table.indextable > tbody > tr > td > ul {
- padding-left: 0em;
-}
-
-table.indextable tr.pcap {
- height: 10px;
-}
-
-table.indextable tr.cap {
- margin-top: 10px;
- background-color: #f2f2f2;
-}
-
-img.toggler {
- margin-right: 3px;
- margin-top: 3px;
- cursor: pointer;
-}
-
-div.modindex-jumpbox {
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
- margin: 1em 0 1em 0;
- padding: 0.4em;
-}
-
-div.genindex-jumpbox {
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
- margin: 1em 0 1em 0;
- padding: 0.4em;
-}
-
-/* -- domain module index --------------------------------------------------- */
-
-table.modindextable td {
- padding: 2px;
- border-collapse: collapse;
-}
-
-/* -- general body styles --------------------------------------------------- */
-
-div.body p, div.body dd, div.body li, div.body blockquote {
- -moz-hyphens: auto;
- -ms-hyphens: auto;
- -webkit-hyphens: auto;
- hyphens: auto;
-}
-
-a.headerlink {
- visibility: hidden;
-}
-
-h1:hover > a.headerlink,
-h2:hover > a.headerlink,
-h3:hover > a.headerlink,
-h4:hover > a.headerlink,
-h5:hover > a.headerlink,
-h6:hover > a.headerlink,
-dt:hover > a.headerlink,
-caption:hover > a.headerlink,
-p.caption:hover > a.headerlink,
-div.code-block-caption:hover > a.headerlink {
- visibility: visible;
-}
-
-div.body p.caption {
- text-align: inherit;
-}
-
-div.body td {
- text-align: left;
-}
-
-.first {
- margin-top: 0 !important;
-}
-
-p.rubric {
- margin-top: 30px;
- font-weight: bold;
-}
-
-img.align-left, .figure.align-left, object.align-left {
- clear: left;
- float: left;
- margin-right: 1em;
-}
-
-img.align-right, .figure.align-right, object.align-right {
- clear: right;
- float: right;
- margin-left: 1em;
-}
-
-img.align-center, .figure.align-center, object.align-center {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-.align-left {
- text-align: left;
-}
-
-.align-center {
- text-align: center;
-}
-
-.align-right {
- text-align: right;
-}
-
-/* -- sidebars -------------------------------------------------------------- */
-
-div.sidebar {
- margin: 0 0 0.5em 1em;
- border: 1px solid #ddb;
- padding: 7px 7px 0 7px;
- background-color: #ffe;
- width: 40%;
- float: right;
-}
-
-p.sidebar-title {
- font-weight: bold;
-}
-
-/* -- topics ---------------------------------------------------------------- */
-
-div.topic {
- border: 1px solid #ccc;
- padding: 7px 7px 0 7px;
- margin: 10px 0 10px 0;
-}
-
-p.topic-title {
- font-size: 1.1em;
- font-weight: bold;
- margin-top: 10px;
-}
-
-/* -- admonitions ----------------------------------------------------------- */
-
-div.admonition {
- margin-top: 10px;
- margin-bottom: 10px;
- padding: 7px;
-}
-
-div.admonition dt {
- font-weight: bold;
-}
-
-div.admonition dl {
- margin-bottom: 0;
-}
-
-p.admonition-title {
- margin: 0px 10px 5px 0px;
- font-weight: bold;
-}
-
-div.body p.centered {
- text-align: center;
- margin-top: 25px;
-}
-
-/* -- tables ---------------------------------------------------------------- */
-
-table.docutils {
- border: 0;
- border-collapse: collapse;
-}
-
-table caption span.caption-number {
- font-style: italic;
-}
-
-table caption span.caption-text {
-}
-
-table.docutils td, table.docutils th {
- padding: 1px 8px 1px 5px;
- border-top: 0;
- border-left: 0;
- border-right: 0;
- border-bottom: 1px solid #aaa;
-}
-
-table.footnote td, table.footnote th {
- border: 0 !important;
-}
-
-th {
- text-align: left;
- padding-right: 5px;
-}
-
-table.citation {
- border-left: solid 1px gray;
- margin-left: 1px;
-}
-
-table.citation td {
- border-bottom: none;
-}
-
-/* -- figures --------------------------------------------------------------- */
-
-div.figure {
- margin: 0.5em;
- padding: 0.5em;
-}
-
-div.figure p.caption {
- padding: 0.3em;
-}
-
-div.figure p.caption span.caption-number {
- font-style: italic;
-}
-
-div.figure p.caption span.caption-text {
-}
-
-/* -- field list styles ----------------------------------------------------- */
-
-table.field-list td, table.field-list th {
- border: 0 !important;
-}
-
-.field-list ul {
- margin: 0;
- padding-left: 1em;
-}
-
-.field-list p {
- margin: 0;
-}
-
-.field-name {
- -moz-hyphens: manual;
- -ms-hyphens: manual;
- -webkit-hyphens: manual;
- hyphens: manual;
-}
-
-/* -- other body styles ----------------------------------------------------- */
-
-ol.arabic {
- list-style: decimal;
-}
-
-ol.loweralpha {
- list-style: lower-alpha;
-}
-
-ol.upperalpha {
- list-style: upper-alpha;
-}
-
-ol.lowerroman {
- list-style: lower-roman;
-}
-
-ol.upperroman {
- list-style: upper-roman;
-}
-
-dl {
- margin-bottom: 15px;
-}
-
-dd p {
- margin-top: 0px;
-}
-
-dd ul, dd table {
- margin-bottom: 10px;
-}
-
-dd {
- margin-top: 3px;
- margin-bottom: 10px;
- margin-left: 30px;
-}
-
-dt:target, span.highlighted {
- background-color: #fbe54e;
-}
-
-rect.highlighted {
- fill: #fbe54e;
-}
-
-dl.glossary dt {
- font-weight: bold;
- font-size: 1.1em;
-}
-
-.optional {
- font-size: 1.3em;
-}
-
-.sig-paren {
- font-size: larger;
-}
-
-.versionmodified {
- font-style: italic;
-}
-
-.system-message {
- background-color: #fda;
- padding: 5px;
- border: 3px solid red;
-}
-
-.footnote:target {
- background-color: #ffa;
-}
-
-.line-block {
- display: block;
- margin-top: 1em;
- margin-bottom: 1em;
-}
-
-.line-block .line-block {
- margin-top: 0;
- margin-bottom: 0;
- margin-left: 1.5em;
-}
-
-.guilabel, .menuselection {
- font-family: sans-serif;
-}
-
-.accelerator {
- text-decoration: underline;
-}
-
-.classifier {
- font-style: oblique;
-}
-
-abbr, acronym {
- border-bottom: dotted 1px;
- cursor: help;
-}
-
-/* -- code displays --------------------------------------------------------- */
-
-pre {
- overflow: auto;
- overflow-y: hidden; /* fixes display issues on Chrome browsers */
-}
-
-span.pre {
- -moz-hyphens: none;
- -ms-hyphens: none;
- -webkit-hyphens: none;
- hyphens: none;
-}
-
-td.linenos pre {
- padding: 5px 0px;
- border: 0;
- background-color: transparent;
- color: #aaa;
-}
-
-table.highlighttable {
- margin-left: 0.5em;
-}
-
-table.highlighttable td {
- padding: 0 0.5em 0 0.5em;
-}
-
-div.code-block-caption {
- padding: 2px 5px;
- font-size: small;
-}
-
-div.code-block-caption code {
- background-color: transparent;
-}
-
-div.code-block-caption + div > div.highlight > pre {
- margin-top: 0;
-}
-
-div.code-block-caption span.caption-number {
- padding: 0.1em 0.3em;
- font-style: italic;
-}
-
-div.code-block-caption span.caption-text {
-}
-
-div.literal-block-wrapper {
- padding: 1em 1em 0;
-}
-
-div.literal-block-wrapper div.highlight {
- margin: 0;
-}
-
-code.descname {
- background-color: transparent;
- font-weight: bold;
- font-size: 1.2em;
-}
-
-code.descclassname {
- background-color: transparent;
-}
-
-code.xref, a code {
- background-color: transparent;
- font-weight: bold;
-}
-
-h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
- background-color: transparent;
-}
-
-.viewcode-link {
- float: right;
-}
-
-.viewcode-back {
- float: right;
- font-family: sans-serif;
-}
-
-div.viewcode-block:target {
- margin: -1px -10px;
- padding: 0 10px;
-}
-
-/* -- math display ---------------------------------------------------------- */
-
-img.math {
- vertical-align: middle;
-}
-
-div.body div.math p {
- text-align: center;
-}
-
-span.eqno {
- float: right;
-}
-
-span.eqno a.headerlink {
- position: relative;
- left: 0px;
- z-index: 1;
-}
-
-div.math:hover a.headerlink {
- visibility: visible;
-}
-
-/* -- printout stylesheet --------------------------------------------------- */
-
-@media print {
- div.document,
- div.documentwrapper,
- div.bodywrapper {
- margin: 0 !important;
- width: 100%;
- }
-
- div.sphinxsidebar,
- div.related,
- div.footer,
- #top-link {
- display: none;
- }
-} \ No newline at end of file
diff --git a/docs/html/_static/comment-bright.png b/docs/html/_static/comment-bright.png
deleted file mode 100644
index 15e27ed..0000000
--- a/docs/html/_static/comment-bright.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/comment-close.png b/docs/html/_static/comment-close.png
deleted file mode 100644
index 4d91bcf..0000000
--- a/docs/html/_static/comment-close.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/comment.png b/docs/html/_static/comment.png
deleted file mode 100644
index dfbc0cb..0000000
--- a/docs/html/_static/comment.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/contents.png b/docs/html/_static/contents.png
deleted file mode 100644
index 6c59aa1..0000000
--- a/docs/html/_static/contents.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/doctools.js b/docs/html/_static/doctools.js
deleted file mode 100644
index 24992e6..0000000
--- a/docs/html/_static/doctools.js
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * doctools.js
- * ~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for all documentation.
- *
- * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-/**
- * select a different prefix for underscore
- */
-$u = _.noConflict();
-
-/**
- * make the code below compatible with browsers without
- * an installed firebug like debugger
-if (!window.console || !console.firebug) {
- var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
- "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
- "profile", "profileEnd"];
- window.console = {};
- for (var i = 0; i < names.length; ++i)
- window.console[names[i]] = function() {};
-}
- */
-
-/**
- * small helper function to urldecode strings
- */
-jQuery.urldecode = function(x) {
- return decodeURIComponent(x).replace(/\+/g, ' ');
-};
-
-/**
- * small helper function to urlencode strings
- */
-jQuery.urlencode = encodeURIComponent;
-
-/**
- * This function returns the parsed url parameters of the
- * current request. Multiple values per key are supported,
- * it will always return arrays of strings for the value parts.
- */
-jQuery.getQueryParameters = function(s) {
- if (typeof s === 'undefined')
- s = document.location.search;
- var parts = s.substr(s.indexOf('?') + 1).split('&');
- var result = {};
- for (var i = 0; i < parts.length; i++) {
- var tmp = parts[i].split('=', 2);
- var key = jQuery.urldecode(tmp[0]);
- var value = jQuery.urldecode(tmp[1]);
- if (key in result)
- result[key].push(value);
- else
- result[key] = [value];
- }
- return result;
-};
-
-/**
- * highlight a given string on a jquery object by wrapping it in
- * span elements with the given class name.
- */
-jQuery.fn.highlightText = function(text, className) {
- function highlight(node, addItems) {
- if (node.nodeType === 3) {
- var val = node.nodeValue;
- var pos = val.toLowerCase().indexOf(text);
- if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
- var span;
- var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
- if (isInSVG) {
- span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
- } else {
- span = document.createElement("span");
- span.className = className;
- }
- span.appendChild(document.createTextNode(val.substr(pos, text.length)));
- node.parentNode.insertBefore(span, node.parentNode.insertBefore(
- document.createTextNode(val.substr(pos + text.length)),
- node.nextSibling));
- node.nodeValue = val.substr(0, pos);
- if (isInSVG) {
- var bbox = span.getBBox();
- var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
- rect.x.baseVal.value = bbox.x;
- rect.y.baseVal.value = bbox.y;
- rect.width.baseVal.value = bbox.width;
- rect.height.baseVal.value = bbox.height;
- rect.setAttribute('class', className);
- var parentOfText = node.parentNode.parentNode;
- addItems.push({
- "parent": node.parentNode,
- "target": rect});
- }
- }
- }
- else if (!jQuery(node).is("button, select, textarea")) {
- jQuery.each(node.childNodes, function() {
- highlight(this, addItems);
- });
- }
- }
- var addItems = [];
- var result = this.each(function() {
- highlight(this, addItems);
- });
- for (var i = 0; i < addItems.length; ++i) {
- jQuery(addItems[i].parent).before(addItems[i].target);
- }
- return result;
-};
-
-/*
- * backward compatibility for jQuery.browser
- * This will be supported until firefox bug is fixed.
- */
-if (!jQuery.browser) {
- jQuery.uaMatch = function(ua) {
- ua = ua.toLowerCase();
-
- var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
- /(webkit)[ \/]([\w.]+)/.exec(ua) ||
- /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
- /(msie) ([\w.]+)/.exec(ua) ||
- ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
- [];
-
- return {
- browser: match[ 1 ] || "",
- version: match[ 2 ] || "0"
- };
- };
- jQuery.browser = {};
- jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
-}
-
-/**
- * Small JavaScript module for the documentation.
- */
-var Documentation = {
-
- init : function() {
- this.fixFirefoxAnchorBug();
- this.highlightSearchWords();
- this.initIndexTable();
-
- },
-
- /**
- * i18n support
- */
- TRANSLATIONS : {},
- PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
- LOCALE : 'unknown',
-
- // gettext and ngettext don't access this so that the functions
- // can safely bound to a different name (_ = Documentation.gettext)
- gettext : function(string) {
- var translated = Documentation.TRANSLATIONS[string];
- if (typeof translated === 'undefined')
- return string;
- return (typeof translated === 'string') ? translated : translated[0];
- },
-
- ngettext : function(singular, plural, n) {
- var translated = Documentation.TRANSLATIONS[singular];
- if (typeof translated === 'undefined')
- return (n == 1) ? singular : plural;
- return translated[Documentation.PLURALEXPR(n)];
- },
-
- addTranslations : function(catalog) {
- for (var key in catalog.messages)
- this.TRANSLATIONS[key] = catalog.messages[key];
- this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
- this.LOCALE = catalog.locale;
- },
-
- /**
- * add context elements like header anchor links
- */
- addContextElements : function() {
- $('div[id] > :header:first').each(function() {
- $('<a class="headerlink">\u00B6</a>').
- attr('href', '#' + this.id).
- attr('title', _('Permalink to this headline')).
- appendTo(this);
- });
- $('dt[id]').each(function() {
- $('<a class="headerlink">\u00B6</a>').
- attr('href', '#' + this.id).
- attr('title', _('Permalink to this definition')).
- appendTo(this);
- });
- },
-
- /**
- * workaround a firefox stupidity
- * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
- */
- fixFirefoxAnchorBug : function() {
- if (document.location.hash)
- window.setTimeout(function() {
- document.location.href += '';
- }, 10);
- },
-
- /**
- * highlight the search words provided in the url in the text
- */
- highlightSearchWords : function() {
- var params = $.getQueryParameters();
- var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
- if (terms.length) {
- var body = $('div.body');
- if (!body.length) {
- body = $('body');
- }
- window.setTimeout(function() {
- $.each(terms, function() {
- body.highlightText(this.toLowerCase(), 'highlighted');
- });
- }, 10);
- $('<p class="highlight-link"><a href="javascript:Documentation.' +
- 'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
- .appendTo($('#searchbox'));
- }
- },
-
- /**
- * init the domain index toggle buttons
- */
- initIndexTable : function() {
- var togglers = $('img.toggler').click(function() {
- var src = $(this).attr('src');
- var idnum = $(this).attr('id').substr(7);
- $('tr.cg-' + idnum).toggle();
- if (src.substr(-9) === 'minus.png')
- $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
- else
- $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
- }).css('display', '');
- if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
- togglers.click();
- }
- },
-
- /**
- * helper function to hide the search marks again
- */
- hideSearchWords : function() {
- $('#searchbox .highlight-link').fadeOut(300);
- $('span.highlighted').removeClass('highlighted');
- },
-
- /**
- * make the url absolute
- */
- makeURL : function(relativeURL) {
- return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
- },
-
- /**
- * get the current relative url
- */
- getCurrentURL : function() {
- var path = document.location.pathname;
- var parts = path.split(/\//);
- $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
- if (this === '..')
- parts.pop();
- });
- var url = parts.join('/');
- return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
- },
-
- initOnKeyListeners: function() {
- $(document).keyup(function(event) {
- var activeElementType = document.activeElement.tagName;
- // don't navigate when in search box or textarea
- if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
- switch (event.keyCode) {
- case 37: // left
- var prevHref = $('link[rel="prev"]').prop('href');
- if (prevHref) {
- window.location.href = prevHref;
- return false;
- }
- case 39: // right
- var nextHref = $('link[rel="next"]').prop('href');
- if (nextHref) {
- window.location.href = nextHref;
- return false;
- }
- }
- }
- });
- }
-};
-
-// quick alias for translations
-_ = Documentation.gettext;
-
-$(document).ready(function() {
- Documentation.init();
-}); \ No newline at end of file
diff --git a/docs/html/_static/down-pressed.png b/docs/html/_static/down-pressed.png
deleted file mode 100644
index 5756c8c..0000000
--- a/docs/html/_static/down-pressed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/down.png b/docs/html/_static/down.png
deleted file mode 100644
index 1b3bdad..0000000
--- a/docs/html/_static/down.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/file.png b/docs/html/_static/file.png
deleted file mode 100644
index a858a41..0000000
--- a/docs/html/_static/file.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/jquery-3.1.0.js b/docs/html/_static/jquery-3.1.0.js
deleted file mode 100644
index f2fc274..0000000
--- a/docs/html/_static/jquery-3.1.0.js
+++ /dev/null
@@ -1,10074 +0,0 @@
-/*eslint-disable no-unused-vars*/
-/*!
- * jQuery JavaScript Library v3.1.0
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2016-07-07T21:44Z
- */
-( function( global, factory ) {
-
- "use strict";
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
-
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-"use strict";
-
-var arr = [];
-
-var document = window.document;
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-
-
- function DOMEval( code, doc ) {
- doc = doc || document;
-
- var script = doc.createElement( "script" );
-
- script.text = code;
- doc.head.appendChild( script ).parentNode.removeChild( script );
- }
-/* global Symbol */
-// Defining this global in .eslintrc would create a danger of using the global
-// unguarded in another place, it seems safer to define global only for this module
-
-
-
-var
- version = "3.1.0",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
-
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android <=4.0 only
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([a-z])/g,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn = jQuery.prototype = {
-
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num != null ?
-
- // Return just the one element from the set
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
- // Return all the elements in a clean array
- slice.call( this );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- each: function( callback ) {
- return jQuery.each( this, callback );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map( this, function( elem, i ) {
- return callback.call( elem, i, elem );
- } ) );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor();
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: arr.sort,
- splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[ 0 ] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // Skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
- target = {};
- }
-
- // Extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
-
- // Only deal with non-null/undefined values
- if ( ( options = arguments[ i ] ) != null ) {
-
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
- ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
-
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray( src ) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject( src ) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend( {
-
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- isFunction: function( obj ) {
- return jQuery.type( obj ) === "function";
- },
-
- isArray: Array.isArray,
-
- isWindow: function( obj ) {
- return obj != null && obj === obj.window;
- },
-
- isNumeric: function( obj ) {
-
- // As of jQuery 3.0, isNumeric is limited to
- // strings and numbers (primitives or objects)
- // that can be coerced to finite numbers (gh-2662)
- var type = jQuery.type( obj );
- return ( type === "number" || type === "string" ) &&
-
- // parseFloat NaNs numeric-cast false positives ("")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- !isNaN( obj - parseFloat( obj ) );
- },
-
- isPlainObject: function( obj ) {
- var proto, Ctor;
-
- // Detect obvious negatives
- // Use toString instead of jQuery.type to catch host objects
- if ( !obj || toString.call( obj ) !== "[object Object]" ) {
- return false;
- }
-
- proto = getProto( obj );
-
- // Objects with no prototype (e.g., `Object.create( null )`) are plain
- if ( !proto ) {
- return true;
- }
-
- // Objects with prototype are plain iff they were constructed by a global Object function
- Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
- return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
- },
-
- isEmptyObject: function( obj ) {
-
- /* eslint-disable no-unused-vars */
- // See https://github.com/eslint/eslint/issues/6125
- var name;
-
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
-
- // Support: Android <=2.3 only (functionish RegExp)
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call( obj ) ] || "object" :
- typeof obj;
- },
-
- // Evaluates a script in a global context
- globalEval: function( code ) {
- DOMEval( code );
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Support: IE <=9 - 11, Edge 12 - 13
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- each: function( obj, callback ) {
- var length, i = 0;
-
- if ( isArrayLike( obj ) ) {
- length = obj.length;
- for ( ; i < length; i++ ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android <=4.0 only
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArrayLike( Object( arr ) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- return arr == null ? -1 : indexOf.call( arr, elem, i );
- },
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- for ( ; j < len; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var length, value,
- i = 0,
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArrayLike( elems ) ) {
- length = elems.length;
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var tmp, args, proxy;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: Date.now,
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-} );
-
-if ( typeof Symbol === "function" ) {
- jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
-}
-
-// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
-
- // Support: real iOS 8.2 only (not reproducible in simulator)
- // `in` check used to prevent JIT error (gh-2145)
- // hasOwn isn't used here due to false negatives
- // regarding Nodelist length in IE
- var length = !!obj && "length" in obj && obj.length,
- type = jQuery.type( obj );
-
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.3.0
- * https://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2016-01-04
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + 1 * new Date(),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf as it's faster than native
- // https://jsperf.com/thor-indexof-vs-for/5
- indexOf = function( list, elem ) {
- var i = 0,
- len = list.length;
- for ( ; i < len; i++ ) {
- if ( list[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
-
- // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + identifier + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rwhitespace = new RegExp( whitespace + "+", "g" ),
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + identifier + ")" ),
- "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
- "TAG": new RegExp( "^(" + identifier + "|[*])" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
-
- // CSS escapes
- // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- },
-
- // CSS string/identifier serialization
- // https://drafts.csswg.org/cssom/#common-serializing-idioms
- rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
- fcssescape = function( ch, asCodePoint ) {
- if ( asCodePoint ) {
-
- // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
- if ( ch === "\0" ) {
- return "\uFFFD";
- }
-
- // Control characters and (dependent upon position) numbers get escaped as code points
- return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
- }
-
- // Other potentially-special ASCII characters get backslash-escaped
- return "\\" + ch;
- },
-
- // Used for iframes
- // See setDocument()
- // Removing the function wrapper causes a "Permission Denied"
- // error in IE
- unloadHandler = function() {
- setDocument();
- },
-
- disabledAncestor = addCombinator(
- function( elem ) {
- return elem.disabled === true;
- },
- { dir: "parentNode", next: "legend" }
- );
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var m, i, elem, nid, match, groups, newSelector,
- newContext = context && context.ownerDocument,
-
- // nodeType defaults to 9, since context defaults to document
- nodeType = context ? context.nodeType : 9;
-
- results = results || [];
-
- // Return early from calls with invalid selector or context
- if ( typeof selector !== "string" || !selector ||
- nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
- return results;
- }
-
- // Try to shortcut find operations (as opposed to filters) in HTML documents
- if ( !seed ) {
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
- context = context || document;
-
- if ( documentIsHTML ) {
-
- // If the selector is sufficiently simple, try using a "get*By*" DOM method
- // (excepting DocumentFragment context, where the methods don't exist)
- if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-
- // ID selector
- if ( (m = match[1]) ) {
-
- // Document context
- if ( nodeType === 9 ) {
- if ( (elem = context.getElementById( m )) ) {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
-
- // Element context
- } else {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( newContext && (elem = newContext.getElementById( m )) &&
- contains( context, elem ) &&
- elem.id === m ) {
-
- results.push( elem );
- return results;
- }
- }
-
- // Type selector
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Class selector
- } else if ( (m = match[3]) && support.getElementsByClassName &&
- context.getElementsByClassName ) {
-
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // Take advantage of querySelectorAll
- if ( support.qsa &&
- !compilerCache[ selector + " " ] &&
- (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-
- if ( nodeType !== 1 ) {
- newContext = context;
- newSelector = selector;
-
- // qSA looks outside Element context, which is not what we want
- // Thanks to Andrew Dupont for this workaround technique
- // Support: IE <=8
- // Exclude object elements
- } else if ( context.nodeName.toLowerCase() !== "object" ) {
-
- // Capture the context ID, setting it first if necessary
- if ( (nid = context.getAttribute( "id" )) ) {
- nid = nid.replace( rcssescape, fcssescape );
- } else {
- context.setAttribute( "id", (nid = expando) );
- }
-
- // Prefix every selector in the list
- groups = tokenize( selector );
- i = groups.length;
- while ( i-- ) {
- groups[i] = "#" + nid + " " + toSelector( groups[i] );
- }
- newSelector = groups.join( "," );
-
- // Expand context for sibling selectors
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
- context;
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch ( qsaError ) {
- } finally {
- if ( nid === expando ) {
- context.removeAttribute( "id" );
- }
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created element and returns a boolean result
- */
-function assert( fn ) {
- var el = document.createElement("fieldset");
-
- try {
- return !!fn( el );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( el.parentNode ) {
- el.parentNode.removeChild( el );
- }
- // release memory in IE
- el = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = arr.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- a.sourceIndex - b.sourceIndex;
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for :enabled/:disabled
- * @param {Boolean} disabled true for :disabled; false for :enabled
- */
-function createDisabledPseudo( disabled ) {
- // Known :disabled false positives:
- // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset)
- // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
- return function( elem ) {
-
- // Check form elements and option elements for explicit disabling
- return "label" in elem && elem.disabled === disabled ||
- "form" in elem && elem.disabled === disabled ||
-
- // Check non-disabled form elements for fieldset[disabled] ancestors
- "form" in elem && elem.disabled === false && (
- // Support: IE6-11+
- // Ancestry is covered for us
- elem.isDisabled === disabled ||
-
- // Otherwise, assume any non-<option> under fieldset[disabled] is disabled
- /* jshint -W018 */
- elem.isDisabled !== !disabled &&
- ("label" in elem || !disabledAncestor( elem )) !== disabled
- );
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare, subWindow,
- doc = node ? node.ownerDocument || node : preferredDoc;
-
- // Return early if doc is invalid or already selected
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Update global variables
- document = doc;
- docElem = document.documentElement;
- documentIsHTML = !isXML( document );
-
- // Support: IE 9-11, Edge
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
- if ( preferredDoc !== document &&
- (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
-
- // Support: IE 11, Edge
- if ( subWindow.addEventListener ) {
- subWindow.addEventListener( "unload", unloadHandler, false );
-
- // Support: IE 9 - 10 only
- } else if ( subWindow.attachEvent ) {
- subWindow.attachEvent( "onunload", unloadHandler );
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties
- // (excepting IE8 booleans)
- support.attributes = assert(function( el ) {
- el.className = "i";
- return !el.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( el ) {
- el.appendChild( document.createComment("") );
- return !el.getElementsByTagName("*").length;
- });
-
- // Support: IE<9
- support.getElementsByClassName = rnative.test( document.getElementsByClassName );
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programmatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( el ) {
- docElem.appendChild( el ).id = expando;
- return !document.getElementsByName || !document.getElementsByName( expando ).length;
- });
-
- // ID find and filter
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- var m = context.getElementById( id );
- return m ? [ m ] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== "undefined" &&
- elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( tag );
-
- // DocumentFragment nodes don't have gEBTN
- } else if ( support.qsa ) {
- return context.querySelectorAll( tag );
- }
- } :
-
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See https://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( el ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // https://bugs.jquery.com/ticket/12359
- docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
- "<select id='" + expando + "-\r\\' msallowcapture=''>" +
- "<option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( el.querySelectorAll("[msallowcapture^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !el.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
- if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
- rbuggyQSA.push("~=");
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !el.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
-
- // Support: Safari 8+, iOS 8+
- // https://bugs.webkit.org/show_bug.cgi?id=136851
- // In-page `selector#id sibling-combinator selector` fails
- if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
- rbuggyQSA.push(".#.+[+~]");
- }
- });
-
- assert(function( el ) {
- el.innerHTML = "<a href='' disabled='disabled'></a>" +
- "<select disabled='disabled'><option/></select>";
-
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = document.createElement("input");
- input.setAttribute( "type", "hidden" );
- el.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( el.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( el.querySelectorAll(":enabled").length !== 2 ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Support: IE9-11+
- // IE's :disabled selector does not pick up the children of disabled fieldsets
- docElem.appendChild( el ).disabled = true;
- if ( el.querySelectorAll(":disabled").length !== 2 ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- el.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( el ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( el, "*" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( el, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully self-exclusive
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === document ? -1 :
- b === document ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- !compilerCache[ expr + " " ] &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch (e) {}
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.escape = function( sel ) {
- return (sel + "").replace( rcssescape, fcssescape );
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, uniqueCache, outerCache, node, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType,
- diff = false;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) {
-
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
-
- // Seek `elem` from a previously-cached index
-
- // ...in a gzip-friendly way
- node = parent;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex && cache[ 2 ];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- } else {
- // Use previously-cached element index if available
- if ( useCache ) {
- // ...in a gzip-friendly way
- node = elem;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex;
- }
-
- // xml :nth-child(...)
- // or :nth-last-child(...) or :nth(-last)?-of-type(...)
- if ( diff === false ) {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) &&
- ++diff ) {
-
- // Cache the index of each encountered element
- if ( useCache ) {
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- uniqueCache[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- // Don't keep the element (issue #299)
- input[0] = null;
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- text = text.replace( runescape, funescape );
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": createDisabledPseudo( false ),
- "disabled": createDisabledPseudo( true ),
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- skip = combinator.next,
- key = skip || dir,
- checkNonElements = base && key === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, uniqueCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
-
- if ( skip && skip === elem.nodeName.toLowerCase() ) {
- elem = elem[ dir ] || elem;
- } else if ( (oldCache = uniqueCache[ key ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- uniqueCache[ key ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- // Avoid hanging onto element (issue #299)
- checkContext = null;
- return ret;
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context === document || context || outermost;
- }
-
- // Add elements passing elementMatchers directly to results
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- if ( !context && elem.ownerDocument !== document ) {
- setDocument( elem );
- xml = !documentIsHTML;
- }
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context || document, xml) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // `i` is now the count of elements visited above, and adding it to `matchedCount`
- // makes the latter nonnegative.
- matchedCount += i;
-
- // Apply set filters to unmatched elements
- // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
- // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
- // no element matchers and no seed.
- // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
- // case, which will result in a "00" `matchedCount` that differs from `i` but is also
- // numerically zero.
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is only one selector in the list and no seed
- // (the latter of which guarantees us context)
- if ( match.length === 1 ) {
-
- // Reduce context if the leading compound selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( el ) {
- // Should return 1, but returns 4 (following)
- return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( el ) {
- el.innerHTML = "<a href='#'></a>";
- return el.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( el ) {
- el.innerHTML = "<input/>";
- el.firstChild.setAttribute( "value", "" );
- return el.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( el ) {
- return el.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-
-// Deprecated
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-jQuery.escapeSelector = Sizzle.escape;
-
-
-
-
-var dir = function( elem, dir, until ) {
- var matched = [],
- truncate = until !== undefined;
-
- while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
- if ( elem.nodeType === 1 ) {
- if ( truncate && jQuery( elem ).is( until ) ) {
- break;
- }
- matched.push( elem );
- }
- }
- return matched;
-};
-
-
-var siblings = function( n, elem ) {
- var matched = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- matched.push( n );
- }
- }
-
- return matched;
-};
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- return !!qualifier.call( elem, i, elem ) !== not;
- } );
-
- }
-
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- } );
-
- }
-
- if ( typeof qualifier === "string" ) {
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- qualifier = jQuery.filter( qualifier, elements );
- }
-
- return jQuery.grep( elements, function( elem ) {
- return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
- } );
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- } ) );
-};
-
-jQuery.fn.extend( {
- find: function( selector ) {
- var i, ret,
- len = this.length,
- self = this;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter( function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- } ) );
- }
-
- ret = this.pushStack( [] );
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- return len > 1 ? jQuery.uniqueSort( ret ) : ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow( this, selector || [], false ) );
- },
- not: function( selector ) {
- return this.pushStack( winnow( this, selector || [], true ) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-} );
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- // Shortcut simple #id case for speed
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
-
- init = jQuery.fn.init = function( selector, context, root ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Method init() accepts an alternate rootjQuery
- // so migrate can support jQuery.sub (gh-2101)
- root = root || rootjQuery;
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector[ 0 ] === "<" &&
- selector[ selector.length - 1 ] === ">" &&
- selector.length >= 3 ) {
-
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && ( match[ 1 ] || !context ) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[ 1 ] ) {
- context = context instanceof jQuery ? context[ 0 ] : context;
-
- // Option to run scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[ 1 ],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
-
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[ 2 ] );
-
- if ( elem ) {
-
- // Inject the element directly into the jQuery object
- this[ 0 ] = elem;
- this.length = 1;
- }
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || root ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this[ 0 ] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return root.ready !== undefined ?
- root.ready( selector ) :
-
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
- // Methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend( {
- has: function( target ) {
- var targets = jQuery( target, this ),
- l = targets.length;
-
- return this.filter( function() {
- var i = 0;
- for ( ; i < l; i++ ) {
- if ( jQuery.contains( this, targets[ i ] ) ) {
- return true;
- }
- }
- } );
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- targets = typeof selectors !== "string" && jQuery( selectors );
-
- // Positional selectors never match, since there's no _selection_ context
- if ( !rneedsContext.test( selectors ) ) {
- for ( ; i < l; i++ ) {
- for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
- // Always skip document fragments
- if ( cur.nodeType < 11 && ( targets ?
- targets.index( cur ) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector( cur, selectors ) ) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
- },
-
- // Determine the position of an element within the set
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // Index in selector
- if ( typeof elem === "string" ) {
- return indexOf.call( jQuery( elem ), this[ 0 ] );
- }
-
- // Locate the position of the desired element
- return indexOf.call( this,
-
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[ 0 ] : elem
- );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.uniqueSort(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- }
-} );
-
-function sibling( cur, dir ) {
- while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
- return cur;
-}
-
-jQuery.each( {
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return siblings( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return siblings( elem.firstChild );
- },
- contents: function( elem ) {
- return elem.contentDocument || jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var matched = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- matched = jQuery.filter( selector, matched );
- }
-
- if ( this.length > 1 ) {
-
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- jQuery.uniqueSort( matched );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- matched.reverse();
- }
- }
-
- return this.pushStack( matched );
- };
-} );
-var rnotwhite = ( /\S+/g );
-
-
-
-// Convert String-formatted options into Object-formatted ones
-function createOptions( options ) {
- var object = {};
- jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- } );
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- createOptions( options ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
-
- // Last fire value for non-forgettable lists
- memory,
-
- // Flag to know if list was already fired
- fired,
-
- // Flag to prevent firing
- locked,
-
- // Actual callback list
- list = [],
-
- // Queue of execution data for repeatable lists
- queue = [],
-
- // Index of currently firing callback (modified by add/remove as needed)
- firingIndex = -1,
-
- // Fire callbacks
- fire = function() {
-
- // Enforce single-firing
- locked = options.once;
-
- // Execute callbacks for all pending executions,
- // respecting firingIndex overrides and runtime changes
- fired = firing = true;
- for ( ; queue.length; firingIndex = -1 ) {
- memory = queue.shift();
- while ( ++firingIndex < list.length ) {
-
- // Run callback and check for early termination
- if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
- options.stopOnFalse ) {
-
- // Jump to end and forget the data so .add doesn't re-fire
- firingIndex = list.length;
- memory = false;
- }
- }
- }
-
- // Forget the data if we're done with it
- if ( !options.memory ) {
- memory = false;
- }
-
- firing = false;
-
- // Clean up if we're done firing for good
- if ( locked ) {
-
- // Keep an empty list if we have data for future add calls
- if ( memory ) {
- list = [];
-
- // Otherwise, this object is spent
- } else {
- list = "";
- }
- }
- },
-
- // Actual Callbacks object
- self = {
-
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
-
- // If we have memory from a past run, we should fire after adding
- if ( memory && !firing ) {
- firingIndex = list.length - 1;
- queue.push( memory );
- }
-
- ( function add( args ) {
- jQuery.each( args, function( _, arg ) {
- if ( jQuery.isFunction( arg ) ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
-
- // Inspect recursively
- add( arg );
- }
- } );
- } )( arguments );
-
- if ( memory && !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Remove a callback from the list
- remove: function() {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
-
- // Handle firing indexes
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- } );
- return this;
- },
-
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ?
- jQuery.inArray( fn, list ) > -1 :
- list.length > 0;
- },
-
- // Remove all callbacks from the list
- empty: function() {
- if ( list ) {
- list = [];
- }
- return this;
- },
-
- // Disable .fire and .add
- // Abort any current/pending executions
- // Clear all callbacks and values
- disable: function() {
- locked = queue = [];
- list = memory = "";
- return this;
- },
- disabled: function() {
- return !list;
- },
-
- // Disable .fire
- // Also disable .add unless we have memory (since it would have no effect)
- // Abort any pending executions
- lock: function() {
- locked = queue = [];
- if ( !memory && !firing ) {
- list = memory = "";
- }
- return this;
- },
- locked: function() {
- return !!locked;
- },
-
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( !locked ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- queue.push( args );
- if ( !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
-
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-function Identity( v ) {
- return v;
-}
-function Thrower( ex ) {
- throw ex;
-}
-
-function adoptValue( value, resolve, reject ) {
- var method;
-
- try {
-
- // Check for promise aspect first to privilege synchronous behavior
- if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
- method.call( value ).done( resolve ).fail( reject );
-
- // Other thenables
- } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
- method.call( value, resolve, reject );
-
- // Other non-thenables
- } else {
-
- // Support: Android 4.0 only
- // Strict mode functions invoked without .call/.apply get global-object context
- resolve.call( undefined, value );
- }
-
- // For Promises/A+, convert exceptions into rejections
- // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
- // Deferred#then to conditionally suppress rejection.
- } catch ( value ) {
-
- // Support: Android 4.0 only
- // Strict mode functions invoked without .call/.apply get global-object context
- reject.call( undefined, value );
- }
-}
-
-jQuery.extend( {
-
- Deferred: function( func ) {
- var tuples = [
-
- // action, add listener, callbacks,
- // ... .then handlers, argument index, [final state]
- [ "notify", "progress", jQuery.Callbacks( "memory" ),
- jQuery.Callbacks( "memory" ), 2 ],
- [ "resolve", "done", jQuery.Callbacks( "once memory" ),
- jQuery.Callbacks( "once memory" ), 0, "resolved" ],
- [ "reject", "fail", jQuery.Callbacks( "once memory" ),
- jQuery.Callbacks( "once memory" ), 1, "rejected" ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- "catch": function( fn ) {
- return promise.then( null, fn );
- },
-
- // Keep pipe for back-compat
- pipe: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
-
- return jQuery.Deferred( function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
-
- // Map tuples (progress, done, fail) to arguments (done, fail, progress)
- var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
-
- // deferred.progress(function() { bind to newDefer or newDefer.notify })
- // deferred.done(function() { bind to newDefer or newDefer.resolve })
- // deferred.fail(function() { bind to newDefer or newDefer.reject })
- deferred[ tuple[ 1 ] ]( function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .progress( newDefer.notify )
- .done( newDefer.resolve )
- .fail( newDefer.reject );
- } else {
- newDefer[ tuple[ 0 ] + "With" ](
- this,
- fn ? [ returned ] : arguments
- );
- }
- } );
- } );
- fns = null;
- } ).promise();
- },
- then: function( onFulfilled, onRejected, onProgress ) {
- var maxDepth = 0;
- function resolve( depth, deferred, handler, special ) {
- return function() {
- var that = this,
- args = arguments,
- mightThrow = function() {
- var returned, then;
-
- // Support: Promises/A+ section 2.3.3.3.3
- // https://promisesaplus.com/#point-59
- // Ignore double-resolution attempts
- if ( depth < maxDepth ) {
- return;
- }
-
- returned = handler.apply( that, args );
-
- // Support: Promises/A+ section 2.3.1
- // https://promisesaplus.com/#point-48
- if ( returned === deferred.promise() ) {
- throw new TypeError( "Thenable self-resolution" );
- }
-
- // Support: Promises/A+ sections 2.3.3.1, 3.5
- // https://promisesaplus.com/#point-54
- // https://promisesaplus.com/#point-75
- // Retrieve `then` only once
- then = returned &&
-
- // Support: Promises/A+ section 2.3.4
- // https://promisesaplus.com/#point-64
- // Only check objects and functions for thenability
- ( typeof returned === "object" ||
- typeof returned === "function" ) &&
- returned.then;
-
- // Handle a returned thenable
- if ( jQuery.isFunction( then ) ) {
-
- // Special processors (notify) just wait for resolution
- if ( special ) {
- then.call(
- returned,
- resolve( maxDepth, deferred, Identity, special ),
- resolve( maxDepth, deferred, Thrower, special )
- );
-
- // Normal processors (resolve) also hook into progress
- } else {
-
- // ...and disregard older resolution values
- maxDepth++;
-
- then.call(
- returned,
- resolve( maxDepth, deferred, Identity, special ),
- resolve( maxDepth, deferred, Thrower, special ),
- resolve( maxDepth, deferred, Identity,
- deferred.notifyWith )
- );
- }
-
- // Handle all other returned values
- } else {
-
- // Only substitute handlers pass on context
- // and multiple values (non-spec behavior)
- if ( handler !== Identity ) {
- that = undefined;
- args = [ returned ];
- }
-
- // Process the value(s)
- // Default process is resolve
- ( special || deferred.resolveWith )( that, args );
- }
- },
-
- // Only normal processors (resolve) catch and reject exceptions
- process = special ?
- mightThrow :
- function() {
- try {
- mightThrow();
- } catch ( e ) {
-
- if ( jQuery.Deferred.exceptionHook ) {
- jQuery.Deferred.exceptionHook( e,
- process.stackTrace );
- }
-
- // Support: Promises/A+ section 2.3.3.3.4.1
- // https://promisesaplus.com/#point-61
- // Ignore post-resolution exceptions
- if ( depth + 1 >= maxDepth ) {
-
- // Only substitute handlers pass on context
- // and multiple values (non-spec behavior)
- if ( handler !== Thrower ) {
- that = undefined;
- args = [ e ];
- }
-
- deferred.rejectWith( that, args );
- }
- }
- };
-
- // Support: Promises/A+ section 2.3.3.3.1
- // https://promisesaplus.com/#point-57
- // Re-resolve promises immediately to dodge false rejection from
- // subsequent errors
- if ( depth ) {
- process();
- } else {
-
- // Call an optional hook to record the stack, in case of exception
- // since it's otherwise lost when execution goes async
- if ( jQuery.Deferred.getStackHook ) {
- process.stackTrace = jQuery.Deferred.getStackHook();
- }
- window.setTimeout( process );
- }
- };
- }
-
- return jQuery.Deferred( function( newDefer ) {
-
- // progress_handlers.add( ... )
- tuples[ 0 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- jQuery.isFunction( onProgress ) ?
- onProgress :
- Identity,
- newDefer.notifyWith
- )
- );
-
- // fulfilled_handlers.add( ... )
- tuples[ 1 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- jQuery.isFunction( onFulfilled ) ?
- onFulfilled :
- Identity
- )
- );
-
- // rejected_handlers.add( ... )
- tuples[ 2 ][ 3 ].add(
- resolve(
- 0,
- newDefer,
- jQuery.isFunction( onRejected ) ?
- onRejected :
- Thrower
- )
- );
- } ).promise();
- },
-
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 5 ];
-
- // promise.progress = list.add
- // promise.done = list.add
- // promise.fail = list.add
- promise[ tuple[ 1 ] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(
- function() {
-
- // state = "resolved" (i.e., fulfilled)
- // state = "rejected"
- state = stateString;
- },
-
- // rejected_callbacks.disable
- // fulfilled_callbacks.disable
- tuples[ 3 - i ][ 2 ].disable,
-
- // progress_callbacks.lock
- tuples[ 0 ][ 2 ].lock
- );
- }
-
- // progress_handlers.fire
- // fulfilled_handlers.fire
- // rejected_handlers.fire
- list.add( tuple[ 3 ].fire );
-
- // deferred.notify = function() { deferred.notifyWith(...) }
- // deferred.resolve = function() { deferred.resolveWith(...) }
- // deferred.reject = function() { deferred.rejectWith(...) }
- deferred[ tuple[ 0 ] ] = function() {
- deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
- return this;
- };
-
- // deferred.notifyWith = list.fireWith
- // deferred.resolveWith = list.fireWith
- // deferred.rejectWith = list.fireWith
- deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
- } );
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( singleValue ) {
- var
-
- // count of uncompleted subordinates
- remaining = arguments.length,
-
- // count of unprocessed arguments
- i = remaining,
-
- // subordinate fulfillment data
- resolveContexts = Array( i ),
- resolveValues = slice.call( arguments ),
-
- // the master Deferred
- master = jQuery.Deferred(),
-
- // subordinate callback factory
- updateFunc = function( i ) {
- return function( value ) {
- resolveContexts[ i ] = this;
- resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( !( --remaining ) ) {
- master.resolveWith( resolveContexts, resolveValues );
- }
- };
- };
-
- // Single- and empty arguments are adopted like Promise.resolve
- if ( remaining <= 1 ) {
- adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
-
- // Use .then() to unwrap secondary thenables (cf. gh-3000)
- if ( master.state() === "pending" ||
- jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
-
- return master.then();
- }
- }
-
- // Multiple arguments are aggregated like Promise.all array elements
- while ( i-- ) {
- adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
- }
-
- return master.promise();
- }
-} );
-
-
-// These usually indicate a programmer mistake during development,
-// warn about them ASAP rather than swallowing them by default.
-var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
-
-jQuery.Deferred.exceptionHook = function( error, stack ) {
-
- // Support: IE 8 - 9 only
- // Console exists when dev tools are open, which can happen at any time
- if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
- window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
- }
-};
-
-
-
-
-jQuery.readyException = function( error ) {
- window.setTimeout( function() {
- throw error;
- } );
-};
-
-
-
-
-// The deferred used on DOM ready
-var readyList = jQuery.Deferred();
-
-jQuery.fn.ready = function( fn ) {
-
- readyList
- .then( fn )
-
- // Wrap jQuery.readyException in a function so that the lookup
- // happens at the time of error handling instead of callback
- // registration.
- .catch( function( error ) {
- jQuery.readyException( error );
- } );
-
- return this;
-};
-
-jQuery.extend( {
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
- }
-} );
-
-jQuery.ready.then = readyList.then;
-
-// The ready event handler and self cleanup method
-function completed() {
- document.removeEventListener( "DOMContentLoaded", completed );
- window.removeEventListener( "load", completed );
- jQuery.ready();
-}
-
-// Catch cases where $(document).ready() is called
-// after the browser event has already occurred.
-// Support: IE <=9 - 10 only
-// Older IE sometimes signals "interactive" too soon
-if ( document.readyState === "complete" ||
- ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
-
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- window.setTimeout( jQuery.ready );
-
-} else {
-
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed );
-}
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- len = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- access( elems, fn, i, key[ i ], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
-
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < len; i++ ) {
- fn(
- elems[ i ], key, raw ?
- value :
- value.call( elems[ i ], i, fn( elems[ i ], key ) )
- );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- len ? fn( elems[ 0 ], key ) : emptyGet;
-};
-var acceptData = function( owner ) {
-
- // Accepts only:
- // - Node
- // - Node.ELEMENT_NODE
- // - Node.DOCUMENT_NODE
- // - Object
- // - Any
- return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
-};
-
-
-
-
-function Data() {
- this.expando = jQuery.expando + Data.uid++;
-}
-
-Data.uid = 1;
-
-Data.prototype = {
-
- cache: function( owner ) {
-
- // Check if the owner object already has a cache
- var value = owner[ this.expando ];
-
- // If not, create one
- if ( !value ) {
- value = {};
-
- // We can accept data for non-element nodes in modern browsers,
- // but we should not, see #8335.
- // Always return an empty object.
- if ( acceptData( owner ) ) {
-
- // If it is a node unlikely to be stringify-ed or looped over
- // use plain assignment
- if ( owner.nodeType ) {
- owner[ this.expando ] = value;
-
- // Otherwise secure it in a non-enumerable property
- // configurable must be true to allow the property to be
- // deleted when data is removed
- } else {
- Object.defineProperty( owner, this.expando, {
- value: value,
- configurable: true
- } );
- }
- }
- }
-
- return value;
- },
- set: function( owner, data, value ) {
- var prop,
- cache = this.cache( owner );
-
- // Handle: [ owner, key, value ] args
- // Always use camelCase key (gh-2257)
- if ( typeof data === "string" ) {
- cache[ jQuery.camelCase( data ) ] = value;
-
- // Handle: [ owner, { properties } ] args
- } else {
-
- // Copy the properties one-by-one to the cache object
- for ( prop in data ) {
- cache[ jQuery.camelCase( prop ) ] = data[ prop ];
- }
- }
- return cache;
- },
- get: function( owner, key ) {
- return key === undefined ?
- this.cache( owner ) :
-
- // Always use camelCase key (gh-2257)
- owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
- },
- access: function( owner, key, value ) {
-
- // In cases where either:
- //
- // 1. No key was specified
- // 2. A string key was specified, but no value provided
- //
- // Take the "read" path and allow the get method to determine
- // which value to return, respectively either:
- //
- // 1. The entire cache object
- // 2. The data stored at the key
- //
- if ( key === undefined ||
- ( ( key && typeof key === "string" ) && value === undefined ) ) {
-
- return this.get( owner, key );
- }
-
- // When the key is not a string, or both a key and value
- // are specified, set or extend (existing objects) with either:
- //
- // 1. An object of properties
- // 2. A key and value
- //
- this.set( owner, key, value );
-
- // Since the "set" path can have two possible entry points
- // return the expected data based on which path was taken[*]
- return value !== undefined ? value : key;
- },
- remove: function( owner, key ) {
- var i,
- cache = owner[ this.expando ];
-
- if ( cache === undefined ) {
- return;
- }
-
- if ( key !== undefined ) {
-
- // Support array or space separated string of keys
- if ( jQuery.isArray( key ) ) {
-
- // If key is an array of keys...
- // We always set camelCase keys, so remove that.
- key = key.map( jQuery.camelCase );
- } else {
- key = jQuery.camelCase( key );
-
- // If a key with the spaces exists, use it.
- // Otherwise, create an array by matching non-whitespace
- key = key in cache ?
- [ key ] :
- ( key.match( rnotwhite ) || [] );
- }
-
- i = key.length;
-
- while ( i-- ) {
- delete cache[ key[ i ] ];
- }
- }
-
- // Remove the expando if there's no more data
- if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
-
- // Support: Chrome <=35 - 45
- // Webkit & Blink performance suffers when deleting properties
- // from DOM nodes, so set to undefined instead
- // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
- if ( owner.nodeType ) {
- owner[ this.expando ] = undefined;
- } else {
- delete owner[ this.expando ];
- }
- }
- },
- hasData: function( owner ) {
- var cache = owner[ this.expando ];
- return cache !== undefined && !jQuery.isEmptyObject( cache );
- }
-};
-var dataPriv = new Data();
-
-var dataUser = new Data();
-
-
-
-// Implementation Summary
-//
-// 1. Enforce API surface and semantic compatibility with 1.9.x branch
-// 2. Improve the module's maintainability by reducing the storage
-// paths to a single mechanism.
-// 3. Use the same single mechanism to support "private" and "user" data.
-// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
-// 5. Avoid exposing implementation details on user objects (eg. expando properties)
-// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /[A-Z]/g;
-
-function dataAttr( elem, key, data ) {
- var name;
-
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
- name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
-
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? JSON.parse( data ) :
- data;
- } catch ( e ) {}
-
- // Make sure we set the data so it isn't changed later
- dataUser.set( elem, key, data );
- } else {
- data = undefined;
- }
- }
- return data;
-}
-
-jQuery.extend( {
- hasData: function( elem ) {
- return dataUser.hasData( elem ) || dataPriv.hasData( elem );
- },
-
- data: function( elem, name, data ) {
- return dataUser.access( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- dataUser.remove( elem, name );
- },
-
- // TODO: Now that all calls to _data and _removeData have been replaced
- // with direct calls to dataPriv methods, these can be deprecated.
- _data: function( elem, name, data ) {
- return dataPriv.access( elem, name, data );
- },
-
- _removeData: function( elem, name ) {
- dataPriv.remove( elem, name );
- }
-} );
-
-jQuery.fn.extend( {
- data: function( key, value ) {
- var i, name, data,
- elem = this[ 0 ],
- attrs = elem && elem.attributes;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = dataUser.get( elem );
-
- if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE 11 only
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice( 5 ) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- dataPriv.set( elem, "hasDataAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each( function() {
- dataUser.set( this, key );
- } );
- }
-
- return access( this, function( value ) {
- var data;
-
- // The calling jQuery object (element matches) is not empty
- // (and therefore has an element appears at this[ 0 ]) and the
- // `value` parameter was not undefined. An empty jQuery object
- // will result in `undefined` for elem = this[ 0 ] which will
- // throw an exception if an attempt to read a data cache is made.
- if ( elem && value === undefined ) {
-
- // Attempt to get data from the cache
- // The key will always be camelCased in Data
- data = dataUser.get( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // Attempt to "discover" the data in
- // HTML5 custom data-* attrs
- data = dataAttr( elem, key );
- if ( data !== undefined ) {
- return data;
- }
-
- // We tried really hard, but the data doesn't exist.
- return;
- }
-
- // Set the data...
- this.each( function() {
-
- // We always store the camelCased key
- dataUser.set( this, key, value );
- } );
- }, null, value, arguments.length > 1, null, true );
- },
-
- removeData: function( key ) {
- return this.each( function() {
- dataUser.remove( this, key );
- } );
- }
-} );
-
-
-jQuery.extend( {
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = dataPriv.get( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray( data ) ) {
- queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // Clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // Not public - generate a queueHooks object, or return the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
- empty: jQuery.Callbacks( "once memory" ).add( function() {
- dataPriv.remove( elem, [ type + "queue", key ] );
- } )
- } );
- }
-} );
-
-jQuery.fn.extend( {
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[ 0 ], type );
- }
-
- return data === undefined ?
- this :
- this.each( function() {
- var queue = jQuery.queue( this, type, data );
-
- // Ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- dequeue: function( type ) {
- return this.each( function() {
- jQuery.dequeue( this, type );
- } );
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
-
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-} );
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHiddenWithinTree = function( elem, el ) {
-
- // isHiddenWithinTree might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
-
- // Inline style trumps all
- return elem.style.display === "none" ||
- elem.style.display === "" &&
-
- // Otherwise, check computed style
- // Support: Firefox <=43 - 45
- // Disconnected elements can have computed display: none, so first confirm that elem is
- // in the document.
- jQuery.contains( elem.ownerDocument, elem ) &&
-
- jQuery.css( elem, "display" ) === "none";
- };
-
-var swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-
-
-function adjustCSS( elem, prop, valueParts, tween ) {
- var adjusted,
- scale = 1,
- maxIterations = 20,
- currentValue = tween ?
- function() {
- return tween.cur();
- } :
- function() {
- return jQuery.css( elem, prop, "" );
- },
- initial = currentValue(),
- unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
- rcssNum.exec( jQuery.css( elem, prop ) );
-
- if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
- // Trust units reported by jQuery.css
- unit = unit || initialInUnit[ 3 ];
-
- // Make sure we update the tween properties later on
- valueParts = valueParts || [];
-
- // Iteratively approximate from a nonzero starting point
- initialInUnit = +initial || 1;
-
- do {
-
- // If previous iteration zeroed out, double until we get *something*.
- // Use string for doubling so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- initialInUnit = initialInUnit / scale;
- jQuery.style( elem, prop, initialInUnit + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // Break the loop if scale is unchanged or perfect, or if we've just had enough.
- } while (
- scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
- );
- }
-
- if ( valueParts ) {
- initialInUnit = +initialInUnit || +initial || 0;
-
- // Apply relative offset (+=/-=) if specified
- adjusted = valueParts[ 1 ] ?
- initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
- +valueParts[ 2 ];
- if ( tween ) {
- tween.unit = unit;
- tween.start = initialInUnit;
- tween.end = adjusted;
- }
- }
- return adjusted;
-}
-
-
-var defaultDisplayMap = {};
-
-function getDefaultDisplay( elem ) {
- var temp,
- doc = elem.ownerDocument,
- nodeName = elem.nodeName,
- display = defaultDisplayMap[ nodeName ];
-
- if ( display ) {
- return display;
- }
-
- temp = doc.body.appendChild( doc.createElement( nodeName ) ),
- display = jQuery.css( temp, "display" );
-
- temp.parentNode.removeChild( temp );
-
- if ( display === "none" ) {
- display = "block";
- }
- defaultDisplayMap[ nodeName ] = display;
-
- return display;
-}
-
-function showHide( elements, show ) {
- var display, elem,
- values = [],
- index = 0,
- length = elements.length;
-
- // Determine new display value for elements that need to change
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- display = elem.style.display;
- if ( show ) {
-
- // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
- // check is required in this first loop unless we have a nonempty display value (either
- // inline or about-to-be-restored)
- if ( display === "none" ) {
- values[ index ] = dataPriv.get( elem, "display" ) || null;
- if ( !values[ index ] ) {
- elem.style.display = "";
- }
- }
- if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
- values[ index ] = getDefaultDisplay( elem );
- }
- } else {
- if ( display !== "none" ) {
- values[ index ] = "none";
-
- // Remember what we're overwriting
- dataPriv.set( elem, "display", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop to avoid constant reflow
- for ( index = 0; index < length; index++ ) {
- if ( values[ index ] != null ) {
- elements[ index ].style.display = values[ index ];
- }
- }
-
- return elements;
-}
-
-jQuery.fn.extend( {
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each( function() {
- if ( isHiddenWithinTree( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- } );
- }
-} );
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
-
-var rscriptType = ( /^$|\/(?:java|ecma)script/i );
-
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
-
- // Support: IE <=9 only
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
-
- // XHTML parsers do not magically insert elements in the
- // same way that tag soup parsers do. So we cannot shorten
- // this by omitting <tbody> or other required elements.
- thead: [ 1, "<table>", "</table>" ],
- col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- _default: [ 0, "", "" ]
-};
-
-// Support: IE <=9 only
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function getAll( context, tag ) {
-
- // Support: IE <=9 - 11 only
- // Use typeof to avoid zero-argument method invocation on host objects (#15151)
- var ret = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== "undefined" ?
- context.querySelectorAll( tag || "*" ) :
- [];
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], ret ) :
- ret;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- dataPriv.set(
- elems[ i ],
- "globalEval",
- !refElements || dataPriv.get( refElements[ i ], "globalEval" )
- );
- }
-}
-
-
-var rhtml = /<|&#?\w+;/;
-
-function buildFragment( elems, context, scripts, selection, ignored ) {
- var elem, tmp, tag, wrap, contains, j,
- fragment = context.createDocumentFragment(),
- nodes = [],
- i = 0,
- l = elems.length;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
- tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
-
- // Descend through wrappers to the right content
- j = wrap[ 0 ];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( nodes, tmp.childNodes );
-
- // Remember the top-level container
- tmp = fragment.firstChild;
-
- // Ensure the created nodes are orphaned (#12392)
- tmp.textContent = "";
- }
- }
- }
-
- // Remove wrapper from fragment
- fragment.textContent = "";
-
- i = 0;
- while ( ( elem = nodes[ i++ ] ) ) {
-
- // Skip elements already in the context collection (trac-4087)
- if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
- if ( ignored ) {
- ignored.push( elem );
- }
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( fragment.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( ( elem = tmp[ j++ ] ) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- return fragment;
-}
-
-
-( function() {
- var fragment = document.createDocumentFragment(),
- div = fragment.appendChild( document.createElement( "div" ) ),
- input = document.createElement( "input" );
-
- // Support: Android 4.0 - 4.3 only
- // Check state lost if the name is set (#11217)
- // Support: Windows Web Apps (WWA)
- // `name` and `type` must use .setAttribute for WWA (#14901)
- input.setAttribute( "type", "radio" );
- input.setAttribute( "checked", "checked" );
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
-
- // Support: Android <=4.1 only
- // Older WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE <=11 only
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-} )();
-var documentElement = document.documentElement;
-
-
-
-var
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-// Support: IE <=9 only
-// See #13393 for more info
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-function on( elem, types, selector, data, fn, one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
-
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
-
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- on( elem, type, selector, data, types[ type ], one );
- }
- return elem;
- }
-
- if ( data == null && fn == null ) {
-
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
-
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
-
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return elem;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
-
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
-
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return elem.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- } );
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
-
- var handleObjIn, eventHandle, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = dataPriv.get( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Ensure that invalid selectors throw exceptions at attach time
- // Evaluate against documentElement in case elem is a non-element node (e.g., document)
- if ( selector ) {
- jQuery.find.matchesSelector( documentElement, selector );
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !( events = elemData.events ) ) {
- events = elemData.events = {};
- }
- if ( !( eventHandle = elemData.handle ) ) {
- eventHandle = elemData.handle = function( e ) {
-
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
- jQuery.event.dispatch.apply( elem, arguments ) : undefined;
- };
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend( {
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join( "." )
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !( handlers = events[ type ] ) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener if the special events handler returns false
- if ( !special.setup ||
- special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var j, origCount, tmp,
- events, t, handleObj,
- special, handlers, type, namespaces, origType,
- elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
-
- if ( !elemData || !( events = elemData.events ) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[ 2 ] &&
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector ||
- selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown ||
- special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove data and the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- dataPriv.remove( elem, "handle events" );
- }
- },
-
- dispatch: function( nativeEvent ) {
-
- // Make a writable jQuery.Event from the native event object
- var event = jQuery.event.fix( nativeEvent );
-
- var i, j, ret, matched, handleObj, handlerQueue,
- args = new Array( arguments.length ),
- handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[ 0 ] = event;
-
- for ( i = 1; i < arguments.length; i++ ) {
- args[ i ] = arguments[ i ];
- }
-
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( ( handleObj = matched.handlers[ j++ ] ) &&
- !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or 2) have namespace(s)
- // a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
- handleObj.handler ).apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( ( event.result = ret ) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var i, matches, sel, handleObj,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Support: IE <=9
- // Find delegate handlers
- // Black-hole SVG <use> instance trees (#13180)
- //
- // Support: Firefox <=42
- // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
- if ( delegateCount && cur.nodeType &&
- ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
-
- for ( ; cur !== this; cur = cur.parentNode || this ) {
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) > -1 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push( { elem: cur, handlers: matches } );
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
- }
-
- return handlerQueue;
- },
-
- addProp: function( name, hook ) {
- Object.defineProperty( jQuery.Event.prototype, name, {
- enumerable: true,
- configurable: true,
-
- get: jQuery.isFunction( hook ) ?
- function() {
- if ( this.originalEvent ) {
- return hook( this.originalEvent );
- }
- } :
- function() {
- if ( this.originalEvent ) {
- return this.originalEvent[ name ];
- }
- },
-
- set: function( value ) {
- Object.defineProperty( this, name, {
- enumerable: true,
- configurable: true,
- writable: true,
- value: value
- } );
- }
- } );
- },
-
- fix: function( originalEvent ) {
- return originalEvent[ jQuery.expando ] ?
- originalEvent :
- new jQuery.Event( originalEvent );
- },
-
- special: {
- load: {
-
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
-
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- this.focus();
- return false;
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
-
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- }
-};
-
-jQuery.removeEvent = function( elem, type, handle ) {
-
- // This "if" is needed for plain objects
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle );
- }
-};
-
-jQuery.Event = function( src, props ) {
-
- // Allow instantiation without the 'new' keyword
- if ( !( this instanceof jQuery.Event ) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
-
- // Support: Android <=2.3 only
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Create target properties
- // Support: Safari <=6 - 7 only
- // Target should not be a text node (#504, #13143)
- this.target = ( src.target && src.target.nodeType === 3 ) ?
- src.target.parentNode :
- src.target;
-
- this.currentTarget = src.currentTarget;
- this.relatedTarget = src.relatedTarget;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- constructor: jQuery.Event,
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
- isSimulated: false,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.preventDefault();
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.stopPropagation();
- }
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && !this.isSimulated ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Includes all common event props including KeyEvent and MouseEvent specific props
-jQuery.each( {
- altKey: true,
- bubbles: true,
- cancelable: true,
- changedTouches: true,
- ctrlKey: true,
- detail: true,
- eventPhase: true,
- metaKey: true,
- pageX: true,
- pageY: true,
- shiftKey: true,
- view: true,
- "char": true,
- charCode: true,
- key: true,
- keyCode: true,
- button: true,
- buttons: true,
- clientX: true,
- clientY: true,
- offsetX: true,
- offsetY: true,
- pointerId: true,
- pointerType: true,
- screenX: true,
- screenY: true,
- targetTouches: true,
- toElement: true,
- touches: true,
-
- which: function( event ) {
- var button = event.button;
-
- // Add which for key events
- if ( event.which == null && rkeyEvent.test( event.type ) ) {
- return event.charCode != null ? event.charCode : event.keyCode;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
- return ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event.which;
- }
-}, jQuery.event.addProp );
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// so that event delegation works in jQuery.
-// Do the same for pointerenter/pointerleave and pointerover/pointerout
-//
-// Support: Safari 7 only
-// Safari sends mouseenter too often; see:
-// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
-// for the description of the bug (it existed in older Chrome versions as well).
-jQuery.each( {
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mouseenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-} );
-
-jQuery.fn.extend( {
-
- on: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn );
- },
- one: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
-
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ?
- handleObj.origType + "." + handleObj.namespace :
- handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
-
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
-
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each( function() {
- jQuery.event.remove( this, types, fn, selector );
- } );
- }
-} );
-
-
-var
-
- /* eslint-disable max-len */
-
- // See https://github.com/eslint/eslint/issues/3229
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
-
- /* eslint-enable */
-
- // Support: IE <=10 - 11, Edge 12 - 13
- // In IE/Edge using regex groups here causes severe slowdowns.
- // See https://connect.microsoft.com/IE/feedback/details/1736512/
- rnoInnerhtml = /<script|<style|<link/i,
-
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
-
-function manipulationTarget( elem, content ) {
- if ( jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
-
- return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
- }
-
- return elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
-
- if ( match ) {
- elem.type = match[ 1 ];
- } else {
- elem.removeAttribute( "type" );
- }
-
- return elem;
-}
-
-function cloneCopyEvent( src, dest ) {
- var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
-
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // 1. Copy private data: events, handlers, etc.
- if ( dataPriv.hasData( src ) ) {
- pdataOld = dataPriv.access( src );
- pdataCur = dataPriv.set( dest, pdataOld );
- events = pdataOld.events;
-
- if ( events ) {
- delete pdataCur.handle;
- pdataCur.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
- }
-
- // 2. Copy user data
- if ( dataUser.hasData( src ) ) {
- udataOld = dataUser.access( src );
- udataCur = jQuery.extend( {}, udataOld );
-
- dataUser.set( dest, udataCur );
- }
-}
-
-// Fix IE bugs, see support tests
-function fixInput( src, dest ) {
- var nodeName = dest.nodeName.toLowerCase();
-
- // Fails to persist the checked state of a cloned checkbox or radio button.
- if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- dest.checked = src.checked;
-
- // Fails to return the selected option to the default selected state when cloning options
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-function domManip( collection, args, callback, ignored ) {
-
- // Flatten any nested arrays
- args = concat.apply( [], args );
-
- var fragment, first, scripts, hasScripts, node, doc,
- i = 0,
- l = collection.length,
- iNoClone = l - 1,
- value = args[ 0 ],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return collection.each( function( index ) {
- var self = collection.eq( index );
- if ( isFunction ) {
- args[ 0 ] = value.call( this, index, self.html() );
- }
- domManip( self, args, callback, ignored );
- } );
- }
-
- if ( l ) {
- fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- // Require either new content or an interest in ignored elements to invoke the callback
- if ( first || ignored ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item
- // instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // push.apply(_, arraylike) throws on ancient WebKit
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( collection[ i ], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !dataPriv.access( node, "globalEval" ) &&
- jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
-
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl ) {
- jQuery._evalUrl( node.src );
- }
- } else {
- DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
- }
- }
- }
- }
- }
- }
-
- return collection;
-}
-
-function remove( elem, selector, keepData ) {
- var node,
- nodes = selector ? jQuery.filter( selector, elem ) : elem,
- i = 0;
-
- for ( ; ( node = nodes[ i ] ) != null; i++ ) {
- if ( !keepData && node.nodeType === 1 ) {
- jQuery.cleanData( getAll( node ) );
- }
-
- if ( node.parentNode ) {
- if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
- setGlobalEval( getAll( node, "script" ) );
- }
- node.parentNode.removeChild( node );
- }
- }
-
- return elem;
-}
-
-jQuery.extend( {
- htmlPrefilter: function( html ) {
- return html.replace( rxhtmlTag, "<$1></$2>" );
- },
-
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var i, l, srcElements, destElements,
- clone = elem.cloneNode( true ),
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- // Fix IE cloning issues
- if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
- !jQuery.isXMLDoc( elem ) ) {
-
- // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- fixInput( srcElements[ i ], destElements[ i ] );
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0, l = srcElements.length; i < l; i++ ) {
- cloneCopyEvent( srcElements[ i ], destElements[ i ] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- // Return the cloned set
- return clone;
- },
-
- cleanData: function( elems ) {
- var data, elem, type,
- special = jQuery.event.special,
- i = 0;
-
- for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
- if ( acceptData( elem ) ) {
- if ( ( data = elem[ dataPriv.expando ] ) ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Support: Chrome <=35 - 45+
- // Assign undefined instead of using delete, see Data#remove
- elem[ dataPriv.expando ] = undefined;
- }
- if ( elem[ dataUser.expando ] ) {
-
- // Support: Chrome <=35 - 45+
- // Assign undefined instead of using delete, see Data#remove
- elem[ dataUser.expando ] = undefined;
- }
- }
- }
- }
-} );
-
-jQuery.fn.extend( {
- detach: function( selector ) {
- return remove( this, selector, true );
- },
-
- remove: function( selector ) {
- return remove( this, selector );
- },
-
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().each( function() {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- this.textContent = value;
- }
- } );
- }, null, value, arguments.length );
- },
-
- append: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- } );
- },
-
- prepend: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- } );
- },
-
- before: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- } );
- },
-
- after: function() {
- return domManip( this, arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- } );
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; ( elem = this[ i ] ) != null; i++ ) {
- if ( elem.nodeType === 1 ) {
-
- // Prevent memory leaks
- jQuery.cleanData( getAll( elem, false ) );
-
- // Remove any remaining nodes
- elem.textContent = "";
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- } );
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined && elem.nodeType === 1 ) {
- return elem.innerHTML;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
- value = jQuery.htmlPrefilter( value );
-
- try {
- for ( ; i < l; i++ ) {
- elem = this[ i ] || {};
-
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch ( e ) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var ignored = [];
-
- // Make the changes, replacing each non-ignored context element with the new content
- return domManip( this, arguments, function( elem ) {
- var parent = this.parentNode;
-
- if ( jQuery.inArray( this, ignored ) < 0 ) {
- jQuery.cleanData( getAll( this ) );
- if ( parent ) {
- parent.replaceChild( elem, this );
- }
- }
-
- // Force callback invocation
- }, ignored );
- }
-} );
-
-jQuery.each( {
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1,
- i = 0;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone( true );
- jQuery( insert[ i ] )[ original ]( elems );
-
- // Support: Android <=4.0 only, PhantomJS 1 only
- // .get() because push.apply(_, arraylike) throws on ancient WebKit
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-} );
-var rmargin = ( /^margin/ );
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var getStyles = function( elem ) {
-
- // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
- // IE throws on elements created in popups
- // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
- var view = elem.ownerDocument.defaultView;
-
- if ( !view || !view.opener ) {
- view = window;
- }
-
- return view.getComputedStyle( elem );
- };
-
-
-
-( function() {
-
- // Executing both pixelPosition & boxSizingReliable tests require only one layout
- // so they're executed at the same time to save the second computation.
- function computeStyleTests() {
-
- // This is a singleton, we need to execute it only once
- if ( !div ) {
- return;
- }
-
- div.style.cssText =
- "box-sizing:border-box;" +
- "position:relative;display:block;" +
- "margin:auto;border:1px;padding:1px;" +
- "top:1%;width:50%";
- div.innerHTML = "";
- documentElement.appendChild( container );
-
- var divStyle = window.getComputedStyle( div );
- pixelPositionVal = divStyle.top !== "1%";
-
- // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
- reliableMarginLeftVal = divStyle.marginLeft === "2px";
- boxSizingReliableVal = divStyle.width === "4px";
-
- // Support: Android 4.0 - 4.3 only
- // Some styles come back with percentage values, even though they shouldn't
- div.style.marginRight = "50%";
- pixelMarginRightVal = divStyle.marginRight === "4px";
-
- documentElement.removeChild( container );
-
- // Nullify the div so it wouldn't be stored in the memory and
- // it will also be a sign that checks already performed
- div = null;
- }
-
- var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
- container = document.createElement( "div" ),
- div = document.createElement( "div" );
-
- // Finish early in limited (non-browser) environments
- if ( !div.style ) {
- return;
- }
-
- // Support: IE <=9 - 11 only
- // Style of cloned element affects source element cloned (#8908)
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
- "padding:0;margin-top:1px;position:absolute";
- container.appendChild( div );
-
- jQuery.extend( support, {
- pixelPosition: function() {
- computeStyleTests();
- return pixelPositionVal;
- },
- boxSizingReliable: function() {
- computeStyleTests();
- return boxSizingReliableVal;
- },
- pixelMarginRight: function() {
- computeStyleTests();
- return pixelMarginRightVal;
- },
- reliableMarginLeft: function() {
- computeStyleTests();
- return reliableMarginLeftVal;
- }
- } );
-} )();
-
-
-function curCSS( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // Support: IE <=9 only
- // getPropertyValue is only needed for .css('filter') (#12537)
- if ( computed ) {
- ret = computed.getPropertyValue( name ) || computed[ name ];
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Android Browser returns percentage for some values,
- // but width seems to be reliably pixels.
- // This is against the CSSOM draft spec:
- // https://drafts.csswg.org/cssom/#resolved-values
- if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret !== undefined ?
-
- // Support: IE <=9 - 11 only
- // IE returns zIndex value as an integer.
- ret + "" :
- ret;
-}
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- if ( conditionFn() ) {
-
- // Hook not needed (or it's not possible to use it due
- // to missing dependency), remove it.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
- return ( this.get = hookFn ).apply( this, arguments );
- }
- };
-}
-
-
-var
-
- // Swappable if display is none or starts with table
- // except "table", "table-cell", or "table-caption"
- // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
-
- cssPrefixes = [ "Webkit", "Moz", "ms" ],
- emptyStyle = document.createElement( "div" ).style;
-
-// Return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( name ) {
-
- // Shortcut for names that are not vendor prefixed
- if ( name in emptyStyle ) {
- return name;
- }
-
- // Check for vendor prefixed names
- var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in emptyStyle ) {
- return name;
- }
- }
-}
-
-function setPositiveNumber( elem, value, subtract ) {
-
- // Any relative (+/-) values have already been
- // normalized at this point
- var matches = rcssNum.exec( value );
- return matches ?
-
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
-
- // If we already have the right measurement, avoid augmentation
- 4 :
-
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
-
- val = 0;
-
- for ( ; i < 4; i += 2 ) {
-
- // Both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
-
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // At this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
-
- // At this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // At this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var val,
- valueIsBorderBox = true,
- styles = getStyles( elem ),
- isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // Support: IE <=11 only
- // Running getBoundingClientRect on a disconnected node
- // in IE throws an error.
- if ( elem.getClientRects().length ) {
- val = elem.getBoundingClientRect()[ name ];
- }
-
- // Some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
-
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test( val ) ) {
- return val;
- }
-
- // Check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox &&
- ( support.boxSizingReliable() || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // Use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-jQuery.extend( {
-
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
-
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "animationIterationCount": true,
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- "float": "cssFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
-
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] ||
- ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
-
- // Gets hook for the prefixed version, then unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // Convert "+=" or "-=" to relative numbers (#7345)
- if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
- value = adjustCSS( elem, name, ret );
-
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set (#7116)
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number was passed in, add the unit (except for certain CSS properties)
- if ( type === "number" ) {
- value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
- }
-
- // background-* props affect original clone's values
- if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !( "set" in hooks ) ||
- ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
-
- style[ name ] = value;
- }
-
- } else {
-
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks &&
- ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
-
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var val, num, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] ||
- ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
-
- // Try prefixed name followed by the unprefixed name
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- // Convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Make numeric if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || isFinite( num ) ? num || 0 : val;
- }
- return val;
- }
-} );
-
-jQuery.each( [ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
-
- // Certain elements can have dimension info if we invisibly show them
- // but it must have a current display style that would benefit
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
-
- // Support: Safari 8+
- // Table columns in Safari have non-zero offsetWidth & zero
- // getBoundingClientRect().width unless display is changed.
- // Support: IE <=11 only
- // Running getBoundingClientRect on a disconnected node
- // in IE throws an error.
- ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
- swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- } ) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var matches,
- styles = extra && getStyles( elem ),
- subtract = extra && augmentWidthOrHeight(
- elem,
- name,
- extra,
- jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- );
-
- // Convert to pixels if value adjustment is needed
- if ( subtract && ( matches = rcssNum.exec( value ) ) &&
- ( matches[ 3 ] || "px" ) !== "px" ) {
-
- elem.style[ name ] = value;
- value = jQuery.css( elem, name );
- }
-
- return setPositiveNumber( elem, value, subtract );
- }
- };
-} );
-
-jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
- function( elem, computed ) {
- if ( computed ) {
- return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
- elem.getBoundingClientRect().left -
- swap( elem, { marginLeft: 0 }, function() {
- return elem.getBoundingClientRect().left;
- } )
- ) + "px";
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each( {
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // Assumes a single number if not a string
- parts = typeof value === "string" ? value.split( " " ) : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-} );
-
-jQuery.fn.extend( {
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- }
-} );
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || jQuery.easing._default;
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- // Use a property on the element directly when it is not a DOM element,
- // or when there is no matching style property that exists.
- if ( tween.elem.nodeType !== 1 ||
- tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
- return tween.elem[ tween.prop ];
- }
-
- // Passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails.
- // Simple values such as "10px" are parsed to Float;
- // complex values such as "rotate(1rad)" are returned as-is.
- result = jQuery.css( tween.elem, tween.prop, "" );
-
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
-
- // Use step hook for back compat.
- // Use cssHook if its there.
- // Use .style if available and use plain properties where available.
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.nodeType === 1 &&
- ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
- jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE <=9 only
-// Panic based approach to setting things on disconnected nodes
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- },
- _default: "swing"
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rrun = /queueHooks$/;
-
-function raf() {
- if ( timerId ) {
- window.requestAnimationFrame( raf );
- jQuery.fx.tick();
- }
-}
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- window.setTimeout( function() {
- fxNow = undefined;
- } );
- return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- i = 0,
- attrs = { height: type };
-
- // If we include width, step value is 1 to do all cssExpand values,
- // otherwise step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
-
- // We're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
- isBox = "width" in props || "height" in props,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHiddenWithinTree( elem ),
- dataShow = dataPriv.get( elem, "fxshow" );
-
- // Queue-skipping animations hijack the fx hooks
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always( function() {
-
- // Ensure the complete handler is called before this completes
- anim.always( function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- } );
- } );
- }
-
- // Detect show/hide animations
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.test( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // Pretend to be hidden if this is a "show" and
- // there is still data from a stopped show/hide
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
-
- // Ignore all other no-op show/hide data
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
- }
- }
-
- // Bail out if this is a no-op like .hide().hide()
- propTween = !jQuery.isEmptyObject( props );
- if ( !propTween && jQuery.isEmptyObject( orig ) ) {
- return;
- }
-
- // Restrict "overflow" and "display" styles during box animations
- if ( isBox && elem.nodeType === 1 ) {
-
- // Support: IE <=9 - 11, Edge 12 - 13
- // Record all 3 overflow attributes because IE does not infer the shorthand
- // from identically-valued overflowX and overflowY
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Identify a display type, preferring old show/hide data over the CSS cascade
- restoreDisplay = dataShow && dataShow.display;
- if ( restoreDisplay == null ) {
- restoreDisplay = dataPriv.get( elem, "display" );
- }
- display = jQuery.css( elem, "display" );
- if ( display === "none" ) {
- if ( restoreDisplay ) {
- display = restoreDisplay;
- } else {
-
- // Get nonempty value(s) by temporarily forcing visibility
- showHide( [ elem ], true );
- restoreDisplay = elem.style.display || restoreDisplay;
- display = jQuery.css( elem, "display" );
- showHide( [ elem ] );
- }
- }
-
- // Animate inline elements as inline-block
- if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
- if ( jQuery.css( elem, "float" ) === "none" ) {
-
- // Restore the original display value at the end of pure show/hide animations
- if ( !propTween ) {
- anim.done( function() {
- style.display = restoreDisplay;
- } );
- if ( restoreDisplay == null ) {
- display = style.display;
- restoreDisplay = display === "none" ? "" : display;
- }
- }
- style.display = "inline-block";
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- anim.always( function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- } );
- }
-
- // Implement show/hide animations
- propTween = false;
- for ( prop in orig ) {
-
- // General show/hide setup for this element animation
- if ( !propTween ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
- }
-
- // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
-
- // Show elements before animating them
- if ( hidden ) {
- showHide( [ elem ], true );
- }
-
- /* eslint-disable no-loop-func */
-
- anim.done( function() {
-
- /* eslint-enable no-loop-func */
-
- // The final step of a "hide" animation is actually hiding the element
- if ( !hidden ) {
- showHide( [ elem ] );
- }
- dataPriv.remove( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- } );
- }
-
- // Per-property setup
- propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = propTween.start;
- if ( hidden ) {
- propTween.end = propTween.start;
- propTween.start = 0;
- }
- }
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // Not quite $.extend, this won't overwrite existing keys.
- // Reusing 'index' because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = Animation.prefilters.length,
- deferred = jQuery.Deferred().always( function() {
-
- // Don't match elem in the :animated selector
- delete tick.elem;
- } ),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-
- // Support: Android 2.3 only
- // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ] );
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise( {
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, {
- specialEasing: {},
- easing: jQuery.easing._default
- }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
-
- // If we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // Resolve when we played the last frame; otherwise, reject
- if ( gotoEnd ) {
- deferred.notifyWith( elem, [ animation, 1, 0 ] );
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- } ),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length; index++ ) {
- result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- if ( jQuery.isFunction( result.stop ) ) {
- jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
- jQuery.proxy( result.stop, result );
- }
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- } )
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweeners: {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value );
- adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
- return tween;
- } ]
- },
-
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.match( rnotwhite );
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length; index++ ) {
- prop = props[ index ];
- Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
- Animation.tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilters: [ defaultPrefilter ],
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- Animation.prefilters.unshift( callback );
- } else {
- Animation.prefilters.push( callback );
- }
- }
-} );
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- // Go to the end state if fx are off or if document is hidden
- if ( jQuery.fx.off || document.hidden ) {
- opt.duration = 0;
-
- } else {
- opt.duration = typeof opt.duration === "number" ?
- opt.duration : opt.duration in jQuery.fx.speeds ?
- jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
- }
-
- // Normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend( {
- fadeTo: function( speed, to, easing, callback ) {
-
- // Show any hidden elements after setting opacity to 0
- return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
-
- // Animate to the value specified
- .end().animate( { opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
-
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || dataPriv.get( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each( function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = dataPriv.get( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this &&
- ( type == null || timers[ index ].queue === type ) ) {
-
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // Start the next in the queue if the last step wasn't forced.
- // Timers currently will call their complete callbacks, which
- // will dequeue but only if they were gotoEnd.
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each( function() {
- var index,
- data = dataPriv.get( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // Enable finishing flag on private data
- data.finish = true;
-
- // Empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // Look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // Look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // Turn off finishing flag
- delete data.finish;
- } );
- }
-} );
-
-jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-} );
-
-// Generate shortcuts for custom animations
-jQuery.each( {
- slideDown: genFx( "show" ),
- slideUp: genFx( "hide" ),
- slideToggle: genFx( "toggle" ),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-} );
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- i = 0,
- timers = jQuery.timers;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
-
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- if ( timer() ) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
-};
-
-jQuery.fx.interval = 13;
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = window.requestAnimationFrame ?
- window.requestAnimationFrame( raf ) :
- window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- if ( window.cancelAnimationFrame ) {
- window.cancelAnimationFrame( timerId );
- } else {
- window.clearInterval( timerId );
- }
-
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
-
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = window.setTimeout( next, time );
- hooks.stop = function() {
- window.clearTimeout( timeout );
- };
- } );
-};
-
-
-( function() {
- var input = document.createElement( "input" ),
- select = document.createElement( "select" ),
- opt = select.appendChild( document.createElement( "option" ) );
-
- input.type = "checkbox";
-
- // Support: Android <=4.3 only
- // Default value for a checkbox should be "on"
- support.checkOn = input.value !== "";
-
- // Support: IE <=11 only
- // Must access selectedIndex to make default options select
- support.optSelected = opt.selected;
-
- // Support: IE <=11 only
- // An input loses its value after becoming a radio
- input = document.createElement( "input" );
- input.value = "t";
- input.type = "radio";
- support.radioValue = input.value === "t";
-} )();
-
-
-var boolHook,
- attrHandle = jQuery.expr.attrHandle;
-
-jQuery.fn.extend( {
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each( function() {
- jQuery.removeAttr( this, name );
- } );
- }
-} );
-
-jQuery.extend( {
- attr: function( elem, name, value ) {
- var ret, hooks,
- nType = elem.nodeType;
-
- // Don't get/set attributes on text, comment and attribute nodes
- if ( nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
-
- // Attribute hooks are determined by the lowercase version
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
- }
-
- if ( value !== undefined ) {
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return;
- }
-
- if ( hooks && "set" in hooks &&
- ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
- return ret;
- }
-
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
- return ret;
- }
-
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ? undefined : ret;
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" &&
- jQuery.nodeName( elem, "input" ) ) {
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- },
-
- removeAttr: function( elem, value ) {
- var name,
- i = 0,
- attrNames = value && value.match( rnotwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( ( name = attrNames[ i++ ] ) ) {
- elem.removeAttribute( name );
- }
- }
- }
-} );
-
-// Hooks for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
-
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- elem.setAttribute( name, name );
- }
- return name;
- }
-};
-
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = function( elem, name, isXML ) {
- var ret, handle,
- lowercaseName = name.toLowerCase();
-
- if ( !isXML ) {
-
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ lowercaseName ];
- attrHandle[ lowercaseName ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- lowercaseName :
- null;
- attrHandle[ lowercaseName ] = handle;
- }
- return ret;
- };
-} );
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button)$/i,
- rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend( {
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- return this.each( function() {
- delete this[ jQuery.propFix[ name ] || name ];
- } );
- }
-} );
-
-jQuery.extend( {
- prop: function( elem, name, value ) {
- var ret, hooks,
- nType = elem.nodeType;
-
- // Don't get/set properties on text, comment and attribute nodes
- if ( nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks &&
- ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
- return ret;
- }
-
- return ( elem[ name ] = value );
- }
-
- if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
- return ret;
- }
-
- return elem[ name ];
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
-
- // Support: IE <=9 - 11 only
- // elem.tabIndex doesn't always return the
- // correct value when it hasn't been explicitly set
- // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr( elem, "tabindex" );
-
- return tabindex ?
- parseInt( tabindex, 10 ) :
- rfocusable.test( elem.nodeName ) ||
- rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- -1;
- }
- }
- },
-
- propFix: {
- "for": "htmlFor",
- "class": "className"
- }
-} );
-
-// Support: IE <=11 only
-// Accessing the selectedIndex property
-// forces the browser to respect setting selected
-// on the option
-// The getter ensures a default option is selected
-// when in an optgroup
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
- var parent = elem.parentNode;
- if ( parent && parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- return null;
- },
- set: function( elem ) {
- var parent = elem.parentNode;
- if ( parent ) {
- parent.selectedIndex;
-
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- }
- };
-}
-
-jQuery.each( [
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-} );
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-function getClass( elem ) {
- return elem.getAttribute && elem.getAttribute( "class" ) || "";
-}
-
-jQuery.fn.extend( {
- addClass: function( value ) {
- var classes, elem, cur, curValue, clazz, j, finalValue,
- i = 0;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each( function( j ) {
- jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
- } );
- }
-
- if ( typeof value === "string" && value ) {
- classes = value.match( rnotwhite ) || [];
-
- while ( ( elem = this[ i++ ] ) ) {
- curValue = getClass( elem );
- cur = elem.nodeType === 1 &&
- ( " " + curValue + " " ).replace( rclass, " " );
-
- if ( cur ) {
- j = 0;
- while ( ( clazz = classes[ j++ ] ) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim( cur );
- if ( curValue !== finalValue ) {
- elem.setAttribute( "class", finalValue );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, curValue, clazz, j, finalValue,
- i = 0;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each( function( j ) {
- jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
- } );
- }
-
- if ( !arguments.length ) {
- return this.attr( "class", "" );
- }
-
- if ( typeof value === "string" && value ) {
- classes = value.match( rnotwhite ) || [];
-
- while ( ( elem = this[ i++ ] ) ) {
- curValue = getClass( elem );
-
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 &&
- ( " " + curValue + " " ).replace( rclass, " " );
-
- if ( cur ) {
- j = 0;
- while ( ( clazz = classes[ j++ ] ) ) {
-
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // Only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim( cur );
- if ( curValue !== finalValue ) {
- elem.setAttribute( "class", finalValue );
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value;
-
- if ( typeof stateVal === "boolean" && type === "string" ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( jQuery.isFunction( value ) ) {
- return this.each( function( i ) {
- jQuery( this ).toggleClass(
- value.call( this, i, getClass( this ), stateVal ),
- stateVal
- );
- } );
- }
-
- return this.each( function() {
- var className, i, self, classNames;
-
- if ( type === "string" ) {
-
- // Toggle individual class names
- i = 0;
- self = jQuery( this );
- classNames = value.match( rnotwhite ) || [];
-
- while ( ( className = classNames[ i++ ] ) ) {
-
- // Check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( value === undefined || type === "boolean" ) {
- className = getClass( this );
- if ( className ) {
-
- // Store className if set
- dataPriv.set( this, "__className__", className );
- }
-
- // If the element has a class name or if we're passed `false`,
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- if ( this.setAttribute ) {
- this.setAttribute( "class",
- className || value === false ?
- "" :
- dataPriv.get( this, "__className__" ) || ""
- );
- }
- }
- } );
- },
-
- hasClass: function( selector ) {
- var className, elem,
- i = 0;
-
- className = " " + selector + " ";
- while ( ( elem = this[ i++ ] ) ) {
- if ( elem.nodeType === 1 &&
- ( " " + getClass( elem ) + " " ).replace( rclass, " " )
- .indexOf( className ) > -1
- ) {
- return true;
- }
- }
-
- return false;
- }
-} );
-
-
-
-
-var rreturn = /\r/g,
- rspaces = /[\x20\t\r\n\f]+/g;
-
-jQuery.fn.extend( {
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[ 0 ];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] ||
- jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks &&
- "get" in hooks &&
- ( ret = hooks.get( elem, "value" ) ) !== undefined
- ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
-
- // Handle most common string cases
- ret.replace( rreturn, "" ) :
-
- // Handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each( function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
-
- } else if ( typeof val === "number" ) {
- val += "";
-
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- } );
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- } );
- }
-} );
-
-jQuery.extend( {
- valHooks: {
- option: {
- get: function( elem ) {
-
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
-
- // Support: IE <=10 - 11 only
- // option.text throws exceptions (#14686, #14858)
- // Strip and collapse whitespace
- // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
- jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one",
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // Support: IE <=9 only
- // IE8-9 doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
-
- // Don't return options that are disabled or in a disabled optgroup
- !option.disabled &&
- ( !option.parentNode.disabled ||
- !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
-
- /* eslint-disable no-cond-assign */
-
- if ( option.selected =
- jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
- ) {
- optionSet = true;
- }
-
- /* eslint-enable no-cond-assign */
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- }
-} );
-
-// Radios and checkboxes getter/setter
-jQuery.each( [ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- return elem.getAttribute( "value" ) === null ? "on" : elem.value;
- };
- }
-} );
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
-
-jQuery.extend( jQuery.event, {
-
- trigger: function( event, data, elem, onlyHandlers ) {
-
- var i, cur, tmp, bubbleType, ontype, handle, special,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "." ) > -1 ) {
-
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split( "." );
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf( ":" ) < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join( "." );
- event.rnamespace = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === ( elem.ownerDocument || document ) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
- dataPriv.get( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( ( !special._default ||
- special._default.apply( eventPath.pop(), data ) === false ) &&
- acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name as the event.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[ type ]();
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- // Piggyback on a donor event to simulate a different one
- // Used only for `focus(in | out)` events
- simulate: function( type, elem, event ) {
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true
- }
- );
-
- jQuery.event.trigger( e, null, elem );
- }
-
-} );
-
-jQuery.fn.extend( {
-
- trigger: function( type, data ) {
- return this.each( function() {
- jQuery.event.trigger( type, data, this );
- } );
- },
- triggerHandler: function( type, data ) {
- var elem = this[ 0 ];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-} );
-
-
-jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup contextmenu" ).split( " " ),
- function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-} );
-
-jQuery.fn.extend( {
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-} );
-
-
-
-
-support.focusin = "onfocusin" in window;
-
-
-// Support: Firefox <=44
-// Firefox doesn't have focus(in | out) events
-// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-//
-// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
-// focus(in | out) events fire after focus & blur events,
-// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
-// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
-if ( !support.focusin ) {
- jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = dataPriv.access( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = dataPriv.access( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- dataPriv.remove( doc, fix );
-
- } else {
- dataPriv.access( doc, fix, attaches );
- }
- }
- };
- } );
-}
-var location = window.location;
-
-var nonce = jQuery.now();
-
-var rquery = ( /\?/ );
-
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
-
- // Support: IE 9 - 11 only
- // IE throws on parseFromString with invalid input.
- try {
- xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
- } catch ( e ) {
- xml = undefined;
- }
-
- if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
-
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
-
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
-
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams(
- prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
- v,
- traditional,
- add
- );
- }
- } );
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
-
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, valueOrFunction ) {
-
- // If value is a function, invoke it and use its return value
- var value = jQuery.isFunction( valueOrFunction ) ?
- valueOrFunction() :
- valueOrFunction;
-
- s[ s.length ] = encodeURIComponent( key ) + "=" +
- encodeURIComponent( value == null ? "" : value );
- };
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- } );
-
- } else {
-
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" );
-};
-
-jQuery.fn.extend( {
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map( function() {
-
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- } )
- .filter( function() {
- var type = this.type;
-
- // Use .is( ":disabled" ) so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- } )
- .map( function( i, elem ) {
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- } ) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- } ).get();
- }
-} );
-
-
-var
- r20 = /%20/g,
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
-
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat( "*" ),
-
- // Anchor tag for parsing the document origin
- originAnchor = document.createElement( "a" );
- originAnchor.href = location.href;
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
-
- // For each dataType in the dataTypeExpression
- while ( ( dataType = dataTypes[ i++ ] ) ) {
-
- // Prepend if requested
- if ( dataType[ 0 ] === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
-
- // Otherwise append
- } else {
- ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" &&
- !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- } );
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var ct, type, finalDataType, firstDataType,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
-
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
-
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
-
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
-
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s.throws ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return {
- state: "parsererror",
- error: conv ? e : "No conversion from " + prev + " to " + current
- };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend( {
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: location.href,
- type: "GET",
- isLocal: rlocalProtocol.test( location.protocol ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /\bxml\b/,
- html: /\bhtml/,
- json: /\bjson\b/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": JSON.parse,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var transport,
-
- // URL without anti-cache param
- cacheURL,
-
- // Response headers
- responseHeadersString,
- responseHeaders,
-
- // timeout handle
- timeoutTimer,
-
- // Url cleanup var
- urlAnchor,
-
- // Request state (becomes false upon send and true upon completion)
- completed,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- // Loop variable
- i,
-
- // uncached part of the url
- uncached,
-
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
-
- // Callbacks context
- callbackContext = s.context || s,
-
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context &&
- ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
-
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks( "once memory" ),
-
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
-
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
-
- // Default abort message
- strAbort = "canceled",
-
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( completed ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return completed ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( completed == null ) {
- name = requestHeadersNames[ name.toLowerCase() ] =
- requestHeadersNames[ name.toLowerCase() ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( completed == null ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( completed ) {
-
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- } else {
-
- // Lazy-add the new callbacks in a way that preserves old ones
- for ( code in map ) {
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR );
-
- // Add protocol if not provided (prefilters might expect it)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || location.href ) + "" )
- .replace( rprotocol, location.protocol + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
- // A cross-domain request is in order when the origin doesn't match the current origin.
- if ( s.crossDomain == null ) {
- urlAnchor = document.createElement( "a" );
-
- // Support: IE <=8 - 11, Edge 12 - 13
- // IE throws exception on accessing the href property if url is malformed,
- // e.g. http://example.com:80x/
- try {
- urlAnchor.href = s.url;
-
- // Support: IE <=8 - 11 only
- // Anchor's host property isn't correctly set when s.url is relative
- urlAnchor.href = urlAnchor.href;
- s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
- urlAnchor.protocol + "//" + urlAnchor.host;
- } catch ( e ) {
-
- // If there is an error parsing the URL, assume it is crossDomain,
- // it can be rejected by the transport if it is invalid
- s.crossDomain = true;
- }
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( completed ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
- fireGlobals = jQuery.event && s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- // Remove hash to simplify url manipulation
- cacheURL = s.url.replace( rhash, "" );
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // Remember the hash so we can put it back
- uncached = s.url.slice( cacheURL.length );
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
-
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in uncached url if needed
- if ( s.cache === false ) {
- cacheURL = cacheURL.replace( rts, "" );
- uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
- }
-
- // Put hash and anti-cache on the URL that will be requested (gh-1732)
- s.url = cacheURL + uncached;
-
- // Change '%20' to '+' if this is encoded form body content (gh-2658)
- } else if ( s.data && s.processData &&
- ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
- s.data = s.data.replace( r20, "+" );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
- s.accepts[ s.dataTypes[ 0 ] ] +
- ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend &&
- ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
-
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // Aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- completeDeferred.add( s.complete );
- jqXHR.done( s.success );
- jqXHR.fail( s.error );
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
-
- // If request was aborted inside ajaxSend, stop there
- if ( completed ) {
- return jqXHR;
- }
-
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = window.setTimeout( function() {
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- completed = false;
- transport.send( requestHeaders, done );
- } catch ( e ) {
-
- // Rethrow post-completion exceptions
- if ( completed ) {
- throw e;
- }
-
- // Propagate others as results
- done( -1, e );
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Ignore repeat invocations
- if ( completed ) {
- return;
- }
-
- completed = true;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- window.clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader( "Last-Modified" );
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader( "etag" );
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
-
- // Extract error from statusText and normalize for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-} );
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
-
- // Shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- // The url can be an options object (which then must have .url)
- return jQuery.ajax( jQuery.extend( {
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- }, jQuery.isPlainObject( url ) && url ) );
- };
-} );
-
-
-jQuery._evalUrl = function( url ) {
- return jQuery.ajax( {
- url: url,
-
- // Make this explicit, since user can override this through ajaxSetup (#11264)
- type: "GET",
- dataType: "script",
- cache: true,
- async: false,
- global: false,
- "throws": true
- } );
-};
-
-
-jQuery.fn.extend( {
- wrapAll: function( html ) {
- var wrap;
-
- if ( this[ 0 ] ) {
- if ( jQuery.isFunction( html ) ) {
- html = html.call( this[ 0 ] );
- }
-
- // The elements to wrap the target around
- wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
- if ( this[ 0 ].parentNode ) {
- wrap.insertBefore( this[ 0 ] );
- }
-
- wrap.map( function() {
- var elem = this;
-
- while ( elem.firstElementChild ) {
- elem = elem.firstElementChild;
- }
-
- return elem;
- } ).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each( function( i ) {
- jQuery( this ).wrapInner( html.call( this, i ) );
- } );
- }
-
- return this.each( function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- } );
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each( function( i ) {
- jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
- } );
- },
-
- unwrap: function( selector ) {
- this.parent( selector ).not( "body" ).each( function() {
- jQuery( this ).replaceWith( this.childNodes );
- } );
- return this;
- }
-} );
-
-
-jQuery.expr.pseudos.hidden = function( elem ) {
- return !jQuery.expr.pseudos.visible( elem );
-};
-jQuery.expr.pseudos.visible = function( elem ) {
- return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
-};
-
-
-
-
-jQuery.ajaxSettings.xhr = function() {
- try {
- return new window.XMLHttpRequest();
- } catch ( e ) {}
-};
-
-var xhrSuccessStatus = {
-
- // File protocol always yields status code 0, assume 200
- 0: 200,
-
- // Support: IE <=9 only
- // #1450: sometimes IE returns 1223 when it should be 204
- 1223: 204
- },
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-support.ajax = xhrSupported = !!xhrSupported;
-
-jQuery.ajaxTransport( function( options ) {
- var callback, errorCallback;
-
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( support.cors || xhrSupported && !options.crossDomain ) {
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr();
-
- xhr.open(
- options.type,
- options.url,
- options.async,
- options.username,
- options.password
- );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
-
- // Callback
- callback = function( type ) {
- return function() {
- if ( callback ) {
- callback = errorCallback = xhr.onload =
- xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
-
- if ( type === "abort" ) {
- xhr.abort();
- } else if ( type === "error" ) {
-
- // Support: IE <=9 only
- // On a manual native abort, IE9 throws
- // errors on any property access that is not readyState
- if ( typeof xhr.status !== "number" ) {
- complete( 0, "error" );
- } else {
- complete(
-
- // File: protocol always yields status 0; see #8605, #14207
- xhr.status,
- xhr.statusText
- );
- }
- } else {
- complete(
- xhrSuccessStatus[ xhr.status ] || xhr.status,
- xhr.statusText,
-
- // Support: IE <=9 only
- // IE9 has no XHR2 but throws on binary (trac-11426)
- // For XHR2 non-text, let the caller handle it (gh-2498)
- ( xhr.responseType || "text" ) !== "text" ||
- typeof xhr.responseText !== "string" ?
- { binary: xhr.response } :
- { text: xhr.responseText },
- xhr.getAllResponseHeaders()
- );
- }
- }
- };
- };
-
- // Listen to events
- xhr.onload = callback();
- errorCallback = xhr.onerror = callback( "error" );
-
- // Support: IE 9 only
- // Use onreadystatechange to replace onabort
- // to handle uncaught aborts
- if ( xhr.onabort !== undefined ) {
- xhr.onabort = errorCallback;
- } else {
- xhr.onreadystatechange = function() {
-
- // Check readyState before timeout as it changes
- if ( xhr.readyState === 4 ) {
-
- // Allow onerror to be called first,
- // but that will not handle a native abort
- // Also, save errorCallback to a variable
- // as xhr.onerror cannot be accessed
- window.setTimeout( function() {
- if ( callback ) {
- errorCallback();
- }
- } );
- }
- };
- }
-
- // Create the abort callback
- callback = callback( "abort" );
-
- try {
-
- // Do send the request (this may raise an exception)
- xhr.send( options.hasContent && options.data || null );
- } catch ( e ) {
-
- // #14683: Only rethrow if this hasn't been notified as an error yet
- if ( callback ) {
- throw e;
- }
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-} );
-
-
-
-
-// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
-jQuery.ajaxPrefilter( function( s ) {
- if ( s.crossDomain ) {
- s.contents.script = false;
- }
-} );
-
-// Install script dataType
-jQuery.ajaxSetup( {
- accepts: {
- script: "text/javascript, application/javascript, " +
- "application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /\b(?:java|ecma)script\b/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-} );
-
-// Handle cache's special case and crossDomain
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- }
-} );
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
- var script, callback;
- return {
- send: function( _, complete ) {
- script = jQuery( "<script>" ).prop( {
- charset: s.scriptCharset,
- src: s.url
- } ).on(
- "load error",
- callback = function( evt ) {
- script.remove();
- callback = null;
- if ( evt ) {
- complete( evt.type === "error" ? 404 : 200, evt.type );
- }
- }
- );
-
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- document.head.appendChild( script[ 0 ] );
- },
- abort: function() {
- if ( callback ) {
- callback();
- }
- }
- };
- }
-} );
-
-
-
-
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup( {
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-} );
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" &&
- ( s.contentType || "" )
- .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
- rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters[ "script json" ] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // Force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always( function() {
-
- // If previous value didn't exist - remove it
- if ( overwritten === undefined ) {
- jQuery( window ).removeProp( callbackName );
-
- // Otherwise restore preexisting value
- } else {
- window[ callbackName ] = overwritten;
- }
-
- // Save back as free
- if ( s[ callbackName ] ) {
-
- // Make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // Save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- } );
-
- // Delegate to script
- return "script";
- }
-} );
-
-
-
-
-// Support: Safari 8 only
-// In Safari 8 documents created via document.implementation.createHTMLDocument
-// collapse sibling forms: the second one becomes a child of the first one.
-// Because of that, this security measure has to be disabled in Safari 8.
-// https://bugs.webkit.org/show_bug.cgi?id=137337
-support.createHTMLDocument = ( function() {
- var body = document.implementation.createHTMLDocument( "" ).body;
- body.innerHTML = "<form></form><form></form>";
- return body.childNodes.length === 2;
-} )();
-
-
-// Argument "data" should be string of html
-// context (optional): If specified, the fragment will be created in this context,
-// defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( typeof data !== "string" ) {
- return [];
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
-
- var base, parsed, scripts;
-
- if ( !context ) {
-
- // Stop scripts or inline event handlers from being executed immediately
- // by using document.implementation
- if ( support.createHTMLDocument ) {
- context = document.implementation.createHTMLDocument( "" );
-
- // Set the base href for the created document
- // so any parsed elements with URLs
- // are based on the document's URL (gh-2965)
- base = context.createElement( "base" );
- base.href = document.location.href;
- context.head.appendChild( base );
- } else {
- context = document;
- }
- }
-
- parsed = rsingleTag.exec( data );
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[ 1 ] ) ];
- }
-
- parsed = buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
-};
-
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
- var selector, type, response,
- self = this,
- off = url.indexOf( " " );
-
- if ( off > -1 ) {
- selector = jQuery.trim( url.slice( off ) );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax( {
- url: url,
-
- // If "type" variable is undefined, then "GET" method will be used.
- // Make value of this field explicit since
- // user can override it through ajaxSetup method
- type: type || "GET",
- dataType: "html",
- data: params
- } ).done( function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- // If the request succeeds, this function gets "data", "status", "jqXHR"
- // but they are ignored because response was set above.
- // If it fails, this function gets "jqXHR", "status", "error"
- } ).always( callback && function( jqXHR, status ) {
- self.each( function() {
- callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
- } );
- } );
- }
-
- return this;
-};
-
-
-
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [
- "ajaxStart",
- "ajaxStop",
- "ajaxComplete",
- "ajaxError",
- "ajaxSuccess",
- "ajaxSend"
-], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-} );
-
-
-
-
-jQuery.expr.pseudos.animated = function( elem ) {
- return jQuery.grep( jQuery.timers, function( fn ) {
- return elem === fn.elem;
- } ).length;
-};
-
-
-
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
-}
-
-jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- // Set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
-
- // Need to be able to calculate position if either
- // top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
-
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
-
- // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
- options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
-
- } else {
- curElem.css( props );
- }
- }
-};
-
-jQuery.fn.extend( {
- offset: function( options ) {
-
- // Preserve chaining for setter
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each( function( i ) {
- jQuery.offset.setOffset( this, options, i );
- } );
- }
-
- var docElem, win, rect, doc,
- elem = this[ 0 ];
-
- if ( !elem ) {
- return;
- }
-
- // Support: IE <=11 only
- // Running getBoundingClientRect on a
- // disconnected node in IE throws an error
- if ( !elem.getClientRects().length ) {
- return { top: 0, left: 0 };
- }
-
- rect = elem.getBoundingClientRect();
-
- // Make sure element is not hidden (display: none)
- if ( rect.width || rect.height ) {
- doc = elem.ownerDocument;
- win = getWindow( doc );
- docElem = doc.documentElement;
-
- return {
- top: rect.top + win.pageYOffset - docElem.clientTop,
- left: rect.left + win.pageXOffset - docElem.clientLeft
- };
- }
-
- // Return zeros for disconnected and hidden elements (gh-2310)
- return rect;
- },
-
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset,
- elem = this[ 0 ],
- parentOffset = { top: 0, left: 0 };
-
- // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
- // because it is its only offset parent
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
-
- // Assume getBoundingClientRect is there when computed position is fixed
- offset = elem.getBoundingClientRect();
-
- } else {
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset = {
- top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
- left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
- };
- }
-
- // Subtract parent offsets and element margins
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
- };
- },
-
- // This method will return documentElement in the following cases:
- // 1) For the element inside the iframe without offsetParent, this method will return
- // documentElement of the parent window
- // 2) For the hidden or detached element
- // 3) For body or html element, i.e. in case of the html node - it will return itself
- //
- // but those exceptions were never presented as a real life use-cases
- // and might be considered as more preferable results.
- //
- // This logic, however, is not guaranteed and can change at any point in the future
- offsetParent: function() {
- return this.map( function() {
- var offsetParent = this.offsetParent;
-
- while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
- offsetParent = offsetParent.offsetParent;
- }
-
- return offsetParent || documentElement;
- } );
- }
-} );
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = "pageYOffset" === prop;
-
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? win[ prop ] : elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : win.pageXOffset,
- top ? val : win.pageYOffset
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length );
- };
-} );
-
-// Support: Safari <=7 - 9.1, Chrome <=37 - 49
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
-// getComputedStyle returns percent when specified for top/left/bottom/right;
-// rather than make the css module depend on the offset module, just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
-
- // If curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
-} );
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
- function( defaultExtra, funcName ) {
-
- // Margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
-
- // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
- return funcName.indexOf( "outer" ) === 0 ?
- elem[ "inner" + name ] :
- elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
- // whichever is greatest
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
-
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable );
- };
- } );
-} );
-
-
-jQuery.fn.extend( {
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
-
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ?
- this.off( selector, "**" ) :
- this.off( types, selector || "**", fn );
- }
-} );
-
-jQuery.parseJSON = JSON.parse;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- } );
-}
-
-
-
-
-
-var
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in AMD
-// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( !noGlobal ) {
- window.jQuery = window.$ = jQuery;
-}
-
-
-return jQuery;
-} );
diff --git a/docs/html/_static/jquery.js b/docs/html/_static/jquery.js
deleted file mode 100644
index f6a6a99..0000000
--- a/docs/html/_static/jquery.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v3.1.0 | (c) jQuery Foundation | jquery.org/license */
-!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?a<0?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,
-r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Y,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:X.test(c)?JSON.parse(c):c)}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=V.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var $=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,_=new RegExp("^(?:([+-])=|)("+$+")([a-z%]*)$","i"),aa=["Top","Right","Bottom","Left"],ba=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ca=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function da(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&_.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ea={};function fa(a){var b,c=a.ownerDocument,d=a.nodeName,e=ea[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ea[d]=e,e)}function ga(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=V.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&ba(d)&&(e[f]=fa(d))):"none"!==c&&(e[f]="none",V.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ga(this,!0)},hide:function(){return ga(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){ba(this)?r(this).show():r(this).hide()})}});var ha=/^(?:checkbox|radio)$/i,ia=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;c<d;c++)V.set(a[c],"globalEval",!b||V.get(b[c],"globalEval"))}var na=/<|&#?\w+;/;function oa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(na.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ia.exec(f)||["",""])[1].toLowerCase(),i=ka[h]||ka._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;c<h;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==va()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===va()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&r.nodeName(this,"input"))return this.click(),!1},_default:function(a){return r.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ta:ua,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:ua,isPropagationStopped:ua,isImmediatePropagationStopped:ua,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ta,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ta,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ta,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&qa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ra.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return wa(this,a,b,c,d)},one:function(a,b,c,d){return wa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=ua),this.each(function(){r.event.remove(this,a,c,b)})}});var xa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/<script|<style|<link/i,za=/checked\s*(?:[^=]|=\s*.checked.)/i,Aa=/^true\/(.*)/,Ba=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ga(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ha.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ha(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,la(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ea),l=0;l<i;l++)j=h[l],ja.test(j.type||"")&&!V.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ba,""),k))}return a}function Ia(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(la(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&ma(la(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(xa,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;d<e;d++)Ga(f[d],g[d]);if(b)if(c)for(f=f||la(a),g=g||la(h),d=0,e=f.length;d<e;d++)Fa(f[d],g[d]);else Fa(a,h);return g=la(h,"script"),g.length>0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(la(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(la(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ja=/^margin/,Ka=new RegExp("^("+$+")(?!px)[a-z%]+$","i"),La=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",pa.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,pa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Ma(a,b,c){var d,e,f,g,h=a.style;return c=c||La(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ka.test(g)&&Ja.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Na(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Oa=/^(none|table(?!-c[ea]).+)/,Pa={position:"absolute",visibility:"hidden",display:"block"},Qa={letterSpacing:"0",fontWeight:"400"},Ra=["Webkit","Moz","ms"],Sa=d.createElement("div").style;function Ta(a){if(a in Sa)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ra.length;while(c--)if(a=Ra[c]+b,a in Sa)return a}function Ua(a,b,c){var d=_.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Va(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+aa[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+aa[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+aa[f]+"Width",!0,e))):(g+=r.css(a,"padding"+aa[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+aa[f]+"Width",!0,e)));return g}function Wa(a,b,c){var d,e=!0,f=La(a),g="border-box"===r.css(a,"boxSizing",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),d<=0||null==d){if(d=Ma(a,b,f),(d<0||null==d)&&(d=a.style[b]),Ka.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Va(a,b,c||(g?"border":"content"),e,f)+"px"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ma(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=_.exec(c))&&e[1]&&(c=da(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ma(a,b,d)),"normal"===e&&b in Qa&&(e=Qa[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Oa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Wa(a,b,d):ca(a,Pa,function(){return Wa(a,b,d)})},set:function(a,c,d){var e,f=d&&La(a),g=d&&Va(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=_.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ua(a,c,g)}}}),r.cssHooks.marginLeft=Na(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Ma(a,"marginLeft"))||a.getBoundingClientRect().left-ca(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+aa[d]+b]=f[d]||f[d-2]||f[0];return e}},Ja.test(a)||(r.cssHooks[a+b].set=Ua)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=La(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function eb(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&ba(a),q=V.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],$a.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=V.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ga([a],!0),j=a.style.display||j,k=r.css(a,"display"),ga([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=V.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ga([a],!0),m.done(function(){p||ga([a]),V.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=db(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function fb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],r.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function gb(a,b,c){var d,e,f=0,g=gb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||bb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||bb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(fb(k,j.opts.specialEasing);f<g;f++)if(d=gb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,db,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}r.Animation=r.extend(gb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return da(c.elem,a,_.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(K);for(var c,d=0,e=a.length;d<e;d++)c=a[d],gb.tweeners[c]=gb.tweeners[c]||[],gb.tweeners[c].unshift(b)},prefilters:[eb],prefilter:function(a,b){b?gb.prefilters.unshift(a):gb.prefilters.push(a)}}),r.speed=function(a,b,c){var e=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off||d.hidden?e.duration=0:e.duration="number"==typeof e.duration?e.duration:e.duration in r.fx.speeds?r.fx.speeds[e.duration]:r.fx.speeds._default,null!=e.queue&&e.queue!==!0||(e.queue="fx"),e.old=e.complete,e.complete=function(){r.isFunction(e.old)&&e.old.call(this),e.queue&&r.dequeue(this,e.queue)},e},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(ba).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=gb(this,r.extend({},a),f);(e||V.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=V.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&_a.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=V.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(cb(b,!0),a,d,e)}}),r.each({slideDown:cb("show"),slideUp:cb("hide"),slideToggle:cb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(Ya=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),Ya=void 0},r.fx.timer=function(a){r.timers.push(a),a()?r.fx.start():r.timers.pop()},r.fx.interval=13,r.fx.start=function(){Za||(Za=a.requestAnimationFrame?a.requestAnimationFrame(ab):a.setInterval(r.fx.tick,r.fx.interval))},r.fx.stop=function(){a.cancelAnimationFrame?a.cancelAnimationFrame(Za):a.clearInterval(Za),Za=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var hb,ib=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);
-if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i<h;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,"optgroup"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Qb=[],Rb=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Qb.pop()||r.expando+"_"+rb++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Rb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Rb.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Rb,"$1"+e):b.jsonp!==!1&&(b.url+=(sb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Qb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=B.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=oa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=r.trim(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length};function Sb(a){return r.isWindow(a)?a:9===a.nodeType&&a.defaultView}r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=Sb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),r.nodeName(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||pa})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return S(this,function(a,d,e){var f=Sb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Na(o.pixelPosition,function(a,c){if(c)return c=Ma(a,b),Ka.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return S(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.parseJSON=JSON.parse,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Tb=a.jQuery,Ub=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Ub),b&&a.jQuery===r&&(a.jQuery=Tb),r},b||(a.jQuery=a.$=r),r});
diff --git a/docs/html/_static/minus.png b/docs/html/_static/minus.png
deleted file mode 100644
index d96755f..0000000
--- a/docs/html/_static/minus.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/navigation.png b/docs/html/_static/navigation.png
deleted file mode 100644
index fda6cd2..0000000
--- a/docs/html/_static/navigation.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/plus.png b/docs/html/_static/plus.png
deleted file mode 100644
index 7107cec..0000000
--- a/docs/html/_static/plus.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/pygments.css b/docs/html/_static/pygments.css
deleted file mode 100644
index 20c4814..0000000
--- a/docs/html/_static/pygments.css
+++ /dev/null
@@ -1,69 +0,0 @@
-.highlight .hll { background-color: #ffffcc }
-.highlight { background: #eeffcc; }
-.highlight .c { color: #408090; font-style: italic } /* Comment */
-.highlight .err { border: 1px solid #FF0000 } /* Error */
-.highlight .k { color: #007020; font-weight: bold } /* Keyword */
-.highlight .o { color: #666666 } /* Operator */
-.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #007020 } /* Comment.Preproc */
-.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
-.highlight .gd { color: #A00000 } /* Generic.Deleted */
-.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #FF0000 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #00A000 } /* Generic.Inserted */
-.highlight .go { color: #333333 } /* Generic.Output */
-.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
-.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #0044DD } /* Generic.Traceback */
-.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #007020 } /* Keyword.Pseudo */
-.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #902000 } /* Keyword.Type */
-.highlight .m { color: #208050 } /* Literal.Number */
-.highlight .s { color: #4070a0 } /* Literal.String */
-.highlight .na { color: #4070a0 } /* Name.Attribute */
-.highlight .nb { color: #007020 } /* Name.Builtin */
-.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
-.highlight .no { color: #60add5 } /* Name.Constant */
-.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
-.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
-.highlight .ne { color: #007020 } /* Name.Exception */
-.highlight .nf { color: #06287e } /* Name.Function */
-.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
-.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
-.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #bb60d5 } /* Name.Variable */
-.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
-.highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mb { color: #208050 } /* Literal.Number.Bin */
-.highlight .mf { color: #208050 } /* Literal.Number.Float */
-.highlight .mh { color: #208050 } /* Literal.Number.Hex */
-.highlight .mi { color: #208050 } /* Literal.Number.Integer */
-.highlight .mo { color: #208050 } /* Literal.Number.Oct */
-.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
-.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
-.highlight .sc { color: #4070a0 } /* Literal.String.Char */
-.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
-.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
-.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
-.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
-.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
-.highlight .sx { color: #c65d09 } /* Literal.String.Other */
-.highlight .sr { color: #235388 } /* Literal.String.Regex */
-.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
-.highlight .ss { color: #517918 } /* Literal.String.Symbol */
-.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #06287e } /* Name.Function.Magic */
-.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
-.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
-.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
-.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
-.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file
diff --git a/docs/html/_static/searchtools.js b/docs/html/_static/searchtools.js
deleted file mode 100644
index 33fedf4..0000000
--- a/docs/html/_static/searchtools.js
+++ /dev/null
@@ -1,761 +0,0 @@
-/*
- * searchtools.js_t
- * ~~~~~~~~~~~~~~~~
- *
- * Sphinx JavaScript utilities for the full-text search.
- *
- * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-
-/* Non-minified version JS is _stemmer.js if file is provided */
-/**
- * Porter Stemmer
- */
-var Stemmer = function() {
-
- var step2list = {
- ational: 'ate',
- tional: 'tion',
- enci: 'ence',
- anci: 'ance',
- izer: 'ize',
- bli: 'ble',
- alli: 'al',
- entli: 'ent',
- eli: 'e',
- ousli: 'ous',
- ization: 'ize',
- ation: 'ate',
- ator: 'ate',
- alism: 'al',
- iveness: 'ive',
- fulness: 'ful',
- ousness: 'ous',
- aliti: 'al',
- iviti: 'ive',
- biliti: 'ble',
- logi: 'log'
- };
-
- var step3list = {
- icate: 'ic',
- ative: '',
- alize: 'al',
- iciti: 'ic',
- ical: 'ic',
- ful: '',
- ness: ''
- };
-
- var c = "[^aeiou]"; // consonant
- var v = "[aeiouy]"; // vowel
- var C = c + "[^aeiouy]*"; // consonant sequence
- var V = v + "[aeiou]*"; // vowel sequence
-
- var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
- var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
- var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
- var s_v = "^(" + C + ")?" + v; // vowel in stem
-
- this.stemWord = function (w) {
- var stem;
- var suffix;
- var firstch;
- var origword = w;
-
- if (w.length < 3)
- return w;
-
- var re;
- var re2;
- var re3;
- var re4;
-
- firstch = w.substr(0,1);
- if (firstch == "y")
- w = firstch.toUpperCase() + w.substr(1);
-
- // Step 1a
- re = /^(.+?)(ss|i)es$/;
- re2 = /^(.+?)([^s])s$/;
-
- if (re.test(w))
- w = w.replace(re,"$1$2");
- else if (re2.test(w))
- w = w.replace(re2,"$1$2");
-
- // Step 1b
- re = /^(.+?)eed$/;
- re2 = /^(.+?)(ed|ing)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- re = new RegExp(mgr0);
- if (re.test(fp[1])) {
- re = /.$/;
- w = w.replace(re,"");
- }
- }
- else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1];
- re2 = new RegExp(s_v);
- if (re2.test(stem)) {
- w = stem;
- re2 = /(at|bl|iz)$/;
- re3 = new RegExp("([^aeiouylsz])\\1$");
- re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
- if (re2.test(w))
- w = w + "e";
- else if (re3.test(w)) {
- re = /.$/;
- w = w.replace(re,"");
- }
- else if (re4.test(w))
- w = w + "e";
- }
- }
-
- // Step 1c
- re = /^(.+?)y$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(s_v);
- if (re.test(stem))
- w = stem + "i";
- }
-
- // Step 2
- re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = new RegExp(mgr0);
- if (re.test(stem))
- w = stem + step2list[suffix];
- }
-
- // Step 3
- re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- suffix = fp[2];
- re = new RegExp(mgr0);
- if (re.test(stem))
- w = stem + step3list[suffix];
- }
-
- // Step 4
- re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
- re2 = /^(.+?)(s|t)(ion)$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(mgr1);
- if (re.test(stem))
- w = stem;
- }
- else if (re2.test(w)) {
- var fp = re2.exec(w);
- stem = fp[1] + fp[2];
- re2 = new RegExp(mgr1);
- if (re2.test(stem))
- w = stem;
- }
-
- // Step 5
- re = /^(.+?)e$/;
- if (re.test(w)) {
- var fp = re.exec(w);
- stem = fp[1];
- re = new RegExp(mgr1);
- re2 = new RegExp(meq1);
- re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
- if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
- w = stem;
- }
- re = /ll$/;
- re2 = new RegExp(mgr1);
- if (re.test(w) && re2.test(w)) {
- re = /.$/;
- w = w.replace(re,"");
- }
-
- // and turn initial Y back to y
- if (firstch == "y")
- w = firstch.toLowerCase() + w.substr(1);
- return w;
- }
-}
-
-
-
-/**
- * Simple result scoring code.
- */
-var Scorer = {
- // Implement the following function to further tweak the score for each result
- // The function takes a result array [filename, title, anchor, descr, score]
- // and returns the new score.
- /*
- score: function(result) {
- return result[4];
- },
- */
-
- // query matches the full name of an object
- objNameMatch: 11,
- // or matches in the last dotted part of the object name
- objPartialMatch: 6,
- // Additive scores depending on the priority of the object
- objPrio: {0: 15, // used to be importantResults
- 1: 5, // used to be objectResults
- 2: -5}, // used to be unimportantResults
- // Used when the priority is not in the mapping.
- objPrioDefault: 0,
-
- // query found in title
- title: 15,
- // query found in terms
- term: 5
-};
-
-
-
-
-
-var splitChars = (function() {
- var result = {};
- var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
- 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
- 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
- 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
- 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
- 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
- 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
- 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
- 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
- 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
- var i, j, start, end;
- for (i = 0; i < singles.length; i++) {
- result[singles[i]] = true;
- }
- var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
- [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
- [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
- [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
- [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
- [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
- [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
- [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
- [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
- [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
- [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
- [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
- [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
- [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
- [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
- [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
- [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
- [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
- [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
- [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
- [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
- [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
- [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
- [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
- [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
- [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
- [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
- [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
- [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
- [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
- [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
- [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
- [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
- [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
- [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
- [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
- [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
- [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
- [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
- [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
- [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
- [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
- [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
- [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
- [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
- [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
- [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
- [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
- [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
- for (i = 0; i < ranges.length; i++) {
- start = ranges[i][0];
- end = ranges[i][1];
- for (j = start; j <= end; j++) {
- result[j] = true;
- }
- }
- return result;
-})();
-
-function splitQuery(query) {
- var result = [];
- var start = -1;
- for (var i = 0; i < query.length; i++) {
- if (splitChars[query.charCodeAt(i)]) {
- if (start !== -1) {
- result.push(query.slice(start, i));
- start = -1;
- }
- } else if (start === -1) {
- start = i;
- }
- }
- if (start !== -1) {
- result.push(query.slice(start));
- }
- return result;
-}
-
-
-
-
-/**
- * Search Module
- */
-var Search = {
-
- _index : null,
- _queued_query : null,
- _pulse_status : -1,
-
- init : function() {
- var params = $.getQueryParameters();
- if (params.q) {
- var query = params.q[0];
- $('input[name="q"]')[0].value = query;
- this.performSearch(query);
- }
- },
-
- loadIndex : function(url) {
- $.ajax({type: "GET", url: url, data: null,
- dataType: "script", cache: true,
- complete: function(jqxhr, textstatus) {
- if (textstatus != "success") {
- document.getElementById("searchindexloader").src = url;
- }
- }});
- },
-
- setIndex : function(index) {
- var q;
- this._index = index;
- if ((q = this._queued_query) !== null) {
- this._queued_query = null;
- Search.query(q);
- }
- },
-
- hasIndex : function() {
- return this._index !== null;
- },
-
- deferQuery : function(query) {
- this._queued_query = query;
- },
-
- stopPulse : function() {
- this._pulse_status = 0;
- },
-
- startPulse : function() {
- if (this._pulse_status >= 0)
- return;
- function pulse() {
- var i;
- Search._pulse_status = (Search._pulse_status + 1) % 4;
- var dotString = '';
- for (i = 0; i < Search._pulse_status; i++)
- dotString += '.';
- Search.dots.text(dotString);
- if (Search._pulse_status > -1)
- window.setTimeout(pulse, 500);
- }
- pulse();
- },
-
- /**
- * perform a search for something (or wait until index is loaded)
- */
- performSearch : function(query) {
- // create the required interface elements
- this.out = $('#search-results');
- this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
- this.dots = $('<span></span>').appendTo(this.title);
- this.status = $('<p style="display: none"></p>').appendTo(this.out);
- this.output = $('<ul class="search"/>').appendTo(this.out);
-
- $('#search-progress').text(_('Preparing search...'));
- this.startPulse();
-
- // index already loaded, the browser was quick!
- if (this.hasIndex())
- this.query(query);
- else
- this.deferQuery(query);
- },
-
- /**
- * execute search (requires search index to be loaded)
- */
- query : function(query) {
- var i;
- var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
-
- // stem the searchterms and add them to the correct list
- var stemmer = new Stemmer();
- var searchterms = [];
- var excluded = [];
- var hlterms = [];
- var tmp = splitQuery(query);
- var objectterms = [];
- for (i = 0; i < tmp.length; i++) {
- if (tmp[i] !== "") {
- objectterms.push(tmp[i].toLowerCase());
- }
-
- if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
- tmp[i] === "") {
- // skip this "word"
- continue;
- }
- // stem the word
- var word = stemmer.stemWord(tmp[i].toLowerCase());
- // prevent stemmer from cutting word smaller than two chars
- if(word.length < 3 && tmp[i].length >= 3) {
- word = tmp[i];
- }
- var toAppend;
- // select the correct list
- if (word[0] == '-') {
- toAppend = excluded;
- word = word.substr(1);
- }
- else {
- toAppend = searchterms;
- hlterms.push(tmp[i].toLowerCase());
- }
- // only add if not already in the list
- if (!$u.contains(toAppend, word))
- toAppend.push(word);
- }
- var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
-
- // console.debug('SEARCH: searching for:');
- // console.info('required: ', searchterms);
- // console.info('excluded: ', excluded);
-
- // prepare search
- var terms = this._index.terms;
- var titleterms = this._index.titleterms;
-
- // array of [filename, title, anchor, descr, score]
- var results = [];
- $('#search-progress').empty();
-
- // lookup as object
- for (i = 0; i < objectterms.length; i++) {
- var others = [].concat(objectterms.slice(0, i),
- objectterms.slice(i+1, objectterms.length));
- results = results.concat(this.performObjectSearch(objectterms[i], others));
- }
-
- // lookup as search terms in fulltext
- results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
-
- // let the scorer override scores with a custom scoring function
- if (Scorer.score) {
- for (i = 0; i < results.length; i++)
- results[i][4] = Scorer.score(results[i]);
- }
-
- // now sort the results by score (in opposite order of appearance, since the
- // display function below uses pop() to retrieve items) and then
- // alphabetically
- results.sort(function(a, b) {
- var left = a[4];
- var right = b[4];
- if (left > right) {
- return 1;
- } else if (left < right) {
- return -1;
- } else {
- // same score: sort alphabetically
- left = a[1].toLowerCase();
- right = b[1].toLowerCase();
- return (left > right) ? -1 : ((left < right) ? 1 : 0);
- }
- });
-
- // for debugging
- //Search.lastresults = results.slice(); // a copy
- //console.info('search results:', Search.lastresults);
-
- // print the results
- var resultCount = results.length;
- function displayNextItem() {
- // results left, load the summary and display it
- if (results.length) {
- var item = results.pop();
- var listItem = $('<li style="display:none"></li>');
- if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
- // dirhtml builder
- var dirname = item[0] + '/';
- if (dirname.match(/\/index\/$/)) {
- dirname = dirname.substring(0, dirname.length-6);
- } else if (dirname == 'index/') {
- dirname = '';
- }
- listItem.append($('<a/>').attr('href',
- DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
- highlightstring + item[2]).html(item[1]));
- } else {
- // normal html builders
- listItem.append($('<a/>').attr('href',
- item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
- highlightstring + item[2]).html(item[1]));
- }
- if (item[3]) {
- listItem.append($('<span> (' + item[3] + ')</span>'));
- Search.output.append(listItem);
- listItem.slideDown(5, function() {
- displayNextItem();
- });
- } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
- var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
- if (suffix === undefined) {
- suffix = '.txt';
- }
- $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
- dataType: "text",
- complete: function(jqxhr, textstatus) {
- var data = jqxhr.responseText;
- if (data !== '' && data !== undefined) {
- listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
- }
- Search.output.append(listItem);
- listItem.slideDown(5, function() {
- displayNextItem();
- });
- }});
- } else {
- // no source available, just display title
- Search.output.append(listItem);
- listItem.slideDown(5, function() {
- displayNextItem();
- });
- }
- }
- // search finished, update title and status message
- else {
- Search.stopPulse();
- Search.title.text(_('Search Results'));
- if (!resultCount)
- Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
- else
- Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
- Search.status.fadeIn(500);
- }
- }
- displayNextItem();
- },
-
- /**
- * search for object names
- */
- performObjectSearch : function(object, otherterms) {
- var filenames = this._index.filenames;
- var docnames = this._index.docnames;
- var objects = this._index.objects;
- var objnames = this._index.objnames;
- var titles = this._index.titles;
-
- var i;
- var results = [];
-
- for (var prefix in objects) {
- for (var name in objects[prefix]) {
- var fullname = (prefix ? prefix + '.' : '') + name;
- if (fullname.toLowerCase().indexOf(object) > -1) {
- var score = 0;
- var parts = fullname.split('.');
- // check for different match types: exact matches of full name or
- // "last name" (i.e. last dotted part)
- if (fullname == object || parts[parts.length - 1] == object) {
- score += Scorer.objNameMatch;
- // matches in last name
- } else if (parts[parts.length - 1].indexOf(object) > -1) {
- score += Scorer.objPartialMatch;
- }
- var match = objects[prefix][name];
- var objname = objnames[match[1]][2];
- var title = titles[match[0]];
- // If more than one term searched for, we require other words to be
- // found in the name/title/description
- if (otherterms.length > 0) {
- var haystack = (prefix + ' ' + name + ' ' +
- objname + ' ' + title).toLowerCase();
- var allfound = true;
- for (i = 0; i < otherterms.length; i++) {
- if (haystack.indexOf(otherterms[i]) == -1) {
- allfound = false;
- break;
- }
- }
- if (!allfound) {
- continue;
- }
- }
- var descr = objname + _(', in ') + title;
-
- var anchor = match[3];
- if (anchor === '')
- anchor = fullname;
- else if (anchor == '-')
- anchor = objnames[match[1]][1] + '-' + fullname;
- // add custom score for some objects according to scorer
- if (Scorer.objPrio.hasOwnProperty(match[2])) {
- score += Scorer.objPrio[match[2]];
- } else {
- score += Scorer.objPrioDefault;
- }
- results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
- }
- }
- }
-
- return results;
- },
-
- /**
- * search for full-text terms in the index
- */
- performTermsSearch : function(searchterms, excluded, terms, titleterms) {
- var docnames = this._index.docnames;
- var filenames = this._index.filenames;
- var titles = this._index.titles;
-
- var i, j, file;
- var fileMap = {};
- var scoreMap = {};
- var results = [];
-
- // perform the search on the required terms
- for (i = 0; i < searchterms.length; i++) {
- var word = searchterms[i];
- var files = [];
- var _o = [
- {files: terms[word], score: Scorer.term},
- {files: titleterms[word], score: Scorer.title}
- ];
-
- // no match but word was a required one
- if ($u.every(_o, function(o){return o.files === undefined;})) {
- break;
- }
- // found search word in contents
- $u.each(_o, function(o) {
- var _files = o.files;
- if (_files === undefined)
- return
-
- if (_files.length === undefined)
- _files = [_files];
- files = files.concat(_files);
-
- // set score for the word in each file to Scorer.term
- for (j = 0; j < _files.length; j++) {
- file = _files[j];
- if (!(file in scoreMap))
- scoreMap[file] = {}
- scoreMap[file][word] = o.score;
- }
- });
-
- // create the mapping
- for (j = 0; j < files.length; j++) {
- file = files[j];
- if (file in fileMap)
- fileMap[file].push(word);
- else
- fileMap[file] = [word];
- }
- }
-
- // now check if the files don't contain excluded terms
- for (file in fileMap) {
- var valid = true;
-
- // check if all requirements are matched
- if (fileMap[file].length != searchterms.length)
- continue;
-
- // ensure that none of the excluded terms is in the search result
- for (i = 0; i < excluded.length; i++) {
- if (terms[excluded[i]] == file ||
- titleterms[excluded[i]] == file ||
- $u.contains(terms[excluded[i]] || [], file) ||
- $u.contains(titleterms[excluded[i]] || [], file)) {
- valid = false;
- break;
- }
- }
-
- // if we have still a valid result we can add it to the result list
- if (valid) {
- // select one (max) score for the file.
- // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
- var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
- results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
- }
- }
- return results;
- },
-
- /**
- * helper function to return a node containing the
- * search summary for a given text. keywords is a list
- * of stemmed words, hlwords is the list of normal, unstemmed
- * words. the first one is used to find the occurrence, the
- * latter for highlighting it.
- */
- makeSearchSummary : function(text, keywords, hlwords) {
- var textLower = text.toLowerCase();
- var start = 0;
- $.each(keywords, function() {
- var i = textLower.indexOf(this.toLowerCase());
- if (i > -1)
- start = i;
- });
- start = Math.max(start - 120, 0);
- var excerpt = ((start > 0) ? '...' : '') +
- $.trim(text.substr(start, 240)) +
- ((start + 240 - text.length) ? '...' : '');
- var rv = $('<div class="context"></div>').text(excerpt);
- $.each(hlwords, function() {
- rv = rv.highlightText(this, 'highlighted');
- });
- return rv;
- }
-};
-
-$(document).ready(function() {
- Search.init();
-}); \ No newline at end of file
diff --git a/docs/html/_static/sphinxdoc.css b/docs/html/_static/sphinxdoc.css
deleted file mode 100644
index 8876773..0000000
--- a/docs/html/_static/sphinxdoc.css
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * sphinxdoc.css_t
- * ~~~~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- sphinxdoc theme. Originally created by
- * Armin Ronacher for Werkzeug.
- *
- * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-body {
- font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
- 'Verdana', sans-serif;
- font-size: 14px;
- letter-spacing: -0.01em;
- line-height: 150%;
- text-align: center;
- background-color: #BFD1D4;
- color: black;
- padding: 0;
- border: 1px solid #aaa;
-
- margin: 0px 80px 0px 80px;
- min-width: 740px;
-}
-
-div.document {
- background-color: white;
- text-align: left;
- background-image: url(contents.png);
- background-repeat: repeat-x;
-}
-
-div.bodywrapper {
- margin: 0 240px 0 0;
- border-right: 1px solid #ccc;
-}
-
-div.body {
- margin: 0;
- padding: 0.5em 20px 20px 20px;
-}
-
-div.related {
- font-size: 1em;
-}
-
-div.related ul {
- background-image: url(navigation.png);
- height: 2em;
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
-}
-
-div.related ul li {
- margin: 0;
- padding: 0;
- height: 2em;
- float: left;
-}
-
-div.related ul li.right {
- float: right;
- margin-right: 5px;
-}
-
-div.related ul li a {
- margin: 0;
- padding: 0 5px 0 5px;
- line-height: 1.75em;
- color: #EE9816;
-}
-
-div.related ul li a:hover {
- color: #3CA8E7;
-}
-
-div.sphinxsidebarwrapper {
- padding: 0;
-}
-
-div.sphinxsidebar {
- margin: 0;
- padding: 0.5em 15px 15px 0;
- width: 210px;
- float: right;
- font-size: 1em;
- text-align: left;
-}
-
-div.sphinxsidebar h3, div.sphinxsidebar h4 {
- margin: 1em 0 0.5em 0;
- font-size: 1em;
- padding: 0.1em 0 0.1em 0.5em;
- color: white;
- border: 1px solid #86989B;
- background-color: #AFC1C4;
-}
-
-div.sphinxsidebar h3 a {
- color: white;
-}
-
-div.sphinxsidebar ul {
- padding-left: 1.5em;
- margin-top: 7px;
- padding: 0;
- line-height: 130%;
-}
-
-div.sphinxsidebar ul ul {
- margin-left: 20px;
-}
-
-div.footer {
- background-color: #E3EFF1;
- color: #86989B;
- padding: 3px 8px 3px 0;
- clear: both;
- font-size: 0.8em;
- text-align: right;
-}
-
-div.footer a {
- color: #86989B;
- text-decoration: underline;
-}
-
-/* -- body styles ----------------------------------------------------------- */
-
-p {
- margin: 0.8em 0 0.5em 0;
-}
-
-a {
- color: #CA7900;
- text-decoration: none;
-}
-
-a:hover {
- color: #2491CF;
-}
-
-div.body a {
- text-decoration: underline;
-}
-
-h1 {
- margin: 0;
- padding: 0.7em 0 0.3em 0;
- font-size: 1.5em;
- color: #11557C;
-}
-
-h2 {
- margin: 1.3em 0 0.2em 0;
- font-size: 1.35em;
- padding: 0;
-}
-
-h3 {
- margin: 1em 0 -0.3em 0;
- font-size: 1.2em;
-}
-
-div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a {
- color: black!important;
-}
-
-h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor {
- display: none;
- margin: 0 0 0 0.3em;
- padding: 0 0.2em 0 0.2em;
- color: #aaa!important;
-}
-
-h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor,
-h5:hover a.anchor, h6:hover a.anchor {
- display: inline;
-}
-
-h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover,
-h5 a.anchor:hover, h6 a.anchor:hover {
- color: #777;
- background-color: #eee;
-}
-
-a.headerlink {
- color: #c60f0f!important;
- font-size: 1em;
- margin-left: 6px;
- padding: 0 4px 0 4px;
- text-decoration: none!important;
-}
-
-a.headerlink:hover {
- background-color: #ccc;
- color: white!important;
-}
-
-cite, code, code {
- font-family: 'Consolas', 'Deja Vu Sans Mono',
- 'Bitstream Vera Sans Mono', monospace;
- font-size: 0.95em;
- letter-spacing: 0.01em;
-}
-
-code {
- background-color: #f2f2f2;
- border-bottom: 1px solid #ddd;
- color: #333;
-}
-
-code.descname, code.descclassname, code.xref {
- border: 0;
-}
-
-hr {
- border: 1px solid #abc;
- margin: 2em;
-}
-
-a code {
- border: 0;
- color: #CA7900;
-}
-
-a code:hover {
- color: #2491CF;
-}
-
-pre {
- font-family: 'Consolas', 'Deja Vu Sans Mono',
- 'Bitstream Vera Sans Mono', monospace;
- font-size: 0.95em;
- letter-spacing: 0.015em;
- line-height: 120%;
- padding: 0.5em;
- border: 1px solid #ccc;
- background-color: #f8f8f8;
-}
-
-pre a {
- color: inherit;
- text-decoration: underline;
-}
-
-td.linenos pre {
- padding: 0.5em 0;
-}
-
-div.quotebar {
- background-color: #f8f8f8;
- max-width: 250px;
- float: right;
- padding: 2px 7px;
- border: 1px solid #ccc;
-}
-
-div.topic {
- background-color: #f8f8f8;
-}
-
-table {
- border-collapse: collapse;
- margin: 0 -0.5em 0 -0.5em;
-}
-
-table td, table th {
- padding: 0.2em 0.5em 0.2em 0.5em;
-}
-
-div.admonition, div.warning {
- font-size: 0.9em;
- margin: 1em 0 1em 0;
- border: 1px solid #86989B;
- background-color: #f7f7f7;
- padding: 0;
-}
-
-div.admonition p, div.warning p {
- margin: 0.5em 1em 0.5em 1em;
- padding: 0;
-}
-
-div.admonition pre, div.warning pre {
- margin: 0.4em 1em 0.4em 1em;
-}
-
-div.admonition p.admonition-title,
-div.warning p.admonition-title {
- margin: 0;
- padding: 0.1em 0 0.1em 0.5em;
- color: white;
- border-bottom: 1px solid #86989B;
- font-weight: bold;
- background-color: #AFC1C4;
-}
-
-div.warning {
- border: 1px solid #940000;
-}
-
-div.warning p.admonition-title {
- background-color: #CF0000;
- border-bottom-color: #940000;
-}
-
-div.admonition ul, div.admonition ol,
-div.warning ul, div.warning ol {
- margin: 0.1em 0.5em 0.5em 3em;
- padding: 0;
-}
-
-div.versioninfo {
- margin: 1em 0 0 0;
- border: 1px solid #ccc;
- background-color: #DDEAF0;
- padding: 8px;
- line-height: 1.3em;
- font-size: 0.9em;
-}
-
-.viewcode-back {
- font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
- 'Verdana', sans-serif;
-}
-
-div.viewcode-block:target {
- background-color: #f4debf;
- border-top: 1px solid #ac9;
- border-bottom: 1px solid #ac9;
-}
-
-div.code-block-caption {
- background-color: #ddd;
- color: #222;
- border: 1px solid #ccc;
-} \ No newline at end of file
diff --git a/docs/html/_static/underscore-1.3.1.js b/docs/html/_static/underscore-1.3.1.js
deleted file mode 100644
index 208d4cd..0000000
--- a/docs/html/_static/underscore-1.3.1.js
+++ /dev/null
@@ -1,999 +0,0 @@
-// Underscore.js 1.3.1
-// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-
-(function() {
-
- // Baseline setup
- // --------------
-
- // Establish the root object, `window` in the browser, or `global` on the server.
- var root = this;
-
- // Save the previous value of the `_` variable.
- var previousUnderscore = root._;
-
- // Establish the object that gets returned to break out of a loop iteration.
- var breaker = {};
-
- // Save bytes in the minified (but not gzipped) version:
- var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
-
- // Create quick reference variables for speed access to core prototypes.
- var slice = ArrayProto.slice,
- unshift = ArrayProto.unshift,
- toString = ObjProto.toString,
- hasOwnProperty = ObjProto.hasOwnProperty;
-
- // All **ECMAScript 5** native function implementations that we hope to use
- // are declared here.
- var
- nativeForEach = ArrayProto.forEach,
- nativeMap = ArrayProto.map,
- nativeReduce = ArrayProto.reduce,
- nativeReduceRight = ArrayProto.reduceRight,
- nativeFilter = ArrayProto.filter,
- nativeEvery = ArrayProto.every,
- nativeSome = ArrayProto.some,
- nativeIndexOf = ArrayProto.indexOf,
- nativeLastIndexOf = ArrayProto.lastIndexOf,
- nativeIsArray = Array.isArray,
- nativeKeys = Object.keys,
- nativeBind = FuncProto.bind;
-
- // Create a safe reference to the Underscore object for use below.
- var _ = function(obj) { return new wrapper(obj); };
-
- // Export the Underscore object for **Node.js**, with
- // backwards-compatibility for the old `require()` API. If we're in
- // the browser, add `_` as a global object via a string identifier,
- // for Closure Compiler "advanced" mode.
- if (typeof exports !== 'undefined') {
- if (typeof module !== 'undefined' && module.exports) {
- exports = module.exports = _;
- }
- exports._ = _;
- } else {
- root['_'] = _;
- }
-
- // Current version.
- _.VERSION = '1.3.1';
-
- // Collection Functions
- // --------------------
-
- // The cornerstone, an `each` implementation, aka `forEach`.
- // Handles objects with the built-in `forEach`, arrays, and raw objects.
- // Delegates to **ECMAScript 5**'s native `forEach` if available.
- var each = _.each = _.forEach = function(obj, iterator, context) {
- if (obj == null) return;
- if (nativeForEach && obj.forEach === nativeForEach) {
- obj.forEach(iterator, context);
- } else if (obj.length === +obj.length) {
- for (var i = 0, l = obj.length; i < l; i++) {
- if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
- }
- } else {
- for (var key in obj) {
- if (_.has(obj, key)) {
- if (iterator.call(context, obj[key], key, obj) === breaker) return;
- }
- }
- }
- };
-
- // Return the results of applying the iterator to each element.
- // Delegates to **ECMAScript 5**'s native `map` if available.
- _.map = _.collect = function(obj, iterator, context) {
- var results = [];
- if (obj == null) return results;
- if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
- each(obj, function(value, index, list) {
- results[results.length] = iterator.call(context, value, index, list);
- });
- if (obj.length === +obj.length) results.length = obj.length;
- return results;
- };
-
- // **Reduce** builds up a single result from a list of values, aka `inject`,
- // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
- _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
- var initial = arguments.length > 2;
- if (obj == null) obj = [];
- if (nativeReduce && obj.reduce === nativeReduce) {
- if (context) iterator = _.bind(iterator, context);
- return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
- }
- each(obj, function(value, index, list) {
- if (!initial) {
- memo = value;
- initial = true;
- } else {
- memo = iterator.call(context, memo, value, index, list);
- }
- });
- if (!initial) throw new TypeError('Reduce of empty array with no initial value');
- return memo;
- };
-
- // The right-associative version of reduce, also known as `foldr`.
- // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
- _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
- var initial = arguments.length > 2;
- if (obj == null) obj = [];
- if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
- if (context) iterator = _.bind(iterator, context);
- return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
- }
- var reversed = _.toArray(obj).reverse();
- if (context && !initial) iterator = _.bind(iterator, context);
- return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);
- };
-
- // Return the first value which passes a truth test. Aliased as `detect`.
- _.find = _.detect = function(obj, iterator, context) {
- var result;
- any(obj, function(value, index, list) {
- if (iterator.call(context, value, index, list)) {
- result = value;
- return true;
- }
- });
- return result;
- };
-
- // Return all the elements that pass a truth test.
- // Delegates to **ECMAScript 5**'s native `filter` if available.
- // Aliased as `select`.
- _.filter = _.select = function(obj, iterator, context) {
- var results = [];
- if (obj == null) return results;
- if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
- each(obj, function(value, index, list) {
- if (iterator.call(context, value, index, list)) results[results.length] = value;
- });
- return results;
- };
-
- // Return all the elements for which a truth test fails.
- _.reject = function(obj, iterator, context) {
- var results = [];
- if (obj == null) return results;
- each(obj, function(value, index, list) {
- if (!iterator.call(context, value, index, list)) results[results.length] = value;
- });
- return results;
- };
-
- // Determine whether all of the elements match a truth test.
- // Delegates to **ECMAScript 5**'s native `every` if available.
- // Aliased as `all`.
- _.every = _.all = function(obj, iterator, context) {
- var result = true;
- if (obj == null) return result;
- if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
- each(obj, function(value, index, list) {
- if (!(result = result && iterator.call(context, value, index, list))) return breaker;
- });
- return result;
- };
-
- // Determine if at least one element in the object matches a truth test.
- // Delegates to **ECMAScript 5**'s native `some` if available.
- // Aliased as `any`.
- var any = _.some = _.any = function(obj, iterator, context) {
- iterator || (iterator = _.identity);
- var result = false;
- if (obj == null) return result;
- if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
- each(obj, function(value, index, list) {
- if (result || (result = iterator.call(context, value, index, list))) return breaker;
- });
- return !!result;
- };
-
- // Determine if a given value is included in the array or object using `===`.
- // Aliased as `contains`.
- _.include = _.contains = function(obj, target) {
- var found = false;
- if (obj == null) return found;
- if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
- found = any(obj, function(value) {
- return value === target;
- });
- return found;
- };
-
- // Invoke a method (with arguments) on every item in a collection.
- _.invoke = function(obj, method) {
- var args = slice.call(arguments, 2);
- return _.map(obj, function(value) {
- return (_.isFunction(method) ? method || value : value[method]).apply(value, args);
- });
- };
-
- // Convenience version of a common use case of `map`: fetching a property.
- _.pluck = function(obj, key) {
- return _.map(obj, function(value){ return value[key]; });
- };
-
- // Return the maximum element or (element-based computation).
- _.max = function(obj, iterator, context) {
- if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
- if (!iterator && _.isEmpty(obj)) return -Infinity;
- var result = {computed : -Infinity};
- each(obj, function(value, index, list) {
- var computed = iterator ? iterator.call(context, value, index, list) : value;
- computed >= result.computed && (result = {value : value, computed : computed});
- });
- return result.value;
- };
-
- // Return the minimum element (or element-based computation).
- _.min = function(obj, iterator, context) {
- if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
- if (!iterator && _.isEmpty(obj)) return Infinity;
- var result = {computed : Infinity};
- each(obj, function(value, index, list) {
- var computed = iterator ? iterator.call(context, value, index, list) : value;
- computed < result.computed && (result = {value : value, computed : computed});
- });
- return result.value;
- };
-
- // Shuffle an array.
- _.shuffle = function(obj) {
- var shuffled = [], rand;
- each(obj, function(value, index, list) {
- if (index == 0) {
- shuffled[0] = value;
- } else {
- rand = Math.floor(Math.random() * (index + 1));
- shuffled[index] = shuffled[rand];
- shuffled[rand] = value;
- }
- });
- return shuffled;
- };
-
- // Sort the object's values by a criterion produced by an iterator.
- _.sortBy = function(obj, iterator, context) {
- return _.pluck(_.map(obj, function(value, index, list) {
- return {
- value : value,
- criteria : iterator.call(context, value, index, list)
- };
- }).sort(function(left, right) {
- var a = left.criteria, b = right.criteria;
- return a < b ? -1 : a > b ? 1 : 0;
- }), 'value');
- };
-
- // Groups the object's values by a criterion. Pass either a string attribute
- // to group by, or a function that returns the criterion.
- _.groupBy = function(obj, val) {
- var result = {};
- var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
- each(obj, function(value, index) {
- var key = iterator(value, index);
- (result[key] || (result[key] = [])).push(value);
- });
- return result;
- };
-
- // Use a comparator function to figure out at what index an object should
- // be inserted so as to maintain order. Uses binary search.
- _.sortedIndex = function(array, obj, iterator) {
- iterator || (iterator = _.identity);
- var low = 0, high = array.length;
- while (low < high) {
- var mid = (low + high) >> 1;
- iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
- }
- return low;
- };
-
- // Safely convert anything iterable into a real, live array.
- _.toArray = function(iterable) {
- if (!iterable) return [];
- if (iterable.toArray) return iterable.toArray();
- if (_.isArray(iterable)) return slice.call(iterable);
- if (_.isArguments(iterable)) return slice.call(iterable);
- return _.values(iterable);
- };
-
- // Return the number of elements in an object.
- _.size = function(obj) {
- return _.toArray(obj).length;
- };
-
- // Array Functions
- // ---------------
-
- // Get the first element of an array. Passing **n** will return the first N
- // values in the array. Aliased as `head`. The **guard** check allows it to work
- // with `_.map`.
- _.first = _.head = function(array, n, guard) {
- return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
- };
-
- // Returns everything but the last entry of the array. Especcialy useful on
- // the arguments object. Passing **n** will return all the values in
- // the array, excluding the last N. The **guard** check allows it to work with
- // `_.map`.
- _.initial = function(array, n, guard) {
- return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
- };
-
- // Get the last element of an array. Passing **n** will return the last N
- // values in the array. The **guard** check allows it to work with `_.map`.
- _.last = function(array, n, guard) {
- if ((n != null) && !guard) {
- return slice.call(array, Math.max(array.length - n, 0));
- } else {
- return array[array.length - 1];
- }
- };
-
- // Returns everything but the first entry of the array. Aliased as `tail`.
- // Especially useful on the arguments object. Passing an **index** will return
- // the rest of the values in the array from that index onward. The **guard**
- // check allows it to work with `_.map`.
- _.rest = _.tail = function(array, index, guard) {
- return slice.call(array, (index == null) || guard ? 1 : index);
- };
-
- // Trim out all falsy values from an array.
- _.compact = function(array) {
- return _.filter(array, function(value){ return !!value; });
- };
-
- // Return a completely flattened version of an array.
- _.flatten = function(array, shallow) {
- return _.reduce(array, function(memo, value) {
- if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));
- memo[memo.length] = value;
- return memo;
- }, []);
- };
-
- // Return a version of the array that does not contain the specified value(s).
- _.without = function(array) {
- return _.difference(array, slice.call(arguments, 1));
- };
-
- // Produce a duplicate-free version of the array. If the array has already
- // been sorted, you have the option of using a faster algorithm.
- // Aliased as `unique`.
- _.uniq = _.unique = function(array, isSorted, iterator) {
- var initial = iterator ? _.map(array, iterator) : array;
- var result = [];
- _.reduce(initial, function(memo, el, i) {
- if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {
- memo[memo.length] = el;
- result[result.length] = array[i];
- }
- return memo;
- }, []);
- return result;
- };
-
- // Produce an array that contains the union: each distinct element from all of
- // the passed-in arrays.
- _.union = function() {
- return _.uniq(_.flatten(arguments, true));
- };
-
- // Produce an array that contains every item shared between all the
- // passed-in arrays. (Aliased as "intersect" for back-compat.)
- _.intersection = _.intersect = function(array) {
- var rest = slice.call(arguments, 1);
- return _.filter(_.uniq(array), function(item) {
- return _.every(rest, function(other) {
- return _.indexOf(other, item) >= 0;
- });
- });
- };
-
- // Take the difference between one array and a number of other arrays.
- // Only the elements present in just the first array will remain.
- _.difference = function(array) {
- var rest = _.flatten(slice.call(arguments, 1));
- return _.filter(array, function(value){ return !_.include(rest, value); });
- };
-
- // Zip together multiple lists into a single array -- elements that share
- // an index go together.
- _.zip = function() {
- var args = slice.call(arguments);
- var length = _.max(_.pluck(args, 'length'));
- var results = new Array(length);
- for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);
- return results;
- };
-
- // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
- // we need this function. Return the position of the first occurrence of an
- // item in an array, or -1 if the item is not included in the array.
- // Delegates to **ECMAScript 5**'s native `indexOf` if available.
- // If the array is large and already in sort order, pass `true`
- // for **isSorted** to use binary search.
- _.indexOf = function(array, item, isSorted) {
- if (array == null) return -1;
- var i, l;
- if (isSorted) {
- i = _.sortedIndex(array, item);
- return array[i] === item ? i : -1;
- }
- if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
- for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;
- return -1;
- };
-
- // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
- _.lastIndexOf = function(array, item) {
- if (array == null) return -1;
- if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);
- var i = array.length;
- while (i--) if (i in array && array[i] === item) return i;
- return -1;
- };
-
- // Generate an integer Array containing an arithmetic progression. A port of
- // the native Python `range()` function. See
- // [the Python documentation](http://docs.python.org/library/functions.html#range).
- _.range = function(start, stop, step) {
- if (arguments.length <= 1) {
- stop = start || 0;
- start = 0;
- }
- step = arguments[2] || 1;
-
- var len = Math.max(Math.ceil((stop - start) / step), 0);
- var idx = 0;
- var range = new Array(len);
-
- while(idx < len) {
- range[idx++] = start;
- start += step;
- }
-
- return range;
- };
-
- // Function (ahem) Functions
- // ------------------
-
- // Reusable constructor function for prototype setting.
- var ctor = function(){};
-
- // Create a function bound to a given object (assigning `this`, and arguments,
- // optionally). Binding with arguments is also known as `curry`.
- // Delegates to **ECMAScript 5**'s native `Function.bind` if available.
- // We check for `func.bind` first, to fail fast when `func` is undefined.
- _.bind = function bind(func, context) {
- var bound, args;
- if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
- if (!_.isFunction(func)) throw new TypeError;
- args = slice.call(arguments, 2);
- return bound = function() {
- if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
- ctor.prototype = func.prototype;
- var self = new ctor;
- var result = func.apply(self, args.concat(slice.call(arguments)));
- if (Object(result) === result) return result;
- return self;
- };
- };
-
- // Bind all of an object's methods to that object. Useful for ensuring that
- // all callbacks defined on an object belong to it.
- _.bindAll = function(obj) {
- var funcs = slice.call(arguments, 1);
- if (funcs.length == 0) funcs = _.functions(obj);
- each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
- return obj;
- };
-
- // Memoize an expensive function by storing its results.
- _.memoize = function(func, hasher) {
- var memo = {};
- hasher || (hasher = _.identity);
- return function() {
- var key = hasher.apply(this, arguments);
- return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
- };
- };
-
- // Delays a function for the given number of milliseconds, and then calls
- // it with the arguments supplied.
- _.delay = function(func, wait) {
- var args = slice.call(arguments, 2);
- return setTimeout(function(){ return func.apply(func, args); }, wait);
- };
-
- // Defers a function, scheduling it to run after the current call stack has
- // cleared.
- _.defer = function(func) {
- return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
- };
-
- // Returns a function, that, when invoked, will only be triggered at most once
- // during a given window of time.
- _.throttle = function(func, wait) {
- var context, args, timeout, throttling, more;
- var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
- return function() {
- context = this; args = arguments;
- var later = function() {
- timeout = null;
- if (more) func.apply(context, args);
- whenDone();
- };
- if (!timeout) timeout = setTimeout(later, wait);
- if (throttling) {
- more = true;
- } else {
- func.apply(context, args);
- }
- whenDone();
- throttling = true;
- };
- };
-
- // Returns a function, that, as long as it continues to be invoked, will not
- // be triggered. The function will be called after it stops being called for
- // N milliseconds.
- _.debounce = function(func, wait) {
- var timeout;
- return function() {
- var context = this, args = arguments;
- var later = function() {
- timeout = null;
- func.apply(context, args);
- };
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- };
- };
-
- // Returns a function that will be executed at most one time, no matter how
- // often you call it. Useful for lazy initialization.
- _.once = function(func) {
- var ran = false, memo;
- return function() {
- if (ran) return memo;
- ran = true;
- return memo = func.apply(this, arguments);
- };
- };
-
- // Returns the first function passed as an argument to the second,
- // allowing you to adjust arguments, run code before and after, and
- // conditionally execute the original function.
- _.wrap = function(func, wrapper) {
- return function() {
- var args = [func].concat(slice.call(arguments, 0));
- return wrapper.apply(this, args);
- };
- };
-
- // Returns a function that is the composition of a list of functions, each
- // consuming the return value of the function that follows.
- _.compose = function() {
- var funcs = arguments;
- return function() {
- var args = arguments;
- for (var i = funcs.length - 1; i >= 0; i--) {
- args = [funcs[i].apply(this, args)];
- }
- return args[0];
- };
- };
-
- // Returns a function that will only be executed after being called N times.
- _.after = function(times, func) {
- if (times <= 0) return func();
- return function() {
- if (--times < 1) { return func.apply(this, arguments); }
- };
- };
-
- // Object Functions
- // ----------------
-
- // Retrieve the names of an object's properties.
- // Delegates to **ECMAScript 5**'s native `Object.keys`
- _.keys = nativeKeys || function(obj) {
- if (obj !== Object(obj)) throw new TypeError('Invalid object');
- var keys = [];
- for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
- return keys;
- };
-
- // Retrieve the values of an object's properties.
- _.values = function(obj) {
- return _.map(obj, _.identity);
- };
-
- // Return a sorted list of the function names available on the object.
- // Aliased as `methods`
- _.functions = _.methods = function(obj) {
- var names = [];
- for (var key in obj) {
- if (_.isFunction(obj[key])) names.push(key);
- }
- return names.sort();
- };
-
- // Extend a given object with all the properties in passed-in object(s).
- _.extend = function(obj) {
- each(slice.call(arguments, 1), function(source) {
- for (var prop in source) {
- obj[prop] = source[prop];
- }
- });
- return obj;
- };
-
- // Fill in a given object with default properties.
- _.defaults = function(obj) {
- each(slice.call(arguments, 1), function(source) {
- for (var prop in source) {
- if (obj[prop] == null) obj[prop] = source[prop];
- }
- });
- return obj;
- };
-
- // Create a (shallow-cloned) duplicate of an object.
- _.clone = function(obj) {
- if (!_.isObject(obj)) return obj;
- return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
- };
-
- // Invokes interceptor with the obj, and then returns obj.
- // The primary purpose of this method is to "tap into" a method chain, in
- // order to perform operations on intermediate results within the chain.
- _.tap = function(obj, interceptor) {
- interceptor(obj);
- return obj;
- };
-
- // Internal recursive comparison function.
- function eq(a, b, stack) {
- // Identical objects are equal. `0 === -0`, but they aren't identical.
- // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
- if (a === b) return a !== 0 || 1 / a == 1 / b;
- // A strict comparison is necessary because `null == undefined`.
- if (a == null || b == null) return a === b;
- // Unwrap any wrapped objects.
- if (a._chain) a = a._wrapped;
- if (b._chain) b = b._wrapped;
- // Invoke a custom `isEqual` method if one is provided.
- if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);
- if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);
- // Compare `[[Class]]` names.
- var className = toString.call(a);
- if (className != toString.call(b)) return false;
- switch (className) {
- // Strings, numbers, dates, and booleans are compared by value.
- case '[object String]':
- // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
- // equivalent to `new String("5")`.
- return a == String(b);
- case '[object Number]':
- // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
- // other numeric values.
- return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
- case '[object Date]':
- case '[object Boolean]':
- // Coerce dates and booleans to numeric primitive values. Dates are compared by their
- // millisecond representations. Note that invalid dates with millisecond representations
- // of `NaN` are not equivalent.
- return +a == +b;
- // RegExps are compared by their source patterns and flags.
- case '[object RegExp]':
- return a.source == b.source &&
- a.global == b.global &&
- a.multiline == b.multiline &&
- a.ignoreCase == b.ignoreCase;
- }
- if (typeof a != 'object' || typeof b != 'object') return false;
- // Assume equality for cyclic structures. The algorithm for detecting cyclic
- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
- var length = stack.length;
- while (length--) {
- // Linear search. Performance is inversely proportional to the number of
- // unique nested structures.
- if (stack[length] == a) return true;
- }
- // Add the first object to the stack of traversed objects.
- stack.push(a);
- var size = 0, result = true;
- // Recursively compare objects and arrays.
- if (className == '[object Array]') {
- // Compare array lengths to determine if a deep comparison is necessary.
- size = a.length;
- result = size == b.length;
- if (result) {
- // Deep compare the contents, ignoring non-numeric properties.
- while (size--) {
- // Ensure commutative equality for sparse arrays.
- if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
- }
- }
- } else {
- // Objects with different constructors are not equivalent.
- if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;
- // Deep compare objects.
- for (var key in a) {
- if (_.has(a, key)) {
- // Count the expected number of properties.
- size++;
- // Deep compare each member.
- if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;
- }
- }
- // Ensure that both objects contain the same number of properties.
- if (result) {
- for (key in b) {
- if (_.has(b, key) && !(size--)) break;
- }
- result = !size;
- }
- }
- // Remove the first object from the stack of traversed objects.
- stack.pop();
- return result;
- }
-
- // Perform a deep comparison to check if two objects are equal.
- _.isEqual = function(a, b) {
- return eq(a, b, []);
- };
-
- // Is a given array, string, or object empty?
- // An "empty" object has no enumerable own-properties.
- _.isEmpty = function(obj) {
- if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
- for (var key in obj) if (_.has(obj, key)) return false;
- return true;
- };
-
- // Is a given value a DOM element?
- _.isElement = function(obj) {
- return !!(obj && obj.nodeType == 1);
- };
-
- // Is a given value an array?
- // Delegates to ECMA5's native Array.isArray
- _.isArray = nativeIsArray || function(obj) {
- return toString.call(obj) == '[object Array]';
- };
-
- // Is a given variable an object?
- _.isObject = function(obj) {
- return obj === Object(obj);
- };
-
- // Is a given variable an arguments object?
- _.isArguments = function(obj) {
- return toString.call(obj) == '[object Arguments]';
- };
- if (!_.isArguments(arguments)) {
- _.isArguments = function(obj) {
- return !!(obj && _.has(obj, 'callee'));
- };
- }
-
- // Is a given value a function?
- _.isFunction = function(obj) {
- return toString.call(obj) == '[object Function]';
- };
-
- // Is a given value a string?
- _.isString = function(obj) {
- return toString.call(obj) == '[object String]';
- };
-
- // Is a given value a number?
- _.isNumber = function(obj) {
- return toString.call(obj) == '[object Number]';
- };
-
- // Is the given value `NaN`?
- _.isNaN = function(obj) {
- // `NaN` is the only value for which `===` is not reflexive.
- return obj !== obj;
- };
-
- // Is a given value a boolean?
- _.isBoolean = function(obj) {
- return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
- };
-
- // Is a given value a date?
- _.isDate = function(obj) {
- return toString.call(obj) == '[object Date]';
- };
-
- // Is the given value a regular expression?
- _.isRegExp = function(obj) {
- return toString.call(obj) == '[object RegExp]';
- };
-
- // Is a given value equal to null?
- _.isNull = function(obj) {
- return obj === null;
- };
-
- // Is a given variable undefined?
- _.isUndefined = function(obj) {
- return obj === void 0;
- };
-
- // Has own property?
- _.has = function(obj, key) {
- return hasOwnProperty.call(obj, key);
- };
-
- // Utility Functions
- // -----------------
-
- // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
- // previous owner. Returns a reference to the Underscore object.
- _.noConflict = function() {
- root._ = previousUnderscore;
- return this;
- };
-
- // Keep the identity function around for default iterators.
- _.identity = function(value) {
- return value;
- };
-
- // Run a function **n** times.
- _.times = function (n, iterator, context) {
- for (var i = 0; i < n; i++) iterator.call(context, i);
- };
-
- // Escape a string for HTML interpolation.
- _.escape = function(string) {
- return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g,'&#x2F;');
- };
-
- // Add your own custom functions to the Underscore object, ensuring that
- // they're correctly added to the OOP wrapper as well.
- _.mixin = function(obj) {
- each(_.functions(obj), function(name){
- addToWrapper(name, _[name] = obj[name]);
- });
- };
-
- // Generate a unique integer id (unique within the entire client session).
- // Useful for temporary DOM ids.
- var idCounter = 0;
- _.uniqueId = function(prefix) {
- var id = idCounter++;
- return prefix ? prefix + id : id;
- };
-
- // By default, Underscore uses ERB-style template delimiters, change the
- // following template settings to use alternative delimiters.
- _.templateSettings = {
- evaluate : /<%([\s\S]+?)%>/g,
- interpolate : /<%=([\s\S]+?)%>/g,
- escape : /<%-([\s\S]+?)%>/g
- };
-
- // When customizing `templateSettings`, if you don't want to define an
- // interpolation, evaluation or escaping regex, we need one that is
- // guaranteed not to match.
- var noMatch = /.^/;
-
- // Within an interpolation, evaluation, or escaping, remove HTML escaping
- // that had been previously added.
- var unescape = function(code) {
- return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'");
- };
-
- // JavaScript micro-templating, similar to John Resig's implementation.
- // Underscore templating handles arbitrary delimiters, preserves whitespace,
- // and correctly escapes quotes within interpolated code.
- _.template = function(str, data) {
- var c = _.templateSettings;
- var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
- 'with(obj||{}){__p.push(\'' +
- str.replace(/\\/g, '\\\\')
- .replace(/'/g, "\\'")
- .replace(c.escape || noMatch, function(match, code) {
- return "',_.escape(" + unescape(code) + "),'";
- })
- .replace(c.interpolate || noMatch, function(match, code) {
- return "'," + unescape(code) + ",'";
- })
- .replace(c.evaluate || noMatch, function(match, code) {
- return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('";
- })
- .replace(/\r/g, '\\r')
- .replace(/\n/g, '\\n')
- .replace(/\t/g, '\\t')
- + "');}return __p.join('');";
- var func = new Function('obj', '_', tmpl);
- if (data) return func(data, _);
- return function(data) {
- return func.call(this, data, _);
- };
- };
-
- // Add a "chain" function, which will delegate to the wrapper.
- _.chain = function(obj) {
- return _(obj).chain();
- };
-
- // The OOP Wrapper
- // ---------------
-
- // If Underscore is called as a function, it returns a wrapped object that
- // can be used OO-style. This wrapper holds altered versions of all the
- // underscore functions. Wrapped objects may be chained.
- var wrapper = function(obj) { this._wrapped = obj; };
-
- // Expose `wrapper.prototype` as `_.prototype`
- _.prototype = wrapper.prototype;
-
- // Helper function to continue chaining intermediate results.
- var result = function(obj, chain) {
- return chain ? _(obj).chain() : obj;
- };
-
- // A method to easily add functions to the OOP wrapper.
- var addToWrapper = function(name, func) {
- wrapper.prototype[name] = function() {
- var args = slice.call(arguments);
- unshift.call(args, this._wrapped);
- return result(func.apply(_, args), this._chain);
- };
- };
-
- // Add all of the Underscore functions to the wrapper object.
- _.mixin(_);
-
- // Add all mutator Array functions to the wrapper.
- each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
- var method = ArrayProto[name];
- wrapper.prototype[name] = function() {
- var wrapped = this._wrapped;
- method.apply(wrapped, arguments);
- var length = wrapped.length;
- if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];
- return result(wrapped, this._chain);
- };
- });
-
- // Add all accessor Array functions to the wrapper.
- each(['concat', 'join', 'slice'], function(name) {
- var method = ArrayProto[name];
- wrapper.prototype[name] = function() {
- return result(method.apply(this._wrapped, arguments), this._chain);
- };
- });
-
- // Start chaining a wrapped Underscore object.
- wrapper.prototype.chain = function() {
- this._chain = true;
- return this;
- };
-
- // Extracts the result from a wrapped and chained object.
- wrapper.prototype.value = function() {
- return this._wrapped;
- };
-
-}).call(this);
diff --git a/docs/html/_static/underscore.js b/docs/html/_static/underscore.js
deleted file mode 100644
index 5b55f32..0000000
--- a/docs/html/_static/underscore.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// Underscore.js 1.3.1
-// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each=
-b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==
-null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
-function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
-e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
-function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});
-return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
-c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=
-b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);
-return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,
-d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
-var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
-c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
-a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};
-b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
-1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
-b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};
-b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),
-function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
-u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
-function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
-true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
diff --git a/docs/html/_static/up-pressed.png b/docs/html/_static/up-pressed.png
deleted file mode 100644
index acee3b6..0000000
--- a/docs/html/_static/up-pressed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/up.png b/docs/html/_static/up.png
deleted file mode 100644
index 2a940a7..0000000
--- a/docs/html/_static/up.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/_static/websupport.js b/docs/html/_static/websupport.js
deleted file mode 100644
index 53f6a45..0000000
--- a/docs/html/_static/websupport.js
+++ /dev/null
@@ -1,808 +0,0 @@
-/*
- * websupport.js
- * ~~~~~~~~~~~~~
- *
- * sphinx.websupport utilities for all documentation.
- *
- * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-(function($) {
- $.fn.autogrow = function() {
- return this.each(function() {
- var textarea = this;
-
- $.fn.autogrow.resize(textarea);
-
- $(textarea)
- .focus(function() {
- textarea.interval = setInterval(function() {
- $.fn.autogrow.resize(textarea);
- }, 500);
- })
- .blur(function() {
- clearInterval(textarea.interval);
- });
- });
- };
-
- $.fn.autogrow.resize = function(textarea) {
- var lineHeight = parseInt($(textarea).css('line-height'), 10);
- var lines = textarea.value.split('\n');
- var columns = textarea.cols;
- var lineCount = 0;
- $.each(lines, function() {
- lineCount += Math.ceil(this.length / columns) || 1;
- });
- var height = lineHeight * (lineCount + 1);
- $(textarea).css('height', height);
- };
-})(jQuery);
-
-(function($) {
- var comp, by;
-
- function init() {
- initEvents();
- initComparator();
- }
-
- function initEvents() {
- $(document).on("click", 'a.comment-close', function(event) {
- event.preventDefault();
- hide($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.vote', function(event) {
- event.preventDefault();
- handleVote($(this));
- });
- $(document).on("click", 'a.reply', function(event) {
- event.preventDefault();
- openReply($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.close-reply', function(event) {
- event.preventDefault();
- closeReply($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.sort-option', function(event) {
- event.preventDefault();
- handleReSort($(this));
- });
- $(document).on("click", 'a.show-proposal', function(event) {
- event.preventDefault();
- showProposal($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.hide-proposal', function(event) {
- event.preventDefault();
- hideProposal($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.show-propose-change', function(event) {
- event.preventDefault();
- showProposeChange($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.hide-propose-change', function(event) {
- event.preventDefault();
- hideProposeChange($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.accept-comment', function(event) {
- event.preventDefault();
- acceptComment($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.delete-comment', function(event) {
- event.preventDefault();
- deleteComment($(this).attr('id').substring(2));
- });
- $(document).on("click", 'a.comment-markup', function(event) {
- event.preventDefault();
- toggleCommentMarkupBox($(this).attr('id').substring(2));
- });
- }
-
- /**
- * Set comp, which is a comparator function used for sorting and
- * inserting comments into the list.
- */
- function setComparator() {
- // If the first three letters are "asc", sort in ascending order
- // and remove the prefix.
- if (by.substring(0,3) == 'asc') {
- var i = by.substring(3);
- comp = function(a, b) { return a[i] - b[i]; };
- } else {
- // Otherwise sort in descending order.
- comp = function(a, b) { return b[by] - a[by]; };
- }
-
- // Reset link styles and format the selected sort option.
- $('a.sel').attr('href', '#').removeClass('sel');
- $('a.by' + by).removeAttr('href').addClass('sel');
- }
-
- /**
- * Create a comp function. If the user has preferences stored in
- * the sortBy cookie, use those, otherwise use the default.
- */
- function initComparator() {
- by = 'rating'; // Default to sort by rating.
- // If the sortBy cookie is set, use that instead.
- if (document.cookie.length > 0) {
- var start = document.cookie.indexOf('sortBy=');
- if (start != -1) {
- start = start + 7;
- var end = document.cookie.indexOf(";", start);
- if (end == -1) {
- end = document.cookie.length;
- by = unescape(document.cookie.substring(start, end));
- }
- }
- }
- setComparator();
- }
-
- /**
- * Show a comment div.
- */
- function show(id) {
- $('#ao' + id).hide();
- $('#ah' + id).show();
- var context = $.extend({id: id}, opts);
- var popup = $(renderTemplate(popupTemplate, context)).hide();
- popup.find('textarea[name="proposal"]').hide();
- popup.find('a.by' + by).addClass('sel');
- var form = popup.find('#cf' + id);
- form.submit(function(event) {
- event.preventDefault();
- addComment(form);
- });
- $('#s' + id).after(popup);
- popup.slideDown('fast', function() {
- getComments(id);
- });
- }
-
- /**
- * Hide a comment div.
- */
- function hide(id) {
- $('#ah' + id).hide();
- $('#ao' + id).show();
- var div = $('#sc' + id);
- div.slideUp('fast', function() {
- div.remove();
- });
- }
-
- /**
- * Perform an ajax request to get comments for a node
- * and insert the comments into the comments tree.
- */
- function getComments(id) {
- $.ajax({
- type: 'GET',
- url: opts.getCommentsURL,
- data: {node: id},
- success: function(data, textStatus, request) {
- var ul = $('#cl' + id);
- var speed = 100;
- $('#cf' + id)
- .find('textarea[name="proposal"]')
- .data('source', data.source);
-
- if (data.comments.length === 0) {
- ul.html('<li>No comments yet.</li>');
- ul.data('empty', true);
- } else {
- // If there are comments, sort them and put them in the list.
- var comments = sortComments(data.comments);
- speed = data.comments.length * 100;
- appendComments(comments, ul);
- ul.data('empty', false);
- }
- $('#cn' + id).slideUp(speed + 200);
- ul.slideDown(speed);
- },
- error: function(request, textStatus, error) {
- showError('Oops, there was a problem retrieving the comments.');
- },
- dataType: 'json'
- });
- }
-
- /**
- * Add a comment via ajax and insert the comment into the comment tree.
- */
- function addComment(form) {
- var node_id = form.find('input[name="node"]').val();
- var parent_id = form.find('input[name="parent"]').val();
- var text = form.find('textarea[name="comment"]').val();
- var proposal = form.find('textarea[name="proposal"]').val();
-
- if (text == '') {
- showError('Please enter a comment.');
- return;
- }
-
- // Disable the form that is being submitted.
- form.find('textarea,input').attr('disabled', 'disabled');
-
- // Send the comment to the server.
- $.ajax({
- type: "POST",
- url: opts.addCommentURL,
- dataType: 'json',
- data: {
- node: node_id,
- parent: parent_id,
- text: text,
- proposal: proposal
- },
- success: function(data, textStatus, error) {
- // Reset the form.
- if (node_id) {
- hideProposeChange(node_id);
- }
- form.find('textarea')
- .val('')
- .add(form.find('input'))
- .removeAttr('disabled');
- var ul = $('#cl' + (node_id || parent_id));
- if (ul.data('empty')) {
- $(ul).empty();
- ul.data('empty', false);
- }
- insertComment(data.comment);
- var ao = $('#ao' + node_id);
- ao.find('img').attr({'src': opts.commentBrightImage});
- if (node_id) {
- // if this was a "root" comment, remove the commenting box
- // (the user can get it back by reopening the comment popup)
- $('#ca' + node_id).slideUp();
- }
- },
- error: function(request, textStatus, error) {
- form.find('textarea,input').removeAttr('disabled');
- showError('Oops, there was a problem adding the comment.');
- }
- });
- }
-
- /**
- * Recursively append comments to the main comment list and children
- * lists, creating the comment tree.
- */
- function appendComments(comments, ul) {
- $.each(comments, function() {
- var div = createCommentDiv(this);
- ul.append($(document.createElement('li')).html(div));
- appendComments(this.children, div.find('ul.comment-children'));
- // To avoid stagnating data, don't store the comments children in data.
- this.children = null;
- div.data('comment', this);
- });
- }
-
- /**
- * After adding a new comment, it must be inserted in the correct
- * location in the comment tree.
- */
- function insertComment(comment) {
- var div = createCommentDiv(comment);
-
- // To avoid stagnating data, don't store the comments children in data.
- comment.children = null;
- div.data('comment', comment);
-
- var ul = $('#cl' + (comment.node || comment.parent));
- var siblings = getChildren(ul);
-
- var li = $(document.createElement('li'));
- li.hide();
-
- // Determine where in the parents children list to insert this comment.
- for(i=0; i < siblings.length; i++) {
- if (comp(comment, siblings[i]) <= 0) {
- $('#cd' + siblings[i].id)
- .parent()
- .before(li.html(div));
- li.slideDown('fast');
- return;
- }
- }
-
- // If we get here, this comment rates lower than all the others,
- // or it is the only comment in the list.
- ul.append(li.html(div));
- li.slideDown('fast');
- }
-
- function acceptComment(id) {
- $.ajax({
- type: 'POST',
- url: opts.acceptCommentURL,
- data: {id: id},
- success: function(data, textStatus, request) {
- $('#cm' + id).fadeOut('fast');
- $('#cd' + id).removeClass('moderate');
- },
- error: function(request, textStatus, error) {
- showError('Oops, there was a problem accepting the comment.');
- }
- });
- }
-
- function deleteComment(id) {
- $.ajax({
- type: 'POST',
- url: opts.deleteCommentURL,
- data: {id: id},
- success: function(data, textStatus, request) {
- var div = $('#cd' + id);
- if (data == 'delete') {
- // Moderator mode: remove the comment and all children immediately
- div.slideUp('fast', function() {
- div.remove();
- });
- return;
- }
- // User mode: only mark the comment as deleted
- div
- .find('span.user-id:first')
- .text('[deleted]').end()
- .find('div.comment-text:first')
- .text('[deleted]').end()
- .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
- ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
- .remove();
- var comment = div.data('comment');
- comment.username = '[deleted]';
- comment.text = '[deleted]';
- div.data('comment', comment);
- },
- error: function(request, textStatus, error) {
- showError('Oops, there was a problem deleting the comment.');
- }
- });
- }
-
- function showProposal(id) {
- $('#sp' + id).hide();
- $('#hp' + id).show();
- $('#pr' + id).slideDown('fast');
- }
-
- function hideProposal(id) {
- $('#hp' + id).hide();
- $('#sp' + id).show();
- $('#pr' + id).slideUp('fast');
- }
-
- function showProposeChange(id) {
- $('#pc' + id).hide();
- $('#hc' + id).show();
- var textarea = $('#pt' + id);
- textarea.val(textarea.data('source'));
- $.fn.autogrow.resize(textarea[0]);
- textarea.slideDown('fast');
- }
-
- function hideProposeChange(id) {
- $('#hc' + id).hide();
- $('#pc' + id).show();
- var textarea = $('#pt' + id);
- textarea.val('').removeAttr('disabled');
- textarea.slideUp('fast');
- }
-
- function toggleCommentMarkupBox(id) {
- $('#mb' + id).toggle();
- }
-
- /** Handle when the user clicks on a sort by link. */
- function handleReSort(link) {
- var classes = link.attr('class').split(/\s+/);
- for (var i=0; i<classes.length; i++) {
- if (classes[i] != 'sort-option') {
- by = classes[i].substring(2);
- }
- }
- setComparator();
- // Save/update the sortBy cookie.
- var expiration = new Date();
- expiration.setDate(expiration.getDate() + 365);
- document.cookie= 'sortBy=' + escape(by) +
- ';expires=' + expiration.toUTCString();
- $('ul.comment-ul').each(function(index, ul) {
- var comments = getChildren($(ul), true);
- comments = sortComments(comments);
- appendComments(comments, $(ul).empty());
- });
- }
-
- /**
- * Function to process a vote when a user clicks an arrow.
- */
- function handleVote(link) {
- if (!opts.voting) {
- showError("You'll need to login to vote.");
- return;
- }
-
- var id = link.attr('id');
- if (!id) {
- // Didn't click on one of the voting arrows.
- return;
- }
- // If it is an unvote, the new vote value is 0,
- // Otherwise it's 1 for an upvote, or -1 for a downvote.
- var value = 0;
- if (id.charAt(1) != 'u') {
- value = id.charAt(0) == 'u' ? 1 : -1;
- }
- // The data to be sent to the server.
- var d = {
- comment_id: id.substring(2),
- value: value
- };
-
- // Swap the vote and unvote links.
- link.hide();
- $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
- .show();
-
- // The div the comment is displayed in.
- var div = $('div#cd' + d.comment_id);
- var data = div.data('comment');
-
- // If this is not an unvote, and the other vote arrow has
- // already been pressed, unpress it.
- if ((d.value !== 0) && (data.vote === d.value * -1)) {
- $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
- $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
- }
-
- // Update the comments rating in the local data.
- data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
- data.vote = d.value;
- div.data('comment', data);
-
- // Change the rating text.
- div.find('.rating:first')
- .text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
-
- // Send the vote information to the server.
- $.ajax({
- type: "POST",
- url: opts.processVoteURL,
- data: d,
- error: function(request, textStatus, error) {
- showError('Oops, there was a problem casting that vote.');
- }
- });
- }
-
- /**
- * Open a reply form used to reply to an existing comment.
- */
- function openReply(id) {
- // Swap out the reply link for the hide link
- $('#rl' + id).hide();
- $('#cr' + id).show();
-
- // Add the reply li to the children ul.
- var div = $(renderTemplate(replyTemplate, {id: id})).hide();
- $('#cl' + id)
- .prepend(div)
- // Setup the submit handler for the reply form.
- .find('#rf' + id)
- .submit(function(event) {
- event.preventDefault();
- addComment($('#rf' + id));
- closeReply(id);
- })
- .find('input[type=button]')
- .click(function() {
- closeReply(id);
- });
- div.slideDown('fast', function() {
- $('#rf' + id).find('textarea').focus();
- });
- }
-
- /**
- * Close the reply form opened with openReply.
- */
- function closeReply(id) {
- // Remove the reply div from the DOM.
- $('#rd' + id).slideUp('fast', function() {
- $(this).remove();
- });
-
- // Swap out the hide link for the reply link
- $('#cr' + id).hide();
- $('#rl' + id).show();
- }
-
- /**
- * Recursively sort a tree of comments using the comp comparator.
- */
- function sortComments(comments) {
- comments.sort(comp);
- $.each(comments, function() {
- this.children = sortComments(this.children);
- });
- return comments;
- }
-
- /**
- * Get the children comments from a ul. If recursive is true,
- * recursively include childrens' children.
- */
- function getChildren(ul, recursive) {
- var children = [];
- ul.children().children("[id^='cd']")
- .each(function() {
- var comment = $(this).data('comment');
- if (recursive)
- comment.children = getChildren($(this).find('#cl' + comment.id), true);
- children.push(comment);
- });
- return children;
- }
-
- /** Create a div to display a comment in. */
- function createCommentDiv(comment) {
- if (!comment.displayed && !opts.moderator) {
- return $('<div class="moderate">Thank you! Your comment will show up '
- + 'once it is has been approved by a moderator.</div>');
- }
- // Prettify the comment rating.
- comment.pretty_rating = comment.rating + ' point' +
- (comment.rating == 1 ? '' : 's');
- // Make a class (for displaying not yet moderated comments differently)
- comment.css_class = comment.displayed ? '' : ' moderate';
- // Create a div for this comment.
- var context = $.extend({}, opts, comment);
- var div = $(renderTemplate(commentTemplate, context));
-
- // If the user has voted on this comment, highlight the correct arrow.
- if (comment.vote) {
- var direction = (comment.vote == 1) ? 'u' : 'd';
- div.find('#' + direction + 'v' + comment.id).hide();
- div.find('#' + direction + 'u' + comment.id).show();
- }
-
- if (opts.moderator || comment.text != '[deleted]') {
- div.find('a.reply').show();
- if (comment.proposal_diff)
- div.find('#sp' + comment.id).show();
- if (opts.moderator && !comment.displayed)
- div.find('#cm' + comment.id).show();
- if (opts.moderator || (opts.username == comment.username))
- div.find('#dc' + comment.id).show();
- }
- return div;
- }
-
- /**
- * A simple template renderer. Placeholders such as <%id%> are replaced
- * by context['id'] with items being escaped. Placeholders such as <#id#>
- * are not escaped.
- */
- function renderTemplate(template, context) {
- var esc = $(document.createElement('div'));
-
- function handle(ph, escape) {
- var cur = context;
- $.each(ph.split('.'), function() {
- cur = cur[this];
- });
- return escape ? esc.text(cur || "").html() : cur;
- }
-
- return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
- return handle(arguments[2], arguments[1] == '%' ? true : false);
- });
- }
-
- /** Flash an error message briefly. */
- function showError(message) {
- $(document.createElement('div')).attr({'class': 'popup-error'})
- .append($(document.createElement('div'))
- .attr({'class': 'error-message'}).text(message))
- .appendTo('body')
- .fadeIn("slow")
- .delay(2000)
- .fadeOut("slow");
- }
-
- /** Add a link the user uses to open the comments popup. */
- $.fn.comment = function() {
- return this.each(function() {
- var id = $(this).attr('id').substring(1);
- var count = COMMENT_METADATA[id];
- var title = count + ' comment' + (count == 1 ? '' : 's');
- var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
- var addcls = count == 0 ? ' nocomment' : '';
- $(this)
- .append(
- $(document.createElement('a')).attr({
- href: '#',
- 'class': 'sphinx-comment-open' + addcls,
- id: 'ao' + id
- })
- .append($(document.createElement('img')).attr({
- src: image,
- alt: 'comment',
- title: title
- }))
- .click(function(event) {
- event.preventDefault();
- show($(this).attr('id').substring(2));
- })
- )
- .append(
- $(document.createElement('a')).attr({
- href: '#',
- 'class': 'sphinx-comment-close hidden',
- id: 'ah' + id
- })
- .append($(document.createElement('img')).attr({
- src: opts.closeCommentImage,
- alt: 'close',
- title: 'close'
- }))
- .click(function(event) {
- event.preventDefault();
- hide($(this).attr('id').substring(2));
- })
- );
- });
- };
-
- var opts = {
- processVoteURL: '/_process_vote',
- addCommentURL: '/_add_comment',
- getCommentsURL: '/_get_comments',
- acceptCommentURL: '/_accept_comment',
- deleteCommentURL: '/_delete_comment',
- commentImage: '/static/_static/comment.png',
- closeCommentImage: '/static/_static/comment-close.png',
- loadingImage: '/static/_static/ajax-loader.gif',
- commentBrightImage: '/static/_static/comment-bright.png',
- upArrow: '/static/_static/up.png',
- downArrow: '/static/_static/down.png',
- upArrowPressed: '/static/_static/up-pressed.png',
- downArrowPressed: '/static/_static/down-pressed.png',
- voting: false,
- moderator: false
- };
-
- if (typeof COMMENT_OPTIONS != "undefined") {
- opts = jQuery.extend(opts, COMMENT_OPTIONS);
- }
-
- var popupTemplate = '\
- <div class="sphinx-comments" id="sc<%id%>">\
- <p class="sort-options">\
- Sort by:\
- <a href="#" class="sort-option byrating">best rated</a>\
- <a href="#" class="sort-option byascage">newest</a>\
- <a href="#" class="sort-option byage">oldest</a>\
- </p>\
- <div class="comment-header">Comments</div>\
- <div class="comment-loading" id="cn<%id%>">\
- loading comments... <img src="<%loadingImage%>" alt="" /></div>\
- <ul id="cl<%id%>" class="comment-ul"></ul>\
- <div id="ca<%id%>">\
- <p class="add-a-comment">Add a comment\
- (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
- <div class="comment-markup-box" id="mb<%id%>">\
- reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
- <code>``code``</code>, \
- code blocks: <code>::</code> and an indented block after blank line</div>\
- <form method="post" id="cf<%id%>" class="comment-form" action="">\
- <textarea name="comment" cols="80"></textarea>\
- <p class="propose-button">\
- <a href="#" id="pc<%id%>" class="show-propose-change">\
- Propose a change &#9657;\
- </a>\
- <a href="#" id="hc<%id%>" class="hide-propose-change">\
- Propose a change &#9663;\
- </a>\
- </p>\
- <textarea name="proposal" id="pt<%id%>" cols="80"\
- spellcheck="false"></textarea>\
- <input type="submit" value="Add comment" />\
- <input type="hidden" name="node" value="<%id%>" />\
- <input type="hidden" name="parent" value="" />\
- </form>\
- </div>\
- </div>';
-
- var commentTemplate = '\
- <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
- <div class="vote">\
- <div class="arrow">\
- <a href="#" id="uv<%id%>" class="vote" title="vote up">\
- <img src="<%upArrow%>" />\
- </a>\
- <a href="#" id="uu<%id%>" class="un vote" title="vote up">\
- <img src="<%upArrowPressed%>" />\
- </a>\
- </div>\
- <div class="arrow">\
- <a href="#" id="dv<%id%>" class="vote" title="vote down">\
- <img src="<%downArrow%>" id="da<%id%>" />\
- </a>\
- <a href="#" id="du<%id%>" class="un vote" title="vote down">\
- <img src="<%downArrowPressed%>" />\
- </a>\
- </div>\
- </div>\
- <div class="comment-content">\
- <p class="tagline comment">\
- <span class="user-id"><%username%></span>\
- <span class="rating"><%pretty_rating%></span>\
- <span class="delta"><%time.delta%></span>\
- </p>\
- <div class="comment-text comment"><#text#></div>\
- <p class="comment-opts comment">\
- <a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
- <a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
- <a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
- <a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
- <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
- <span id="cm<%id%>" class="moderation hidden">\
- <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
- </span>\
- </p>\
- <pre class="proposal" id="pr<%id%>">\
-<#proposal_diff#>\
- </pre>\
- <ul class="comment-children" id="cl<%id%>"></ul>\
- </div>\
- <div class="clearleft"></div>\
- </div>\
- </div>';
-
- var replyTemplate = '\
- <li>\
- <div class="reply-div" id="rd<%id%>">\
- <form id="rf<%id%>">\
- <textarea name="comment" cols="80"></textarea>\
- <input type="submit" value="Add reply" />\
- <input type="button" value="Cancel" />\
- <input type="hidden" name="parent" value="<%id%>" />\
- <input type="hidden" name="node" value="" />\
- </form>\
- </div>\
- </li>';
-
- $(document).ready(function() {
- init();
- });
-})(jQuery);
-
-$(document).ready(function() {
- // add comment anchors for all paragraphs that are commentable
- $('.sphinx-has-comment').comment();
-
- // highlight search words in search results
- $("div.context").each(function() {
- var params = $.getQueryParameters();
- var terms = (params.q) ? params.q[0].split(/\s+/) : [];
- var result = $(this);
- $.each(terms, function() {
- result.highlightText(this.toLowerCase(), 'highlighted');
- });
- });
-
- // directly open comment window if requested
- var anchor = document.location.hash;
- if (anchor.substring(0, 9) == '#comment-') {
- $('#ao' + anchor.substring(9)).click();
- document.location.hash = '#s' + anchor.substring(9);
- }
-});
diff --git a/docs/html/api/Cheetah.CacheRegion.html b/docs/html/api/Cheetah.CacheRegion.html
deleted file mode 100644
index a7d5106..0000000
--- a/docs/html/api/Cheetah.CacheRegion.html
+++ /dev/null
@@ -1,200 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.CacheRegion module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.CacheRegion.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.CacheRegion">
-<span id="cheetah-cacheregion-module"></span><h1>Cheetah.CacheRegion module<a class="headerlink" href="#module-Cheetah.CacheRegion" title="Permalink to this headline">¶</a></h1>
-<p>Cache holder classes for Cheetah:</p>
-<p>Cache regions are defined using the #cache Cheetah directive. Each
-cache region can be viewed as a dictionary (keyed by cacheRegionID)
-handling at least one cache item (the default one). It’s possible to add
-cacheItems in a region by using the <cite>varyBy</cite> #cache directive parameter as
-in the following example:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def getArticle
- this is the article content.
-#end def
-
-#cache varyBy=$getArticleID()
- $getArticle($getArticleID())
-#end cache
-</pre></div>
-</div>
-<p>The code above will generate a CacheRegion and add new cacheItem for each value
-of $getArticleID().</p>
-<dl class="class">
-<dt id="Cheetah.CacheRegion.CacheItem">
-<em class="property">class </em><code class="descclassname">Cheetah.CacheRegion.</code><code class="descname">CacheItem</code><span class="sig-paren">(</span><em>cacheItemID</em>, <em>cacheStore</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>A CacheItem is a container storing:</p>
-<blockquote>
-<div><ul class="simple">
-<li>cacheID (string)</li>
-<li>refreshTime (timestamp or None) : last time the cache was refreshed</li>
-<li>data (string) : the content of the cache</li>
-</ul>
-</div></blockquote>
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheItem.clear">
-<code class="descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem.clear" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheItem.getData">
-<code class="descname">getData</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem.getData" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheItem.getExpiryTime">
-<code class="descname">getExpiryTime</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem.getExpiryTime" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheItem.getRefreshTime">
-<code class="descname">getRefreshTime</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem.getRefreshTime" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheItem.hasExpired">
-<code class="descname">hasExpired</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem.hasExpired" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheItem.renderOutput">
-<code class="descname">renderOutput</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem.renderOutput" title="Permalink to this definition">¶</a></dt>
-<dd><p>Can be overridden to implement edge-caching</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheItem.setData">
-<code class="descname">setData</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem.setData" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheItem.setExpiryTime">
-<code class="descname">setExpiryTime</code><span class="sig-paren">(</span><em>time</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheItem.setExpiryTime" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.CacheRegion.CacheRegion">
-<em class="property">class </em><code class="descclassname">Cheetah.CacheRegion.</code><code class="descname">CacheRegion</code><span class="sig-paren">(</span><em>regionID</em>, <em>templateCacheIdPrefix=''</em>, <em>cacheStore=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheRegion" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>A <cite>CacheRegion</cite> stores some <cite>CacheItem</cite> instances.</p>
-<p>This implementation stores the data in the memory of the current process.
-If you need a more advanced data store, create a cacheStore class that
-works with Cheetah’s CacheStore protocol and provide it as the cacheStore
-argument to __init__. For example you could use
-Cheetah.CacheStore.MemcachedCacheStore, a wrapper around the Python
-memcached API (<a class="reference external" href="http://www.danga.com/memcached">http://www.danga.com/memcached</a>).</p>
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheRegion.clear">
-<code class="descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheRegion.clear" title="Permalink to this definition">¶</a></dt>
-<dd><p>drop all the caches stored in this cache region</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheRegion.getCacheItem">
-<code class="descname">getCacheItem</code><span class="sig-paren">(</span><em>cacheItemID</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheRegion.getCacheItem" title="Permalink to this definition">¶</a></dt>
-<dd><p>Lazy access to a cacheItem</p>
-<p>Try to find a cache in the stored caches. If it doesn’t
-exist, it’s created.</p>
-<p>Returns a <cite>CacheItem</cite> instance.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheRegion.CacheRegion.isNew">
-<code class="descname">isNew</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheRegion.CacheRegion.isNew" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.CacheStore.html b/docs/html/api/Cheetah.CacheStore.html
deleted file mode 100644
index 4ff047d..0000000
--- a/docs/html/api/Cheetah.CacheStore.html
+++ /dev/null
@@ -1,224 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.CacheStore module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.CacheStore.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.CacheStore">
-<span id="cheetah-cachestore-module"></span><h1>Cheetah.CacheStore module<a class="headerlink" href="#module-Cheetah.CacheStore" title="Permalink to this headline">¶</a></h1>
-<p>Provides several CacheStore backends for Cheetah’s caching framework. The
-methods provided by these classes have the same semantics as those in the
-python-memcached API, except for their return values:</p>
-<dl class="docutils">
-<dt>set(key, val, time=0)</dt>
-<dd>set the value unconditionally</dd>
-<dt>add(key, val, time=0)</dt>
-<dd>set only if the server doesn’t already have this key</dd>
-<dt>replace(key, val, time=0)</dt>
-<dd>set only if the server already have this key</dd>
-<dt>get(key, val)</dt>
-<dd>returns val or raises a KeyError</dd>
-<dt>delete(key)</dt>
-<dd>deletes or raises a KeyError</dd>
-</dl>
-<dl class="class">
-<dt id="Cheetah.CacheStore.AbstractCacheStore">
-<em class="property">class </em><code class="descclassname">Cheetah.CacheStore.</code><code class="descname">AbstractCacheStore</code><a class="headerlink" href="#Cheetah.CacheStore.AbstractCacheStore" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<dl class="method">
-<dt id="Cheetah.CacheStore.AbstractCacheStore.add">
-<code class="descname">add</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.AbstractCacheStore.add" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.AbstractCacheStore.delete">
-<code class="descname">delete</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.AbstractCacheStore.delete" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.AbstractCacheStore.get">
-<code class="descname">get</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.AbstractCacheStore.get" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.AbstractCacheStore.replace">
-<code class="descname">replace</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.AbstractCacheStore.replace" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.AbstractCacheStore.set">
-<code class="descname">set</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.AbstractCacheStore.set" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.CacheStore.Error">
-<em class="property">exception </em><code class="descclassname">Cheetah.CacheStore.</code><code class="descname">Error</code><a class="headerlink" href="#Cheetah.CacheStore.Error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.CacheStore.MemcachedCacheStore">
-<em class="property">class </em><code class="descclassname">Cheetah.CacheStore.</code><code class="descname">MemcachedCacheStore</code><span class="sig-paren">(</span><em>servers=None</em>, <em>debug=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemcachedCacheStore" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.CacheStore.AbstractCacheStore" title="Cheetah.CacheStore.AbstractCacheStore"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.CacheStore.AbstractCacheStore</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemcachedCacheStore.add">
-<code class="descname">add</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemcachedCacheStore.add" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemcachedCacheStore.clear">
-<code class="descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemcachedCacheStore.clear" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemcachedCacheStore.delete">
-<code class="descname">delete</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemcachedCacheStore.delete" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemcachedCacheStore.get">
-<code class="descname">get</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemcachedCacheStore.get" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemcachedCacheStore.replace">
-<code class="descname">replace</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemcachedCacheStore.replace" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.CacheStore.MemcachedCacheStore.servers">
-<code class="descname">servers</code><em class="property"> = '127.0.0.1:11211'</em><a class="headerlink" href="#Cheetah.CacheStore.MemcachedCacheStore.servers" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemcachedCacheStore.set">
-<code class="descname">set</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemcachedCacheStore.set" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.CacheStore.MemoryCacheStore">
-<em class="property">class </em><code class="descclassname">Cheetah.CacheStore.</code><code class="descname">MemoryCacheStore</code><a class="headerlink" href="#Cheetah.CacheStore.MemoryCacheStore" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.CacheStore.AbstractCacheStore" title="Cheetah.CacheStore.AbstractCacheStore"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.CacheStore.AbstractCacheStore</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemoryCacheStore.add">
-<code class="descname">add</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemoryCacheStore.add" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemoryCacheStore.clear">
-<code class="descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemoryCacheStore.clear" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemoryCacheStore.delete">
-<code class="descname">delete</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemoryCacheStore.delete" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemoryCacheStore.get">
-<code class="descname">get</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemoryCacheStore.get" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemoryCacheStore.replace">
-<code class="descname">replace</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemoryCacheStore.replace" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CacheStore.MemoryCacheStore.set">
-<code class="descname">set</code><span class="sig-paren">(</span><em>key</em>, <em>val</em>, <em>time=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CacheStore.MemoryCacheStore.set" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.CheetahWrapper.html b/docs/html/api/Cheetah.CheetahWrapper.html
deleted file mode 100644
index c007655..0000000
--- a/docs/html/api/Cheetah.CheetahWrapper.html
+++ /dev/null
@@ -1,202 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.CheetahWrapper module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.CheetahWrapper.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.CheetahWrapper">
-<span id="cheetah-cheetahwrapper-module"></span><h1>Cheetah.CheetahWrapper module<a class="headerlink" href="#module-Cheetah.CheetahWrapper" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.CheetahWrapper.Bundle">
-<em class="property">class </em><code class="descclassname">Cheetah.CheetahWrapper.</code><code class="descname">Bundle</code><span class="sig-paren">(</span><em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.Bundle" title="Permalink to this definition">¶</a></dt>
-<dd><p>Wrap the source, destination and backup paths in one neat little class.
-Used by CheetahWrapper.getBundles().</p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper">
-<em class="property">class </em><code class="descclassname">Cheetah.CheetahWrapper.</code><code class="descname">CheetahWrapper</code><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<dl class="attribute">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.BACKUP_SUFFIX">
-<code class="descname">BACKUP_SUFFIX</code><em class="property"> = '.bak'</em><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.BACKUP_SUFFIX" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.MAKE_BACKUPS">
-<code class="descname">MAKE_BACKUPS</code><em class="property"> = True</em><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.MAKE_BACKUPS" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.chatter">
-<code class="descname">chatter</code><span class="sig-paren">(</span><em>format</em>, <em>*args</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.chatter" title="Permalink to this definition">¶</a></dt>
-<dd><p>Print a verbose message to stdout. But don’t if .opts.stdout is
-true or .opts.verbose is false.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.compile">
-<code class="descname">compile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.compile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.debug">
-<code class="descname">debug</code><span class="sig-paren">(</span><em>format</em>, <em>*args</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.debug" title="Permalink to this definition">¶</a></dt>
-<dd><p>Print a debugging message to stderr, but don’t if .debug is
-false.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.error">
-<code class="descname">error</code><span class="sig-paren">(</span><em>format</em>, <em>*args</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Always print a warning message to stderr and exit with an error code.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.fill">
-<code class="descname">fill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.fill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.help">
-<code class="descname">help</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.help" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.main">
-<code class="descname">main</code><span class="sig-paren">(</span><em>argv=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.main" title="Permalink to this definition">¶</a></dt>
-<dd><p>The main program controller.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.options">
-<code class="descname">options</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.options" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.parseOpts">
-<code class="descname">parseOpts</code><span class="sig-paren">(</span><em>args</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.parseOpts" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.test">
-<code class="descname">test</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.test" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.version">
-<code class="descname">version</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.version" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.CheetahWrapper.CheetahWrapper.warn">
-<code class="descname">warn</code><span class="sig-paren">(</span><em>format</em>, <em>*args</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.CheetahWrapper.warn" title="Permalink to this definition">¶</a></dt>
-<dd><p>Always print a warning message to stderr.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.CheetahWrapper.Error">
-<em class="property">exception </em><code class="descclassname">Cheetah.CheetahWrapper.</code><code class="descname">Error</code><a class="headerlink" href="#Cheetah.CheetahWrapper.Error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.CheetahWrapper.fprintfMessage">
-<code class="descclassname">Cheetah.CheetahWrapper.</code><code class="descname">fprintfMessage</code><span class="sig-paren">(</span><em>stream</em>, <em>format</em>, <em>*args</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.fprintfMessage" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.CheetahWrapper.usage">
-<code class="descclassname">Cheetah.CheetahWrapper.</code><code class="descname">usage</code><span class="sig-paren">(</span><em>usageMessage</em>, <em>errorMessage=''</em>, <em>out=&lt;open file '&lt;stderr&gt;'</em>, <em>mode 'w'&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.CheetahWrapper.usage" title="Permalink to this definition">¶</a></dt>
-<dd><p>Write help text, an optional error message, and abort the program.</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Compiler.html b/docs/html/api/Cheetah.Compiler.html
deleted file mode 100644
index d740150..0000000
--- a/docs/html/api/Cheetah.Compiler.html
+++ /dev/null
@@ -1,918 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Compiler module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Compiler.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Compiler">
-<span id="cheetah-compiler-module"></span><h1>Cheetah.Compiler module<a class="headerlink" href="#module-Cheetah.Compiler" title="Permalink to this headline">¶</a></h1>
-<p>Compiler classes for Cheetah:
-ModuleCompiler aka ‘Compiler’
-ClassCompiler
-MethodCompiler</p>
-<p>If you are trying to grok this code start with ModuleCompiler.__init__,
-ModuleCompiler.compile, and ModuleCompiler.__getattr__.</p>
-<dl class="class">
-<dt id="Cheetah.Compiler.AutoClassCompiler">
-<em class="property">class </em><code class="descclassname">Cheetah.Compiler.</code><code class="descname">AutoClassCompiler</code><span class="sig-paren">(</span><em>className</em>, <em>mainMethodName='respond'</em>, <em>moduleCompiler=None</em>, <em>fileName=None</em>, <em>settingsManager=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.AutoClassCompiler" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Compiler.ClassCompiler" title="Cheetah.Compiler.ClassCompiler"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Compiler.ClassCompiler</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Compiler.AutoMethodCompiler">
-<em class="property">class </em><code class="descclassname">Cheetah.Compiler.</code><code class="descname">AutoMethodCompiler</code><span class="sig-paren">(</span><em>methodName</em>, <em>classCompiler</em>, <em>initialMethodComment=None</em>, <em>decorators=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.AutoMethodCompiler" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Compiler.MethodCompiler" title="Cheetah.Compiler.MethodCompiler"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Compiler.MethodCompiler</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Compiler.AutoMethodCompiler.addMethArg">
-<code class="descname">addMethArg</code><span class="sig-paren">(</span><em>name</em>, <em>defVal=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.AutoMethodCompiler.addMethArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.AutoMethodCompiler.addStop">
-<code class="descname">addStop</code><span class="sig-paren">(</span><em>expr=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.AutoMethodCompiler.addStop" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.AutoMethodCompiler.cleanupState">
-<code class="descname">cleanupState</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.AutoMethodCompiler.cleanupState" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.AutoMethodCompiler.isClassMethod">
-<code class="descname">isClassMethod</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.AutoMethodCompiler.isClassMethod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.AutoMethodCompiler.isStaticMethod">
-<code class="descname">isStaticMethod</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.AutoMethodCompiler.isStaticMethod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.AutoMethodCompiler.methodSignature">
-<code class="descname">methodSignature</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.AutoMethodCompiler.methodSignature" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Compiler.ClassCompiler">
-<em class="property">class </em><code class="descclassname">Cheetah.Compiler.</code><code class="descname">ClassCompiler</code><span class="sig-paren">(</span><em>className</em>, <em>mainMethodName='respond'</em>, <em>moduleCompiler=None</em>, <em>fileName=None</em>, <em>settingsManager=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Compiler.GenUtils" title="Cheetah.Compiler.GenUtils"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Compiler.GenUtils</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.addAttribute">
-<code class="descname">addAttribute</code><span class="sig-paren">(</span><em>attribExpr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.addAttribute" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.addChunkToInit">
-<code class="descname">addChunkToInit</code><span class="sig-paren">(</span><em>chunk</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.addChunkToInit" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.addClassDocString">
-<code class="descname">addClassDocString</code><span class="sig-paren">(</span><em>line</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.addClassDocString" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.addDecorator">
-<code class="descname">addDecorator</code><span class="sig-paren">(</span><em>decoratorExpr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.addDecorator" title="Permalink to this definition">¶</a></dt>
-<dd><p>Set the decorator to be used with the next method in the source.</p>
-<p>See _spawnMethodCompiler() and MethodCompiler for the details of how
-this is used.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.addErrorCatcherCall">
-<code class="descname">addErrorCatcherCall</code><span class="sig-paren">(</span><em>codeChunk</em>, <em>rawCode=''</em>, <em>lineCol=''</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.addErrorCatcherCall" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.addSuper">
-<code class="descname">addSuper</code><span class="sig-paren">(</span><em>argsList</em>, <em>parserComment=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.addSuper" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.attributes">
-<code class="descname">attributes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.attributes" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.classDef">
-<code class="descname">classDef</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.classDef" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.classDocstring">
-<code class="descname">classDocstring</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.classDocstring" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.className">
-<code class="descname">className</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.className" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.classSignature">
-<code class="descname">classSignature</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.classSignature" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.cleanupState">
-<code class="descname">cleanupState</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.cleanupState" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.closeBlock">
-<code class="descname">closeBlock</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.closeBlock" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.closeDef">
-<code class="descname">closeDef</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.closeDef" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Compiler.ClassCompiler.methodCompilerClass">
-<code class="descname">methodCompilerClass</code><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.methodCompilerClass" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Compiler.AutoMethodCompiler" title="Cheetah.Compiler.AutoMethodCompiler"><code class="xref py py-class docutils literal"><span class="pre">AutoMethodCompiler</span></code></a></p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Compiler.ClassCompiler.methodCompilerClassForInit">
-<code class="descname">methodCompilerClassForInit</code><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.methodCompilerClassForInit" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Compiler.MethodCompiler" title="Cheetah.Compiler.MethodCompiler"><code class="xref py py-class docutils literal"><span class="pre">MethodCompiler</span></code></a></p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.methodDefs">
-<code class="descname">methodDefs</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.methodDefs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.setBaseClass">
-<code class="descname">setBaseClass</code><span class="sig-paren">(</span><em>baseClassName</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.setBaseClass" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.setClassName">
-<code class="descname">setClassName</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.setClassName" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.setMainMethodArgs">
-<code class="descname">setMainMethodArgs</code><span class="sig-paren">(</span><em>argsList</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.setMainMethodArgs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.setMainMethodName">
-<code class="descname">setMainMethodName</code><span class="sig-paren">(</span><em>methodName</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.setMainMethodName" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.setting">
-<code class="descname">setting</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.setting" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.startMethodDef">
-<code class="descname">startMethodDef</code><span class="sig-paren">(</span><em>methodName</em>, <em>argsList</em>, <em>parserComment</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.startMethodDef" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ClassCompiler.wrapClassDef">
-<code class="descname">wrapClassDef</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ClassCompiler.wrapClassDef" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Compiler.Compiler">
-<code class="descclassname">Cheetah.Compiler.</code><code class="descname">Compiler</code><a class="headerlink" href="#Cheetah.Compiler.Compiler" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Compiler.ModuleCompiler" title="Cheetah.Compiler.ModuleCompiler"><code class="xref py py-class docutils literal"><span class="pre">ModuleCompiler</span></code></a></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Compiler.Error">
-<em class="property">exception </em><code class="descclassname">Cheetah.Compiler.</code><code class="descname">Error</code><a class="headerlink" href="#Cheetah.Compiler.Error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Compiler.GenUtils">
-<em class="property">class </em><code class="descclassname">Cheetah.Compiler.</code><code class="descname">GenUtils</code><a class="headerlink" href="#Cheetah.Compiler.GenUtils" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>An abstract baseclass for the Compiler classes that provides methods that
-perform generic utility functions or generate pieces of output code from
-information passed in by the Parser baseclass. These methods don’t do any
-parsing themselves.</p>
-<dl class="method">
-<dt id="Cheetah.Compiler.GenUtils.addGetTextVar">
-<code class="descname">addGetTextVar</code><span class="sig-paren">(</span><em>nameChunks</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.GenUtils.addGetTextVar" title="Permalink to this definition">¶</a></dt>
-<dd><p>Output something that gettext can recognize.</p>
-<p>This is a harmless side effect necessary to make gettext work when it
-is scanning compiled templates for strings marked for translation.</p>
-<p>&#64;&#64;TR: another marginally more efficient approach would be to put the
-output in a dummy method that is never called.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.GenUtils.genCacheInfo">
-<code class="descname">genCacheInfo</code><span class="sig-paren">(</span><em>cacheTokenParts</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.GenUtils.genCacheInfo" title="Permalink to this definition">¶</a></dt>
-<dd><p>Decipher a placeholder cachetoken</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.GenUtils.genCacheInfoFromArgList">
-<code class="descname">genCacheInfoFromArgList</code><span class="sig-paren">(</span><em>argList</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.GenUtils.genCacheInfoFromArgList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.GenUtils.genCheetahVar">
-<code class="descname">genCheetahVar</code><span class="sig-paren">(</span><em>nameChunks</em>, <em>plain=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.GenUtils.genCheetahVar" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.GenUtils.genNameMapperVar">
-<code class="descname">genNameMapperVar</code><span class="sig-paren">(</span><em>nameChunks</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.GenUtils.genNameMapperVar" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generate valid Python code for a Cheetah $var, using NameMapper
-(Unified Dotted Notation with the SearchList).</p>
-<dl class="docutils">
-<dt>nameChunks = list of var subcomponents represented as tuples</dt>
-<dd>[ (name,useAC,remainderOfExpr),
-]</dd>
-<dt>where:</dt>
-<dd>name = the dotted name base
-useAC = where NameMapper should use autocalling on namemapperPart
-remainderOfExpr = any arglist, index, or slice</dd>
-</dl>
-<p>If remainderOfExpr contains a call arglist (e.g. ‘(1234)’) then useAC
-is False, otherwise it defaults to True. It is overridden by the global
-setting ‘useAutocalling’ if this setting is False.</p>
-<p>EXAMPLE:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>if the raw Cheetah Var is
- $a.b.c[1].d().x.y.z
-
-nameChunks is the list
- [ (&#39;a.b.c&#39;,True,&#39;[1]&#39;), # A
- (&#39;d&#39;,False,&#39;()&#39;), # B
- (&#39;x.y.z&#39;,True,&#39;&#39;), # C
- ]
-</pre></div>
-</div>
-<p>When this method is fed the list above it returns:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">VFN</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFFSL</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span> <span class="s1">&#39;a.b.c&#39;</span><span class="p">,</span><span class="kc">True</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="s1">&#39;d&#39;</span><span class="p">,</span><span class="kc">False</span><span class="p">)(),</span> <span class="s1">&#39;x.y.z&#39;</span><span class="p">,</span><span class="kc">True</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>which can be represented as:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>VFN(B`, name=C[0], executeCallables=(useAC and C[1]))C[2]
-</pre></div>
-</div>
-<p>where:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>VFN = NameMapper.valueForName
-VFFSL = NameMapper.valueFromFrameOrSearchList
-# optionally used instead of VFFSL
-VFSL = NameMapper.valueFromSearchList
-SL = self.searchList()
-useAC = self.setting(&#39;useAutocalling&#39;) # True in this example
-
-A = (&#39;a.b.c&#39;,True,&#39;[1]&#39;)
-B = (&#39;d&#39;,False,&#39;()&#39;)
-C = (&#39;x.y.z&#39;,True,&#39;&#39;)
-
-C` = VFN( VFN( VFFSL(SL, &#39;a.b.c&#39;,True)[1],
- &#39;d&#39;,False)(),
- &#39;x.y.z&#39;,True)
- = VFN(B`, name=&#39;x.y.z&#39;, executeCallables=True)
-
-B` = VFN(A`, name=B[0], executeCallables=(useAC and B[1]))B[2]
-A` = VFFSL(SL, name=A[0], executeCallables=(useAC and A[1]))A[2]
-</pre></div>
-</div>
-<p>Note, if the compiler setting useStackFrames=False (default is true)
-then:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>A` = VFSL([locals()] + SL + [globals(), builtin],
- name=A[0], executeCallables=(useAC and A[1]))A[2]
-</pre></div>
-</div>
-<p>This option allows Cheetah to be used with Psyco, which doesn’t support
-stack frame introspection.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.GenUtils.genPlainVar">
-<code class="descname">genPlainVar</code><span class="sig-paren">(</span><em>nameChunks</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.GenUtils.genPlainVar" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generate Python code for a Cheetah $var without using NameMapper
-(Unified Dotted Notation with the SearchList).</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.GenUtils.genTimeInterval">
-<code class="descname">genTimeInterval</code><span class="sig-paren">(</span><em>timeString</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.GenUtils.genTimeInterval" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Compiler.MethodCompiler">
-<em class="property">class </em><code class="descclassname">Cheetah.Compiler.</code><code class="descname">MethodCompiler</code><span class="sig-paren">(</span><em>methodName</em>, <em>classCompiler</em>, <em>initialMethodComment=None</em>, <em>decorators=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Compiler.GenUtils" title="Cheetah.Compiler.GenUtils"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Compiler.GenUtils</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addAssert">
-<code class="descname">addAssert</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addAssert" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addBreak">
-<code class="descname">addBreak</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addBreak" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addChunk">
-<code class="descname">addChunk</code><span class="sig-paren">(</span><em>chunk</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addChunk" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addClosure">
-<code class="descname">addClosure</code><span class="sig-paren">(</span><em>functionName</em>, <em>argsList</em>, <em>parserComment</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addClosure" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addContinue">
-<code class="descname">addContinue</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addContinue" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addDel">
-<code class="descname">addDel</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addDel" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addEcho">
-<code class="descname">addEcho</code><span class="sig-paren">(</span><em>expr</em>, <em>rawExpr=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addEcho" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addElif">
-<code class="descname">addElif</code><span class="sig-paren">(</span><em>expr</em>, <em>dedent=True</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addElif" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addElse">
-<code class="descname">addElse</code><span class="sig-paren">(</span><em>expr</em>, <em>dedent=True</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addElse" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addExcept">
-<code class="descname">addExcept</code><span class="sig-paren">(</span><em>expr</em>, <em>dedent=True</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addExcept" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addFilteredChunk">
-<code class="descname">addFilteredChunk</code><span class="sig-paren">(</span><em>chunk</em>, <em>filterArgs=None</em>, <em>rawExpr=None</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addFilteredChunk" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addFinally">
-<code class="descname">addFinally</code><span class="sig-paren">(</span><em>expr</em>, <em>dedent=True</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addFinally" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addFor">
-<code class="descname">addFor</code><span class="sig-paren">(</span><em>expr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addFor" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addIf">
-<code class="descname">addIf</code><span class="sig-paren">(</span><em>expr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addIf" title="Permalink to this definition">¶</a></dt>
-<dd><p>For a full #if … #end if directive</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addInclude">
-<code class="descname">addInclude</code><span class="sig-paren">(</span><em>sourceExpr</em>, <em>includeFrom</em>, <em>isRaw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addInclude" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addIndentingDirective">
-<code class="descname">addIndentingDirective</code><span class="sig-paren">(</span><em>expr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addIndentingDirective" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addMethComment">
-<code class="descname">addMethComment</code><span class="sig-paren">(</span><em>comm</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addMethComment" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addMethDocString">
-<code class="descname">addMethDocString</code><span class="sig-paren">(</span><em>line</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addMethDocString" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addOneLineIf">
-<code class="descname">addOneLineIf</code><span class="sig-paren">(</span><em>expr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addOneLineIf" title="Permalink to this definition">¶</a></dt>
-<dd><p>For a full #if … #end if directive</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addPSP">
-<code class="descname">addPSP</code><span class="sig-paren">(</span><em>PSP</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addPSP" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addPass">
-<code class="descname">addPass</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addPass" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addPlaceholder">
-<code class="descname">addPlaceholder</code><span class="sig-paren">(</span><em>expr</em>, <em>filterArgs</em>, <em>rawPlaceholder</em>, <em>cacheTokenParts</em>, <em>lineCol</em>, <em>silentMode=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addPlaceholder" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addRaise">
-<code class="descname">addRaise</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addRaise" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addRawText">
-<code class="descname">addRawText</code><span class="sig-paren">(</span><em>text</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addRawText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addReIndentingDirective">
-<code class="descname">addReIndentingDirective</code><span class="sig-paren">(</span><em>expr</em>, <em>dedent=True</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addReIndentingDirective" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addRepeat">
-<code class="descname">addRepeat</code><span class="sig-paren">(</span><em>expr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addRepeat" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addReturn">
-<code class="descname">addReturn</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addReturn" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addSet">
-<code class="descname">addSet</code><span class="sig-paren">(</span><em>expr</em>, <em>exprComponents</em>, <em>setStyle</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addSet" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addSilent">
-<code class="descname">addSilent</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addSilent" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addStrConst">
-<code class="descname">addStrConst</code><span class="sig-paren">(</span><em>strConst</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addStrConst" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addTernaryExpr">
-<code class="descname">addTernaryExpr</code><span class="sig-paren">(</span><em>conditionExpr</em>, <em>trueExpr</em>, <em>falseExpr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addTernaryExpr" title="Permalink to this definition">¶</a></dt>
-<dd><p>For a single-lie #if … then …. else … directive
-&lt;condition&gt; then &lt;trueExpr&gt; else &lt;falseExpr&gt;</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addTry">
-<code class="descname">addTry</code><span class="sig-paren">(</span><em>expr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addTry" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addUnless">
-<code class="descname">addUnless</code><span class="sig-paren">(</span><em>expr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addUnless" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addWhile">
-<code class="descname">addWhile</code><span class="sig-paren">(</span><em>expr</em>, <em>lineCol=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addWhile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addWriteChunk">
-<code class="descname">addWriteChunk</code><span class="sig-paren">(</span><em>chunk</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addWriteChunk" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.addYield">
-<code class="descname">addYield</code><span class="sig-paren">(</span><em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.addYield" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.appendToPrevChunk">
-<code class="descname">appendToPrevChunk</code><span class="sig-paren">(</span><em>appendage</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.appendToPrevChunk" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.cleanupState">
-<code class="descname">cleanupState</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.cleanupState" title="Permalink to this definition">¶</a></dt>
-<dd><p>Called by the containing class compiler instance</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.closeFilterBlock">
-<code class="descname">closeFilterBlock</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.closeFilterBlock" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.commitStrConst">
-<code class="descname">commitStrConst</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.commitStrConst" title="Permalink to this definition">¶</a></dt>
-<dd><p>Add the code for outputting the pending strConst without chopping off
-any whitespace from it.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.dedent">
-<code class="descname">dedent</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.dedent" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.docString">
-<code class="descname">docString</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.docString" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.endCacheRegion">
-<code class="descname">endCacheRegion</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.endCacheRegion" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.endCallRegion">
-<code class="descname">endCallRegion</code><span class="sig-paren">(</span><em>regionTitle='CALL'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.endCallRegion" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.endCaptureRegion">
-<code class="descname">endCaptureRegion</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.endCaptureRegion" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.handleWSBeforeDirective">
-<code class="descname">handleWSBeforeDirective</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.handleWSBeforeDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Truncate the pending strCont to the beginning of the current line.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.indent">
-<code class="descname">indent</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.indent" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.indentation">
-<code class="descname">indentation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.indentation" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.isErrorCatcherOn">
-<code class="descname">isErrorCatcherOn</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.isErrorCatcherOn" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.methodBody">
-<code class="descname">methodBody</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.methodBody" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.methodDef">
-<code class="descname">methodDef</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.methodDef" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.methodName">
-<code class="descname">methodName</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.methodName" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.methodSignature">
-<code class="descname">methodSignature</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.methodSignature" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.nextCacheID">
-<code class="descname">nextCacheID</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.nextCacheID" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.nextCallRegionID">
-<code class="descname">nextCallRegionID</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.nextCallRegionID" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.nextCaptureRegionID">
-<code class="descname">nextCaptureRegionID</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.nextCaptureRegionID" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.nextFilterRegionID">
-<code class="descname">nextFilterRegionID</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.nextFilterRegionID" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.setCallArg">
-<code class="descname">setCallArg</code><span class="sig-paren">(</span><em>argName</em>, <em>lineCol</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.setCallArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.setErrorCatcher">
-<code class="descname">setErrorCatcher</code><span class="sig-paren">(</span><em>errorCatcherName</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.setErrorCatcher" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.setFilter">
-<code class="descname">setFilter</code><span class="sig-paren">(</span><em>theFilter</em>, <em>isKlass</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.setFilter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.setMethodName">
-<code class="descname">setMethodName</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.setMethodName" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.setMethodSignature">
-<code class="descname">setMethodSignature</code><span class="sig-paren">(</span><em>signature</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.setMethodSignature" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.setTransform">
-<code class="descname">setTransform</code><span class="sig-paren">(</span><em>transformer</em>, <em>isKlass</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.setTransform" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.setting">
-<code class="descname">setting</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.setting" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.startCacheRegion">
-<code class="descname">startCacheRegion</code><span class="sig-paren">(</span><em>cacheInfo</em>, <em>lineCol</em>, <em>rawPlaceholder=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.startCacheRegion" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.startCallRegion">
-<code class="descname">startCallRegion</code><span class="sig-paren">(</span><em>functionName</em>, <em>args</em>, <em>lineCol</em>, <em>regionTitle='CALL'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.startCallRegion" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.startCaptureRegion">
-<code class="descname">startCaptureRegion</code><span class="sig-paren">(</span><em>assignTo</em>, <em>lineCol</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.startCaptureRegion" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.turnErrorCatcherOff">
-<code class="descname">turnErrorCatcherOff</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.turnErrorCatcherOff" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.turnErrorCatcherOn">
-<code class="descname">turnErrorCatcherOn</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.turnErrorCatcherOn" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.MethodCompiler.wrapCode">
-<code class="descname">wrapCode</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.MethodCompiler.wrapCode" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Compiler.ModuleCompiler">
-<em class="property">class </em><code class="descclassname">Cheetah.Compiler.</code><code class="descname">ModuleCompiler</code><span class="sig-paren">(</span><em>source=None</em>, <em>file=None</em>, <em>moduleName='DynamicallyCompiledCheetahTemplate'</em>, <em>mainClassName=None</em>, <em>mainMethodName=None</em>, <em>baseclassName=None</em>, <em>extraImportStatements=None</em>, <em>settings=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager" title="Cheetah.SettingsManager.SettingsManager"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.SettingsManager.SettingsManager</span></code></a>, <a class="reference internal" href="#Cheetah.Compiler.GenUtils" title="Cheetah.Compiler.GenUtils"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Compiler.GenUtils</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.addAttribute">
-<code class="descname">addAttribute</code><span class="sig-paren">(</span><em>attribName</em>, <em>expr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.addAttribute" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.addComment">
-<code class="descname">addComment</code><span class="sig-paren">(</span><em>comm</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.addComment" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.addImportStatement">
-<code class="descname">addImportStatement</code><span class="sig-paren">(</span><em>impStatement</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.addImportStatement" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.addImportedVarNames">
-<code class="descname">addImportedVarNames</code><span class="sig-paren">(</span><em>varNames</em>, <em>raw_statement=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.addImportedVarNames" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.addModuleDocString">
-<code class="descname">addModuleDocString</code><span class="sig-paren">(</span><em>line</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.addModuleDocString" title="Permalink to this definition">¶</a></dt>
-<dd><p>Adds a line to the generated module docstring.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.addModuleGlobal">
-<code class="descname">addModuleGlobal</code><span class="sig-paren">(</span><em>line</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.addModuleGlobal" title="Permalink to this definition">¶</a></dt>
-<dd><p>Adds a line of global module code. It is inserted after the import
-statements and Cheetah default module constants.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.addModuleHeader">
-<code class="descname">addModuleHeader</code><span class="sig-paren">(</span><em>line</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.addModuleHeader" title="Permalink to this definition">¶</a></dt>
-<dd><p>Adds a header comment to the top of the generated module.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.addSpecialVar">
-<code class="descname">addSpecialVar</code><span class="sig-paren">(</span><em>basename</em>, <em>contents</em>, <em>includeUnderscores=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.addSpecialVar" title="Permalink to this definition">¶</a></dt>
-<dd><p>Adds module __specialConstant__ to the module globals.</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Compiler.ModuleCompiler.classCompilerClass">
-<code class="descname">classCompilerClass</code><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.classCompilerClass" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Compiler.AutoClassCompiler" title="Cheetah.Compiler.AutoClassCompiler"><code class="xref py py-class docutils literal"><span class="pre">AutoClassCompiler</span></code></a></p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.classDefs">
-<code class="descname">classDefs</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.classDefs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.compile">
-<code class="descname">compile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.compile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.getModuleCode">
-<code class="descname">getModuleCode</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.getModuleCode" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.getModuleEncoding">
-<code class="descname">getModuleEncoding</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.getModuleEncoding" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.importStatements">
-<code class="descname">importStatements</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.importStatements" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.importedVarNames">
-<code class="descname">importedVarNames</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.importedVarNames" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.moduleConstants">
-<code class="descname">moduleConstants</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.moduleConstants" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.moduleDocstring">
-<code class="descname">moduleDocstring</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.moduleDocstring" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.moduleFooter">
-<code class="descname">moduleFooter</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.moduleFooter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.moduleHeader">
-<code class="descname">moduleHeader</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.moduleHeader" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Compiler.ModuleCompiler.parserClass">
-<code class="descname">parserClass</code><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.parserClass" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <code class="xref py py-class docutils literal"><span class="pre">_HighLevelParser</span></code></p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.setBaseClass">
-<code class="descname">setBaseClass</code><span class="sig-paren">(</span><em>baseClassName</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.setBaseClass" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.setCompilerSetting">
-<code class="descname">setCompilerSetting</code><span class="sig-paren">(</span><em>key</em>, <em>valueExpr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.setCompilerSetting" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.setCompilerSettings">
-<code class="descname">setCompilerSettings</code><span class="sig-paren">(</span><em>keywords</em>, <em>settingsStr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.setCompilerSettings" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.setModuleEncoding">
-<code class="descname">setModuleEncoding</code><span class="sig-paren">(</span><em>encoding</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.setModuleEncoding" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.setShBang">
-<code class="descname">setShBang</code><span class="sig-paren">(</span><em>shBang</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.setShBang" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.specialVars">
-<code class="descname">specialVars</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.specialVars" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.timestamp">
-<code class="descname">timestamp</code><span class="sig-paren">(</span><em>theTime=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.timestamp" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Compiler.ModuleCompiler.wrapModuleDef">
-<code class="descname">wrapModuleDef</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Compiler.ModuleCompiler.wrapModuleDef" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.DirectiveAnalyzer.html b/docs/html/api/Cheetah.DirectiveAnalyzer.html
deleted file mode 100644
index 971eddf..0000000
--- a/docs/html/api/Cheetah.DirectiveAnalyzer.html
+++ /dev/null
@@ -1,138 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.DirectiveAnalyzer module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.DirectiveAnalyzer.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.DirectiveAnalyzer">
-<span id="cheetah-directiveanalyzer-module"></span><h1>Cheetah.DirectiveAnalyzer module<a class="headerlink" href="#module-Cheetah.DirectiveAnalyzer" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.DirectiveAnalyzer.AnalysisCompiler">
-<em class="property">class </em><code class="descclassname">Cheetah.DirectiveAnalyzer.</code><code class="descname">AnalysisCompiler</code><span class="sig-paren">(</span><em>source=None</em>, <em>file=None</em>, <em>moduleName='DynamicallyCompiledCheetahTemplate'</em>, <em>mainClassName=None</em>, <em>mainMethodName=None</em>, <em>baseclassName=None</em>, <em>extraImportStatements=None</em>, <em>settings=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DirectiveAnalyzer.AnalysisCompiler" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler" title="Cheetah.Compiler.ModuleCompiler"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Compiler.ModuleCompiler</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.DirectiveAnalyzer.AnalysisCompiler.parserClass">
-<code class="descname">parserClass</code><a class="headerlink" href="#Cheetah.DirectiveAnalyzer.AnalysisCompiler.parserClass" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.DirectiveAnalyzer.Analyzer" title="Cheetah.DirectiveAnalyzer.Analyzer"><code class="xref py py-class docutils literal"><span class="pre">Analyzer</span></code></a></p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.DirectiveAnalyzer.Analyzer">
-<em class="property">class </em><code class="descclassname">Cheetah.DirectiveAnalyzer.</code><code class="descname">Analyzer</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DirectiveAnalyzer.Analyzer" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">Cheetah.Parser._HighLevelParser</span></code></p>
-<dl class="method">
-<dt id="Cheetah.DirectiveAnalyzer.Analyzer.eatDirective">
-<code class="descname">eatDirective</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DirectiveAnalyzer.Analyzer.eatDirective" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.DirectiveAnalyzer.analyze">
-<code class="descclassname">Cheetah.DirectiveAnalyzer.</code><code class="descname">analyze</code><span class="sig-paren">(</span><em>source</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DirectiveAnalyzer.analyze" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.DirectiveAnalyzer.main">
-<code class="descclassname">Cheetah.DirectiveAnalyzer.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DirectiveAnalyzer.main" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.DirectiveAnalyzer.main_dir">
-<code class="descclassname">Cheetah.DirectiveAnalyzer.</code><code class="descname">main_dir</code><span class="sig-paren">(</span><em>opts</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DirectiveAnalyzer.main_dir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.DirectiveAnalyzer.main_file">
-<code class="descclassname">Cheetah.DirectiveAnalyzer.</code><code class="descname">main_file</code><span class="sig-paren">(</span><em>f</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DirectiveAnalyzer.main_file" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Django.html b/docs/html/api/Cheetah.Django.html
deleted file mode 100644
index ee62e8c..0000000
--- a/docs/html/api/Cheetah.Django.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Django module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Django.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Django">
-<span id="cheetah-django-module"></span><h1>Cheetah.Django module<a class="headerlink" href="#module-Cheetah.Django" title="Permalink to this headline">¶</a></h1>
-<dl class="function">
-<dt id="Cheetah.Django.render">
-<code class="descclassname">Cheetah.Django.</code><code class="descname">render</code><span class="sig-paren">(</span><em>template_file</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Django.render" title="Permalink to this definition">¶</a></dt>
-<dd><p>Cheetah.Django.render() takes the template filename
-(the filename should be a file in your Django
-TEMPLATE_DIRS)</p>
-<p>Any additional keyword arguments are passed into the
-template are propogated into the template’s searchList</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.DummyTransaction.html b/docs/html/api/Cheetah.DummyTransaction.html
deleted file mode 100644
index 4dc3196..0000000
--- a/docs/html/api/Cheetah.DummyTransaction.html
+++ /dev/null
@@ -1,183 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.DummyTransaction module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.DummyTransaction.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.DummyTransaction">
-<span id="cheetah-dummytransaction-module"></span><h1>Cheetah.DummyTransaction module<a class="headerlink" href="#module-Cheetah.DummyTransaction" title="Permalink to this headline">¶</a></h1>
-<p>Provides dummy Transaction and Response classes is used by Cheetah in place
-of real Webware transactions when the Template obj is not used directly as a
-Webware servlet.</p>
-<p>Warning: This may be deprecated in the future, please do not rely on any
-specific DummyTransaction or DummyResponse behavior</p>
-<dl class="class">
-<dt id="Cheetah.DummyTransaction.DummyResponse">
-<em class="property">class </em><code class="descclassname">Cheetah.DummyTransaction.</code><code class="descname">DummyResponse</code><a class="headerlink" href="#Cheetah.DummyTransaction.DummyResponse" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>A dummy Response class is used by Cheetah in place of real Webware
-Response objects when the Template obj is not used directly as a Webware
-servlet</p>
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.DummyResponse.flush">
-<code class="descname">flush</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.DummyResponse.flush" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.DummyResponse.getvalue">
-<code class="descname">getvalue</code><span class="sig-paren">(</span><em>outputChunks=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.DummyResponse.getvalue" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.DummyResponse.safeConvert">
-<code class="descname">safeConvert</code><span class="sig-paren">(</span><em>chunk</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.DummyResponse.safeConvert" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.DummyResponse.write">
-<code class="descname">write</code><span class="sig-paren">(</span><em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.DummyResponse.write" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.DummyResponse.writelines">
-<code class="descname">writelines</code><span class="sig-paren">(</span><em>*lines</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.DummyResponse.writelines" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.DummyResponse.writeln">
-<code class="descname">writeln</code><span class="sig-paren">(</span><em>txt</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.DummyResponse.writeln" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.DummyTransaction.DummyResponseFailure">
-<em class="property">exception </em><code class="descclassname">Cheetah.DummyTransaction.</code><code class="descname">DummyResponseFailure</code><a class="headerlink" href="#Cheetah.DummyTransaction.DummyResponseFailure" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.DummyTransaction.DummyTransaction">
-<em class="property">class </em><code class="descclassname">Cheetah.DummyTransaction.</code><code class="descname">DummyTransaction</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.DummyTransaction" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>A dummy Transaction class is used by Cheetah in place of real Webware
-transactions when the Template obj is not used directly as a Webware
-servlet.</p>
-<p>It only provides a response object and method. All other methods and
-attributes make no sense in this context.</p>
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.DummyTransaction.response">
-<code class="descname">response</code><span class="sig-paren">(</span><em>resp=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.DummyTransaction.response" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.DummyTransaction.TransformerResponse">
-<em class="property">class </em><code class="descclassname">Cheetah.DummyTransaction.</code><code class="descname">TransformerResponse</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.TransformerResponse" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.DummyTransaction.DummyResponse" title="Cheetah.DummyTransaction.DummyResponse"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.DummyTransaction.DummyResponse</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.TransformerResponse.getvalue">
-<code class="descname">getvalue</code><span class="sig-paren">(</span><em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.TransformerResponse.getvalue" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.DummyTransaction.TransformerTransaction">
-<em class="property">class </em><code class="descclassname">Cheetah.DummyTransaction.</code><code class="descname">TransformerTransaction</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.TransformerTransaction" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<dl class="method">
-<dt id="Cheetah.DummyTransaction.TransformerTransaction.response">
-<code class="descname">response</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.DummyTransaction.TransformerTransaction.response" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.ErrorCatchers.html b/docs/html/api/Cheetah.ErrorCatchers.html
deleted file mode 100644
index bd902b4..0000000
--- a/docs/html/api/Cheetah.ErrorCatchers.html
+++ /dev/null
@@ -1,162 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.ErrorCatchers module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.ErrorCatchers.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.ErrorCatchers">
-<span id="cheetah-errorcatchers-module"></span><h1>Cheetah.ErrorCatchers module<a class="headerlink" href="#module-Cheetah.ErrorCatchers" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.ErrorCatchers.BigEcho">
-<em class="property">class </em><code class="descclassname">Cheetah.ErrorCatchers.</code><code class="descname">BigEcho</code><span class="sig-paren">(</span><em>templateObj</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.BigEcho" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ErrorCatchers.ErrorCatcher" title="Cheetah.ErrorCatchers.ErrorCatcher"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ErrorCatchers.ErrorCatcher</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.ErrorCatchers.BigEcho.warn">
-<code class="descname">warn</code><span class="sig-paren">(</span><em>exc_val</em>, <em>code</em>, <em>rawCode</em>, <em>lineCol</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.BigEcho.warn" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.ErrorCatchers.Echo">
-<code class="descclassname">Cheetah.ErrorCatchers.</code><code class="descname">Echo</code><a class="headerlink" href="#Cheetah.ErrorCatchers.Echo" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.ErrorCatchers.ErrorCatcher" title="Cheetah.ErrorCatchers.ErrorCatcher"><code class="xref py py-class docutils literal"><span class="pre">ErrorCatcher</span></code></a></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.ErrorCatchers.Error">
-<em class="property">exception </em><code class="descclassname">Cheetah.ErrorCatchers.</code><code class="descname">Error</code><a class="headerlink" href="#Cheetah.ErrorCatchers.Error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ErrorCatchers.ErrorCatcher">
-<em class="property">class </em><code class="descclassname">Cheetah.ErrorCatchers.</code><code class="descname">ErrorCatcher</code><span class="sig-paren">(</span><em>templateObj</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.ErrorCatcher" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="Cheetah.ErrorCatchers.ErrorCatcher.exceptions">
-<code class="descname">exceptions</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.ErrorCatcher.exceptions" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.ErrorCatchers.ErrorCatcher.warn">
-<code class="descname">warn</code><span class="sig-paren">(</span><em>exc_val</em>, <em>code</em>, <em>rawCode</em>, <em>lineCol</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.ErrorCatcher.warn" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ErrorCatchers.KeyError">
-<em class="property">class </em><code class="descclassname">Cheetah.ErrorCatchers.</code><code class="descname">KeyError</code><span class="sig-paren">(</span><em>templateObj</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.KeyError" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ErrorCatchers.ErrorCatcher" title="Cheetah.ErrorCatchers.ErrorCatcher"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ErrorCatchers.ErrorCatcher</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.ErrorCatchers.KeyError.warn">
-<code class="descname">warn</code><span class="sig-paren">(</span><em>exc_val</em>, <em>code</em>, <em>rawCode</em>, <em>lineCol</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.KeyError.warn" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ErrorCatchers.ListErrors">
-<em class="property">class </em><code class="descclassname">Cheetah.ErrorCatchers.</code><code class="descname">ListErrors</code><span class="sig-paren">(</span><em>templateObj</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.ListErrors" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ErrorCatchers.ErrorCatcher" title="Cheetah.ErrorCatchers.ErrorCatcher"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ErrorCatchers.ErrorCatcher</span></code></a></p>
-<p>Accumulate a list of errors.</p>
-<dl class="method">
-<dt id="Cheetah.ErrorCatchers.ListErrors.listErrors">
-<code class="descname">listErrors</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.ListErrors.listErrors" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the list of errors.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.ErrorCatchers.ListErrors.warn">
-<code class="descname">warn</code><span class="sig-paren">(</span><em>exc_val</em>, <em>code</em>, <em>rawCode</em>, <em>lineCol</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ErrorCatchers.ListErrors.warn" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.FileUtils.html b/docs/html/api/Cheetah.FileUtils.html
deleted file mode 100644
index 91f8d1b..0000000
--- a/docs/html/api/Cheetah.FileUtils.html
+++ /dev/null
@@ -1,192 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.FileUtils module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.FileUtils.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.FileUtils">
-<span id="cheetah-fileutils-module"></span><h1>Cheetah.FileUtils module<a class="headerlink" href="#module-Cheetah.FileUtils" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.FileUtils.FileFinder">
-<em class="property">class </em><code class="descclassname">Cheetah.FileUtils.</code><code class="descname">FileFinder</code><span class="sig-paren">(</span><em>rootPath</em>, <em>globPatterns=('*'</em>, <em>)</em>, <em>ignoreBasenames=('CVS'</em>, <em>'.svn')</em>, <em>ignoreDirs=()</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.FileFinder" title="Permalink to this definition">¶</a></dt>
-<dd><p>Traverses a directory tree and finds all files in it that match one of
-the specified glob patterns.</p>
-<dl class="method">
-<dt id="Cheetah.FileUtils.FileFinder.files">
-<code class="descname">files</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.FileFinder.files" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.FileUtils.FileFinder.filterDir">
-<code class="descname">filterDir</code><span class="sig-paren">(</span><em>baseName</em>, <em>fullPath</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.FileFinder.filterDir" title="Permalink to this definition">¶</a></dt>
-<dd><p>A hook for filtering out certain dirs.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.FileUtils.FileFinder.processDir">
-<code class="descname">processDir</code><span class="sig-paren">(</span><em>dir</em>, <em>glob=&lt;function glob&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.FileFinder.processDir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.FileUtils.FileFinder.walkDirTree">
-<code class="descname">walkDirTree</code><span class="sig-paren">(</span><em>dir='.'</em>, <em>listdir=&lt;built-in function listdir&gt;</em>, <em>isdir=&lt;function isdir&gt;</em>, <em>join=&lt;function join&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.FileFinder.walkDirTree" title="Permalink to this definition">¶</a></dt>
-<dd><p>Recursively walk through a directory tree and find matching files</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.FileUtils.FindAndReplace">
-<em class="property">class </em><code class="descclassname">Cheetah.FileUtils.</code><code class="descname">FindAndReplace</code><span class="sig-paren">(</span><em>files</em>, <em>patternOrRE</em>, <em>replacement</em>, <em>recordResults=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.FindAndReplace" title="Permalink to this definition">¶</a></dt>
-<dd><p>Find and replace all instances of ‘patternOrRE’ with ‘replacement’ for
-each file in the ‘files’ list. This is a multi-file version of re.sub().</p>
-<p>‘patternOrRE’ can be a raw regex pattern or
-a regex object as generated by the re module. ‘replacement’ can be any
-string that would work with patternOrRE.sub(replacement, fileContents).</p>
-<dl class="method">
-<dt id="Cheetah.FileUtils.FindAndReplace.results">
-<code class="descname">results</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.FindAndReplace.results" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.FileUtils.SourceFileStats">
-<em class="property">class </em><code class="descclassname">Cheetah.FileUtils.</code><code class="descname">SourceFileStats</code><span class="sig-paren">(</span><em>files</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.SourceFileStats" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="Cheetah.FileUtils.SourceFileStats.getFileStats">
-<code class="descname">getFileStats</code><span class="sig-paren">(</span><em>fileName</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.SourceFileStats.getFileStats" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.FileUtils.SourceFileStats.printStats">
-<code class="descname">printStats</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.SourceFileStats.printStats" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.FileUtils.SourceFileStats.rawStats">
-<code class="descname">rawStats</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.SourceFileStats.rawStats" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.FileUtils.SourceFileStats.summary">
-<code class="descname">summary</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.SourceFileStats.summary" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.FileUtils.findFiles">
-<code class="descclassname">Cheetah.FileUtils.</code><code class="descname">findFiles</code><span class="sig-paren">(</span><em>*args</em>, <em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.findFiles" title="Permalink to this definition">¶</a></dt>
-<dd><p>Recursively find all the files matching a glob pattern.</p>
-<p>This function is a wrapper around the FileFinder class. See its docstring
-for details about the accepted arguments, etc.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.FileUtils.replaceRegexInFiles">
-<code class="descclassname">Cheetah.FileUtils.</code><code class="descname">replaceRegexInFiles</code><span class="sig-paren">(</span><em>files</em>, <em>pattern</em>, <em>repl</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.replaceRegexInFiles" title="Permalink to this definition">¶</a></dt>
-<dd><p>Replace all instances of regex ‘pattern’ with ‘repl’ for each file in the
-‘files’ list. Returns a dictionary with data about the matches found.</p>
-<p>This is like re.sub on a multi-file basis.</p>
-<p>This function is a wrapper around the FindAndReplace class. See its
-docstring for more details.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.FileUtils.replaceStrInFiles">
-<code class="descclassname">Cheetah.FileUtils.</code><code class="descname">replaceStrInFiles</code><span class="sig-paren">(</span><em>files</em>, <em>theStr</em>, <em>repl</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.replaceStrInFiles" title="Permalink to this definition">¶</a></dt>
-<dd><p>Replace all instances of ‘theStr’ with ‘repl’ for each file in the ‘files’
-list. Returns a dictionary with data about the matches found.</p>
-<p>This is like string.replace() on a multi-file basis.</p>
-<p>This function is a wrapper around the FindAndReplace class. See its
-docstring for more details.</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Filters.html b/docs/html/api/Cheetah.Filters.html
deleted file mode 100644
index 1b33982..0000000
--- a/docs/html/api/Cheetah.Filters.html
+++ /dev/null
@@ -1,240 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Filters module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Filters.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Filters">
-<span id="cheetah-filters-module"></span><h1>Cheetah.Filters module<a class="headerlink" href="#module-Cheetah.Filters" title="Permalink to this headline">¶</a></h1>
-<p>Filters for the #filter directive as well as #transform</p>
-<p>#filter results in output filters Cheetah’s $placeholders .
-#transform results in a filter on the entirety of the output</p>
-<dl class="class">
-<dt id="Cheetah.Filters.CodeHighlighter">
-<em class="property">class </em><code class="descclassname">Cheetah.Filters.</code><code class="descname">CodeHighlighter</code><span class="sig-paren">(</span><em>template=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.CodeHighlighter" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Filters.Filter</span></code></a></p>
-<p>The CodeHighlighter filter depends on the “pygments” module
-which you can download and install from: <a class="reference external" href="http://pygments.org/">http://pygments.org/</a></p>
-<p>What the CodeHighlighter assumes the string that it’s receiving
-is source code and uses pygments.lexers.guess_lexer() to try to guess
-which parser to use when highlighting it.</p>
-<p>CodeHighlighter will return the HTML and CSS to render the code block,
-syntax highlighted, in a browser</p>
-<p>NOTE: I had an issue installing pygments on Linux/amd64/Python 2.6
-dealing with importing of pygments.lexers. I was able to correct the
-failure by adding:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">raise</span> <span class="ne">ImportError</span>
-</pre></div>
-</div>
-<p>to line 39 of pygments/plugin.py (since importing pkg_resources was
-causing issues).</p>
-<dl class="method">
-<dt id="Cheetah.Filters.CodeHighlighter.filter">
-<code class="descname">filter</code><span class="sig-paren">(</span><em>source</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.CodeHighlighter.filter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Filters.EncodeUnicode">
-<code class="descclassname">Cheetah.Filters.</code><code class="descname">EncodeUnicode</code><a class="headerlink" href="#Cheetah.Filters.EncodeUnicode" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Filter</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Filters.Filter">
-<em class="property">class </em><code class="descclassname">Cheetah.Filters.</code><code class="descname">Filter</code><span class="sig-paren">(</span><em>template=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.Filter" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>A baseclass for the Cheetah Filters.</p>
-<dl class="method">
-<dt id="Cheetah.Filters.Filter.filter">
-<code class="descname">filter</code><span class="sig-paren">(</span><em>val</em>, <em>encoding=None</em>, <em>str=&lt;type 'str'&gt;</em>, <em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.Filter.filter" title="Permalink to this definition">¶</a></dt>
-<dd><p>Pass Unicode strings through unmolested,
-unless an encoding is specified.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Filters.Markdown">
-<em class="property">class </em><code class="descclassname">Cheetah.Filters.</code><code class="descname">Markdown</code><span class="sig-paren">(</span><em>template=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.Markdown" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Filters.Filter</span></code></a></p>
-<p>Markdown will change regular strings to <a class="reference external" href="http://daringfireball.net/projects/markdown/">Markdown</a></p>
-<p>Such that:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">My</span> <span class="n">Header</span>
-<span class="o">=========</span>
-</pre></div>
-</div>
-<p>Becomes:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">h1</span><span class="o">&gt;</span><span class="n">My</span> <span class="n">Header</span><span class="o">&lt;/</span><span class="n">h1</span><span class="o">&gt;</span>
-</pre></div>
-</div>
-<p>and so on.</p>
-<p>Markdown is meant to be used with the #transform
-tag, as it’s usefulness with #filter is marginal at
-best</p>
-<dl class="method">
-<dt id="Cheetah.Filters.Markdown.filter">
-<code class="descname">filter</code><span class="sig-paren">(</span><em>value</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.Markdown.filter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Filters.MaxLen">
-<em class="property">class </em><code class="descclassname">Cheetah.Filters.</code><code class="descname">MaxLen</code><span class="sig-paren">(</span><em>template=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.MaxLen" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Filters.Filter</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Filters.MaxLen.filter">
-<code class="descname">filter</code><span class="sig-paren">(</span><em>val</em>, <em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.MaxLen.filter" title="Permalink to this definition">¶</a></dt>
-<dd><p>Replace None with ‘’ and cut off at maxlen.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Filters.RawOrEncodedUnicode">
-<code class="descclassname">Cheetah.Filters.</code><code class="descname">RawOrEncodedUnicode</code><a class="headerlink" href="#Cheetah.Filters.RawOrEncodedUnicode" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Filter</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Filters.Strip">
-<em class="property">class </em><code class="descclassname">Cheetah.Filters.</code><code class="descname">Strip</code><span class="sig-paren">(</span><em>template=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.Strip" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Filters.Filter</span></code></a></p>
-<p>Strip leading/trailing whitespace but preserve newlines.</p>
-<p>This filter goes through the value line by line, removing leading and
-trailing whitespace on each line. It does not strip newlines, so every
-input line corresponds to one output line, with its trailing newline
-intact.</p>
-<p>We do not use val.split(‘n’) because that would squeeze out consecutive
-blank lines. Instead, we search for each newline individually. This
-makes us unable to use the fast C .split method, but it makes the filter
-much more widely useful.</p>
-<p>This filter is intended to be usable both with the #filter directive and
-with the proposed #sed directive (which has not been ratified yet.)</p>
-<dl class="method">
-<dt id="Cheetah.Filters.Strip.filter">
-<code class="descname">filter</code><span class="sig-paren">(</span><em>val</em>, <em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.Strip.filter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Filters.StripSqueeze">
-<em class="property">class </em><code class="descclassname">Cheetah.Filters.</code><code class="descname">StripSqueeze</code><span class="sig-paren">(</span><em>template=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.StripSqueeze" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Filters.Filter</span></code></a></p>
-<p>Canonicalizes every chunk of whitespace to a single space.</p>
-<p>Strips leading/trailing whitespace. Removes all newlines, so multi-line
-input is joined into one ling line with NO trailing newline.</p>
-<dl class="method">
-<dt id="Cheetah.Filters.StripSqueeze.filter">
-<code class="descname">filter</code><span class="sig-paren">(</span><em>val</em>, <em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.StripSqueeze.filter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Filters.WebSafe">
-<em class="property">class </em><code class="descclassname">Cheetah.Filters.</code><code class="descname">WebSafe</code><span class="sig-paren">(</span><em>template=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.WebSafe" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Filters.Filter</span></code></a></p>
-<p>Escape HTML entities in $placeholders.</p>
-<dl class="method">
-<dt id="Cheetah.Filters.WebSafe.filter">
-<code class="descname">filter</code><span class="sig-paren">(</span><em>val</em>, <em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.WebSafe.filter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Filters.test">
-<code class="descclassname">Cheetah.Filters.</code><code class="descname">test</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.test" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.ImportHooks.html b/docs/html/api/Cheetah.ImportHooks.html
deleted file mode 100644
index 1362940..0000000
--- a/docs/html/api/Cheetah.ImportHooks.html
+++ /dev/null
@@ -1,135 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.ImportHooks module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.ImportHooks.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.ImportHooks">
-<span id="cheetah-importhooks-module"></span><h1>Cheetah.ImportHooks module<a class="headerlink" href="#module-Cheetah.ImportHooks" title="Permalink to this headline">¶</a></h1>
-<p>Provides some import hooks to allow Cheetah’s .tmpl files to be imported
-directly like Python .py modules.</p>
-<dl class="docutils">
-<dt>To use these:</dt>
-<dd>import Cheetah.ImportHooks
-Cheetah.ImportHooks.install()</dd>
-</dl>
-<dl class="class">
-<dt id="Cheetah.ImportHooks.CheetahDirOwner">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportHooks.</code><code class="descname">CheetahDirOwner</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportHooks.CheetahDirOwner" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="Cheetah.ImportManager.html#Cheetah.ImportManager.DirOwner" title="Cheetah.ImportManager.DirOwner"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ImportManager.DirOwner</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.ImportHooks.CheetahDirOwner.getmod">
-<code class="descname">getmod</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportHooks.CheetahDirOwner.getmod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.ImportHooks.CheetahDirOwner.templateFileExtensions">
-<code class="descname">templateFileExtensions</code><em class="property"> = ('.tmpl',)</em><a class="headerlink" href="#Cheetah.ImportHooks.CheetahDirOwner.templateFileExtensions" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.ImportHooks.install">
-<code class="descclassname">Cheetah.ImportHooks.</code><code class="descname">install</code><span class="sig-paren">(</span><em>templateFileExtensions=('.tmpl'</em>, <em>)</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportHooks.install" title="Permalink to this definition">¶</a></dt>
-<dd><p>Install the Cheetah Import Hooks</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.ImportHooks.setCacheDir">
-<code class="descclassname">Cheetah.ImportHooks.</code><code class="descname">setCacheDir</code><span class="sig-paren">(</span><em>cacheDir</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportHooks.setCacheDir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.ImportHooks.uninstall">
-<code class="descclassname">Cheetah.ImportHooks.</code><code class="descname">uninstall</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportHooks.uninstall" title="Permalink to this definition">¶</a></dt>
-<dd><p>Uninstall the Cheetah Import Hooks</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.ImportManager.html b/docs/html/api/Cheetah.ImportManager.html
deleted file mode 100644
index 603ed1b..0000000
--- a/docs/html/api/Cheetah.ImportManager.html
+++ /dev/null
@@ -1,254 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.ImportManager module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.ImportManager.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.ImportManager">
-<span id="cheetah-importmanager-module"></span><h1>Cheetah.ImportManager module<a class="headerlink" href="#module-Cheetah.ImportManager" title="Permalink to this headline">¶</a></h1>
-<p>Provides an emulator/replacement for Python’s standard import system.</p>
-<p>&#64;&#64;TR: Be warned that Import Hooks are in the deepest, darkest corner of
-Python’s jungle. If you need to start hacking with this, be prepared to get
-lost for a while. Also note, this module predates the newstyle import hooks in
-Python 2.3 <a class="reference external" href="http://www.python.org/peps/pep-0302.html">http://www.python.org/peps/pep-0302.html</a>.</p>
-<p>This is a hacked/documented version of Gordon McMillan’s iu.py. I have:</p>
-<blockquote>
-<div><ul class="simple">
-<li>made it a little less terse</li>
-<li>added docstrings and explanatations</li>
-<li>standardized the variable naming scheme</li>
-<li>reorganized the code layout to enhance readability</li>
-</ul>
-</div></blockquote>
-<dl class="class">
-<dt id="Cheetah.ImportManager.BuiltinImportDirector">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportManager.</code><code class="descname">BuiltinImportDirector</code><a class="headerlink" href="#Cheetah.ImportManager.BuiltinImportDirector" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ImportManager.ImportDirector" title="Cheetah.ImportManager.ImportDirector"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ImportManager.ImportDirector</span></code></a></p>
-<p>Directs imports of builtin modules</p>
-<dl class="method">
-<dt id="Cheetah.ImportManager.BuiltinImportDirector.getmod">
-<code class="descname">getmod</code><span class="sig-paren">(</span><em>nm</em>, <em>isbuiltin=&lt;built-in function is_builtin&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.BuiltinImportDirector.getmod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ImportManager.DirOwner">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportManager.</code><code class="descname">DirOwner</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.DirOwner" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ImportManager.Owner" title="Cheetah.ImportManager.Owner"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ImportManager.Owner</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.ImportManager.DirOwner.getmod">
-<code class="descname">getmod</code><span class="sig-paren">(</span><em>nm</em>, <em>getsuffixes=&lt;built-in function get_suffixes&gt;</em>, <em>loadco=&lt;built-in function loads&gt;</em>, <em>newmod=&lt;built-in function new_module&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.DirOwner.getmod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ImportManager.FrozenImportDirector">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportManager.</code><code class="descname">FrozenImportDirector</code><a class="headerlink" href="#Cheetah.ImportManager.FrozenImportDirector" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ImportManager.ImportDirector" title="Cheetah.ImportManager.ImportDirector"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ImportManager.ImportDirector</span></code></a></p>
-<p>Directs imports of frozen modules</p>
-<dl class="method">
-<dt id="Cheetah.ImportManager.FrozenImportDirector.getmod">
-<code class="descname">getmod</code><span class="sig-paren">(</span><em>nm</em>, <em>isFrozen=&lt;built-in function is_frozen&gt;</em>, <em>loadMod=&lt;built-in function load_module&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.FrozenImportDirector.getmod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ImportManager.ImportDirector">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportManager.</code><code class="descname">ImportDirector</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.ImportDirector" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ImportManager.Owner" title="Cheetah.ImportManager.Owner"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ImportManager.Owner</span></code></a></p>
-<p>ImportDirectors live on the metapath There’s one for builtins, one for
-frozen modules, and one for sys.path Windows gets one for modules gotten
-from the Registry Mac would have them for PY_RESOURCE modules etc. A
-generalization of Owner - their concept of ‘turf’ is broader</p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ImportManager.ImportManager">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportManager.</code><code class="descname">ImportManager</code><a class="headerlink" href="#Cheetah.ImportManager.ImportManager" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="Cheetah.ImportManager.ImportManager.doimport">
-<code class="descname">doimport</code><span class="sig-paren">(</span><em>nm</em>, <em>parentnm</em>, <em>fqname</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.ImportManager.doimport" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.ImportManager.ImportManager.importHook">
-<code class="descname">importHook</code><span class="sig-paren">(</span><em>name</em>, <em>globals=None</em>, <em>locals=None</em>, <em>fromlist=None</em>, <em>level=-1</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.ImportManager.importHook" title="Permalink to this definition">¶</a></dt>
-<dd><p>NOTE: Currently importHook will accept the keyword-argument “level”
-but it will <em>NOT</em> use it. Details about the “level” keyword
-argument can be found here:
-<a class="reference external" href="https://docs.python.org/2/library/functions.html#__import__">https://docs.python.org/2/library/functions.html#__import__</a></p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.ImportManager.ImportManager.install">
-<code class="descname">install</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.ImportManager.install" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.ImportManager.ImportManager.reloadHook">
-<code class="descname">reloadHook</code><span class="sig-paren">(</span><em>mod</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.ImportManager.reloadHook" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.ImportManager.ImportManager.setThreaded">
-<code class="descname">setThreaded</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.ImportManager.setThreaded" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ImportManager.Owner">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportManager.</code><code class="descname">Owner</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.Owner" title="Permalink to this definition">¶</a></dt>
-<dd><p>An Owner does imports from a particular piece of turf That is, there’s
-an Owner for each thing on sys.path There are owners for directories and
-.pyz files. There could be owners for zip files, or even URLs. A
-shadowpath (a dictionary mapping the names in sys.path to their owners) is
-used so that sys.path (or a package’s __path__) is still a bunch of
-strings.</p>
-<dl class="method">
-<dt id="Cheetah.ImportManager.Owner.getmod">
-<code class="descname">getmod</code><span class="sig-paren">(</span><em>nm</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.Owner.getmod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ImportManager.PathImportDirector">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportManager.</code><code class="descname">PathImportDirector</code><span class="sig-paren">(</span><em>pathlist=None</em>, <em>importers=None</em>, <em>ownertypes=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.PathImportDirector" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ImportManager.ImportDirector" title="Cheetah.ImportManager.ImportDirector"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ImportManager.ImportDirector</span></code></a></p>
-<p>Directs imports of modules stored on the filesystem.</p>
-<dl class="method">
-<dt id="Cheetah.ImportManager.PathImportDirector.getmod">
-<code class="descname">getmod</code><span class="sig-paren">(</span><em>nm</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.PathImportDirector.getmod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.ImportManager.RegistryImportDirector">
-<em class="property">class </em><code class="descclassname">Cheetah.ImportManager.</code><code class="descname">RegistryImportDirector</code><a class="headerlink" href="#Cheetah.ImportManager.RegistryImportDirector" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.ImportManager.ImportDirector" title="Cheetah.ImportManager.ImportDirector"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.ImportManager.ImportDirector</span></code></a></p>
-<p>Directs imports of modules stored in the Windows Registry</p>
-<dl class="method">
-<dt id="Cheetah.ImportManager.RegistryImportDirector.getmod">
-<code class="descname">getmod</code><span class="sig-paren">(</span><em>nm</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.RegistryImportDirector.getmod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.ImportManager.getDescr">
-<code class="descclassname">Cheetah.ImportManager.</code><code class="descname">getDescr</code><span class="sig-paren">(</span><em>fnm</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.getDescr" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.ImportManager.getPathExt">
-<code class="descclassname">Cheetah.ImportManager.</code><code class="descname">getPathExt</code><span class="sig-paren">(</span><em>fnm</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.getPathExt" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.ImportManager.nameSplit">
-<code class="descclassname">Cheetah.ImportManager.</code><code class="descname">nameSplit</code><span class="sig-paren">(</span><em>s</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.nameSplit" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.ImportManager.packageName">
-<code class="descclassname">Cheetah.ImportManager.</code><code class="descname">packageName</code><span class="sig-paren">(</span><em>s</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.packageName" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.ImportManager.pathIsDir">
-<code class="descclassname">Cheetah.ImportManager.</code><code class="descname">pathIsDir</code><span class="sig-paren">(</span><em>pathname</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.pathIsDir" title="Permalink to this definition">¶</a></dt>
-<dd><p>Local replacement for os.path.isdir().</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Macros.I18n.html b/docs/html/api/Cheetah.Macros.I18n.html
deleted file mode 100644
index 3cf9376..0000000
--- a/docs/html/api/Cheetah.Macros.I18n.html
+++ /dev/null
@@ -1,101 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Macros.I18n module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Macros.I18n.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Macros.I18n">
-<span id="cheetah-macros-i18n-module"></span><h1>Cheetah.Macros.I18n module<a class="headerlink" href="#module-Cheetah.Macros.I18n" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Macros.I18n.I18n">
-<em class="property">class </em><code class="descclassname">Cheetah.Macros.I18n.</code><code class="descname">I18n</code><span class="sig-paren">(</span><em>parser</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Macros.I18n.I18n" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Macros.html b/docs/html/api/Cheetah.Macros.html
deleted file mode 100644
index 1d03323..0000000
--- a/docs/html/api/Cheetah.Macros.html
+++ /dev/null
@@ -1,111 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Macros package &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.Macros package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Macros.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Macros">
-<span id="cheetah-macros-package"></span><h1>Cheetah.Macros package<a class="headerlink" href="#module-Cheetah.Macros" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Macros.I18n.html">Cheetah.Macros.I18n module</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.NameMapper.html b/docs/html/api/Cheetah.NameMapper.html
deleted file mode 100644
index 357ea1e..0000000
--- a/docs/html/api/Cheetah.NameMapper.html
+++ /dev/null
@@ -1,268 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.NameMapper module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.NameMapper module</a><ul>
-<li><a class="reference internal" href="#overview">Overview</a></li>
-<li><a class="reference internal" href="#details">Details</a><ul>
-<li><a class="reference internal" href="#dictionary-access-a">DICTIONARY ACCESS (a)</a></li>
-<li><a class="reference internal" href="#autocalling-b-d">AUTOCALLING (b,d)</a></li>
-<li><a class="reference internal" href="#leaving-out-self-c-d">LEAVING OUT ‘self’ (c,d)</a></li>
-<li><a class="reference internal" href="#namespace-cascading-d">NAMESPACE CASCADING (d)</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#implementation-details">Implementation details</a></li>
-<li><a class="reference internal" href="#performance-and-the-c-version">Performance and the C version</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.NameMapper.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.NameMapper">
-<span id="cheetah-namemapper-module"></span><h1>Cheetah.NameMapper module<a class="headerlink" href="#module-Cheetah.NameMapper" title="Permalink to this headline">¶</a></h1>
-<p>This module supports Cheetah’s optional NameMapper syntax.</p>
-<div class="section" id="overview">
-<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
-<p>NameMapper provides a simple syntax for accessing Python data structures,
-functions, and methods from Cheetah. It’s called NameMapper because it ‘maps’
-simple ‘names’ in Cheetah templates to possibly more complex syntax in Python.</p>
-<p>Its purpose is to make working with Cheetah easy for non-programmers.
-Specifically, non-programmers using Cheetah should NOT need to be taught (a)
-what the difference is between an object and a dictionary, (b) what functions
-and methods are, and (c) what ‘self’ is. A further aim (d) is to buffer the
-code in Cheetah templates from changes in the implementation of the Python data
-structures behind them.</p>
-<p>Consider this scenario:</p>
-<p>You are building a customer information system. The designers with you want to
-use information from your system on the client’s website –AND– they want to
-understand the display code and so they can maintian it themselves.</p>
-<p>You write a UI class with a ‘customers’ method that returns a dictionary of all
-the customer objects. Each customer object has an ‘address’ method
-that returns the a dictionary with information about the customer’s address.
-The designers want to be able to access that information.</p>
-<p>Using PSP, the display code for the website would look something like the
-following, assuming your servlet subclasses the class you created for managing
-customer information:</p>
-<blockquote>
-<div>&lt;%= self.customer()[ID].address()[‘city’] %&gt; (42 chars)</div></blockquote>
-<p>Using Cheetah’s NameMapper syntax it could be any of the following:</p>
-<blockquote>
-<div>$self.customers()[$ID].address()[‘city’] (39 chars)
-–OR–
-$customers()[$ID].address()[‘city’]
-–OR–
-$customers()[$ID].address().city
-–OR–
-$customers()[$ID].address.city
-–OR–
-$customers()[$ID].address.city
-–OR–
-$customers[$ID].address.city (27 chars)</div></blockquote>
-<p>Which of these would you prefer to explain to the designers, who have no
-programming experience? The last form is 15 characters shorter than the PSP
-and, conceptually, is far more accessible. With PHP or ASP, the code would be
-even messier than the PSP</p>
-<p>This is a rather extreme example and, of course,
-you could also just implement ‘$getCustomer($ID).city’
-and obey the Law of Demeter (search Google for more on that).
-But good object orientated design isn’t the point here.</p>
-</div>
-<div class="section" id="details">
-<h2>Details<a class="headerlink" href="#details" title="Permalink to this headline">¶</a></h2>
-<p>The parenthesized letters below correspond to the aims in the second paragraph.</p>
-<div class="section" id="dictionary-access-a">
-<h3>DICTIONARY ACCESS (a)<a class="headerlink" href="#dictionary-access-a" title="Permalink to this headline">¶</a></h3>
-<p>NameMapper allows access to items in a dictionary
-using the same dotted notation used to access object attributes in Python.
-This aspect of NameMapper is known as ‘Unified Dotted Notation’.</p>
-<p>For example, with Cheetah it is possible to write:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$customers()[&#39;kerr&#39;].address() --OR-- $customers().kerr.address()
-</pre></div>
-</div>
-<p>where the second form is in NameMapper syntax.</p>
-<p>This only works with dictionary keys that are also valid python identifiers:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">regex</span> <span class="o">=</span> <span class="s1">&#39;[a-zA-Z_][a-zA-Z_0-9]*&#39;</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="autocalling-b-d">
-<h3>AUTOCALLING (b,d)<a class="headerlink" href="#autocalling-b-d" title="Permalink to this headline">¶</a></h3>
-<p>NameMapper automatically detects functions and methods in Cheetah $vars
-and calls them if the parentheses have been left off.</p>
-<p>For example if ‘a’ is an object, ‘b’ is a method:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$a.b
-</pre></div>
-</div>
-<p>is equivalent to:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$a.b()
-</pre></div>
-</div>
-<p>If b returns a dictionary, then following variations are possible:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$a.b.c --OR-- $a.b().c --OR-- $a.b()[&#39;c&#39;]
-</pre></div>
-</div>
-<p>where ‘c’ is a key in the dictionary that a.b() returns.</p>
-<p>Further notes:</p>
-<ul class="simple">
-<li>NameMapper autocalls the function or method without any arguments. Thus
-autocalling can only be used with functions or methods that either have no
-arguments or have default values for all arguments.</li>
-<li>NameMapper only autocalls functions and methods.
-Classes and callable object instances will not be autocalled.</li>
-<li>Autocalling can be disabled using Cheetah’s ‘useAutocalling’ setting.</li>
-</ul>
-</div>
-<div class="section" id="leaving-out-self-c-d">
-<h3>LEAVING OUT ‘self’ (c,d)<a class="headerlink" href="#leaving-out-self-c-d" title="Permalink to this headline">¶</a></h3>
-<p>NameMapper makes it possible to access the attributes of a servlet in Cheetah
-without needing to include ‘self’ in the variable names. See the NAMESPACE
-CASCADING section below for details.</p>
-</div>
-<div class="section" id="namespace-cascading-d">
-<h3>NAMESPACE CASCADING (d)<a class="headerlink" href="#namespace-cascading-d" title="Permalink to this headline">¶</a></h3>
-<p>…</p>
-</div>
-</div>
-<div class="section" id="implementation-details">
-<h2>Implementation details<a class="headerlink" href="#implementation-details" title="Permalink to this headline">¶</a></h2>
-<ul class="simple">
-<li>NameMapper’s search order is dictionary keys then object attributes</li>
-<li>NameMapper.NotFound is raised if a value can’t be found for a name.</li>
-</ul>
-</div>
-<div class="section" id="performance-and-the-c-version">
-<h2>Performance and the C version<a class="headerlink" href="#performance-and-the-c-version" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah comes with both a C version and a Python version of NameMapper. The C
-version is significantly faster and the exception tracebacks are much easier to
-read. It’s still slower than standard Python syntax, but you won’t notice the
-difference in realistic usage scenarios.</p>
-<p>Cheetah uses the optimized C version (_namemapper.c) if it has
-been compiled or falls back to the Python version if not.</p>
-<dl class="exception">
-<dt id="Cheetah.NameMapper.NotFound">
-<em class="property">exception </em><code class="descclassname">Cheetah.NameMapper.</code><code class="descname">NotFound</code><a class="headerlink" href="#Cheetah.NameMapper.NotFound" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.LookupError</span></code></p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.NameMapper.hasKey">
-<code class="descclassname">Cheetah.NameMapper.</code><code class="descname">hasKey</code><span class="sig-paren">(</span><em>obj</em>, <em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.NameMapper.hasKey" title="Permalink to this definition">¶</a></dt>
-<dd><p>Determine if ‘obj’ has ‘key’</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.NameMapper.valueForKey">
-<code class="descclassname">Cheetah.NameMapper.</code><code class="descname">valueForKey</code><span class="sig-paren">(</span><em>obj</em>, <em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.NameMapper.valueForKey" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.NameMapper.valueForName">
-<code class="descclassname">Cheetah.NameMapper.</code><code class="descname">valueForName</code><span class="sig-paren">(</span><em>obj</em>, <em>name</em>, <em>executeCallables=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.NameMapper.valueForName" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.NameMapper.valueFromSearchList">
-<code class="descclassname">Cheetah.NameMapper.</code><code class="descname">valueFromSearchList</code><span class="sig-paren">(</span><em>searchList</em>, <em>name</em>, <em>executeCallables=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.NameMapper.valueFromSearchList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.NameMapper.valueFromFrameOrSearchList">
-<code class="descclassname">Cheetah.NameMapper.</code><code class="descname">valueFromFrameOrSearchList</code><span class="sig-paren">(</span><em>searchList</em>, <em>name</em>, <em>executeCallables=False</em>, <em>frame=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.NameMapper.valueFromFrameOrSearchList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.NameMapper.valueFromFrame">
-<code class="descclassname">Cheetah.NameMapper.</code><code class="descname">valueFromFrame</code><span class="sig-paren">(</span><em>name</em>, <em>executeCallables=False</em>, <em>frame=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.NameMapper.valueFromFrame" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Parser.html b/docs/html/api/Cheetah.Parser.html
deleted file mode 100644
index d730e09..0000000
--- a/docs/html/api/Cheetah.Parser.html
+++ /dev/null
@@ -1,218 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Parser module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Parser.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Parser">
-<span id="cheetah-parser-module"></span><h1>Cheetah.Parser module<a class="headerlink" href="#module-Cheetah.Parser" title="Permalink to this headline">¶</a></h1>
-<p>Parser classes for Cheetah’s Compiler</p>
-<dl class="docutils">
-<dt>Classes:</dt>
-<dd>ParseError( Exception )
-_LowLevelParser( Cheetah.SourceReader.SourceReader ), basically a lexer
-_HighLevelParser( _LowLevelParser )
-Parser === _HighLevelParser (an alias)</dd>
-</dl>
-<dl class="class">
-<dt id="Cheetah.Parser.ArgList">
-<em class="property">class </em><code class="descclassname">Cheetah.Parser.</code><code class="descname">ArgList</code><a class="headerlink" href="#Cheetah.Parser.ArgList" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>Used by _LowLevelParser.getArgList()</p>
-<dl class="method">
-<dt id="Cheetah.Parser.ArgList.add_argument">
-<code class="descname">add_argument</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ArgList.add_argument" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Parser.ArgList.add_default">
-<code class="descname">add_default</code><span class="sig-paren">(</span><em>token</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ArgList.add_default" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Parser.ArgList.merge">
-<code class="descname">merge</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ArgList.merge" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Parser.ArgList.next">
-<code class="descname">next</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ArgList.next" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Parser.CheetahVariable">
-<em class="property">class </em><code class="descclassname">Cheetah.Parser.</code><code class="descname">CheetahVariable</code><span class="sig-paren">(</span><em>nameChunks</em>, <em>useNameMapper=True</em>, <em>cacheToken=None</em>, <em>rawSource=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.CheetahVariable" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Parser.ForbiddenDirective">
-<em class="property">exception </em><code class="descclassname">Cheetah.Parser.</code><code class="descname">ForbiddenDirective</code><span class="sig-paren">(</span><em>stream</em>, <em>msg='Invalid Syntax'</em>, <em>extMsg=''</em>, <em>lineno=None</em>, <em>col=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ForbiddenDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Parser.ForbiddenSyntax" title="Cheetah.Parser.ForbiddenSyntax"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Parser.ForbiddenSyntax</span></code></a></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Parser.ForbiddenExpression">
-<em class="property">exception </em><code class="descclassname">Cheetah.Parser.</code><code class="descname">ForbiddenExpression</code><span class="sig-paren">(</span><em>stream</em>, <em>msg='Invalid Syntax'</em>, <em>extMsg=''</em>, <em>lineno=None</em>, <em>col=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ForbiddenExpression" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Parser.ForbiddenSyntax" title="Cheetah.Parser.ForbiddenSyntax"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Parser.ForbiddenSyntax</span></code></a></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Parser.ForbiddenSyntax">
-<em class="property">exception </em><code class="descclassname">Cheetah.Parser.</code><code class="descname">ForbiddenSyntax</code><span class="sig-paren">(</span><em>stream</em>, <em>msg='Invalid Syntax'</em>, <em>extMsg=''</em>, <em>lineno=None</em>, <em>col=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ForbiddenSyntax" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Parser.ParseError" title="Cheetah.Parser.ParseError"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Parser.ParseError</span></code></a></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Parser.ParseError">
-<em class="property">exception </em><code class="descclassname">Cheetah.Parser.</code><code class="descname">ParseError</code><span class="sig-paren">(</span><em>stream</em>, <em>msg='Invalid Syntax'</em>, <em>extMsg=''</em>, <em>lineno=None</em>, <em>col=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ParseError" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.ValueError</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Parser.ParseError.report">
-<code class="descname">report</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.ParseError.report" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Parser.Parser">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">Parser</code><a class="headerlink" href="#Cheetah.Parser.Parser" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <code class="xref py py-class docutils literal"><span class="pre">_HighLevelParser</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Parser.Placeholder">
-<em class="property">class </em><code class="descclassname">Cheetah.Parser.</code><code class="descname">Placeholder</code><span class="sig-paren">(</span><em>nameChunks</em>, <em>useNameMapper=True</em>, <em>cacheToken=None</em>, <em>rawSource=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.Placeholder" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Parser.CheetahVariable" title="Cheetah.Parser.CheetahVariable"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Parser.CheetahVariable</span></code></a></p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Parser.any">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">any</code><span class="sig-paren">(</span><em>*choices</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.any" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Parser.cachedRegex">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">cachedRegex</code><span class="sig-paren">(</span><em>pattern</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.cachedRegex" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Parser.escapeRegexChars">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">escapeRegexChars</code><span class="sig-paren">(</span><em>txt</em>, <em>escapeRE=&lt;_sre.SRE_Pattern object&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.escapeRegexChars" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return a txt with all special regular expressions chars escaped.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Parser.group">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">group</code><span class="sig-paren">(</span><em>*choices</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.group" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Parser.makeTripleQuoteRe">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">makeTripleQuoteRe</code><span class="sig-paren">(</span><em>start</em>, <em>end</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.makeTripleQuoteRe" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Parser.maybe">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">maybe</code><span class="sig-paren">(</span><em>*choices</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.maybe" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Parser.namedGroup">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">namedGroup</code><span class="sig-paren">(</span><em>name</em>, <em>*choices</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.namedGroup" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Parser.nongroup">
-<code class="descclassname">Cheetah.Parser.</code><code class="descname">nongroup</code><span class="sig-paren">(</span><em>*choices</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Parser.nongroup" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Servlet.html b/docs/html/api/Cheetah.Servlet.html
deleted file mode 100644
index f612280..0000000
--- a/docs/html/api/Cheetah.Servlet.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Servlet module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Servlet.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Servlet">
-<span id="cheetah-servlet-module"></span><h1>Cheetah.Servlet module<a class="headerlink" href="#module-Cheetah.Servlet" title="Permalink to this headline">¶</a></h1>
-<p>Provides an abstract Servlet baseclass for Cheetah’s Template class</p>
-<dl class="class">
-<dt id="Cheetah.Servlet.Servlet">
-<em class="property">class </em><code class="descclassname">Cheetah.Servlet.</code><code class="descname">Servlet</code><a class="headerlink" href="#Cheetah.Servlet.Servlet" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>This class is an abstract baseclass for Cheetah.Template.Template.</p>
-<dl class="attribute">
-<dt id="Cheetah.Servlet.Servlet.application">
-<code class="descname">application</code><em class="property"> = None</em><a class="headerlink" href="#Cheetah.Servlet.Servlet.application" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Servlet.Servlet.request">
-<code class="descname">request</code><em class="property"> = None</em><a class="headerlink" href="#Cheetah.Servlet.Servlet.request" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Servlet.Servlet.respond">
-<code class="descname">respond</code><span class="sig-paren">(</span><em>trans=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Servlet.Servlet.respond" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Servlet.Servlet.serverSidePath">
-<code class="descname">serverSidePath</code><span class="sig-paren">(</span><em>path=None</em>, <em>normpath=&lt;function normpath&gt;</em>, <em>abspath=&lt;function abspath&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Servlet.Servlet.serverSidePath" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Servlet.Servlet.session">
-<code class="descname">session</code><em class="property"> = None</em><a class="headerlink" href="#Cheetah.Servlet.Servlet.session" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Servlet.Servlet.shutdown">
-<code class="descname">shutdown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Servlet.Servlet.shutdown" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Servlet.Servlet.sleep">
-<code class="descname">sleep</code><span class="sig-paren">(</span><em>transaction</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Servlet.Servlet.sleep" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Servlet.Servlet.transaction">
-<code class="descname">transaction</code><em class="property"> = None</em><a class="headerlink" href="#Cheetah.Servlet.Servlet.transaction" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.SettingsManager.html b/docs/html/api/Cheetah.SettingsManager.html
deleted file mode 100644
index 4eae087..0000000
--- a/docs/html/api/Cheetah.SettingsManager.html
+++ /dev/null
@@ -1,212 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.SettingsManager module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.SettingsManager.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.SettingsManager">
-<span id="cheetah-settingsmanager-module"></span><h1>Cheetah.SettingsManager module<a class="headerlink" href="#module-Cheetah.SettingsManager" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.SettingsManager.ConfigParserCaseSensitive">
-<em class="property">class </em><code class="descclassname">Cheetah.SettingsManager.</code><code class="descname">ConfigParserCaseSensitive</code><span class="sig-paren">(</span><em>defaults=None</em>, <em>dict_type=&lt;class 'collections.OrderedDict'&gt;</em>, <em>allow_no_value=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.ConfigParserCaseSensitive" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">ConfigParser.ConfigParser</span></code></p>
-<p>A case sensitive version of the standard Python ConfigParser.</p>
-<dl class="method">
-<dt id="Cheetah.SettingsManager.ConfigParserCaseSensitive.optionxform">
-<code class="descname">optionxform</code><span class="sig-paren">(</span><em>optionstr</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.ConfigParserCaseSensitive.optionxform" title="Permalink to this definition">¶</a></dt>
-<dd><p>Don’t change the case as is done in the default implemenation.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.SettingsManager.Error">
-<em class="property">exception </em><code class="descclassname">Cheetah.SettingsManager.</code><code class="descname">Error</code><a class="headerlink" href="#Cheetah.SettingsManager.Error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.SettingsManager.NoDefault">
-<em class="property">class </em><code class="descclassname">Cheetah.SettingsManager.</code><code class="descname">NoDefault</code><a class="headerlink" href="#Cheetah.SettingsManager.NoDefault" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.SettingsManager.SettingsManager">
-<em class="property">class </em><code class="descclassname">Cheetah.SettingsManager.</code><code class="descname">SettingsManager</code><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">Cheetah.SettingsManager._SettingsCollector</span></code></p>
-<p>A mixin class that provides facilities for managing application settings.</p>
-<p>SettingsManager is designed to work well with nested settings dictionaries
-of any depth.</p>
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.copySettings">
-<code class="descname">copySettings</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.copySettings" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns a shallow copy of the settings dictionary</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.deepcopySettings">
-<code class="descname">deepcopySettings</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.deepcopySettings" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns a deep copy of the settings dictionary</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.hasSetting">
-<code class="descname">hasSetting</code><span class="sig-paren">(</span><em>key</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.hasSetting" title="Permalink to this definition">¶</a></dt>
-<dd><p>True/False</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.setSetting">
-<code class="descname">setSetting</code><span class="sig-paren">(</span><em>name</em>, <em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.setSetting" title="Permalink to this definition">¶</a></dt>
-<dd><p>Set a setting in self._settings.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.setting">
-<code class="descname">setting</code><span class="sig-paren">(</span><em>name</em>, <em>default=&lt;class 'Cheetah.SettingsManager.NoDefault'&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.setting" title="Permalink to this definition">¶</a></dt>
-<dd><p>Get a setting from self._settings, with or without a default value</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.settings">
-<code class="descname">settings</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.settings" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return a reference to the settings dictionary</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.updateSettings">
-<code class="descname">updateSettings</code><span class="sig-paren">(</span><em>newSettings</em>, <em>merge=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.updateSettings" title="Permalink to this definition">¶</a></dt>
-<dd><p>Update the settings with a selective merge or a complete overwrite</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.updateSettingsFromConfigFileObj">
-<code class="descname">updateSettingsFromConfigFileObj</code><span class="sig-paren">(</span><em>inFile</em>, <em>convert=True</em>, <em>merge=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.updateSettingsFromConfigFileObj" title="Permalink to this definition">¶</a></dt>
-<dd><p>See the docstring for .updateSettingsFromConfigFile()</p>
-<p>The caller of this method is responsible for closing the inFile file
-object.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.updateSettingsFromConfigStr">
-<code class="descname">updateSettingsFromConfigStr</code><span class="sig-paren">(</span><em>configStr</em>, <em>convert=True</em>, <em>merge=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.updateSettingsFromConfigStr" title="Permalink to this definition">¶</a></dt>
-<dd><p>See the docstring for .updateSettingsFromConfigFile()</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SettingsManager.SettingsManager.updateSettingsFromPySrcStr">
-<code class="descname">updateSettingsFromPySrcStr</code><span class="sig-paren">(</span><em>theString</em>, <em>merge=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.updateSettingsFromPySrcStr" title="Permalink to this definition">¶</a></dt>
-<dd><p>Update the settings from a code in a Python src string.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.SettingsManager.convStringToNum">
-<code class="descclassname">Cheetah.SettingsManager.</code><code class="descname">convStringToNum</code><span class="sig-paren">(</span><em>theString</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.convStringToNum" title="Permalink to this definition">¶</a></dt>
-<dd><p>Convert a string representation of a Python number to the Python version</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.SettingsManager.mergeNestedDictionaries">
-<code class="descclassname">Cheetah.SettingsManager.</code><code class="descname">mergeNestedDictionaries</code><span class="sig-paren">(</span><em>dict1</em>, <em>dict2</em>, <em>copy=False</em>, <em>deepcopy=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.mergeNestedDictionaries" title="Permalink to this definition">¶</a></dt>
-<dd><p>Recursively merge the values of dict2 into dict1.</p>
-<p>This little function is very handy for selectively overriding settings in a
-settings dictionary that has a nested structure.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.SettingsManager.stringIsNumber">
-<code class="descclassname">Cheetah.SettingsManager.</code><code class="descname">stringIsNumber</code><span class="sig-paren">(</span><em>S</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.stringIsNumber" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return True if theString represents a Python number, False otherwise.
-This also works for complex numbers and numbers with +/- in front.</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.SourceReader.html b/docs/html/api/Cheetah.SourceReader.html
deleted file mode 100644
index dfb5ee2..0000000
--- a/docs/html/api/Cheetah.SourceReader.html
+++ /dev/null
@@ -1,301 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.SourceReader module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.SourceReader.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.SourceReader">
-<span id="cheetah-sourcereader-module"></span><h1>Cheetah.SourceReader module<a class="headerlink" href="#module-Cheetah.SourceReader" title="Permalink to this headline">¶</a></h1>
-<p>SourceReader class for Cheetah’s Parser and CodeGenerator</p>
-<dl class="function">
-<dt id="Cheetah.SourceReader.ENCODINGsearch">
-<code class="descclassname">Cheetah.SourceReader.</code><code class="descname">ENCODINGsearch</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.ENCODINGsearch" title="Permalink to this definition">¶</a></dt>
-<dd><p>search(string[, pos[, endpos]]) –&gt; match object or None.
-Scan through string looking for a match, and return a corresponding
-match object instance. Return None if no position in the string matches.</p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.SourceReader.Error">
-<em class="property">exception </em><code class="descclassname">Cheetah.SourceReader.</code><code class="descname">Error</code><a class="headerlink" href="#Cheetah.SourceReader.Error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.SourceReader.SourceReader">
-<em class="property">class </em><code class="descclassname">Cheetah.SourceReader.</code><code class="descname">SourceReader</code><span class="sig-paren">(</span><em>src</em>, <em>filename=None</em>, <em>breakPoint=None</em>, <em>encoding=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.advance">
-<code class="descname">advance</code><span class="sig-paren">(</span><em>offset=1</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.advance" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.atEnd">
-<code class="descname">atEnd</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.atEnd" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.atStart">
-<code class="descname">atStart</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.atStart" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.breakPoint">
-<code class="descname">breakPoint</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.breakPoint" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.checkPos">
-<code class="descname">checkPos</code><span class="sig-paren">(</span><em>pos</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.checkPos" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.filename">
-<code class="descname">filename</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.filename" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.find">
-<code class="descname">find</code><span class="sig-paren">(</span><em>it</em>, <em>pos=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.find" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.findBOL">
-<code class="descname">findBOL</code><span class="sig-paren">(</span><em>pos=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.findBOL" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.findEOL">
-<code class="descname">findEOL</code><span class="sig-paren">(</span><em>pos=None</em>, <em>gobble=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.findEOL" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.getLine">
-<code class="descname">getLine</code><span class="sig-paren">(</span><em>pos</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.getLine" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.getNonWhiteSpace">
-<code class="descname">getNonWhiteSpace</code><span class="sig-paren">(</span><em>WSchars=' \x0c\t\n\r'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.getNonWhiteSpace" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.getRowCol">
-<code class="descname">getRowCol</code><span class="sig-paren">(</span><em>pos=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.getRowCol" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.getRowColLine">
-<code class="descname">getRowColLine</code><span class="sig-paren">(</span><em>pos=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.getRowColLine" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.getWhiteSpace">
-<code class="descname">getWhiteSpace</code><span class="sig-paren">(</span><em>max=None</em>, <em>WSchars=' \x0c\t'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.getWhiteSpace" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.getc">
-<code class="descname">getc</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.getc" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.gotoBookmark">
-<code class="descname">gotoBookmark</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.gotoBookmark" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.hasBookmark">
-<code class="descname">hasBookmark</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.hasBookmark" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.isLineClearToPos">
-<code class="descname">isLineClearToPos</code><span class="sig-paren">(</span><em>pos=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.isLineClearToPos" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.lineNum">
-<code class="descname">lineNum</code><span class="sig-paren">(</span><em>pos=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.lineNum" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.matchNonWhiteSpace">
-<code class="descname">matchNonWhiteSpace</code><span class="sig-paren">(</span><em>WSchars=' \x0c\t\n\r'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.matchNonWhiteSpace" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.matchWhiteSpace">
-<code class="descname">matchWhiteSpace</code><span class="sig-paren">(</span><em>WSchars=' \x0c\t'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.matchWhiteSpace" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.matches">
-<code class="descname">matches</code><span class="sig-paren">(</span><em>strOrRE</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.matches" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.peek">
-<code class="descname">peek</code><span class="sig-paren">(</span><em>offset=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.peek" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.pos">
-<code class="descname">pos</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.pos" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.read">
-<code class="descname">read</code><span class="sig-paren">(</span><em>offset</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.read" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.readTo">
-<code class="descname">readTo</code><span class="sig-paren">(</span><em>to</em>, <em>start=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.readTo" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.readToEOL">
-<code class="descname">readToEOL</code><span class="sig-paren">(</span><em>start=None</em>, <em>gobble=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.readToEOL" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.rev">
-<code class="descname">rev</code><span class="sig-paren">(</span><em>offset=1</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.rev" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.rfind">
-<code class="descname">rfind</code><span class="sig-paren">(</span><em>it</em>, <em>pos</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.rfind" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.setBookmark">
-<code class="descname">setBookmark</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.setBookmark" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.setBreakPoint">
-<code class="descname">setBreakPoint</code><span class="sig-paren">(</span><em>pos</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.setBreakPoint" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.setPos">
-<code class="descname">setPos</code><span class="sig-paren">(</span><em>pos</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.setPos" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.splitlines">
-<code class="descname">splitlines</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.splitlines" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.src">
-<code class="descname">src</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.src" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.startswith">
-<code class="descname">startswith</code><span class="sig-paren">(</span><em>it</em>, <em>pos=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.startswith" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.ungetc">
-<code class="descname">ungetc</code><span class="sig-paren">(</span><em>c=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.ungetc" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.SourceReader.SourceReader.validPos">
-<code class="descname">validPos</code><span class="sig-paren">(</span><em>pos</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SourceReader.SourceReader.validPos" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Template.html b/docs/html/api/Cheetah.Template.html
deleted file mode 100644
index 30f894b..0000000
--- a/docs/html/api/Cheetah.Template.html
+++ /dev/null
@@ -1,816 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Template module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Template.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Template">
-<span id="cheetah-template-module"></span><h1>Cheetah.Template module<a class="headerlink" href="#module-Cheetah.Template" title="Permalink to this headline">¶</a></h1>
-<p>Provides the core API for Cheetah</p>
-<p>See the docstring in the Template class and the Users’ Guide
-for more information.</p>
-<dl class="class">
-<dt id="Cheetah.Template.CompileCacheItem">
-<em class="property">class </em><code class="descclassname">Cheetah.Template.</code><code class="descname">CompileCacheItem</code><a class="headerlink" href="#Cheetah.Template.CompileCacheItem" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Template.Error">
-<em class="property">exception </em><code class="descclassname">Cheetah.Template.</code><code class="descname">Error</code><a class="headerlink" href="#Cheetah.Template.Error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Template.PreprocessError">
-<em class="property">exception </em><code class="descclassname">Cheetah.Template.</code><code class="descname">PreprocessError</code><a class="headerlink" href="#Cheetah.Template.PreprocessError" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Template.Error" title="Cheetah.Template.Error"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Template.Error</span></code></a></p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Template.T">
-<code class="descclassname">Cheetah.Template.</code><code class="descname">T</code><a class="headerlink" href="#Cheetah.Template.T" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Template.Template" title="Cheetah.Template.Template"><code class="xref py py-class docutils literal"><span class="pre">Template</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Template.Template">
-<em class="property">class </em><code class="descclassname">Cheetah.Template.</code><code class="descname">Template</code><span class="sig-paren">(</span><em>source=None</em>, <em>namespaces=None</em>, <em>searchList=None</em>, <em>file=None</em>, <em>filter='RawOrEncodedUnicode'</em>, <em>filtersLib=&lt;module 'Cheetah.Filters' from '/home/phd/current/projects/cheetah3/cheetah3/Cheetah/Filters.py'&gt;</em>, <em>errorCatcher=None</em>, <em>compilerSettings=Unspecified</em>, <em>_globalSetVars=None</em>, <em>_preBuiltSearchList=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="Cheetah.Servlet.html#Cheetah.Servlet.Servlet" title="Cheetah.Servlet.Servlet"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Servlet.Servlet</span></code></a></p>
-<p>This class provides a) methods used by templates at runtime and b)
-methods for compiling Cheetah source code into template classes.</p>
-<p>This documentation assumes you already know Python and the basics of object
-oriented programming. If you don’t know Python, see the sections of the
-Cheetah Users’ Guide for non-programmers. It also assumes you have read
-about Cheetah’s syntax in the Users’ Guide.</p>
-<p>The following explains how to use Cheetah from within Python programs or
-via the interpreter. If you statically compile your templates on the
-command line using the ‘cheetah’ script, this is not relevant to you.
-Statically compiled Cheetah template modules/classes (e.g. myTemplate.py:
-MyTemplateClasss) are just like any other Python module or class. Also
-note, most Python web frameworks (Webware, Aquarium, mod_python,
-Turbogears, CherryPy, Quixote, etc.) provide plugins that handle Cheetah
-compilation for you.</p>
-<p>There are several possible usage patterns:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">1</span><span class="p">)</span> <span class="n">tclass</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
- <span class="n">t1</span> <span class="o">=</span> <span class="n">tclass</span><span class="p">()</span> <span class="c1"># or tclass(namespaces=[namespace,...])</span>
- <span class="n">t2</span> <span class="o">=</span> <span class="n">tclass</span><span class="p">()</span> <span class="c1"># or tclass(namespaces=[namespace2,...])</span>
- <span class="n">outputStr</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">t1</span><span class="p">)</span> <span class="c1"># or outputStr = t1.aMethodYouDefined()</span>
-
- <span class="n">Template</span><span class="o">.</span><span class="n">compile</span> <span class="n">provides</span> <span class="n">a</span> <span class="n">rich</span> <span class="ow">and</span> <span class="n">very</span> <span class="n">flexible</span> <span class="n">API</span> <span class="n">via</span> <span class="n">its</span>
- <span class="n">optional</span> <span class="n">arguments</span> <span class="n">so</span> <span class="n">there</span> <span class="n">are</span> <span class="n">many</span> <span class="n">possible</span> <span class="n">variations</span> <span class="n">of</span> <span class="n">this</span>
- <span class="n">pattern</span><span class="o">.</span> <span class="n">One</span> <span class="n">example</span> <span class="ow">is</span><span class="p">:</span>
- <span class="n">tclass</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;hello $name from $caller&#39;</span><span class="p">,</span>
- <span class="n">baseclass</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
- <span class="nb">print</span><span class="p">(</span><span class="n">tclass</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;world&#39;</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="s1">&#39;me&#39;</span><span class="p">))</span>
- <span class="n">See</span> <span class="n">the</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">()</span> <span class="n">docstring</span> <span class="k">for</span> <span class="n">more</span> <span class="n">details</span><span class="o">.</span>
-
-<span class="mi">2</span><span class="p">)</span> <span class="n">tmplInstance</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
- <span class="c1"># or Template(src, namespaces=[namespace,...])</span>
- <span class="n">outputStr</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">tmplInstance</span><span class="p">)</span>
- <span class="c1"># or outputStr = tmplInstance.aMethodYouDefined(...args...)</span>
-</pre></div>
-</div>
-<p>Notes on the usage patterns:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">usage</span> <span class="n">pattern</span> <span class="mi">1</span><span class="p">)</span>
- <span class="n">This</span> <span class="ow">is</span> <span class="n">the</span> <span class="n">most</span> <span class="n">flexible</span><span class="p">,</span> <span class="n">but</span> <span class="n">it</span> <span class="ow">is</span> <span class="n">slightly</span> <span class="n">more</span> <span class="n">verbose</span> <span class="n">unless</span> <span class="n">you</span>
- <span class="n">write</span> <span class="n">a</span> <span class="n">wrapper</span> <span class="n">function</span> <span class="n">to</span> <span class="n">hide</span> <span class="n">the</span> <span class="n">plumbing</span><span class="o">.</span> <span class="n">Under</span> <span class="n">the</span> <span class="n">hood</span><span class="p">,</span> <span class="nb">all</span>
- <span class="n">other</span> <span class="n">usage</span> <span class="n">patterns</span> <span class="n">are</span> <span class="n">based</span> <span class="n">on</span> <span class="n">this</span> <span class="n">approach</span><span class="o">.</span> <span class="n">Templates</span> <span class="n">compiled</span>
- <span class="n">this</span> <span class="n">way</span> <span class="n">can</span> <span class="c1">#extend (subclass) any Python baseclass: old-style or</span>
- <span class="n">new</span><span class="o">-</span><span class="n">style</span> <span class="p">(</span><span class="n">based</span> <span class="n">on</span> <span class="nb">object</span> <span class="ow">or</span> <span class="n">a</span> <span class="n">builtin</span> <span class="nb">type</span><span class="p">)</span><span class="o">.</span>
-
-<span class="n">usage</span> <span class="n">pattern</span> <span class="mi">2</span><span class="p">)</span>
- <span class="n">This</span> <span class="n">was</span> <span class="n">Cheetah</span><span class="s1">&#39;s original usage pattern. It returns an instance,</span>
- <span class="n">but</span> <span class="n">you</span> <span class="n">can</span> <span class="n">still</span> <span class="n">access</span> <span class="n">the</span> <span class="n">generated</span> <span class="k">class</span> <span class="nc">via</span>
- <span class="n">tmplInstance</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span> <span class="n">If</span> <span class="n">you</span> <span class="n">want</span> <span class="n">to</span> <span class="n">use</span> <span class="n">several</span> <span class="n">different</span>
- <span class="n">namespace</span> <span class="s1">&#39;searchLists&#39;</span> <span class="k">with</span> <span class="n">a</span> <span class="n">single</span> <span class="n">template</span> <span class="n">source</span> <span class="n">definition</span><span class="p">,</span>
- <span class="n">you</span><span class="s1">&#39;re better off with Template.compile (1).</span>
-
- <span class="n">Limitations</span> <span class="p">(</span><span class="n">use</span> <span class="n">pattern</span> <span class="mi">1</span> <span class="n">instead</span><span class="p">)::</span>
-
- <span class="o">-</span> <span class="n">Templates</span> <span class="n">compiled</span> <span class="n">this</span> <span class="n">way</span> <span class="n">can</span> <span class="n">only</span> <span class="c1">#extend subclasses of the</span>
- <span class="n">new</span><span class="o">-</span><span class="n">style</span> <span class="s1">&#39;object&#39;</span> <span class="n">baseclass</span><span class="o">.</span> <span class="n">Cheetah</span><span class="o">.</span><span class="n">Template</span> <span class="ow">is</span> <span class="n">a</span> <span class="n">subclass</span> <span class="n">of</span>
- <span class="s1">&#39;object&#39;</span><span class="o">.</span> <span class="n">You</span> <span class="n">also</span> <span class="n">can</span> <span class="ow">not</span> <span class="c1">#extend dict, list, or other builtin</span>
- <span class="n">types</span><span class="o">.</span>
- <span class="o">-</span> <span class="n">If</span> <span class="n">your</span> <span class="n">template</span> <span class="n">baseclass</span><span class="s1">&#39; __init__ constructor expects args</span>
- <span class="n">there</span> <span class="ow">is</span> <span class="n">currently</span> <span class="n">no</span> <span class="n">way</span> <span class="n">to</span> <span class="k">pass</span> <span class="n">them</span> <span class="ow">in</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>If you need to subclass a dynamically compiled Cheetah class, do something
-like this:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span>
-<span class="n">T1</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;$meth1 #def meth1: this is meth1 in T1&#39;</span><span class="p">)</span>
-<span class="n">T2</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
- <span class="s1">&#39;#implements meth1</span><span class="se">\n</span><span class="s1">this is meth1 redefined in T2&#39;</span><span class="p">,</span> <span class="n">baseclass</span><span class="o">=</span><span class="n">T1</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="n">T1</span><span class="p">,</span> <span class="n">T1</span><span class="p">())</span>
-<span class="nb">print</span><span class="p">(</span><span class="n">T2</span><span class="p">,</span> <span class="n">T2</span><span class="p">())</span>
-</pre></div>
-</div>
-<p>Note about class and instance attribute names:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Attributes</span> <span class="n">used</span> <span class="n">by</span> <span class="n">Cheetah</span> <span class="n">have</span> <span class="n">a</span> <span class="n">special</span> <span class="n">prefix</span> <span class="n">to</span> <span class="n">avoid</span> <span class="n">confusion</span> <span class="k">with</span>
-<span class="n">the</span> <span class="n">attributes</span> <span class="n">of</span> <span class="n">the</span> <span class="n">templates</span> <span class="n">themselves</span> <span class="ow">or</span> <span class="n">those</span> <span class="n">of</span> <span class="n">template</span>
-<span class="n">baseclasses</span><span class="o">.</span>
-
-<span class="n">Class</span> <span class="n">attributes</span> <span class="n">which</span> <span class="n">are</span> <span class="n">used</span> <span class="ow">in</span> <span class="k">class</span> <span class="nc">methods</span> <span class="n">look</span> <span class="n">like</span> <span class="n">this</span><span class="p">::</span>
-
- <span class="n">klass</span><span class="o">.</span><span class="n">_CHEETAH_useCompilationCache</span> <span class="p">(</span><span class="n">_CHEETAH_xxx</span><span class="p">)</span>
-
-<span class="n">Instance</span> <span class="n">attributes</span> <span class="n">look</span> <span class="n">like</span> <span class="n">this</span><span class="p">::</span>
-
- <span class="n">klass</span><span class="o">.</span><span class="n">_CHEETAH__globalSetVars</span> <span class="p">(</span><span class="n">_CHEETAH__xxx</span> <span class="k">with</span> <span class="mi">2</span> <span class="n">underscores</span><span class="p">)</span>
-</pre></div>
-</div>
-<dl class="exception">
-<dt id="Cheetah.Template.Template.NonNumericInputError">
-<em class="property">exception </em><code class="descname">NonNumericInputError</code><a class="headerlink" href="#Cheetah.Template.Template.NonNumericInputError" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.ValueError</span></code></p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Template.Template.Reserved_SearchList">
-<code class="descname">Reserved_SearchList</code><em class="property"> = set(['respond', '_CHEETAH_preprocessors', '__module__', '__format__', '_CHEETAH_defaultMainMethodNameForTemplates', '_CHEETAH_keepRefToGeneratedCode', 'serverSidePath', 'searchList', '__str__', '__getattribute__', '_getTemplateAPIClassForIncludeDirectiveCompilation', 'transaction', '_CHEETAH_defaultModuleNameForTemplates', '_CHEETAH_cacheCompilationResults', 'application', 'sleep', 'getCacheRegions', 'shutdown', 'hasVar', '__dict__', '__sizeof__', '__weakref__', '_createCacheRegion', '_CHEETAH_generatedModuleCode', 'runAsMainProgram', 'getCacheRegion', '__setattr__', '__reduce_ex__', '__new__', '__delattr__', '_normalizePreprocessorSettings', '_CHEETAH_compilerInstance', 'errorCatcher', '_CHEETAH_requiredCheetahClassMethods', '__class__', '_CHEETAH_useCompilationCache', '_updateSettingsWithPreprocessTokens', '_CHEETAH_cacheStoreIdPrefix', 'session', '_CHEETAH_defaultMainMethodName', '_normalizePreprocessorArg', 'getVar', '_compile', '_CHEETAH_cacheDirForModuleFiles', '__doc__', '_handleCheetahInclude', '_CHEETAH_compileLock', '_CHEETAH_defaultClassNameForTemplates', '_CHEETAH_requiredCheetahMethods', '_CHEETAH_compilerSettings', 'generatedClassCode', 'i18n', '_addCheetahPlumbingCodeToClass', '_CHEETAH_defaultBaseclassForTemplates', '_CHEETAH_defaultPreprocessorClass', '__hash__', 'webInput', '__subclasshook__', '_CHEETAH_requiredCheetahClassAttributes', '_CHEETAH_compileCache', '_CHEETAH_cacheStoreClass', '__reduce__', 'subclass', '_CHEETAH_cacheRegionClass', '_CHEETAH_cacheStore', '_initCheetahInstance', 'generatedModuleCode', '_CHEETAH_cacheModuleFilesForTracebacks', '_getCacheStore', '_getCacheStoreIdPrefix', 'refreshCache', '_getCompilerClass', 'request', 'getFileContents', 'compile', '_CHEETAH_compilerClass', '_preprocessSource', '_CHEETAH_defaultModuleGlobalsForTemplates', '__repr__', '__init__', 'NonNumericInputError', '_getCompilerSettings', 'varExists'])</em><a class="headerlink" href="#Cheetah.Template.Template.Reserved_SearchList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="classmethod">
-<dt id="Cheetah.Template.Template.compile">
-<em class="property">classmethod </em><code class="descname">compile</code><span class="sig-paren">(</span><em>klass</em>, <em>source=None</em>, <em>file=None</em>, <em>returnAClass=True</em>, <em>compilerSettings=Unspecified</em>, <em>compilerClass=Unspecified</em>, <em>moduleName=None</em>, <em>className=Unspecified</em>, <em>mainMethodName=Unspecified</em>, <em>baseclass=Unspecified</em>, <em>moduleGlobals=Unspecified</em>, <em>cacheCompilationResults=Unspecified</em>, <em>useCache=Unspecified</em>, <em>preprocessors=Unspecified</em>, <em>cacheModuleFilesForTracebacks=Unspecified</em>, <em>cacheDirForModuleFiles=Unspecified</em>, <em>commandlineopts=None</em>, <em>keepRefToGeneratedCode=Unspecified</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.compile" title="Permalink to this definition">¶</a></dt>
-<dd><p>The core API for compiling Cheetah source code into template classes.</p>
-<p>This class method compiles Cheetah source code and returns a python
-class. You then create template instances using that class. All
-Cheetah’s other compilation API’s use this method under the hood.</p>
-<p>Internally, this method a) parses the Cheetah source code and generates
-Python code defining a module with a single class in it, b) dynamically
-creates a module object with a unique name, c) execs the generated code
-in that module’s namespace then inserts the module into sys.modules,
-and d) returns a reference to the generated class. If you want to get
-the generated python source code instead, pass the argument
-returnAClass=False.</p>
-<p>It caches generated code and classes. See the descriptions of the
-arguments’cacheCompilationResults’ and ‘useCache’ for details. This
-doesn’t mean that templates will automatically recompile themselves
-when the source file changes. Rather, if you call Template.compile(src)
-or Template.compile(file=path) repeatedly it will attempt to return a
-cached class definition instead of recompiling.</p>
-<p>Hooks are provided template source preprocessing. See the notes on the
-‘preprocessors’ arg.</p>
-<p>If you are an advanced user and need to customize the way Cheetah
-parses source code or outputs Python code, you should check out
-the compilerSettings argument.</p>
-<p>Arguments:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>You must provide either a &#39;source&#39; or &#39;file&#39; arg, but not both::
-
- - source (string or None)
- - file (string path, file-like object, or None)
-
-The rest of the arguments are strictly optional. All but the first
-have defaults in attributes of the Template class which can be
-overridden in subclasses of this class. Working with most of these
-is an advanced topic.
-
-::
-
- - returnAClass=True
- If false, return the generated module code rather than a class.
-
- - compilerSettings (a dict)
- Default: Template._CHEETAH_compilerSettings=None
-
- a dictionary of settings to override those defined in
- DEFAULT_COMPILER_SETTINGS. These can also be overridden in your
- template source code with the #compiler or #compiler-settings
- directives.
-
- - compilerClass (a class)
- Default: Template._CHEETAH_compilerClass=Cheetah.Compiler.Compiler
-
- a subclass of Cheetah.Compiler.Compiler. Mucking with this is a
- very advanced topic.
-
- - moduleName (a string)
- Default:
- Template._CHEETAH_defaultModuleNameForTemplates
- =&#39;DynamicallyCompiledCheetahTemplate&#39;
-
- What to name the generated Python module. If the provided value
- is None and a file arg was given, the moduleName is created from
- the file path. In all cases if the moduleName provided is
- already in sys.modules it is passed through a filter that
- generates a unique variant of the name.
-
- - className (a string)
- Default: Template._CHEETAH_defaultClassNameForTemplates=None
-
- What to name the generated Python class. If the provided value
- is None, the moduleName is use as the class name.
-
- - mainMethodName (a string)
- Default:
- Template._CHEETAH_defaultMainMethodNameForTemplates
- =None (and thus DEFAULT_COMPILER_SETTINGS[&#39;mainMethodName&#39;])
-
- What to name the main output generating method in the compiled
- template class.
-
- - baseclass (a string or a class)
- Default: Template._CHEETAH_defaultBaseclassForTemplates=None
-
- Specifies the baseclass for the template without manually
- including an #extends directive in the source. The #extends
- directive trumps this arg.
-
- If the provided value is a string you must make sure that a class
- reference by that name is available to your template, either by
- using an #import directive or by providing it in the arg
- &#39;moduleGlobals&#39;.
-
- If the provided value is a class, Cheetah will handle all the
- details for you.
-
- - moduleGlobals (a dict)
- Default: Template._CHEETAH_defaultModuleGlobalsForTemplates=None
-
- A dict of vars that will be added to the global namespace of the
- module the generated code is executed in, prior to the execution
- of that code. This should be Python values, not code strings!
-
- - cacheCompilationResults (True/False)
- Default: Template._CHEETAH_cacheCompilationResults=True
-
- Tells Cheetah to cache the generated code and classes so that
- they can be reused if Template.compile() is called multiple times
- with the same source and options.
-
- - useCache (True/False)
- Default: Template._CHEETAH_useCompilationCache=True
-
- Should the compilation cache be used? If True and a previous
- compilation created a cached template class with the same source
- code, compiler settings and other options, the cached template
- class will be returned.
-
- - cacheModuleFilesForTracebacks (True/False)
- Default: Template._CHEETAH_cacheModuleFilesForTracebacks=False
-
- In earlier versions of Cheetah tracebacks from exceptions that
- were raised inside dynamically compiled Cheetah templates were
- opaque because Python didn&#39;t have access to a python source file
- to use in the traceback:
-
- File &quot;xxxx.py&quot;, line 192, in getTextiledContent
- content = str(template(searchList=searchList))
- File &quot;cheetah_yyyy.py&quot;, line 202, in __str__
- File &quot;cheetah_yyyy.py&quot;, line 187, in respond
- File &quot;cheetah_yyyy.py&quot;, line 139, in writeBody
- ZeroDivisionError: integer division or modulo by zero
-
- It is now possible to keep those files in a cache dir and allow
- Python to include the actual source lines in tracebacks and makes
- them much easier to understand:
-
- File &quot;xxxx.py&quot;, line 192, in getTextiledContent
- content = str(template(searchList=searchList))
- File &quot;/tmp/CheetahCacheDir/cheetah_yyyy.py&quot;, line 202, in __str__
- def __str__(self): return self.respond()
- File &quot;/tmp/CheetahCacheDir/cheetah_yyyy.py&quot;, line 187, in respond
- self.writeBody(trans=trans)
- File &quot;/tmp/CheetahCacheDir/cheetah_yyyy.py&quot;, line 139, in writeBody
- __v = 0/0 # $(0/0)
- ZeroDivisionError: integer division or modulo by zero
-
- - cacheDirForModuleFiles (a string representing a dir path)
- Default: Template._CHEETAH_cacheDirForModuleFiles=None
-
- See notes on cacheModuleFilesForTracebacks.
-
- - preprocessors
- Default: Template._CHEETAH_preprocessors=None
-
- ** THIS IS A VERY ADVANCED TOPIC **
-
- These are used to transform the source code prior to compilation.
- They provide a way to use Cheetah as a code generator for Cheetah
- code. In other words, you use one Cheetah template to output the
- source code for another Cheetah template.
-
- The major expected use cases are:
-
- a) &#39;compile-time caching&#39; aka &#39;partial template binding&#39;,
- wherein an intermediate Cheetah template is used to output
- the source for the final Cheetah template. The intermediate
- template is a mix of a modified Cheetah syntax (the
- &#39;preprocess syntax&#39;) and standard Cheetah syntax. The
- preprocessor syntax is executed at compile time and outputs
- Cheetah code which is then compiled in turn. This approach
- allows one to completely soft-code all the elements in the
- template which are subject to change yet have it compile to
- extremely efficient Python code with everything but the
- elements that must be variable at runtime (per browser
- request, etc.) compiled as static strings. Examples of this
- usage pattern will be added to the Cheetah Users&#39; Guide.
-
- The&#39;preprocess syntax&#39; is just Cheetah&#39;s standard one with
- alternatives for the $ and # tokens:
-
- e.g. &#39;@&#39; and &#39;%&#39; for code like this
- @aPreprocessVar $aRuntimeVar
- %if aCompileTimeCondition then yyy else zzz
- %% preprocessor comment
-
- #if aRunTimeCondition then aaa else bbb
- ## normal comment
- $aRuntimeVar
-
- b) adding #import and #extends directives dynamically based on
- the source
-
- If preprocessors are provided, Cheetah pipes the source code
- through each one in the order provided. Each preprocessor should
- accept the args (source, file) and should return a tuple (source,
- file).
-
- The argument value should be a list, but a single non-list value
- is acceptable and will automatically be converted into a list.
- Each item in the list will be passed through
- Template._normalizePreprocessor(). The items should either match
- one of the following forms:
-
- - an object with a .preprocess(source, file) method
- - a callable with the following signature:
- source, file = f(source, file)
-
- or one of the forms below:
-
- - a single string denoting the 2 &#39;tokens&#39; for the preprocess
- syntax. The tokens should be in the order (placeholderToken,
- directiveToken) and should separated with a space:
- e.g. &#39;@ %&#39;
- klass = Template.compile(src, preprocessors=&#39;@ %&#39;)
- # or
- klass = Template.compile(src, preprocessors=[&#39;@ %&#39;])
-
- - a dict with the following keys or an object with the
- following attributes (all are optional, but nothing will
- happen if you don&#39;t provide at least one):
- - tokens: same as the single string described above. You can
- also provide a tuple of 2 strings.
- - searchList: the searchList used
- for preprocess $placeholders
- - compilerSettings: used in the compilation
- of the intermediate template
- - templateAPIClass: an optional subclass of `Template`
- - outputTransformer: a simple hook for passing in a callable
- which can do further transformations of the preprocessor
- output, or do something else like debug logging. The
- default is str().
- + any keyword arguments to Template.compile which you want
- to provide for the compilation
- of the intermediate template.
-
- klass = Template.compile(
- src,
- preprocessors=[dict(tokens=&#39;@ %&#39;, searchList=[...])])
-</pre></div>
-</div>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.errorCatcher">
-<code class="descname">errorCatcher</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.errorCatcher" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return a reference to the current errorCatcher</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.generatedClassCode">
-<code class="descname">generatedClassCode</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.generatedClassCode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the class code the compiler generated, or None if no
-compilation took place.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.generatedModuleCode">
-<code class="descname">generatedModuleCode</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.generatedModuleCode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the module code the compiler generated, or None if no
-compilation took place.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.getCacheRegion">
-<code class="descname">getCacheRegion</code><span class="sig-paren">(</span><em>regionID</em>, <em>cacheInfo=None</em>, <em>create=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.getCacheRegion" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.getCacheRegions">
-<code class="descname">getCacheRegions</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.getCacheRegions" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns a dictionary of the ‘cache regions’ initialized in a
-template.</p>
-<p>Each #cache directive block or $*cachedPlaceholder is a separate ‘cache
-region’.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.getFileContents">
-<code class="descname">getFileContents</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.getFileContents" title="Permalink to this definition">¶</a></dt>
-<dd><p>A hook for getting the contents of a file. The default
-implementation just uses the Python open() function
-to load local files. This method could be reimplemented
-to allow reading of remote files via various protocols,
-as PHP allows with its ‘URL fopen wrapper’.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.getVar">
-<code class="descname">getVar</code><span class="sig-paren">(</span><em>varName</em>, <em>default=Unspecified</em>, <em>autoCall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.getVar" title="Permalink to this definition">¶</a></dt>
-<dd><p>Get a variable from the searchList. If the variable can’t be found
-in the searchList, it returns the default value if one was given, or
-raises NameMapper.NotFound.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.hasVar">
-<code class="descname">hasVar</code><span class="sig-paren">(</span><em>varName</em>, <em>autoCall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.hasVar" title="Permalink to this definition">¶</a></dt>
-<dd><p>Test if a variable name exists in the searchList.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.i18n">
-<code class="descname">i18n</code><span class="sig-paren">(</span><em>message</em>, <em>plural=None</em>, <em>n=None</em>, <em>id=None</em>, <em>domain=None</em>, <em>source=None</em>, <em>target=None</em>, <em>comment=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.i18n" title="Permalink to this definition">¶</a></dt>
-<dd><p>This is just a stub at this time.</p>
-<blockquote>
-<div><div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">plural</span> <span class="o">=</span> <span class="n">the</span> <span class="n">plural</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">message</span>
-<span class="n">n</span> <span class="o">=</span> <span class="n">a</span> <span class="n">sized</span> <span class="n">argument</span> <span class="n">to</span> <span class="n">distinguish</span>
- <span class="n">between</span> <span class="n">single</span> <span class="ow">and</span> <span class="n">plural</span> <span class="n">forms</span>
-<span class="nb">id</span> <span class="o">=</span> <span class="n">msgid</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">translation</span> <span class="n">catalog</span>
-<span class="n">domain</span> <span class="o">=</span> <span class="n">translation</span> <span class="n">domain</span>
-<span class="n">source</span> <span class="o">=</span> <span class="n">source</span> <span class="n">lang</span>
-<span class="n">target</span> <span class="o">=</span> <span class="n">a</span> <span class="n">specific</span> <span class="n">target</span> <span class="n">lang</span>
-<span class="n">comment</span> <span class="o">=</span> <span class="n">a</span> <span class="n">comment</span> <span class="n">to</span> <span class="n">the</span> <span class="n">translation</span> <span class="n">team</span>
-</pre></div>
-</div>
-</div></blockquote>
-<p>See the following for some ideas
-<a class="reference external" href="http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/ZPTInternationalizationSupport">http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/ZPTInternationalizationSupport</a></p>
-<p>Other notes:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span> <span class="n">There</span> <span class="ow">is</span> <span class="n">no</span> <span class="n">need</span> <span class="n">to</span> <span class="n">replicate</span> <span class="n">the</span> <span class="n">i18n</span><span class="p">:</span><span class="n">name</span> <span class="n">attribute</span>
- <span class="kn">from</span> <span class="nn">plone</span> <span class="o">/</span> <span class="n">PTL</span><span class="p">,</span> <span class="k">as</span> <span class="n">cheetah</span> <span class="n">placeholders</span> <span class="n">serve</span> <span class="n">the</span> <span class="n">same</span> <span class="n">purpose</span><span class="o">.</span>
-</pre></div>
-</div>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.refreshCache">
-<code class="descname">refreshCache</code><span class="sig-paren">(</span><em>cacheRegionId=None</em>, <em>cacheItemId=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.refreshCache" title="Permalink to this definition">¶</a></dt>
-<dd><p>Refresh a cache region or a specific cache item within a region.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.runAsMainProgram">
-<code class="descname">runAsMainProgram</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.runAsMainProgram" title="Permalink to this definition">¶</a></dt>
-<dd><p>Allows the Template to function as a standalone command-line program
-for static page generation.</p>
-<p>Type ‘python yourtemplate.py –help to see what it’s capabable of.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.searchList">
-<code class="descname">searchList</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.searchList" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return a reference to the searchlist</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.shutdown">
-<code class="descname">shutdown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.shutdown" title="Permalink to this definition">¶</a></dt>
-<dd><p>Break reference cycles before discarding a servlet.</p>
-</dd></dl>
-
-<dl class="classmethod">
-<dt id="Cheetah.Template.Template.subclass">
-<em class="property">classmethod </em><code class="descname">subclass</code><span class="sig-paren">(</span><em>klass</em>, <em>*args</em>, <em>**kws</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.subclass" title="Permalink to this definition">¶</a></dt>
-<dd><p>Takes the same args as the .compile() classmethod and returns a
-template that is a subclass of the template this method is called from.</p>
-<dl class="docutils">
-<dt>T1 = Template.compile(</dt>
-<dd>‘foo - $meth1 - barn#def meth1: this is T1.meth1’)</dd>
-</dl>
-<p>T2 = T1.subclass(‘#implements meth1n this is T2.meth1’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.varExists">
-<code class="descname">varExists</code><span class="sig-paren">(</span><em>varName</em>, <em>autoCall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.varExists" title="Permalink to this definition">¶</a></dt>
-<dd><p>Test if a variable name exists in the searchList.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Template.Template.webInput">
-<code class="descname">webInput</code><span class="sig-paren">(</span><em>names</em>, <em>namesMulti=()</em>, <em>default=''</em>, <em>src='f'</em>, <em>defaultInt=0</em>, <em>defaultFloat=0.0</em>, <em>badInt=0</em>, <em>badFloat=0.0</em>, <em>debug=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.webInput" title="Permalink to this definition">¶</a></dt>
-<dd><p>Method for importing web transaction variables in bulk.</p>
-<p>This works for GET/POST fields both in Webware servlets and in CGI
-scripts, and for cookies and session variables in Webware servlets.
-If you try to read a cookie or session variable in a CGI script,
-you’ll get a RuntimeError. ‘In a CGI script’ here means
-‘not running as a Webware servlet’. If the CGI environment
-is not properly set up, Cheetah will act like there’s no input.</p>
-<p>The public method provided is:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">webInput</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">names</span><span class="p">,</span> <span class="n">namesMulti</span><span class="o">=</span><span class="p">(),</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">src</span><span class="o">=</span><span class="s1">&#39;f&#39;</span><span class="p">,</span>
- <span class="n">defaultInt</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">defaultFloat</span><span class="o">=</span><span class="mf">0.00</span><span class="p">,</span>
- <span class="n">badInt</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">badFloat</span><span class="o">=</span><span class="mf">0.00</span><span class="p">,</span> <span class="n">debug</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</pre></div>
-</div>
-<p>This method places the specified GET/POST fields, cookies or session
-variables into a dictionary, which is both returned and put at the
-beginning of the searchList. It handles:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">*</span> <span class="n">single</span> <span class="n">vs</span> <span class="n">multiple</span> <span class="n">values</span>
-<span class="o">*</span> <span class="n">conversion</span> <span class="n">to</span> <span class="n">integer</span> <span class="ow">or</span> <span class="nb">float</span> <span class="k">for</span> <span class="n">specified</span> <span class="n">names</span>
-<span class="o">*</span> <span class="n">default</span> <span class="n">values</span><span class="o">/</span><span class="n">exceptions</span> <span class="k">for</span> <span class="n">missing</span> <span class="ow">or</span> <span class="n">bad</span> <span class="n">values</span>
-<span class="o">*</span> <span class="n">printing</span> <span class="n">a</span> <span class="n">snapshot</span> <span class="n">of</span> <span class="nb">all</span> <span class="n">values</span> <span class="n">retrieved</span> <span class="k">for</span> <span class="n">debugging</span>
-</pre></div>
-</div>
-<p>All the ‘default*’ and ‘bad*’ arguments have ‘use or raise’ behavior,
-meaning that if they’re a subclass of Exception, they’re raised. If
-they’re anything else, that value is substituted for the missing/bad
-value.</p>
-<p>The simplest usage is:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#silent $webInput([&#39;choice&#39;])
-$choice
-
-dic = self.webInput([&#39;choice&#39;])
-write(dic[&#39;choice&#39;])
-</pre></div>
-</div>
-<p>Both these examples retrieves the GET/POST field ‘choice’ and print it.
-If you leave off the’#silent’, all the values would be printed too.
-But a better way to preview the values is:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#silent $webInput([&#39;name&#39;], $debug=1)</span>
-</pre></div>
-</div>
-<p>because this pretty-prints all the values inside HTML &lt;PRE&gt; tags.</p>
-<p>*** KLUDGE: ‘debug’ is supposed to insert into the template output,
-but it wasn’t working so I changed it to a’print’ statement.
-So the debugging output will appear wherever standard output
-is pointed, whether at the terminal, in a Webware log file,
-or whatever. ***</p>
-<p>Since we didn’t specify any coversions, the value is a string. It’s a
-‘single’ value because we specified it in ‘names’ rather than
-‘namesMulti’. Single values work like this:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">*</span> <span class="n">If</span> <span class="n">one</span> <span class="n">value</span> <span class="ow">is</span> <span class="n">found</span><span class="p">,</span> <span class="n">take</span> <span class="n">it</span><span class="o">.</span>
-<span class="o">*</span> <span class="n">If</span> <span class="n">several</span> <span class="n">values</span> <span class="n">are</span> <span class="n">found</span><span class="p">,</span> <span class="n">choose</span> <span class="n">one</span> <span class="n">arbitrarily</span>
- <span class="ow">and</span> <span class="n">ignore</span> <span class="n">the</span> <span class="n">rest</span><span class="o">.</span>
-<span class="o">*</span> <span class="n">If</span> <span class="n">no</span> <span class="n">values</span> <span class="n">are</span> <span class="n">found</span><span class="p">,</span> <span class="n">use</span> <span class="ow">or</span> <span class="k">raise</span>
- <span class="n">the</span> <span class="n">appropriate</span> <span class="s1">&#39;default*&#39;</span> <span class="n">value</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>Multi values work like this:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">*</span> <span class="n">If</span> <span class="n">one</span> <span class="n">value</span> <span class="ow">is</span> <span class="n">found</span><span class="p">,</span> <span class="n">put</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">a</span> <span class="nb">list</span><span class="o">.</span>
-<span class="o">*</span> <span class="n">If</span> <span class="n">several</span> <span class="n">values</span> <span class="n">are</span> <span class="n">found</span><span class="p">,</span> <span class="n">leave</span> <span class="n">them</span> <span class="ow">in</span> <span class="n">a</span> <span class="nb">list</span><span class="o">.</span>
-<span class="o">*</span> <span class="n">If</span> <span class="n">no</span> <span class="n">values</span> <span class="n">are</span> <span class="n">found</span><span class="p">,</span> <span class="n">use</span> <span class="n">the</span> <span class="n">empty</span> <span class="nb">list</span> <span class="p">([])</span><span class="o">.</span> <span class="n">The</span> <span class="s1">&#39;default*&#39;</span>
- <span class="n">arguments</span> <span class="n">are</span> <span class="o">*</span><span class="ow">not</span><span class="o">*</span> <span class="n">consulted</span> <span class="ow">in</span> <span class="n">this</span> <span class="n">case</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>Example: assume ‘days’ came from a set of checkboxes
-or a multiple combo box on a form, and the user chose’Monday’,
-‘Tuesday’ and ‘Thursday’:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#silent $webInput([], [&#39;days&#39;])
-The days you chose are: #slurp
-#for $day in $days
-$day #slurp
-#end for
-
-dic = self.webInput([], [&#39;days&#39;])
-write(&#39;The days you chose are: &#39;)
-for day in dic[&#39;days&#39;]:
- write(day + &#39; &#39;)
-</pre></div>
-</div>
-<p>Both these examples print: ‘The days you chose are:
-Monday Tuesday Thursday’.</p>
-<p>By default, missing strings are replaced by ‘’ and missing/bad numbers
-by zero. (A’bad number’ means the converter raised an exception for
-it, usually because of non-numeric characters in the value.) This
-mimics Perl/PHP behavior, and simplifies coding for many applications
-where missing/bad values <em>should</em> be blank/zero. In those relatively
-few cases where you must distinguish between empty-string/zero on the
-one hand and missing/bad on the other, change the appropriate
-‘default*’ and ‘bad*’ arguments to something like:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>* None
-* another constant value
-* $NonNumericInputError/self.NonNumericInputError
-* $ValueError/ValueError
-</pre></div>
-</div>
-<p>(NonNumericInputError is defined in this class and is useful for
-distinguishing between bad input vs a TypeError/ValueError thrown for
-some other rason.)</p>
-<p>Here’s an example using multiple values to schedule newspaper
-deliveries. ‘checkboxes’ comes from a form with checkboxes for all the
-days of the week. The days the user previously chose are preselected.
-The user checks/unchecks boxes as desired and presses Submit.
-The value of ‘checkboxes’ is a list of checkboxes that were checked
-when Submit was pressed. Our task now is to turn on the days
-the user checked, turn off the days he unchecked, and leave on or off
-the days he didn’t change.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dic</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">webInput</span><span class="p">([],</span> <span class="p">[</span><span class="s1">&#39;dayCheckboxes&#39;</span><span class="p">])</span>
-<span class="n">wantedDays</span> <span class="o">=</span> <span class="n">dic</span><span class="p">[</span><span class="s1">&#39;dayCheckboxes&#39;</span><span class="p">]</span> <span class="c1"># The days the user checked.</span>
-<span class="k">for</span> <span class="n">day</span><span class="p">,</span> <span class="n">on</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">getAllValues</span><span class="p">():</span>
- <span class="k">if</span> <span class="ow">not</span> <span class="n">on</span> <span class="ow">and</span> <span class="n">day</span> <span class="ow">in</span> <span class="n">wantedDays</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">TurnOn</span><span class="p">(</span><span class="n">day</span><span class="p">)</span>
- <span class="c1"># ... Set a flag or insert a database record ...</span>
- <span class="k">elif</span> <span class="n">on</span> <span class="ow">and</span> <span class="n">day</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">wantedDays</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">TurnOff</span><span class="p">(</span><span class="n">day</span><span class="p">)</span>
- <span class="c1"># ... Unset a flag or delete a database record ...</span>
-</pre></div>
-</div>
-<p>‘source’ allows you to look up the variables from a number of different
-sources:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="s1">&#39;f&#39;</span> <span class="n">fields</span> <span class="p">(</span><span class="n">CGI</span> <span class="n">GET</span><span class="o">/</span><span class="n">POST</span> <span class="n">parameters</span><span class="p">)</span>
-<span class="s1">&#39;c&#39;</span> <span class="n">cookies</span>
-<span class="s1">&#39;s&#39;</span> <span class="n">session</span> <span class="n">variables</span>
-<span class="s1">&#39;v&#39;</span> <span class="s1">&#39;values&#39;</span><span class="p">,</span> <span class="n">meaning</span> <span class="n">fields</span> <span class="ow">or</span> <span class="n">cookies</span>
-</pre></div>
-</div>
-<p>In many forms, you’re dealing only with strings, which is why the
-‘default’ argument is third and the numeric arguments are banished to
-the end. But sometimes you want automatic number conversion, so that
-you can do numeric comparisions in your templates without having to
-write a bunch of conversion/exception handling code. Example:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#silent $webInput([&#39;name&#39;, &#39;height:int&#39;])
-$name is $height cm tall.
-#if $height &gt;= 300
-Wow, you&#39;re tall!
-#else
-Pshaw, you&#39;re short.
-#end if
-
-dic = self.webInput([&#39;name&#39;, &#39;height:int&#39;])
-name = dic[name]
-height = dic[height]
-write(&#39;%s is %s cm tall.&#39; % (name, height))
-if height &gt; 300:
- write(&#39;Wow, you&#39;re tall!&#39;)
-else:
- write(&#39;Pshaw, you&#39;re short.&#39;)
-</pre></div>
-</div>
-<p>To convert a value to a number, suffix ‘:int’ or ‘:float’ to the name.
-The method will search first for a ‘height:int’ variable
-and then for a ‘height’ variable. (It will be called ‘height’
-in the final dictionary.) If a numeric conversion fails,
-use or raise ‘badInt’ or ‘badFloat’. Missing values work the same way
-as for strings, except the default is ‘defaultInt’
-or ‘defaultFloat’ instead of ‘default’.</p>
-<p>If a name represents an uploaded file, the entire file will be read
-into memory. For more sophistocated file-upload handling,
-leave that name out of the list and do your own handling,
-or wait for Cheetah.Utils.UploadFileMixin.</p>
-<p>This only in a subclass that also inherits from Webware’s Servlet or
-HTTPServlet. Otherwise you’ll get an AttributeError on ‘self.request’.</p>
-<p>EXCEPTIONS: ValueError if ‘source’ is not one of the stated characters.
-TypeError if a conversion suffix is not ‘:int’ or ‘:float’.</p>
-<p>FUTURE EXPANSION: a future version of this method may allow source
-cascading; e.g., ‘vs’ would look first in ‘values’ and then in session
-variables.</p>
-<p>Meta-Data:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Author</span><span class="p">:</span> <span class="n">Mike</span> <span class="n">Orr</span> <span class="o">&lt;</span><span class="n">iron</span><span class="nd">@mso</span><span class="o">.</span><span class="n">oz</span><span class="o">.</span><span class="n">net</span><span class="o">&gt;</span>
-<span class="n">License</span><span class="p">:</span> <span class="n">This</span> <span class="n">software</span> <span class="ow">is</span> <span class="n">released</span> <span class="k">for</span> <span class="n">unlimited</span> <span class="n">distribution</span>
-<span class="n">under</span> <span class="n">the</span> <span class="n">terms</span> <span class="n">of</span> <span class="n">the</span> <span class="n">MIT</span> <span class="n">license</span><span class="o">.</span> <span class="n">See</span> <span class="n">the</span> <span class="n">LICENSE</span> <span class="n">file</span><span class="o">.</span>
-<span class="n">Version</span><span class="p">:</span> <span class="mf">1.186</span>
-<span class="n">Start</span> <span class="n">Date</span><span class="p">:</span> <span class="mi">2002</span><span class="o">/</span><span class="mi">03</span><span class="o">/</span><span class="mi">17</span>
-<span class="n">Last</span> <span class="n">Revision</span> <span class="n">Date</span><span class="p">:</span> <span class="mi">2008</span><span class="o">/</span><span class="mi">03</span><span class="o">/</span><span class="mi">10</span> <span class="mi">04</span><span class="p">:</span><span class="mi">48</span><span class="p">:</span><span class="mi">11</span>
-</pre></div>
-</div>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Template.TemplatePreprocessor">
-<em class="property">class </em><code class="descclassname">Cheetah.Template.</code><code class="descname">TemplatePreprocessor</code><span class="sig-paren">(</span><em>settings</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.TemplatePreprocessor" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>This is used with the preprocessors argument to Template.compile().</p>
-<p>See the docstring for Template.compile</p>
-<p>** Preprocessors are an advanced topic **</p>
-<dl class="method">
-<dt id="Cheetah.Template.TemplatePreprocessor.preprocess">
-<code class="descname">preprocess</code><span class="sig-paren">(</span><em>source</em>, <em>file</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.TemplatePreprocessor.preprocess" title="Permalink to this definition">¶</a></dt>
-<dd><p>Create an intermediate template and return the source code
-it outputs</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Template.checkFileMtime">
-<code class="descclassname">Cheetah.Template.</code><code class="descname">checkFileMtime</code><span class="sig-paren">(</span><em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.checkFileMtime" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Template.createMethod">
-<code class="descclassname">Cheetah.Template.</code><code class="descname">createMethod</code><span class="sig-paren">(</span><em>func</em>, <em>cls</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.createMethod" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Template.genParserErrorFromPythonException">
-<code class="descclassname">Cheetah.Template.</code><code class="descname">genParserErrorFromPythonException</code><span class="sig-paren">(</span><em>source</em>, <em>file</em>, <em>generatedPyCode</em>, <em>exception</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.genParserErrorFromPythonException" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Template.hashDict">
-<code class="descclassname">Cheetah.Template.</code><code class="descname">hashDict</code><span class="sig-paren">(</span><em>d</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.hashDict" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Template.hashList">
-<code class="descclassname">Cheetah.Template.</code><code class="descname">hashList</code><span class="sig-paren">(</span><em>l</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.hashList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Template.updateLinecache">
-<code class="descclassname">Cheetah.Template.</code><code class="descname">updateLinecache</code><span class="sig-paren">(</span><em>filename</em>, <em>src</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.updateLinecache" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.TemplateCmdLineIface.html b/docs/html/api/Cheetah.TemplateCmdLineIface.html
deleted file mode 100644
index 40d0691..0000000
--- a/docs/html/api/Cheetah.TemplateCmdLineIface.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.TemplateCmdLineIface module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.TemplateCmdLineIface.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.TemplateCmdLineIface">
-<span id="cheetah-templatecmdlineiface-module"></span><h1>Cheetah.TemplateCmdLineIface module<a class="headerlink" href="#module-Cheetah.TemplateCmdLineIface" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.TemplateCmdLineIface.CmdLineIface">
-<em class="property">class </em><code class="descclassname">Cheetah.TemplateCmdLineIface.</code><code class="descname">CmdLineIface</code><span class="sig-paren">(</span><em>templateObj, scriptName='sphinx-build', cmdLineArgs=['-b', 'html', '-d', '_build/doctrees', '.', '_build/html']</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.TemplateCmdLineIface.CmdLineIface" title="Permalink to this definition">¶</a></dt>
-<dd><p>A command line interface to compiled Cheetah template modules.</p>
-<dl class="method">
-<dt id="Cheetah.TemplateCmdLineIface.CmdLineIface.run">
-<code class="descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.TemplateCmdLineIface.CmdLineIface.run" title="Permalink to this definition">¶</a></dt>
-<dd><p>The main program controller.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.TemplateCmdLineIface.CmdLineIface.usage">
-<code class="descname">usage</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.TemplateCmdLineIface.CmdLineIface.usage" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.TemplateCmdLineIface.Error">
-<em class="property">exception </em><code class="descclassname">Cheetah.TemplateCmdLineIface.</code><code class="descname">Error</code><a class="headerlink" href="#Cheetah.TemplateCmdLineIface.Error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Templates.SkeletonPage.html b/docs/html/api/Cheetah.Templates.SkeletonPage.html
deleted file mode 100644
index b2a0e29..0000000
--- a/docs/html/api/Cheetah.Templates.SkeletonPage.html
+++ /dev/null
@@ -1,117 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Templates.SkeletonPage module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Templates.SkeletonPage.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Templates.SkeletonPage">
-<span id="cheetah-templates-skeletonpage-module"></span><h1>Cheetah.Templates.SkeletonPage module<a class="headerlink" href="#module-Cheetah.Templates.SkeletonPage" title="Permalink to this headline">¶</a></h1>
-<p>A Skeleton HTML page template, that provides basic structure and utility methods.</p>
-<dl class="class">
-<dt id="Cheetah.Templates.SkeletonPage.SkeletonPage">
-<em class="property">class </em><code class="descclassname">Cheetah.Templates.SkeletonPage.</code><code class="descname">SkeletonPage</code><span class="sig-paren">(</span><em>*args</em>, <em>**KWs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Templates.SkeletonPage.SkeletonPage" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">Cheetah.Templates._SkeletonPage._SkeletonPage</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Templates.SkeletonPage.SkeletonPage.respond">
-<code class="descname">respond</code><span class="sig-paren">(</span><em>trans=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Templates.SkeletonPage.SkeletonPage.respond" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Templates.SkeletonPage.SkeletonPage.writeBody">
-<code class="descname">writeBody</code><span class="sig-paren">(</span><em>**KWS</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Templates.SkeletonPage.SkeletonPage.writeBody" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Templates.SkeletonPage.SkeletonPage.writeHeadTag">
-<code class="descname">writeHeadTag</code><span class="sig-paren">(</span><em>**KWS</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Templates.SkeletonPage.SkeletonPage.writeHeadTag" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Templates.html b/docs/html/api/Cheetah.Templates.html
deleted file mode 100644
index 0be728f..0000000
--- a/docs/html/api/Cheetah.Templates.html
+++ /dev/null
@@ -1,111 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Templates package &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.Templates package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Templates.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Templates">
-<span id="cheetah-templates-package"></span><h1>Cheetah.Templates package<a class="headerlink" href="#module-Cheetah.Templates" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Templates.SkeletonPage.html">Cheetah.Templates.SkeletonPage module</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Analyzer.html b/docs/html/api/Cheetah.Tests.Analyzer.html
deleted file mode 100644
index 112382b..0000000
--- a/docs/html/api/Cheetah.Tests.Analyzer.html
+++ /dev/null
@@ -1,111 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Analyzer module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Analyzer.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Analyzer">
-<span id="cheetah-tests-analyzer-module"></span><h1>Cheetah.Tests.Analyzer module<a class="headerlink" href="#module-Cheetah.Tests.Analyzer" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Analyzer.AnalyzerTests">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Analyzer.</code><code class="descname">AnalyzerTests</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Analyzer.AnalyzerTests" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Analyzer.AnalyzerTests.test_compilersettings">
-<code class="descname">test_compilersettings</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Analyzer.AnalyzerTests.test_compilersettings" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Analyzer.AnalyzerTests.test_set">
-<code class="descname">test_set</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Analyzer.AnalyzerTests.test_set" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Boinker.html b/docs/html/api/Cheetah.Tests.Boinker.html
deleted file mode 100644
index 1a3cedb..0000000
--- a/docs/html/api/Cheetah.Tests.Boinker.html
+++ /dev/null
@@ -1,106 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Boinker module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Boinker.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Boinker">
-<span id="cheetah-tests-boinker-module"></span><h1>Cheetah.Tests.Boinker module<a class="headerlink" href="#module-Cheetah.Tests.Boinker" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Boinker.Boinker">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Boinker.</code><code class="descname">Boinker</code><span class="sig-paren">(</span><em>source=None</em>, <em>namespaces=None</em>, <em>searchList=None</em>, <em>file=None</em>, <em>filter='RawOrEncodedUnicode'</em>, <em>filtersLib=&lt;module 'Cheetah.Filters' from '/home/phd/current/projects/cheetah3/cheetah3/Cheetah/Filters.py'&gt;</em>, <em>errorCatcher=None</em>, <em>compilerSettings=Unspecified</em>, <em>_globalSetVars=None</em>, <em>_preBuiltSearchList=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Boinker.Boinker" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="Cheetah.Template.html#Cheetah.Template.Template" title="Cheetah.Template.Template"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Template.Template</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Boinker.Boinker.boink">
-<code class="descname">boink</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Boinker.Boinker.boink" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.CheetahWrapper.html b/docs/html/api/Cheetah.Tests.CheetahWrapper.html
deleted file mode 100644
index 8751ff1..0000000
--- a/docs/html/api/Cheetah.Tests.CheetahWrapper.html
+++ /dev/null
@@ -1,638 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.CheetahWrapper module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.CheetahWrapper">
-<span id="cheetah-tests-cheetahwrapper-module"></span><h1>Cheetah.Tests.CheetahWrapper module<a class="headerlink" href="#module-Cheetah.Tests.CheetahWrapper" title="Permalink to this headline">¶</a></h1>
-<p>Tests for the ‘cheetah’ command.</p>
-<dl class="docutils">
-<dt>Besides unittest usage, recognizes the following command-line options:</dt>
-<dd><dl class="first last docutils">
-<dt>–list CheetahWrapper.py</dt>
-<dd><blockquote class="first">
-<div>List all scenarios that are tested. The argument is the path
-of this script.</div></blockquote>
-<table class="last docutils option-list" frame="void" rules="none">
-<col class="option" />
-<col class="description" />
-<tbody valign="top">
-<tr><td class="option-group">
-<kbd><span class="option">--nodelete</span></kbd></td>
-<td>Don’t delete scratch directory at end.</td></tr>
-<tr><td class="option-group">
-<kbd><span class="option">--output</span></kbd></td>
-<td>Show the output of each subcommand. (Normally suppressed.)</td></tr>
-</tbody>
-</table>
-</dd>
-</dl>
-</dd>
-</dl>
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">CFBase</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<p>Base class for “cheetah compile” and “cheetah fill” unit tests.</p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.assertPosixSubprocess">
-<code class="descname">assertPosixSubprocess</code><span class="sig-paren">(</span><em>cmd</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.assertPosixSubprocess" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.assertSubprocess">
-<code class="descname">assertSubprocess</code><span class="sig-paren">(</span><em>cmd</em>, <em>nonzero=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.assertSubprocess" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.assertWin32Subprocess">
-<code class="descname">assertWin32Subprocess</code><span class="sig-paren">(</span><em>cmd</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.assertWin32Subprocess" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.checkCompile">
-<code class="descname">checkCompile</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.checkCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.checkFill">
-<code class="descname">checkFill</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.checkFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.checkNoBackup">
-<code class="descname">checkNoBackup</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.checkNoBackup" title="Permalink to this definition">¶</a></dt>
-<dd><p>Verify ‘path’ does not exist. (To check –nobackup.)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.checkSubdirPyInit">
-<code class="descname">checkSubdirPyInit</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.checkSubdirPyInit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Verify a destination subdirectory exists and contains an
-__init__.py file.</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.expectError">
-<code class="descname">expectError</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.expectError" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.go">
-<code class="descname">go</code><span class="sig-paren">(</span><em>cmd</em>, <em>expectedStatus=0</em>, <em>expectedOutputSubstring=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.go" title="Permalink to this definition">¶</a></dt>
-<dd><p>Run a “cheetah compile” or “cheetah fill” subcommand.</p>
-<dl class="docutils">
-<dt>in <span class="classifier-delimiter">:</span> <span class="classifier">cmd, string, the command to run.</span></dt>
-<dd><dl class="first last docutils">
-<dt>expectedStatus, int, subcommand’s expected output status.</dt>
-<dd>0 if the subcommand is expected to succeed, 1-255 otherwise.</dd>
-<dt>expectedOutputSubstring, string, substring which much appear</dt>
-<dd>in the standard output or standard error. None to skip this
-test.</dd>
-</dl>
-</dd>
-</dl>
-<p>out: None.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.inform">
-<code class="descname">inform</code><span class="sig-paren">(</span><em>message</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.inform" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.locate_cheetah">
-<code class="descname">locate_cheetah</code><span class="sig-paren">(</span><em>cmd</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.locate_cheetah" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.setUp" title="Permalink to this definition">¶</a></dt>
-<dd><p>Create the top-level directories, subdirectories and .tmpl
-files.</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.srcDir">
-<code class="descname">srcDir</code><em class="property"> = ''</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.srcDir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.srcFiles">
-<code class="descname">srcFiles</code><em class="property"> = ('a.tmpl', 'child/a.tmpl', 'child/grandkid/a.tmpl')</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.srcFiles" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.subdirs">
-<code class="descname">subdirs</code><em class="property"> = ('child', 'child/grandkid')</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.subdirs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.CFBase.tearDown">
-<code class="descname">tearDown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFBase.tearDown" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.CFIdirBase">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">CFIdirBase</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFIdirBase" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<p>Subclass for tests with –idir.</p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.CFIdirBase.srcDir">
-<code class="descname">srcDir</code><em class="property"> = 'SRC'</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFIdirBase.srcDir" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.CFIdirBase.srcFiles">
-<code class="descname">srcFiles</code><em class="property"> = ('SRC/a.tmpl', 'SRC/child/a.tmpl', 'SRC/child/grandkid/a.tmpl')</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFIdirBase.srcFiles" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.CFIdirBase.subdirs">
-<code class="descname">subdirs</code><em class="property"> = ('SRC/child', 'SRC/child/grandkid')</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.CFIdirBase.subdirs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.Flat">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">Flat</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.Flat" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.Flat.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.Flat.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.Flat.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.Flat.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.Flat.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.Flat.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.FlatRecurseCollision">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">FlatRecurseCollision</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.expectError">
-<code class="descname">expectError</code><em class="property"> = True</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.expectError" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">IdirFlatRecurseCollision</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFIdirBase" title="Cheetah.Tests.CheetahWrapper.CFIdirBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFIdirBase</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.expectError">
-<code class="descname">expectError</code><em class="property"> = True</em><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.expectError" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirOdirRecurse">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">IdirOdirRecurse</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirOdirRecurse" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFIdirBase" title="Cheetah.Tests.CheetahWrapper.CFIdirBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFIdirBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirRecurse">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">IdirRecurse</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirRecurse" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFIdirBase" title="Cheetah.Tests.CheetahWrapper.CFIdirBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFIdirBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirRecurse.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirRecurse.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirRecurse.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirRecurse.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.IdirRecurse.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.IdirRecurse.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.NoBackup">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">NoBackup</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.NoBackup" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<p>Run the command twice each time and verify a backup file is
-<em>not</em> created.</p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.NoBackup.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.NoBackup.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.NoBackup.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.NoBackup.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.NoBackup.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.NoBackup.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFile">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">OneFile</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFile" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFile.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFile.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFile.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFile.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFile.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFile.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFileNoExtension">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">OneFileNoExtension</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFileNoExtension" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFileWithOdir">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">OneFileWithOdir</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFileWithOdir" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.Popen4">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">Popen4</code><span class="sig-paren">(</span><em>cmd</em>, <em>bufsize=-1</em>, <em>shell=True</em>, <em>close_fds=True</em>, <em>stdin=-1</em>, <em>stdout=-1</em>, <em>stderr=-2</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.Popen4" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">subprocess.Popen</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseExplicit">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">RecurseExplicit</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseExplicit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseExplicit.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseExplicit.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseExplicit.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseExplicit.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseExplicit.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseExplicit.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">RecurseExplicitWIthOdir</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseImplicit">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">RecurseImplicit</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseImplicit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseImplicit.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseImplicit.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseImplicit.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseImplicit.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.RecurseImplicit.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.RecurseImplicit.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.SplatTmpl">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">SplatTmpl</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.SplatTmpl" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.SplatTmpl.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.SplatTmpl.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.SplatTmpl.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.SplatTmpl.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.SplatTmpl.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.SplatTmpl.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">SplatTmplWithSubdirectories</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">ThreeFilesWithSubdirectories</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">ThreeFilesWithSubdirectoriesNoExtension</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.CheetahWrapper.VarietyWithOdir">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">VarietyWithOdir</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.VarietyWithOdir" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.CheetahWrapper.CFBase" title="Cheetah.Tests.CheetahWrapper.CFBase"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.CheetahWrapper.CFBase</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testCompile">
-<code class="descname">testCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testFill">
-<code class="descname">testFill</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testFill" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testText">
-<code class="descname">testText</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testText" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.CheetahWrapper.listTests">
-<code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">listTests</code><span class="sig-paren">(</span><em>cheetahWrapperFile</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.listTests" title="Permalink to this definition">¶</a></dt>
-<dd><p>cheetahWrapperFile, string, path of this script.</p>
-<p>XXX TODO: don’t print test where expectError is true.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.CheetahWrapper.main">
-<code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">main</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.main" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.CheetahWrapper.warn">
-<code class="descclassname">Cheetah.Tests.CheetahWrapper.</code><code class="descname">warn</code><span class="sig-paren">(</span><em>msg</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.CheetahWrapper.warn" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Cheps.html b/docs/html/api/Cheetah.Tests.Cheps.html
deleted file mode 100644
index c78f562..0000000
--- a/docs/html/api/Cheetah.Tests.Cheps.html
+++ /dev/null
@@ -1,119 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Cheps module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Cheps.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Cheps">
-<span id="cheetah-tests-cheps-module"></span><h1>Cheetah.Tests.Cheps module<a class="headerlink" href="#module-Cheetah.Tests.Cheps" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Cheps.</code><code class="descname">Chep_2_Conditionalized_Import_Behavior</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_InlineImport">
-<code class="descname">test_InlineImport</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_InlineImport" title="Permalink to this definition">¶</a></dt>
-<dd><p>Verify (new) inline import behavior works</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_LegacyMode">
-<code class="descname">test_LegacyMode</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_LegacyMode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Verify disabling of CHEP #2 works</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_ModuleLevelImport">
-<code class="descname">test_ModuleLevelImport</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_ModuleLevelImport" title="Permalink to this definition">¶</a></dt>
-<dd><p>Verify module level (traditional) import behavior</p>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Filters.html b/docs/html/api/Cheetah.Tests.Filters.html
deleted file mode 100644
index 51a6d02..0000000
--- a/docs/html/api/Cheetah.Tests.Filters.html
+++ /dev/null
@@ -1,124 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Filters module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Filters.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Filters">
-<span id="cheetah-tests-filters-module"></span><h1>Cheetah.Tests.Filters module<a class="headerlink" href="#module-Cheetah.Tests.Filters" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Filters.</code><code class="descname">BasicCodeHighlighterFilterTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<p>Test that our code highlighter filter works</p>
-<dl class="method">
-<dt id="Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest.test_Html">
-<code class="descname">test_Html</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest.test_Html" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest.test_Python">
-<code class="descname">test_Python</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest.test_Python" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Filters.BasicMarkdownFilterTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Filters.</code><code class="descname">BasicMarkdownFilterTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Filters.BasicMarkdownFilterTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<p>Test that our markdown filter works</p>
-<dl class="method">
-<dt id="Cheetah.Tests.Filters.BasicMarkdownFilterTest.test_BasicHeader">
-<code class="descname">test_BasicHeader</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Filters.BasicMarkdownFilterTest.test_BasicHeader" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Misc.html b/docs/html/api/Cheetah.Tests.Misc.html
deleted file mode 100644
index d07d9bd..0000000
--- a/docs/html/api/Cheetah.Tests.Misc.html
+++ /dev/null
@@ -1,106 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Misc module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Misc.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Misc">
-<span id="cheetah-tests-misc-module"></span><h1>Cheetah.Tests.Misc module<a class="headerlink" href="#module-Cheetah.Tests.Misc" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Misc.SettingsManagerTests">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Misc.</code><code class="descname">SettingsManagerTests</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Misc.SettingsManagerTests" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Misc.SettingsManagerTests.test_mergeDictionaries">
-<code class="descname">test_mergeDictionaries</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Misc.SettingsManagerTests.test_mergeDictionaries" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.NameMapper.html b/docs/html/api/Cheetah.Tests.NameMapper.html
deleted file mode 100644
index a868803..0000000
--- a/docs/html/api/Cheetah.Tests.NameMapper.html
+++ /dev/null
@@ -1,668 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.NameMapper module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.NameMapper.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.NameMapper">
-<span id="cheetah-tests-namemapper-module"></span><h1>Cheetah.Tests.NameMapper module<a class="headerlink" href="#module-Cheetah.Tests.NameMapper" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.DummyClass">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">DummyClass</code><a class="headerlink" href="#Cheetah.Tests.NameMapper.DummyClass" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.NameMapper.DummyClass.classVar1">
-<code class="descname">classVar1</code><em class="property"> = 123</em><a class="headerlink" href="#Cheetah.Tests.NameMapper.DummyClass.classVar1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.DummyClass.meth">
-<code class="descname">meth</code><span class="sig-paren">(</span><em>arg='arff'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.DummyClass.meth" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.DummyClass.meth1">
-<code class="descname">meth1</code><span class="sig-paren">(</span><em>arg='doo'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.DummyClass.meth1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.DummyClass.meth2">
-<code class="descname">meth2</code><span class="sig-paren">(</span><em>arg1='a1'</em>, <em>arg2='a2'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.DummyClass.meth2" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.DummyClass.meth3">
-<code class="descname">meth3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.DummyClass.meth3" title="Permalink to this definition">¶</a></dt>
-<dd><p>Tests a bug that Jeff Johnson reported on Oct 1, 2001</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.DummyClassGetAttrRaises">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">DummyClassGetAttrRaises</code><a class="headerlink" href="#Cheetah.Tests.NameMapper.DummyClassGetAttrRaises" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.MapBuiltins">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">MapBuiltins</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.MapBuiltins" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.MapBuiltins.test_int">
-<code class="descname">test_int</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.MapBuiltins.test_int" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.NameMapperTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">NameMapperTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.NameMapperTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.NameMapperTest.VFN">
-<code class="descname">VFN</code><span class="sig-paren">(</span><em>name</em>, <em>autocall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.NameMapperTest.VFN" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.NameMapperTest.VFS">
-<code class="descname">VFS</code><span class="sig-paren">(</span><em>searchList</em>, <em>name</em>, <em>autocall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.NameMapperTest.VFS" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.NameMapperTest.check">
-<code class="descname">check</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.NameMapperTest.check" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.NameMapper.NameMapperTest.failureException">
-<code class="descname">failureException</code><a class="headerlink" href="#Cheetah.Tests.NameMapper.NameMapperTest.failureException" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <code class="xref py py-class docutils literal"><span class="pre">NotFound</span></code></p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.NameMapperTest.get">
-<code class="descname">get</code><span class="sig-paren">(</span><em>name</em>, <em>autocall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.NameMapperTest.get" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.NameMapperTest.namespace">
-<code class="descname">namespace</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.NameMapperTest.namespace" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFF">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFF</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFF" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFN" title="Cheetah.Tests.NameMapper.VFN"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFN</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFF.get">
-<code class="descname">get</code><span class="sig-paren">(</span><em>name</em>, <em>autocall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFF.get" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFF.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFF.setUp" title="Permalink to this definition">¶</a></dt>
-<dd><p>Mod some of the data</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFF.test_VFF_1">
-<code class="descname">test_VFF_1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFF.test_VFF_1" title="Permalink to this definition">¶</a></dt>
-<dd><p>Builtins</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFFSL">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFFSL</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFFSL" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFS" title="Cheetah.Tests.NameMapper.VFS"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFS</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFFSL.VFFSL">
-<code class="descname">VFFSL</code><span class="sig-paren">(</span><em>searchList</em>, <em>name</em>, <em>autocall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFFSL.VFFSL" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFFSL.get">
-<code class="descname">get</code><span class="sig-paren">(</span><em>name</em>, <em>autocall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFFSL.get" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFFSL.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFFSL.setUp" title="Permalink to this definition">¶</a></dt>
-<dd><p>Mod some of the data</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFFSL_2">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFFSL_2</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFFSL_2" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFFSL" title="Cheetah.Tests.NameMapper.VFFSL"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFFSL</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFFSL_3">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFFSL_3</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFFSL_3" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFFSL" title="Cheetah.Tests.NameMapper.VFFSL"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFFSL</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFFSL_4">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFFSL_4</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFFSL_4" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFFSL" title="Cheetah.Tests.NameMapper.VFFSL"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFFSL</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFN">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFN</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.NameMapperTest" title="Cheetah.Tests.NameMapper.NameMapperTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.NameMapperTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>string in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>aFunc in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>aMeth in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>aMeth in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>aMeth in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>aMeth in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>anObj in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test16">
-<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>anObj in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test17">
-<code class="descname">test17</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test17" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test18">
-<code class="descname">test18</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test18" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test19">
-<code class="descname">test19</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test19" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>string in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test20">
-<code class="descname">test20</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test20" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test21">
-<code class="descname">test21</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test21" title="Permalink to this definition">¶</a></dt>
-<dd><p>aClass.classVar1 in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test22">
-<code class="descname">test22</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test22" title="Permalink to this definition">¶</a></dt>
-<dd><p>aClass.classVar1 in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test23">
-<code class="descname">test23</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test23" title="Permalink to this definition">¶</a></dt>
-<dd><p>anObj.instanceVar1 in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test24">
-<code class="descname">test24</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test24" title="Permalink to this definition">¶</a></dt>
-<dd><p>anObj.instanceVar1 in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test27">
-<code class="descname">test27</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test27" title="Permalink to this definition">¶</a></dt>
-<dd><p>anObj.meth1 in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test28">
-<code class="descname">test28</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test28" title="Permalink to this definition">¶</a></dt>
-<dd><p>anObj.meth1 in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test29">
-<code class="descname">test29</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test29" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.one in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>int in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test30">
-<code class="descname">test30</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test30" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.one in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test31">
-<code class="descname">test31</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test31" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test32">
-<code class="descname">test32</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test32" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test33">
-<code class="descname">test33</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test33" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict.one in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test34">
-<code class="descname">test34</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test34" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict.one in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test35">
-<code class="descname">test35</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test35" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedFunc in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test36">
-<code class="descname">test36</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test36" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedFunc in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test37">
-<code class="descname">test37</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test37" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedFunc in dict lookup - without autocalling</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test38">
-<code class="descname">test38</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test38" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedFunc in dict lookup in a loop - without autocalling</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test39">
-<code class="descname">test39</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test39" title="Permalink to this definition">¶</a></dt>
-<dd><p>aMeth in dict lookup - without autocalling</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>int in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test40">
-<code class="descname">test40</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test40" title="Permalink to this definition">¶</a></dt>
-<dd><p>aMeth in dict lookup in a loop - without autocalling</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test41">
-<code class="descname">test41</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test41" title="Permalink to this definition">¶</a></dt>
-<dd><p>anObj.meth3 in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test42">
-<code class="descname">test42</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test42" title="Permalink to this definition">¶</a></dt>
-<dd><p>aMeth in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test43">
-<code class="descname">test43</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test43" title="Permalink to this definition">¶</a></dt>
-<dd><p>NotFound test</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test44">
-<code class="descname">test44</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test44" title="Permalink to this definition">¶</a></dt>
-<dd><p>NotFound test in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test45">
-<code class="descname">test45</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test45" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from meth test</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test46">
-<code class="descname">test46</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test46" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from meth test in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test47">
-<code class="descname">test47</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test47" title="Permalink to this definition">¶</a></dt>
-<dd><p>None in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test48">
-<code class="descname">test48</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test48" title="Permalink to this definition">¶</a></dt>
-<dd><p>None in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test49">
-<code class="descname">test49</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test49" title="Permalink to this definition">¶</a></dt>
-<dd><p>EmptyString in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>float in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test50">
-<code class="descname">test50</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test50" title="Permalink to this definition">¶</a></dt>
-<dd><p>EmptyString in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test51">
-<code class="descname">test51</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test51" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from func test</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test52">
-<code class="descname">test52</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test52" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from func test in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test53">
-<code class="descname">test53</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test53" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from func test</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test54">
-<code class="descname">test54</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test54" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from func test in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test55">
-<code class="descname">test55</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test55" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict.aClass in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test56">
-<code class="descname">test56</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test56" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict.aClass in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test57">
-<code class="descname">test57</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test57" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict.aClass in dict lookup - without autocalling</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test58">
-<code class="descname">test58</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test58" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict.aClass in dict lookup in a loop - without
-autocalling</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test59">
-<code class="descname">test59</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test59" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from func test – but without autocalling shouldn’t
-raise</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>float in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test60">
-<code class="descname">test60</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test60" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from func test in a loop – but without autocalling
-shouldn’t raise</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test61">
-<code class="descname">test61</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test61" title="Permalink to this definition">¶</a></dt>
-<dd><p>Accessing attribute where __getattr__ raises shouldn’t segfault
-if something follows it</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>class in dict lookup</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>class in dict lookup in a loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFN.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>aFunc in dict lookup</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFS">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFS</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFS" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFN" title="Cheetah.Tests.NameMapper.VFN"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFN</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFS.get">
-<code class="descname">get</code><span class="sig-paren">(</span><em>name</em>, <em>autocall=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFS.get" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFS.searchList">
-<code class="descname">searchList</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFS.searchList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper.VFS.searchListGenerator">
-<code class="descname">searchListGenerator</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFS.searchListGenerator" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFS_2namespaces">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFS_2namespaces</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFS_2namespaces" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFS" title="Cheetah.Tests.NameMapper.VFS"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFS</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFS_3namespaces">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFS_3namespaces</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFS_3namespaces" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFS" title="Cheetah.Tests.NameMapper.VFS"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFS</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper.VFS_4namespaces">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">VFS_4namespaces</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFS_4namespaces" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.NameMapper.VFS" title="Cheetah.Tests.NameMapper.VFS"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.NameMapper.VFS</span></code></a></p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.NameMapper.aClass">
-<code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">aClass</code><a class="headerlink" href="#Cheetah.Tests.NameMapper.aClass" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Tests.NameMapper.DummyClass" title="Cheetah.Tests.NameMapper.DummyClass"><code class="xref py py-class docutils literal"><span class="pre">DummyClass</span></code></a></p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.NameMapper.aFunc">
-<code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">aFunc</code><span class="sig-paren">(</span><em>arg='Scooby'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.aFunc" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.NameMapper.dummyFunc">
-<code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">dummyFunc</code><span class="sig-paren">(</span><em>arg='Scooby'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.dummyFunc" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.NameMapper.funcThatRaises">
-<code class="descclassname">Cheetah.Tests.NameMapper.</code><code class="descname">funcThatRaises</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.funcThatRaises" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.NameMapper_pure.html b/docs/html/api/Cheetah.Tests.NameMapper_pure.html
deleted file mode 100644
index 5b31c68..0000000
--- a/docs/html/api/Cheetah.Tests.NameMapper_pure.html
+++ /dev/null
@@ -1,116 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.NameMapper_pure module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.NameMapper_pure">
-<span id="cheetah-tests-namemapper-pure-module"></span><h1>Cheetah.Tests.NameMapper_pure module<a class="headerlink" href="#module-Cheetah.Tests.NameMapper_pure" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.NameMapper_pure.NameMapperTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper_pure.</code><code class="descname">NameMapperTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper_pure.NameMapperTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.NameMapper_pure.NameMapperTest.test_valueForName">
-<code class="descname">test_valueForName</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper_pure.NameMapperTest.test_valueForName" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.NameMapper_pure.setUpModule">
-<code class="descclassname">Cheetah.Tests.NameMapper_pure.</code><code class="descname">setUpModule</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper_pure.setUpModule" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.NameMapper_pure.tearDownModule">
-<code class="descclassname">Cheetah.Tests.NameMapper_pure.</code><code class="descname">tearDownModule</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper_pure.tearDownModule" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Parser.html b/docs/html/api/Cheetah.Tests.Parser.html
deleted file mode 100644
index 127e596..0000000
--- a/docs/html/api/Cheetah.Tests.Parser.html
+++ /dev/null
@@ -1,127 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Parser module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Parser.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Parser">
-<span id="cheetah-tests-parser-module"></span><h1>Cheetah.Tests.Parser module<a class="headerlink" href="#module-Cheetah.Tests.Parser" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Parser.ArgListTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Parser.</code><code class="descname">ArgListTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Parser.ArgListTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Parser.ArgListTest.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Parser.ArgListTest.setUp" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Parser.ArgListTest.test_merge1">
-<code class="descname">test_merge1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Parser.ArgListTest.test_merge1" title="Permalink to this definition">¶</a></dt>
-<dd><p>Testing the ArgList case results from
-Template.Preprocessors.test_complexUsage</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Parser.ArgListTest.test_merge2">
-<code class="descname">test_merge2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Parser.ArgListTest.test_merge2" title="Permalink to this definition">¶</a></dt>
-<dd><p>Testing the ArgList case results from
-SyntaxAndOutput.BlockDirective.test4</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Parser.ArgListTest.test_merge3">
-<code class="descname">test_merge3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Parser.ArgListTest.test_merge3" title="Permalink to this definition">¶</a></dt>
-<dd><p>Testing the ArgList case results from
-SyntaxAndOutput.BlockDirective.test13</p>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Performance.html b/docs/html/api/Cheetah.Tests.Performance.html
deleted file mode 100644
index 62e0e65..0000000
--- a/docs/html/api/Cheetah.Tests.Performance.html
+++ /dev/null
@@ -1,250 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Performance module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Performance.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Performance">
-<span id="cheetah-tests-performance-module"></span><h1>Cheetah.Tests.Performance module<a class="headerlink" href="#module-Cheetah.Tests.Performance" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.BunchOfWriteCalls">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">BunchOfWriteCalls</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.BunchOfWriteCalls" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Performance.PerformanceTest" title="Cheetah.Tests.Performance.PerformanceTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Performance.PerformanceTest</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.Performance.BunchOfWriteCalls.iterations">
-<code class="descname">iterations</code><em class="property"> = 1000</em><a class="headerlink" href="#Cheetah.Tests.Performance.BunchOfWriteCalls.iterations" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.BunchOfWriteCalls.performanceSample">
-<code class="descname">performanceSample</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.BunchOfWriteCalls.performanceSample" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Tests.Performance.DurationError">
-<em class="property">exception </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">DurationError</code><a class="headerlink" href="#Cheetah.Tests.Performance.DurationError" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.AssertionError</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.DynamicMethodCompilationTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">DynamicMethodCompilationTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.DynamicMethodCompilationTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Performance.PerformanceTest" title="Cheetah.Tests.Performance.PerformanceTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Performance.PerformanceTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.DynamicMethodCompilationTest.performanceSample">
-<code class="descname">performanceSample</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.DynamicMethodCompilationTest.performanceSample" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.DynamicSimpleCompilationTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">DynamicSimpleCompilationTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.DynamicSimpleCompilationTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Performance.PerformanceTest" title="Cheetah.Tests.Performance.PerformanceTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Performance.PerformanceTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.DynamicSimpleCompilationTest.performanceSample">
-<code class="descname">performanceSample</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.DynamicSimpleCompilationTest.performanceSample" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.DynamicTemplatePerformanceTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">DynamicTemplatePerformanceTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.DynamicTemplatePerformanceTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.Performance.DynamicTemplatePerformanceTest.loops">
-<code class="descname">loops</code><em class="property"> = 10</em><a class="headerlink" href="#Cheetah.Tests.Performance.DynamicTemplatePerformanceTest.loops" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.DynamicTemplatePerformanceTest.test_BasicDynamic">
-<code class="descname">test_BasicDynamic</code><span class="sig-paren">(</span><em>*args</em>, <em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.DynamicTemplatePerformanceTest.test_BasicDynamic" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.FilterTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">FilterTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.FilterTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Performance.PerformanceTest" title="Cheetah.Tests.Performance.PerformanceTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Performance.PerformanceTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.FilterTest.performanceSample">
-<code class="descname">performanceSample</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.FilterTest.performanceSample" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.FilterTest.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.FilterTest.setUp" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.Performance.FilterTest.template">
-<code class="descname">template</code><em class="property"> = None</em><a class="headerlink" href="#Cheetah.Tests.Performance.FilterTest.template" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.LongCompileAndRun">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">LongCompileAndRun</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.LongCompileAndRun" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Performance.LongCompileTest" title="Cheetah.Tests.Performance.LongCompileTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Performance.LongCompileTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.LongCompileAndRun.performanceSample">
-<code class="descname">performanceSample</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.LongCompileAndRun.performanceSample" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.LongCompileTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">LongCompileTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.LongCompileTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Performance.PerformanceTest" title="Cheetah.Tests.Performance.PerformanceTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Performance.PerformanceTest</span></code></a></p>
-<p>Test the compilation on a sufficiently large template</p>
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.LongCompileTest.compile">
-<code class="descname">compile</code><span class="sig-paren">(</span><em>template</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.LongCompileTest.compile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.LongCompileTest.performanceSample">
-<code class="descname">performanceSample</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.LongCompileTest.performanceSample" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">LongCompile_CompilerSettingsTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Performance.LongCompileTest" title="Cheetah.Tests.Performance.LongCompileTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Performance.LongCompileTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest.compile">
-<code class="descname">compile</code><span class="sig-paren">(</span><em>template</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest.compile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Performance.PerformanceTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">PerformanceTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.PerformanceTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.Performance.PerformanceTest.display">
-<code class="descname">display</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.Performance.PerformanceTest.display" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.Performance.PerformanceTest.iterations">
-<code class="descname">iterations</code><em class="property"> = 100000</em><a class="headerlink" href="#Cheetah.Tests.Performance.PerformanceTest.iterations" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Performance.PerformanceTest.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.PerformanceTest.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.Performance.PerformanceTest.save">
-<code class="descname">save</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.Performance.PerformanceTest.save" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.Performance.perftest">
-<code class="descclassname">Cheetah.Tests.Performance.</code><code class="descname">perftest</code><span class="sig-paren">(</span><em>max_num_pystones</em>, <em>current_pystone=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Performance.perftest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Performance test decorator based off the ‘timedtest’
-decorator found in this Active State recipe:</p>
-<blockquote>
-<div><a class="reference external" href="http://code.activestate.com/recipes/440700/">http://code.activestate.com/recipes/440700/</a></div></blockquote>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Pinger.html b/docs/html/api/Cheetah.Tests.Pinger.html
deleted file mode 100644
index 9c0318c..0000000
--- a/docs/html/api/Cheetah.Tests.Pinger.html
+++ /dev/null
@@ -1,106 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Pinger module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Pinger.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Pinger">
-<span id="cheetah-tests-pinger-module"></span><h1>Cheetah.Tests.Pinger module<a class="headerlink" href="#module-Cheetah.Tests.Pinger" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Pinger.Pinger">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Pinger.</code><code class="descname">Pinger</code><span class="sig-paren">(</span><em>source=None</em>, <em>namespaces=None</em>, <em>searchList=None</em>, <em>file=None</em>, <em>filter='RawOrEncodedUnicode'</em>, <em>filtersLib=&lt;module 'Cheetah.Filters' from '/home/phd/current/projects/cheetah3/cheetah3/Cheetah/Filters.py'&gt;</em>, <em>errorCatcher=None</em>, <em>compilerSettings=Unspecified</em>, <em>_globalSetVars=None</em>, <em>_preBuiltSearchList=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Pinger.Pinger" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="Cheetah.Template.html#Cheetah.Template.Template" title="Cheetah.Template.Template"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Template.Template</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Pinger.Pinger.ping">
-<code class="descname">ping</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Pinger.Pinger.ping" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Regressions.html b/docs/html/api/Cheetah.Tests.Regressions.html
deleted file mode 100644
index 3bbf163..0000000
--- a/docs/html/api/Cheetah.Tests.Regressions.html
+++ /dev/null
@@ -1,228 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Regressions module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Regressions.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Regressions">
-<span id="cheetah-tests-regressions-module"></span><h1>Cheetah.Tests.Regressions module<a class="headerlink" href="#module-Cheetah.Tests.Regressions" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Regressions.CustomGetAttrClass">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Regressions.</code><code class="descname">CustomGetAttrClass</code><a class="headerlink" href="#Cheetah.Tests.Regressions.CustomGetAttrClass" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Tests.Regressions.GetAttrException">
-<em class="property">exception </em><code class="descclassname">Cheetah.Tests.Regressions.</code><code class="descname">GetAttrException</code><a class="headerlink" href="#Cheetah.Tests.Regressions.GetAttrException" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Regressions.GetAttrTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Regressions.</code><code class="descname">GetAttrTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.GetAttrTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<p>Test for an issue occurring when __getatttr__() raises an exception
-causing NameMapper to raise a NotFound exception</p>
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.GetAttrTest.test_NotFoundException">
-<code class="descname">test_NotFoundException</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.GetAttrTest.test_NotFoundException" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.GetAttrTest.test_ValidException">
-<code class="descname">test_ValidException</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.GetAttrTest.test_ValidException" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Regressions.InlineImportTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Regressions.</code><code class="descname">InlineImportTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.InlineImportTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.InlineImportTest.test_AutoImporting">
-<code class="descname">test_AutoImporting</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.InlineImportTest.test_AutoImporting" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.InlineImportTest.test_FromFooImportThing">
-<code class="descname">test_FromFooImportThing</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.InlineImportTest.test_FromFooImportThing" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="docutils">
-<dt>Verify that a bug introduced in v2.1.0 where an inline:</dt>
-<dd>#from module import class</dd>
-<dt>would result in the following code being generated:</dt>
-<dd>import class</dd>
-</dl>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.InlineImportTest.test_ImportFailModule">
-<code class="descname">test_ImportFailModule</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.InlineImportTest.test_ImportFailModule" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.InlineImportTest.test_ProperImportOfBadModule">
-<code class="descname">test_ProperImportOfBadModule</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.InlineImportTest.test_ProperImportOfBadModule" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.InlineImportTest.test_StuffBeforeImport_Legacy">
-<code class="descname">test_StuffBeforeImport_Legacy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.InlineImportTest.test_StuffBeforeImport_Legacy" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Regressions.</code><code class="descname">Mantis_Issue_11_Regression_Test</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<p>Test case for bug outlined in Mantis issue #11:</p>
-<p>Output:
-Traceback (most recent call last):</p>
-<blockquote>
-<div><dl class="docutils">
-<dt>File “test.py”, line 12, in &lt;module&gt;</dt>
-<dd>t.respond()</dd>
-</dl>
-<p>File “DynamicallyCompiledCheetahTemplate.py”, line 86, in respond
-File “/usr/lib64/python2.6/cgi.py”, line 1035, in escape</p>
-<blockquote>
-<div>s = s.replace(“&amp;”, “&amp;”) # Must be done first!</div></blockquote>
-</div></blockquote>
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test.test_FailingBehavior">
-<code class="descname">test_FailingBehavior</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test.test_FailingBehavior" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test.test_FailingBehaviorWithSetting">
-<code class="descname">test_FailingBehaviorWithSetting</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test.test_FailingBehaviorWithSetting" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Regressions.</code><code class="descname">Mantis_Issue_21_Regression_Test</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<p>Test case for bug outlined in issue #21</p>
-<p>Effectively &#64;staticmethod and &#64;classmethod
-decorated methods in templates don’t
-properly define the _filter local, which breaks
-when using the NameMapper</p>
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Regressions.</code><code class="descname">Mantis_Issue_22_Regression_Test</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<p>Test case for bug outlined in issue #22</p>
-<p>When using &#64;staticmethod and &#64;classmethod
-in conjunction with the #filter directive
-the generated code for the #filter is reliant
-on the <cite>self</cite> local, breaking the function</p>
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test.test_DefinedFilter">
-<code class="descname">test_DefinedFilter</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test.test_DefinedFilter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test.test_NoneFilter">
-<code class="descname">test_NoneFilter</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test.test_NoneFilter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.SyntaxAndOutput.html b/docs/html/api/Cheetah.Tests.SyntaxAndOutput.html
deleted file mode 100644
index f68dc7c..0000000
--- a/docs/html/api/Cheetah.Tests.SyntaxAndOutput.html
+++ /dev/null
@@ -1,3020 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.SyntaxAndOutput module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.SyntaxAndOutput">
-<span id="cheetah-tests-syntaxandoutput-module"></span><h1>Cheetah.Tests.SyntaxAndOutput module<a class="headerlink" href="#module-Cheetah.Tests.SyntaxAndOutput" title="Permalink to this headline">¶</a></h1>
-<p>Syntax and Output tests.</p>
-<p>TODO
-- #finally
-- #filter
-- #errorCatcher
-- #echo
-- #silent</p>
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AssertDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">AssertDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AssertDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AssertDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AssertDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #assert</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AssertDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AssertDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #assert that fails</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AssertDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AssertDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #assert with WS</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AttrDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">AttrDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AttrDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AttrDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#attr with int</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AttrDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#attr with string</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AttrDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#attr with expression</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AttrDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#attr with string + WS
-Should gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.AttrDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#attr with string + WS + leading text
-Shouldn’t gobble</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Backslashes</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.setUp" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.tearDown">
-<code class="descname">tearDown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.tearDown" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>a single using rawstrings</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>a single using rawstrings and lots of lines</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>a single without using rawstrings</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line from an apache conf file</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line from an apache conf file with many NEWLINES</p>
-<p>The NEWLINES are used to make sure that MethodCompiler.commitStrConst()
-is handling long and short strings in the same fashion. It uses
-triple-quotes for strings with lots of n in them and repr(theStr) for
-shorter strings with only a few newlines.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>test backslash handling in an included file</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>a single without using rawstrings plus many NEWLINES</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Backslashes.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Backslashes.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line from an apache conf file with single quotes and many NEWLINES</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">BlockDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#block without argstring</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block 1 escaped $placeholders + more WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>multiline #block $ on argstring</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block with $ on methodName</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block with an arg</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block with None for content</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block with nothing for content</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#block without argstring, gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#block with argstring, gobble WS</p>
-<p>Because blocks can be reused in multiple parts of the template
-arguments (!!with defaults!!) can be given.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#block with 2 args, gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#block with 2 nested blocks</p>
-<p>Blocks can be nested to any depth and the name of the block is optional
-for the #end block part: #end block OR #end block [name]</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block 1 escaped $placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #block 1 escaped $placeholders + WS</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BreakDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">BreakDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BreakDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BreakDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BreakDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#break with a #while</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BreakDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BreakDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#break with a #for</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BreakpointDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">BreakpointDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BreakpointDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#breakpoint part way through source code</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#breakpoint at BOF</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#breakpoint at EOF</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CGI">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">CGI</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CGI" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<p>CGI scripts with(out) the CGI environment and with(out) GET variables.</p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CGI.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CGI.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CGI.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CGI.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>A regular template.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CGI.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CGI.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>A CGI script.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CGI.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CGI.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>A (pseudo) Webware servlet.</p>
-<p>This uses the Python syntax escape to set
-self._CHEETAH__isControlledByWebKit.
-We could instead do
-‘#silent self._CHEETAH__isControlledByWebKit = True’,
-taking advantage of the fact that it will compile unchanged as long
-as there’s no ‘$’ in the statement. (It won’t compile with an ‘$’
-because that would convert to a function call, and you can’t assign
-to a function call.) Because this isn’t really being called from
-Webware, we’d better not use any Webware services! Likewise, we’d
-better not call $cgiImport() because it would be misled.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CGI.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CGI.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>A CGI script with a GET variable.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CacheDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">CacheDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CacheDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CacheDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CacheDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #cache + WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CacheDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #cache … #end cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CacheDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>2 #cache … #end cache blocks</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CacheDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested #cache blocks</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CacheDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>Make sure that partial directives don’t match</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">CallDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #call</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #call + WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>a longer #call</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#call with keyword #args</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#call with single-line keyword #args</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#call with python kwargs and cheetah output for the 1s positional
-arg</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#call with python kwargs and #args</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#call with python kwargs and #args, and using a function to get the
-function that will be called</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CallDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CallDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested #call directives</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CaptureDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">CaptureDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CaptureDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CaptureDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CaptureDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #capture</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CaptureDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CaptureDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>slightly more complex #capture</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Comments_MultiLine</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<p>Note: Multiline comments don’t gobble whitespace!</p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id1"><span class="problematic" id="id2">*</span></a># followed by WS
-Should gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>text around #* <a href="#id3"><span class="problematic" id="id4">*</span></a># containing #for directive and trailing whitespace
-which should be gobbled</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>Text around #* <a href="#id5"><span class="problematic" id="id6">*</span></a># containing #for directive and newlines:
-trailing whitespace which should be gobbled.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id7"><span class="problematic" id="id8">*</span></a># preceded and followed by WS
-Should gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id9"><span class="problematic" id="id10">*</span></a># followed by WS, with NEWLINE
-Shouldn’t gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id11"><span class="problematic" id="id12">*</span></a># preceded and followed by WS, with NEWLINE
-Shouldn’t gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id13"><span class="problematic" id="id14">*</span></a># containing nothing</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id15"><span class="problematic" id="id16">*</span></a># containing only NEWLINES</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id17"><span class="problematic" id="id18">*</span></a># containing $placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id19"><span class="problematic" id="id20">*</span></a># containing #for directive</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>text around #* <a href="#id21"><span class="problematic" id="id22">*</span></a># containing #for directive</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Comments_MultiLine_NoGobble</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<p>Multiline comments used to not gobble whitespace</p>
-<p>They do now, but this can be turned off with a compilerSetting.</p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id23"><span class="problematic" id="id24">*</span></a># followed by WS
-Shouldn’t gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id25"><span class="problematic" id="id26">*</span></a># preceded and followed by WS
-Shouldn’t gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id27"><span class="problematic" id="id28">*</span></a># followed by WS, with NEWLINE
-Shouldn’t gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id29"><span class="problematic" id="id30">*</span></a># preceded and followed by WS, with NEWLINE
-Shouldn’t gobble WS</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Comments_SingleLine</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>## followed by WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>## containing $placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>## containing #for directive</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>## followed by NEWLINE</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>## followed by text then NEWLINE</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>## gobbles leading WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>## followed by text then NEWLINE, + leading WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>## followed by EOF</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>## followed by EOF with leading WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>## gobble line
-with text on previous and following lines</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>## don’t gobble line
-with text on previous and following lines</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CompilerDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">CompilerDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CompilerDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CompilerDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CompilerDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>overriding the commentStartToken</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CompilerDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CompilerDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>overriding and resetting the commentStartToken</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">CompilerSettingsDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>overriding the cheetahVarStartToken</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>overriding the directiveStartToken</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>overriding the commentStartToken</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ContinueDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">ContinueDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ContinueDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ContinueDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ContinueDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#continue with a #while</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ContinueDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ContinueDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#continue with a #for</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DecoratorDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">DecoratorDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DecoratorDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DecoratorDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DecoratorDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #def with decorator</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DecoratorDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DecoratorDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with multiple decorators</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">DefDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def without argstring</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with <a href="#id31"><span class="problematic" id="id32">*</span></a>args + <a href="#id33"><span class="problematic" id="id34">**</span></a>KWs, gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #def with extra WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #def with extra WS and nested $placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #def escaped $placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #def 1 escaped $placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #def 1 escaped $placeholders + more WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test16">
-<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>multiline #def with $ on methodName</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test17">
-<code class="descname">test17</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test17" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #def with $ on methodName</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test18">
-<code class="descname">test18</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test18" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #def with an argument</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test19">
-<code class="descname">test19</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test19" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def that extends over two lines with arguments</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def without argstring, gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with argstring, gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with argstring, gobble WS, string used in call</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with argstring, gobble WS, list used in call</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with 2 args, gobble WS, list used in call</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with <a href="#id35"><span class="problematic" id="id36">*</span></a>args, gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with <a href="#id37"><span class="problematic" id="id38">**</span></a>KWs, gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with <a href="#id39"><span class="problematic" id="id40">*</span></a>args + <a href="#id41"><span class="problematic" id="id42">**</span></a>KWs, gobble WS</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefmacroDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">DefmacroDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefmacroDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefmacroDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefmacroDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DefmacroDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefmacroDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DummyClass">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">DummyClass</code><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DummyClass" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DummyClass.callIt">
-<code class="descname">callIt</code><span class="sig-paren">(</span><em>arg=1234</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DummyClass.callIt" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DummyClass.meth">
-<code class="descname">meth</code><span class="sig-paren">(</span><em>arg='arff'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DummyClass.meth" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DummyClass.meth1">
-<code class="descname">meth1</code><span class="sig-paren">(</span><em>arg='doo'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DummyClass.meth1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DummyClass.meth2">
-<code class="descname">meth2</code><span class="sig-paren">(</span><em>arg1='a1'</em>, <em>arg2='a2'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DummyClass.meth2" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.DummyClass.methWithPercentSignDefaultArg">
-<code class="descname">methWithPercentSignDefaultArg</code><span class="sig-paren">(</span><em>arg1='110%'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DummyClass.methWithPercentSignDefaultArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">EOLSlurpToken</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with 1 n</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with 1 n, leading whitespace
-Should gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with 1 n, leading content
-Shouldn’t gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with WS then n, leading content
-Shouldn’t gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with garbage chars then n, leading content
-Should NOT eat the garbage</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EchoDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">EchoDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EchoDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EchoDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EchoDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#echo 1234</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EmptyTemplate">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">EmptyTemplate</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EmptyTemplate" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EmptyTemplate.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EmptyTemplate.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EmptyTemplate.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EmptyTemplate.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>an empty string for the template</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EncodingDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">EncodingDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EncodingDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>basic #encoding</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>basic #encoding</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>basic #encoding</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>basic #encoding</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>basic #encoding</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>Using #encoding on the second line</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ErrorCatcherDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">ErrorCatcherDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ErrorCatcherDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ExtendsDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">ExtendsDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#extends Cheetah.Templates._SkeletonPage</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#extends Cheetah.Templates.SkeletonPage without #import</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#extends Cheetah.Templates.SkeletonPage.SkeletonPage without #import</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#extends with globals and searchList test</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">FilterDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter Filter</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter Strip – multi-line</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter StripSqueeze – canonicalize all whitespace to ‘ ‘</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter ReplaceNone with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter MaxLen – maxlen of 5</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter MaxLen – no maxlen</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter WebSafe – basic usage</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter WebSafe – also space</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter WebSafe – also space, without $ on the args</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter Strip – trailing newline</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.FilterDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>#filter Strip – no trailing newine</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">ForDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop with one local var</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop over list, using methods of the items</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop over list, using ($i,$j) style target list</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop over list, using i, (j,k) style target list</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #for</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>single line #for with 1 extra leading space</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>2 times single line #for</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test16">
-<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>false single line #for</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop with WS in loop</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop over list</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop over list, with #slurp</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop with explicit closures</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop with explicit closures and WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#for loop using another $var</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ForDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ForDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>test methods in for loops</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.GetVar">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">GetVar</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.GetVar" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.GetVar.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.GetVar.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>$getVar(‘$anInt’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.GetVar.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.GetVar.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>$getVar(‘anInt’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.GetVar.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.GetVar.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>$self.getVar(‘anInt’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.GetVar.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.GetVar.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>$getVar(‘bogus’, 1234)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.GetVar.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.GetVar.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>$getVar(‘$bogus’, 1234)</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.I18nDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">I18nDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.I18nDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.I18nDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.I18nDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #call</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">IfDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #if block</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if block using $*emptyString</p>
-<p>This should barf</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if block using invalid top-level $(placeholder) syntax - should barf</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if … #else if … #else … block using a $emptyString
-Same as test 8 but using else if instead of elif</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if# … #else # … block using a $emptyString with</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>single-line #if: simple</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>single-line #if: more complex</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test16">
-<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>single-line #if: with the words ‘else’ and ‘then’ in the output</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test17">
-<code class="descname">test17</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test17" title="Permalink to this definition">¶</a></dt>
-<dd><p>single-line #if:</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test18">
-<code class="descname">test18</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test18" title="Permalink to this definition">¶</a></dt>
-<dd><p>single-line #if:
-#else:</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #if block, with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #if block, with WS and explicit closures</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if block using $numOne</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if block using $zero</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if block using $emptyString</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if … #else … block using a $emptyString</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if … #elif … #else … block using a $emptyString</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IfDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IfDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>#if ‘not’ test, with #slurp</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">ImportDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#import math</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>#import os.path – use it with NameMapper turned off</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>#from math import *</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#import math + WS</p>
-<p>Should gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#import math + WS + leading text</p>
-<p>Shouldn’t gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#from math import syn</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#from math import cos + WS
-Should gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#from math import cos + WS + leading text
-Shouldn’t gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#from math import cos – use it</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#from math import cos,tan,sin – and use them</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>#import os.path – use it</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">ImportantExampleCases</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>how to make a comma-delimited list</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">IncludeDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.setUp" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.tearDown">
-<code class="descname">tearDown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.tearDown" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include raw of source $emptyString</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include of “parseTest.txt”, with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include of ‘parseTest.txt’, with WS and surrounding text</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include of ‘parseTest.txt’, with WS and explicit closure</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include raw of source $blockToBeParsed</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include raw of ‘parseTest.txt’</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include raw of $includeFileName</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include raw of $includeFileName, with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include raw of source= , with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include of $blockToBeParsed</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include of $blockToBeParsed, with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>#include of ‘parseTest.txt’, with WS</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Indenter">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Indenter</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Indenter" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Indenter.control">
-<code class="descname">control</code><em class="property"> = '\npublic class X\n{\n public void Foo(\n _input,\n _output);\n\n\n public int Bar(\n _str1,\n str2,\n _str3);\n\n\n public Object Add(\n value1,\n value);\n\n\n}\n//end of class\n\n\n\n'</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Indenter.control" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Indenter.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Indenter.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Indenter.searchList">
-<code class="descname">searchList</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Indenter.searchList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Indenter.source">
-<code class="descname">source</code><em class="property"> = '\npublic class X\n{\n #for $method in $methods\n $getMethod($method)\n\n #end for\n}\n//end of class\n\n#def getMethod($method)\n #indent ++\n public $getType($method) ${method.Name}($getParams($method.Params));\n #indent --\n#end def\n\n#def getParams($params)\n #indent off\n\n #for $counter in $range($len($params))\n #if $counter == len($params) - 1\n $params[$counter]#slurp\n #else:\n $params[$counter],\n #end if\n #end for\n #indent on\n#end def\n\n#def getType($method)\n #indent push\n #indent=0\n #if $method.Type == &quot;VT_VOID&quot;\n void#slurp\n #elif $method.Type == &quot;VT_INT&quot;\n int#slurp\n #elif $method.Type == &quot;VT_VARIANT&quot;\n Object#slurp\n #end if\n #indent pop\n#end def\n'</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Indenter.source" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Indenter.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Indenter.test1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">MiscComplexSyntax</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#set $c = {‘A’:0}[{}.get(‘a’, {‘a’ : ‘A’}[‘a’])]
-$c</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">NameMapper</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>autocalling</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested dictionary access - NameMapper style</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested dictionary access - Python style</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested dictionary access - alternating style</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested dictionary access using method - alternating style</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested dictionary access - NameMapper style - followed by method</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested dictionary access - alternating style - followed by method</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test16">
-<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>Nested dictionary access - NameMapper style - followed by method,
-then slice.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test17">
-<code class="descname">test17</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test17" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested dictionary access - Python style using a soft-coded key</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test18">
-<code class="descname">test18</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test18" title="Permalink to this definition">¶</a></dt>
-<dd><p>object method access</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test19">
-<code class="descname">test19</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test19" title="Permalink to this definition">¶</a></dt>
-<dd><p>object method access, followed by complex slice</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested autocalling</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test20">
-<code class="descname">test20</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test20" title="Permalink to this definition">¶</a></dt>
-<dd><p>object method access, followed by a very complex slice
-If it can pass this one, it’s safe to say it works!!</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test21">
-<code class="descname">test21</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test21" title="Permalink to this definition">¶</a></dt>
-<dd><p>object method access with % in the default arg for the meth.</p>
-<p>This tests a bug that Jeff Johnson found and submitted a patch to SF
-for.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>list subscription</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>list slicing</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>list slicing and subcription combined</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>dictionary access - NameMapper style</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>dictionary access - Python style</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>dictionary access combined with autocalled string method</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>dictionary access combined with string method</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NonTokens">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">NonTokens</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NonTokens" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NonTokens.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NonTokens.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>dollar signs not in Cheetah $vars</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NonTokens.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NonTokens.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>hash not in #directives</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NonTokens.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NonTokens.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>escapted comments</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NonTokens.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NonTokens.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>escapted multi-line comments</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NonTokens.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NonTokens.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 dollar sign</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.NonTokens.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NonTokens.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 dollar sign followed by EOL Slurp Token</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.OutputTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">OutputTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.OutputTest.DEBUGLEV">
-<code class="descname">DEBUGLEV</code><em class="property"> = 0</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest.DEBUGLEV" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.OutputTest.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = True</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.OutputTest.genClassCode">
-<code class="descname">genClassCode</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest.genClassCode" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.OutputTest.genModuleCode">
-<code class="descname">genModuleCode</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest.genModuleCode" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.OutputTest.report">
-<code class="descname">report</code><em class="property"> = '\nTemplate output mismatch:\n\n Input Template =\n%(template)s%(end)s\n\n Expected Output =\n%(expected)s%(end)s\n\n Actual Output =\n%(actual)s%(end)s'</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest.report" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.OutputTest.searchList">
-<code class="descname">searchList</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest.searchList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.OutputTest.verify">
-<code class="descname">verify</code><span class="sig-paren">(</span><em>input</em>, <em>expectedOutput</em>, <em>inputEncoding=None</em>, <em>outputEncoding=None</em>, <em>convertEOLs=&lt;class 'Cheetah.Tests.SyntaxAndOutput.Unspecified'&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest.verify" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">PSP</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.searchList">
-<code class="descname">searchList</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.searchList" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple &lt;%= [int] %&gt;</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>Using getVar and write within a PSP</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple &lt;%= [string] %&gt;</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple &lt;%= None %&gt;</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple &lt;%= [string] %&gt; + $anInt</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple &lt;%= [EXPR] %&gt; + $anInt</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>for loop in &lt;%%&gt;</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>for loop in &lt;%%&gt; and using &lt;%=i%&gt;</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>for loop in &lt;% $%&gt; and using &lt;%=i%&gt;</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PSP.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PSP.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>for loop in &lt;% $%&gt; and using &lt;%=i%&gt; plus extra text</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PassDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">PassDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PassDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PassDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PassDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#pass in a #try / #except block</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PassDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PassDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#pass in a #try / #except block + WS</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">PlaceholderStrings</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>some c’text $placeholder text’ strings</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>some c’text $placeholder text’ strings</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>some c’text $placeholder text’ strings</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>some c’text $placeholder text’ strings</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>some c’text $placeholder text’ strings</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>some c’text $placeholder text’ strings</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>some c’text $placeholder text’ strings</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Placeholders</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in () + WS + * cache</p>
-<p>Test to make sure that $*(&lt;WS&gt;&lt;identifier&gt;.. matches</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in {} + WS + <a href="#id43"><span class="problematic" id="id44">*</span></a>cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in [] + WS + <a href="#id45"><span class="problematic" id="id46">*</span></a>cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in {} + WS + <a href="#id47"><span class="problematic" id="id48">*</span></a>&lt;int&gt;*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in [] + WS + <a href="#id49"><span class="problematic" id="id50">*</span></a>&lt;int&gt;*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in {} + WS + <a href="#id51"><span class="problematic" id="id52">*</span></a>&lt;float&gt;*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test16">
-<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in [] + WS + <a href="#id53"><span class="problematic" id="id54">*</span></a>&lt;float&gt;*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test17">
-<code class="descname">test17</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test17" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder + <a href="#id55"><span class="problematic" id="id56">*</span></a>&lt;int&gt;*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test18">
-<code class="descname">test18</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test18" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder <a href="#id57"><span class="problematic" id="id58">*</span></a>&lt;float&gt;*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test19">
-<code class="descname">test19</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test19" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder surrounded by single quotes and multiple newlines</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>2 placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test20">
-<code class="descname">test20</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test20" title="Permalink to this definition">¶</a></dt>
-<dd><p>silent mode $!placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test21">
-<code class="descname">test21</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test21" title="Permalink to this definition">¶</a></dt>
-<dd><p>Make sure that $*caching is actually working</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>2 placeholders, back-to-back</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in ()</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in {}</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in []</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in () + WS</p>
-<p>Test to make sure that $(&lt;WS&gt;&lt;identifier&gt;.. matches</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in {} + WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in [] + WS</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Placeholders_Calls</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - no ()</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (‘’‘nstringn’‘’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (‘’‘nstring’n’‘’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (“”“nstringn”“”)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (string*int)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (int*int)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (int*float)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test16">
-<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (intn*nfloat)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test17">
-<code class="descname">test17</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test17" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with ($arg=float)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test18">
-<code class="descname">test18</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test18" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (arg=float)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test19">
-<code class="descname">test19</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test19" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, no enclosure</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with ()</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test20">
-<code class="descname">test20</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test20" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, no enclosure + with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test21">
-<code class="descname">test21</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test21" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, () enclosure + with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test22">
-<code class="descname">test22</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test22" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, {} enclosure + with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test23">
-<code class="descname">test23</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test23" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, [] enclosure + with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test24">
-<code class="descname">test24</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test24" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, () enclosure + <a href="#id59"><span class="problematic" id="id60">*</span></a>cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test25">
-<code class="descname">test25</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test25" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, () enclosure + <a href="#id61"><span class="problematic" id="id62">*</span></a>15*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test26">
-<code class="descname">test26</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test26" title="Permalink to this definition">¶</a></dt>
-<dd><p>a function call with the Python None kw.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (nn)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (nn) and $() enclosure</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (nn) and ${} enclosure</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (int)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (nintn)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (string)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>func placeholder - with (‘’‘string’‘’)</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Placeholders_Esc</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 escaped placeholder</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>2 escaped placeholders</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>2 escaped placeholders - back to back</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>2 escaped placeholders - nested</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>2 escaped placeholders - nested and enclosed</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Placeholders_Vals</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>string</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>string - with whitespace</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>empty string - with whitespace</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>int</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>float</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>list</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>None</p>
-<p>The default output filter is ReplaceNone.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>True, False</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>$_</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RaiseDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">RaiseDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RaiseDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #raise ValueError</p>
-<p>Should raise ValueError</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#raise ValueError in #if block</p>
-<p>Should raise ValueError</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#raise ValueError in #if block</p>
-<p>Shouldn’t raise ValueError</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RawDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">RawDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RawDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RawDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RawDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#raw till EOF</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RawDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RawDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#raw till #end raw</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RawDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RawDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#raw till #end raw gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RawDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RawDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#raw till #end raw using explicit directive closure
-Shouldn’t gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RawDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RawDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>single-line short form #raw:</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RawDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RawDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>Escape characters in a #raw block</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RepeatDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">RepeatDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RepeatDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>basic #repeat</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#repeat with numeric expression</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#repeat with placeholder</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#repeat with placeholder * num</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#repeat with placeholder and WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>single-line #repeat</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ReturnDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">ReturnDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ReturnDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#return’ing an int</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#return’ing an string</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#return’ing an string AND streaming other output via the transaction</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">SetDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test10">
-<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set global with a list</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test11">
-<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set global with a list and <a href="#id63"><span class="problematic" id="id64">*</span></a>cache</p>
-<p>Caching only works with global #set vars. Local vars are not accesible
-to the cache namespace.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test12">
-<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set global with a list and <a href="#id65"><span class="problematic" id="id66">*</span></a>&lt;int&gt;*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test13">
-<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set with a list and <a href="#id67"><span class="problematic" id="id68">*</span></a>&lt;float&gt;*cache</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test14">
-<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set without NameMapper on</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test15">
-<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set without $</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test16">
-<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set global without $</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test17">
-<code class="descname">test17</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test17" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set module without $</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test18">
-<code class="descname">test18</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test18" title="Permalink to this definition">¶</a></dt>
-<dd><p>#set with i,j=list style assignment</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test19">
-<code class="descname">test19</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test19" title="Permalink to this definition">¶</a></dt>
-<dd><p>#set with (i,j)=list style assignment</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set with no WS between operands</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test20">
-<code class="descname">test20</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test20" title="Permalink to this definition">¶</a></dt>
-<dd><p>#set with i, (j,k)=list style assignment</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#set + use of var</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#set + use in an #include</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#set with a dictionary</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#set with string, then used in #if block</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test7">
-<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set, gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test8">
-<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set, don’t gobble WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test9">
-<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set with a list</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SilentDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">SilentDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SilentDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SilentDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SilentDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#silent 1234</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SlurpDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">SlurpDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SlurpDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with 1 n</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with 1 n, leading whitespace
-Should gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with 1 n, leading content
-Shouldn’t gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with WS then n, leading content
-Shouldn’t gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#slurp with garbage chars then n, leading content
-Should eat the garbage</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.StopDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">StopDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.StopDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.StopDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.StopDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#stop part way through source code</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.StopDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.StopDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#stop at BOF</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.StopDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.StopDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#stop at EOF</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.StopDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.StopDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#stop in pos test block</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.StopDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.StopDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#stop in neg test block</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SuperDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">SuperDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SuperDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SuperDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SuperDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.TryDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">TryDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.TryDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.TryDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.TryDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #try</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.TryDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.TryDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#try / #except with #raise</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.TryDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.TryDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#try / #except with #raise + WS</p>
-<p>Should gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.TryDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.TryDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#try / #except with #raise + WS and leading text</p>
-<p>Shouldn’t gobble</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.TryDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.TryDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested #try / #except with #raise</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnicodeDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">UnicodeDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnicodeDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnicodeDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnicodeDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>basic #unicode</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnicodeStrings">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">UnicodeStrings</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnicodeStrings" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnicodeStrings.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnicodeStrings.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>unicode data in placeholder</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnicodeStrings.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnicodeStrings.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>unicode data in body</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnlessDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">UnlessDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnlessDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#unless 1</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#unless 0</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#unless $none</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#unless $numTwo</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#unless $numTwo with WS</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test6">
-<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>single-line #unless</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.Unspecified">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Unspecified</code><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Unspecified" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.VarExists">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">VarExists</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.VarExists" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.VarExists.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.VarExists.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>$varExists(‘$anInt’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.VarExists.test2">
-<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.VarExists.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>$varExists(‘anInt’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.VarExists.test3">
-<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.VarExists.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>$varExists(‘$anInt’)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.VarExists.test4">
-<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.VarExists.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>$varExists(‘$anInt’) combined with #if false</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.VarExists.test5">
-<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.VarExists.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>$varExists(‘$anInt’) combined with #if true</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.WhileDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">WhileDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.WhileDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.WhileDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.WhileDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #while with a counter</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">WhitespaceAfterDirectiveTokens</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens.test1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.SyntaxAndOutput.YieldDirective">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">YieldDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.YieldDirective" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.SyntaxAndOutput.YieldDirective.convertEOLs">
-<code class="descname">convertEOLs</code><em class="property"> = False</em><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.YieldDirective.convertEOLs" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.YieldDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.YieldDirective.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #yield</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.SyntaxAndOutput.dummyFunc">
-<code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">dummyFunc</code><span class="sig-paren">(</span><em>arg='Scooby'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.dummyFunc" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.SyntaxAndOutput.install_eols">
-<code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">install_eols</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.install_eols" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.SyntaxAndOutput.testdecorator">
-<code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">testdecorator</code><span class="sig-paren">(</span><em>func</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.testdecorator" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Template.html b/docs/html/api/Cheetah.Tests.Template.html
deleted file mode 100644
index 001f7bc..0000000
--- a/docs/html/api/Cheetah.Tests.Template.html
+++ /dev/null
@@ -1,249 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Template module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Template.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Template">
-<span id="cheetah-tests-template-module"></span><h1>Cheetah.Tests.Template module<a class="headerlink" href="#module-Cheetah.Tests.Template" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Template.ClassMethodSupport">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">ClassMethodSupport</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethodSupport" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Template.TemplateTest" title="Cheetah.Tests.Template.TemplateTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Template.TemplateTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethodSupport.test_BasicDecorator">
-<code class="descname">test_BasicDecorator</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethodSupport.test_BasicDecorator" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">ClassMethods_compile</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Template.TemplateTest" title="Cheetah.Tests.Template.TemplateTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Template.TemplateTest</span></code></a></p>
-<p>I am using the same Cheetah source for each test to root out clashes
-caused by the compile caching in Template.compile().</p>
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_baseclassArg">
-<code class="descname">test_baseclassArg</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_baseclassArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_basicUsage">
-<code class="descname">test_basicUsage</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_basicUsage" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_classNameArg">
-<code class="descname">test_classNameArg</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_classNameArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_compilationCache">
-<code class="descname">test_compilationCache</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_compilationCache" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_keepRefToGeneratedCodeArg">
-<code class="descname">test_keepRefToGeneratedCodeArg</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_keepRefToGeneratedCodeArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_mainMethodNameArg">
-<code class="descname">test_mainMethodNameArg</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_mainMethodNameArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_moduleFileCaching">
-<code class="descname">test_moduleFileCaching</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_moduleFileCaching" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_moduleGlobalsArg">
-<code class="descname">test_moduleGlobalsArg</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_moduleGlobalsArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_compile.test_moduleNameArg">
-<code class="descname">test_moduleNameArg</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_compile.test_moduleNameArg" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Template.ClassMethods_subclass">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">ClassMethods_subclass</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_subclass" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Template.TemplateTest" title="Cheetah.Tests.Template.TemplateTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Template.TemplateTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Template.ClassMethods_subclass.test_basicUsage">
-<code class="descname">test_basicUsage</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.ClassMethods_subclass.test_basicUsage" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Template.MultipleInheritanceSupport">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">MultipleInheritanceSupport</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.MultipleInheritanceSupport" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Template.TemplateTest" title="Cheetah.Tests.Template.TemplateTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Template.TemplateTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Template.MultipleInheritanceSupport.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.MultipleInheritanceSupport.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Template.Preprocessors">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">Preprocessors</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.Preprocessors" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Template.TemplateTest" title="Cheetah.Tests.Template.TemplateTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Template.TemplateTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Template.Preprocessors.test_basicUsage1">
-<code class="descname">test_basicUsage1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.Preprocessors.test_basicUsage1" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.Preprocessors.test_complexUsage">
-<code class="descname">test_complexUsage</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.Preprocessors.test_complexUsage" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.Preprocessors.test_i18n">
-<code class="descname">test_i18n</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.Preprocessors.test_i18n" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Template.Preprocessors.test_normalizePreprocessorArgVariants">
-<code class="descname">test_normalizePreprocessorArgVariants</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.Preprocessors.test_normalizePreprocessorArgVariants" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Template.StaticMethodSupport">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">StaticMethodSupport</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.StaticMethodSupport" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Template.TemplateTest" title="Cheetah.Tests.Template.TemplateTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Template.TemplateTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Template.StaticMethodSupport.test_BasicDecorator">
-<code class="descname">test_BasicDecorator</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.StaticMethodSupport.test_BasicDecorator" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Template.SubclassSearchListTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">SubclassSearchListTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.SubclassSearchListTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Template.TemplateTest" title="Cheetah.Tests.Template.TemplateTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Template.TemplateTest</span></code></a></p>
-<p>Verify that if we subclass Template, we can still
-use attributes on that subclass in the searchList</p>
-<dl class="method">
-<dt id="Cheetah.Tests.Template.SubclassSearchListTest.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.SubclassSearchListTest.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Template.TemplateTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">TemplateTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.TemplateTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Template.TryExceptImportTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Template.</code><code class="descname">TryExceptImportTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.TryExceptImportTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Template.TemplateTest" title="Cheetah.Tests.Template.TemplateTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Template.TemplateTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Template.TryExceptImportTest.test_FailCase">
-<code class="descname">test_FailCase</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Template.TryExceptImportTest.test_FailCase" title="Permalink to this definition">¶</a></dt>
-<dd><p>Test situation where an inline #import statement will get relocated</p>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Test.html b/docs/html/api/Cheetah.Tests.Test.html
deleted file mode 100644
index 6014342..0000000
--- a/docs/html/api/Cheetah.Tests.Test.html
+++ /dev/null
@@ -1,112 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Test module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.Tests.Test module</a><ul>
-<li><a class="reference internal" href="#todo">TODO</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Test.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Test">
-<span id="cheetah-tests-test-module"></span><h1>Cheetah.Tests.Test module<a class="headerlink" href="#module-Cheetah.Tests.Test" title="Permalink to this headline">¶</a></h1>
-<p>Core module of Cheetah’s Unit-testing framework</p>
-<div class="section" id="todo">
-<h2>TODO<a class="headerlink" href="#todo" title="Permalink to this headline">¶</a></h2>
-<p># combo tests
-# negative test cases for expected exceptions
-# black-box vs clear-box testing
-# do some tests that run the Template for long enough to check
-# that the refresh code works</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.Unicode.html b/docs/html/api/Cheetah.Tests.Unicode.html
deleted file mode 100644
index 06c3a76..0000000
--- a/docs/html/api/Cheetah.Tests.Unicode.html
+++ /dev/null
@@ -1,261 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.Unicode module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.Unicode.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.Unicode">
-<span id="cheetah-tests-unicode-module"></span><h1>Cheetah.Tests.Unicode module<a class="headerlink" href="#module-Cheetah.Tests.Unicode" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.CommandLineTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">CommandLineTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.CommandLineTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.CommandLineTest.createAndCompile">
-<code class="descname">createAndCompile</code><span class="sig-paren">(</span><em>source</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.CommandLineTest.createAndCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.EncodeUnicodeCompatTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">EncodeUnicodeCompatTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.EncodeUnicodeCompatTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<p>Taken initially from Red Hat’s bugzilla #529332
-<a class="reference external" href="https://bugzilla.redhat.com/show_bug.cgi?id=529332">https://bugzilla.redhat.com/show_bug.cgi?id=529332</a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.EncodeUnicodeCompatTest.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.EncodeUnicodeCompatTest.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.InlineSpanishTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">InlineSpanishTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.InlineSpanishTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.InlineSpanishTest.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.InlineSpanishTest.setUp" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.InlineSpanishTest.test_failure">
-<code class="descname">test_failure</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.InlineSpanishTest.test_failure" title="Permalink to this definition">¶</a></dt>
-<dd><p>Test a template lacking a proper #encoding tag</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.InlineSpanishTest.test_success">
-<code class="descname">test_success</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.InlineSpanishTest.test_success" title="Permalink to this definition">¶</a></dt>
-<dd><p>Test a template with a proper #encoding tag</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test1">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">JBQ_UTF8_Test1</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test1.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test1.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test2">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">JBQ_UTF8_Test2</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test2.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test2.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test3">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">JBQ_UTF8_Test3</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test3.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test3.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test4">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">JBQ_UTF8_Test4</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test4.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test4.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test5">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">JBQ_UTF8_Test5</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test5.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test5.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test6">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">JBQ_UTF8_Test6</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test6.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test6.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test7">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">JBQ_UTF8_Test7</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Unicode.CommandLineTest" title="Cheetah.Tests.Unicode.CommandLineTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Unicode.CommandLineTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test7.runTest">
-<code class="descname">runTest</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test7.runTest" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test8">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">JBQ_UTF8_Test8</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Unicode.CommandLineTest" title="Cheetah.Tests.Unicode.CommandLineTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Unicode.CommandLineTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test8.testDynamicCompile">
-<code class="descname">testDynamicCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test8.testDynamicCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.JBQ_UTF8_Test8.testStaticCompile">
-<code class="descname">testStaticCompile</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.JBQ_UTF8_Test8.testStaticCompile" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.Unicode.Unicode_in_SearchList_Test">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">Unicode_in_SearchList_Test</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.Unicode_in_SearchList_Test" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.Unicode.CommandLineTest" title="Cheetah.Tests.Unicode.CommandLineTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.Unicode.CommandLineTest</span></code></a></p>
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_BasicASCII">
-<code class="descname">test_BasicASCII</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_BasicASCII" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_Thai">
-<code class="descname">test_Thai</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_Thai" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_Thai_utf8">
-<code class="descname">test_Thai_utf8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_Thai_utf8" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.Unicode.loadModule">
-<code class="descclassname">Cheetah.Tests.Unicode.</code><code class="descname">loadModule</code><span class="sig-paren">(</span><em>moduleName</em>, <em>path=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Unicode.loadModule" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.html b/docs/html/api/Cheetah.Tests.html
deleted file mode 100644
index ed1dd17..0000000
--- a/docs/html/api/Cheetah.Tests.html
+++ /dev/null
@@ -1,130 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests package &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.Tests package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests">
-<span id="cheetah-tests-package"></span><h1>Cheetah.Tests package<a class="headerlink" href="#module-Cheetah.Tests" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Analyzer.html">Cheetah.Tests.Analyzer module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Boinker.html">Cheetah.Tests.Boinker module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.CheetahWrapper.html">Cheetah.Tests.CheetahWrapper module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Cheps.html">Cheetah.Tests.Cheps module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Filters.html">Cheetah.Tests.Filters module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Misc.html">Cheetah.Tests.Misc module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.NameMapper.html">Cheetah.Tests.NameMapper module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.NameMapper_pure.html">Cheetah.Tests.NameMapper_pure module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Parser.html">Cheetah.Tests.Parser module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Performance.html">Cheetah.Tests.Performance module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Pinger.html">Cheetah.Tests.Pinger module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Regressions.html">Cheetah.Tests.Regressions module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.SyntaxAndOutput.html">Cheetah.Tests.SyntaxAndOutput module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Template.html">Cheetah.Tests.Template module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Test.html">Cheetah.Tests.Test module</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Tests.Test.html#todo">TODO</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Unicode.html">Cheetah.Tests.Unicode module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.xmlrunner.html">Cheetah.Tests.xmlrunner module</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tests.xmlrunner.html b/docs/html/api/Cheetah.Tests.xmlrunner.html
deleted file mode 100644
index 6e12107..0000000
--- a/docs/html/api/Cheetah.Tests.xmlrunner.html
+++ /dev/null
@@ -1,235 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tests.xmlrunner module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tests.xmlrunner.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tests.xmlrunner">
-<span id="cheetah-tests-xmlrunner-module"></span><h1>Cheetah.Tests.xmlrunner module<a class="headerlink" href="#module-Cheetah.Tests.xmlrunner" title="Permalink to this headline">¶</a></h1>
-<p>XML Test Runner for PyUnit</p>
-<dl class="class">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestProgram">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.xmlrunner.</code><code class="descname">XMLTestProgram</code><span class="sig-paren">(</span><em>module='__main__'</em>, <em>defaultTest=None</em>, <em>argv=None</em>, <em>testRunner=None</em>, <em>testLoader=&lt;unittest.loader.TestLoader object&gt;</em>, <em>exit=True</em>, <em>verbosity=1</em>, <em>failfast=None</em>, <em>catchbreak=None</em>, <em>buffer=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestProgram" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.main.TestProgram</span></code></p>
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestProgram.runTests">
-<code class="descname">runTests</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestProgram.runTests" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunner">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.xmlrunner.</code><code class="descname">XMLTestRunner</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunner" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>A test runner that stores results in XML format compatible with JUnit.</p>
-<p>XMLTestRunner(stream=None) -&gt; XML test runner</p>
-<p>The XML file is written to the supplied stream. If stream is None, the
-results are stored in a file called TEST-&lt;module&gt;.&lt;class&gt;.xml in the
-current working directory (if not overridden with the path property),
-where &lt;module&gt; and &lt;class&gt; are the module and class name of the test class.</p>
-<dl class="attribute">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunner.path">
-<code class="descname">path</code><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunner.path" title="Permalink to this definition">¶</a></dt>
-<dd><p>The path where the XML files are stored</p>
-<p>This property is ignored when the XML file is written to a file stream.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunner.run">
-<code class="descname">run</code><span class="sig-paren">(</span><em>test</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunner.run" title="Permalink to this definition">¶</a></dt>
-<dd><p>Run the given test case or test suite.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest">
-<em class="property">class </em><code class="descclassname">Cheetah.Tests.xmlrunner.</code><code class="descname">XMLTestRunnerTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
-<dl class="class">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream">
-<em class="property">class </em><code class="descname">NullStream</code><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>A file-like object that discards everything written to it.</p>
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream.write">
-<code class="descname">write</code><span class="sig-paren">(</span><em>buffer</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream.write" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.setUp">
-<code class="descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.setUp" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_error">
-<code class="descname">test_error</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Regression test: Check whether a test run with a erroneous test
-matches a previous run.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_failure">
-<code class="descname">test_failure</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_failure" title="Permalink to this definition">¶</a></dt>
-<dd><p>Regression test: Check whether a test run with a failing test
-matches a previous run.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_no_tests">
-<code class="descname">test_no_tests</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_no_tests" title="Permalink to this definition">¶</a></dt>
-<dd><p>Regression test: Check whether a test run without any tests
-matches a previous run.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_stderr_capture">
-<code class="descname">test_stderr_capture</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_stderr_capture" title="Permalink to this definition">¶</a></dt>
-<dd><p>Regression test: Check whether a test run with output to stderr
-matches a previous run.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_stdout_capture">
-<code class="descname">test_stdout_capture</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_stdout_capture" title="Permalink to this definition">¶</a></dt>
-<dd><p>Regression test: Check whether a test run with output to stdout
-matches a previous run.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_success">
-<code class="descname">test_success</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_success" title="Permalink to this definition">¶</a></dt>
-<dd><p>Regression test: Check whether a test run with a successful test
-matches a previous run.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_unittests_changing_stderr">
-<code class="descname">test_unittests_changing_stderr</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_unittests_changing_stderr" title="Permalink to this definition">¶</a></dt>
-<dd><p>Check whether the XMLTestRunner recovers gracefully from unit tests
-that change stderr, but don’t change it back properly.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_unittests_changing_stdout">
-<code class="descname">test_unittests_changing_stdout</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_unittests_changing_stdout" title="Permalink to this definition">¶</a></dt>
-<dd><p>Check whether the XMLTestRunner recovers gracefully from unit tests
-that change stdout, but don’t change it back properly.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.xmlrunner.create_error">
-<code class="descclassname">Cheetah.Tests.xmlrunner.</code><code class="descname">create_error</code><span class="sig-paren">(</span><em>test</em>, <em>time</em>, <em>error</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.create_error" title="Permalink to this definition">¶</a></dt>
-<dd><p>Create a _TestInfo instance for an erroneous test.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.xmlrunner.create_failure">
-<code class="descclassname">Cheetah.Tests.xmlrunner.</code><code class="descname">create_failure</code><span class="sig-paren">(</span><em>test</em>, <em>time</em>, <em>failure</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.create_failure" title="Permalink to this definition">¶</a></dt>
-<dd><p>Create a _TestInfo instance for a failed test.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tests.xmlrunner.create_success">
-<code class="descclassname">Cheetah.Tests.xmlrunner.</code><code class="descname">create_success</code><span class="sig-paren">(</span><em>test</em>, <em>time</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.xmlrunner.create_success" title="Permalink to this definition">¶</a></dt>
-<dd><p>Create a _TestInfo instance for a successful test.</p>
-</dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Tests.xmlrunner.main">
-<code class="descclassname">Cheetah.Tests.xmlrunner.</code><code class="descname">main</code><a class="headerlink" href="#Cheetah.Tests.xmlrunner.main" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#Cheetah.Tests.xmlrunner.XMLTestProgram" title="Cheetah.Tests.xmlrunner.XMLTestProgram"><code class="xref py py-class docutils literal"><span class="pre">XMLTestProgram</span></code></a></p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.CGITemplate.html b/docs/html/api/Cheetah.Tools.CGITemplate.html
deleted file mode 100644
index 1ee292f..0000000
--- a/docs/html/api/Cheetah.Tools.CGITemplate.html
+++ /dev/null
@@ -1,158 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools.CGITemplate module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.CGITemplate.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools.CGITemplate">
-<span id="cheetah-tools-cgitemplate-module"></span><h1>Cheetah.Tools.CGITemplate module<a class="headerlink" href="#module-Cheetah.Tools.CGITemplate" title="Permalink to this headline">¶</a></h1>
-<p>A subclass of Cheetah.Template for use in CGI scripts.</p>
-<dl class="docutils">
-<dt>Usage in a template:</dt>
-<dd>#extends Cheetah.Tools.CGITemplate
-#implements respond
-$cgiHeaders#slurp</dd>
-</dl>
-<p>Usage in a template inheriting a Python class:
-1. The template</p>
-<blockquote>
-<div>#extends MyPythonClass
-#implements respond
-$cgiHeaders#slurp</div></blockquote>
-<ol class="arabic" start="2">
-<li><dl class="first docutils">
-<dt>The Python class</dt>
-<dd><p class="first">from Cheetah.Tools import CGITemplate
-class MyPythonClass(CGITemplate):</p>
-<blockquote class="last">
-<div><dl class="docutils">
-<dt>def cgiHeadersHook(self):</dt>
-<dd><p class="first last">return “Content-Type: text/html; charset=koi8-r</p>
-</dd>
-</dl>
-</div></blockquote>
-</dd>
-</dl>
-</li>
-</ol>
-<p>“</p>
-<p>To read GET/POST variables, use the .webInput method defined in
-Cheetah.Utils.WebInputMixin (available in all templates without importing
-anything), use Python’s ‘cgi’ module, or make your own arrangements.</p>
-<p>This class inherits from Cheetah.Template to make it usable in Cheetah’s
-single-inheritance model.</p>
-<dl class="class">
-<dt id="Cheetah.Tools.CGITemplate.CGITemplate">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.CGITemplate.</code><code class="descname">CGITemplate</code><span class="sig-paren">(</span><em>source=None</em>, <em>namespaces=None</em>, <em>searchList=None</em>, <em>file=None</em>, <em>filter='RawOrEncodedUnicode'</em>, <em>filtersLib=&lt;module 'Cheetah.Filters' from '/home/phd/current/projects/cheetah3/cheetah3/Cheetah/Filters.py'&gt;</em>, <em>errorCatcher=None</em>, <em>compilerSettings=Unspecified</em>, <em>_globalSetVars=None</em>, <em>_preBuiltSearchList=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.CGITemplate.CGITemplate" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="Cheetah.Template.html#Cheetah.Template.Template" title="Cheetah.Template.Template"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Template.Template</span></code></a></p>
-<p>Methods useful in CGI scripts.</p>
-<p>Any class that inherits this mixin must also inherit Cheetah.Servlet.</p>
-<dl class="method">
-<dt id="Cheetah.Tools.CGITemplate.CGITemplate.cgiHeaders">
-<code class="descname">cgiHeaders</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.CGITemplate.CGITemplate.cgiHeaders" title="Permalink to this definition">¶</a></dt>
-<dd><p>Outputs the CGI headers if this is a CGI script.</p>
-<p>Usage: $cgiHeaders#slurp
-Override .cgiHeadersHook() if you want to customize the headers.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.CGITemplate.CGITemplate.cgiHeadersHook">
-<code class="descname">cgiHeadersHook</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.CGITemplate.CGITemplate.cgiHeadersHook" title="Permalink to this definition">¶</a></dt>
-<dd><p>Override if you want to customize the CGI headers.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.CGITemplate.CGITemplate.isCgi">
-<code class="descname">isCgi</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.CGITemplate.CGITemplate.isCgi" title="Permalink to this definition">¶</a></dt>
-<dd><p>Is this a CGI script?</p>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.MondoReport.html b/docs/html/api/Cheetah.Tools.MondoReport.html
deleted file mode 100644
index ba59b3b..0000000
--- a/docs/html/api/Cheetah.Tools.MondoReport.html
+++ /dev/null
@@ -1,405 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools.MondoReport module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.MondoReport.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools.MondoReport">
-<span id="cheetah-tools-mondoreport-module"></span><h1>Cheetah.Tools.MondoReport module<a class="headerlink" href="#module-Cheetah.Tools.MondoReport" title="Permalink to this headline">¶</a></h1>
-<p>&#64;&#64;TR: This code is pretty much unsupported.</p>
-<p>MondoReport.py – Batching module for Python and Cheetah.</p>
-<p>Version 2001-Nov-18. Doesn’t do much practical yet, but the companion
-testMondoReport.py passes all its tests.
--Mike Orr (Iron)</p>
-<p>TODO: BatchRecord.prev/next/prev_batches/next_batches/query, prev.query,
-next.query.</p>
-<p>How about Report: .page(), .all(), .summary()? Or PageBreaker.</p>
-<dl class="class">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">IndexFormats</code><span class="sig-paren">(</span><em>index</em>, <em>item=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats" title="Permalink to this definition">¶</a></dt>
-<dd><p>Eight ways to display a subscript index.
-(“Fifty ways to leave your lover….”)</p>
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.Letter">
-<code class="descname">Letter</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.Letter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.Roman">
-<code class="descname">Roman</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.Roman" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.even">
-<code class="descname">even</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.even" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.even_i">
-<code class="descname">even_i</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.even_i" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.index">
-<code class="descname">index</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.index" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.item">
-<code class="descname">item</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.item" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.letter">
-<code class="descname">letter</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.letter" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.number">
-<code class="descname">number</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.number" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.odd">
-<code class="descname">odd</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.odd" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.odd_i">
-<code class="descname">odd_i</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.odd_i" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.IndexFormats.roman">
-<code class="descname">roman</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.IndexFormats.roman" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tools.MondoReport.MondoReport">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">MondoReport</code><span class="sig-paren">(</span><em>origlist</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.MondoReport" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="Cheetah.Tools.MondoReport.MondoReport.all">
-<code class="descname">all</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.MondoReport.all" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.MondoReport.batch">
-<code class="descname">batch</code><span class="sig-paren">(</span><em>size</em>, <em>start</em>, <em>overlap=0</em>, <em>orphan=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.MondoReport.batch" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns list of ($r, $a, $b)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.MondoReport.page">
-<code class="descname">page</code><span class="sig-paren">(</span><em>size</em>, <em>start</em>, <em>overlap=0</em>, <em>orphan=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.MondoReport.page" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns list of ($r, $a, $b)</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.MondoReport.summary">
-<code class="descname">summary</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.MondoReport.summary" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="exception">
-<dt id="Cheetah.Tools.MondoReport.NegativeError">
-<em class="property">exception </em><code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">NegativeError</code><a class="headerlink" href="#Cheetah.Tools.MondoReport.NegativeError" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.ValueError</span></code></p>
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tools.MondoReport.PrevNextPage">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">PrevNextPage</code><span class="sig-paren">(</span><em>origList</em>, <em>size</em>, <em>start</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.PrevNextPage" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tools.MondoReport.RecordStats">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">RecordStats</code><span class="sig-paren">(</span><em>origList</em>, <em>index</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tools.MondoReport.IndexFormats" title="Cheetah.Tools.MondoReport.IndexFormats"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tools.MondoReport.IndexFormats</span></code></a>, <a class="reference internal" href="#Cheetah.Tools.MondoReport.ValuesGetterMixin" title="Cheetah.Tools.MondoReport.ValuesGetterMixin"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tools.MondoReport.ValuesGetterMixin</span></code></a></p>
-<p>The statistics that depend on the current record.</p>
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.first">
-<code class="descname">first</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.first" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.firstValue">
-<code class="descname">firstValue</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.firstValue" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.last">
-<code class="descname">last</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.last" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.lastValue">
-<code class="descname">lastValue</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.lastValue" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.length">
-<code class="descname">length</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.length" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.next">
-<code class="descname">next</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.next" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.nextPages">
-<code class="descname">nextPages</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.nextPages" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.next_batches">
-<code class="descname">next_batches</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.next_batches" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.percentOfTotal">
-<code class="descname">percentOfTotal</code><span class="sig-paren">(</span><em>field=None</em>, <em>suffix='%'</em>, <em>default='N/A'</em>, <em>decimals=2</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.percentOfTotal" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.prev">
-<code class="descname">prev</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.prev" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.prevPages">
-<code class="descname">prevPages</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.prevPages" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.prev_batches">
-<code class="descname">prev_batches</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.prev_batches" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.RecordStats.summary">
-<code class="descname">summary</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.RecordStats.summary" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.Roman">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">Roman</code><span class="sig-paren">(</span><em>n</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Roman" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tools.MondoReport.Summary">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">Summary</code><span class="sig-paren">(</span><em>origList</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tools.MondoReport.ValuesGetterMixin" title="Cheetah.Tools.MondoReport.ValuesGetterMixin"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tools.MondoReport.ValuesGetterMixin</span></code></a></p>
-<p>The summary statistics, that don’t depend on the current record.</p>
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.average">
-<code class="descname">average</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.average" title="Permalink to this definition">¶</a></dt>
-<dd><p>Always returns a floating point number.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.count">
-<code class="descname">count</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.count" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.max">
-<code class="descname">max</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.max" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.mean">
-<code class="descname">mean</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.mean" title="Permalink to this definition">¶</a></dt>
-<dd><p>Always returns a floating point number.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.median">
-<code class="descname">median</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.median" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.min">
-<code class="descname">min</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.min" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.standardDeviation">
-<code class="descname">standardDeviation</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.standardDeviation" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.standardDeviation_n">
-<code class="descname">standardDeviation_n</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.standardDeviation_n" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.sum">
-<code class="descname">sum</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.sum" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.total">
-<code class="descname">total</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.total" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.variance">
-<code class="descname">variance</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.variance" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.MondoReport.Summary.variance_n">
-<code class="descname">variance_n</code><span class="sig-paren">(</span><em>field=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.Summary.variance_n" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Tools.MondoReport.ValuesGetterMixin">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">ValuesGetterMixin</code><span class="sig-paren">(</span><em>origList</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.ValuesGetterMixin" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.isNonNegative">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">isNonNegative</code><span class="sig-paren">(</span><em>v</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.isNonNegative" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.isNotNone">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">isNotNone</code><span class="sig-paren">(</span><em>v</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.isNotNone" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.isNumeric">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">isNumeric</code><span class="sig-paren">(</span><em>v</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.isNumeric" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.mean">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">mean</code><span class="sig-paren">(</span><em>lis</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.mean" title="Permalink to this definition">¶</a></dt>
-<dd><p>Always returns a floating-point number.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.median">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">median</code><span class="sig-paren">(</span><em>lis</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.median" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.standardDeviation">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">standardDeviation</code><span class="sig-paren">(</span><em>lis</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.standardDeviation" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.standardDeviation_n">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">standardDeviation_n</code><span class="sig-paren">(</span><em>lis</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.standardDeviation_n" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.sum">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">sum</code><span class="sig-paren">(</span><em>lis</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.sum" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.variance">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">variance</code><span class="sig-paren">(</span><em>lis</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.variance" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.MondoReport.variance_n">
-<code class="descclassname">Cheetah.Tools.MondoReport.</code><code class="descname">variance_n</code><span class="sig-paren">(</span><em>lis</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.MondoReport.variance_n" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.RecursiveNull.html b/docs/html/api/Cheetah.Tools.RecursiveNull.html
deleted file mode 100644
index 49145b5..0000000
--- a/docs/html/api/Cheetah.Tools.RecursiveNull.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools.RecursiveNull module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.RecursiveNull.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools.RecursiveNull">
-<span id="cheetah-tools-recursivenull-module"></span><h1>Cheetah.Tools.RecursiveNull module<a class="headerlink" href="#module-Cheetah.Tools.RecursiveNull" title="Permalink to this headline">¶</a></h1>
-<p>Nothing, but in a friendly way. Good for filling in for objects you want to
-hide. If $form.f1 is a RecursiveNull object, then
-$form.f1.anything[“you”].might(“use”) will resolve to the empty string.</p>
-<p>This module was contributed by Ian Bicking.</p>
-<dl class="class">
-<dt id="Cheetah.Tools.RecursiveNull.RecursiveNull">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.RecursiveNull.</code><code class="descname">RecursiveNull</code><a class="headerlink" href="#Cheetah.Tools.RecursiveNull.RecursiveNull" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.SiteHierarchy.html b/docs/html/api/Cheetah.Tools.SiteHierarchy.html
deleted file mode 100644
index ea5d9d7..0000000
--- a/docs/html/api/Cheetah.Tools.SiteHierarchy.html
+++ /dev/null
@@ -1,148 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools.SiteHierarchy module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools.SiteHierarchy">
-<span id="cheetah-tools-sitehierarchy-module"></span><h1>Cheetah.Tools.SiteHierarchy module<a class="headerlink" href="#module-Cheetah.Tools.SiteHierarchy" title="Permalink to this headline">¶</a></h1>
-<p>Create menus and crumbs from a site hierarchy.</p>
-<p>You define the site hierarchy as lists/tuples. Each location in the hierarchy
-is a (url, description) tuple. Each list has the base URL/text in the 0
-position, and all the children coming after it. Any child can be a list,
-representing further depth to the hierarchy. See the end of the file for an
-example hierarchy.</p>
-<p>Use Hierarchy(contents, currentURL), where contents is this hierarchy, and
-currentURL is the position you are currently in.
-The menubar and crumbs methods give you the HTML output.</p>
-<p>There are methods you can override to customize the HTML output.</p>
-<dl class="class">
-<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.SiteHierarchy.</code><code class="descname">Hierarchy</code><span class="sig-paren">(</span><em>hierarchy</em>, <em>currentURL</em>, <em>prefix=''</em>, <em>menuCSSClass=None</em>, <em>crumbCSSClass=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.SiteHierarchy.Hierarchy" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="method">
-<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy.crumbLink">
-<code class="descname">crumbLink</code><span class="sig-paren">(</span><em>url</em>, <em>text</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.SiteHierarchy.Hierarchy.crumbLink" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy.crumbSeperator">
-<code class="descname">crumbSeperator</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.SiteHierarchy.Hierarchy.crumbSeperator" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy.crumbTerminator">
-<code class="descname">crumbTerminator</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.SiteHierarchy.Hierarchy.crumbTerminator" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy.crumbs">
-<code class="descname">crumbs</code><span class="sig-paren">(</span><em>crumbCSSClass=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.SiteHierarchy.Hierarchy.crumbs" title="Permalink to this definition">¶</a></dt>
-<dd><p>The home&gt;where&gt;you&gt;are crumbs</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy.emptyCrumb">
-<code class="descname">emptyCrumb</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.SiteHierarchy.Hierarchy.emptyCrumb" title="Permalink to this definition">¶</a></dt>
-<dd><p>When you are at the homepage</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy.menuLink">
-<code class="descname">menuLink</code><span class="sig-paren">(</span><em>url</em>, <em>text</em>, <em>indent</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.SiteHierarchy.Hierarchy.menuLink" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy.menuList">
-<code class="descname">menuList</code><span class="sig-paren">(</span><em>menuCSSClass=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.SiteHierarchy.Hierarchy.menuList" title="Permalink to this definition">¶</a></dt>
-<dd><p>An indented menu list</p>
-</dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.html b/docs/html/api/Cheetah.Tools.html
deleted file mode 100644
index 13364e9..0000000
--- a/docs/html/api/Cheetah.Tools.html
+++ /dev/null
@@ -1,144 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools package &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.Tools package</a><ul>
-<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools">
-<span id="cheetah-tools-package"></span><h1>Cheetah.Tools package<a class="headerlink" href="#module-Cheetah.Tools" title="Permalink to this headline">¶</a></h1>
-<p>This package contains classes, functions, objects and packages contributed
-by Cheetah users. They are not used by Cheetah itself. There is no
-guarantee that this directory will be included in Cheetah releases, that
-these objects will remain here forever, or that they will remain
-backward-compatible.</p>
-<div class="section" id="subpackages">
-<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.turbocheetah.html">Cheetah.Tools.turbocheetah package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Tools.turbocheetah.html#subpackages">Subpackages</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.html">Cheetah.Tools.turbocheetah.tests package</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.html#submodules">Submodules</a><ul>
-<li class="toctree-l5"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.test_template.html">Cheetah.Tools.turbocheetah.tests.test_template module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Tools.turbocheetah.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.turbocheetah.cheetahsupport.html">Cheetah.Tools.turbocheetah.cheetahsupport module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.CGITemplate.html">Cheetah.Tools.CGITemplate module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.MondoReport.html">Cheetah.Tools.MondoReport module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.RecursiveNull.html">Cheetah.Tools.RecursiveNull module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.SiteHierarchy.html">Cheetah.Tools.SiteHierarchy module</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html b/docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html
deleted file mode 100644
index b714196..0000000
--- a/docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html
+++ /dev/null
@@ -1,133 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools.turbocheetah.cheetahsupport module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools.turbocheetah.cheetahsupport">
-<span id="cheetah-tools-turbocheetah-cheetahsupport-module"></span><h1>Cheetah.Tools.turbocheetah.cheetahsupport module<a class="headerlink" href="#module-Cheetah.Tools.turbocheetah.cheetahsupport" title="Permalink to this headline">¶</a></h1>
-<p>Template support for Cheetah</p>
-<dl class="class">
-<dt id="Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.turbocheetah.cheetahsupport.</code><code class="descname">TurboCheetah</code><span class="sig-paren">(</span><em>extra_vars_func=None</em>, <em>options=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="attribute">
-<dt id="Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.extension">
-<code class="descname">extension</code><em class="property"> = 'tmpl'</em><a class="headerlink" href="#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.extension" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template">
-<code class="descname">load_template</code><span class="sig-paren">(</span><em>template=None</em>, <em>template_string=None</em>, <em>template_file=None</em>, <em>loadingSite=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template" title="Permalink to this definition">¶</a></dt>
-<dd><p>Searches for a template along the Python path.</p>
-<p>Template files must end in “.tmpl” and be in legitimate packages.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_file">
-<code class="descname">load_template_file</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_file" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_module">
-<code class="descname">load_template_module</code><span class="sig-paren">(</span><em>classname</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_module" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_string">
-<code class="descname">load_template_string</code><span class="sig-paren">(</span><em>content</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_string" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.render">
-<code class="descname">render</code><span class="sig-paren">(</span><em>info</em>, <em>format='html'</em>, <em>fragment=False</em>, <em>template=None</em>, <em>template_string=None</em>, <em>template_file=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.render" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.turbocheetah.html b/docs/html/api/Cheetah.Tools.turbocheetah.html
deleted file mode 100644
index 87e9cc5..0000000
--- a/docs/html/api/Cheetah.Tools.turbocheetah.html
+++ /dev/null
@@ -1,163 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools.turbocheetah package &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.Tools.turbocheetah package</a><ul>
-<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.turbocheetah.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools.turbocheetah">
-<span id="cheetah-tools-turbocheetah-package"></span><h1>Cheetah.Tools.turbocheetah package<a class="headerlink" href="#module-Cheetah.Tools.turbocheetah" title="Permalink to this headline">¶</a></h1>
-<dl class="class">
-<dt id="Cheetah.Tools.turbocheetah.TurboCheetah">
-<em class="property">class </em><code class="descclassname">Cheetah.Tools.turbocheetah.</code><code class="descname">TurboCheetah</code><span class="sig-paren">(</span><em>extra_vars_func=None</em>, <em>options=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.TurboCheetah" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="attribute">
-<dt id="Cheetah.Tools.turbocheetah.TurboCheetah.extension">
-<code class="descname">extension</code><em class="property"> = 'tmpl'</em><a class="headerlink" href="#Cheetah.Tools.turbocheetah.TurboCheetah.extension" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.TurboCheetah.load_template">
-<code class="descname">load_template</code><span class="sig-paren">(</span><em>template=None</em>, <em>template_string=None</em>, <em>template_file=None</em>, <em>loadingSite=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.TurboCheetah.load_template" title="Permalink to this definition">¶</a></dt>
-<dd><p>Searches for a template along the Python path.</p>
-<p>Template files must end in “.tmpl” and be in legitimate packages.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.TurboCheetah.load_template_file">
-<code class="descname">load_template_file</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.TurboCheetah.load_template_file" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.TurboCheetah.load_template_module">
-<code class="descname">load_template_module</code><span class="sig-paren">(</span><em>classname</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.TurboCheetah.load_template_module" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.TurboCheetah.load_template_string">
-<code class="descname">load_template_string</code><span class="sig-paren">(</span><em>content</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.TurboCheetah.load_template_string" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Tools.turbocheetah.TurboCheetah.render">
-<code class="descname">render</code><span class="sig-paren">(</span><em>info</em>, <em>format='html'</em>, <em>fragment=False</em>, <em>template=None</em>, <em>template_string=None</em>, <em>template_file=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.TurboCheetah.render" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<div class="section" id="subpackages">
-<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.html">Cheetah.Tools.turbocheetah.tests package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.test_template.html">Cheetah.Tools.turbocheetah.tests.test_template module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.turbocheetah.cheetahsupport.html">Cheetah.Tools.turbocheetah.cheetahsupport module</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.turbocheetah.tests.html b/docs/html/api/Cheetah.Tools.turbocheetah.tests.html
deleted file mode 100644
index f14e7a6..0000000
--- a/docs/html/api/Cheetah.Tools.turbocheetah.tests.html
+++ /dev/null
@@ -1,111 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools.turbocheetah.tests package &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.Tools.turbocheetah.tests package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools.turbocheetah.tests">
-<span id="cheetah-tools-turbocheetah-tests-package"></span><h1>Cheetah.Tools.turbocheetah.tests package<a class="headerlink" href="#module-Cheetah.Tools.turbocheetah.tests" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.test_template.html">Cheetah.Tools.turbocheetah.tests.test_template module</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html b/docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html
deleted file mode 100644
index fdb5562..0000000
--- a/docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html
+++ /dev/null
@@ -1,115 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Tools.turbocheetah.tests.test_template module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Tools.turbocheetah.tests.test_template">
-<span id="cheetah-tools-turbocheetah-tests-test-template-module"></span><h1>Cheetah.Tools.turbocheetah.tests.test_template module<a class="headerlink" href="#module-Cheetah.Tools.turbocheetah.tests.test_template" title="Permalink to this headline">¶</a></h1>
-<dl class="function">
-<dt id="Cheetah.Tools.turbocheetah.tests.test_template.test_normal">
-<code class="descclassname">Cheetah.Tools.turbocheetah.tests.test_template.</code><code class="descname">test_normal</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.tests.test_template.test_normal" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.turbocheetah.tests.test_template.test_path">
-<code class="descclassname">Cheetah.Tools.turbocheetah.tests.test_template.</code><code class="descname">test_path</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.tests.test_template.test_path" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.turbocheetah.tests.test_template.test_search">
-<code class="descclassname">Cheetah.Tools.turbocheetah.tests.test_template.</code><code class="descname">test_search</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.tests.test_template.test_search" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Tools.turbocheetah.tests.test_template.test_string">
-<code class="descclassname">Cheetah.Tools.turbocheetah.tests.test_template.</code><code class="descname">test_string</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tools.turbocheetah.tests.test_template.test_string" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Unspecified.html b/docs/html/api/Cheetah.Unspecified.html
deleted file mode 100644
index 82e78cd..0000000
--- a/docs/html/api/Cheetah.Unspecified.html
+++ /dev/null
@@ -1,95 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Unspecified module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Unspecified.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Unspecified">
-<span id="cheetah-unspecified-module"></span><h1>Cheetah.Unspecified module<a class="headerlink" href="#module-Cheetah.Unspecified" title="Permalink to this headline">¶</a></h1>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Utils.Indenter.html b/docs/html/api/Cheetah.Utils.Indenter.html
deleted file mode 100644
index aa7dbe8..0000000
--- a/docs/html/api/Cheetah.Utils.Indenter.html
+++ /dev/null
@@ -1,269 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Utils.Indenter module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Utils.Indenter.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Utils.Indenter">
-<span id="cheetah-utils-indenter-module"></span><h1>Cheetah.Utils.Indenter module<a class="headerlink" href="#module-Cheetah.Utils.Indenter" title="Permalink to this headline">¶</a></h1>
-<p>Indentation maker.
-&#64;&#64;TR: this code is unsupported and largely undocumented …</p>
-<p>This version is based directly on code by Robert Kuzelj
-&lt;<a class="reference external" href="mailto:robert_kuzelj&#37;&#52;&#48;yahoo&#46;com">robert_kuzelj<span>&#64;</span>yahoo<span>&#46;</span>com</a>&gt; and uses his directive syntax. Some classes and
-attributes have been renamed. Indentation is output via
-$self._CHEETAH__indenter.indent() to prevent ‘_indenter’ being looked up on the
-searchList and another one being found. The directive syntax will
-soon be changed somewhat.</p>
-<dl class="class">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor">
-<em class="property">class </em><code class="descclassname">Cheetah.Utils.Indenter.</code><code class="descname">IndentProcessor</code><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>Preprocess #indent tags.</p>
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.ARGS">
-<code class="descname">ARGS</code><em class="property"> = 'args'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.ARGS" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.CHAR">
-<code class="descname">CHAR</code><em class="property"> = 'char'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.CHAR" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.DEC">
-<code class="descname">DEC</code><em class="property"> = '--'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.DEC" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.DIRECTIVE">
-<code class="descname">DIRECTIVE</code><em class="property"> = &lt;_sre.SRE_Pattern object&gt;</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.DIRECTIVE" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.INC">
-<code class="descname">INC</code><em class="property"> = '++'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.INC" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.INDENT_DIR">
-<code class="descname">INDENT_DIR</code><em class="property"> = &lt;_sre.SRE_Pattern object&gt;</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.INDENT_DIR" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.LINE_SEP">
-<code class="descname">LINE_SEP</code><em class="property"> = '\n'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.LINE_SEP" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.OFF">
-<code class="descname">OFF</code><em class="property"> = 'off'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.OFF" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.ON">
-<code class="descname">ON</code><em class="property"> = 'on'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.ON" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.POP">
-<code class="descname">POP</code><em class="property"> = 'pop'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.POP" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.PUSH">
-<code class="descname">PUSH</code><em class="property"> = 'push'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.PUSH" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.SET">
-<code class="descname">SET</code><em class="property"> = '='</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.SET" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.WHITESPACES">
-<code class="descname">WHITESPACES</code><em class="property"> = &lt;_sre.SRE_Pattern object&gt;</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.WHITESPACES" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.WS">
-<code class="descname">WS</code><em class="property"> = 'ws'</em><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.WS" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.IndentProcessor.process">
-<code class="descname">process</code><span class="sig-paren">(</span><em>_txt</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.IndentProcessor.process" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="Cheetah.Utils.Indenter.Indenter">
-<em class="property">class </em><code class="descclassname">Cheetah.Utils.Indenter.</code><code class="descname">Indenter</code><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
-<p>A class that keeps track of the current indentation level.
-.indent() returns the appropriate amount of indentation.</p>
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.Indenter.Chars">
-<code class="descname">Chars</code><em class="property"> = ' '</em><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.Chars" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.Indenter.Level">
-<code class="descname">Level</code><em class="property"> = 0</em><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.Level" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.Indenter.LevelStack">
-<code class="descname">LevelStack</code><em class="property"> = []</em><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.LevelStack" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="attribute">
-<dt id="Cheetah.Utils.Indenter.Indenter.On">
-<code class="descname">On</code><em class="property"> = 1</em><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.On" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.dec">
-<code class="descname">dec</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.dec" title="Permalink to this definition">¶</a></dt>
-<dd><p>decrement can only be applied to values greater zero
-values below zero don’t make any sense at all!</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.inc">
-<code class="descname">inc</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.inc" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.indent">
-<code class="descname">indent</code><span class="sig-paren">(</span><em>_default=0</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.indent" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.off">
-<code class="descname">off</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.off" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.on">
-<code class="descname">on</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.on" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.pop">
-<code class="descname">pop</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.pop" title="Permalink to this definition">¶</a></dt>
-<dd><p>the levestack can not become -1. any attempt to do so
-sets the level to 0!</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.push">
-<code class="descname">push</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.push" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.setChar">
-<code class="descname">setChar</code><span class="sig-paren">(</span><em>_chars</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.setChar" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="method">
-<dt id="Cheetah.Utils.Indenter.Indenter.setLevel">
-<code class="descname">setLevel</code><span class="sig-paren">(</span><em>_level</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.Indenter.setLevel" title="Permalink to this definition">¶</a></dt>
-<dd><p>the leve can’t be less than zero. any attempt to do so
-sets the level automatically to zero!</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Utils.Indenter.indentize">
-<code class="descclassname">Cheetah.Utils.Indenter.</code><code class="descname">indentize</code><span class="sig-paren">(</span><em>source</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Indenter.indentize" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Utils.Misc.html b/docs/html/api/Cheetah.Utils.Misc.html
deleted file mode 100644
index a400c9a..0000000
--- a/docs/html/api/Cheetah.Utils.Misc.html
+++ /dev/null
@@ -1,138 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Utils.Misc module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Utils.Misc.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Utils.Misc">
-<span id="cheetah-utils-misc-module"></span><h1>Cheetah.Utils.Misc module<a class="headerlink" href="#module-Cheetah.Utils.Misc" title="Permalink to this headline">¶</a></h1>
-<p>Miscellaneous functions/objects used by Cheetah but also useful standalone.</p>
-<dl class="function">
-<dt id="Cheetah.Utils.Misc.checkKeywords">
-<code class="descclassname">Cheetah.Utils.Misc.</code><code class="descname">checkKeywords</code><span class="sig-paren">(</span><em>dic</em>, <em>legalKeywords</em>, <em>what='argument'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Misc.checkKeywords" title="Permalink to this definition">¶</a></dt>
-<dd><p>Verify no illegal keyword arguments were passed to a function.</p>
-<dl class="docutils">
-<dt>in <span class="classifier-delimiter">:</span> <span class="classifier">dic, dictionary (<a href="#id1"><span class="problematic" id="id2">**</span></a>kw in the calling routine).</span></dt>
-<dd>legalKeywords, list of strings, the keywords that are allowed.
-what, string, suffix for error message (see function source).</dd>
-</dl>
-<p>out: None.
-exc: TypeError if ‘dic’ contains a key not in ‘legalKeywords’.
-called by: Cheetah.Template.__init__()</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Utils.Misc.die">
-<code class="descclassname">Cheetah.Utils.Misc.</code><code class="descname">die</code><span class="sig-paren">(</span><em>reason</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Misc.die" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Utils.Misc.mkdirsWithPyInitFiles">
-<code class="descclassname">Cheetah.Utils.Misc.</code><code class="descname">mkdirsWithPyInitFiles</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Misc.mkdirsWithPyInitFiles" title="Permalink to this definition">¶</a></dt>
-<dd><p>Same as os.makedirs (mkdir ‘path’ and all missing parent directories)
-but also puts a Python ‘__init__.py’ file in every directory it
-creates. Does nothing (without creating an ‘__init__.py’ file) if the
-directory already exists.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Utils.Misc.removeFromList">
-<code class="descclassname">Cheetah.Utils.Misc.</code><code class="descname">removeFromList</code><span class="sig-paren">(</span><em>list_</em>, <em>*elements</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Misc.removeFromList" title="Permalink to this definition">¶</a></dt>
-<dd><p>Save as <a href="#id3"><span class="problematic" id="id4">list_</span></a>.remove(each element) but don’t raise an error if
-element is missing. Modifies ‘<a href="#id5"><span class="problematic" id="id6">list_</span></a>’ in place! Returns None.</p>
-</dd></dl>
-
-<dl class="function">
-<dt id="Cheetah.Utils.Misc.useOrRaise">
-<code class="descclassname">Cheetah.Utils.Misc.</code><code class="descname">useOrRaise</code><span class="sig-paren">(</span><em>thing</em>, <em>errmsg=''</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.Misc.useOrRaise" title="Permalink to this definition">¶</a></dt>
-<dd><p>Raise ‘thing’ if it’s a subclass of Exception. Otherwise return it.</p>
-<p>Called by: Cheetah.Servlet.cgiImport()</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Utils.WebInputMixin.html b/docs/html/api/Cheetah.Utils.WebInputMixin.html
deleted file mode 100644
index f40946d..0000000
--- a/docs/html/api/Cheetah.Utils.WebInputMixin.html
+++ /dev/null
@@ -1,103 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Utils.WebInputMixin module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Utils.WebInputMixin.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Utils.WebInputMixin">
-<span id="cheetah-utils-webinputmixin-module"></span><h1>Cheetah.Utils.WebInputMixin module<a class="headerlink" href="#module-Cheetah.Utils.WebInputMixin" title="Permalink to this headline">¶</a></h1>
-<p>Provides helpers for Template.webInput(), a method for importing web
-transaction variables in bulk. See the docstring of webInput for full details.</p>
-<dl class="exception">
-<dt id="Cheetah.Utils.WebInputMixin.NonNumericInputError">
-<em class="property">exception </em><code class="descclassname">Cheetah.Utils.WebInputMixin.</code><code class="descname">NonNumericInputError</code><a class="headerlink" href="#Cheetah.Utils.WebInputMixin.NonNumericInputError" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">exceptions.ValueError</span></code></p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Utils.html b/docs/html/api/Cheetah.Utils.html
deleted file mode 100644
index c45e00b..0000000
--- a/docs/html/api/Cheetah.Utils.html
+++ /dev/null
@@ -1,116 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Utils package &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah.Utils package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Utils.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Utils">
-<span id="cheetah-utils-package"></span><h1>Cheetah.Utils package<a class="headerlink" href="#module-Cheetah.Utils" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Utils.Indenter.html">Cheetah.Utils.Indenter module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Utils.Misc.html">Cheetah.Utils.Misc module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Utils.WebInputMixin.html">Cheetah.Utils.WebInputMixin module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Utils.htmlDecode.html">Cheetah.Utils.htmlDecode module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Utils.htmlEncode.html">Cheetah.Utils.htmlEncode module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Utils.statprof.html">Cheetah.Utils.statprof module</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Utils.htmlDecode.html b/docs/html/api/Cheetah.Utils.htmlDecode.html
deleted file mode 100644
index 3b0113f..0000000
--- a/docs/html/api/Cheetah.Utils.htmlDecode.html
+++ /dev/null
@@ -1,104 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Utils.htmlDecode module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Utils.htmlDecode.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Utils.htmlDecode">
-<span id="cheetah-utils-htmldecode-module"></span><h1>Cheetah.Utils.htmlDecode module<a class="headerlink" href="#module-Cheetah.Utils.htmlDecode" title="Permalink to this headline">¶</a></h1>
-<p>This is a copy of the htmlDecode function in Webware.</p>
-<p>&#64;&#64;TR: It implemented more efficiently.</p>
-<dl class="function">
-<dt id="Cheetah.Utils.htmlDecode.htmlDecode">
-<code class="descclassname">Cheetah.Utils.htmlDecode.</code><code class="descname">htmlDecode</code><span class="sig-paren">(</span><em>s, codes=[['&quot;', '&amp;quot;'], ['&gt;', '&amp;gt;'], ['&lt;', '&amp;lt;'], ['&amp;', '&amp;amp;']]</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.htmlDecode.htmlDecode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the ASCII decoded version of the given HTML string. This does
-NOT remove normal HTML tags like &lt;p&gt;. It is the inverse of htmlEncode().</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Utils.htmlEncode.html b/docs/html/api/Cheetah.Utils.htmlEncode.html
deleted file mode 100644
index 9734d25..0000000
--- a/docs/html/api/Cheetah.Utils.htmlEncode.html
+++ /dev/null
@@ -1,104 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Utils.htmlEncode module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Utils.htmlEncode.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Utils.htmlEncode">
-<span id="cheetah-utils-htmlencode-module"></span><h1>Cheetah.Utils.htmlEncode module<a class="headerlink" href="#module-Cheetah.Utils.htmlEncode" title="Permalink to this headline">¶</a></h1>
-<p>This is a copy of the htmlEncode function in Webware.</p>
-<p>&#64;&#64;TR: It implemented more efficiently.</p>
-<dl class="function">
-<dt id="Cheetah.Utils.htmlEncode.htmlEncode">
-<code class="descclassname">Cheetah.Utils.htmlEncode.</code><code class="descname">htmlEncode</code><span class="sig-paren">(</span><em>s, codes=[['&amp;', '&amp;amp;'], ['&lt;', '&amp;lt;'], ['&gt;', '&amp;gt;'], ['&quot;', '&amp;quot;']]</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Utils.htmlEncode.htmlEncode" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the HTML encoded version of the given string. This is useful to
-display a plain ASCII text string on a web page.</p>
-</dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Utils.statprof.html b/docs/html/api/Cheetah.Utils.statprof.html
deleted file mode 100644
index c715bcc..0000000
--- a/docs/html/api/Cheetah.Utils.statprof.html
+++ /dev/null
@@ -1,95 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Utils.statprof module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Utils.statprof.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah-utils-statprof-module">
-<h1>Cheetah.Utils.statprof module<a class="headerlink" href="#cheetah-utils-statprof-module" title="Permalink to this headline">¶</a></h1>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.Version.html b/docs/html/api/Cheetah.Version.html
deleted file mode 100644
index 9bc76ab..0000000
--- a/docs/html/api/Cheetah.Version.html
+++ /dev/null
@@ -1,100 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.Version module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.Version.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.Version">
-<span id="cheetah-version-module"></span><h1>Cheetah.Version module<a class="headerlink" href="#module-Cheetah.Version" title="Permalink to this headline">¶</a></h1>
-<dl class="function">
-<dt id="Cheetah.Version.convertVersionStringToTuple">
-<code class="descclassname">Cheetah.Version.</code><code class="descname">convertVersionStringToTuple</code><span class="sig-paren">(</span><em>s</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Version.convertVersionStringToTuple" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.compat.html b/docs/html/api/Cheetah.compat.html
deleted file mode 100644
index 0a7502f..0000000
--- a/docs/html/api/Cheetah.compat.html
+++ /dev/null
@@ -1,95 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.compat module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.compat.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.compat">
-<span id="cheetah-compat-module"></span><h1>Cheetah.compat module<a class="headerlink" href="#module-Cheetah.compat" title="Permalink to this headline">¶</a></h1>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.convertTmplPathToModuleName.html b/docs/html/api/Cheetah.convertTmplPathToModuleName.html
deleted file mode 100644
index 20fc0b8..0000000
--- a/docs/html/api/Cheetah.convertTmplPathToModuleName.html
+++ /dev/null
@@ -1,100 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah.convertTmplPathToModuleName module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah.convertTmplPathToModuleName">
-<span id="cheetah-converttmplpathtomodulename-module"></span><h1>Cheetah.convertTmplPathToModuleName module<a class="headerlink" href="#module-Cheetah.convertTmplPathToModuleName" title="Permalink to this headline">¶</a></h1>
-<dl class="function">
-<dt id="Cheetah.convertTmplPathToModuleName.convertTmplPathToModuleName">
-<code class="descclassname">Cheetah.convertTmplPathToModuleName.</code><code class="descname">convertTmplPathToModuleName</code><span class="sig-paren">(</span><em>tmplPath</em>, <em>_pathNameTransChars='________________________________________________0123456789_______ABCDEFGHIJKLMNOPQRSTUVWXYZ______abcdefghijklmnopqrstuvwxyz_____________________________________________________________________________________________________________________________________'</em>, <em>splitdrive=&lt;function splitdrive&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.convertTmplPathToModuleName.convertTmplPathToModuleName" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/Cheetah.html b/docs/html/api/Cheetah.html
deleted file mode 100644
index 61d0b49..0000000
--- a/docs/html/api/Cheetah.html
+++ /dev/null
@@ -1,246 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah package &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah package</a><ul>
-<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/Cheetah.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="module-Cheetah">
-<span id="cheetah-package"></span><h1>Cheetah package<a class="headerlink" href="#module-Cheetah" title="Permalink to this headline">¶</a></h1>
-<p>Cheetah is an open source template engine and code generation tool.</p>
-<p>It can be used standalone or combined with other tools and frameworks. Web
-development is its principle use, but Cheetah is very flexible and is also
-being used to generate C++ game code, Java, sql, form emails and even Python
-code.</p>
-<dl class="docutils">
-<dt>Homepage, issue tracker</dt>
-<dd><a class="reference external" href="https://github.com/CheetahTemplate3/cheetah3">https://github.com/CheetahTemplate3/cheetah3</a></dd>
-<dt>Documentation</dt>
-<dd><a class="reference external" href="http://cheetahtemplate.org/">http://cheetahtemplate.org/</a></dd>
-</dl>
-<div class="section" id="subpackages">
-<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Macros.html">Cheetah.Macros package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Macros.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Macros.I18n.html">Cheetah.Macros.I18n module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Templates.html">Cheetah.Templates package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Templates.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Templates.SkeletonPage.html">Cheetah.Templates.SkeletonPage module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.html">Cheetah.Tests package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Tests.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Analyzer.html">Cheetah.Tests.Analyzer module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Boinker.html">Cheetah.Tests.Boinker module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.CheetahWrapper.html">Cheetah.Tests.CheetahWrapper module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Cheps.html">Cheetah.Tests.Cheps module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Filters.html">Cheetah.Tests.Filters module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Misc.html">Cheetah.Tests.Misc module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.NameMapper.html">Cheetah.Tests.NameMapper module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.NameMapper_pure.html">Cheetah.Tests.NameMapper_pure module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Parser.html">Cheetah.Tests.Parser module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Performance.html">Cheetah.Tests.Performance module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Pinger.html">Cheetah.Tests.Pinger module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Regressions.html">Cheetah.Tests.Regressions module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.SyntaxAndOutput.html">Cheetah.Tests.SyntaxAndOutput module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Template.html">Cheetah.Tests.Template module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Test.html">Cheetah.Tests.Test module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Tests.Test.html#todo">TODO</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Unicode.html">Cheetah.Tests.Unicode module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.xmlrunner.html">Cheetah.Tests.xmlrunner module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tools.html">Cheetah.Tools package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Tools.html#subpackages">Subpackages</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.turbocheetah.html">Cheetah.Tools.turbocheetah package</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Tools.turbocheetah.html#subpackages">Subpackages</a><ul>
-<li class="toctree-l5"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.html">Cheetah.Tools.turbocheetah.tests package</a><ul>
-<li class="toctree-l6"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.html#submodules">Submodules</a><ul>
-<li class="toctree-l7"><a class="reference internal" href="Cheetah.Tools.turbocheetah.tests.test_template.html">Cheetah.Tools.turbocheetah.tests.test_template module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Tools.turbocheetah.html#submodules">Submodules</a><ul>
-<li class="toctree-l5"><a class="reference internal" href="Cheetah.Tools.turbocheetah.cheetahsupport.html">Cheetah.Tools.turbocheetah.cheetahsupport module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Tools.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.CGITemplate.html">Cheetah.Tools.CGITemplate module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.MondoReport.html">Cheetah.Tools.MondoReport module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.RecursiveNull.html">Cheetah.Tools.RecursiveNull module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.SiteHierarchy.html">Cheetah.Tools.SiteHierarchy module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Utils.html">Cheetah.Utils package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.Utils.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Utils.Indenter.html">Cheetah.Utils.Indenter module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Utils.Misc.html">Cheetah.Utils.Misc module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Utils.WebInputMixin.html">Cheetah.Utils.WebInputMixin module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Utils.htmlDecode.html">Cheetah.Utils.htmlDecode module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Utils.htmlEncode.html">Cheetah.Utils.htmlEncode module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Utils.statprof.html">Cheetah.Utils.statprof module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div class="section" id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.CacheRegion.html">Cheetah.CacheRegion module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.CacheStore.html">Cheetah.CacheStore module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.CheetahWrapper.html">Cheetah.CheetahWrapper module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Compiler.html">Cheetah.Compiler module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.DirectiveAnalyzer.html">Cheetah.DirectiveAnalyzer module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Django.html">Cheetah.Django module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.DummyTransaction.html">Cheetah.DummyTransaction module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.ErrorCatchers.html">Cheetah.ErrorCatchers module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.FileUtils.html">Cheetah.FileUtils module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Filters.html">Cheetah.Filters module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.ImportHooks.html">Cheetah.ImportHooks module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.ImportManager.html">Cheetah.ImportManager module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.NameMapper.html">Cheetah.NameMapper module</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.NameMapper.html#overview">Overview</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.NameMapper.html#details">Details</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.NameMapper.html#dictionary-access-a">DICTIONARY ACCESS (a)</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.NameMapper.html#autocalling-b-d">AUTOCALLING (b,d)</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.NameMapper.html#leaving-out-self-c-d">LEAVING OUT ‘self’ (c,d)</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.NameMapper.html#namespace-cascading-d">NAMESPACE CASCADING (d)</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.NameMapper.html#implementation-details">Implementation details</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.NameMapper.html#performance-and-the-c-version">Performance and the C version</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Parser.html">Cheetah.Parser module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Servlet.html">Cheetah.Servlet module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.SettingsManager.html">Cheetah.SettingsManager module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.SourceReader.html">Cheetah.SourceReader module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Template.html">Cheetah.Template module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.TemplateCmdLineIface.html">Cheetah.TemplateCmdLineIface module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Unspecified.html">Cheetah.Unspecified module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.Version.html">Cheetah.Version module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.compat.html">Cheetah.compat module</a></li>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.convertTmplPathToModuleName.html">Cheetah.convertTmplPathToModuleName module</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/api/modules.html b/docs/html/api/modules.html
deleted file mode 100644
index 7379aa6..0000000
--- a/docs/html/api/modules.html
+++ /dev/null
@@ -1,158 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/api/modules.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah">
-<h1>Cheetah<a class="headerlink" href="#cheetah" title="Permalink to this headline">¶</a></h1>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="Cheetah.html">Cheetah package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.html#subpackages">Subpackages</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Macros.html">Cheetah.Macros package</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Macros.html#submodules">Submodules</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Templates.html">Cheetah.Templates package</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Templates.html#submodules">Submodules</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.html">Cheetah.Tests package</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Tests.html#submodules">Submodules</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tools.html">Cheetah.Tools package</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Tools.html#subpackages">Subpackages</a></li>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Tools.html#submodules">Submodules</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Utils.html">Cheetah.Utils package</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.Utils.html#submodules">Submodules</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="Cheetah.html#submodules">Submodules</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.CacheRegion.html">Cheetah.CacheRegion module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.CacheStore.html">Cheetah.CacheStore module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.CheetahWrapper.html">Cheetah.CheetahWrapper module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Compiler.html">Cheetah.Compiler module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.DirectiveAnalyzer.html">Cheetah.DirectiveAnalyzer module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Django.html">Cheetah.Django module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.DummyTransaction.html">Cheetah.DummyTransaction module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.ErrorCatchers.html">Cheetah.ErrorCatchers module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.FileUtils.html">Cheetah.FileUtils module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Filters.html">Cheetah.Filters module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.ImportHooks.html">Cheetah.ImportHooks module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.ImportManager.html">Cheetah.ImportManager module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.NameMapper.html">Cheetah.NameMapper module</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.NameMapper.html#overview">Overview</a></li>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.NameMapper.html#details">Details</a></li>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.NameMapper.html#implementation-details">Implementation details</a></li>
-<li class="toctree-l4"><a class="reference internal" href="Cheetah.NameMapper.html#performance-and-the-c-version">Performance and the C version</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Parser.html">Cheetah.Parser module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Servlet.html">Cheetah.Servlet module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.SettingsManager.html">Cheetah.SettingsManager module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.SourceReader.html">Cheetah.SourceReader module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Template.html">Cheetah.Template module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.TemplateCmdLineIface.html">Cheetah.TemplateCmdLineIface module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Unspecified.html">Cheetah.Unspecified module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.Version.html">Cheetah.Version module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.compat.html">Cheetah.compat module</a></li>
-<li class="toctree-l3"><a class="reference internal" href="Cheetah.convertTmplPathToModuleName.html">Cheetah.convertTmplPathToModuleName module</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/authors.html b/docs/html/authors.html
deleted file mode 100644
index 74f1de5..0000000
--- a/docs/html/authors.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Authors and contributors &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="News" href="news.html" />
- <link rel="prev" title="Cheetah3, the Python-Powered Template Engine" href="index.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="news.html" title="News"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="index.html" title="Cheetah3, the Python-Powered Template Engine"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="index.html"
- title="previous chapter">Cheetah3, the Python-Powered Template Engine</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="news.html"
- title="next chapter">News</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/authors.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="authors-and-contributors">
-<h1>Authors and contributors<a class="headerlink" href="#authors-and-contributors" title="Permalink to this headline">¶</a></h1>
-<p>Cheetah was originally written by Tavis Rudd &lt;tavis at damnsimple.com&gt;.</p>
-<p>Contributions have been made by:</p>
-<ul class="simple">
-<li>Mike Orr &lt;sluggoster at gmail.com&gt;</li>
-<li>Chuck Esterbrook &lt;echuck at mindspring.com&gt;</li>
-<li>Shannon JJ Behrens &lt;jjinux at gmail.com&gt;</li>
-<li>Ian Bicking &lt;ian at ianbicking.org&gt;</li>
-<li>R. Tyler Croy &lt;tyler at monkeypox.org&gt;</li>
-<li>James Abbatiello &lt;abbeyj at gmail.com&gt;</li>
-<li>Jean-Baptiste Quenot &lt;jbq at caraldi.com&gt;</li>
-<li>Marc Abramowitz &lt;marc at marc-abramowitz.com&gt;</li>
-<li>Mike Bonnet &lt;mikeb at redhat.com&gt;</li>
-<li>Doug Knight &lt;karmix0 at gmail.com&gt;</li>
-<li>Jon Siddle &lt;js at corefiling.co.uk&gt;</li>
-<li>Anwesha Das &lt;anwesha at das.community&gt;</li>
-<li>Arun Kumar &lt;arunkakorp at gmail.com&gt;</li>
-<li>Austin Haigh &lt;austin at haigh.com&gt;</li>
-<li>Darren Yin &lt;darren.yin at gmail.com&gt;</li>
-<li>Evan Klitzke &lt;evan at yelp.com&gt;</li>
-<li>Kurt Schwehr &lt;schwehr at google.com&gt;</li>
-<li>Lakshmi Vyasarajan &lt;lakshmi.vyas at gmail.com&gt;</li>
-<li>Mika Eloranta &lt;mel at ohmu.fi&gt;</li>
-<li>mikola &lt;mikola at tut.by&gt;</li>
-<li>Adam Karpierz &lt;python at python.pl&gt;</li>
-<li>Jonathan Ross Rogers &lt;jrogers at socialserve.com&gt;</li>
-<li>Mathias Stearn &lt;redbeard0531 at gmail.com&gt;</li>
-<li>Oleg Broytman &lt;<a class="reference external" href="mailto:phd&#37;&#52;&#48;phdru&#46;name">phd<span>&#64;</span>phdru<span>&#46;</span>name</a>&gt;</li>
-</ul>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="news.html" title="News"
- >next</a> |</li>
- <li class="right" >
- <a href="index.html" title="Cheetah3, the Python-Powered Template Engine"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/chep.html b/docs/html/chep.html
deleted file mode 100644
index 140ce1c..0000000
--- a/docs/html/chep.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah Enhancement Proposals &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="(#1) CHEP Purpose and Guidelines" href="cheps/1_chep.html" />
- <link rel="prev" title="Directives: Import, Inheritance, Declaration and Assignment" href="dev_guide/inheritanceEtc.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="cheps/1_chep.html" title="(#1) CHEP Purpose and Guidelines"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="dev_guide/inheritanceEtc.html" title="Directives: Import, Inheritance, Declaration and Assignment"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah Enhancement Proposals</a><ul>
-<li><a class="reference internal" href="#existing-cheps">Existing CHEPs</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="dev_guide/inheritanceEtc.html"
- title="previous chapter">Directives: Import, Inheritance, Declaration and Assignment</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="cheps/1_chep.html"
- title="next chapter">(#1) CHEP Purpose and Guidelines</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/chep.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah-enhancement-proposals">
-<h1>Cheetah Enhancement Proposals<a class="headerlink" href="#cheetah-enhancement-proposals" title="Permalink to this headline">¶</a></h1>
-<p>The concept of the <strong>Cheetah Enhancement Proposal</strong> is similar to the
-<a class="reference external" href="http://www.python.org/dev/peps/">Python Enhancement Proposal</a> in that
-they are used to outline the future development of Cheetah as both a
-language and a framework.</p>
-<div class="section" id="existing-cheps">
-<h2>Existing CHEPs<a class="headerlink" href="#existing-cheps" title="Permalink to this headline">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="cheps/1_chep.html">(#1) CHEP Purpose and Guidelines</a></li>
-<li class="toctree-l1"><a class="reference internal" href="cheps/2_import.html">(#2) Conditionalized #import behavior</a></li>
-<li class="toctree-l1"><a class="reference internal" href="cheps/3_super.html">(#3) Exposing of super() and self via Template searchList</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="cheps/1_chep.html" title="(#1) CHEP Purpose and Guidelines"
- >next</a> |</li>
- <li class="right" >
- <a href="dev_guide/inheritanceEtc.html" title="Directives: Import, Inheritance, Declaration and Assignment"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/cheps/1_chep.html b/docs/html/cheps/1_chep.html
deleted file mode 100644
index 8536b02..0000000
--- a/docs/html/cheps/1_chep.html
+++ /dev/null
@@ -1,161 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>(#1) CHEP Purpose and Guidelines &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="(#2) Conditionalized #import behavior" href="2_import.html" />
- <link rel="prev" title="Cheetah Enhancement Proposals" href="../chep.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="2_import.html" title="(#2) Conditionalized #import behavior"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="../chep.html" title="Cheetah Enhancement Proposals"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../chep.html" accesskey="U">Cheetah Enhancement Proposals</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">(#1) CHEP Purpose and Guidelines</a><ul>
-<li><a class="reference internal" href="#abstract">Abstract</a></li>
-<li><a class="reference internal" href="#copyright">Copyright</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="../chep.html"
- title="previous chapter">Cheetah Enhancement Proposals</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="2_import.html"
- title="next chapter">(#2) Conditionalized #import behavior</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/cheps/1_chep.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="chep-purpose-and-guidelines">
-<h1>(#1) CHEP Purpose and Guidelines<a class="headerlink" href="#chep-purpose-and-guidelines" title="Permalink to this headline">¶</a></h1>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">CHEP:</th><td class="field-body">1</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Title:</th><td class="field-body">CHEP Purpose and Guidelines</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Version:</th><td class="field-body">1</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Author:</th><td class="field-body">R Tyler Ballance &lt;tyler at slide.com&gt;</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Status:</th><td class="field-body">Active</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Type:</th><td class="field-body">Process</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Content-Type:</th><td class="field-body">text/x-rst</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Created:</th><td class="field-body">07-Jun-2009</td>
-</tr>
-</tbody>
-</table>
-<hr class="docutils" />
-<div class="section" id="abstract">
-<h2>Abstract<a class="headerlink" href="#abstract" title="Permalink to this headline">¶</a></h2>
-<p>One can consider the basis for all CHEP documents to be
-modeled after <a class="reference external" href="http://www.python.org/dev/peps/pep-0001/">PEP #1</a>,
-for this reason you should refer to <a class="reference external" href="http://www.python.org/dev/peps/pep-0001/">PEP #1</a>
-for the true CHEP “purpose and guidelines” instead of them being
-enumerated here (and duplicated).</p>
-</div>
-<div class="section" id="copyright">
-<h2>Copyright<a class="headerlink" href="#copyright" title="Permalink to this headline">¶</a></h2>
-<p>This document has been placed in the public domain.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="2_import.html" title="(#2) Conditionalized #import behavior"
- >next</a> |</li>
- <li class="right" >
- <a href="../chep.html" title="Cheetah Enhancement Proposals"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../chep.html" >Cheetah Enhancement Proposals</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/cheps/2_import.html b/docs/html/cheps/2_import.html
deleted file mode 100644
index 44b8874..0000000
--- a/docs/html/cheps/2_import.html
+++ /dev/null
@@ -1,254 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>(#2) Conditionalized #import behavior &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="(#3) Exposing of super() and self via Template searchList" href="3_super.html" />
- <link rel="prev" title="(#1) CHEP Purpose and Guidelines" href="1_chep.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="3_super.html" title="(#3) Exposing of super() and self via Template searchList"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="1_chep.html" title="(#1) CHEP Purpose and Guidelines"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../chep.html" accesskey="U">Cheetah Enhancement Proposals</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">(#2) Conditionalized #import behavior</a><ul>
-<li><a class="reference internal" href="#abstract">Abstract</a></li>
-<li><a class="reference internal" href="#motivation">Motivation</a></li>
-<li><a class="reference internal" href="#specification">Specification</a></li>
-<li><a class="reference internal" href="#rationale">Rationale</a></li>
-<li><a class="reference internal" href="#backwards-compatibility">Backwards Compatibility</a></li>
-<li><a class="reference internal" href="#reference-implementation">Reference Implementation</a></li>
-<li><a class="reference internal" href="#copyright">Copyright</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="1_chep.html"
- title="previous chapter">(#1) CHEP Purpose and Guidelines</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="3_super.html"
- title="next chapter">(#3) Exposing of super() and self via Template searchList</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/cheps/2_import.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="conditionalized-import-behavior">
-<h1>(#2) Conditionalized #import behavior<a class="headerlink" href="#conditionalized-import-behavior" title="Permalink to this headline">¶</a></h1>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">CHEP:</th><td class="field-body">2</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Title:</th><td class="field-body">Conditionalized #import behavior</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Version:</th><td class="field-body">1</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Author:</th><td class="field-body">R Tyler Ballance &lt;tyler at slide.com&gt;</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Status:</th><td class="field-body">Draft</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Type:</th><td class="field-body">Standards Track</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Content-Type:</th><td class="field-body">text/x-rst</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Created:</th><td class="field-body">07-Jun-2009</td>
-</tr>
-</tbody>
-</table>
-<hr class="docutils" />
-<div class="section" id="abstract">
-<h2>Abstract<a class="headerlink" href="#abstract" title="Permalink to this headline">¶</a></h2>
-<p>This CHEP proposes an update to the way the #import and #from
-directives are handled such that locally scoped imports and
-module-level imports are handled appropriately.</p>
-</div>
-<div class="section" id="motivation">
-<h2>Motivation<a class="headerlink" href="#motivation" title="Permalink to this headline">¶</a></h2>
-<p>Currently Cheetah (v2.2.1) provides two different, but mutually exclusive,
-means of importing Python modules with the #from/#import directives. The
-“traditional” handling for #from/#import (hereafter referred to as “module imports”)
-is that the generated import statements shall all be relocated to
-the top of the generated module’s source code, i.e.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#import cjson
-
-Hello $cjson.encode([1, 2, 3])
-</pre></div>
-</div>
-<p>Will result in generated module code along the lines of:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cjson</span>
-
-<span class="k">class</span> <span class="nc">Foo</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
- <span class="k">def</span> <span class="nf">writeBody</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;Hello &#39;</span><span class="p">)</span>
- <span class="n">write</span><span class="p">(</span><span class="n">cjson</span><span class="o">.</span><span class="n">encode</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]))</span>
-</pre></div>
-</div>
-<p>Also currently in Cheetah is the ability to switch off this
-behavior and enable location specific #from/#import handling
-(hereafter referred to as “function imports”) in the generated
-code, with this block of Cheetah for example:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#def aFunction(arg)</span>
- <span class="c1">#try</span>
- <span class="c1">#from hashlib import md5</span>
- <span class="c1">#except ImportError</span>
- <span class="c1">#from md5 import md5</span>
- <span class="c1">#end try</span>
- <span class="c1">#return $md5.new(arg).hexdigest()</span>
-<span class="c1">#end def</span>
-</pre></div>
-</div>
-<p>Will result in code generated with everything in
-place such that the Python looks something like:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Foo</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
- <span class="k">def</span> <span class="nf">aFunction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
- <span class="k">try</span><span class="p">:</span>
- <span class="kn">from</span> <span class="nn">hashlib</span> <span class="k">import</span> <span class="n">md5</span>
- <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
- <span class="kn">from</span> <span class="nn">md5</span> <span class="k">import</span> <span class="n">md5</span>
- <span class="k">return</span> <span class="n">md5</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
-</pre></div>
-</div>
-<p>These two approaches to handling the #from/#import directives
-are both beneficial for different situations but currently they
-are handled in mutually exclusive code paths and in mutually
-exclusive fashions.</p>
-</div>
-<div class="section" id="specification">
-<h2>Specification<a class="headerlink" href="#specification" title="Permalink to this headline">¶</a></h2>
-<p>The change in #from/#import behavior and how these directives
-are handled is all based on context of their use, making the
-#from/#import handling “intelligent”. For module imports, the
-“traditional” handling of the #from/#import directives will
-still apply. Whereas function imports will result in inline
-generated import code.</p>
-<p>The basic premise of the change proposed by this document is
-that all #from/#import directives contained within a #def/#end def
-closure will result in import statements contained within that
-function block whereas everywhere else the statements will be relocated
-to the top of the generated module code (i.e. the module import)</p>
-</div>
-<div class="section" id="rationale">
-<h2>Rationale<a class="headerlink" href="#rationale" title="Permalink to this headline">¶</a></h2>
-<p>The concept of the “function import” was introduced in Cheetah v2.1.0
-and quickly retrofitted to “live” behind a compiler setting due to the
-regressions with older templates or templates that were designed to utilize
-module imports (through heavy #block/#end block use, etc). Through discussion
-with Tavis Rudd, this middle ground between the two styles of importing was
-concluded to be the most reasonable solution to providing “pythonic” import
-functionality (i.e. “function import” also known as “inline imports”) while
-still providing the ability to have #from/#import directives declared at the
-module scope within the template (within the Cheetah templates, markup and most
-directives declared within the module scope are placed inside the default method).</p>
-</div>
-<div class="section" id="backwards-compatibility">
-<h2>Backwards Compatibility<a class="headerlink" href="#backwards-compatibility" title="Permalink to this headline">¶</a></h2>
-<p>Changes proposed in this document should be <em>mostly</em> backwards
-compatible with current versions of Cheetah, Any unforeseen issues
-could arise from the use of #from/#import inside of a function
-expecting those symbols to be available outside of the function
-that they’re declared in.</p>
-</div>
-<div class="section" id="reference-implementation">
-<h2>Reference Implementation<a class="headerlink" href="#reference-implementation" title="Permalink to this headline">¶</a></h2>
-<p><em>still in development</em></p>
-</div>
-<div class="section" id="copyright">
-<h2>Copyright<a class="headerlink" href="#copyright" title="Permalink to this headline">¶</a></h2>
-<p>This document has been placed in the public domain.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="3_super.html" title="(#3) Exposing of super() and self via Template searchList"
- >next</a> |</li>
- <li class="right" >
- <a href="1_chep.html" title="(#1) CHEP Purpose and Guidelines"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../chep.html" >Cheetah Enhancement Proposals</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/cheps/3_super.html b/docs/html/cheps/3_super.html
deleted file mode 100644
index d47d912..0000000
--- a/docs/html/cheps/3_super.html
+++ /dev/null
@@ -1,166 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>(#3) Exposing of super() and self via Template searchList &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="prev" title="(#2) Conditionalized #import behavior" href="2_import.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="2_import.html" title="(#2) Conditionalized #import behavior"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../chep.html" accesskey="U">Cheetah Enhancement Proposals</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">(#3) Exposing of super() and self via Template searchList</a><ul>
-<li><a class="reference internal" href="#abstract">Abstract</a></li>
-<li><a class="reference internal" href="#specification">Specification</a></li>
-<li><a class="reference internal" href="#motivation">Motivation</a></li>
-<li><a class="reference internal" href="#rationale">Rationale</a></li>
-<li><a class="reference internal" href="#backwards-compatibility">Backwards Compatibility</a></li>
-<li><a class="reference internal" href="#reference-implementation">Reference Implementation</a></li>
-<li><a class="reference internal" href="#copyright">Copyright</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="2_import.html"
- title="previous chapter">(#2) Conditionalized #import behavior</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/cheps/3_super.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="exposing-of-super-and-self-via-template-searchlist">
-<h1>(#3) Exposing of super() and self via Template searchList<a class="headerlink" href="#exposing-of-super-and-self-via-template-searchlist" title="Permalink to this headline">¶</a></h1>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">CHEP:</th><td class="field-body">3</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Title:</th><td class="field-body">Exposing of super() and self via Template searchList</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Version:</th><td class="field-body">1</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Author:</th><td class="field-body">R Tyler Ballance &lt;tyler at slide.com&gt;</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Status:</th><td class="field-body">Draft</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Type:</th><td class="field-body">Standards Track</td>
-</tr>
-<tr class="field-odd field"><th class="field-name">Content-Type:</th><td class="field-body">text/x-rst</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Created:</th><td class="field-body">07-Jun-2009</td>
-</tr>
-</tbody>
-</table>
-<hr class="docutils" />
-<div class="section" id="abstract">
-<h2>Abstract<a class="headerlink" href="#abstract" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="specification">
-<h2>Specification<a class="headerlink" href="#specification" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="motivation">
-<h2>Motivation<a class="headerlink" href="#motivation" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="rationale">
-<h2>Rationale<a class="headerlink" href="#rationale" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="backwards-compatibility">
-<h2>Backwards Compatibility<a class="headerlink" href="#backwards-compatibility" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="reference-implementation">
-<h2>Reference Implementation<a class="headerlink" href="#reference-implementation" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="copyright">
-<h2>Copyright<a class="headerlink" href="#copyright" title="Permalink to this headline">¶</a></h2>
-<p>This document has been placed in the public domain.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="2_import.html" title="(#2) Conditionalized #import behavior"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../chep.html" >Cheetah Enhancement Proposals</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/bnf.html b/docs/html/dev_guide/bnf.html
deleted file mode 100644
index 2a54320..0000000
--- a/docs/html/dev_guide/bnf.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>A BNF Grammar of Cheetah &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title=".py Template Modules" href="pyModules.html" />
- <link rel="prev" title="Caching placeholders and #cache" href="cache.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="pyModules.html" title=".py Template Modules"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="cache.html" title="Caching placeholders and #cache"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="cache.html"
- title="previous chapter">Caching placeholders and #cache</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="pyModules.html"
- title="next chapter">.py Template Modules</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/bnf.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="a-bnf-grammar-of-cheetah">
-<h1>A BNF Grammar of Cheetah<a class="headerlink" href="#a-bnf-grammar-of-cheetah" title="Permalink to this headline">¶</a></h1>
-<p>(bnf)</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="pyModules.html" title=".py Template Modules"
- >next</a> |</li>
- <li class="right" >
- <a href="cache.html" title="Caching placeholders and #cache"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/cache.html b/docs/html/dev_guide/cache.html
deleted file mode 100644
index 47cfc8e..0000000
--- a/docs/html/dev_guide/cache.html
+++ /dev/null
@@ -1,451 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Caching placeholders and #cache &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="A BNF Grammar of Cheetah" href="bnf.html" />
- <link rel="prev" title="Files" href="files.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="bnf.html" title="A BNF Grammar of Cheetah"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="files.html" title="Files"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Caching placeholders and #cache</a><ul>
-<li><a class="reference internal" href="#dynamic-placeholder-no-cache">Dynamic placeholder - no cache</a></li>
-<li><a class="reference internal" href="#static-placeholder">Static placeholder</a></li>
-<li><a class="reference internal" href="#timed-refresh-placeholder">Timed-refresh placeholder</a></li>
-<li><a class="reference internal" href="#timed-refresh-placeholder-with-braces">Timed-refresh placeholder with braces</a></li>
-<li><a class="reference internal" href="#cache">#cache</a></li>
-<li><a class="reference internal" href="#cache-with-timer-and-id">#cache with timer and id</a></li>
-<li><a class="reference internal" href="#cache-with-test-expression-and-method-conditions">#cache with test: expression and method conditions</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="files.html"
- title="previous chapter">Files</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="bnf.html"
- title="next chapter">A BNF Grammar of Cheetah</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/cache.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="caching-placeholders-and-cache">
-<h1>Caching placeholders and #cache<a class="headerlink" href="#caching-placeholders-and-cache" title="Permalink to this headline">¶</a></h1>
-<p>(cache)</p>
-<div class="section" id="dynamic-placeholder-no-cache">
-<h2>Dynamic placeholder - no cache<a class="headerlink" href="#dynamic-placeholder-no-cache" title="Permalink to this headline">¶</a></h2>
-<p>(cache.dynamic)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Dynamic variable: $voom
-</pre></div>
-</div>
-<p>The command line and the output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>% voom=&#39;Voom!&#39; python x.py --env
-Dynamic variable: Voom!
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;Dynamic variable: &#39;</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;voom&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$voom&#39; at line 1, col 20.</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Just what we expected, like any other dynamic placeholder.</p>
-</div>
-<div class="section" id="static-placeholder">
-<h2>Static placeholder<a class="headerlink" href="#static-placeholder" title="Permalink to this headline">¶</a></h2>
-<p>(cache.static)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Cached variable: $*voom
-</pre></div>
-</div>
-<p>The command line and output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>% voom=&#39;Voom!&#39; python x.py --env
-Cached variable: Voom!
-</pre></div>
-</div>
-<p>The generated code, with line numbers:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="mi">1</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;Cached variable: &#39;</span><span class="p">)</span>
- <span class="mi">2</span> <span class="c1">## START CACHE REGION: at line, col (1, 19) in the source.</span>
- <span class="mi">3</span> <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="mi">4</span> <span class="k">if</span> <span class="s1">&#39;19760169&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">:</span>
- <span class="mi">5</span> <span class="k">pass</span>
- <span class="mi">6</span> <span class="k">else</span><span class="p">:</span>
- <span class="mi">7</span> <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">False</span>
- <span class="mi">8</span> <span class="k">if</span> <span class="n">RECACHE</span><span class="p">:</span>
- <span class="mi">9</span> <span class="n">orig_trans</span> <span class="o">=</span> <span class="n">trans</span>
-<span class="mi">10</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">cacheCollector</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
-<span class="mi">11</span> <span class="n">write</span> <span class="o">=</span> <span class="n">cacheCollector</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
-<span class="mi">12</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;voom&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$*voom&#39; at line 1,</span>
- <span class="c1"># col 19.</span>
-<span class="mi">13</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">orig_trans</span>
-<span class="mi">14</span> <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
-<span class="mi">15</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">[</span><span class="s1">&#39;19760169&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">cacheCollector</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
-<span class="mi">16</span> <span class="k">del</span> <span class="n">cacheCollector</span>
-<span class="mi">17</span> <span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">[</span><span class="s1">&#39;19760169&#39;</span><span class="p">])</span>
-<span class="mi">18</span> <span class="c1">## END CACHE REGION</span>
-
-<span class="mi">19</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>That one little star generated a whole lotta code. First, instead
-of an ordinary {VFS} lookup (searchList) lookup, it converted the
-placeholder to a lookup in the {._cacheData} dictionary. Cheetah
-also generated a unique key ({‘19760169’}) for our cached item -
-this is its cache ID.</p>
-<p>Second, Cheetah put a pair of if-blocks before the {write}. The
-first (lines 3-7) determine whether the cache value is missing or
-out of date, and sets local variable {RECACHE} true or false. This
-stanza may look unnecessarily verbose - lines 3-7 could be
-eliminated if line 8 was changed to</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="s1">&#39;19760169&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">:</span>
-</pre></div>
-</div>
-<ul class="simple">
-<li>but this model is expandable for some of the cache features we’ll</li>
-</ul>
-<p>see below.</p>
-<p>The second if-block, lines 8-16, do the cache updating if
-necessary. Clearly, the programmer is trying to stick as close to
-normal (dynamic) workflow as possible. Remember that {write}, even
-though it looks like a local function, is actually a method of a
-file-like object. So we create a temporary file-like object to
-divert the {write} object into, then read the result and stuff it
-into the cache.</p>
-</div>
-<div class="section" id="timed-refresh-placeholder">
-<h2>Timed-refresh placeholder<a class="headerlink" href="#timed-refresh-placeholder" title="Permalink to this headline">¶</a></h2>
-<p>(cache.timed)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Timed cache: $*.5m*voom
-</pre></div>
-</div>
-<p>The command line and the output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>% voom=&#39;Voom!&#39; python x.py --env
-Timed cache: Voom!
-</pre></div>
-</div>
-<p>The generated method’s docstring:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">This is the main method generated by Cheetah</span>
-<span class="sd">This cache will be refreshed every 30.0 seconds.</span>
-<span class="sd">&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="mi">1</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;Timed cache: &#39;</span><span class="p">)</span>
- <span class="mi">2</span> <span class="c1">## START CACHE REGION: at line, col (1, 15) in the source.</span>
- <span class="mi">3</span> <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="mi">4</span> <span class="k">if</span> <span class="s1">&#39;55048032&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">:</span>
- <span class="mi">5</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cache55048032__refreshTime</span> <span class="o">=</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">+</span> <span class="mf">30.0</span>
- <span class="mi">6</span> <span class="k">elif</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cache55048032__refreshTime</span><span class="p">:</span>
- <span class="mi">7</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cache55048032__refreshTime</span> <span class="o">=</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">+</span> <span class="mf">30.0</span>
- <span class="mi">8</span> <span class="k">else</span><span class="p">:</span>
- <span class="mi">9</span> <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">False</span>
-<span class="mi">10</span> <span class="k">if</span> <span class="n">RECACHE</span><span class="p">:</span>
-<span class="mi">11</span> <span class="n">orig_trans</span> <span class="o">=</span> <span class="n">trans</span>
-<span class="mi">12</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">cacheCollector</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
-<span class="mi">13</span> <span class="n">write</span> <span class="o">=</span> <span class="n">cacheCollector</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
-<span class="mi">14</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;voom&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$*.5m*voom&#39; at</span>
- <span class="c1"># line 1, col 15.</span>
-<span class="mi">15</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">orig_trans</span>
-<span class="mi">16</span> <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
-<span class="mi">17</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">[</span><span class="s1">&#39;55048032&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">cacheCollector</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
-<span class="mi">18</span> <span class="k">del</span> <span class="n">cacheCollector</span>
-<span class="mi">19</span> <span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">[</span><span class="s1">&#39;55048032&#39;</span><span class="p">])</span>
-<span class="mi">20</span> <span class="c1">## END CACHE REGION</span>
-
-<span class="mi">21</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>This code is identical to the static cache example except for the
-docstring and the first if-block. (OK, so the cache ID is different
-and the comment on line 14 is different too. Big deal.)</p>
-<p>Each timed-refresh cache item has a corrsponding private attribute
-{.__cache########__refreshTime} giving the refresh time in
-ticks (=seconds since January 1, 1970). The first if-block (lines
-3-9) checks whether the cache value is missing or its update time
-has passed, and if so, sets {RECACHE} to true and also schedules
-another refresh at the next interval.</p>
-<p>The method docstring reminds the user how often the cache will be
-refreshed. This information is unfortunately not as robust as it
-could be. Each timed-cache placeholder blindly generates a line in
-the docstring. If all refreshes are at the same interval, there
-will be multiple identical lines in the docstring. If the refreshes
-are at different intervals, you get a situation like this:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">This is the main method generated by Cheetah</span>
-<span class="sd">This cache will be refreshed every 30.0 seconds.</span>
-<span class="sd">This cache will be refreshed every 60.0 seconds.</span>
-<span class="sd">This cache will be refreshed every 120.0 seconds.</span>
-<span class="sd">&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<p>The docstring tells only that “something” will be refreshed every
-60.0 seconds, but doesn’t reveal { which} placeholder that is. Only
-if you know the relative order of the placeholders in the template
-can you figure that out.</p>
-</div>
-<div class="section" id="timed-refresh-placeholder-with-braces">
-<h2>Timed-refresh placeholder with braces<a class="headerlink" href="#timed-refresh-placeholder-with-braces" title="Permalink to this headline">¶</a></h2>
-<p>(cache.timed.braces)</p>
-<p>This example is the same but with the long placeholder syntax. It’s
-here because it’s a Cheetah FAQ whether to put the cache interval
-inside or outside the braces. (It’s also here so I can look it up
-because I frequently forget.) The answer is: outside. The braces go
-around only the placeholder name (and perhaps some output-filter
-arguments.)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Timed with {}: $*.5m*{voom}
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Timed with {}: Voom!
-</pre></div>
-</div>
-<p>The generated code differs only in the comment. Inside the
-cache-refresh if-block:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;voom&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$*.5m*{voom}&#39; at line 1,</span>
- <span class="c1">#col 17.</span>
-</pre></div>
-</div>
-<p>If you try to do it this way:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Timed with {}: ${*.5m*voom} ## Wrong!
-</pre></div>
-</div>
-<p>you get:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Timed with {}: ${*.5m*voom}
-</pre></div>
-</div>
-<p><code class="docutils literal"><span class="pre">${</span></code> is not a valid placeholder, so it gets treated as ordinary
-text.</p>
-</div>
-<div class="section" id="cache">
-<h2>#cache<a class="headerlink" href="#cache" title="Permalink to this headline">¶</a></h2>
-<p>(cache.directive)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#cache
-This is a cached region. $voom
-#end cache
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>This is a cached region. Voom!
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="mi">1</span> <span class="c1">## START CACHE REGION: at line, col (1, 1) in the source.</span>
- <span class="mi">2</span> <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="mi">3</span> <span class="k">if</span> <span class="s1">&#39;23711421&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">:</span>
- <span class="mi">4</span> <span class="k">pass</span>
- <span class="mi">5</span> <span class="k">else</span><span class="p">:</span>
- <span class="mi">6</span> <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">False</span>
- <span class="mi">7</span> <span class="k">if</span> <span class="n">RECACHE</span><span class="p">:</span>
- <span class="mi">8</span> <span class="n">orig_trans</span> <span class="o">=</span> <span class="n">trans</span>
- <span class="mi">9</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">cacheCollector</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
-<span class="mi">10</span> <span class="n">write</span> <span class="o">=</span> <span class="n">cacheCollector</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
-<span class="mi">11</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;This is a cached region. &#39;</span><span class="p">)</span>
-<span class="mi">12</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;voom&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$voom&#39; at line 2,</span>
- <span class="c1"># col 27.</span>
-<span class="mi">13</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="mi">14</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">orig_trans</span>
-<span class="mi">15</span> <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
-<span class="mi">16</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">[</span><span class="s1">&#39;23711421&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">cacheCollector</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
-<span class="mi">17</span> <span class="k">del</span> <span class="n">cacheCollector</span>
-<span class="mi">18</span> <span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">[</span><span class="s1">&#39;23711421&#39;</span><span class="p">])</span>
-<span class="mi">19</span> <span class="c1">## END CACHE REGION</span>
-</pre></div>
-</div>
-<p>This is the same as the {$*voom} example, except that the plain
-text around the placeholder is inside the second if-block.</p>
-</div>
-<div class="section" id="cache-with-timer-and-id">
-<h2>#cache with timer and id<a class="headerlink" href="#cache-with-timer-and-id" title="Permalink to this headline">¶</a></h2>
-<p>(cache.directive.timer)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#cache timer=&#39;.5m&#39;, id=&#39;cache1&#39;
-This is a cached region. $voom
-#end cache
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>This is a cached region. Voom!
-</pre></div>
-</div>
-<p>The generated code is the same as the previous example except the
-first if-block:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">True</span>
-<span class="k">if</span> <span class="s1">&#39;13925129&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_cacheIndex</span><span class="p">[</span><span class="s1">&#39;cache1&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;13925129&#39;</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">__cache13925129__refreshTime</span> <span class="o">=</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">+</span> <span class="mf">30.0</span>
-<span class="k">elif</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cache13925129__refreshTime</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">__cache13925129__refreshTime</span> <span class="o">=</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">+</span> <span class="mf">30.0</span>
-<span class="k">else</span><span class="p">:</span>
- <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">False</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="cache-with-test-expression-and-method-conditions">
-<h2>#cache with test: expression and method conditions<a class="headerlink" href="#cache-with-test-expression-and-method-conditions" title="Permalink to this headline">¶</a></h2>
-<p>(cache.directive.test)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#cache test=$isDBUpdated
-This is a cached region. $voom
-#end cache
-</pre></div>
-</div>
-<p>(Analysis postponed: bug in Cheetah produces invalid Python.)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#cache id=&#39;cache1&#39;, test=($isDBUpdated or $someOtherCondition)
-This is a cached region. $voom
-#end cache
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>This is a cached region. Voom!
-</pre></div>
-</div>
-<p>The first if-block in the generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">True</span>
-<span class="k">if</span> <span class="s1">&#39;36798144&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_cacheIndex</span><span class="p">[</span><span class="s1">&#39;cache1&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;36798144&#39;</span>
-<span class="k">elif</span> <span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;isDBUpdated&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="ow">or</span> <span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;someOtherCondition&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)):</span>
- <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">True</span>
-<span class="k">else</span><span class="p">:</span>
- <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">False</span>
-</pre></div>
-</div>
-<p>The second if-block is the same as in the previous example. If you
-leave out the {()} around the test expression, the result is the
-same, although it may be harder for the template maintainer to
-read.</p>
-<p>You can even combine arguments, although this is of questionable
-value.</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#cache id=&#39;cache1&#39;, timer=&#39;30m&#39;, test=$isDBUpdated or $someOtherCondition
-This is a cached region. $voom
-#end cache
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>This is a cached region. Voom!
-</pre></div>
-</div>
-<p>The first if-block:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">True</span>
-<span class="k">if</span> <span class="s1">&#39;88939345&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cacheData</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_cacheIndex</span><span class="p">[</span><span class="s1">&#39;cache1&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;88939345&#39;</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">__cache88939345__refreshTime</span> <span class="o">=</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">+</span> <span class="mf">1800.0</span>
-<span class="k">elif</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cache88939345__refreshTime</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">__cache88939345__refreshTime</span> <span class="o">=</span> <span class="n">currentTime</span><span class="p">()</span> <span class="o">+</span> <span class="mf">1800.0</span>
-<span class="k">elif</span> <span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;isDBUpdated&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="ow">or</span> <span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;someOtherCondition&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">):</span>
- <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">True</span>
-<span class="k">else</span><span class="p">:</span>
- <span class="n">RECACHE</span> <span class="o">=</span> <span class="kc">False</span>
-</pre></div>
-</div>
-<p>We are planning to add a {‘varyBy’} keyword argument in the future
-that will allow separate cache instances to be created for a
-variety of conditions, such as different query string parameters or
-browser types. This is inspired by ASP.net’s varyByParam and
-varyByBrowser output caching keywords. Since this is not
-implemented yet, I cannot provide examples here.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="bnf.html" title="A BNF Grammar of Cheetah"
- >next</a> |</li>
- <li class="right" >
- <a href="files.html" title="Files"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/comments.html b/docs/html/dev_guide/comments.html
deleted file mode 100644
index 7a9eba0..0000000
--- a/docs/html/dev_guide/comments.html
+++ /dev/null
@@ -1,203 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Directives: Comments &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Directives: Parser Instructions" href="parserInstructions.html" />
- <link rel="prev" title=".py Template Modules" href="pyModules.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="parserInstructions.html" title="Directives: Parser Instructions"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="pyModules.html" title=".py Template Modules"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Directives: Comments</a><ul>
-<li><a class="reference internal" href="#docstring-and-header-comments">Docstring and header comments</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="pyModules.html"
- title="previous chapter">.py Template Modules</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="parserInstructions.html"
- title="next chapter">Directives: Parser Instructions</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/comments.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="directives-comments">
-<h1>Directives: Comments<a class="headerlink" href="#directives-comments" title="Permalink to this headline">¶</a></h1>
-<p>(comments)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Text</span> <span class="n">before</span> <span class="n">the</span> <span class="n">comment</span><span class="o">.</span>
-<span class="c1">## The comment.</span>
-<span class="n">Text</span> <span class="n">after</span> <span class="n">the</span> <span class="n">comment</span><span class="o">.</span>
-<span class="c1">#* A multi-line comment spanning several lines.</span>
- <span class="n">It</span> <span class="n">spans</span> <span class="n">several</span> <span class="n">lines</span><span class="p">,</span> <span class="n">too</span><span class="o">.</span>
-<span class="o">*</span><span class="c1">#</span>
-<span class="n">Text</span> <span class="n">after</span> <span class="n">the</span> <span class="n">multi</span><span class="o">-</span><span class="n">line</span> <span class="n">comment</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Text</span> <span class="n">before</span> <span class="n">the</span> <span class="n">comment</span><span class="o">.</span>
-<span class="n">Text</span> <span class="n">after</span> <span class="n">the</span> <span class="n">comment</span><span class="o">.</span>
-
-<span class="n">Text</span> <span class="n">after</span> <span class="n">the</span> <span class="n">multi</span><span class="o">-</span><span class="n">line</span> <span class="n">comment</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;Text before the comment.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="c1"># The comment.</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;Text after the comment.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="c1"># A multi-line comment spanning several lines.</span>
-<span class="c1"># It spans several lines, too.</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Text after the multi-line comment.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<div class="section" id="docstring-and-header-comments">
-<h2>Docstring and header comments<a class="headerlink" href="#docstring-and-header-comments" title="Permalink to this headline">¶</a></h2>
-<p>(comments.docstring)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">##doc: .respond() method comment.</span>
-<span class="c1">##doc-method: Another .respond() method comment.</span>
-<span class="c1">##doc-class: A class comment.</span>
-<span class="c1">##doc-module: A module comment.</span>
-<span class="c1">##header: A header comment.</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<p>The beginning of the generated {.respond} method:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">respond</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
- <span class="n">trans</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
- <span class="n">dummyTrans</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
- <span class="n">VFS</span><span class="o">=</span><span class="n">valueFromSearchList</span><span class="p">,</span>
- <span class="n">VFN</span><span class="o">=</span><span class="n">valueForName</span><span class="p">,</span>
- <span class="n">getmtime</span><span class="o">=</span><span class="n">getmtime</span><span class="p">,</span>
- <span class="n">currentTime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">):</span>
-
- <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd"> This is the main method generated by Cheetah</span>
-<span class="sd"> .respond() method comment.</span>
-<span class="sd"> Another .respond() method comment.</span>
-<span class="sd"> &quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<p>The class docstring:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">A class comment.</span>
-
-<span class="sd">Autogenerated by CHEETAH: The Python-Powered Template Engine</span>
-<span class="sd">&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<p>The top of the module:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env python</span>
-<span class="c1"># A header comment.</span>
-
-<span class="sd">&quot;&quot;&quot;A module comment.</span>
-
-<span class="sd">Autogenerated by CHEETAH: The Python-Powered Template Engine</span>
-<span class="sd"> CHEETAH VERSION: 0.9.13a1</span>
-<span class="sd"> Generation time: Fri Apr 26 22:39:23 2002</span>
-<span class="sd"> Source file: x.tmpl</span>
-<span class="sd"> Source file last modified: Fri Apr 26 22:36:23 2002</span>
-<span class="sd">&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="parserInstructions.html" title="Directives: Parser Instructions"
- >next</a> |</li>
- <li class="right" >
- <a href="pyModules.html" title=".py Template Modules"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/compiler.html b/docs/html/dev_guide/compiler.html
deleted file mode 100644
index e02155d..0000000
--- a/docs/html/dev_guide/compiler.html
+++ /dev/null
@@ -1,119 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The compiler &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="The parser" href="parser.html" />
- <link rel="prev" title="Introduction" href="introduction.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="parser.html" title="The parser"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="introduction.html" title="Introduction"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="introduction.html"
- title="previous chapter">Introduction</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="parser.html"
- title="next chapter">The parser</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/compiler.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="the-compiler">
-<h1>The compiler<a class="headerlink" href="#the-compiler" title="Permalink to this headline">¶</a></h1>
-<p>(compiler)</p>
-<p>How templates are compiled: a walk through Compiler.py.</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="parser.html" title="The parser"
- >next</a> |</li>
- <li class="right" >
- <a href="introduction.html" title="Introduction"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/design.html b/docs/html/dev_guide/design.html
deleted file mode 100644
index 717174e..0000000
--- a/docs/html/dev_guide/design.html
+++ /dev/null
@@ -1,214 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Design Decisions and Tradeoffs &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Safe Delegation" href="safeDelegation.html" />
- <link rel="prev" title="Directives: Flow Control" href="flowControl.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="safeDelegation.html" title="Safe Delegation"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="flowControl.html" title="Directives: Flow Control"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Design Decisions and Tradeoffs</a><ul>
-<li><a class="reference internal" href="#delimiters">Delimiters</a></li>
-<li><a class="reference internal" href="#late-binding">Late binding</a></li>
-<li><a class="reference internal" href="#caching-framework">Caching framework</a></li>
-<li><a class="reference internal" href="#webware-compatibility-and-the-transaction-framework">Webware compatibility and the transaction framework</a></li>
-<li><a class="reference internal" href="#single-inheritance">Single inheritance</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="flowControl.html"
- title="previous chapter">Directives: Flow Control</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="safeDelegation.html"
- title="next chapter">Safe Delegation</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/design.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="design-decisions-and-tradeoffs">
-<h1>Design Decisions and Tradeoffs<a class="headerlink" href="#design-decisions-and-tradeoffs" title="Permalink to this headline">¶</a></h1>
-<p>(design)</p>
-<div class="section" id="delimiters">
-<h2>Delimiters<a class="headerlink" href="#delimiters" title="Permalink to this headline">¶</a></h2>
-<p>(design.Delimiters)</p>
-<p>One of the first decisions we encountered was which delimiter
-syntax to use. We decided to follow Velocity’s {$placeholder} and
-{#directive} syntax because the former is widely used in other
-languages for the same purpose, and the latter stands out in an
-HTML or text document. We also implemented the
-<code class="docutils literal"><span class="pre">${longPlaceholder}</span></code> syntax like the shells for cases where
-Cheetah or you might be confused where a placeholder ends. Tavis
-went ahead and made <code class="docutils literal"><span class="pre">${longPlaceholder}</span></code> and
-<code class="docutils literal"><span class="pre">$[longPlaceholder]</span></code> interchangeable with it since it was trivial
-to implement. Finally, the {#compiler} directive allows you to
-change the delimiters if you don’t like them or if they conflict
-with the text in your document. (Obviously, if your document
-contains a Perl program listing, you don’t necessarily want to
-backslash each and every {$} and {#}, do you?)</p>
-<p>The choice of comment delimiters was more arbitrary. {##} and {#*
-… *#} doesn’t match any language, but it’s reminiscent of Python
-and C while also being consistent with our “{#} is for directives”
-convention.</p>
-<p>We specifically chose { not} to use pseudo HTML tags for
-placeholders and directives, as described more thoroughly in the
-Cheetah Users’ Guide introduction. Pseudo HTML tags may be easier
-to see in a visual editor (supposedly), but in text editors they’re
-hard to distinguish from “real” HTML tags unless you look closely,
-and they’re many more keystrokes to type. Also, if you make a
-mistake, the tag will show up as literal text in the rendered HTML
-page where it will be easy to notice and eradicate, rather than
-disappearing as bogus HTML tags do in browsers.</p>
-</div>
-<div class="section" id="late-binding">
-<h2>Late binding<a class="headerlink" href="#late-binding" title="Permalink to this headline">¶</a></h2>
-<p>(design.lateBinding)</p>
-<p>One of Cheetah’s unique features is the name mapper, which lets you
-write {$a.b} without worrying much about the type of {a} or {b}.
-Prior to version 0.9.7, Cheetah did the entire NameMapper lookup at
-runtime. This provided maximum flexibility at the expense of speed.
-Doing a NameMapper lookup is intrinsically more expensive than an
-ordinary Python expression because Cheetah has to decide what type
-of container {a} is, whether the the value is a function (autocall
-it), issue the appropriate Python incantation to look up {b} in it,
-autocall again if necessary, and then convert the result to a
-string.</p>
-<p>To maximize run-time (filling-time) performance, Cheetah 0.9.7
-pushed much of this work back into the compiler. The compiler
-looked up {a} in the searchList at compile time, noted its type,
-and generated an eval’able Python expression based on that.</p>
-<p>This approach had two significant drawbacks. What if {a} later
-changes type before a template filling? Answer: unpredictable
-exceptions occur. What if {a} does not exist in the searchList at
-compile time? Answer: the template can’t compile.</p>
-<p>To prevent these catastrophes, users were required to prepopulate
-the searchList before instantiating the template instance, and then
-not to change {a}’s type. Static typing is repugnant in a dynamic
-language like Python, and having to prepopulate the searchList made
-certain usages impossible. For example, you couldn’t instantiate
-the template object without a searchList and then set {self}
-attributes to specify the values.</p>
-<p>After significant user complaints about the fragility of this
-system, Tavis rewrote placeholder handling, and in version 0.9.8a3
-(August 2001), Tavis moved the name mapper lookup back into
-runtime. Performance wasn’t crippled because he discovered that
-writing a C version of the name mapper was easier than anticipated,
-and the C version completed the lookup quickly. Now Cheetah had
-“late binding”, meaning the compiler does not look up {a} or care
-whether it exists. This allows users to create {a} or change its
-type anytime before a template filling.</p>
-<p>The lesson we learned is that it’s better to decide what you want
-and then figure out how to do it, rather than assuming that certain
-goals are unattainable due to performance considerations.</p>
-</div>
-<div class="section" id="caching-framework">
-<h2>Caching framework<a class="headerlink" href="#caching-framework" title="Permalink to this headline">¶</a></h2>
-<p>(design.cache)</p>
-</div>
-<div class="section" id="webware-compatibility-and-the-transaction-framework">
-<h2>Webware compatibility and the transaction framework<a class="headerlink" href="#webware-compatibility-and-the-transaction-framework" title="Permalink to this headline">¶</a></h2>
-<p>(design.webware)</p>
-</div>
-<div class="section" id="single-inheritance">
-<h2>Single inheritance<a class="headerlink" href="#single-inheritance" title="Permalink to this headline">¶</a></h2>
-<p>(design.singleInheritance)</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="safeDelegation.html" title="Safe Delegation"
- >next</a> |</li>
- <li class="right" >
- <a href="flowControl.html" title="Directives: Flow Control"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/errorHandling.html b/docs/html/dev_guide/errorHandling.html
deleted file mode 100644
index ccb0085..0000000
--- a/docs/html/dev_guide/errorHandling.html
+++ /dev/null
@@ -1,415 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Directives: Error Handling &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Placeholders" href="placeholders.html" />
- <link rel="prev" title="The parser" href="parser.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="placeholders.html" title="Placeholders"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="parser.html" title="The parser"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Directives: Error Handling</a><ul>
-<li><a class="reference internal" href="#try-and-raise">#try and #raise</a></li>
-<li><a class="reference internal" href="#assert">#assert</a></li>
-<li><a class="reference internal" href="#errorcatcher">#errorCatcher</a><ul>
-<li><a class="reference internal" href="#no-error-catcher">No error catcher</a></li>
-<li><a class="reference internal" href="#echo-and-bigecho">Echo and BigEcho</a></li>
-<li><a class="reference internal" href="#listerrors">ListErrors</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="parser.html"
- title="previous chapter">The parser</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="placeholders.html"
- title="next chapter">Placeholders</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/errorHandling.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="directives-error-handling">
-<h1>Directives: Error Handling<a class="headerlink" href="#directives-error-handling" title="Permalink to this headline">¶</a></h1>
-<p>(errorHandling)</p>
-<div class="section" id="try-and-raise">
-<h2>#try and #raise<a class="headerlink" href="#try-and-raise" title="Permalink to this headline">¶</a></h2>
-<p>(errorHandling.try)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#import traceback</span>
-<span class="c1">#try</span>
-<span class="c1">#raise RuntimeError</span>
-<span class="c1">#except RuntimeError</span>
-<span class="n">A</span> <span class="n">runtime</span> <span class="n">error</span> <span class="n">occurred</span><span class="o">.</span>
-<span class="c1">#end try</span>
-
-<span class="c1">#try</span>
-<span class="c1">#raise RuntimeError(&quot;Hahaha!&quot;)</span>
-<span class="c1">#except RuntimeError</span>
-<span class="c1">#echo $sys.exc_info()[1]</span>
-<span class="c1">#end try</span>
-
-<span class="c1">#try</span>
-<span class="c1">#echo 1/0</span>
-<span class="c1">#except ZeroDivisionError</span>
-<span class="n">You</span> <span class="n">can</span><span class="s1">&#39;t divide by zero, idiot!</span>
-<span class="c1">#end try</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>A runtime error occurred.
-
-Hahaha!
-
-You can&#39;t divide by zero, idiot!
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span>
- <span class="k">raise</span> <span class="ne">RuntimeError</span>
-<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;A runtime error occurred.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="k">try</span><span class="p">:</span>
- <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Hahaha!&quot;</span><span class="p">)</span>
-<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">sys</span><span class="p">,</span><span class="s2">&quot;exc_info&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)()[</span><span class="mi">1</span><span class="p">]))</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="k">try</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">0</span><span class="p">))</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="k">except</span> <span class="ne">ZeroDivisionError</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s2">&quot;You can&#39;t divide by zero, idiot!</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>{#finally} works just like in Python.</p>
-</div>
-<div class="section" id="assert">
-<h2>#assert<a class="headerlink" href="#assert" title="Permalink to this headline">¶</a></h2>
-<p>(errorHandling.assert)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#assert False, &quot;You lose, buster!&quot;</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Traceback (most recent call last):
- File &quot;x.py&quot;, line 117, in ?
- x().runAsMainProgram()
- File &quot;/local/opt/Python/lib/python2.2/site-packages/Webware/Cheetah/
-Template.py&quot;, line 331, in runAsMainProgram
- CmdLineIface(templateObj=self).run()
- File &quot;/local/opt/Python/lib/python2.2/site-packages/Webware/Cheetah/
-TemplateCmdLineIface.py&quot;, line 59, in run
- print self._template
- File &quot;x.py&quot;, line 91, in respond
- assert False, &quot;You lose, buster!&quot;
-AssertionError: You lose, buster!
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">assert</span> <span class="kc">False</span><span class="p">,</span> <span class="s2">&quot;You lose, buster!&quot;</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="errorcatcher">
-<h2>#errorCatcher<a class="headerlink" href="#errorcatcher" title="Permalink to this headline">¶</a></h2>
-<p>(errorHandling.errorCatcher)</p>
-<div class="section" id="no-error-catcher">
-<h3>No error catcher<a class="headerlink" href="#no-error-catcher" title="Permalink to this headline">¶</a></h3>
-<p>(errorHandling.errorCatcher.no)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$noValue
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Traceback (most recent call last):
- File &quot;x.py&quot;, line 118, in ?
- x().runAsMainProgram()
- File &quot;/local/opt/Python/lib/python2.2/site-packages/Webware/Cheetah/
-Template.py&quot;, line 331, in runAsMainProgram
- CmdLineIface(templateObj=self).run()
- File &quot;/local/opt/Python/lib/python2.2/site-packages/Webware/Cheetah/
-TemplateCmdLineIface.py&quot;, line 59, in run
- print self._template
- File &quot;x.py&quot;, line 91, in respond
- write(filter(VFS(SL,&quot;noValue&quot;,1))) # generated from &#39;$noValue&#39; at line
-1, col 1.
-NameMapper.NotFound: noValue
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;noValue&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$noValue&#39; at line 1,</span>
- <span class="c1"># col 1.</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="echo-and-bigecho">
-<h3>Echo and BigEcho<a class="headerlink" href="#echo-and-bigecho" title="Permalink to this headline">¶</a></h3>
-<p>(errorHandling.errorCatcher.echo)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#errorCatcher Echo
-$noValue
-#errorCatcher BigEcho
-$noValue
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$noValue
-===============&amp;lt;$noValue could not be found&amp;gt;===============
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="s2">&quot;Echo&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">[</span><span class="s2">&quot;Echo&quot;</span><span class="p">]</span>
-<span class="k">else</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">[</span><span class="s2">&quot;Echo&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ErrorCatchers</span><span class="o">.</span><span class="n">Echo</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__errorCatcher1</span><span class="p">(</span><span class="n">localsDict</span><span class="o">=</span><span class="nb">locals</span><span class="p">())))</span>
- <span class="c1"># generated from &#39;$noValue&#39; at line 2, col 1.</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="k">if</span> <span class="s2">&quot;BigEcho&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">[</span><span class="s2">&quot;BigEcho&quot;</span><span class="p">]</span>
-<span class="k">else</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">[</span><span class="s2">&quot;BigEcho&quot;</span><span class="p">]</span> <span class="o">=</span> \
- <span class="n">ErrorCatchers</span><span class="o">.</span><span class="n">BigEcho</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__errorCatcher1</span><span class="p">(</span><span class="n">localsDict</span><span class="o">=</span><span class="nb">locals</span><span class="p">())))</span>
- <span class="c1"># generated from &#39;$noValue&#39; at line 4, col 1.</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="listerrors">
-<h3>ListErrors<a class="headerlink" href="#listerrors" title="Permalink to this headline">¶</a></h3>
-<p>(errorHandling.errorCatcher.listErrors)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#import pprint
-#errorCatcher ListErrors
-$noValue
-$anotherMissingValue.really
-$pprint.pformat($errorCatcher.listErrors)
-## This is really self.errorCatcher().listErrors()
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$noValue
-$anotherMissingValue.really
-[{&#39;code&#39;: &#39;VFS(SL,&quot;noValue&quot;,1)&#39;,
- &#39;exc_val&#39;: &lt;NameMapper.NotFound instance at 0x8170ecc&gt;,
- &#39;lineCol&#39;: (3, 1),
- &#39;rawCode&#39;: &#39;$noValue&#39;,
- &#39;time&#39;: &#39;Wed May 15 00:38:23 2002&#39;},
- {&#39;code&#39;: &#39;VFS(SL,&quot;anotherMissingValue.really&quot;,1)&#39;,
- &#39;exc_val&#39;: &lt;NameMapper.NotFound instance at 0x816d0fc&gt;,
- &#39;lineCol&#39;: (4, 1),
- &#39;rawCode&#39;: &#39;$anotherMissingValue.really&#39;,
- &#39;time&#39;: &#39;Wed May 15 00:38:23 2002&#39;}]
-</pre></div>
-</div>
-<p>The generated import:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">pprint</span>
-</pre></div>
-</div>
-<p>Then in the generated class, we have our familiar {.respond} method
-and several new methods:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">__errorCatcher1</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">localsDict</span><span class="o">=</span><span class="p">{}):</span>
- <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd"> Generated from $noValue at line, col (3, 1).</span>
-<span class="sd"> &quot;&quot;&quot;</span>
-
- <span class="k">try</span><span class="p">:</span>
- <span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="s1">&#39;&#39;&#39;VFS(SL,&quot;noValue&quot;,1)&#39;&#39;&#39;</span><span class="p">,</span> <span class="nb">globals</span><span class="p">(),</span> <span class="n">localsDict</span><span class="p">)</span>
- <span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span><span class="o">.</span><span class="n">exceptions</span><span class="p">(),</span> <span class="n">e</span><span class="p">:</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">exc_val</span><span class="o">=</span><span class="n">e</span><span class="p">,</span> <span class="n">code</span><span class="o">=</span> <span class="s1">&#39;VFS(SL,&quot;noValue&quot;,1)&#39;</span> <span class="p">,</span>
- <span class="n">rawCode</span><span class="o">=</span> <span class="s1">&#39;$noValue&#39;</span> <span class="p">,</span> <span class="n">lineCol</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-
-<span class="k">def</span> <span class="nf">__errorCatcher2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">localsDict</span><span class="o">=</span><span class="p">{}):</span>
- <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd"> Generated from $anotherMissingValue.really at line, col (4, 1).</span>
-<span class="sd"> &quot;&quot;&quot;</span>
-
- <span class="k">try</span><span class="p">:</span>
- <span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="s1">&#39;&#39;&#39;VFS(SL,&quot;anotherMissingValue.really&quot;,1)&#39;&#39;&#39;</span><span class="p">,</span> <span class="nb">globals</span><span class="p">(),</span>
- <span class="n">localsDict</span><span class="p">)</span>
- <span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span><span class="o">.</span><span class="n">exceptions</span><span class="p">(),</span> <span class="n">e</span><span class="p">:</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">exc_val</span><span class="o">=</span><span class="n">e</span><span class="p">,</span>
- <span class="n">code</span><span class="o">=</span> <span class="s1">&#39;VFS(SL,&quot;anotherMissingValue.really&quot;,1)&#39;</span> <span class="p">,</span>
- <span class="n">rawCode</span><span class="o">=</span> <span class="s1">&#39;$anotherMissingValue.really&#39;</span> <span class="p">,</span> <span class="n">lineCol</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-
-<span class="k">def</span> <span class="nf">__errorCatcher3</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">localsDict</span><span class="o">=</span><span class="p">{}):</span>
- <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd"> Generated from $pprint.pformat($errorCatcher.listErrors) at line, col</span>
-<span class="sd"> (5, 1).</span>
-<span class="sd"> &quot;&quot;&quot;</span>
-
- <span class="k">try</span><span class="p">:</span>
- <span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="s1">&#39;&#39;&#39;VFN(pprint,&quot;pformat&quot;,0)(VFS(SL,</span>
-<span class="s1"> &quot;errorCatcher.listErrors&quot;,1))&#39;&#39;&#39;</span><span class="p">,</span> <span class="nb">globals</span><span class="p">(),</span> <span class="n">localsDict</span><span class="p">)</span>
- <span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span><span class="o">.</span><span class="n">exceptions</span><span class="p">(),</span> <span class="n">e</span><span class="p">:</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="n">exc_val</span><span class="o">=</span><span class="n">e</span><span class="p">,</span> <span class="n">code</span><span class="o">=</span>
- <span class="s1">&#39;VFN(pprint,&quot;pformat&quot;,0)(VFS(SL,&quot;errorCatcher.listErrors&quot;,1))&#39;</span> <span class="p">,</span>
- <span class="n">rawCode</span><span class="o">=</span> <span class="s1">&#39;$pprint.pformat($errorCatcher.listErrors)&#39;</span> <span class="p">,</span>
- <span class="n">lineCol</span><span class="o">=</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">respond</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
- <span class="n">trans</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
- <span class="n">dummyTrans</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
- <span class="n">VFS</span><span class="o">=</span><span class="n">valueFromSearchList</span><span class="p">,</span>
- <span class="n">VFN</span><span class="o">=</span><span class="n">valueForName</span><span class="p">,</span>
- <span class="n">getmtime</span><span class="o">=</span><span class="n">getmtime</span><span class="p">,</span>
- <span class="n">currentTime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">):</span>
-
-
- <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd"> This is the main method generated by Cheetah</span>
-<span class="sd"> &quot;&quot;&quot;</span>
-
- <span class="k">if</span> <span class="ow">not</span> <span class="n">trans</span><span class="p">:</span>
- <span class="n">trans</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
- <span class="n">dummyTrans</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
- <span class="n">SL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_searchList</span>
- <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span>
- <span class="n">globalSetVars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_globalSetVars</span>
-
- <span class="c1">########################################</span>
- <span class="c1">## START - generated method body</span>
-
- <span class="k">if</span> <span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_filePath</span><span class="p">)</span> <span class="ow">and</span> <span class="n">getmtime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_filePath</span><span class="p">)</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fileMtime</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">file</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_filePath</span><span class="p">)</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mainCheetahMethod_for_x</span><span class="p">)(</span><span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">))</span>
- <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
- <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">return</span> <span class="s2">&quot;&quot;</span>
- <span class="k">if</span> <span class="s2">&quot;ListErrors&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">[</span><span class="s2">&quot;ListErrors&quot;</span><span class="p">]</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatcher</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_errorCatchers</span><span class="p">[</span><span class="s2">&quot;ListErrors&quot;</span><span class="p">]</span> <span class="o">=</span> \
- <span class="n">ErrorCatchers</span><span class="o">.</span><span class="n">ListErrors</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__errorCatcher1</span><span class="p">(</span><span class="n">localsDict</span><span class="o">=</span><span class="nb">locals</span><span class="p">())))</span>
- <span class="c1"># generated from &#39;$noValue&#39; at line 3, col 1.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__errorCatcher2</span><span class="p">(</span><span class="n">localsDict</span><span class="o">=</span><span class="nb">locals</span><span class="p">())))</span>
- <span class="c1"># generated from &#39;$anotherMissingValue.really&#39; at line 4, col 1.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__errorCatcher3</span><span class="p">(</span><span class="n">localsDict</span><span class="o">=</span><span class="nb">locals</span><span class="p">())))</span>
- <span class="c1"># generated from &#39;$pprint.pformat($errorCatcher.listErrors)&#39; at line</span>
- <span class="c1"># 5, col 1.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
- <span class="c1"># This is really self.errorCatcher().listErrors()</span>
-
- <span class="c1">########################################</span>
- <span class="c1">## END - generated method body</span>
-
- <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
- <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</pre></div>
-</div>
-<p>So whenever an error catcher is active, each placeholder gets
-wrapped in its own method. No wonder error catchers slow down the
-system!</p>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="placeholders.html" title="Placeholders"
- >next</a> |</li>
- <li class="right" >
- <a href="parser.html" title="The parser"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/files.html b/docs/html/dev_guide/files.html
deleted file mode 100644
index 1dc4654..0000000
--- a/docs/html/dev_guide/files.html
+++ /dev/null
@@ -1,122 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Files &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Caching placeholders and #cache" href="cache.html" />
- <link rel="prev" title="Directives: Output" href="output.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="cache.html" title="Caching placeholders and #cache"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="output.html" title="Directives: Output"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="output.html"
- title="previous chapter">Directives: Output</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="cache.html"
- title="next chapter">Caching placeholders and #cache</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/files.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="files">
-<h1>Files<a class="headerlink" href="#files" title="Permalink to this headline">¶</a></h1>
-<p>(files)</p>
-<p>This chapter will be an overview of the files in the Cheetah
-package, and how they interrelate in compiling and filling a
-template. We’ll also look at files in the Cheetah tarball that
-don’t get copied into the package.</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="cache.html" title="Caching placeholders and #cache"
- >next</a> |</li>
- <li class="right" >
- <a href="output.html" title="Directives: Output"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/flowControl.html b/docs/html/dev_guide/flowControl.html
deleted file mode 100644
index 8ad2a10..0000000
--- a/docs/html/dev_guide/flowControl.html
+++ /dev/null
@@ -1,455 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Directives: Flow Control &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Design Decisions and Tradeoffs" href="design.html" />
- <link rel="prev" title="Patching Cheetah" href="patching.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="design.html" title="Design Decisions and Tradeoffs"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="patching.html" title="Patching Cheetah"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Directives: Flow Control</a><ul>
-<li><a class="reference internal" href="#for">#for</a></li>
-<li><a class="reference internal" href="#repeat">#repeat</a></li>
-<li><a class="reference internal" href="#while">#while</a></li>
-<li><a class="reference internal" href="#if">#if</a></li>
-<li><a class="reference internal" href="#unless">#unless</a></li>
-<li><a class="reference internal" href="#break-and-continue">#break and #continue</a></li>
-<li><a class="reference internal" href="#pass">#pass</a></li>
-<li><a class="reference internal" href="#stop">#stop</a></li>
-<li><a class="reference internal" href="#return">#return</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="patching.html"
- title="previous chapter">Patching Cheetah</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="design.html"
- title="next chapter">Design Decisions and Tradeoffs</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/flowControl.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="directives-flow-control">
-<h1>Directives: Flow Control<a class="headerlink" href="#directives-flow-control" title="Permalink to this headline">¶</a></h1>
-<p>(flowControl)</p>
-<div class="section" id="for">
-<h2>#for<a class="headerlink" href="#for" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.for)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $i in $range(10)
-$i #slurp
-#end for
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span> <span class="mi">5</span> <span class="mi">6</span> <span class="mi">7</span> <span class="mi">8</span> <span class="mi">9</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> <span class="c1"># generated from &#39;$i&#39; at line 2, col 1.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="repeat">
-<h2>#repeat<a class="headerlink" href="#repeat" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.repeat)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#repeat 3
-My bonnie lies over the ocean
-#end repeat
-O, bring back my bonnie to me!
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>My bonnie lies over the ocean
-My bonnie lies over the ocean
-My bonnie lies over the ocean
-O, bring back my bonnie to me!
-</pre></div>
-</div>
-<p>(OK, so the second line should be “sea” instead of “ocean”.)</p>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">__i0</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;My bonnie lies over the ocean</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;O, bring back my bonnie to me!</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Note that a new local variable of the form {__i$num} will be used
-for each instance of {repeat} in order to permit nesting.</p>
-</div>
-<div class="section" id="while">
-<h2>#while<a class="headerlink" href="#while" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.while)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#set $alive = True
-#while $alive
-I am alive!
-#set $alive = False
-#end while
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>I am alive!
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">alive</span> <span class="o">=</span> <span class="kc">True</span>
-<span class="k">while</span> <span class="n">alive</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;I am alive!</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
- <span class="n">alive</span> <span class="o">=</span> <span class="kc">False</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="if">
-<h2>#if<a class="headerlink" href="#if" title="Permalink to this headline">¶</a></h2>
-<p>()</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#set $size = 500</span>
-<span class="c1">#if $size &gt;= 1500</span>
-<span class="n">It</span><span class="s1">&#39;s big</span>
-<span class="c1">#else if $size &lt; 1500 and $size &gt; 0</span>
-<span class="n">It</span><span class="s1">&#39;s small</span>
-<span class="c1">#else</span>
-<span class="n">It</span><span class="s1">&#39;s not there</span>
-<span class="c1">#end if</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">It</span><span class="s1">&#39;s small</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">size</span> <span class="o">=</span> <span class="mi">500</span>
-<span class="k">if</span> <span class="n">size</span> <span class="o">&gt;=</span> <span class="mi">1500</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s2">&quot;It&#39;s big</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-<span class="k">elif</span> <span class="n">size</span> <span class="o">&lt;</span> <span class="mi">1500</span> <span class="ow">and</span> <span class="n">size</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s2">&quot;It&#39;s small</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-<span class="k">else</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s2">&quot;It&#39;s not there</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="unless">
-<h2>#unless<a class="headerlink" href="#unless" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.unless)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#set $count = 9</span>
-<span class="c1">#unless $count + 5 &gt; 15</span>
-<span class="n">Count</span> <span class="ow">is</span> <span class="ow">in</span> <span class="nb">range</span><span class="o">.</span>
-<span class="c1">#end unless</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Count</span> <span class="ow">is</span> <span class="ow">in</span> <span class="nb">range</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">count</span> <span class="o">=</span> <span class="mi">9</span>
-<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">count</span> <span class="o">+</span> <span class="mi">5</span> <span class="o">&gt;</span> <span class="mi">15</span><span class="p">):</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;Count is in range.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>{ Note:} There is a bug in Cheetah 0.9.13. It’s forgetting the
-parentheses in the {if} expression, which could lead to it
-calculating something different than it should.</p>
-</div>
-<div class="section" id="break-and-continue">
-<h2>#break and #continue<a class="headerlink" href="#break-and-continue" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.break)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, &#39;James&#39;, &#39;Joe&#39;, &#39;Snow&#39;]
-#if $i == 10
- #continue
-#end if
-#if $i == &#39;Joe&#39;
- #break
-#end if
-$i - #slurp
-#end for
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">1</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">-</span> <span class="mi">3</span> <span class="o">-</span> <span class="mi">4</span> <span class="o">-</span> <span class="mi">5</span> <span class="o">-</span> <span class="mi">6</span> <span class="o">-</span> <span class="mi">7</span> <span class="o">-</span> <span class="mi">8</span> <span class="o">-</span> <span class="mi">9</span> <span class="o">-</span> <span class="mi">11</span> <span class="o">-</span> <span class="mi">12</span> <span class="o">-</span> <span class="n">James</span> <span class="o">-</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="s1">&#39;James&#39;</span><span class="p">,</span> <span class="s1">&#39;Joe&#39;</span><span class="p">,</span> <span class="s1">&#39;Snow&#39;</span><span class="p">]:</span>
- <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">10</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
- <span class="k">continue</span>
- <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">&#39;Joe&#39;</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
- <span class="k">break</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> <span class="c1"># generated from &#39;$i&#39; at line 8, col 1.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39; - &#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="pass">
-<h2>#pass<a class="headerlink" href="#pass" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.pass)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Let</span><span class="s1">&#39;s check the number.</span>
-<span class="c1">#set $size = 500</span>
-<span class="c1">#if $size &gt;= 1500</span>
-<span class="n">It</span><span class="s1">&#39;s big</span>
-<span class="c1">#elif $size &gt; 0</span>
-<span class="c1">#pass</span>
-<span class="c1">#else</span>
-<span class="n">Invalid</span> <span class="n">entry</span>
-<span class="c1">#end if</span>
-<span class="n">Done</span> <span class="n">checking</span> <span class="n">the</span> <span class="n">number</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Let</span><span class="s1">&#39;s check the number.</span>
-<span class="n">Done</span> <span class="n">checking</span> <span class="n">the</span> <span class="n">number</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;Let&#39;s check the number.</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-<span class="n">size</span> <span class="o">=</span> <span class="mi">500</span>
-<span class="k">if</span> <span class="n">size</span> <span class="o">&gt;=</span> <span class="mi">1500</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s2">&quot;It&#39;s big</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
-<span class="k">elif</span> <span class="n">size</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
- <span class="k">pass</span>
-<span class="k">else</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;Invalid entry</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;Done checking the number.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="stop">
-<h2>#stop<a class="headerlink" href="#stop" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.stop)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">A</span> <span class="n">cat</span>
-<span class="c1">#if 1</span>
- <span class="n">sat</span> <span class="n">on</span> <span class="n">a</span> <span class="n">mat</span>
- <span class="c1">#stop</span>
- <span class="n">watching</span> <span class="n">a</span> <span class="n">rat</span>
-<span class="c1">#end if</span>
-<span class="ow">in</span> <span class="n">a</span> <span class="n">flat</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">A</span> <span class="n">cat</span>
- <span class="n">sat</span> <span class="n">on</span> <span class="n">a</span> <span class="n">mat</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;A cat</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="k">if</span> <span class="mi">1</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39; sat on a mat</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
- <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
- <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">return</span> <span class="s2">&quot;&quot;</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39; watching a rat</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;in a flat.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="return">
-<h2>#return<a class="headerlink" href="#return" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.return)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>1
-$test[1]
-3
-#def test
-1.5
-#if 1
-#return &#39;123&#39;
-#else
-99999
-#end if
-#end def
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">1</span>
-<span class="mi">2</span>
-<span class="mi">3</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
- <span class="n">trans</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
- <span class="n">dummyTrans</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
- <span class="n">VFS</span><span class="o">=</span><span class="n">valueFromSearchList</span><span class="p">,</span>
- <span class="n">VFN</span><span class="o">=</span><span class="n">valueForName</span><span class="p">,</span>
- <span class="n">getmtime</span><span class="o">=</span><span class="n">getmtime</span><span class="p">,</span>
- <span class="n">currentTime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">):</span>
-
-
- <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd"> Generated from #def test at line 5, col 1.</span>
-<span class="sd"> &quot;&quot;&quot;</span>
-
- <span class="k">if</span> <span class="ow">not</span> <span class="n">trans</span><span class="p">:</span>
- <span class="n">trans</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
- <span class="n">dummyTrans</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
- <span class="n">SL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_searchList</span>
- <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span>
- <span class="n">globalSetVars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_globalSetVars</span>
-
- <span class="c1">########################################</span>
- <span class="c1">## START - generated method body</span>
-
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;1.5</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
- <span class="k">if</span> <span class="mi">1</span><span class="p">:</span>
- <span class="k">return</span> <span class="s1">&#39;123&#39;</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;99999</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-
- <span class="c1">########################################</span>
- <span class="c1">## END - generated method body</span>
-
- <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
- <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">respond</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
- <span class="n">trans</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
- <span class="n">dummyTrans</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
- <span class="n">VFS</span><span class="o">=</span><span class="n">valueFromSearchList</span><span class="p">,</span>
- <span class="n">VFN</span><span class="o">=</span><span class="n">valueForName</span><span class="p">,</span>
- <span class="n">getmtime</span><span class="o">=</span><span class="n">getmtime</span><span class="p">,</span>
- <span class="n">currentTime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">):</span>
-
-
- <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd"> This is the main method generated by Cheetah</span>
-<span class="sd"> &quot;&quot;&quot;</span>
-
- <span class="k">if</span> <span class="ow">not</span> <span class="n">trans</span><span class="p">:</span>
- <span class="n">trans</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
- <span class="n">dummyTrans</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
- <span class="n">SL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_searchList</span>
- <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span>
- <span class="n">globalSetVars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_globalSetVars</span>
-
- <span class="c1">########################################</span>
- <span class="c1">## START - generated method body</span>
-
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">1</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;test&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">]))</span> <span class="c1"># generated from &#39;$test[1]&#39; at line 3, col 1.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">3</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-
- <span class="c1">########################################</span>
- <span class="c1">## END - generated method body</span>
-
- <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
- <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</pre></div>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="design.html" title="Design Decisions and Tradeoffs"
- >next</a> |</li>
- <li class="right" >
- <a href="patching.html" title="Patching Cheetah"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/history.html b/docs/html/dev_guide/history.html
deleted file mode 100644
index 1fa2f3a..0000000
--- a/docs/html/dev_guide/history.html
+++ /dev/null
@@ -1,193 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>History of Cheetah &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Directives: Output" href="output.html" />
- <link rel="prev" title="Safe Delegation" href="safeDelegation.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="output.html" title="Directives: Output"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="safeDelegation.html" title="Safe Delegation"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="safeDelegation.html"
- title="previous chapter">Safe Delegation</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="output.html"
- title="next chapter">Directives: Output</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/history.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="history-of-cheetah">
-<h1>History of Cheetah<a class="headerlink" href="#history-of-cheetah" title="Permalink to this headline">¶</a></h1>
-<p>(history)</p>
-<p>In Spring 2001, several members of the webware-discuss mailing list
-expressed the need for a template engine. Webware like Python is
-great for organizing logic, but they both suffer when you need to
-do extensive variable interpolation into large pieces of text, or
-to build up a text string from its nested parts. Python’s {%}
-operator gets you only so far, the syntax is cumbersome, and you
-have to use a separate format string for each nested part. Most of
-us had used template systems from other platforms-chiefly Zope’s
-DTML, PHPLib’s Template object and Java’s Velocity-and wanted to
-port something like those so it could be used both in Webware
-servlets and in standalone Python programs.</p>
-<p>Since I (Mike Orr) am writing this history, I’ll describe how I
-encountered Cheetah. I had written a template module called
-PlowPlate based on PHPLib’s Template library. Like PHPLib, it used
-regular expressions to search and destroy-er, replace-placeholders,
-behaved like a dictionary to specify placeholder values, contained
-no directives, but did have BEGIN and END markers which could be
-used to extract a named block (subtemplate). Meanwhile, Tavis Rudd
-was also on webware-discuss and interested in templates, and he
-lived just a few hours away. So on 12 May 2001 we met in Vancouver
-at a gelato shop on Denman Street and discussed Webware, and he
-drew on a napkin the outline of a template system he was working
-on.</p>
-<p>[Note from Tavis: Mikes got the dates and sequence of things a
-little out of order, but what the hell …]</p>
-<p>Instead of filling the template by search-and-replace, he wanted to
-break it up into parts. This was a primitive form of template
-compiling: do the time-consuming work once and put it to a state
-where you can fill the template quickly multiple times. A template
-without directives happens to break down naturally into a list of
-alternating text/placeholder pairs. The odd subscript values are
-literal strings; the even subscripts are string keys into a
-dictionary of placeholder values. The project was called
-TemplateServer.</p>
-<p>In a couple months, Tavis decided that instead of compiling to a
-list, he wanted to compile to Python source code: a series of
-{write} calls that would output into a file-like object. This was
-the nucleus that became Cheetah. I thought that idea was stupid,
-but it turned out that this not-so-stupid idea blew all the others
-out of the water in terms of performance.</p>
-<p>Another thing Tavis pushed hard for from near the beginning was
-“display logic”, or simple directives like {#for}, {#if} and
-{#echo}. (OK, {#echo} came later, but conceptually it belongs here.
-I thought display logic was even stupider than compiling to Python
-source code because it would just lead to “DTML hell”-complicated
-templates that are hard to read and maintain, and for which you
-have to learn (and debug) a whole new language when Python does it
-just fine. But others (hi Chuck!) had templates that were
-maintained by secretaries who didn’t know Python, and the
-secretaries needed display logic, so that was that. Finally, after
-working with Cheetah templates (with display logic) and PlowPlate
-templates (with just blocks rather than display logic), I realized
-Tavis was smarter than I was and display logic really did belong in
-the template.</p>
-<p>The next step was making directives for all the Python flow-control
-statements: {#while}, {#try}, {#assert}, etc. Some of them we
-couldn’t think of a use for. Nevertheless, they were easy to code,
-and “somebody” would probably need them “someday”, so we may as
-well implement them now.</p>
-<p>During all this, Chuck Esterbrook, Ian Bicking and others offered
-(and still offer) their support and suggestions, and Chuck gave us
-feedback about his use of Cheetah-its first deployment in a
-commercial production environment. Later, Edmund Lian became our #1
-bug reporter and suggester as he used Cheetah in his web
-applications.</p>
-<p>We were going to release 1.0 in January 2002, but we decided to
-delay it until more people used it in real-world situations and
-gave us feedback about what is still needed. This has led to many
-refinements, and we have added (and removed) features according to
-this feedback. Nevertheless, Cheetah has been changing but stable
-since the late-binding rewrite in fall 2001, and anybody who keeps
-up with the cheetah-discuss mailing list will know when changes
-occur that require modifying one’s template, and since most people
-use point releases rather than CVS, they generally have a few
-week’s warning about any significant changes.</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="output.html" title="Directives: Output"
- >next</a> |</li>
- <li class="right" >
- <a href="safeDelegation.html" title="Safe Delegation"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/index.html b/docs/html/dev_guide/index.html
deleted file mode 100644
index 3988a4a..0000000
--- a/docs/html/dev_guide/index.html
+++ /dev/null
@@ -1,150 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah Developer’s Guide &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Introduction" href="introduction.html" />
- <link rel="prev" title="Cheetah Roadmap" href="../roadmap.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="introduction.html" title="Introduction"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="../roadmap.html" title="Cheetah Roadmap"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah Developer’s Guide</a><ul>
-<li><a class="reference internal" href="#overview">Overview</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="../roadmap.html"
- title="previous chapter">Cheetah Roadmap</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="introduction.html"
- title="next chapter">Introduction</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/index.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah-developer-s-guide">
-<h1>Cheetah Developer’s Guide<a class="headerlink" href="#cheetah-developer-s-guide" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="overview">
-<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
-<p>This guide needs to really be filled out more</p>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="introduction.html">Introduction</a></li>
-<li class="toctree-l1"><a class="reference internal" href="compiler.html">The compiler</a></li>
-<li class="toctree-l1"><a class="reference internal" href="parser.html">The parser</a></li>
-<li class="toctree-l1"><a class="reference internal" href="errorHandling.html">Directives: Error Handling</a></li>
-<li class="toctree-l1"><a class="reference internal" href="placeholders.html">Placeholders</a></li>
-<li class="toctree-l1"><a class="reference internal" href="patching.html">Patching Cheetah</a></li>
-<li class="toctree-l1"><a class="reference internal" href="flowControl.html">Directives: Flow Control</a></li>
-<li class="toctree-l1"><a class="reference internal" href="design.html">Design Decisions and Tradeoffs</a></li>
-<li class="toctree-l1"><a class="reference internal" href="safeDelegation.html">Safe Delegation</a></li>
-<li class="toctree-l1"><a class="reference internal" href="history.html">History of Cheetah</a></li>
-<li class="toctree-l1"><a class="reference internal" href="output.html">Directives: Output</a></li>
-<li class="toctree-l1"><a class="reference internal" href="files.html">Files</a></li>
-<li class="toctree-l1"><a class="reference internal" href="cache.html">Caching placeholders and #cache</a></li>
-<li class="toctree-l1"><a class="reference internal" href="bnf.html">A BNF Grammar of Cheetah</a></li>
-<li class="toctree-l1"><a class="reference internal" href="pyModules.html">.py Template Modules</a></li>
-<li class="toctree-l1"><a class="reference internal" href="comments.html">Directives: Comments</a></li>
-<li class="toctree-l1"><a class="reference internal" href="parserInstructions.html">Directives: Parser Instructions</a></li>
-<li class="toctree-l1"><a class="reference internal" href="template.html">Template</a></li>
-<li class="toctree-l1"><a class="reference internal" href="inheritanceEtc.html">Directives: Import, Inheritance, Declaration and Assignment</a></li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="introduction.html" title="Introduction"
- >next</a> |</li>
- <li class="right" >
- <a href="../roadmap.html" title="Cheetah Roadmap"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/inheritanceEtc.html b/docs/html/dev_guide/inheritanceEtc.html
deleted file mode 100644
index e2b24cd..0000000
--- a/docs/html/dev_guide/inheritanceEtc.html
+++ /dev/null
@@ -1,327 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Directives: Import, Inheritance, Declaration and Assignment &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Cheetah Enhancement Proposals" href="../chep.html" />
- <link rel="prev" title="Template" href="template.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="../chep.html" title="Cheetah Enhancement Proposals"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="template.html" title="Template"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Directives: Import, Inheritance, Declaration and Assignment</a><ul>
-<li><a class="reference internal" href="#import-and-from">#import and #from</a></li>
-<li><a class="reference internal" href="#extends">#extends</a></li>
-<li><a class="reference internal" href="#implements">#implements</a></li>
-<li><a class="reference internal" href="#set-and-set-global">#set and #set global</a></li>
-<li><a class="reference internal" href="#del">#del</a></li>
-<li><a class="reference internal" href="#attr">#attr</a></li>
-<li><a class="reference internal" href="#def">#def</a></li>
-<li><a class="reference internal" href="#block">#block</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="template.html"
- title="previous chapter">Template</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="../chep.html"
- title="next chapter">Cheetah Enhancement Proposals</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/inheritanceEtc.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="directives-import-inheritance-declaration-and-assignment">
-<h1>Directives: Import, Inheritance, Declaration and Assignment<a class="headerlink" href="#directives-import-inheritance-declaration-and-assignment" title="Permalink to this headline">¶</a></h1>
-<p>(inheritanceEtc)</p>
-<div class="section" id="import-and-from">
-<h2>#import and #from<a class="headerlink" href="#import-and-from" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.import)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#import math</span>
-</pre></div>
-</div>
-<p>This construct does not produce any output.</p>
-<p>The generated module, at the bottom of the import section:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">math</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="extends">
-<h2>#extends<a class="headerlink" href="#extends" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.extends)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#extends SomeClass</span>
-</pre></div>
-</div>
-<p>The generated import (skipped if {SomeClass} has already been
-imported):</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">SomeClass</span> <span class="k">import</span> <span class="n">SomeClass</span>
-</pre></div>
-</div>
-<p>The generated class:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">x</span><span class="p">(</span><span class="n">SomeClass</span><span class="p">):</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="implements">
-<h2>#implements<a class="headerlink" href="#implements" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.implements)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#implements doOutput</span>
-</pre></div>
-</div>
-<p>In the generated class, the main method is {.doOutput} instead of
-{.respond}, and the attribute naming this method is:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">_mainCheetahMethod_for_x2</span><span class="o">=</span> <span class="s1">&#39;doOutput&#39;</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="set-and-set-global">
-<h2>#set and #set global<a class="headerlink" href="#set-and-set-global" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.set)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#set $namesList = [&#39;Moe&#39;,&#39;Larry&#39;,&#39;Curly&#39;]
-$namesList
-#set global $toes = [&#39;eeny&#39;, &#39;meeny&#39;, &#39;miney&#39;, &#39;moe&#39;]
-$toes
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="p">[</span><span class="s1">&#39;Moe&#39;</span><span class="p">,</span> <span class="s1">&#39;Larry&#39;</span><span class="p">,</span> <span class="s1">&#39;Curly&#39;</span><span class="p">]</span>
-<span class="p">[</span><span class="s1">&#39;eeny&#39;</span><span class="p">,</span> <span class="s1">&#39;meeny&#39;</span><span class="p">,</span> <span class="s1">&#39;miney&#39;</span><span class="p">,</span> <span class="s1">&#39;moe&#39;</span><span class="p">]</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">1</span> <span class="n">namesList</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Moe&#39;</span><span class="p">,</span><span class="s1">&#39;Larry&#39;</span><span class="p">,</span><span class="s1">&#39;Curly&#39;</span><span class="p">]</span>
-<span class="mi">2</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">namesList</span><span class="p">))</span> <span class="c1"># generated from &#39;$namesList&#39; at line 2, col 1.</span>
-<span class="mi">3</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="mi">4</span> <span class="n">globalSetVars</span><span class="p">[</span><span class="s2">&quot;toes&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;eeny&#39;</span><span class="p">,</span> <span class="s1">&#39;meeny&#39;</span><span class="p">,</span> <span class="s1">&#39;miney&#39;</span><span class="p">,</span> <span class="s1">&#39;moe&#39;</span><span class="p">]</span>
-<span class="mi">5</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;toes&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$toes&#39; at line 4, col 1.</span>
-<span class="mi">6</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>{globalSetVars} is a local variable referencing {._globalSetVars}.
-Writes go into it directly, but reads take advantage of the fact
-that {._globalSetVars} is on the searchList. (In fact, it’s the
-very first namespace.)</p>
-</div>
-<div class="section" id="del">
-<h2>#del<a class="headerlink" href="#del" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.del)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#set $a = 1</span>
-<span class="c1">#del $a</span>
-<span class="c1">#set $a = 2</span>
-<span class="c1">#set $arr = [0, 1, 2]</span>
-<span class="c1">#del $a, $arr[1]</span>
-</pre></div>
-</div>
-<p>In the generated class:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">1</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">1</span>
-<span class="mi">2</span> <span class="k">del</span> <span class="n">a</span>
-<span class="mi">3</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">2</span>
-<span class="mi">4</span> <span class="n">arr</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span>
-<span class="mi">5</span> <span class="k">del</span> <span class="n">a</span><span class="p">,</span> <span class="n">arr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="attr">
-<h2>#attr<a class="headerlink" href="#attr" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.attr)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#attr $namesList = [&#39;Moe&#39;, &#39;Larry&#39;, &#39;Curly&#39;]</span>
-</pre></div>
-</div>
-<p>In the generated class:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">## GENERATED ATTRIBUTES</span>
-
-<span class="n">namesList</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Moe&#39;</span><span class="p">,</span> <span class="s1">&#39;Larry&#39;</span><span class="p">,</span> <span class="s1">&#39;Curly&#39;</span><span class="p">]</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="def">
-<h2>#def<a class="headerlink" href="#def" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.def)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def printArg($arg)
-The argument is $arg.
-#end def
-My method returned $printArg(5).
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">My</span> <span class="n">method</span> <span class="n">returned</span> <span class="n">The</span> <span class="n">argument</span> <span class="ow">is</span> <span class="mf">5.</span>
-<span class="o">.</span>
-</pre></div>
-</div>
-<p>Hmm, not exactly what we expected. The method returns a trailing
-newline because we didn’t end the last line with {#slurp}. So the
-second period (outside the method) appears on a separate line.</p>
-<p>The {#def} generates a method {.printArg} whose structure is
-similar to the main method:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">printArg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
- <span class="n">arg</span><span class="p">,</span>
- <span class="n">trans</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
- <span class="n">dummyTrans</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
- <span class="n">VFS</span><span class="o">=</span><span class="n">valueFromSearchList</span><span class="p">,</span>
- <span class="n">VFN</span><span class="o">=</span><span class="n">valueForName</span><span class="p">,</span>
- <span class="n">getmtime</span><span class="o">=</span><span class="n">getmtime</span><span class="p">,</span>
- <span class="n">currentTime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">):</span>
-
-
- <span class="sd">&quot;&quot;&quot;</span>
-<span class="sd"> Generated from #def printArg($arg) at line 1, col 1.</span>
-<span class="sd"> &quot;&quot;&quot;</span>
-
- <span class="k">if</span> <span class="ow">not</span> <span class="n">trans</span><span class="p">:</span>
- <span class="n">trans</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
- <span class="n">dummyTrans</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
- <span class="n">SL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_searchList</span>
- <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span>
- <span class="n">globalSetVars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_globalSetVars</span>
-
- <span class="c1">########################################</span>
- <span class="c1">## START - generated method body</span>
-
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;The argument is &#39;</span><span class="p">)</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span> <span class="c1"># generated from &#39;$arg&#39; at line 2, col 17.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-
- <span class="c1">########################################</span>
- <span class="c1">## END - generated method body</span>
-
- <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
- <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</pre></div>
-</div>
-<p>When {.printArg} is called from a placeholder, only the arguments
-the user supplied are passed. The other arguments retain their
-default values.</p>
-</div>
-<div class="section" id="block">
-<h2>#block<a class="headerlink" href="#block" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.block)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#block content</span>
-<span class="n">This</span> <span class="n">page</span> <span class="ow">is</span> <span class="n">under</span> <span class="n">construction</span><span class="o">.</span>
-<span class="c1">#end block</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">This</span> <span class="n">page</span> <span class="ow">is</span> <span class="n">under</span> <span class="n">construction</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>This construct generates a method {.content} in the same structure
-as {.printArg} above, containing the write code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;This page is under construction.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>In the main method, the write code is:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="p">(</span><span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">)</span> <span class="c1"># generated from (&#39;content&#39;, &#39;#block content&#39;)</span>
- <span class="c1"># at line 1, col 1.</span>
-</pre></div>
-</div>
-<p>So a block placeholder implicitly passes the current transaction to
-the method.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="../chep.html" title="Cheetah Enhancement Proposals"
- >next</a> |</li>
- <li class="right" >
- <a href="template.html" title="Template"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/introduction.html b/docs/html/dev_guide/introduction.html
deleted file mode 100644
index b9c0ef9..0000000
--- a/docs/html/dev_guide/introduction.html
+++ /dev/null
@@ -1,147 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Introduction &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="The compiler" href="compiler.html" />
- <link rel="prev" title="Cheetah Developer’s Guide" href="index.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="compiler.html" title="The compiler"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="index.html" title="Cheetah Developer’s Guide"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Introduction</a><ul>
-<li><a class="reference internal" href="#who-should-read-this-guide">Who should read this Guide?</a></li>
-<li><a class="reference internal" href="#contents">Contents</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="index.html"
- title="previous chapter">Cheetah Developer’s Guide</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="compiler.html"
- title="next chapter">The compiler</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/introduction.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="introduction">
-<h1>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="who-should-read-this-guide">
-<h2>Who should read this Guide?<a class="headerlink" href="#who-should-read-this-guide" title="Permalink to this headline">¶</a></h2>
-<p>The Cheetah Developers’ Guide is for those who want to learn how
-Cheetah works internally, or wish to modify or extend Cheetah. It
-is assumed that you’ve read the Cheetah Users’ Guide and have an
-intermediate knowledge of Python.</p>
-</div>
-<div class="section" id="contents">
-<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h2>
-<p>This Guide takes a behaviorist approach. First we’ll look at what
-the Cheetah compiler generates when it compiles a template
-definition, and how it compiles the various $placeholder features
-and #directives. Then we’ll stroll through the files in the Cheetah
-source distribution and show how each file contributes to the
-compilation and/or filling of templates. Then we’ll list every
-method/attribute inherited by a template object. Finally, we’ll
-describe how to submit bugfixes/enhancements to Cheetah, and how to
-add to the documentation.</p>
-<p>Appendix A will contain a BNF syntax of the Cheetah template
-language.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="compiler.html" title="The compiler"
- >next</a> |</li>
- <li class="right" >
- <a href="index.html" title="Cheetah Developer’s Guide"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/output.html b/docs/html/dev_guide/output.html
deleted file mode 100644
index bcc67f0..0000000
--- a/docs/html/dev_guide/output.html
+++ /dev/null
@@ -1,375 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Directives: Output &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Files" href="files.html" />
- <link rel="prev" title="History of Cheetah" href="history.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="files.html" title="Files"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="history.html" title="History of Cheetah"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Directives: Output</a><ul>
-<li><a class="reference internal" href="#echo">#echo</a></li>
-<li><a class="reference internal" href="#silent">#silent</a></li>
-<li><a class="reference internal" href="#raw">#raw</a></li>
-<li><a class="reference internal" href="#include">#include</a><ul>
-<li><a class="reference internal" href="#include-raw">#include raw</a></li>
-<li><a class="reference internal" href="#include-from-a-string-or-expression-eval">#include from a string or expression (eval)</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#slurp">#slurp</a></li>
-<li><a class="reference internal" href="#filter">#filter</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="history.html"
- title="previous chapter">History of Cheetah</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="files.html"
- title="next chapter">Files</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/output.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="directives-output">
-<h1>Directives: Output<a class="headerlink" href="#directives-output" title="Permalink to this headline">¶</a></h1>
-<p>(output)</p>
-<div class="section" id="echo">
-<h2>#echo<a class="headerlink" href="#echo" title="Permalink to this headline">¶</a></h2>
-<p>(output.echo)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Here</span> <span class="ow">is</span> <span class="n">my</span> <span class="c1">#echo &#39;, &#39;.join([&#39;silly&#39;]*5) # example</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Here</span> <span class="ow">is</span> <span class="n">my</span> <span class="n">silly</span><span class="p">,</span> <span class="n">silly</span><span class="p">,</span> <span class="n">silly</span><span class="p">,</span> <span class="n">silly</span><span class="p">,</span> <span class="n">silly</span> <span class="n">example</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;Here is my &#39;</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s1">&#39;silly&#39;</span><span class="p">]</span><span class="o">*</span><span class="mi">5</span><span class="p">)</span> <span class="p">))</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39; example</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="silent">
-<h2>#silent<a class="headerlink" href="#silent" title="Permalink to this headline">¶</a></h2>
-<p>(output.silent)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Here</span> <span class="ow">is</span> <span class="n">my</span> <span class="c1">#silent &#39;, &#39;.join([&#39;silly&#39;]*5) # example</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Here</span> <span class="ow">is</span> <span class="n">my</span> <span class="n">example</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;Here is my &#39;</span><span class="p">)</span>
-<span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s1">&#39;silly&#39;</span><span class="p">]</span><span class="o">*</span><span class="mi">5</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39; example</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>OK, it’s not quite covert because that extra space gives it away,
-but it almost succeeds.</p>
-</div>
-<div class="section" id="raw">
-<h2>#raw<a class="headerlink" href="#raw" title="Permalink to this headline">¶</a></h2>
-<p>(output.raw)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Text before raw.
-#raw
-Text in raw. $alligator. $croc.o[&#39;dile&#39;]. #set $a = $b + $c.
-#end raw
-Text after raw.
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Text before raw.
-Text in raw. $alligator. $croc.o[&#39;dile&#39;]. #set $a = $b + $c.
-Text after raw.
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;&#39;&#39;Text before raw.</span>
-<span class="s1">Text in raw. $alligator. $croc.o[&#39;dile&#39;]. #set $a = $b + $c.</span>
-<span class="s1">Text after raw.</span>
-<span class="s1">&#39;&#39;&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>So we see that {#raw} is really like a quoting mechanism. It says
-that anything inside it is ordinary text, and Cheetah joins a
-{#raw} section with adjacent string literals rather than generating
-a separate {write} call.</p>
-</div>
-<div class="section" id="include">
-<h2>#include<a class="headerlink" href="#include" title="Permalink to this headline">¶</a></h2>
-<p>(output.include)</p>
-<p>The main template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#include &quot;y.tmpl&quot;</span>
-</pre></div>
-</div>
-<p>The included template y.tmpl:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Let</span><span class="s1">&#39;s go $voom!</span>
-</pre></div>
-</div>
-<p>The shell command and output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">%</span> <span class="n">voom</span><span class="o">=</span><span class="s2">&quot;VOOM&quot;</span> <span class="n">x</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">env</span>
-<span class="n">Let</span><span class="s1">&#39;s go VOOM!</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_includeCheetahSource</span><span class="p">(</span><span class="s2">&quot;y.tmpl&quot;</span><span class="p">,</span> <span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">,</span> <span class="n">includeFrom</span><span class="o">=</span><span class="s2">&quot;file&quot;</span><span class="p">,</span>
- <span class="n">raw</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
-</pre></div>
-</div>
-<div class="section" id="include-raw">
-<h3>#include raw<a class="headerlink" href="#include-raw" title="Permalink to this headline">¶</a></h3>
-<p>(output.include.raw)</p>
-<p>The main template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#include raw &quot;y.tmpl&quot;</span>
-</pre></div>
-</div>
-<p>The shell command and output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">%</span> <span class="n">voom</span><span class="o">=</span><span class="s2">&quot;VOOM&quot;</span> <span class="n">x</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">env</span>
-<span class="n">Let</span><span class="s1">&#39;s go $voom!</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_includeCheetahSource</span><span class="p">(</span><span class="s2">&quot;y.tmpl&quot;</span><span class="p">,</span> <span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">,</span> <span class="n">includeFrom</span><span class="o">=</span><span class="s2">&quot;fil</span>
-<span class="n">e</span><span class="s2">&quot;, raw=1))</span>
-</pre></div>
-</div>
-<p>That last argument, {raw}, makes the difference.</p>
-</div>
-<div class="section" id="include-from-a-string-or-expression-eval">
-<h3>#include from a string or expression (eval)<a class="headerlink" href="#include-from-a-string-or-expression-eval" title="Permalink to this headline">¶</a></h3>
-<p>(output.include.expression)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#attr $y = &quot;Let&#39;s go $voom!&quot;</span>
-<span class="c1">#include source=$y</span>
-<span class="c1">#include raw source=$y</span>
-<span class="c1">#include source=&quot;Bam! Bam!&quot;</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>% voom=&quot;VOOM&quot; x.py --env
-Let&#39;s go VOOM!Let&#39;s go $voom!Bam! Bam!
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_includeCheetahSource</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;y&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">,</span>
- <span class="n">includeFrom</span><span class="o">=</span><span class="s2">&quot;str&quot;</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">includeID</span><span class="o">=</span><span class="s2">&quot;481020889808.74&quot;</span><span class="p">))</span>
-<span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_includeCheetahSource</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;y&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">,</span>
- <span class="n">includeFrom</span><span class="o">=</span><span class="s2">&quot;str&quot;</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">includeID</span><span class="o">=</span><span class="s2">&quot;711020889808.75&quot;</span><span class="p">))</span>
-<span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_includeCheetahSource</span><span class="p">(</span><span class="s2">&quot;Bam! Bam!&quot;</span><span class="p">,</span> <span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">,</span>
- <span class="n">includeFrom</span><span class="o">=</span><span class="s2">&quot;str&quot;</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">includeID</span><span class="o">=</span><span class="s2">&quot;1001020889808.75&quot;</span><span class="p">))</span>
-</pre></div>
-</div>
-<p>Later in the generated class:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">y</span> <span class="o">=</span> <span class="s2">&quot;Let&#39;s go $voom!&quot;</span>
-</pre></div>
-</div>
-</div>
-</div>
-<div class="section" id="slurp">
-<h2>#slurp<a class="headerlink" href="#slurp" title="Permalink to this headline">¶</a></h2>
-<p>(output.slurp)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $i in range(5)
-$i
-#end for
-#for $i in range(5)
-$i #slurp
-#end for
-Line after slurp.
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">0</span>
-<span class="mi">1</span>
-<span class="mi">2</span>
-<span class="mi">3</span>
-<span class="mi">4</span>
-<span class="mi">0</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span> <span class="n">Line</span> <span class="n">after</span> <span class="n">slurp</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> <span class="c1"># generated from &#39;$i&#39; at line 2, col 1.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
- <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">i</span><span class="p">))</span> <span class="c1"># generated from &#39;$i&#39; at line 5, col 1.</span>
- <span class="n">write</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;Line after slurp.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>The space after each number is because of the space before {#slurp}
-in the template definition.</p>
-</div>
-<div class="section" id="filter">
-<h2>#filter<a class="headerlink" href="#filter" title="Permalink to this headline">¶</a></h2>
-<p>(output.filter)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#attr $ode = &quot;&gt;&gt; Rubber Ducky, you&#39;re the one! You make bathtime so much fun! &lt;&lt;&quot;
-$ode
-#filter WebSafe
-$ode
-#filter MaxLen
-${ode, maxlen=13}
-#filter None
-${ode, maxlen=13}
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&gt;&gt;</span> <span class="n">Rubber</span> <span class="n">Ducky</span><span class="p">,</span> <span class="n">you</span><span class="s1">&#39;re the one! You make bathtime so much fun! &lt;&lt;</span>
-<span class="o">&amp;</span><span class="n">gt</span><span class="p">;</span><span class="o">&amp;</span><span class="n">gt</span><span class="p">;</span> <span class="n">Rubber</span> <span class="n">Ducky</span><span class="p">,</span> <span class="n">you</span><span class="s1">&#39;re the one! You make bathtime so much fun! &amp;lt;&amp;lt;</span>
-<span class="o">&gt;&gt;</span> <span class="n">Rubber</span> <span class="n">Duc</span>
-<span class="o">&gt;&gt;</span> <span class="n">Rubber</span> <span class="n">Ducky</span><span class="p">,</span> <span class="n">you</span><span class="s1">&#39;re the one! You make bathtime so much fun! &lt;&lt;</span>
-</pre></div>
-</div>
-<p>The {WebSafe} filter escapes characters that have a special meaning
-in HTML. The {MaxLen} filter chops off values at the specified
-length. {#filter None} returns to the default filter, which ignores
-the {maxlen} argument.</p>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="mi">1</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;ode&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$ode&#39; at line 2, col 1.</span>
- <span class="mi">2</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
- <span class="mi">3</span> <span class="n">filterName</span> <span class="o">=</span> <span class="s1">&#39;WebSafe&#39;</span>
- <span class="mi">4</span> <span class="k">if</span> <span class="s2">&quot;WebSafe&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filters</span><span class="p">:</span>
- <span class="mi">5</span> <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filters</span><span class="p">[</span><span class="n">filterName</span><span class="p">]</span>
- <span class="mi">6</span> <span class="k">else</span><span class="p">:</span>
- <span class="mi">7</span> <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span> <span class="o">=</span> \
- <span class="mi">8</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filters</span><span class="p">[</span><span class="n">filterName</span><span class="p">]</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_filtersLib</span><span class="p">,</span>
- <span class="n">filterName</span><span class="p">)(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">filter</span>
- <span class="mi">9</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;ode&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$ode&#39; at line 4, col 1.</span>
-<span class="mi">10</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="mi">11</span> <span class="n">filterName</span> <span class="o">=</span> <span class="s1">&#39;MaxLen&#39;</span>
-<span class="mi">12</span> <span class="k">if</span> <span class="s2">&quot;MaxLen&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filters</span><span class="p">:</span>
-<span class="mi">13</span> <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filters</span><span class="p">[</span><span class="n">filterName</span><span class="p">]</span>
-<span class="mi">14</span> <span class="k">else</span><span class="p">:</span>
-<span class="mi">15</span> <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span> <span class="o">=</span> \
-<span class="mi">16</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filters</span><span class="p">[</span><span class="n">filterName</span><span class="p">]</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_filtersLib</span><span class="p">,</span>
- <span class="n">filterName</span><span class="p">)(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">filter</span>
-<span class="mi">17</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;ode&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="n">maxlen</span><span class="o">=</span><span class="mi">13</span><span class="p">))</span> <span class="c1"># generated from</span>
- <span class="c1">#&#39;${ode, maxlen=13}&#39; at line 6, col 1.</span>
-<span class="mi">18</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="mi">19</span> <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_initialFilter</span>
-<span class="mi">20</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;ode&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="n">maxlen</span><span class="o">=</span><span class="mi">13</span><span class="p">))</span> <span class="c1"># generated from</span>
- <span class="c1">#&#39;${ode, maxlen=13}&#39; at line 8, col 1.</span>
-<span class="mi">21</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>As we’ve seen many times, Cheetah wraps all placeholder lookups in
-a {filter} call. (This also applies to non-searchList lookups:
-local, global and builtin variables.) The {filter} “function” is
-actually an alias to the current filter object:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span>
-</pre></div>
-</div>
-<p>as set at the top of the main method. Here in lines 3-8 and 11-16
-we see the filter being changed. Whoops, I lied. {filter} is not an
-alias to the filter object itself but to that object’s {.filter}
-method. Line 19 switches back to the default filter.</p>
-<p>In line 17 we see the {maxlen} argument being passed as a keyword
-argument to {filter} (not to {VFS}). In line 20 the same thing
-happens although the default filter ignores the argument.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="files.html" title="Files"
- >next</a> |</li>
- <li class="right" >
- <a href="history.html" title="History of Cheetah"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/parser.html b/docs/html/dev_guide/parser.html
deleted file mode 100644
index 7bc796f..0000000
--- a/docs/html/dev_guide/parser.html
+++ /dev/null
@@ -1,120 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The parser &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Directives: Error Handling" href="errorHandling.html" />
- <link rel="prev" title="The compiler" href="compiler.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="errorHandling.html" title="Directives: Error Handling"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="compiler.html" title="The compiler"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="compiler.html"
- title="previous chapter">The compiler</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="errorHandling.html"
- title="next chapter">Directives: Error Handling</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/parser.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="the-parser">
-<h1>The parser<a class="headerlink" href="#the-parser" title="Permalink to this headline">¶</a></h1>
-<p>(parser)</p>
-<p>How templates are compiled: a walk through Parser.py’s source.
-(Also need to look at Lexer.py, but not too closely.)</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="errorHandling.html" title="Directives: Error Handling"
- >next</a> |</li>
- <li class="right" >
- <a href="compiler.html" title="The compiler"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/parserInstructions.html b/docs/html/dev_guide/parserInstructions.html
deleted file mode 100644
index 0095827..0000000
--- a/docs/html/dev_guide/parserInstructions.html
+++ /dev/null
@@ -1,172 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Directives: Parser Instructions &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Template" href="template.html" />
- <link rel="prev" title="Directives: Comments" href="comments.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="template.html" title="Template"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="comments.html" title="Directives: Comments"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Directives: Parser Instructions</a><ul>
-<li><a class="reference internal" href="#breakpoint">#breakpoint</a></li>
-<li><a class="reference internal" href="#compiler">#compiler</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="comments.html"
- title="previous chapter">Directives: Comments</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="template.html"
- title="next chapter">Template</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/parserInstructions.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="directives-parser-instructions">
-<h1>Directives: Parser Instructions<a class="headerlink" href="#directives-parser-instructions" title="Permalink to this headline">¶</a></h1>
-<p>(parserInstructions)</p>
-<div class="section" id="breakpoint">
-<h2>#breakpoint<a class="headerlink" href="#breakpoint" title="Permalink to this headline">¶</a></h2>
-<p>(parserInstructions.breakpoint)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Text</span> <span class="n">before</span> <span class="n">breakpoint</span><span class="o">.</span>
-<span class="c1">#breakpoint</span>
-<span class="n">Text</span> <span class="n">after</span> <span class="n">breakpoint</span><span class="o">.</span>
-<span class="c1">#raise RuntimeError</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Text</span> <span class="n">before</span> <span class="n">breakpoint</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;Text before breakpoint.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Nothing after the breakpoint was compiled.</p>
-</div>
-<div class="section" id="compiler">
-<h2>#compiler<a class="headerlink" href="#compiler" title="Permalink to this headline">¶</a></h2>
-<p>(parserInstructions.compiler)</p>
-<p>The template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">Not</span> <span class="n">a</span> <span class="n">comment</span>
-<span class="c1">#compiler commentStartToken = &#39;//&#39;</span>
-<span class="o">//</span> <span class="n">A</span> <span class="n">comment</span>
-<span class="c1">#compiler reset</span>
-<span class="o">//</span> <span class="n">Not</span> <span class="n">a</span> <span class="n">comment</span>
-</pre></div>
-</div>
-<p>The output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">//</span> <span class="n">Not</span> <span class="n">a</span> <span class="n">comment</span>
-<span class="o">//</span> <span class="n">Not</span> <span class="n">a</span> <span class="n">comment</span>
-</pre></div>
-</div>
-<p>The generated code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;// Not a comment</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="c1"># A comment</span>
-<span class="n">write</span><span class="p">(</span><span class="s1">&#39;// Not a comment</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>So this didn’t affect the generated program, it just affected how
-the template definition was read.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="template.html" title="Template"
- >next</a> |</li>
- <li class="right" >
- <a href="comments.html" title="Directives: Comments"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/patching.html b/docs/html/dev_guide/patching.html
deleted file mode 100644
index ca1b576..0000000
--- a/docs/html/dev_guide/patching.html
+++ /dev/null
@@ -1,243 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Patching Cheetah &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Directives: Flow Control" href="flowControl.html" />
- <link rel="prev" title="Placeholders" href="placeholders.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="flowControl.html" title="Directives: Flow Control"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="placeholders.html" title="Placeholders"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Patching Cheetah</a><ul>
-<li><a class="reference internal" href="#file-requirements">File Requirements</a></li>
-<li><a class="reference internal" href="#testing-changes-and-building-regression-tests">Testing Changes and Building Regression Tests</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="placeholders.html"
- title="previous chapter">Placeholders</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="flowControl.html"
- title="next chapter">Directives: Flow Control</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/patching.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="patching-cheetah">
-<h1>Patching Cheetah<a class="headerlink" href="#patching-cheetah" title="Permalink to this headline">¶</a></h1>
-<p>(patching)</p>
-<p>How to commit changes to CVS or submit patches, how to run the test
-suite. Describe distutils and how the regression tests work.</p>
-<div class="section" id="file-requirements">
-<h2>File Requirements<a class="headerlink" href="#file-requirements" title="Permalink to this headline">¶</a></h2>
-<p>(patching.fileRequirements)</p>
-<p>The code{Template} class contains not only the Cheetah
-infrastructure, but also some convenience methods useful in all
-templates. More methods may be added if it’s generally agreed among
-Cheetah developers that the method is sufficiently useful to all
-types of templates, or at least to all types of HTML-output
-templates. If a method is too long to fit into {Template} -
-especially if it has helper methods - put it in a mixin class under
-{Cheetah.Utils} and inherit it.</p>
-<p>Routines for a specific problem domain should be put under
-{Cheetah.Tools}, so that it doesn’t clutter the namespace unless
-the user asks for it.</p>
-<p>Remember: {Cheetah.Utils} is for objects required by any part of
-Cheetah’s core. {Cheetah.Tools} is for completely optional objects.
-It should always be possible to delete {Cheetah.Tools} without
-breaking Cheetah’s core services.</p>
-<p>If a core method needs to look up an attribute defined under
-{Cheetah.Tools}, it should use {hasattr()} and gracefully provide a
-default if the attribute does not exist (meaning the user has not
-imported that subsystem).</p>
-</div>
-<div class="section" id="testing-changes-and-building-regression-tests">
-<h2>Testing Changes and Building Regression Tests<a class="headerlink" href="#testing-changes-and-building-regression-tests" title="Permalink to this headline">¶</a></h2>
-<p>(patching.testing)</p>
-<p>Cheetah ships with a regression test suite. To run the built-in
-tests, execute at the shell prompt:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">cheetah</span> <span class="n">test</span>
-</pre></div>
-</div>
-<p>Before checking any changes in, run the tests and verify they all
-pass. That way, users can check out the CVS version of Cheetah at
-any time with a fairly high confidence that it will work. If you
-fix a bug or add a feature, please take the time to add a test that
-exploits the bug/feature. This will help in the future, to prevent
-somebody else from breaking it again without realizing it. Users
-can also run the test suite to verify all the features work on
-their particular platform and computer.</p>
-<p>The general procedure for modifying Cheetah is as follows:</p>
-<ol class="arabic simple">
-<li>Write a simple Python program that exploits the bug/feature
-you’re working on. You can either write a regression test (see
-below), or a separate program that writes the template output to
-one file and put the expected output in another file; then you can
-run {diff} on the two outputs. ({diff} is a utility included on all
-Unix-like systems. It shows the differences between two files line
-by line. A precompiled Windows version is at
-<a class="reference external" href="http://gnuwin32.sourceforge.net/packages/diffutils.htm">http://gnuwin32.sourceforge.net/packages/diffutils.htm</a>, and MacOS
-sources at
-<a class="reference external" href="http://perso.wanadoo.fr/gilles.depeyrot/DevTools_en.html">http://perso.wanadoo.fr/gilles.depeyrot/DevTools_en.html</a>.)</li>
-<li>Make the change in your Cheetah CVS sandbox or in your installed
-version of Cheetah. If you make it in the sandbox, you’ll have to
-run {python setup.py install} before testing it. If you make it in
-the installed version, do { not} run the installer or it will
-overwrite your changes!</li>
-<li>Run {cheetah test} to verify you didn’t break anything. Then run
-your little test program.</li>
-<li>Repeat steps 2-3 until everything is correct.</li>
-<li>Turn your little program into a regression test as described
-below.</li>
-<li>When {cheetah test} runs cleanly with your regression test
-included, update the {docs/news.rst} file and check in your changes. If
-you made the changes in your installed copy of Cheetah, you’ll have
-to copy them back into the CVS sandbox first. If you added any
-files that must be distributed, { be sure to} {cvs add} them before
-committing. Otherwise Cheetah will run fine on your computer but
-fail on anybody else’s, and the test suite can’t check for this.</li>
-<li>Announce the change on the cheetahtemplate-discuss list and
-provide a tutorial if necessary. The documentation maintainer will
-update the Users’ Guide and Developers’ Guide based on this message
-and on the changelog.</li>
-</ol>
-<p>If you add a directory to Cheetah, you have to mention it in
-{setup.py} or it won’t be installed.</p>
-<p>The tests are in the {Cheetah.Tests} package, aka the {src/Tests/}
-directory of your CVS sandbox. Most of the tests are in
-{SyntaxAndOutput.py}. You can either run all the tests or choose
-which to run:</p>
-<blockquote>
-<div><p>Run all the tests. (Equivalent to {cheetah test}.)</p>
-<p>Run only the tests in that module.</p>
-<p>Run only the tests in the class {CGI} inside the module. The class
-must be a direct or indirect subclass of
-{unittest_local_copy.TestCase}.</p>
-<p>Run the tests in classes {CGI} and {Indenter}.</p>
-<p>Run only test {test1}, which is a method in the {CGI} class.</p>
-</div></blockquote>
-<p>To make a SyntaxAndOutput test, first see if your test logically
-fits into one of the existing classes. If so, simply add a method;
-e.g., {test16}. The method should not require any arguments except
-{self}, and should call {.verify(source, expectedOutput)}, where
-the two arguments are a template definition string and a control
-string. The tester will complain if the template output does not
-match the control string. You have a wide variety of placeholder
-variables to choose from, anything that’s included in the
-{defaultTestNameSpace} global dictionary. If that’s not enough, add
-items to the dictionary, but please keep it from being cluttered
-with wordy esoteric items for a single test).</p>
-<p>If your test logically belongs in a separate class, create a
-subclass of {OutputTest}. You do not need to do anything else; the
-test suite will automatically find your class in the module. Having
-a separate class allows you to define state variables needed by
-your tests (see the {CGI} class) or override {.searchList()} (see
-the {Indenter} class) to provide your own searchList.</p>
-<p>To modify another test module or create your own test module,
-you’ll have to study the existing modules, the
-{unittest_local_copy} source, and the {unittest} documentation in
-the Python Library Reference. Note that we are using a hacked
-version of {unittest} to make a more convenient test structure for
-Cheetah. The differences between {unittest_local_copy} and
-Python’s standard {unittest} are documented at the top of the
-module.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="flowControl.html" title="Directives: Flow Control"
- >next</a> |</li>
- <li class="right" >
- <a href="placeholders.html" title="Placeholders"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/placeholders.html b/docs/html/dev_guide/placeholders.html
deleted file mode 100644
index b363c38..0000000
--- a/docs/html/dev_guide/placeholders.html
+++ /dev/null
@@ -1,582 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Placeholders &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Patching Cheetah" href="patching.html" />
- <link rel="prev" title="Directives: Error Handling" href="errorHandling.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="patching.html" title="Patching Cheetah"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="errorHandling.html" title="Directives: Error Handling"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Placeholders</a><ul>
-<li><a class="reference internal" href="#simple-placeholders">Simple placeholders</a></li>
-<li><a class="reference internal" href="#complex-placeholders">Complex placeholders</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="errorHandling.html"
- title="previous chapter">Directives: Error Handling</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="patching.html"
- title="next chapter">Patching Cheetah</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/placeholders.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="placeholders">
-<h1>Placeholders<a class="headerlink" href="#placeholders" title="Permalink to this headline">¶</a></h1>
-<p>(placeholders)</p>
-<div class="section" id="simple-placeholders">
-<h2>Simple placeholders<a class="headerlink" href="#simple-placeholders" title="Permalink to this headline">¶</a></h2>
-<p>(placeholders.simple)</p>
-<p>Let’s add a few $placeholders to our template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">values</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;what&#39;</span><span class="p">:</span> <span class="s1">&#39;surreal&#39;</span><span class="p">,</span> <span class="s1">&#39;punctuation&#39;</span><span class="p">:</span> <span class="s1">&#39;?&#39;</span><span class="p">}</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
-<span class="gp">... </span><span class="s2">Hello, $what world$punctuation</span>
-<span class="gp">... </span><span class="s2">One of Python&#39;s least-used functions is $xrange.</span>
-<span class="gp">... </span><span class="s2">&quot;&quot;&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">values</span><span class="p">])</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">t</span>
-<span class="go">Hello, surreal world?</span>
-<span class="go">One of Python&#39;s least-used functions is &lt;built-in function xrange&gt;.</span>
-
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">t</span><span class="o">.</span><span class="n">generatedModuleCode</span><span class="p">()</span>
-<span class="go"> 1 #!/usr/bin/env python</span>
-
-<span class="go"> 2 &quot;&quot;&quot;</span>
-<span class="go"> 3 Autogenerated by CHEETAH: The Python-Powered Template Engine</span>
-<span class="go"> 4 CHEETAH VERSION: 0.9.12</span>
-<span class="go"> 5 Generation time: Sun Apr 21 00:53:01 2002</span>
-<span class="go"> 6 &quot;&quot;&quot;</span>
-
-<span class="go"> 7 __CHEETAH_genTime__ = &#39;Sun Apr 21 00:53:01 2002&#39;</span>
-<span class="go"> 8 __CHEETAH_version__ = &#39;0.9.12&#39;</span>
-
-<span class="go"> 9 ##################################################</span>
-<span class="go"> 10 ## DEPENDENCIES</span>
-
-<span class="go"> 11 import sys</span>
-<span class="go"> 12 import os</span>
-<span class="go"> 13 import os.path</span>
-<span class="go"> 14 from os.path import getmtime, exists</span>
-<span class="go"> 15 import time</span>
-<span class="go"> 16 import types</span>
-<span class="go"> 17 from Cheetah.Template import Template</span>
-<span class="go"> 18 from Cheetah.DummyTransaction import DummyTransaction</span>
-<span class="go"> 19 from Cheetah.NameMapper import NotFound, valueForName,</span>
-<span class="go"> valueFromSearchList</span>
-<span class="go"> 20 import Cheetah.Filters as Filters</span>
-<span class="go"> 21 import Cheetah.ErrorCatchers as ErrorCatchers</span>
-
-<span class="go"> 22 ##################################################</span>
-<span class="go"> 23 ## MODULE CONSTANTS</span>
-
-<span class="go"> 24 try:</span>
-<span class="go"> 25 True, False</span>
-<span class="go"> 26 except NameError:</span>
-<span class="go"> 27 True, False = (1==1), (1==0)</span>
-
-<span class="go"> 28 ##################################################</span>
-<span class="go"> 29 ## CLASSES</span>
-
-<span class="go"> 30 class GenTemplate(Template):</span>
-<span class="go"> 31 &quot;&quot;&quot;</span>
-<span class="go"> 32</span>
-<span class="go"> 33 Autogenerated by CHEETAH: The Python-Powered Template Engine</span>
-<span class="go"> 34 &quot;&quot;&quot;</span>
-
-<span class="go"> 35 ##################################################</span>
-<span class="go"> 36 ## GENERATED METHODS</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">37</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">KWs</span><span class="p">):</span>
-<span class="mi">38</span> <span class="s2">&quot;&quot;&quot;</span>
-<span class="s2">39</span>
-<span class="s2">40 &quot;&quot;&quot;</span>
-
-<span class="mi">41</span> <span class="n">Template</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">KWs</span><span class="p">)</span>
-
-<span class="mi">42</span> <span class="k">def</span> <span class="nf">respond</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
-<span class="mi">43</span> <span class="n">trans</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-<span class="mi">44</span> <span class="n">dummyTrans</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-<span class="mi">45</span> <span class="n">VFS</span><span class="o">=</span><span class="n">valueFromSearchList</span><span class="p">,</span>
-<span class="mi">46</span> <span class="n">VFN</span><span class="o">=</span><span class="n">valueForName</span><span class="p">,</span>
-<span class="mi">47</span> <span class="n">getmtime</span><span class="o">=</span><span class="n">getmtime</span><span class="p">,</span>
-<span class="mi">48</span> <span class="n">currentTime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">):</span>
-
-
-<span class="mi">49</span> <span class="s2">&quot;&quot;&quot;</span>
-<span class="s2">50 This is the main method generated by Cheetah</span>
-<span class="s2">51 &quot;&quot;&quot;</span>
-
-<span class="mi">52</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">trans</span><span class="p">:</span>
-<span class="mi">53</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
-<span class="mi">54</span> <span class="n">dummyTrans</span> <span class="o">=</span> <span class="kc">True</span>
-<span class="mi">55</span> <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
-<span class="mi">56</span> <span class="n">SL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_searchList</span>
-<span class="mi">57</span> <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span>
-<span class="mi">58</span> <span class="n">globalSetVars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_globalSetVars</span>
-<span class="mi">59</span>
-<span class="mi">60</span> <span class="c1">########################################</span>
-<span class="mi">61</span> <span class="c1">## START - generated method body</span>
-<span class="mi">62</span>
-<span class="mi">63</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;Hello, &#39;</span><span class="p">)</span>
-<span class="mi">64</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;what&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$what&#39; at</span>
- <span class="c1"># line 1, col 8.</span>
-<span class="mi">65</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39; world&#39;</span><span class="p">)</span>
-<span class="mi">66</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;punctuation&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from</span>
- <span class="c1"># &#39;$punctuation&#39; at line 1, col 19.</span>
-<span class="mi">67</span> <span class="n">write</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">One of Python&#39;s least-used methods is &quot;</span><span class="p">)</span>
-<span class="mi">68</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">xrange</span><span class="p">))</span> <span class="c1"># generated from &#39;$xrange&#39; at line 2,</span>
- <span class="c1"># col 39.</span>
-<span class="mi">69</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="mi">70</span>
-<span class="mi">71</span> <span class="c1">########################################</span>
-<span class="mi">72</span> <span class="c1">## END - generated method body</span>
-<span class="mi">73</span>
-<span class="mi">74</span> <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
-<span class="mi">75</span> <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
-<span class="mi">76</span> <span class="k">else</span><span class="p">:</span>
-<span class="mi">77</span> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">78</span>
-<span class="mi">79</span> <span class="c1">##################################################</span>
-<span class="mi">80</span> <span class="c1">## GENERATED ATTRIBUTES</span>
-
-<span class="mi">81</span> <span class="fm">__str__</span> <span class="o">=</span> <span class="n">respond</span>
-<span class="mi">82</span> <span class="n">_mainCheetahMethod_for_GenTemplate</span><span class="o">=</span> <span class="s1">&#39;respond&#39;</span>
-
-<span class="mi">83</span> <span class="c1"># CHEETAH was developed by Tavis Rudd, Chuck Esterbrook, Ian Bicking</span>
- <span class="c1"># and Mike Orr;</span>
-<span class="mi">84</span> <span class="c1"># with code, advice and input from many other volunteers.</span>
-<span class="mi">85</span> <span class="c1"># For more information visit http://cheetahtemplate.org/</span>
-
-<span class="mi">86</span> <span class="c1">##################################################</span>
-<span class="mi">87</span> <span class="c1">## if run from command line:</span>
-<span class="mi">88</span> <span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
-<span class="mi">89</span> <span class="n">GenTemplate</span><span class="p">()</span><span class="o">.</span><span class="n">runAsMainProgram</span><span class="p">()</span>
-</pre></div>
-</div>
-<p>(Again, I have added line numbers and split the lines as in the
-previous chapter.)</p>
-<p>This generated template module is different from the previous one
-in several trivial respects and one important respect. Trivially,
-{._filePath} and {._fileMtime} are not updated in
-{.__init__}, so they inherit the value {None} from {Template}.
-Also, that if-stanza in {.respond} that recompiles the template if
-the source file changes is missing - because there is no source
-file. So this module is several lines shorter than the other one.</p>
-<p>But the important way this module is different is that instead of
-the one {write} call outputting a string literal, this module has a
-series of {write} calls (lines 63-69) outputting successive chunks
-of the template. Regular text has been translated into a string
-literal, and placeholders into function calls. Every placeholder is
-wrapped inside a {filter} call to apply the current output filter.
-(The default output filter converts all objects to strings, and
-{None} to {“”}.)</p>
-<p>Placeholders referring to a Python builtin like {xrange} (line 68)
-generate a bare variable name. Placeholders to be looked up in the
-searchList have a nested function call; e.g.,</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;what&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$what&#39; at line 1, col 8.</span>
-</pre></div>
-</div>
-<p>{VFS}, remember, is a function imported from {Cheetah.NameMapper}
-that looks up a value in a searchList. So we pass it the
-searchList, the name to look up, and a boolean (1) indicating we
-want autocalling. (It’s {1} rather than {True} because it’s
-generated from an {and} expression, and that’s what Python 2.2
-outputs for true {and} expressions.)</p>
-</div>
-<div class="section" id="complex-placeholders">
-<h2>Complex placeholders<a class="headerlink" href="#complex-placeholders" title="Permalink to this headline">¶</a></h2>
-<p>(placeholders.complex)</p>
-<p>Placeholders can get far more complicated than that. This example
-shows what kind of code the various NameMapper features produce.
-The formulas are taken from Cheetah’s test suite, in the
-{Cheetah.Tests.SyntaxAndOutput.Placeholders} class.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>1 placeholder: $aStr
-2 placeholders: $aStr $anInt
-2 placeholders, back-to-back: $aStr$anInt
-1 placeholder enclosed in {}: ${aStr}
-1 escaped placeholder: \$var
-func placeholder - with (): $aFunc()
-func placeholder - with (int): $aFunc(1234)
-func placeholder - with (string): $aFunc(&#39;aoeu&#39;)
-func placeholder - with (&#39;&#39;&#39;\nstring&#39;\n&#39;&#39;&#39;): $aFunc(&#39;&#39;&#39;\naoeu&#39;\n&#39;&#39;&#39;)
-func placeholder - with (string*int): $aFunc(&#39;aoeu&#39;*2)
-func placeholder - with (int*float): $aFunc(2*2.0)
-Python builtin values: $None $True $False
-func placeholder - with ($arg=float): $aFunc($arg=4.0)
-deeply nested argstring: $aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) ):
-function with None: $aFunc(None)
-autocalling: $aFunc! $aFunc().
-nested autocalling: $aFunc($aFunc).
-list subscription: $aList[0]
-list slicing: $aList[:2]
-list slicing and subcription combined: $aList[:2][0]
-dict - NameMapper style: $aDict.one
-dict - Python style: $aDict[&#39;one&#39;]
-dict combined with autocalled string method: $aDict.one.upper
-dict combined with string method: $aDict.one.upper()
-nested dict - NameMapper style: $aDict.nestedDict.two
-nested dict - Python style: $aDict[&#39;nestedDict&#39;][&#39;two&#39;]
-nested dict - alternating style: $aDict[&#39;nestedDict&#39;].two
-nested dict - NameMapper style + method: $aDict.nestedDict.two.upper
-nested dict - alternating style + method: $aDict[&#39;nestedDict&#39;].two.upper
-nested dict - NameMapper style + method + slice: $aDict.nestedDict.two.upper[:4]
-nested dict - Python style, variable key: $aDict[$anObj.meth(&#39;nestedDict&#39;)].two
-object method: $anObj.meth1
-object method + complex slice: $anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ]
-very complex slice: $( anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ] )
-$_(&#39;a call to gettext&#39;)
-</pre></div>
-</div>
-<p>We’ll need a big program to set up the placeholder values. Here it
-is:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env python</span>
-<span class="kn">from</span> <span class="nn">ComplexExample</span> <span class="k">import</span> <span class="n">ComplexExample</span>
-
-<span class="k">try</span><span class="p">:</span> <span class="c1"># Python &gt;= 2.2.1</span>
- <span class="kc">True</span><span class="p">,</span> <span class="kc">False</span>
-<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="c1"># Older Python</span>
- <span class="kc">True</span><span class="p">,</span> <span class="kc">False</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">==</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
-
-<span class="k">class</span> <span class="nc">DummyClass</span><span class="p">:</span>
- <span class="n">_called</span> <span class="o">=</span> <span class="kc">False</span>
- <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="k">return</span> <span class="s1">&#39;object&#39;</span>
-
- <span class="k">def</span> <span class="nf">meth</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;arff&quot;</span><span class="p">):</span>
- <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-
- <span class="k">def</span> <span class="nf">meth1</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="s2">&quot;doo&quot;</span><span class="p">):</span>
- <span class="k">return</span> <span class="n">arg</span>
-
- <span class="k">def</span> <span class="nf">meth2</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg1</span><span class="o">=</span><span class="s2">&quot;a1&quot;</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="s2">&quot;a2&quot;</span><span class="p">):</span>
- <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">arg1</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">arg2</span><span class="p">)</span>
-
- <span class="k">def</span> <span class="nf">callIt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="o">=</span><span class="mi">1234</span><span class="p">):</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_called</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">_callArg</span> <span class="o">=</span> <span class="n">arg</span>
-
-<span class="k">def</span> <span class="nf">dummyFunc</span><span class="p">(</span><span class="n">arg</span><span class="o">=</span><span class="s2">&quot;Scooby&quot;</span><span class="p">):</span>
- <span class="k">return</span> <span class="n">arg</span>
-
-<span class="n">defaultTestNameSpace</span> <span class="o">=</span> <span class="p">{</span>
- <span class="s1">&#39;aStr&#39;</span><span class="p">:</span><span class="s1">&#39;blarg&#39;</span><span class="p">,</span>
- <span class="s1">&#39;anInt&#39;</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span>
- <span class="s1">&#39;aFloat&#39;</span><span class="p">:</span><span class="mf">1.5</span><span class="p">,</span>
- <span class="s1">&#39;aList&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;item0&#39;</span><span class="p">,</span><span class="s1">&#39;item1&#39;</span><span class="p">,</span><span class="s1">&#39;item2&#39;</span><span class="p">],</span>
- <span class="s1">&#39;aDict&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s1">&#39;one&#39;</span><span class="p">:</span><span class="s1">&#39;item1&#39;</span><span class="p">,</span>
- <span class="s1">&#39;two&#39;</span><span class="p">:</span><span class="s1">&#39;item2&#39;</span><span class="p">,</span>
- <span class="s1">&#39;nestedDict&#39;</span><span class="p">:{</span><span class="mi">1</span><span class="p">:</span><span class="s1">&#39;nestedItem1&#39;</span><span class="p">,</span>
- <span class="s1">&#39;two&#39;</span><span class="p">:</span><span class="s1">&#39;nestedItem2&#39;</span>
- <span class="p">},</span>
- <span class="s1">&#39;nestedFunc&#39;</span><span class="p">:</span><span class="n">dummyFunc</span><span class="p">,</span>
- <span class="p">},</span>
- <span class="s1">&#39;aFunc&#39;</span><span class="p">:</span> <span class="n">dummyFunc</span><span class="p">,</span>
- <span class="s1">&#39;anObj&#39;</span><span class="p">:</span> <span class="n">DummyClass</span><span class="p">(),</span>
- <span class="s1">&#39;aMeth&#39;</span><span class="p">:</span> <span class="n">DummyClass</span><span class="p">()</span><span class="o">.</span><span class="n">meth1</span><span class="p">,</span>
- <span class="s1">&#39;_&#39;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="s1">&#39;translated &#39;</span> <span class="o">+</span> <span class="n">x</span>
-<span class="p">}</span>
-
-<span class="nb">print</span> <span class="n">ComplexExample</span><span class="p">(</span> <span class="n">searchList</span><span class="o">=</span><span class="p">[</span><span class="n">defaultTestNameSpace</span><span class="p">]</span> <span class="p">)</span>
-</pre></div>
-</div>
-<p>Here’s the output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>1 placeholder: blarg
-2 placeholders: blarg 1
-2 placeholders, back-to-back: blarg1
-1 placeholder enclosed in {}: blarg
-1 escaped placeholder: $var
-func placeholder - with (): Scooby
-func placeholder - with (int): 1234
-func placeholder - with (string): aoeu
-func placeholder - with (&#39;&#39;&#39;\nstring&#39;\n&#39;&#39;&#39;):
-aoeu&#39;
-
-func placeholder - with (string*int): aoeuaoeu
-func placeholder - with (int*float): 4.0
-Python builtin values: 1 0
-func placeholder - with ($arg=float): 4.0
-deeply nested argstring: 1:
-function with None:
-autocalling: Scooby! Scooby.
-nested autocalling: Scooby.
-list subscription: item0
-list slicing: [&#39;item0&#39;, &#39;item1&#39;]
-list slicing and subcription combined: item0
-dict - NameMapper style: item1
-dict - Python style: item1
-dict combined with autocalled string method: ITEM1
-dict combined with string method: ITEM1
-nested dict - NameMapper style: nestedItem2
-nested dict - Python style: nestedItem2
-nested dict - alternating style: nestedItem2
-nested dict - NameMapper style + method: NESTEDITEM2
-nested dict - alternating style + method: NESTEDITEM2
-nested dict - NameMapper style + method + slice: NEST
-nested dict - Python style, variable key: nestedItem2
-object method: doo
-object method + complex slice: do
-very complex slice: do
-translated a call to gettext
-</pre></div>
-</div>
-<p>And here - tada! - is the generated module. To save space, I’ve
-included only the lines containing the {write} calls. The rest of
-the module is the same as in the first example, chapter
-pyModules.example. I’ve split some of the lines to make them fit on
-the page.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="mi">1</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;1 placeholder: &#39;</span><span class="p">)</span>
- <span class="mi">2</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aStr&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$aStr&#39; at line 1, col 16.</span>
- <span class="mi">3</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">2 placeholders: &#39;</span><span class="p">)</span>
- <span class="mi">4</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aStr&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$aStr&#39; at line 2, col 17.</span>
- <span class="mi">5</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
- <span class="mi">6</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;anInt&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span>
- <span class="c1"># generated from &#39;$anInt&#39; at line 2, col 23.</span>
- <span class="mi">7</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">2 placeholders, back-to-back: &#39;</span><span class="p">)</span>
- <span class="mi">8</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aStr&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$aStr&#39; at line 3, col 31.</span>
- <span class="mi">9</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;anInt&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span>
- <span class="c1"># generated from &#39;$anInt&#39; at line 3, col 36.</span>
-<span class="mi">10</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">1 placeholder enclosed in </span><span class="si">{}</span><span class="s1">: &#39;</span><span class="p">)</span>
-<span class="mi">11</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aStr&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;${aStr}&#39; at line 4,</span>
- <span class="c1"># col 31.</span>
-<span class="mi">12</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">1 escaped placeholder: $var</span><span class="se">\n</span><span class="s1">func placeholder - with (): &#39;</span><span class="p">)</span>
-<span class="mi">13</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)()))</span> <span class="c1"># generated from &#39;$aFunc()&#39; at line 6,</span>
- <span class="c1"># col 29.</span>
-<span class="mi">14</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">func placeholder - with (int): &#39;</span><span class="p">)</span>
-<span class="mi">15</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="mi">1234</span><span class="p">)))</span> <span class="c1"># generated from &#39;$aFunc(1234)&#39; at</span>
- <span class="c1"># line 7, col 32.</span>
-<span class="mi">16</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">func placeholder - with (string): &#39;</span><span class="p">)</span>
-<span class="mi">17</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s1">&#39;aoeu&#39;</span><span class="p">)))</span> <span class="c1"># generated from &quot;$aFunc(&#39;aoeu&#39;)&quot;</span>
- <span class="c1"># at line 8, col 35.</span>
-<span class="mi">18</span> <span class="n">write</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">func placeholder - with (&#39;&#39;&#39;</span><span class="se">\\</span><span class="s2">nstring&#39;</span><span class="se">\\</span><span class="s2">n&#39;&#39;&#39;): &quot;</span><span class="p">)</span>
-<span class="mi">19</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s1">&#39;&#39;&#39;</span><span class="se">\n</span><span class="s1">aoeu&#39;</span><span class="se">\n</span><span class="s1">&#39;&#39;&#39;</span><span class="p">)))</span> <span class="c1"># generated from</span>
- <span class="c1"># &quot;$aFunc(&#39;&#39;&#39;\\naoeu&#39;\\n&#39;&#39;&#39;)&quot; at line 9, col 46.</span>
-<span class="mi">20</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">func placeholder - with (string*int): &#39;</span><span class="p">)</span>
-<span class="mi">21</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s1">&#39;aoeu&#39;</span><span class="o">*</span><span class="mi">2</span><span class="p">)))</span> <span class="c1"># generated from</span>
- <span class="c1"># &quot;$aFunc(&#39;aoeu&#39;*2)&quot; at line 10, col 39.</span>
-<span class="mi">22</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">func placeholder - with (int*float): &#39;</span><span class="p">)</span>
-<span class="mi">23</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="mi">2</span><span class="o">*</span><span class="mf">2.0</span><span class="p">)))</span> <span class="c1"># generated from &#39;$aFunc(2*2.0)&#39;</span>
- <span class="c1"># at line 11, col 38.</span>
-<span class="mi">24</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Python builtin values: &#39;</span><span class="p">)</span>
-<span class="mi">25</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="kc">None</span><span class="p">))</span> <span class="c1"># generated from &#39;$None&#39; at line 12, col 24.</span>
-<span class="mi">26</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
-<span class="mi">27</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="kc">True</span><span class="p">))</span> <span class="c1"># generated from &#39;$True&#39; at line 12, col 30.</span>
-<span class="mi">28</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
-<span class="mi">29</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="kc">False</span><span class="p">))</span> <span class="c1"># generated from &#39;$False&#39; at line 12, col 36.</span>
-<span class="mi">30</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">func placeholder - with ($arg=float): &#39;</span><span class="p">)</span>
-<span class="mi">31</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="n">arg</span><span class="o">=</span><span class="mf">4.0</span><span class="p">)))</span> <span class="c1"># generated from</span>
- <span class="c1"># &#39;$aFunc($arg=4.0)&#39; at line 13, col 40.</span>
-<span class="mi">32</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">deeply nested argstring: &#39;</span><span class="p">)</span>
-<span class="mi">33</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span>
- <span class="n">arg</span> <span class="o">=</span> <span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aMeth&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span> <span class="n">arg</span> <span class="o">=</span> <span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span> <span class="mi">1</span> <span class="p">)</span> <span class="p">)</span> <span class="p">)))</span>
- <span class="c1"># generated from &#39;$aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) )&#39;</span>
- <span class="c1"># at line 14, col 26.</span>
-<span class="mi">34</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;:</span><span class="se">\n</span><span class="s1">function with None: &#39;</span><span class="p">)</span>
-<span class="mi">35</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="kc">None</span><span class="p">)))</span> <span class="c1"># generated from &#39;$aFunc(None)&#39; at</span>
- <span class="c1"># line 15, col 21.</span>
-<span class="mi">36</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">autocalling: &#39;</span><span class="p">)</span>
-<span class="mi">37</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$aFunc&#39; at line 16,</span>
- <span class="c1"># col 14.</span>
-<span class="mi">38</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;! &#39;</span><span class="p">)</span>
-<span class="mi">39</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)()))</span> <span class="c1"># generated from &#39;$aFunc()&#39; at line 16,</span>
- <span class="c1"># col 22.</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">40</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;.</span><span class="se">\n</span><span class="s1">nested autocalling: &#39;</span><span class="p">)</span>
-<span class="mi">41</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aFunc&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">))))</span> <span class="c1"># generated from</span>
- <span class="c1"># &#39;$aFunc($aFunc)&#39; at line 17, col 21.</span>
-<span class="mi">42</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;.</span><span class="se">\n</span><span class="s1">list subscription: &#39;</span><span class="p">)</span>
-<span class="mi">43</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aList&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]))</span> <span class="c1"># generated from &#39;$aList[0]&#39; at line</span>
- <span class="c1"># 18, col 20.</span>
-<span class="mi">44</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">list slicing: &#39;</span><span class="p">)</span>
-<span class="mi">45</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aList&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]))</span> <span class="c1"># generated from &#39;$aList[:2]&#39; at</span>
- <span class="c1"># line 19, col 15.</span>
-<span class="mi">46</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">list slicing and subcription combined: &#39;</span><span class="p">)</span>
-<span class="mi">47</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aList&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[:</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]))</span> <span class="c1"># generated from &#39;$aList[:2][0]&#39;</span>
- <span class="c1"># at line 20, col 40.</span>
-<span class="mi">48</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">dict - NameMapper style: &#39;</span><span class="p">)</span>
-<span class="mi">49</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict.one&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$aDict.one&#39; at line</span>
- <span class="c1"># 21, col 26.</span>
-<span class="mi">50</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">dict - Python style: &#39;</span><span class="p">)</span>
-<span class="mi">51</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="s1">&#39;one&#39;</span><span class="p">]))</span> <span class="c1"># generated from &quot;$aDict[&#39;one&#39;]&quot;</span>
- <span class="c1"># at line 22, col 22.</span>
-<span class="mi">52</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">dict combined with autocalled string method: &#39;</span><span class="p">)</span>
-<span class="mi">53</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict.one.upper&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from</span>
- <span class="c1"># &#39;$aDict.one.upper&#39; at line 23, col 46.</span>
-<span class="mi">54</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">dict combined with string method: &#39;</span><span class="p">)</span>
-<span class="mi">55</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict.one&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">&quot;upper&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)()))</span> <span class="c1"># generated from</span>
- <span class="c1"># &#39;$aDict.one.upper()&#39; at line 24, col 35.</span>
-<span class="mi">56</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">nested dict - NameMapper style: &#39;</span><span class="p">)</span>
-<span class="mi">57</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict.nestedDict.two&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from</span>
- <span class="c1"># &#39;$aDict.nestedDict.two&#39; at line 25, col 33.</span>
-<span class="mi">58</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">nested dict - Python style: &#39;</span><span class="p">)</span>
-<span class="mi">59</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="s1">&#39;nestedDict&#39;</span><span class="p">][</span><span class="s1">&#39;two&#39;</span><span class="p">]))</span> <span class="c1"># generated from</span>
- <span class="c1"># &quot;$aDict[&#39;nestedDict&#39;][&#39;two&#39;]&quot; at line 26, col 29.</span>
-<span class="mi">60</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">nested dict - alternating style: &#39;</span><span class="p">)</span>
-<span class="mi">61</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="s1">&#39;nestedDict&#39;</span><span class="p">],</span><span class="s2">&quot;two&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated</span>
- <span class="c1"># from &quot;$aDict[&#39;nestedDict&#39;].two&quot; at line 27, col 34.</span>
-<span class="mi">62</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">nested dict - NameMapper style + method: &#39;</span><span class="p">)</span>
-<span class="mi">63</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict.nestedDict.two.upper&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from</span>
- <span class="c1"># &#39;$aDict.nestedDict.two.upper&#39; at line 28, col 42.</span>
-<span class="mi">64</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">nested dict - alternating style + method: &#39;</span><span class="p">)</span>
-<span class="mi">65</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[</span><span class="s1">&#39;nestedDict&#39;</span><span class="p">],</span><span class="s2">&quot;two.upper&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span>
- <span class="c1"># generated from &quot;$aDict[&#39;nestedDict&#39;].two.upper&quot; at line 29, col 43.</span>
-<span class="mi">66</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">nested dict - NameMapper style + method + slice: &#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">67</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict.nestedDict.two&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">&quot;upper&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)[:</span><span class="mi">4</span><span class="p">]))</span>
- <span class="c1"># generated from &#39;$aDict.nestedDict.two.upper[:4]&#39; at line 30, col 50.</span>
-<span class="mi">68</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">nested dict - Python style, variable key: &#39;</span><span class="p">)</span>
-<span class="mi">69</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;aDict&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
- <span class="p">[</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;anObj&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">&quot;meth&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s1">&#39;nestedDict&#39;</span><span class="p">)],</span><span class="s2">&quot;two&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span>
- <span class="c1"># generated from &quot;$aDict[$anObj.meth(&#39;nestedDict&#39;)].two&quot; at line 31,</span>
- <span class="c1"># col 43.</span>
-<span class="mi">70</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">object method: &#39;</span><span class="p">)</span>
-<span class="mi">71</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;anObj.meth1&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)))</span> <span class="c1"># generated from &#39;$anObj.meth1&#39; at</span>
- <span class="c1"># line 32, col 16.</span>
-<span class="mi">72</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">object method + complex slice: &#39;</span><span class="p">)</span>
-<span class="mi">73</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;anObj&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">&quot;meth1&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
- <span class="p">[</span><span class="mi">0</span><span class="p">:</span> <span class="p">((</span><span class="mi">4</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;anObj&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">&quot;meth1&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span> <span class="p">]))</span>
- <span class="c1"># generated from &#39;$anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ]&#39;</span>
- <span class="c1"># at line 33, col 32.</span>
-<span class="mi">74</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">very complex slice: &#39;</span><span class="p">)</span>
-<span class="mi">75</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;anObj&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">&quot;meth1&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
- <span class="p">[</span><span class="mi">0</span><span class="p">:</span> <span class="p">((</span><span class="mi">4</span><span class="o">/</span><span class="mi">4</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="n">VFN</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;anObj&quot;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="s2">&quot;meth1&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span> <span class="p">]</span> <span class="p">))</span>
- <span class="c1"># generated from &#39;$( anObj.meth1[0: ((4/4*2)*2)/$anObj.meth1(2) ] )&#39;</span>
- <span class="c1"># at line 34, col 21.</span>
-<span class="mi">76</span> <span class="k">if</span> <span class="kc">False</span><span class="p">:</span>
-<span class="mi">77</span> <span class="n">_</span><span class="p">(</span><span class="s1">&#39;foo&#39;</span><span class="p">)</span>
-<span class="mi">78</span> <span class="n">write</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="n">VFS</span><span class="p">(</span><span class="n">SL</span><span class="p">,</span><span class="s2">&quot;_&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)(</span><span class="s2">&quot;a call to gettext&quot;</span><span class="p">)))</span>
- <span class="c1"># generated from &quot;$_(&#39;a call to gettext&#39;)&quot;</span>
- <span class="c1"># at line 35, col 1.</span>
-<span class="mi">79</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>For each placeholder lookup, the the innermost level of nesting is
-a {VFS} call, which looks up the first (leftmost) placeholder
-component in the searchList. This is wrapped by zero or more {VFN}
-calls, which perform Universal Dotted Notation lookup on the next
-dotted component of the placeholder, looking for an attribute or
-key by that name within the previous object (not in the
-searchList). Autocalling is performed by {VFS} and {VFN}: that’s
-the reason for their third argument.</p>
-<p>Explicit function/method arguments, subscripts and keys (which are
-all expressions) are left unchanged, besides expanding any embedded
-$placeholders in them. This means they must result in valid Python
-expressions, following the standard Python quoting rules.</p>
-<p>Built-in Python values ({None}, {True} and {False}) are converted
-to {filter(None)}, etc. They use normal Python variable lookup
-rather than {VFS}. (Cheetah emulates {True} and {False} using
-global variables for Python &lt; 2.2.1, when they weren’t builtins
-yet.)</p>
-<p>Notice the last line is a call to {_} (i.e. {gettext}) which is
-used for internationalization (see
-<a class="reference external" href="http://docs.python.org/lib/module-gettext.html">http://docs.python.org/lib/module-gettext.html</a>). The code is
-converted normally, but an {if False} block is used so that gettext
-can successfully mark the string for translation when parsing the
-generated Python. Otherwise, the NameMapper syntax would get in the
-way of this.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="patching.html" title="Patching Cheetah"
- >next</a> |</li>
- <li class="right" >
- <a href="errorHandling.html" title="Directives: Error Handling"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/pyModules.html b/docs/html/dev_guide/pyModules.html
deleted file mode 100644
index b238ccf..0000000
--- a/docs/html/dev_guide/pyModules.html
+++ /dev/null
@@ -1,346 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>.py Template Modules &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Directives: Comments" href="comments.html" />
- <link rel="prev" title="A BNF Grammar of Cheetah" href="bnf.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="comments.html" title="Directives: Comments"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="bnf.html" title="A BNF Grammar of Cheetah"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">.py Template Modules</a><ul>
-<li><a class="reference internal" href="#an-example">An example</a></li>
-<li><a class="reference internal" href="#a-walk-through-the-example">A walk through the example</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="bnf.html"
- title="previous chapter">A BNF Grammar of Cheetah</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="comments.html"
- title="next chapter">Directives: Comments</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/pyModules.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="py-template-modules">
-<h1>.py Template Modules<a class="headerlink" href="#py-template-modules" title="Permalink to this headline">¶</a></h1>
-<p>(pyModules)</p>
-<p>This chapter examines the structure of a .py template module. The
-following few chapters will then show how each placeholder and
-directive affects the generated Python code.</p>
-<div class="section" id="an-example">
-<h2>An example<a class="headerlink" href="#an-example" title="Permalink to this headline">¶</a></h2>
-<p>(pyModules.example)</p>
-<p>Our first template follows a long noble tradition in computer
-tutorials. It produces a familiar, friendly greeting. Here’s the
-template:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Hello, world!
-</pre></div>
-</div>
-<p>… the output:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>Hello, world!
-</pre></div>
-</div>
-<p>… and the .py template module cheetah-compile produced, with line
-numbers added:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="mi">1</span> <span class="c1">#!/usr/bin/env python</span>
-
- <span class="mi">2</span> <span class="s2">&quot;&quot;&quot;</span>
-<span class="s2"> 3 Autogenerated by CHEETAH: The Python-Powered Template Engine</span>
-<span class="s2"> 4 CHEETAH VERSION: 0.9.12</span>
-<span class="s2"> 5 Generation time: Sat Apr 20 14:27:47 2002</span>
-<span class="s2"> 6 Source file: x.tmpl</span>
-<span class="s2"> 7 Source file last modified: Wed Apr 17 22:10:59 2002</span>
-<span class="s2"> 8 &quot;&quot;&quot;</span>
-
- <span class="mi">9</span> <span class="n">__CHEETAH_genTime__</span> <span class="o">=</span> <span class="s1">&#39;Sat Apr 20 14:27:47 2002&#39;</span>
-<span class="mi">10</span> <span class="n">__CHEETAH_src__</span> <span class="o">=</span> <span class="s1">&#39;x.tmpl&#39;</span>
-<span class="mi">11</span> <span class="n">__CHEETAH_version__</span> <span class="o">=</span> <span class="s1">&#39;0.9.12&#39;</span>
-
-<span class="mi">12</span> <span class="c1">##################################################</span>
-<span class="mi">13</span> <span class="c1">## DEPENDENCIES</span>
-
-<span class="mi">14</span> <span class="kn">import</span> <span class="nn">sys</span>
-<span class="mi">15</span> <span class="kn">import</span> <span class="nn">os</span>
-<span class="mi">16</span> <span class="kn">import</span> <span class="nn">os.path</span>
-<span class="mi">17</span> <span class="kn">from</span> <span class="nn">os.path</span> <span class="k">import</span> <span class="n">getmtime</span><span class="p">,</span> <span class="n">exists</span>
-<span class="mi">18</span> <span class="kn">import</span> <span class="nn">time</span>
-<span class="mi">19</span> <span class="kn">import</span> <span class="nn">types</span>
-<span class="mi">20</span> <span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span>
-<span class="mi">21</span> <span class="kn">from</span> <span class="nn">Cheetah.DummyTransaction</span> <span class="k">import</span> <span class="n">DummyTransaction</span>
-<span class="mi">22</span> <span class="kn">from</span> <span class="nn">Cheetah.NameMapper</span> <span class="k">import</span> <span class="n">NotFound</span><span class="p">,</span> <span class="n">valueForName</span><span class="p">,</span>
- <span class="n">valueFromSearchList</span>
-<span class="mi">23</span> <span class="kn">import</span> <span class="nn">Cheetah.Filters</span> <span class="k">as</span> <span class="nn">Filters</span>
-<span class="mi">24</span> <span class="kn">import</span> <span class="nn">Cheetah.ErrorCatchers</span> <span class="k">as</span> <span class="nn">ErrorCatchers</span>
-
-<span class="mi">25</span> <span class="c1">##################################################</span>
-<span class="mi">26</span> <span class="c1">## MODULE CONSTANTS</span>
-
-<span class="mi">27</span> <span class="k">try</span><span class="p">:</span>
-<span class="mi">28</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">False</span>
-<span class="mi">29</span> <span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
-<span class="mi">30</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">False</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">==</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
-
-<span class="mi">31</span> <span class="c1">##################################################</span>
-<span class="mi">32</span> <span class="c1">## CLASSES</span>
-
-<span class="mi">33</span> <span class="k">class</span> <span class="nc">x</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
-<span class="mi">34</span> <span class="s2">&quot;&quot;&quot;</span>
-<span class="s2">35</span>
-<span class="s2">36 Autogenerated by CHEETAH: The Python-Powered Template Engine</span>
-<span class="s2">37 &quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">38</span> <span class="c1">##################################################</span>
-<span class="mi">39</span> <span class="c1">## GENERATED METHODS</span>
-
-
-<span class="mi">40</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">KWs</span><span class="p">):</span>
-<span class="mi">41</span> <span class="s2">&quot;&quot;&quot;</span>
-<span class="s2">42</span>
-<span class="s2">43 &quot;&quot;&quot;</span>
-
-<span class="mi">44</span> <span class="n">Template</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">KWs</span><span class="p">)</span>
-<span class="mi">45</span> <span class="bp">self</span><span class="o">.</span><span class="n">_filePath</span> <span class="o">=</span> <span class="s1">&#39;x.tmpl&#39;</span>
-<span class="mi">46</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fileMtime</span> <span class="o">=</span> <span class="mi">1019106659</span>
-
-<span class="mi">47</span> <span class="k">def</span> <span class="nf">respond</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
-<span class="mi">48</span> <span class="n">trans</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-<span class="mi">49</span> <span class="n">dummyTrans</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-<span class="mi">50</span> <span class="n">VFS</span><span class="o">=</span><span class="n">valueFromSearchList</span><span class="p">,</span>
-<span class="mi">51</span> <span class="n">VFN</span><span class="o">=</span><span class="n">valueForName</span><span class="p">,</span>
-<span class="mi">52</span> <span class="n">getmtime</span><span class="o">=</span><span class="n">getmtime</span><span class="p">,</span>
-<span class="mi">53</span> <span class="n">currentTime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">):</span>
-
-
-<span class="mi">54</span> <span class="s2">&quot;&quot;&quot;</span>
-<span class="s2">55 This is the main method generated by Cheetah</span>
-<span class="s2">56 &quot;&quot;&quot;</span>
-
-<span class="mi">57</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">trans</span><span class="p">:</span>
-<span class="mi">58</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">DummyTransaction</span><span class="p">()</span>
-<span class="mi">59</span> <span class="n">dummyTrans</span> <span class="o">=</span> <span class="kc">True</span>
-<span class="mi">60</span> <span class="n">write</span> <span class="o">=</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">write</span>
-<span class="mi">61</span> <span class="n">SL</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_searchList</span>
-<span class="mi">62</span> <span class="nb">filter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_currentFilter</span>
-<span class="mi">63</span> <span class="n">globalSetVars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_globalSetVars</span>
-<span class="mi">64</span>
-<span class="mi">65</span> <span class="c1">########################################</span>
-<span class="mi">66</span> <span class="c1">## START - generated method body</span>
-<span class="mi">67</span>
-<span class="mi">68</span> <span class="k">if</span> <span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_filePath</span><span class="p">)</span> <span class="ow">and</span> <span class="n">getmtime</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_filePath</span><span class="p">)</span> <span class="o">&gt;</span> \
- <span class="bp">self</span><span class="o">.</span><span class="n">_fileMtime</span><span class="p">:</span>
-<span class="mi">69</span> <span class="bp">self</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">file</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_filePath</span><span class="p">)</span>
-<span class="mi">70</span> <span class="n">write</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mainCheetahMethod_for_x</span><span class="p">)</span>
- <span class="p">(</span><span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">))</span>
-<span class="mi">71</span> <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
-<span class="mi">72</span> <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
-<span class="mi">73</span> <span class="k">else</span><span class="p">:</span>
-<span class="mi">74</span> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-<span class="mi">75</span> <span class="n">write</span><span class="p">(</span><span class="s1">&#39;Hello, world!</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="mi">76</span>
-<span class="mi">77</span> <span class="c1">########################################</span>
-<span class="mi">78</span> <span class="c1">## END - generated method body</span>
-<span class="mi">79</span>
-<span class="mi">80</span> <span class="k">if</span> <span class="n">dummyTrans</span><span class="p">:</span>
-<span class="mi">81</span> <span class="k">return</span> <span class="n">trans</span><span class="o">.</span><span class="n">response</span><span class="p">()</span><span class="o">.</span><span class="n">getvalue</span><span class="p">()</span>
-<span class="mi">82</span> <span class="k">else</span><span class="p">:</span>
-<span class="mi">83</span> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">84</span>
-<span class="mi">85</span> <span class="c1">##################################################</span>
-<span class="mi">86</span> <span class="c1">## GENERATED ATTRIBUTES</span>
-
-
-<span class="mi">87</span> <span class="fm">__str__</span> <span class="o">=</span> <span class="n">respond</span>
-
-<span class="mi">88</span> <span class="n">_mainCheetahMethod_for_x</span><span class="o">=</span> <span class="s1">&#39;respond&#39;</span>
-
-
-<span class="mi">89</span> <span class="c1"># CHEETAH was developed by Tavis Rudd, Chuck Esterbrook, Ian Bicking</span>
- <span class="c1"># and Mike Orr;</span>
-<span class="mi">90</span> <span class="c1"># with code, advice and input from many other volunteers.</span>
-<span class="mi">91</span> <span class="c1"># For more information visit http://cheetahtemplate.org/</span>
-
-<span class="mi">92</span> <span class="c1">##################################################</span>
-<span class="mi">93</span> <span class="c1">## if run from command line:</span>
-<span class="mi">94</span> <span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
-<span class="mi">95</span> <span class="n">x</span><span class="p">()</span><span class="o">.</span><span class="n">runAsMainProgram</span><span class="p">()</span>
-</pre></div>
-</div>
-<p>(I added the line numbers for this Guide, and split a few lines to
-fit the page width. The continuation lines don’t have line numbers,
-and I added indentation, backslashes and ‘#’ as necessary to make
-the result a valid Python program.)</p>
-<p>The examples were generated from CVS versions of Cheetah between
-0.9.12 and 0.9.14.</p>
-</div>
-<div class="section" id="a-walk-through-the-example">
-<h2>A walk through the example<a class="headerlink" href="#a-walk-through-the-example" title="Permalink to this headline">¶</a></h2>
-<p>(pyModules.walk)</p>
-<p>Lines 20-24 are the Cheetah-specific imports. Line 33 introduces
-our generated class, {x}, a subclass of {Template}. It’s called x
-because the source file was x.tmpl.</p>
-<p>Lines 40-46 are the {.__init__} method called when the template
-is instantiated or used as a Webware servlet, or when the module is
-run as a standalone program. We can see it calling its superclass
-constructor and setting {._filePath} and {._fileMtime} to the
-filename and modification time (in Unix ticks) of the source .tmpl
-file.</p>
-<p>Lines 47-84 are the main method {.respond}, the one that fills the
-template. Normally you call it without arguments, but Webware calls
-it with a Webware {Transaction} object representing the current
-request. Lines 57-59 set up the {trans} variable. If a real or
-dummy transaction is passed in, the method uses it. Otherwise (if
-the {trans} argument is {None}), the method creates a
-{DummyTransaction} instance. {dummyTrans} is a flag that just tells
-whether a dummy transaction is in effect; it’ll be used at the end
-of the method.</p>
-<p>The other four {.respond} arguments aren’t anything you’d ever want
-to pass in; they exist solely to speed up access to these
-frequently-used global functions. This is a standard Python trick
-described in question 4.7 of the Python FAQ
-(<a class="reference external" href="http://www.python.org/cgi-bin/faqw.py">http://www.python.org/cgi-bin/faqw.py</a>). {VFS} and {VFN} are the
-functions that give your template the benefits of NameMapper
-lookup, such as the ability to use the searchList.</p>
-<p>Line 60 initializes the {write} variable. This important variable
-is discussed below.</p>
-<p>Lines 60-63 initialize a few more local variables. {SL} is the
-searchList. {filter} is the current output filter. {globalSetVars}
-are the variables that have been defined with {#set global}.</p>
-<p>The comments at lines 65 and 78 delimit the start and end of the
-code that varies with each template. The code outside this region
-is identical in all template modules. That’s not quite true -
-{#import} for instance generates additional {import} statements at
-the top of the module - but it’s true enough for the most part.</p>
-<p>Lines 68-74 exist only if the template source was a named file
-rather than a string or file object. The stanza recompiles the
-template if the source file has changed. Lines 70-74 seem to be
-redundant with 75-83: both fill the template and send the output.
-The reason the first set of lines exists is because the second set
-may become invalid when the template is recompiled. (This is for {
-re} compilation only. The initial compilation happened in the
-{.__init__} method if the template wasn’t precompiled.)</p>
-<p>Line 75 is the most interesting line in this module. It’s a direct
-translation of what we put in the template definition,
-“Hello, world!” Here the content is a single string literal.
-{write} looks like an ordinary function call, but remember that
-line 60 made it an alias to {trans.response().write}, a method in
-the transaction. The next few chapters describe how the different
-placeholders and directives influence this portion of the generated
-class.</p>
-<p>Lines 80-83 finish the template filling. If {trans} is a real
-Webware transaction, {write} has already sent the output to Webware
-for handling, so we return {“”}. If {trans} is a dummy transaction,
-{write} has been accumulating the output in a Python {StringIO}
-object rather than sending it anywhere, so we have to return it.</p>
-<p>Line 83 is the end of the {.respond} method.</p>
-<p>Line 87 makes code{.__str__} an alias for the main method, so
-that you can {print} it or apply {str} to it and it will fill the
-template. Line 88 gives the name of the main method, because
-sometimes it’s not {.respond}.</p>
-<p>Lines 94-95 allow the module to be run directly as a script.
-Essentially, they process the command-line arguments and them make
-the template fill itself.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="comments.html" title="Directives: Comments"
- >next</a> |</li>
- <li class="right" >
- <a href="bnf.html" title="A BNF Grammar of Cheetah"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/safeDelegation.html b/docs/html/dev_guide/safeDelegation.html
deleted file mode 100644
index fd37878..0000000
--- a/docs/html/dev_guide/safeDelegation.html
+++ /dev/null
@@ -1,145 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Safe Delegation &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="History of Cheetah" href="history.html" />
- <link rel="prev" title="Design Decisions and Tradeoffs" href="design.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="history.html" title="History of Cheetah"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="design.html" title="Design Decisions and Tradeoffs"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="design.html"
- title="previous chapter">Design Decisions and Tradeoffs</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="history.html"
- title="next chapter">History of Cheetah</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/safeDelegation.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="safe-delegation">
-<h1>Safe Delegation<a class="headerlink" href="#safe-delegation" title="Permalink to this headline">¶</a></h1>
-<p>(safeDelegation)</p>
-<p>Safe delegation, as provided by Zope and Allaire’s Spectra, is not
-implemented in Cheetah. The core aim has been to help developers
-and template maintainers get things done, without throwing
-unnecessary complications in their way. So you should give write
-access to your templates only to those whom you trust. However,
-several hooks have been built into Cheetah so that safe delegation
-can be implemented at a later date.</p>
-<p>It should be possible to implement safe delegation via a future
-configuration Setting {safeDelegationLevel} (0=none, 1=semi-secure,
-2-alcatraz). This is not implemented but the steps are listed here
-in case somebody wants to try them out and test them.</p>
-<p>Of course, you would also need to benchmark your code and verify it
-does not impact performance when safe delegation is off, and
-impacts it only modestly when it is on.” All necessary changes can
-be made at compile time, so there should be no performance impact
-when filling the same TO multiple times.</p>
-<ol class="arabic simple">
-<li>Only give untrusted developers access to the .tmpl files.
-(Verifying what this means. Why can’t trusted developers access
-them?)</li>
-<li>Disable the {#attr} directive and maybe the {#set} directive.</li>
-<li>Use Cheetah’s directive validation hooks to disallow references
-to {self}, etc (e.g. {#if $steal(self.thePrivateVar)} )</li>
-<li>Implement a validator for the $placeholders and use it to
-disallow ‘__’ in $placeholders so that tricks like
-{$obj.__class__.__dict__} are not possible.</li>
-</ol>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="history.html" title="History of Cheetah"
- >next</a> |</li>
- <li class="right" >
- <a href="design.html" title="Design Decisions and Tradeoffs"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/dev_guide/template.html b/docs/html/dev_guide/template.html
deleted file mode 100644
index 4a71d9d..0000000
--- a/docs/html/dev_guide/template.html
+++ /dev/null
@@ -1,121 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Template &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Directives: Import, Inheritance, Declaration and Assignment" href="inheritanceEtc.html" />
- <link rel="prev" title="Directives: Parser Instructions" href="parserInstructions.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="inheritanceEtc.html" title="Directives: Import, Inheritance, Declaration and Assignment"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="parserInstructions.html" title="Directives: Parser Instructions"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="parserInstructions.html"
- title="previous chapter">Directives: Parser Instructions</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="inheritanceEtc.html"
- title="next chapter">Directives: Import, Inheritance, Declaration and Assignment</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/dev_guide/template.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="template">
-<h1>Template<a class="headerlink" href="#template" title="Permalink to this headline">¶</a></h1>
-<p>(template)</p>
-<p>This chapter will mainly walk through the {Cheetah.Template}
-constructor and not at what point the template is compiled.</p>
-<p>(Also need to look at Transaction,py and Servlet.py.)</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="inheritanceEtc.html" title="Directives: Import, Inheritance, Declaration and Assignment"
- >next</a> |</li>
- <li class="right" >
- <a href="parserInstructions.html" title="Directives: Parser Instructions"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah Developer’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/developers.html b/docs/html/developers.html
deleted file mode 100644
index 5ac6661..0000000
--- a/docs/html/developers.html
+++ /dev/null
@@ -1,167 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Contributing to Cheetah &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Downloading Cheetah" href="download.html" />
- <link rel="prev" title="News" href="news.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="download.html" title="Downloading Cheetah"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="news.html" title="News"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Contributing to Cheetah</a><ul>
-<li><a class="reference internal" href="#getting-the-code">Getting the Code</a></li>
-<li><a class="reference internal" href="#development-process">Development Process</a></li>
-<li><a class="reference internal" href="#filing-bugs">Filing Bugs</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="news.html"
- title="previous chapter">News</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="download.html"
- title="next chapter">Downloading Cheetah</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/developers.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="contributing-to-cheetah">
-<h1>Contributing to Cheetah<a class="headerlink" href="#contributing-to-cheetah" title="Permalink to this headline">¶</a></h1>
-<p>Cheetah is the work of many volunteers. If you use Cheetah, share your
-experiences, tricks, customizations, and frustrations. Please visit
-<a class="reference external" href="https://github.com/CheetahTemplate3/cheetah3">https://github.com/CheetahTemplate3/cheetah3</a> and file bug reports, feature
-requests or pull requests.</p>
-<div class="section" id="getting-the-code">
-<h2>Getting the Code<a class="headerlink" href="#getting-the-code" title="Permalink to this headline">¶</a></h2>
-<p>The Cheetah source code is stored in a central <strong>Git</strong> repository
-hosted primarily by <a class="reference external" href="http://github.com">GitHub</a>. The primary Git
-repository can be found <a class="reference external" href="http://github.com/CheetahTemplate3/cheetah3">here</a>.</p>
-</div>
-<div class="section" id="development-process">
-<h2>Development Process<a class="headerlink" href="#development-process" title="Permalink to this headline">¶</a></h2>
-<p>The typical development workflow for Cheetah revolves around
-two primary branches <strong>maint</strong> and <strong>next</strong>. The <strong>next</strong> branch is where development
-planned for the next release of Cheetah is. The <strong>maint</strong> branch
-on the otherhand is where backported fixes and patches will be applied for
-the current release of Cheetah will go, it’s common for a patch
-to be applied to maint and next at the same time.</p>
-<p>Anyone and everyone is encouraged to submit patches at any time, but as far
-as bugs or feature requests go, we try to file those <em>first</em> in the <a class="reference external" href="https://github.com/CheetahTemplate3/cheetah3/issues">Cheetah3 Bug Tracker</a>
-and then they can be organized into particular releases as is necessary.</p>
-<p>In addition to the bug tracker, Cheetah uses Travis CI for automating builds
-and test runs (see: <a class="reference external" href="https://travis-ci.org/CheetahTemplate3/cheetah3">Cheetah at Travis</a>).</p>
-<p>Prior to the tarballing of a release, <strong>all</strong> tests must be passing before the
-<strong>next</strong> branch is merged down to the Git <strong>master</strong> branch where the release
-tarball will actually be created from.</p>
-</div>
-<div class="section" id="filing-bugs">
-<h2>Filing Bugs<a class="headerlink" href="#filing-bugs" title="Permalink to this headline">¶</a></h2>
-<p>No software is perfect, and unfortunately no bug report is either. If you’ve
-found yourself faced with a bug in Cheetah, or just have a good idea for a
-new feature, we kindly ask that you create an issue in the <a class="reference external" href="https://github.com/CheetahTemplate3/cheetah3/issues">Cheetah3 Bug Tracker</a>.</p>
-<p>Some tips for filing a <em>useful</em> bug report, try to include the following:</p>
-<ul class="simple">
-<li>A description of what you were trying to do, and what happened (i.e. reproduction steps), the more code you can include the better.</li>
-<li>Any and all tracebacks or compiler errors</li>
-<li>The version of Cheetah you’re using</li>
-<li>The version of Python you’re using</li>
-<li>The operating system you’re running Cheetah on</li>
-<li>Any other pieces of information you might think are relevant</li>
-</ul>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="download.html" title="Downloading Cheetah"
- >next</a> |</li>
- <li class="right" >
- <a href="news.html" title="News"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/documentation.html b/docs/html/documentation.html
deleted file mode 100644
index 791ddfe..0000000
--- a/docs/html/documentation.html
+++ /dev/null
@@ -1,132 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah Recipes &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Basic Inheritance" href="recipes/inheritance.html" />
- <link rel="prev" title="Cheetah vs. Other Template Engines" href="users_guide/comparisons.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="recipes/inheritance.html" title="Basic Inheritance"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="users_guide/comparisons.html" title="Cheetah vs. Other Template Engines"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="users_guide/comparisons.html"
- title="previous chapter">Cheetah vs. Other Template Engines</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="recipes/inheritance.html"
- title="next chapter">Basic Inheritance</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/documentation.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah-recipes">
-<h1>Cheetah Recipes<a class="headerlink" href="#cheetah-recipes" title="Permalink to this headline">¶</a></h1>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="recipes/inheritance.html">Basic Inheritance</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="recipes/inheritance.html#introduction">Introduction</a></li>
-<li class="toctree-l2"><a class="reference internal" href="recipes/inheritance.html#cheetah-inheriting-from-python">Cheetah inheriting from Python</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="recipes/precompiled.html">Precompiled Templates</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="recipes/precompiled.html#why-bother">Why bother?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="recipes/precompiled.html#basic-pre-compilation">Basic Pre-compilation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="recipes/precompiled.html#importing-and-lookup">Importing and lookup</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="recipes/staticmethod.html">&#64;staticmethod and &#64;classmethod</a></li>
-<li class="toctree-l1"><a class="reference internal" href="recipes/writing_a_recipe.html">Writing a “Recipe”</a></li>
-</ul>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="recipes/inheritance.html" title="Basic Inheritance"
- >next</a> |</li>
- <li class="right" >
- <a href="users_guide/comparisons.html" title="Cheetah vs. Other Template Engines"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/download.html b/docs/html/download.html
deleted file mode 100644
index 0e0ad6d..0000000
--- a/docs/html/download.html
+++ /dev/null
@@ -1,123 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Downloading Cheetah &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Cheetah User’s Guide" href="users_guide/index.html" />
- <link rel="prev" title="Contributing to Cheetah" href="developers.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="users_guide/index.html" title="Cheetah User’s Guide"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="developers.html" title="Contributing to Cheetah"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="developers.html"
- title="previous chapter">Contributing to Cheetah</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="users_guide/index.html"
- title="next chapter">Cheetah User’s Guide</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/download.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="downloading-cheetah">
-<h1>Downloading Cheetah<a class="headerlink" href="#downloading-cheetah" title="Permalink to this headline">¶</a></h1>
-<p>You can download wheels, eggs and tarballs of Cheetah from the <a class="reference external" href="http://pypi.python.org/pypi/Cheetah3">Python
-Package Index</a>.</p>
-<p>You can keep up to date with release candidates or other downloads of
-Cheetah by visiting the <a class="reference external" href="http://github.com/CheetahTemplate3/cheetah3">CheetahTemplate GitHub page</a></p>
-<p><strong>Note to Windows users:</strong> You should install the compiled version of
-Cheetah’s NameMapper. It is dramatically faster than the pure Python
-version. Installing from wheels from PyPI is the simplest way to get the
-precompiled NameMapper extension.</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="users_guide/index.html" title="Cheetah User’s Guide"
- >next</a> |</li>
- <li class="right" >
- <a href="developers.html" title="Contributing to Cheetah"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/genindex.html b/docs/html/genindex.html
deleted file mode 100644
index 4e6e83e..0000000
--- a/docs/html/genindex.html
+++ /dev/null
@@ -1,3373 +0,0 @@
-
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Index &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="#" />
- <link rel="search" title="Search" href="search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="#" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-
-
-
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
-
-<h1 id="index">Index</h1>
-
-<div class="genindex-jumpbox">
- <a href="#A"><strong>A</strong></a>
- | <a href="#B"><strong>B</strong></a>
- | <a href="#C"><strong>C</strong></a>
- | <a href="#D"><strong>D</strong></a>
- | <a href="#E"><strong>E</strong></a>
- | <a href="#F"><strong>F</strong></a>
- | <a href="#G"><strong>G</strong></a>
- | <a href="#H"><strong>H</strong></a>
- | <a href="#I"><strong>I</strong></a>
- | <a href="#J"><strong>J</strong></a>
- | <a href="#K"><strong>K</strong></a>
- | <a href="#L"><strong>L</strong></a>
- | <a href="#M"><strong>M</strong></a>
- | <a href="#N"><strong>N</strong></a>
- | <a href="#O"><strong>O</strong></a>
- | <a href="#P"><strong>P</strong></a>
- | <a href="#R"><strong>R</strong></a>
- | <a href="#S"><strong>S</strong></a>
- | <a href="#T"><strong>T</strong></a>
- | <a href="#U"><strong>U</strong></a>
- | <a href="#V"><strong>V</strong></a>
- | <a href="#W"><strong>W</strong></a>
- | <a href="#X"><strong>X</strong></a>
- | <a href="#Y"><strong>Y</strong></a>
-
-</div>
-<h2 id="A">A</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.AbstractCacheStore">AbstractCacheStore (class in Cheetah.CacheStore)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.aClass">aClass (in module Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.AbstractCacheStore.add">add() (Cheetah.CacheStore.AbstractCacheStore method)</a>
-
- <ul>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemcachedCacheStore.add">(Cheetah.CacheStore.MemcachedCacheStore method)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemoryCacheStore.add">(Cheetah.CacheStore.MemoryCacheStore method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ArgList.add_argument">add_argument() (Cheetah.Parser.ArgList method)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ArgList.add_default">add_default() (Cheetah.Parser.ArgList method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addAssert">addAssert() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.addAttribute">addAttribute() (Cheetah.Compiler.ClassCompiler method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.addAttribute">(Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addBreak">addBreak() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addChunk">addChunk() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.addChunkToInit">addChunkToInit() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.addClassDocString">addClassDocString() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addClosure">addClosure() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.addComment">addComment() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addContinue">addContinue() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.addDecorator">addDecorator() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addDel">addDel() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addEcho">addEcho() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addElif">addElif() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addElse">addElse() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.addErrorCatcherCall">addErrorCatcherCall() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addExcept">addExcept() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addFilteredChunk">addFilteredChunk() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addFinally">addFinally() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addFor">addFor() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.GenUtils.addGetTextVar">addGetTextVar() (Cheetah.Compiler.GenUtils method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addIf">addIf() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.addImportedVarNames">addImportedVarNames() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.addImportStatement">addImportStatement() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addInclude">addInclude() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addIndentingDirective">addIndentingDirective() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.AutoMethodCompiler.addMethArg">addMethArg() (Cheetah.Compiler.AutoMethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addMethComment">addMethComment() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addMethDocString">addMethDocString() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.addModuleDocString">addModuleDocString() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.addModuleGlobal">addModuleGlobal() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.addModuleHeader">addModuleHeader() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addOneLineIf">addOneLineIf() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addPass">addPass() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addPlaceholder">addPlaceholder() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addPSP">addPSP() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addRaise">addRaise() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addRawText">addRawText() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addReIndentingDirective">addReIndentingDirective() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addRepeat">addRepeat() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addReturn">addReturn() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addSet">addSet() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addSilent">addSilent() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.addSpecialVar">addSpecialVar() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.AutoMethodCompiler.addStop">addStop() (Cheetah.Compiler.AutoMethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addStrConst">addStrConst() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.addSuper">addSuper() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addTernaryExpr">addTernaryExpr() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addTry">addTry() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addUnless">addUnless() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addWhile">addWhile() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addWriteChunk">addWriteChunk() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.addYield">addYield() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.advance">advance() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.aFunc">aFunc() (in module Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.MondoReport.all">all() (Cheetah.Tools.MondoReport.MondoReport method)</a>
-</li>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#Cheetah.DirectiveAnalyzer.AnalysisCompiler">AnalysisCompiler (class in Cheetah.DirectiveAnalyzer)</a>
-</li>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#Cheetah.DirectiveAnalyzer.analyze">analyze() (in module Cheetah.DirectiveAnalyzer)</a>
-</li>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#Cheetah.DirectiveAnalyzer.Analyzer">Analyzer (class in Cheetah.DirectiveAnalyzer)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Analyzer.html#Cheetah.Tests.Analyzer.AnalyzerTests">AnalyzerTests (class in Cheetah.Tests.Analyzer)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.any">any() (in module Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.appendToPrevChunk">appendToPrevChunk() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.application">application (Cheetah.Servlet.Servlet attribute)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ArgList">ArgList (class in Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Parser.html#Cheetah.Tests.Parser.ArgListTest">ArgListTest (class in Cheetah.Tests.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.ARGS">ARGS (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AssertDirective">AssertDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.assertPosixSubprocess">assertPosixSubprocess() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.assertSubprocess">assertSubprocess() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.assertWin32Subprocess">assertWin32Subprocess() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.atEnd">atEnd() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.atStart">atStart() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AttrDirective">AttrDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.attributes">attributes() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.AutoClassCompiler">AutoClassCompiler (class in Cheetah.Compiler)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.AutoMethodCompiler">AutoMethodCompiler (class in Cheetah.Compiler)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.average">average() (Cheetah.Tools.MondoReport.Summary method)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="B">B</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes">Backslashes (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.BACKUP_SUFFIX">BACKUP_SUFFIX (Cheetah.CheetahWrapper.CheetahWrapper attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Filters.html#Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest">BasicCodeHighlighterFilterTest (class in Cheetah.Tests.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Filters.html#Cheetah.Tests.Filters.BasicMarkdownFilterTest">BasicMarkdownFilterTest (class in Cheetah.Tests.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.MondoReport.batch">batch() (Cheetah.Tools.MondoReport.MondoReport method)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.BigEcho">BigEcho (class in Cheetah.ErrorCatchers)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective">BlockDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.Boinker.html#Cheetah.Tests.Boinker.Boinker.boink">boink() (Cheetah.Tests.Boinker.Boinker method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Boinker.html#Cheetah.Tests.Boinker.Boinker">Boinker (class in Cheetah.Tests.Boinker)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BreakDirective">BreakDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.breakPoint">breakPoint() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BreakpointDirective">BreakpointDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.BuiltinImportDirector">BuiltinImportDirector (class in Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.BunchOfWriteCalls">BunchOfWriteCalls (class in Cheetah.Tests.Performance)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.Bundle">Bundle (class in Cheetah.CheetahWrapper)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="C">C</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CacheDirective">CacheDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.cachedRegex">cachedRegex() (in module Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem">CacheItem (class in Cheetah.CacheRegion)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheRegion">CacheRegion (class in Cheetah.CacheRegion)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective">CallDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DummyClass.callIt">callIt() (Cheetah.Tests.SyntaxAndOutput.DummyClass method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CaptureDirective">CaptureDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase">CFBase (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFIdirBase">CFIdirBase (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CGI">CGI (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tools.CGITemplate.html#Cheetah.Tools.CGITemplate.CGITemplate.cgiHeaders">cgiHeaders() (Cheetah.Tools.CGITemplate.CGITemplate method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.CGITemplate.html#Cheetah.Tools.CGITemplate.CGITemplate.cgiHeadersHook">cgiHeadersHook() (Cheetah.Tools.CGITemplate.CGITemplate method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.CGITemplate.html#Cheetah.Tools.CGITemplate.CGITemplate">CGITemplate (class in Cheetah.Tools.CGITemplate)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.CHAR">CHAR (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.Chars">Chars (Cheetah.Utils.Indenter.Indenter attribute)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.chatter">chatter() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest.check">check() (Cheetah.Tests.NameMapper.NameMapperTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.checkCompile">checkCompile() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.checkFileMtime">checkFileMtime() (in module Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.checkFill">checkFill() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Misc.html#Cheetah.Utils.Misc.checkKeywords">checkKeywords() (in module Cheetah.Utils.Misc)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.checkNoBackup">checkNoBackup() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.checkPos">checkPos() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.checkSubdirPyInit">checkSubdirPyInit() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.html#module-Cheetah">Cheetah (module)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#module-Cheetah.CacheRegion">Cheetah.CacheRegion (module)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#module-Cheetah.CacheStore">Cheetah.CacheStore (module)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#module-Cheetah.CheetahWrapper">Cheetah.CheetahWrapper (module)</a>
-</li>
- <li><a href="api/Cheetah.compat.html#module-Cheetah.compat">Cheetah.compat (module)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#module-Cheetah.Compiler">Cheetah.Compiler (module)</a>
-</li>
- <li><a href="api/Cheetah.convertTmplPathToModuleName.html#module-Cheetah.convertTmplPathToModuleName">Cheetah.convertTmplPathToModuleName (module)</a>
-</li>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#module-Cheetah.DirectiveAnalyzer">Cheetah.DirectiveAnalyzer (module)</a>
-</li>
- <li><a href="api/Cheetah.Django.html#module-Cheetah.Django">Cheetah.Django (module)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#module-Cheetah.DummyTransaction">Cheetah.DummyTransaction (module)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#module-Cheetah.ErrorCatchers">Cheetah.ErrorCatchers (module)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#module-Cheetah.FileUtils">Cheetah.FileUtils (module)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#module-Cheetah.Filters">Cheetah.Filters (module)</a>
-</li>
- <li><a href="api/Cheetah.ImportHooks.html#module-Cheetah.ImportHooks">Cheetah.ImportHooks (module)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#module-Cheetah.ImportManager">Cheetah.ImportManager (module)</a>
-</li>
- <li><a href="api/Cheetah.Macros.html#module-Cheetah.Macros">Cheetah.Macros (module)</a>
-</li>
- <li><a href="api/Cheetah.Macros.I18n.html#module-Cheetah.Macros.I18n">Cheetah.Macros.I18n (module)</a>
-</li>
- <li><a href="api/Cheetah.NameMapper.html#module-Cheetah.NameMapper">Cheetah.NameMapper (module)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#module-Cheetah.Parser">Cheetah.Parser (module)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#module-Cheetah.Servlet">Cheetah.Servlet (module)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#module-Cheetah.SettingsManager">Cheetah.SettingsManager (module)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#module-Cheetah.SourceReader">Cheetah.SourceReader (module)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#module-Cheetah.Template">Cheetah.Template (module)</a>
-</li>
- <li><a href="api/Cheetah.TemplateCmdLineIface.html#module-Cheetah.TemplateCmdLineIface">Cheetah.TemplateCmdLineIface (module)</a>
-</li>
- <li><a href="api/Cheetah.Templates.html#module-Cheetah.Templates">Cheetah.Templates (module)</a>
-</li>
- <li><a href="api/Cheetah.Templates.SkeletonPage.html#module-Cheetah.Templates.SkeletonPage">Cheetah.Templates.SkeletonPage (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.html#module-Cheetah.Tests">Cheetah.Tests (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Analyzer.html#module-Cheetah.Tests.Analyzer">Cheetah.Tests.Analyzer (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Boinker.html#module-Cheetah.Tests.Boinker">Cheetah.Tests.Boinker (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#module-Cheetah.Tests.CheetahWrapper">Cheetah.Tests.CheetahWrapper (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Cheps.html#module-Cheetah.Tests.Cheps">Cheetah.Tests.Cheps (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Filters.html#module-Cheetah.Tests.Filters">Cheetah.Tests.Filters (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Misc.html#module-Cheetah.Tests.Misc">Cheetah.Tests.Misc (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#module-Cheetah.Tests.NameMapper">Cheetah.Tests.NameMapper (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper_pure.html#module-Cheetah.Tests.NameMapper_pure">Cheetah.Tests.NameMapper_pure (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Parser.html#module-Cheetah.Tests.Parser">Cheetah.Tests.Parser (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#module-Cheetah.Tests.Performance">Cheetah.Tests.Performance (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Pinger.html#module-Cheetah.Tests.Pinger">Cheetah.Tests.Pinger (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#module-Cheetah.Tests.Regressions">Cheetah.Tests.Regressions (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#module-Cheetah.Tests.SyntaxAndOutput">Cheetah.Tests.SyntaxAndOutput (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#module-Cheetah.Tests.Template">Cheetah.Tests.Template (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Test.html#module-Cheetah.Tests.Test">Cheetah.Tests.Test (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#module-Cheetah.Tests.Unicode">Cheetah.Tests.Unicode (module)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#module-Cheetah.Tests.xmlrunner">Cheetah.Tests.xmlrunner (module)</a>
-</li>
- <li><a href="api/Cheetah.Tools.html#module-Cheetah.Tools">Cheetah.Tools (module)</a>
-</li>
- <li><a href="api/Cheetah.Tools.CGITemplate.html#module-Cheetah.Tools.CGITemplate">Cheetah.Tools.CGITemplate (module)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#module-Cheetah.Tools.MondoReport">Cheetah.Tools.MondoReport (module)</a>
-</li>
- <li><a href="api/Cheetah.Tools.RecursiveNull.html#module-Cheetah.Tools.RecursiveNull">Cheetah.Tools.RecursiveNull (module)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#module-Cheetah.Tools.SiteHierarchy">Cheetah.Tools.SiteHierarchy (module)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.html#module-Cheetah.Tools.turbocheetah">Cheetah.Tools.turbocheetah (module)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#module-Cheetah.Tools.turbocheetah.cheetahsupport">Cheetah.Tools.turbocheetah.cheetahsupport (module)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.tests.html#module-Cheetah.Tools.turbocheetah.tests">Cheetah.Tools.turbocheetah.tests (module)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.tests.test_template.html#module-Cheetah.Tools.turbocheetah.tests.test_template">Cheetah.Tools.turbocheetah.tests.test_template (module)</a>
-</li>
- <li><a href="api/Cheetah.Unspecified.html#module-Cheetah.Unspecified">Cheetah.Unspecified (module)</a>
-</li>
- <li><a href="api/Cheetah.Utils.html#module-Cheetah.Utils">Cheetah.Utils (module)</a>
-</li>
- <li><a href="api/Cheetah.Utils.htmlDecode.html#module-Cheetah.Utils.htmlDecode">Cheetah.Utils.htmlDecode (module)</a>
-</li>
- <li><a href="api/Cheetah.Utils.htmlEncode.html#module-Cheetah.Utils.htmlEncode">Cheetah.Utils.htmlEncode (module)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#module-Cheetah.Utils.Indenter">Cheetah.Utils.Indenter (module)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Misc.html#module-Cheetah.Utils.Misc">Cheetah.Utils.Misc (module)</a>
-</li>
- <li><a href="api/Cheetah.Utils.WebInputMixin.html#module-Cheetah.Utils.WebInputMixin">Cheetah.Utils.WebInputMixin (module)</a>
-</li>
- <li><a href="api/Cheetah.Version.html#module-Cheetah.Version">Cheetah.Version (module)</a>
-</li>
- <li><a href="api/Cheetah.ImportHooks.html#Cheetah.ImportHooks.CheetahDirOwner">CheetahDirOwner (class in Cheetah.ImportHooks)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.CheetahVariable">CheetahVariable (class in Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper">CheetahWrapper (class in Cheetah.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Cheps.html#Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior">Chep_2_Conditionalized_Import_Behavior (class in Cheetah.Tests.Cheps)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler">ClassCompiler (class in Cheetah.Compiler)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.classCompilerClass">classCompilerClass (Cheetah.Compiler.ModuleCompiler attribute)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.classDef">classDef() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.classDefs">classDefs() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.classDocstring">classDocstring() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile">ClassMethods_compile (class in Cheetah.Tests.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_subclass">ClassMethods_subclass (class in Cheetah.Tests.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethodSupport">ClassMethodSupport (class in Cheetah.Tests.Template)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.className">className() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.classSignature">classSignature() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.DummyClass.classVar1">classVar1 (Cheetah.Tests.NameMapper.DummyClass attribute)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.AutoMethodCompiler.cleanupState">cleanupState() (Cheetah.Compiler.AutoMethodCompiler method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.cleanupState">(Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.cleanupState">(Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem.clear">clear() (Cheetah.CacheRegion.CacheItem method)</a>
-
- <ul>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheRegion.clear">(Cheetah.CacheRegion.CacheRegion method)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemcachedCacheStore.clear">(Cheetah.CacheStore.MemcachedCacheStore method)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemoryCacheStore.clear">(Cheetah.CacheStore.MemoryCacheStore method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.closeBlock">closeBlock() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.closeDef">closeDef() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.closeFilterBlock">closeFilterBlock() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.TemplateCmdLineIface.html#Cheetah.TemplateCmdLineIface.CmdLineIface">CmdLineIface (class in Cheetah.TemplateCmdLineIface)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.CodeHighlighter">CodeHighlighter (class in Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.CommandLineTest">CommandLineTest (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine">Comments_MultiLine (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble">Comments_MultiLine_NoGobble (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine">Comments_SingleLine (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.commitStrConst">commitStrConst() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.compile">compile() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.compile">(Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.compile">(Cheetah.Template.Template class method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.LongCompileTest.compile">(Cheetah.Tests.Performance.LongCompileTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest.compile">(Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.CompileCacheItem">CompileCacheItem (class in Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.Compiler">Compiler (in module Cheetah.Compiler)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CompilerDirective">CompilerDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective">CompilerSettingsDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.ConfigParserCaseSensitive">ConfigParserCaseSensitive (class in Cheetah.SettingsManager)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ContinueDirective">ContinueDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Indenter.control">control (Cheetah.Tests.SyntaxAndOutput.Indenter attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.convertEOLs">convertEOLs (Cheetah.Tests.SyntaxAndOutput.Backslashes attribute)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CGI.convertEOLs">(Cheetah.Tests.SyntaxAndOutput.CGI attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EmptyTemplate.convertEOLs">(Cheetah.Tests.SyntaxAndOutput.EmptyTemplate attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.convertEOLs">(Cheetah.Tests.SyntaxAndOutput.FilterDirective attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Indenter.convertEOLs">(Cheetah.Tests.SyntaxAndOutput.Indenter attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.OutputTest.convertEOLs">(Cheetah.Tests.SyntaxAndOutput.OutputTest attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.convertEOLs">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.convertEOLs">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.YieldDirective.convertEOLs">(Cheetah.Tests.SyntaxAndOutput.YieldDirective attribute)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.convertTmplPathToModuleName.html#Cheetah.convertTmplPathToModuleName.convertTmplPathToModuleName">convertTmplPathToModuleName() (in module Cheetah.convertTmplPathToModuleName)</a>
-</li>
- <li><a href="api/Cheetah.Version.html#Cheetah.Version.convertVersionStringToTuple">convertVersionStringToTuple() (in module Cheetah.Version)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.convStringToNum">convStringToNum() (in module Cheetah.SettingsManager)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.copySettings">copySettings() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.count">count() (Cheetah.Tools.MondoReport.Summary method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.create_error">create_error() (in module Cheetah.Tests.xmlrunner)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.create_failure">create_failure() (in module Cheetah.Tests.xmlrunner)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.create_success">create_success() (in module Cheetah.Tests.xmlrunner)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.CommandLineTest.createAndCompile">createAndCompile() (Cheetah.Tests.Unicode.CommandLineTest method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.createMethod">createMethod() (in module Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#Cheetah.Tools.SiteHierarchy.Hierarchy.crumbLink">crumbLink() (Cheetah.Tools.SiteHierarchy.Hierarchy method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#Cheetah.Tools.SiteHierarchy.Hierarchy.crumbs">crumbs() (Cheetah.Tools.SiteHierarchy.Hierarchy method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#Cheetah.Tools.SiteHierarchy.Hierarchy.crumbSeperator">crumbSeperator() (Cheetah.Tools.SiteHierarchy.Hierarchy method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#Cheetah.Tools.SiteHierarchy.Hierarchy.crumbTerminator">crumbTerminator() (Cheetah.Tools.SiteHierarchy.Hierarchy method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.CustomGetAttrClass">CustomGetAttrClass (class in Cheetah.Tests.Regressions)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="D">D</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.debug">debug() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.OutputTest.DEBUGLEV">DEBUGLEV (Cheetah.Tests.SyntaxAndOutput.OutputTest attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.DEC">DEC (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.dec">dec() (Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DecoratorDirective">DecoratorDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.dedent">dedent() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.deepcopySettings">deepcopySettings() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective">DefDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefmacroDirective">DefmacroDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.AbstractCacheStore.delete">delete() (Cheetah.CacheStore.AbstractCacheStore method)</a>
-
- <ul>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemcachedCacheStore.delete">(Cheetah.CacheStore.MemcachedCacheStore method)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemoryCacheStore.delete">(Cheetah.CacheStore.MemoryCacheStore method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Utils.Misc.html#Cheetah.Utils.Misc.die">die() (in module Cheetah.Utils.Misc)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.DIRECTIVE">DIRECTIVE (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.DirOwner">DirOwner (class in Cheetah.ImportManager)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.PerformanceTest.display">display (Cheetah.Tests.Performance.PerformanceTest attribute)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.docString">docString() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.ImportManager.doimport">doimport() (Cheetah.ImportManager.ImportManager method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.DummyClass">DummyClass (class in Cheetah.Tests.NameMapper)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DummyClass">(class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.DummyClassGetAttrRaises">DummyClassGetAttrRaises (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.dummyFunc">dummyFunc() (in module Cheetah.Tests.NameMapper)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.dummyFunc">(in module Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyResponse">DummyResponse (class in Cheetah.DummyTransaction)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyResponseFailure">DummyResponseFailure</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyTransaction">DummyTransaction (class in Cheetah.DummyTransaction)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.DurationError">DurationError</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.DynamicMethodCompilationTest">DynamicMethodCompilationTest (class in Cheetah.Tests.Performance)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.DynamicSimpleCompilationTest">DynamicSimpleCompilationTest (class in Cheetah.Tests.Performance)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.DynamicTemplatePerformanceTest">DynamicTemplatePerformanceTest (class in Cheetah.Tests.Performance)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="E">E</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#Cheetah.DirectiveAnalyzer.Analyzer.eatDirective">eatDirective() (Cheetah.DirectiveAnalyzer.Analyzer method)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.Echo">Echo (in module Cheetah.ErrorCatchers)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EchoDirective">EchoDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#Cheetah.Tools.SiteHierarchy.Hierarchy.emptyCrumb">emptyCrumb() (Cheetah.Tools.SiteHierarchy.Hierarchy method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EmptyTemplate">EmptyTemplate (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.EncodeUnicode">EncodeUnicode (in module Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.EncodeUnicodeCompatTest">EncodeUnicodeCompatTest (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EncodingDirective">EncodingDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.ENCODINGsearch">ENCODINGsearch() (in module Cheetah.SourceReader)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.endCacheRegion">endCacheRegion() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.endCallRegion">endCallRegion() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.endCaptureRegion">endCaptureRegion() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken">EOLSlurpToken (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.Error">Error</a>, <a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.Error">[1]</a>, <a href="api/Cheetah.Compiler.html#Cheetah.Compiler.Error">[2]</a>, <a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.Error">[3]</a>, <a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.Error">[4]</a>, <a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.Error">[5]</a>, <a href="api/Cheetah.Template.html#Cheetah.Template.Error">[6]</a>, <a href="api/Cheetah.TemplateCmdLineIface.html#Cheetah.TemplateCmdLineIface.Error">[7]</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.error">error() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.ErrorCatcher">ErrorCatcher (class in Cheetah.ErrorCatchers)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.errorCatcher">errorCatcher() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ErrorCatcherDirective">ErrorCatcherDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.escapeRegexChars">escapeRegexChars() (in module Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.even">even() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.even_i">even_i() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.ErrorCatcher.exceptions">exceptions() (Cheetah.ErrorCatchers.ErrorCatcher method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.expectError">expectError (Cheetah.Tests.CheetahWrapper.CFBase attribute)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.expectError">(Cheetah.Tests.CheetahWrapper.FlatRecurseCollision attribute)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.expectError">(Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision attribute)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective">ExtendsDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.extension">extension (Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah attribute)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.html#Cheetah.Tools.turbocheetah.TurboCheetah.extension">(Cheetah.Tools.turbocheetah.TurboCheetah attribute)</a>
-</li>
- </ul></li>
- </ul></td>
-</tr></table>
-
-<h2 id="F">F</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest.failureException">failureException (Cheetah.Tests.NameMapper.NameMapperTest attribute)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.FileFinder">FileFinder (class in Cheetah.FileUtils)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.filename">filename() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.FileFinder.files">files() (Cheetah.FileUtils.FileFinder method)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.fill">fill() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.Filter">Filter (class in Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.CodeHighlighter.filter">filter() (Cheetah.Filters.CodeHighlighter method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.Filter.filter">(Cheetah.Filters.Filter method)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.Markdown.filter">(Cheetah.Filters.Markdown method)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.MaxLen.filter">(Cheetah.Filters.MaxLen method)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.Strip.filter">(Cheetah.Filters.Strip method)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.StripSqueeze.filter">(Cheetah.Filters.StripSqueeze method)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.WebSafe.filter">(Cheetah.Filters.WebSafe method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.FileFinder.filterDir">filterDir() (Cheetah.FileUtils.FileFinder method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective">FilterDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.FilterTest">FilterTest (class in Cheetah.Tests.Performance)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.find">find() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.FindAndReplace">FindAndReplace (class in Cheetah.FileUtils)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.findBOL">findBOL() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.findEOL">findEOL() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.findFiles">findFiles() (in module Cheetah.FileUtils)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.first">first() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.firstValue">firstValue() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.Flat">Flat (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision">FlatRecurseCollision (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyResponse.flush">flush() (Cheetah.DummyTransaction.DummyResponse method)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ForbiddenDirective">ForbiddenDirective</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ForbiddenExpression">ForbiddenExpression</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ForbiddenSyntax">ForbiddenSyntax</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective">ForDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.fprintfMessage">fprintfMessage() (in module Cheetah.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.FrozenImportDirector">FrozenImportDirector (class in Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.funcThatRaises">funcThatRaises() (in module Cheetah.Tests.NameMapper)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="G">G</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.GenUtils.genCacheInfo">genCacheInfo() (Cheetah.Compiler.GenUtils method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.GenUtils.genCacheInfoFromArgList">genCacheInfoFromArgList() (Cheetah.Compiler.GenUtils method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.GenUtils.genCheetahVar">genCheetahVar() (Cheetah.Compiler.GenUtils method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.OutputTest.genClassCode">genClassCode() (Cheetah.Tests.SyntaxAndOutput.OutputTest method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.generatedClassCode">generatedClassCode() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.generatedModuleCode">generatedModuleCode() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.OutputTest.genModuleCode">genModuleCode() (Cheetah.Tests.SyntaxAndOutput.OutputTest method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.GenUtils.genNameMapperVar">genNameMapperVar() (Cheetah.Compiler.GenUtils method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.genParserErrorFromPythonException">genParserErrorFromPythonException() (in module Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.GenUtils.genPlainVar">genPlainVar() (Cheetah.Compiler.GenUtils method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.GenUtils.genTimeInterval">genTimeInterval() (Cheetah.Compiler.GenUtils method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.GenUtils">GenUtils (class in Cheetah.Compiler)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.AbstractCacheStore.get">get() (Cheetah.CacheStore.AbstractCacheStore method)</a>
-
- <ul>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemcachedCacheStore.get">(Cheetah.CacheStore.MemcachedCacheStore method)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemoryCacheStore.get">(Cheetah.CacheStore.MemoryCacheStore method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest.get">(Cheetah.Tests.NameMapper.NameMapperTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFF.get">(Cheetah.Tests.NameMapper.VFF method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFFSL.get">(Cheetah.Tests.NameMapper.VFFSL method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFS.get">(Cheetah.Tests.NameMapper.VFS method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.GetAttrException">GetAttrException</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.GetAttrTest">GetAttrTest (class in Cheetah.Tests.Regressions)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.getc">getc() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheRegion.getCacheItem">getCacheItem() (Cheetah.CacheRegion.CacheRegion method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.getCacheRegion">getCacheRegion() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.getCacheRegions">getCacheRegions() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem.getData">getData() (Cheetah.CacheRegion.CacheItem method)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.getDescr">getDescr() (in module Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem.getExpiryTime">getExpiryTime() (Cheetah.CacheRegion.CacheItem method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.getFileContents">getFileContents() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.SourceFileStats.getFileStats">getFileStats() (Cheetah.FileUtils.SourceFileStats method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.getLine">getLine() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.ImportHooks.html#Cheetah.ImportHooks.CheetahDirOwner.getmod">getmod() (Cheetah.ImportHooks.CheetahDirOwner method)</a>
-
- <ul>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.BuiltinImportDirector.getmod">(Cheetah.ImportManager.BuiltinImportDirector method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.DirOwner.getmod">(Cheetah.ImportManager.DirOwner method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.FrozenImportDirector.getmod">(Cheetah.ImportManager.FrozenImportDirector method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.Owner.getmod">(Cheetah.ImportManager.Owner method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.PathImportDirector.getmod">(Cheetah.ImportManager.PathImportDirector method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.RegistryImportDirector.getmod">(Cheetah.ImportManager.RegistryImportDirector method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.getModuleCode">getModuleCode() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.getModuleEncoding">getModuleEncoding() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.getNonWhiteSpace">getNonWhiteSpace() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.getPathExt">getPathExt() (in module Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem.getRefreshTime">getRefreshTime() (Cheetah.CacheRegion.CacheItem method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.getRowCol">getRowCol() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.getRowColLine">getRowColLine() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyResponse.getvalue">getvalue() (Cheetah.DummyTransaction.DummyResponse method)</a>
-
- <ul>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.TransformerResponse.getvalue">(Cheetah.DummyTransaction.TransformerResponse method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.GetVar">GetVar (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.getVar">getVar() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.getWhiteSpace">getWhiteSpace() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.go">go() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.gotoBookmark">gotoBookmark() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.group">group() (in module Cheetah.Parser)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="H">H</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.handleWSBeforeDirective">handleWSBeforeDirective() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.hasBookmark">hasBookmark() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem.hasExpired">hasExpired() (Cheetah.CacheRegion.CacheItem method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.hashDict">hashDict() (in module Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.hashList">hashList() (in module Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.NameMapper.html#Cheetah.NameMapper.hasKey">hasKey() (in module Cheetah.NameMapper)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.hasSetting">hasSetting() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.hasVar">hasVar() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.help">help() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#Cheetah.Tools.SiteHierarchy.Hierarchy">Hierarchy (class in Cheetah.Tools.SiteHierarchy)</a>
-</li>
- <li><a href="api/Cheetah.Utils.htmlDecode.html#Cheetah.Utils.htmlDecode.htmlDecode">htmlDecode() (in module Cheetah.Utils.htmlDecode)</a>
-</li>
- <li><a href="api/Cheetah.Utils.htmlEncode.html#Cheetah.Utils.htmlEncode.htmlEncode">htmlEncode() (in module Cheetah.Utils.htmlEncode)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="I">I</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Macros.I18n.html#Cheetah.Macros.I18n.I18n">I18n (class in Cheetah.Macros.I18n)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.i18n">i18n() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.I18nDirective">I18nDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision">IdirFlatRecurseCollision (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirOdirRecurse">IdirOdirRecurse (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirRecurse">IdirRecurse (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective">IfDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases">ImportantExampleCases (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective">ImportDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.ImportDirector">ImportDirector (class in Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.importedVarNames">importedVarNames() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.ImportManager.importHook">importHook() (Cheetah.ImportManager.ImportManager method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.ImportManager">ImportManager (class in Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.importStatements">importStatements() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.INC">INC (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.inc">inc() (Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective">IncludeDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.indent">indent() (Cheetah.Compiler.MethodCompiler method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.indent">(Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.INDENT_DIR">INDENT_DIR (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.indentation">indentation() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Indenter">Indenter (class in Cheetah.Tests.SyntaxAndOutput)</a>
-
- <ul>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter">(class in Cheetah.Utils.Indenter)</a>
-</li>
- </ul></li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.indentize">indentize() (in module Cheetah.Utils.Indenter)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor">IndentProcessor (class in Cheetah.Utils.Indenter)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.index">index() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats">IndexFormats (class in Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.inform">inform() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.InlineImportTest">InlineImportTest (class in Cheetah.Tests.Regressions)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.InlineSpanishTest">InlineSpanishTest (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.ImportManager.install">install() (Cheetah.ImportManager.ImportManager method)</a>
-
- <ul>
- <li><a href="api/Cheetah.ImportHooks.html#Cheetah.ImportHooks.install">(in module Cheetah.ImportHooks)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.install_eols">install_eols() (in module Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tools.CGITemplate.html#Cheetah.Tools.CGITemplate.CGITemplate.isCgi">isCgi() (Cheetah.Tools.CGITemplate.CGITemplate method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.AutoMethodCompiler.isClassMethod">isClassMethod() (Cheetah.Compiler.AutoMethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.isErrorCatcherOn">isErrorCatcherOn() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.isLineClearToPos">isLineClearToPos() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheRegion.isNew">isNew() (Cheetah.CacheRegion.CacheRegion method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.isNonNegative">isNonNegative() (in module Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.isNotNone">isNotNone() (in module Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.isNumeric">isNumeric() (in module Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.AutoMethodCompiler.isStaticMethod">isStaticMethod() (Cheetah.Compiler.AutoMethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.item">item() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.BunchOfWriteCalls.iterations">iterations (Cheetah.Tests.Performance.BunchOfWriteCalls attribute)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.PerformanceTest.iterations">(Cheetah.Tests.Performance.PerformanceTest attribute)</a>
-</li>
- </ul></li>
- </ul></td>
-</tr></table>
-
-<h2 id="J">J</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test1">JBQ_UTF8_Test1 (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test2">JBQ_UTF8_Test2 (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test3">JBQ_UTF8_Test3 (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test4">JBQ_UTF8_Test4 (class in Cheetah.Tests.Unicode)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test5">JBQ_UTF8_Test5 (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test6">JBQ_UTF8_Test6 (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test7">JBQ_UTF8_Test7 (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test8">JBQ_UTF8_Test8 (class in Cheetah.Tests.Unicode)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="K">K</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.KeyError">KeyError (class in Cheetah.ErrorCatchers)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="L">L</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.last">last() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.lastValue">lastValue() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.length">length() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.Letter">Letter() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.letter">letter() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.Level">Level (Cheetah.Utils.Indenter.Indenter attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.LevelStack">LevelStack (Cheetah.Utils.Indenter.Indenter attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.LINE_SEP">LINE_SEP (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.lineNum">lineNum() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.ListErrors">ListErrors (class in Cheetah.ErrorCatchers)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.ListErrors.listErrors">listErrors() (Cheetah.ErrorCatchers.ListErrors method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.listTests">listTests() (in module Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template">load_template() (Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.html#Cheetah.Tools.turbocheetah.TurboCheetah.load_template">(Cheetah.Tools.turbocheetah.TurboCheetah method)</a>
-</li>
- </ul></li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_file">load_template_file() (Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.html#Cheetah.Tools.turbocheetah.TurboCheetah.load_template_file">(Cheetah.Tools.turbocheetah.TurboCheetah method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_module">load_template_module() (Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.html#Cheetah.Tools.turbocheetah.TurboCheetah.load_template_module">(Cheetah.Tools.turbocheetah.TurboCheetah method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.load_template_string">load_template_string() (Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.html#Cheetah.Tools.turbocheetah.TurboCheetah.load_template_string">(Cheetah.Tools.turbocheetah.TurboCheetah method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.loadModule">loadModule() (in module Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.locate_cheetah">locate_cheetah() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest">LongCompile_CompilerSettingsTest (class in Cheetah.Tests.Performance)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.LongCompileAndRun">LongCompileAndRun (class in Cheetah.Tests.Performance)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.LongCompileTest">LongCompileTest (class in Cheetah.Tests.Performance)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.DynamicTemplatePerformanceTest.loops">loops (Cheetah.Tests.Performance.DynamicTemplatePerformanceTest attribute)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="M">M</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.main">main (in module Cheetah.Tests.xmlrunner)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.main">main() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-
- <ul>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#Cheetah.DirectiveAnalyzer.main">(in module Cheetah.DirectiveAnalyzer)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.main">(in module Cheetah.Tests.CheetahWrapper)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#Cheetah.DirectiveAnalyzer.main_dir">main_dir() (in module Cheetah.DirectiveAnalyzer)</a>
-</li>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#Cheetah.DirectiveAnalyzer.main_file">main_file() (in module Cheetah.DirectiveAnalyzer)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.MAKE_BACKUPS">MAKE_BACKUPS (Cheetah.CheetahWrapper.CheetahWrapper attribute)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.makeTripleQuoteRe">makeTripleQuoteRe() (in module Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test">Mantis_Issue_11_Regression_Test (class in Cheetah.Tests.Regressions)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test">Mantis_Issue_21_Regression_Test (class in Cheetah.Tests.Regressions)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test">Mantis_Issue_22_Regression_Test (class in Cheetah.Tests.Regressions)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.MapBuiltins">MapBuiltins (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.Markdown">Markdown (class in Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.matches">matches() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.matchNonWhiteSpace">matchNonWhiteSpace() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.matchWhiteSpace">matchWhiteSpace() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.max">max() (Cheetah.Tools.MondoReport.Summary method)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.MaxLen">MaxLen (class in Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.maybe">maybe() (in module Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.mean">mean() (Cheetah.Tools.MondoReport.Summary method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.mean">(in module Cheetah.Tools.MondoReport)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.median">median() (Cheetah.Tools.MondoReport.Summary method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.median">(in module Cheetah.Tools.MondoReport)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemcachedCacheStore">MemcachedCacheStore (class in Cheetah.CacheStore)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemoryCacheStore">MemoryCacheStore (class in Cheetah.CacheStore)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#Cheetah.Tools.SiteHierarchy.Hierarchy.menuLink">menuLink() (Cheetah.Tools.SiteHierarchy.Hierarchy method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.SiteHierarchy.html#Cheetah.Tools.SiteHierarchy.Hierarchy.menuList">menuList() (Cheetah.Tools.SiteHierarchy.Hierarchy method)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ArgList.merge">merge() (Cheetah.Parser.ArgList method)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.mergeNestedDictionaries">mergeNestedDictionaries() (in module Cheetah.SettingsManager)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.DummyClass.meth">meth() (Cheetah.Tests.NameMapper.DummyClass method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DummyClass.meth">(Cheetah.Tests.SyntaxAndOutput.DummyClass method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.DummyClass.meth1">meth1() (Cheetah.Tests.NameMapper.DummyClass method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DummyClass.meth1">(Cheetah.Tests.SyntaxAndOutput.DummyClass method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.DummyClass.meth2">meth2() (Cheetah.Tests.NameMapper.DummyClass method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DummyClass.meth2">(Cheetah.Tests.SyntaxAndOutput.DummyClass method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.DummyClass.meth3">meth3() (Cheetah.Tests.NameMapper.DummyClass method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.methodBody">methodBody() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler">MethodCompiler (class in Cheetah.Compiler)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.methodCompilerClass">methodCompilerClass (Cheetah.Compiler.ClassCompiler attribute)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.methodCompilerClassForInit">methodCompilerClassForInit (Cheetah.Compiler.ClassCompiler attribute)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.methodDef">methodDef() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.methodDefs">methodDefs() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.methodName">methodName() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.AutoMethodCompiler.methodSignature">methodSignature() (Cheetah.Compiler.AutoMethodCompiler method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.methodSignature">(Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DummyClass.methWithPercentSignDefaultArg">methWithPercentSignDefaultArg() (Cheetah.Tests.SyntaxAndOutput.DummyClass method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.min">min() (Cheetah.Tools.MondoReport.Summary method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax">MiscComplexSyntax (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Misc.html#Cheetah.Utils.Misc.mkdirsWithPyInitFiles">mkdirsWithPyInitFiles() (in module Cheetah.Utils.Misc)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler">ModuleCompiler (class in Cheetah.Compiler)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.moduleConstants">moduleConstants() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.moduleDocstring">moduleDocstring() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.moduleFooter">moduleFooter() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.moduleHeader">moduleHeader() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.MondoReport">MondoReport (class in Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.MultipleInheritanceSupport">MultipleInheritanceSupport (class in Cheetah.Tests.Template)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="N">N</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.namedGroup">namedGroup() (in module Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper">NameMapper (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest">NameMapperTest (class in Cheetah.Tests.NameMapper)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.NameMapper_pure.html#Cheetah.Tests.NameMapper_pure.NameMapperTest">(class in Cheetah.Tests.NameMapper_pure)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest.namespace">namespace() (Cheetah.Tests.NameMapper.NameMapperTest method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.nameSplit">nameSplit() (in module Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.NegativeError">NegativeError</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ArgList.next">next() (Cheetah.Parser.ArgList method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.next">(Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.next_batches">next_batches() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.nextCacheID">nextCacheID() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.nextCallRegionID">nextCallRegionID() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.nextCaptureRegionID">nextCaptureRegionID() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.nextFilterRegionID">nextFilterRegionID() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.nextPages">nextPages() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.NoBackup">NoBackup (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.NoDefault">NoDefault (class in Cheetah.SettingsManager)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.nongroup">nongroup() (in module Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Utils.WebInputMixin.html#Cheetah.Utils.WebInputMixin.NonNumericInputError">NonNumericInputError</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NonTokens">NonTokens (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.NameMapper.html#Cheetah.NameMapper.NotFound">NotFound</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.number">number() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="O">O</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.odd">odd() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.odd_i">odd_i() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.OFF">OFF (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.off">off() (Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.On">On (Cheetah.Utils.Indenter.Indenter attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.ON">ON (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.on">on() (Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFile">OneFile (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFileNoExtension">OneFileNoExtension (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFileWithOdir">OneFileWithOdir (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.options">options() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.ConfigParserCaseSensitive.optionxform">optionxform() (Cheetah.SettingsManager.ConfigParserCaseSensitive method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.OutputTest">OutputTest (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.Owner">Owner (class in Cheetah.ImportManager)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="P">P</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.packageName">packageName() (in module Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.MondoReport.page">page() (Cheetah.Tools.MondoReport.MondoReport method)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ParseError">ParseError</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.parseOpts">parseOpts() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.Parser">Parser (in module Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.parserClass">parserClass (Cheetah.Compiler.ModuleCompiler attribute)</a>
-
- <ul>
- <li><a href="api/Cheetah.DirectiveAnalyzer.html#Cheetah.DirectiveAnalyzer.AnalysisCompiler.parserClass">(Cheetah.DirectiveAnalyzer.AnalysisCompiler attribute)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PassDirective">PassDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunner.path">path (Cheetah.Tests.xmlrunner.XMLTestRunner attribute)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.PathImportDirector">PathImportDirector (class in Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.pathIsDir">pathIsDir() (in module Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.peek">peek() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.percentOfTotal">percentOfTotal() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.BunchOfWriteCalls.performanceSample">performanceSample() (Cheetah.Tests.Performance.BunchOfWriteCalls method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.DynamicMethodCompilationTest.performanceSample">(Cheetah.Tests.Performance.DynamicMethodCompilationTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.DynamicSimpleCompilationTest.performanceSample">(Cheetah.Tests.Performance.DynamicSimpleCompilationTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.FilterTest.performanceSample">(Cheetah.Tests.Performance.FilterTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.LongCompileAndRun.performanceSample">(Cheetah.Tests.Performance.LongCompileAndRun method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.LongCompileTest.performanceSample">(Cheetah.Tests.Performance.LongCompileTest method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.PerformanceTest">PerformanceTest (class in Cheetah.Tests.Performance)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.perftest">perftest() (in module Cheetah.Tests.Performance)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Pinger.html#Cheetah.Tests.Pinger.Pinger.ping">ping() (Cheetah.Tests.Pinger.Pinger method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Pinger.html#Cheetah.Tests.Pinger.Pinger">Pinger (class in Cheetah.Tests.Pinger)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.Placeholder">Placeholder (class in Cheetah.Parser)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders">Placeholders (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls">Placeholders_Calls (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc">Placeholders_Esc (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals">Placeholders_Vals (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings">PlaceholderStrings (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.POP">POP (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.pop">pop() (Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.Popen4">Popen4 (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.pos">pos() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.TemplatePreprocessor.preprocess">preprocess() (Cheetah.Template.TemplatePreprocessor method)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.PreprocessError">PreprocessError</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.Preprocessors">Preprocessors (class in Cheetah.Tests.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.prev">prev() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.prev_batches">prev_batches() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.PrevNextPage">PrevNextPage (class in Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.prevPages">prevPages() (Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.SourceFileStats.printStats">printStats() (Cheetah.FileUtils.SourceFileStats method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.process">process() (Cheetah.Utils.Indenter.IndentProcessor method)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.FileFinder.processDir">processDir() (Cheetah.FileUtils.FileFinder method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP">PSP (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.PUSH">PUSH (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.push">push() (Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="R">R</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RaiseDirective">RaiseDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RawDirective">RawDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.RawOrEncodedUnicode">RawOrEncodedUnicode (in module Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.SourceFileStats.rawStats">rawStats() (Cheetah.FileUtils.SourceFileStats method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.read">read() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.readTo">readTo() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.readToEOL">readToEOL() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats">RecordStats (class in Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseExplicit">RecurseExplicit (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir">RecurseExplicitWIthOdir (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseImplicit">RecurseImplicit (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tools.RecursiveNull.html#Cheetah.Tools.RecursiveNull.RecursiveNull">RecursiveNull (class in Cheetah.Tools.RecursiveNull)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.refreshCache">refreshCache() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.RegistryImportDirector">RegistryImportDirector (class in Cheetah.ImportManager)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.ImportManager.reloadHook">reloadHook() (Cheetah.ImportManager.ImportManager method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Misc.html#Cheetah.Utils.Misc.removeFromList">removeFromList() (in module Cheetah.Utils.Misc)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah.render">render() (Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.html#Cheetah.Tools.turbocheetah.TurboCheetah.render">(Cheetah.Tools.turbocheetah.TurboCheetah method)</a>
-</li>
- <li><a href="api/Cheetah.Django.html#Cheetah.Django.render">(in module Cheetah.Django)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem.renderOutput">renderOutput() (Cheetah.CacheRegion.CacheItem method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RepeatDirective">RepeatDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.AbstractCacheStore.replace">replace() (Cheetah.CacheStore.AbstractCacheStore method)</a>
-
- <ul>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemcachedCacheStore.replace">(Cheetah.CacheStore.MemcachedCacheStore method)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemoryCacheStore.replace">(Cheetah.CacheStore.MemoryCacheStore method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.replaceRegexInFiles">replaceRegexInFiles() (in module Cheetah.FileUtils)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.replaceStrInFiles">replaceStrInFiles() (in module Cheetah.FileUtils)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.OutputTest.report">report (Cheetah.Tests.SyntaxAndOutput.OutputTest attribute)</a>
-</li>
- <li><a href="api/Cheetah.Parser.html#Cheetah.Parser.ParseError.report">report() (Cheetah.Parser.ParseError method)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.request">request (Cheetah.Servlet.Servlet attribute)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.Reserved_SearchList">Reserved_SearchList (Cheetah.Template.Template attribute)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.respond">respond() (Cheetah.Servlet.Servlet method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Templates.SkeletonPage.html#Cheetah.Templates.SkeletonPage.SkeletonPage.respond">(Cheetah.Templates.SkeletonPage.SkeletonPage method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyTransaction.response">response() (Cheetah.DummyTransaction.DummyTransaction method)</a>
-
- <ul>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.TransformerTransaction.response">(Cheetah.DummyTransaction.TransformerTransaction method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.FindAndReplace.results">results() (Cheetah.FileUtils.FindAndReplace method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ReturnDirective">ReturnDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.rev">rev() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.rfind">rfind() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.Roman">Roman() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.IndexFormats.roman">roman() (Cheetah.Tools.MondoReport.IndexFormats method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Roman">Roman() (in module Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.TemplateCmdLineIface.html#Cheetah.TemplateCmdLineIface.CmdLineIface.run">run() (Cheetah.TemplateCmdLineIface.CmdLineIface method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunner.run">(Cheetah.Tests.xmlrunner.XMLTestRunner method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.runAsMainProgram">runAsMainProgram() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.PerformanceTest.runTest">runTest() (Cheetah.Tests.Performance.PerformanceTest method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test.runTest">(Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.MultipleInheritanceSupport.runTest">(Cheetah.Tests.Template.MultipleInheritanceSupport method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.SubclassSearchListTest.runTest">(Cheetah.Tests.Template.SubclassSearchListTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.EncodeUnicodeCompatTest.runTest">(Cheetah.Tests.Unicode.EncodeUnicodeCompatTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test1.runTest">(Cheetah.Tests.Unicode.JBQ_UTF8_Test1 method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test2.runTest">(Cheetah.Tests.Unicode.JBQ_UTF8_Test2 method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test3.runTest">(Cheetah.Tests.Unicode.JBQ_UTF8_Test3 method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test4.runTest">(Cheetah.Tests.Unicode.JBQ_UTF8_Test4 method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test5.runTest">(Cheetah.Tests.Unicode.JBQ_UTF8_Test5 method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test6.runTest">(Cheetah.Tests.Unicode.JBQ_UTF8_Test6 method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test7.runTest">(Cheetah.Tests.Unicode.JBQ_UTF8_Test7 method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestProgram.runTests">runTests() (Cheetah.Tests.xmlrunner.XMLTestProgram method)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="S">S</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyResponse.safeConvert">safeConvert() (Cheetah.DummyTransaction.DummyResponse method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.PerformanceTest.save">save (Cheetah.Tests.Performance.PerformanceTest attribute)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.searchList">searchList() (Cheetah.Template.Template method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFS.searchList">(Cheetah.Tests.NameMapper.VFS method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Indenter.searchList">(Cheetah.Tests.SyntaxAndOutput.Indenter method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.OutputTest.searchList">(Cheetah.Tests.SyntaxAndOutput.OutputTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.searchList">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFS.searchListGenerator">searchListGenerator() (Cheetah.Tests.NameMapper.VFS method)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemcachedCacheStore.servers">servers (Cheetah.CacheStore.MemcachedCacheStore attribute)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.serverSidePath">serverSidePath() (Cheetah.Servlet.Servlet method)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet">Servlet (class in Cheetah.Servlet)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.session">session (Cheetah.Servlet.Servlet attribute)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.SET">SET (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.AbstractCacheStore.set">set() (Cheetah.CacheStore.AbstractCacheStore method)</a>
-
- <ul>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemcachedCacheStore.set">(Cheetah.CacheStore.MemcachedCacheStore method)</a>
-</li>
- <li><a href="api/Cheetah.CacheStore.html#Cheetah.CacheStore.MemoryCacheStore.set">(Cheetah.CacheStore.MemoryCacheStore method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.setBaseClass">setBaseClass() (Cheetah.Compiler.ClassCompiler method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.setBaseClass">(Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.setBookmark">setBookmark() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.setBreakPoint">setBreakPoint() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.ImportHooks.html#Cheetah.ImportHooks.setCacheDir">setCacheDir() (in module Cheetah.ImportHooks)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.setCallArg">setCallArg() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.setChar">setChar() (Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.setClassName">setClassName() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.setCompilerSetting">setCompilerSetting() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.setCompilerSettings">setCompilerSettings() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem.setData">setData() (Cheetah.CacheRegion.CacheItem method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective">SetDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.setErrorCatcher">setErrorCatcher() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.CacheRegion.html#Cheetah.CacheRegion.CacheItem.setExpiryTime">setExpiryTime() (Cheetah.CacheRegion.CacheItem method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.setFilter">setFilter() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.Indenter.setLevel">setLevel() (Cheetah.Utils.Indenter.Indenter method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.setMainMethodArgs">setMainMethodArgs() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.setMainMethodName">setMainMethodName() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.setMethodName">setMethodName() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.setMethodSignature">setMethodSignature() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.setModuleEncoding">setModuleEncoding() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.setPos">setPos() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.setSetting">setSetting() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.setShBang">setShBang() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.ImportManager.setThreaded">setThreaded() (Cheetah.ImportManager.ImportManager method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.setting">setting() (Cheetah.Compiler.ClassCompiler method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.setting">(Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.setting">(Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.settings">settings() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager">SettingsManager (class in Cheetah.SettingsManager)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Misc.html#Cheetah.Tests.Misc.SettingsManagerTests">SettingsManagerTests (class in Cheetah.Tests.Misc)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.setTransform">setTransform() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.setUp">setUp() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFF.setUp">(Cheetah.Tests.NameMapper.VFF method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFFSL.setUp">(Cheetah.Tests.NameMapper.VFFSL method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Parser.html#Cheetah.Tests.Parser.ArgListTest.setUp">(Cheetah.Tests.Parser.ArgListTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.FilterTest.setUp">(Cheetah.Tests.Performance.FilterTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.setUp">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.setUp">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.InlineSpanishTest.setUp">(Cheetah.Tests.Unicode.InlineSpanishTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.setUp">(Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- </ul></li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.NameMapper_pure.html#Cheetah.Tests.NameMapper_pure.setUpModule">setUpModule() (in module Cheetah.Tests.NameMapper_pure)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.shutdown">shutdown() (Cheetah.Servlet.Servlet method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.shutdown">(Cheetah.Template.Template method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SilentDirective">SilentDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Templates.SkeletonPage.html#Cheetah.Templates.SkeletonPage.SkeletonPage">SkeletonPage (class in Cheetah.Templates.SkeletonPage)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.sleep">sleep() (Cheetah.Servlet.Servlet method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SlurpDirective">SlurpDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Indenter.source">source (Cheetah.Tests.SyntaxAndOutput.Indenter attribute)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.SourceFileStats">SourceFileStats (class in Cheetah.FileUtils)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader">SourceReader (class in Cheetah.SourceReader)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.specialVars">specialVars() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.SplatTmpl">SplatTmpl (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories">SplatTmplWithSubdirectories (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.splitlines">splitlines() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.src">src() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.srcDir">srcDir (Cheetah.Tests.CheetahWrapper.CFBase attribute)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFIdirBase.srcDir">(Cheetah.Tests.CheetahWrapper.CFIdirBase attribute)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.srcFiles">srcFiles (Cheetah.Tests.CheetahWrapper.CFBase attribute)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFIdirBase.srcFiles">(Cheetah.Tests.CheetahWrapper.CFIdirBase attribute)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.standardDeviation">standardDeviation() (Cheetah.Tools.MondoReport.Summary method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.standardDeviation">(in module Cheetah.Tools.MondoReport)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.standardDeviation_n">standardDeviation_n() (Cheetah.Tools.MondoReport.Summary method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.standardDeviation_n">(in module Cheetah.Tools.MondoReport)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.startCacheRegion">startCacheRegion() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.startCallRegion">startCallRegion() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.startCaptureRegion">startCaptureRegion() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.startMethodDef">startMethodDef() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.startswith">startswith() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.StaticMethodSupport">StaticMethodSupport (class in Cheetah.Tests.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.StopDirective">StopDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.stringIsNumber">stringIsNumber() (in module Cheetah.SettingsManager)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.Strip">Strip (class in Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.StripSqueeze">StripSqueeze (class in Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.subclass">subclass() (Cheetah.Template.Template class method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.SubclassSearchListTest">SubclassSearchListTest (class in Cheetah.Tests.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.subdirs">subdirs (Cheetah.Tests.CheetahWrapper.CFBase attribute)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFIdirBase.subdirs">(Cheetah.Tests.CheetahWrapper.CFIdirBase attribute)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.sum">sum() (Cheetah.Tools.MondoReport.Summary method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.sum">(in module Cheetah.Tools.MondoReport)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary">Summary (class in Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.SourceFileStats.summary">summary() (Cheetah.FileUtils.SourceFileStats method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.MondoReport.summary">(Cheetah.Tools.MondoReport.MondoReport method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.RecordStats.summary">(Cheetah.Tools.MondoReport.RecordStats method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SuperDirective">SuperDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="T">T</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.T">T (in module Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.CFBase.tearDown">tearDown() (Cheetah.Tests.CheetahWrapper.CFBase method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.tearDown">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.tearDown">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper_pure.html#Cheetah.Tests.NameMapper_pure.tearDownModule">tearDownModule() (in module Cheetah.Tests.NameMapper_pure)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.FilterTest.template">template (Cheetah.Tests.Performance.FilterTest attribute)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template">Template (class in Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.NonNumericInputError">Template.NonNumericInputError</a>
-</li>
- <li><a href="api/Cheetah.ImportHooks.html#Cheetah.ImportHooks.CheetahDirOwner.templateFileExtensions">templateFileExtensions (Cheetah.ImportHooks.CheetahDirOwner attribute)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.TemplatePreprocessor">TemplatePreprocessor (class in Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.TemplateTest">TemplateTest (class in Cheetah.Tests.Template)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.test">test() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.test">(in module Cheetah.Filters)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test1">test1() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AssertDirective.test1">(Cheetah.Tests.SyntaxAndOutput.AssertDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test1">(Cheetah.Tests.SyntaxAndOutput.AttrDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.test1">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test1">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BreakDirective.test1">(Cheetah.Tests.SyntaxAndOutput.BreakDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test1">(Cheetah.Tests.SyntaxAndOutput.BreakpointDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CGI.test1">(Cheetah.Tests.SyntaxAndOutput.CGI method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test1">(Cheetah.Tests.SyntaxAndOutput.CacheDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test1">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CaptureDirective.test1">(Cheetah.Tests.SyntaxAndOutput.CaptureDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test1">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test1">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test1">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CompilerDirective.test1">(Cheetah.Tests.SyntaxAndOutput.CompilerDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test1">(Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ContinueDirective.test1">(Cheetah.Tests.SyntaxAndOutput.ContinueDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DecoratorDirective.test1">(Cheetah.Tests.SyntaxAndOutput.DecoratorDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test1">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefmacroDirective.test1">(Cheetah.Tests.SyntaxAndOutput.DefmacroDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test1">(Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EchoDirective.test1">(Cheetah.Tests.SyntaxAndOutput.EchoDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EmptyTemplate.test1">(Cheetah.Tests.SyntaxAndOutput.EmptyTemplate method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test1">(Cheetah.Tests.SyntaxAndOutput.EncodingDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test1">(Cheetah.Tests.SyntaxAndOutput.ExtendsDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test1">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test1">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.GetVar.test1">(Cheetah.Tests.SyntaxAndOutput.GetVar method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.I18nDirective.test1">(Cheetah.Tests.SyntaxAndOutput.I18nDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test1">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test1">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases.test1">(Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test1">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Indenter.test1">(Cheetah.Tests.SyntaxAndOutput.Indenter method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax.test1">(Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test1">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NonTokens.test1">(Cheetah.Tests.SyntaxAndOutput.NonTokens method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test1">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PassDirective.test1">(Cheetah.Tests.SyntaxAndOutput.PassDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test1">(Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test1">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test1">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test1">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test1">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test1">(Cheetah.Tests.SyntaxAndOutput.RaiseDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RawDirective.test1">(Cheetah.Tests.SyntaxAndOutput.RawDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test1">(Cheetah.Tests.SyntaxAndOutput.RepeatDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test1">(Cheetah.Tests.SyntaxAndOutput.ReturnDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test1">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test1">(Cheetah.Tests.SyntaxAndOutput.SlurpDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.StopDirective.test1">(Cheetah.Tests.SyntaxAndOutput.StopDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SuperDirective.test1">(Cheetah.Tests.SyntaxAndOutput.SuperDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.TryDirective.test1">(Cheetah.Tests.SyntaxAndOutput.TryDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnicodeDirective.test1">(Cheetah.Tests.SyntaxAndOutput.UnicodeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnicodeStrings.test1">(Cheetah.Tests.SyntaxAndOutput.UnicodeStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test1">(Cheetah.Tests.SyntaxAndOutput.UnlessDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.VarExists.test1">(Cheetah.Tests.SyntaxAndOutput.VarExists method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.WhileDirective.test1">(Cheetah.Tests.SyntaxAndOutput.WhileDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens.test1">(Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.YieldDirective.test1">(Cheetah.Tests.SyntaxAndOutput.YieldDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test10">test10() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test10">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test10">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test10">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test10">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test10">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test10">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test10">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test10">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test10">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test10">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test10">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test10">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test10">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test10">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test11">test11() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test11">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test11">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test11">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test11">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test11">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test11">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test11">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test11">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test11">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test11">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test11">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test11">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test11">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test12">test12() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test12">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test12">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test12">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test12">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test12">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test12">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test12">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test12">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test12">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test13">test13() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test13">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test13">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test13">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test13">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test13">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test13">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test13">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test13">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test14">test14() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test14">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test14">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test14">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test14">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test14">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test14">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test14">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test14">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test15">test15() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test15">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test15">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test15">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test15">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test15">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test15">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test15">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test15">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test16">test16() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test16">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test16">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test16">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test16">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test16">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test16">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test16">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test17">test17() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test17">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test17">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test17">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test17">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test17">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test17">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test18">test18() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test18">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test18">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test18">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test18">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test18">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test18">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test19">test19() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test19">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test19">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test19">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test19">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test19">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test2">test2() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AssertDirective.test2">(Cheetah.Tests.SyntaxAndOutput.AssertDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test2">(Cheetah.Tests.SyntaxAndOutput.AttrDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.test2">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test2">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BreakDirective.test2">(Cheetah.Tests.SyntaxAndOutput.BreakDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test2">(Cheetah.Tests.SyntaxAndOutput.BreakpointDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CGI.test2">(Cheetah.Tests.SyntaxAndOutput.CGI method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test2">(Cheetah.Tests.SyntaxAndOutput.CacheDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test2">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CaptureDirective.test2">(Cheetah.Tests.SyntaxAndOutput.CaptureDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test2">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test2">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test2">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CompilerDirective.test2">(Cheetah.Tests.SyntaxAndOutput.CompilerDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test2">(Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ContinueDirective.test2">(Cheetah.Tests.SyntaxAndOutput.ContinueDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DecoratorDirective.test2">(Cheetah.Tests.SyntaxAndOutput.DecoratorDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test2">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefmacroDirective.test2">(Cheetah.Tests.SyntaxAndOutput.DefmacroDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test2">(Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test2">(Cheetah.Tests.SyntaxAndOutput.EncodingDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test2">(Cheetah.Tests.SyntaxAndOutput.ExtendsDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test2">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test2">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.GetVar.test2">(Cheetah.Tests.SyntaxAndOutput.GetVar method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test2">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test2">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test2">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test2">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NonTokens.test2">(Cheetah.Tests.SyntaxAndOutput.NonTokens method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test2">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PassDirective.test2">(Cheetah.Tests.SyntaxAndOutput.PassDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test2">(Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test2">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test2">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test2">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test2">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test2">(Cheetah.Tests.SyntaxAndOutput.RaiseDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RawDirective.test2">(Cheetah.Tests.SyntaxAndOutput.RawDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test2">(Cheetah.Tests.SyntaxAndOutput.RepeatDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test2">(Cheetah.Tests.SyntaxAndOutput.ReturnDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test2">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test2">(Cheetah.Tests.SyntaxAndOutput.SlurpDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.StopDirective.test2">(Cheetah.Tests.SyntaxAndOutput.StopDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.TryDirective.test2">(Cheetah.Tests.SyntaxAndOutput.TryDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnicodeStrings.test2">(Cheetah.Tests.SyntaxAndOutput.UnicodeStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test2">(Cheetah.Tests.SyntaxAndOutput.UnlessDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.VarExists.test2">(Cheetah.Tests.SyntaxAndOutput.VarExists method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test20">test20() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test20">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test20">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test20">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test20">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test21">test21() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test21">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test21">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test21">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test22">test22() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test22">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test23">test23() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test23">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test24">test24() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test24">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test25">test25() (Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test26">test26() (Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test27">test27() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test28">test28() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test29">test29() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test3">test3() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AssertDirective.test3">(Cheetah.Tests.SyntaxAndOutput.AssertDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test3">(Cheetah.Tests.SyntaxAndOutput.AttrDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.test3">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test3">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BreakpointDirective.test3">(Cheetah.Tests.SyntaxAndOutput.BreakpointDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CGI.test3">(Cheetah.Tests.SyntaxAndOutput.CGI method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test3">(Cheetah.Tests.SyntaxAndOutput.CacheDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test3">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test3">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test3">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test3">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective.test3">(Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test3">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test3">(Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test3">(Cheetah.Tests.SyntaxAndOutput.EncodingDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test3">(Cheetah.Tests.SyntaxAndOutput.ExtendsDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test3">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test3">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.GetVar.test3">(Cheetah.Tests.SyntaxAndOutput.GetVar method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test3">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test3">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test3">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test3">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NonTokens.test3">(Cheetah.Tests.SyntaxAndOutput.NonTokens method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test3">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test3">(Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test3">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test3">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test3">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test3">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RaiseDirective.test3">(Cheetah.Tests.SyntaxAndOutput.RaiseDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RawDirective.test3">(Cheetah.Tests.SyntaxAndOutput.RawDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test3">(Cheetah.Tests.SyntaxAndOutput.RepeatDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ReturnDirective.test3">(Cheetah.Tests.SyntaxAndOutput.ReturnDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test3">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test3">(Cheetah.Tests.SyntaxAndOutput.SlurpDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.StopDirective.test3">(Cheetah.Tests.SyntaxAndOutput.StopDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.TryDirective.test3">(Cheetah.Tests.SyntaxAndOutput.TryDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test3">(Cheetah.Tests.SyntaxAndOutput.UnlessDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.VarExists.test3">(Cheetah.Tests.SyntaxAndOutput.VarExists method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test30">test30() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test31">test31() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test32">test32() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test33">test33() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test34">test34() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test35">test35() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test36">test36() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test37">test37() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test38">test38() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test39">test39() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test4">test4() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test4">(Cheetah.Tests.SyntaxAndOutput.AttrDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.test4">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test4">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CGI.test4">(Cheetah.Tests.SyntaxAndOutput.CGI method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test4">(Cheetah.Tests.SyntaxAndOutput.CacheDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test4">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test4">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test4">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test4">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test4">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test4">(Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test4">(Cheetah.Tests.SyntaxAndOutput.EncodingDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ExtendsDirective.test4">(Cheetah.Tests.SyntaxAndOutput.ExtendsDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test4">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test4">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.GetVar.test4">(Cheetah.Tests.SyntaxAndOutput.GetVar method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test4">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test4">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test4">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test4">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NonTokens.test4">(Cheetah.Tests.SyntaxAndOutput.NonTokens method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test4">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test4">(Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test4">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test4">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test4">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test4">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RawDirective.test4">(Cheetah.Tests.SyntaxAndOutput.RawDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test4">(Cheetah.Tests.SyntaxAndOutput.RepeatDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test4">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SilentDirective.test4">(Cheetah.Tests.SyntaxAndOutput.SilentDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test4">(Cheetah.Tests.SyntaxAndOutput.SlurpDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.StopDirective.test4">(Cheetah.Tests.SyntaxAndOutput.StopDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.TryDirective.test4">(Cheetah.Tests.SyntaxAndOutput.TryDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test4">(Cheetah.Tests.SyntaxAndOutput.UnlessDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.VarExists.test4">(Cheetah.Tests.SyntaxAndOutput.VarExists method)</a>
-</li>
- </ul></li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test40">test40() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test41">test41() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test42">test42() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test43">test43() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test44">test44() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test45">test45() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test46">test46() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test47">test47() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test48">test48() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test49">test49() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test5">test5() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.AttrDirective.test5">(Cheetah.Tests.SyntaxAndOutput.AttrDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.test5">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test5">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test5">(Cheetah.Tests.SyntaxAndOutput.CacheDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test5">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test5">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test5">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test5">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken.test5">(Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test5">(Cheetah.Tests.SyntaxAndOutput.EncodingDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test5">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test5">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.GetVar.test5">(Cheetah.Tests.SyntaxAndOutput.GetVar method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test5">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test5">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test5">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test5">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NonTokens.test5">(Cheetah.Tests.SyntaxAndOutput.NonTokens method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test5">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test5">(Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test5">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test5">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc.test5">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test5">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RawDirective.test5">(Cheetah.Tests.SyntaxAndOutput.RawDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test5">(Cheetah.Tests.SyntaxAndOutput.RepeatDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test5">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test5">(Cheetah.Tests.SyntaxAndOutput.SlurpDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.StopDirective.test5">(Cheetah.Tests.SyntaxAndOutput.StopDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.TryDirective.test5">(Cheetah.Tests.SyntaxAndOutput.TryDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test5">(Cheetah.Tests.SyntaxAndOutput.UnlessDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.VarExists.test5">(Cheetah.Tests.SyntaxAndOutput.VarExists method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test50">test50() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test51">test51() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test52">test52() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test53">test53() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test54">test54() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test55">test55() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test56">test56() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test57">test57() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test58">test58() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test59">test59() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test6">test6() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.test6">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test6">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CacheDirective.test6">(Cheetah.Tests.SyntaxAndOutput.CacheDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test6">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test6">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test6">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test6">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.EncodingDirective.test6">(Cheetah.Tests.SyntaxAndOutput.EncodingDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test6">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test6">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test6">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test6">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test6">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test6">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NonTokens.test6">(Cheetah.Tests.SyntaxAndOutput.NonTokens method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test6">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test6">(Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test6">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test6">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test6">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RawDirective.test6">(Cheetah.Tests.SyntaxAndOutput.RawDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.RepeatDirective.test6">(Cheetah.Tests.SyntaxAndOutput.RepeatDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test6">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnlessDirective.test6">(Cheetah.Tests.SyntaxAndOutput.UnlessDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test60">test60() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test61">test61() (Cheetah.Tests.NameMapper.VFN method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test7">test7() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.test7">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test7">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test7">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test7">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test7">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test7">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test7">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test7">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test7">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test7">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test7">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test7">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test7">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings.test7">(Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test7">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test7">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test7">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test7">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test8">test8() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Backslashes.test8">(Cheetah.Tests.SyntaxAndOutput.Backslashes method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test8">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test8">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test8">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test8">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test8">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test8">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test8">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test8">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test8">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test8">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test8">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test8">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test8">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test8">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test8">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test8">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test9">test9() (Cheetah.Tests.NameMapper.VFN method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test9">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.CallDirective.test9">(Cheetah.Tests.SyntaxAndOutput.CallDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test9">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test9">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test9">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.FilterDirective.test9">(Cheetah.Tests.SyntaxAndOutput.FilterDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ForDirective.test9">(Cheetah.Tests.SyntaxAndOutput.ForDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IfDirective.test9">(Cheetah.Tests.SyntaxAndOutput.IfDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.ImportDirective.test9">(Cheetah.Tests.SyntaxAndOutput.ImportDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.test9">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test9">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.PSP.test9">(Cheetah.Tests.SyntaxAndOutput.PSP method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test9">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test9">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals.test9">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test9">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.InlineImportTest.test_AutoImporting">test_AutoImporting() (Cheetah.Tests.Regressions.InlineImportTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_baseclassArg">test_baseclassArg() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_BasicASCII">test_BasicASCII() (Cheetah.Tests.Unicode.Unicode_in_SearchList_Test method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethodSupport.test_BasicDecorator">test_BasicDecorator() (Cheetah.Tests.Template.ClassMethodSupport method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.StaticMethodSupport.test_BasicDecorator">(Cheetah.Tests.Template.StaticMethodSupport method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.DynamicTemplatePerformanceTest.test_BasicDynamic">test_BasicDynamic() (Cheetah.Tests.Performance.DynamicTemplatePerformanceTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Filters.html#Cheetah.Tests.Filters.BasicMarkdownFilterTest.test_BasicHeader">test_BasicHeader() (Cheetah.Tests.Filters.BasicMarkdownFilterTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_basicUsage">test_basicUsage() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_subclass.test_basicUsage">(Cheetah.Tests.Template.ClassMethods_subclass method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.Preprocessors.test_basicUsage1">test_basicUsage1() (Cheetah.Tests.Template.Preprocessors method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_classNameArg">test_classNameArg() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_compilationCache">test_compilationCache() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Analyzer.html#Cheetah.Tests.Analyzer.AnalyzerTests.test_compilersettings">test_compilersettings() (Cheetah.Tests.Analyzer.AnalyzerTests method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.Preprocessors.test_complexUsage">test_complexUsage() (Cheetah.Tests.Template.Preprocessors method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test.test_DefinedFilter">test_DefinedFilter() (Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_error">test_error() (Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.TryExceptImportTest.test_FailCase">test_FailCase() (Cheetah.Tests.Template.TryExceptImportTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test.test_FailingBehavior">test_FailingBehavior() (Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test.test_FailingBehaviorWithSetting">test_FailingBehaviorWithSetting() (Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.InlineSpanishTest.test_failure">test_failure() (Cheetah.Tests.Unicode.InlineSpanishTest method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_failure">(Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.InlineImportTest.test_FromFooImportThing">test_FromFooImportThing() (Cheetah.Tests.Regressions.InlineImportTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Filters.html#Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest.test_Html">test_Html() (Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.Preprocessors.test_i18n">test_i18n() (Cheetah.Tests.Template.Preprocessors method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.InlineImportTest.test_ImportFailModule">test_ImportFailModule() (Cheetah.Tests.Regressions.InlineImportTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Cheps.html#Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_InlineImport">test_InlineImport() (Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.MapBuiltins.test_int">test_int() (Cheetah.Tests.NameMapper.MapBuiltins method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_keepRefToGeneratedCodeArg">test_keepRefToGeneratedCodeArg() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Cheps.html#Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_LegacyMode">test_LegacyMode() (Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_mainMethodNameArg">test_mainMethodNameArg() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Parser.html#Cheetah.Tests.Parser.ArgListTest.test_merge1">test_merge1() (Cheetah.Tests.Parser.ArgListTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Parser.html#Cheetah.Tests.Parser.ArgListTest.test_merge2">test_merge2() (Cheetah.Tests.Parser.ArgListTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Parser.html#Cheetah.Tests.Parser.ArgListTest.test_merge3">test_merge3() (Cheetah.Tests.Parser.ArgListTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Misc.html#Cheetah.Tests.Misc.SettingsManagerTests.test_mergeDictionaries">test_mergeDictionaries() (Cheetah.Tests.Misc.SettingsManagerTests method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_moduleFileCaching">test_moduleFileCaching() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_moduleGlobalsArg">test_moduleGlobalsArg() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Cheps.html#Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior.test_ModuleLevelImport">test_ModuleLevelImport() (Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.ClassMethods_compile.test_moduleNameArg">test_moduleNameArg() (Cheetah.Tests.Template.ClassMethods_compile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_no_tests">test_no_tests() (Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test.test_NoneFilter">test_NoneFilter() (Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.tests.test_template.html#Cheetah.Tools.turbocheetah.tests.test_template.test_normal">test_normal() (in module Cheetah.Tools.turbocheetah.tests.test_template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.Preprocessors.test_normalizePreprocessorArgVariants">test_normalizePreprocessorArgVariants() (Cheetah.Tests.Template.Preprocessors method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.GetAttrTest.test_NotFoundException">test_NotFoundException() (Cheetah.Tests.Regressions.GetAttrTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.tests.test_template.html#Cheetah.Tools.turbocheetah.tests.test_template.test_path">test_path() (in module Cheetah.Tools.turbocheetah.tests.test_template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.InlineImportTest.test_ProperImportOfBadModule">test_ProperImportOfBadModule() (Cheetah.Tests.Regressions.InlineImportTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Filters.html#Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest.test_Python">test_Python() (Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.tests.test_template.html#Cheetah.Tools.turbocheetah.tests.test_template.test_search">test_search() (in module Cheetah.Tools.turbocheetah.tests.test_template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Analyzer.html#Cheetah.Tests.Analyzer.AnalyzerTests.test_set">test_set() (Cheetah.Tests.Analyzer.AnalyzerTests method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_stderr_capture">test_stderr_capture() (Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_stdout_capture">test_stdout_capture() (Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.tests.test_template.html#Cheetah.Tools.turbocheetah.tests.test_template.test_string">test_string() (in module Cheetah.Tools.turbocheetah.tests.test_template)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.InlineImportTest.test_StuffBeforeImport_Legacy">test_StuffBeforeImport_Legacy() (Cheetah.Tests.Regressions.InlineImportTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.InlineSpanishTest.test_success">test_success() (Cheetah.Tests.Unicode.InlineSpanishTest method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_success">(Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_Thai">test_Thai() (Cheetah.Tests.Unicode.Unicode_in_SearchList_Test method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.Unicode_in_SearchList_Test.test_Thai_utf8">test_Thai_utf8() (Cheetah.Tests.Unicode.Unicode_in_SearchList_Test method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_unittests_changing_stderr">test_unittests_changing_stderr() (Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.test_unittests_changing_stdout">test_unittests_changing_stdout() (Cheetah.Tests.xmlrunner.XMLTestRunnerTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.GetAttrTest.test_ValidException">test_ValidException() (Cheetah.Tests.Regressions.GetAttrTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper_pure.html#Cheetah.Tests.NameMapper_pure.NameMapperTest.test_valueForName">test_valueForName() (Cheetah.Tests.NameMapper_pure.NameMapperTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFF.test_VFF_1">test_VFF_1() (Cheetah.Tests.NameMapper.VFF method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.Flat.testCompile">testCompile() (Cheetah.Tests.CheetahWrapper.Flat method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testCompile">(Cheetah.Tests.CheetahWrapper.FlatRecurseCollision method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testCompile">(Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testCompile">(Cheetah.Tests.CheetahWrapper.IdirOdirRecurse method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirRecurse.testCompile">(Cheetah.Tests.CheetahWrapper.IdirRecurse method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.NoBackup.testCompile">(Cheetah.Tests.CheetahWrapper.NoBackup method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFile.testCompile">(Cheetah.Tests.CheetahWrapper.OneFile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testCompile">(Cheetah.Tests.CheetahWrapper.OneFileNoExtension method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testCompile">(Cheetah.Tests.CheetahWrapper.OneFileWithOdir method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseExplicit.testCompile">(Cheetah.Tests.CheetahWrapper.RecurseExplicit method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testCompile">(Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseImplicit.testCompile">(Cheetah.Tests.CheetahWrapper.RecurseImplicit method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.SplatTmpl.testCompile">(Cheetah.Tests.CheetahWrapper.SplatTmpl method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testCompile">(Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testCompile">(Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testCompile">(Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testCompile">(Cheetah.Tests.CheetahWrapper.VarietyWithOdir method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.testdecorator">testdecorator() (in module Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test8.testDynamicCompile">testDynamicCompile() (Cheetah.Tests.Unicode.JBQ_UTF8_Test8 method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.Flat.testFill">testFill() (Cheetah.Tests.CheetahWrapper.Flat method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testFill">(Cheetah.Tests.CheetahWrapper.FlatRecurseCollision method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testFill">(Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testFill">(Cheetah.Tests.CheetahWrapper.IdirOdirRecurse method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirRecurse.testFill">(Cheetah.Tests.CheetahWrapper.IdirRecurse method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.NoBackup.testFill">(Cheetah.Tests.CheetahWrapper.NoBackup method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFile.testFill">(Cheetah.Tests.CheetahWrapper.OneFile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testFill">(Cheetah.Tests.CheetahWrapper.OneFileNoExtension method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testFill">(Cheetah.Tests.CheetahWrapper.OneFileWithOdir method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseExplicit.testFill">(Cheetah.Tests.CheetahWrapper.RecurseExplicit method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testFill">(Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseImplicit.testFill">(Cheetah.Tests.CheetahWrapper.RecurseImplicit method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.SplatTmpl.testFill">(Cheetah.Tests.CheetahWrapper.SplatTmpl method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testFill">(Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testFill">(Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testFill">(Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testFill">(Cheetah.Tests.CheetahWrapper.VarietyWithOdir method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.JBQ_UTF8_Test8.testStaticCompile">testStaticCompile() (Cheetah.Tests.Unicode.JBQ_UTF8_Test8 method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.Flat.testText">testText() (Cheetah.Tests.CheetahWrapper.Flat method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.FlatRecurseCollision.testText">(Cheetah.Tests.CheetahWrapper.FlatRecurseCollision method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision.testText">(Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirOdirRecurse.testText">(Cheetah.Tests.CheetahWrapper.IdirOdirRecurse method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.IdirRecurse.testText">(Cheetah.Tests.CheetahWrapper.IdirRecurse method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.NoBackup.testText">(Cheetah.Tests.CheetahWrapper.NoBackup method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFile.testText">(Cheetah.Tests.CheetahWrapper.OneFile method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFileNoExtension.testText">(Cheetah.Tests.CheetahWrapper.OneFileNoExtension method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.OneFileWithOdir.testText">(Cheetah.Tests.CheetahWrapper.OneFileWithOdir method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseExplicit.testText">(Cheetah.Tests.CheetahWrapper.RecurseExplicit method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir.testText">(Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.RecurseImplicit.testText">(Cheetah.Tests.CheetahWrapper.RecurseImplicit method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.SplatTmpl.testText">(Cheetah.Tests.CheetahWrapper.SplatTmpl method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories.testText">(Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories.testText">(Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension.testText">(Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.VarietyWithOdir.testText">(Cheetah.Tests.CheetahWrapper.VarietyWithOdir method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories">ThreeFilesWithSubdirectories (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension">ThreeFilesWithSubdirectoriesNoExtension (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.timestamp">timestamp() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.total">total() (Cheetah.Tools.MondoReport.Summary method)</a>
-</li>
- <li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.transaction">transaction (Cheetah.Servlet.Servlet attribute)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.TransformerResponse">TransformerResponse (class in Cheetah.DummyTransaction)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.TransformerTransaction">TransformerTransaction (class in Cheetah.DummyTransaction)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.TryDirective">TryDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Template.html#Cheetah.Tests.Template.TryExceptImportTest">TryExceptImportTest (class in Cheetah.Tests.Template)</a>
-</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.html#Cheetah.Tools.turbocheetah.TurboCheetah">TurboCheetah (class in Cheetah.Tools.turbocheetah)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah">(class in Cheetah.Tools.turbocheetah.cheetahsupport)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.turnErrorCatcherOff">turnErrorCatcherOff() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.turnErrorCatcherOn">turnErrorCatcherOn() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="U">U</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.ungetc">ungetc() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.Unicode.html#Cheetah.Tests.Unicode.Unicode_in_SearchList_Test">Unicode_in_SearchList_Test (class in Cheetah.Tests.Unicode)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnicodeDirective">UnicodeDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnicodeStrings">UnicodeStrings (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.ImportHooks.html#Cheetah.ImportHooks.uninstall">uninstall() (in module Cheetah.ImportHooks)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.UnlessDirective">UnlessDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Unspecified">Unspecified (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.updateLinecache">updateLinecache() (in module Cheetah.Template)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.updateSettings">updateSettings() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.updateSettingsFromConfigFileObj">updateSettingsFromConfigFileObj() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.updateSettingsFromConfigStr">updateSettingsFromConfigStr() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.SettingsManager.html#Cheetah.SettingsManager.SettingsManager.updateSettingsFromPySrcStr">updateSettingsFromPySrcStr() (Cheetah.SettingsManager.SettingsManager method)</a>
-</li>
- <li><a href="api/Cheetah.TemplateCmdLineIface.html#Cheetah.TemplateCmdLineIface.CmdLineIface.usage">usage() (Cheetah.TemplateCmdLineIface.CmdLineIface method)</a>
-
- <ul>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.usage">(in module Cheetah.CheetahWrapper)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Utils.Misc.html#Cheetah.Utils.Misc.useOrRaise">useOrRaise() (in module Cheetah.Utils.Misc)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="V">V</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.SourceReader.html#Cheetah.SourceReader.SourceReader.validPos">validPos() (Cheetah.SourceReader.SourceReader method)</a>
-</li>
- <li><a href="api/Cheetah.NameMapper.html#Cheetah.NameMapper.valueForKey">valueForKey() (in module Cheetah.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.NameMapper.html#Cheetah.NameMapper.valueForName">valueForName() (in module Cheetah.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.NameMapper.html#Cheetah.NameMapper.valueFromFrame">valueFromFrame() (in module Cheetah.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.NameMapper.html#Cheetah.NameMapper.valueFromFrameOrSearchList">valueFromFrameOrSearchList() (in module Cheetah.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.NameMapper.html#Cheetah.NameMapper.valueFromSearchList">valueFromSearchList() (in module Cheetah.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.ValuesGetterMixin">ValuesGetterMixin (class in Cheetah.Tools.MondoReport)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.VarExists">VarExists (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.varExists">varExists() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.variance">variance() (Cheetah.Tools.MondoReport.Summary method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.variance">(in module Cheetah.Tools.MondoReport)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.Summary.variance_n">variance_n() (Cheetah.Tools.MondoReport.Summary method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tools.MondoReport.html#Cheetah.Tools.MondoReport.variance_n">(in module Cheetah.Tools.MondoReport)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.VarietyWithOdir">VarietyWithOdir (class in Cheetah.Tests.CheetahWrapper)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.OutputTest.verify">verify() (Cheetah.Tests.SyntaxAndOutput.OutputTest method)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.version">version() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFF">VFF (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFFSL">VFFSL (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFFSL.VFFSL">VFFSL() (Cheetah.Tests.NameMapper.VFFSL method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFFSL_2">VFFSL_2 (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFFSL_3">VFFSL_3 (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFFSL_4">VFFSL_4 (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN">VFN (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest.VFN">VFN() (Cheetah.Tests.NameMapper.NameMapperTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFS">VFS (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest.VFS">VFS() (Cheetah.Tests.NameMapper.NameMapperTest method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFS_2namespaces">VFS_2namespaces (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFS_3namespaces">VFS_3namespaces (class in Cheetah.Tests.NameMapper)</a>
-</li>
- <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFS_4namespaces">VFS_4namespaces (class in Cheetah.Tests.NameMapper)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="W">W</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.FileUtils.html#Cheetah.FileUtils.FileFinder.walkDirTree">walkDirTree() (Cheetah.FileUtils.FileFinder method)</a>
-</li>
- <li><a href="api/Cheetah.CheetahWrapper.html#Cheetah.CheetahWrapper.CheetahWrapper.warn">warn() (Cheetah.CheetahWrapper.CheetahWrapper method)</a>
-
- <ul>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.BigEcho.warn">(Cheetah.ErrorCatchers.BigEcho method)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.ErrorCatcher.warn">(Cheetah.ErrorCatchers.ErrorCatcher method)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.KeyError.warn">(Cheetah.ErrorCatchers.KeyError method)</a>
-</li>
- <li><a href="api/Cheetah.ErrorCatchers.html#Cheetah.ErrorCatchers.ListErrors.warn">(Cheetah.ErrorCatchers.ListErrors method)</a>
-</li>
- <li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.warn">(in module Cheetah.Tests.CheetahWrapper)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Template.html#Cheetah.Template.Template.webInput">webInput() (Cheetah.Template.Template method)</a>
-</li>
- <li><a href="api/Cheetah.Filters.html#Cheetah.Filters.WebSafe">WebSafe (class in Cheetah.Filters)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.WhileDirective">WhileDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens">WhitespaceAfterDirectiveTokens (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.WHITESPACES">WHITESPACES (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ClassCompiler.wrapClassDef">wrapClassDef() (Cheetah.Compiler.ClassCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.MethodCompiler.wrapCode">wrapCode() (Cheetah.Compiler.MethodCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.Compiler.html#Cheetah.Compiler.ModuleCompiler.wrapModuleDef">wrapModuleDef() (Cheetah.Compiler.ModuleCompiler method)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyResponse.write">write() (Cheetah.DummyTransaction.DummyResponse method)</a>
-
- <ul>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream.write">(Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream method)</a>
-</li>
- </ul></li>
- <li><a href="api/Cheetah.Templates.SkeletonPage.html#Cheetah.Templates.SkeletonPage.SkeletonPage.writeBody">writeBody() (Cheetah.Templates.SkeletonPage.SkeletonPage method)</a>
-</li>
- <li><a href="api/Cheetah.Templates.SkeletonPage.html#Cheetah.Templates.SkeletonPage.SkeletonPage.writeHeadTag">writeHeadTag() (Cheetah.Templates.SkeletonPage.SkeletonPage method)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyResponse.writelines">writelines() (Cheetah.DummyTransaction.DummyResponse method)</a>
-</li>
- <li><a href="api/Cheetah.DummyTransaction.html#Cheetah.DummyTransaction.DummyResponse.writeln">writeln() (Cheetah.DummyTransaction.DummyResponse method)</a>
-</li>
- <li><a href="api/Cheetah.Utils.Indenter.html#Cheetah.Utils.Indenter.IndentProcessor.WS">WS (Cheetah.Utils.Indenter.IndentProcessor attribute)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="X">X</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestProgram">XMLTestProgram (class in Cheetah.Tests.xmlrunner)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunner">XMLTestRunner (class in Cheetah.Tests.xmlrunner)</a>
-</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest">XMLTestRunnerTest (class in Cheetah.Tests.xmlrunner)</a>
-</li>
- <li><a href="api/Cheetah.Tests.xmlrunner.html#Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream">XMLTestRunnerTest.NullStream (class in Cheetah.Tests.xmlrunner)</a>
-</li>
- </ul></td>
-</tr></table>
-
-<h2 id="Y">Y</h2>
-<table style="width: 100%" class="indextable genindextable"><tr>
- <td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.YieldDirective">YieldDirective (class in Cheetah.Tests.SyntaxAndOutput)</a>
-</li>
- </ul></td>
-</tr></table>
-
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="#" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/index.html b/docs/html/index.html
deleted file mode 100644
index b475d4e..0000000
--- a/docs/html/index.html
+++ /dev/null
@@ -1,246 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah3, the Python-Powered Template Engine &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Authors and contributors" href="authors.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="authors.html" title="Authors and contributors"
- accesskey="N">next</a> |</li>
- <li class="nav-item nav-item-0"><a href="#">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="#">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah3, the Python-Powered Template Engine</a><ul>
-<li><a class="reference internal" href="#introduction">Introduction</a><ul>
-<li><a class="reference internal" href="#talk-cheetah">Talk Cheetah</a></li>
-<li><a class="reference internal" href="#contents">Contents</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#cheetah-in-a-nutshell">Cheetah in a nutshell</a></li>
-<li><a class="reference internal" href="#why-cheetah">Why Cheetah?</a></li>
-<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Next topic</h4>
- <p class="topless"><a href="authors.html"
- title="next chapter">Authors and contributors</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/index.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah3-the-python-powered-template-engine">
-<h1>Cheetah3, the Python-Powered Template Engine<a class="headerlink" href="#cheetah3-the-python-powered-template-engine" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="introduction">
-<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah3 is a free (BSD-style) and <a class="reference external" href="https://github.com/CheetahTemplate3/cheetah3">open source</a> template engine and
-code-generation tool written in <a class="reference external" href="http://python.org">Python</a>. Cheetah can be
-used unto itself, or incorporated with other technologies and stacks regardless
-of whether they’re written in Python or not.</p>
-<p>At its core, Cheetah is a domain-specific language for markup generation and
-templating which allows for full integration with existing Python code but also
-offers extensions to traditional Python syntax to allow for easier text-generation.</p>
-<p>It’s a fork of the <a class="reference external" href="https://github.com/cheetahtemplate/cheetah">original</a>
-CheetahTemplate library.</p>
-<div class="section" id="talk-cheetah">
-<h3>Talk Cheetah<a class="headerlink" href="#talk-cheetah" title="Permalink to this headline">¶</a></h3>
-<p>You can get involved and talk with Cheetah developers on the <a class="reference external" href="https://github.com/CheetahTemplate3/cheetah3/issues">Cheetah3 issue
-tracker</a>.</p>
-</div>
-<div class="section" id="contents">
-<h3>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h3>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="authors.html">Authors and contributors</a></li>
-<li class="toctree-l1"><a class="reference internal" href="news.html">News</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="news.html#development-master">Development (master)</a></li>
-<li class="toctree-l2"><a class="reference internal" href="news.html#id1">3.1.0 (2018-03-03)</a></li>
-<li class="toctree-l2"><a class="reference internal" href="news.html#id2">3.0.1 (2018-02-27)</a></li>
-<li class="toctree-l2"><a class="reference internal" href="news.html#id3">3.0.0 (2017-05-07)</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="developers.html">Contributing to Cheetah</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="developers.html#getting-the-code">Getting the Code</a></li>
-<li class="toctree-l2"><a class="reference internal" href="developers.html#development-process">Development Process</a></li>
-<li class="toctree-l2"><a class="reference internal" href="developers.html#filing-bugs">Filing Bugs</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="download.html">Downloading Cheetah</a></li>
-<li class="toctree-l1"><a class="reference internal" href="users_guide/index.html">Cheetah User’s Guide</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/intro.html">Introduction</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/glossary.html">Vocabulary</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/gettingStarted.html">Getting Started</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/language.html">Language Overview</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/comments.html">Comments</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/output.html">Generating, Caching and Filtering Output</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/inheritanceEtc.html">Import, Inheritance, Declaration and Assignment</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/flowControl.html">Flow Control</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/errorHandling.html">Error Handling</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/parserInstructions.html">Instructions to the Parser/Compiler</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/tipsAndTricks.html">Tips, Tricks and Troubleshooting</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/webware.html">Using Cheetah with Webware</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/otherHtml.html">non-Webware HTML output</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/nonHtml.html">Non-HTML Output</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/libraries.html">Batteries included: templates and other libraries</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/editors.html">Visual Editors</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/links.html">Useful Web Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/examples.html">Examples</a></li>
-<li class="toctree-l2"><a class="reference internal" href="users_guide/comparisons.html">Cheetah vs. Other Template Engines</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="documentation.html">Cheetah Recipes</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="recipes/inheritance.html">Basic Inheritance</a></li>
-<li class="toctree-l2"><a class="reference internal" href="recipes/precompiled.html">Precompiled Templates</a></li>
-<li class="toctree-l2"><a class="reference internal" href="recipes/staticmethod.html">&#64;staticmethod and &#64;classmethod</a></li>
-<li class="toctree-l2"><a class="reference internal" href="recipes/writing_a_recipe.html">Writing a “Recipe”</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="roadmap.html">Cheetah Roadmap</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="roadmap.html#cheetah-v3-0">Cheetah v3.0</a></li>
-<li class="toctree-l2"><a class="reference internal" href="roadmap.html#cheetah-v2">Cheetah v2</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="dev_guide/index.html">Cheetah Developer’s Guide</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="dev_guide/index.html#overview">Overview</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="chep.html">Cheetah Enhancement Proposals</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="chep.html#existing-cheps">Existing CHEPs</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="section" id="cheetah-in-a-nutshell">
-<h2>Cheetah in a nutshell<a class="headerlink" href="#cheetah-in-a-nutshell" title="Permalink to this headline">¶</a></h2>
-<p>Below is a simple example of some Cheetah code, as you can see it’s practically
-Python. You can import, inherit and define methods just like in a regular Python
-module, since that’s what your Cheetah templates are compiled to :)</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#from Cheetah.Template import Template
-#extends Template
-
-#set $people = [{&#39;name&#39; : &#39;Tom&#39;, &#39;mood&#39; : &#39;Happy&#39;}, {&#39;name&#39; : &#39;Dick&#39;,
- &#39;mood&#39; : &#39;Sad&#39;}, {&#39;name&#39; : &#39;Harry&#39;, &#39;mood&#39; : &#39;Hairy&#39;}]
-
-&lt;strong&gt;How are you feeling?&lt;/strong&gt;
-&lt;ul&gt;
- #for $person in $people
- &lt;li&gt;
- $person[&#39;name&#39;] is $person[&#39;mood&#39;]
- &lt;/li&gt;
- #end for
-&lt;/ul&gt;
-</pre></div>
-</div>
-</div>
-<div class="section" id="why-cheetah">
-<h2>Why Cheetah?<a class="headerlink" href="#why-cheetah" title="Permalink to this headline">¶</a></h2>
-<ul class="simple">
-<li>Cheetah is supported by every major Python web framework.</li>
-<li>It is fully documented and is supported by an active user community.</li>
-<li>It can output/generate any text-based format.</li>
-<li>Cheetah compiles templates into optimized, yet readable, Python code.</li>
-<li>It blends the power and flexibility of Python with a simple template language that non-programmers can understand.</li>
-<li>It gives template authors full access to any Python data structure, module, function, object, or method in their templates. Meanwhile, it provides a way for administrators to selectively restrict access to Python when needed.</li>
-<li>Cheetah makes code reuse easy by providing an object-oriented interface to templates that is accessible from Python code or other Cheetah templates. One template can subclass another and selectively reimplement sections of it. Cheetah templates can be subclasses of any Python class and vice-versa.</li>
-<li>It provides a simple, yet powerful, caching mechanism that can dramatically improve the performance of a dynamic website.</li>
-<li>It encourages clean separation of content, graphic design, and program code. This leads to highly modular, flexible, and reusable site architectures, shorter development time, and HTML and program code that is easier to understand and maintain. It is particularly well suited for team efforts.</li>
-<li>Cheetah can be used to generate static html via its command-line tool.</li>
-</ul>
-</div>
-<div class="section" id="indices-and-tables">
-<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2>
-<ul class="simple">
-<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
-<li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li>
-<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
-</ul>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="authors.html" title="Authors and contributors"
- >next</a> |</li>
- <li class="nav-item nav-item-0"><a href="#">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/news.html b/docs/html/news.html
deleted file mode 100644
index 1ea6032..0000000
--- a/docs/html/news.html
+++ /dev/null
@@ -1,203 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>News &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Contributing to Cheetah" href="developers.html" />
- <link rel="prev" title="Authors and contributors" href="authors.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="developers.html" title="Contributing to Cheetah"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="authors.html" title="Authors and contributors"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">News</a><ul>
-<li><a class="reference internal" href="#development-master">Development (master)</a></li>
-<li><a class="reference internal" href="#id1">3.1.0 (2018-03-03)</a></li>
-<li><a class="reference internal" href="#id2">3.0.1 (2018-02-27)</a></li>
-<li><a class="reference internal" href="#id3">3.0.0 (2017-05-07)</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="authors.html"
- title="previous chapter">Authors and contributors</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="developers.html"
- title="next chapter">Contributing to Cheetah</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/news.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="news">
-<h1>News<a class="headerlink" href="#news" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="development-master">
-<h2>Development (master)<a class="headerlink" href="#development-master" title="Permalink to this headline">¶</a></h2>
-</div>
-<div class="section" id="id1">
-<h2>3.1.0 (2018-03-03)<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h2>
-<p>Features:</p>
-<blockquote>
-<div><ul class="simple">
-<li>Fix Cheetah to work with PyPy. Pull request by Mathias Stearn.</li>
-</ul>
-</div></blockquote>
-<p>Minor features:</p>
-<blockquote>
-<div><ul class="simple">
-<li>Code cleanup: fix code style to satisfy flake8 linter.</li>
-</ul>
-</div></blockquote>
-<p>Documentation:</p>
-<blockquote>
-<div><ul class="simple">
-<li>Rename www directory to docs.</li>
-</ul>
-</div></blockquote>
-<p>Tests:</p>
-<blockquote>
-<div><ul class="simple">
-<li>Run pypy tests at AppVeyor.</li>
-<li>Use remove-old-files.py from ppu to cleanup pip cache
-at Travis and AppVeyor.</li>
-</ul>
-</div></blockquote>
-</div>
-<div class="section" id="id2">
-<h2>3.0.1 (2018-02-27)<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
-<p>Bug fixes:</p>
-<blockquote>
-<div><ul class="simple">
-<li>Fix a minor bug in Compiler.</li>
-</ul>
-</div></blockquote>
-</div>
-<div class="section" id="id3">
-<h2>3.0.0 (2017-05-07)<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
-<p>Major features:</p>
-<blockquote>
-<div><ul class="simple">
-<li>!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!</li>
-<li>Stop supporting Python older than 2.7.</li>
-<li>Update code to work with Python 3.3+. Tested with 3.3, 3.4, 3.5 and 3.6.</li>
-</ul>
-</div></blockquote>
-<p>Minor features:</p>
-<blockquote>
-<div><ul class="simple">
-<li>Use ‘/usr/bin/env python’ for scripts;
-this allows eggs/wheels to be installed into virtual environments.</li>
-</ul>
-</div></blockquote>
-<p>Bug fixes:</p>
-<blockquote>
-<div><ul class="simple">
-<li>Fix a bug in multiple inheritance (#extend Parent1, Parent2).
-Pull request by Jonathan Ross Rogers.</li>
-<li>Fix bugs in pure-python NameMapper.py. Bugs reported by Noah Ingham,
-patches by Adam Karpierz, tests by Oleg Broytman.</li>
-</ul>
-</div></blockquote>
-<p>Tests:</p>
-<blockquote>
-<div><ul class="simple">
-<li>Run tests at Travis (Linux) and AppVeyor (w32) with Python 2.7, 3.3, 3.4,
-3.5 and 3.6; x86 and x64.</li>
-<li>Fix a problem in Unicode tests - cleanup temporary files.</li>
-</ul>
-</div></blockquote>
-<p><a class="reference external" href="news2.html">Older news</a></p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="developers.html" title="Contributing to Cheetah"
- >next</a> |</li>
- <li class="right" >
- <a href="authors.html" title="Authors and contributors"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/news2.html b/docs/html/news2.html
deleted file mode 100644
index 1a570c9..0000000
--- a/docs/html/news2.html
+++ /dev/null
@@ -1,2150 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>&lt;no title&gt; &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/news2.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <dl class="docutils">
-<dt>2.4.2 (February 8th, 2010)</dt>
-<dd><ul class="first last simple">
-<li>Fix issue where subclasses of Template failed to pick up attributes in the
-searchlist</li>
-<li>Remove old/outdated bundled memcached python client</li>
-<li>Allow for #encoding directives to exist after a comment (i.e. not the first
-line in a module)</li>
-<li>Remove support for WebWare servlets (which caused significant performance
-slowdowns on Mac OS X)</li>
-<li>Old/stale code pruned in preparation for Python 3 support</li>
-</ul>
-</dd>
-<dt>2.4.1 (December 19th, 2009)</dt>
-<dd><ul class="first last simple">
-<li>–quiet flag added to <cite>cheetah</cite> to silence printing to stdout (abbeyj)</li>
-<li>Refactoring to minimize the amount of forked code for Python3 (rtyler)</li>
-<li>Template.compile() will no longer create class names with numerous leading
-underscores (rtyler; reported by Kirill Uhanov)</li>
-<li>DirectiveAnalyzer (cheetah-analyze script) added to report directive usage in templates (rtyler)</li>
-<li>Older LaTeX docs converted to rst for Sphinx (rtyler)</li>
-<li>Prevent #raw blocks from evaluating $-placeholders and escaped strings (karmix0)</li>
-<li>New tests added to verify PSP behavior and other untested internals (rtyler)</li>
-</ul>
-</dd>
-<dt>2.4.0 (October 24th, 2009)</dt>
-<dd><ul class="first last simple">
-<li>Fix a major performance regression in Template.__init__()</li>
-<li>More graceful handling of unicode when calling .respond() to render a template</li>
-<li>Minor code updates</li>
-<li>Update the default filter (thanks mikeb!)</li>
-</ul>
-</dd>
-<dt>2.3.0 (October 24th, 2009) (loosely equivalent to 2.4.0)</dt>
-<dd><ul class="first last simple">
-<li>Fix a major performance regression in Template.__init__()</li>
-<li>More graceful handling of unicode when calling .respond() to render a template</li>
-<li>Minor code updates</li>
-<li>Update the default filter (thanks mikeb!)</li>
-</ul>
-</dd>
-<dt>2.2.2 (September 10th, 2009)</dt>
-<dd><ul class="first last simple">
-<li>Prevent _namemapper.c from segfaulting when PyImport_ImportModule fails for some reason (Bogdano Arendartchuk &lt;<a class="reference external" href="mailto:debogdano&#37;&#52;&#48;gmail&#46;com">debogdano<span>&#64;</span>gmail<span>&#46;</span>com</a>&gt;)</li>
-<li>Removal of the contrib/markdown module (in favor of a setuptools dependency)</li>
-<li>Default setup.py to use setuptools by default, failing that, fall back to distutils</li>
-<li>Improvements to setup.py to support building for Windows (thanks abbeyj!)</li>
-<li>Improvements to C-based NameMapper for Windows</li>
-<li>Fixes for a swath of unit tests on Windows</li>
-<li>Re-enabling the EOL tests (whoops)</li>
-<li>Fix for unicode/utf-8 dynamic compilation error (thanks mikeb!) (Test.Unicode.JBQ_UTF8_Test8)</li>
-<li>0000010: [Templates] Failure to execute templates on Google App Engine (rtyler)</li>
-<li>0000026: [Compiler] Support multiple inheritance (rtyler)</li>
-</ul>
-</dd>
-<dt>2.2.1 (June 1st, 2009)</dt>
-<dd><ul class="first last simple">
-<li>0000020: [Templates] Builtin support for using Cheetah with Django (rtyler)</li>
-<li>0000021: [Compiler] &#64;static and &#64;classmethod don’t properly define the _filter local (rtyler)</li>
-<li>0000023: [Compiler] Update Template super calls to use super() (rtyler)</li>
-<li>Update all references to communitycheetah.org to point back at cheetahtemplate.org</li>
-</ul>
-</dd>
-<dt>2.2.0 (May 17th, 2009)</dt>
-<dd><ul class="first last simple">
-<li>Switch all internal representations of template code to unicode objects instead of str() objects</li>
-<li>Convert unicode compiled template to an utf8 char buffer when writing to a file (Jean-Baptiste Quenot &lt;<a class="reference external" href="mailto:jbq&#37;&#52;&#48;caraldi&#46;com">jbq<span>&#64;</span>caraldi<span>&#46;</span>com</a>&gt;)</li>
-<li>0000011: [Templates] Calling a function with arguments calls the function with None (rtyler)</li>
-<li>0000015: [Tests] Resolve test failures in ‘next’ branch (rtyler)</li>
-<li>0000019: [Templates] Properly warn when joining unicode and non-unicode objects in DummyTransaction (rtyler)</li>
-</ul>
-</dd>
-<dt>2.1.2 (May 5, 2009)</dt>
-<dd><ul class="first last simple">
-<li>0000006: [Templates] Support &#64;staticmethod and &#64;classmethod (rtyler)</li>
-</ul>
-</dd>
-<dt>2.1.1 (April 16, 2009)</dt>
-<dd><ul class="first last simple">
-<li>Support __eq__() and __ne__() the way you might expect in src/Tools/RecursiveNull (patch suggested by Peter Warasin &lt;<a class="reference external" href="mailto:peter&#37;&#52;&#48;endian&#46;com">peter<span>&#64;</span>endian<span>&#46;</span>com</a>&gt;)</li>
-<li>Applied patch to avoid hitting the filesystem to get the file modification time everytime a #include directive is processed (Jean-Baptiste Quenot &lt;<a class="reference external" href="mailto:jbq&#37;&#52;&#48;caraldi&#46;com">jbq<span>&#64;</span>caraldi<span>&#46;</span>com</a>&gt;)</li>
-<li>Applied patch to fix some annoying cases when Cheetah writes to stderr instead of propagating the exception (Jean-Baptiste Quenot &lt;<a class="reference external" href="mailto:jbq&#37;&#52;&#48;caraldi&#46;com">jbq<span>&#64;</span>caraldi<span>&#46;</span>com</a>&gt;)</li>
-<li>Added KDE editor support</li>
-<li>Applied patch to correct importHook behavior on Python 2.6 (reported/patched by Toshio Ernie Kuratomi &lt;<a class="reference external" href="mailto:a&#46;badger&#37;&#52;&#48;gmail&#46;com">a<span>&#46;</span>badger<span>&#64;</span>gmail<span>&#46;</span>com</a>&gt;)</li>
-<li>Correct unicode issue when calling/embedding unicode templates inside of other templtes (testcase Tests.Unicode.JPQ_UTF8_Test3. reported by Jean-Baptiste Quenot &lt;<a class="reference external" href="mailto:jbq&#37;&#52;&#48;caraldi&#46;com">jbq<span>&#64;</span>caraldi<span>&#46;</span>com</a>&gt;)</li>
-<li>Added –shbang option (e.g. “cheetah compile –shbang ‘#!/usr/bin/python2.6’ “)</li>
-<li>Removed dependency on optik OptionParser in favor of builtin Python optparse module</li>
-<li>Introduction of the #transform directive for whole-document filtering</li>
-<li>Introduction of Cheetah.contrib.markdown and Cheetah.Filters.Markdown for outputting a markdown processed template (meant for #transform)</li>
-<li>Cheetah.Filters.CodeHighlighter, pygments-based code highlighting filter for use with #transform</li>
-<li>Addition of “useLegacyImportMode” compiler setting (defaulted to True) to allow for older (read: broken) import behavior</li>
-</ul>
-</dd>
-<dt>2.1.0.1 (March 27, 2009)</dt>
-<dd><ul class="first last simple">
-<li>Fix inline import issue introduced in v2.1.0</li>
-</ul>
-</dd>
-<dt>2.1.0 (March 16, 2009)</dt>
-<dd><ul class="first last simple">
-<li>Quiet DeprecationWarnings being printed to stderr when using Cheetah on Python 2.6 and up. Patch suggested by Satoru SATOH &lt;<a class="reference external" href="mailto:satoru&#46;satoh&#37;&#52;&#48;gmail&#46;com">satoru<span>&#46;</span>satoh<span>&#64;</span>gmail<span>&#46;</span>com</a>&gt;</li>
-<li>Apply patch to support parallel compilation of templates courtesy of Evan Klitzke &lt;<a class="reference external" href="mailto:evan&#37;&#52;&#48;eklitzke&#46;org">evan<span>&#64;</span>eklitzke<span>&#46;</span>org</a>&gt;</li>
-<li>Corrected issue when __getattr__ calls on searchList objects raise exceptions (<a class="reference external" href="mailto:tyler&#37;&#52;&#48;slide&#46;com">tyler<span>&#64;</span>slide<span>&#46;</span>com</a>)</li>
-<li>make autocalling in valueForName correctly ignore newstyle classes and instances
-that are callable, as it does for oldstyle classes and instances. Patch
-from <a class="reference external" href="mailto:lucas&#37;&#52;&#48;endian&#46;com">lucas<span>&#64;</span>endian<span>&#46;</span>com</a>
-[TR]</li>
-<li>made it possible to chain multiple decorators to a method #def [TR with
-patch from Graham Dennis]</li>
-<li>fixed a bug in _eatMultiLineDef that Graham Dennis reported. [TR]</li>
-<li>fixed ‘module.__init__() argument 1 must be string, not unicode’ bug in
-Template.py reported by Erwin Ambrosch [TR]</li>
-</ul>
-</dd>
-<dt>2.0.1 (Nov 16, 2007)</dt>
-<dd><ul class="first last simple">
-<li>fixed a deadlock Christoph Zwerschke found in Cheetah.ImportHooks.
-[TR]</li>
-</ul>
-</dd>
-<dt>2.0 (Oct 12, 2007)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!</p>
-<ul class="simple">
-<li>fixed exception handling issue in the C implemenation of NameMapper
-[patch from Eric Huss]</li>
-<li>fixed filtering of #included subtemplates
-[patch from Brian Bird]</li>
-</ul>
-<p class="last">See the release notes from 2.0b1-5 and 2.0rc1-8 for other changes since
-Cheetah 1.0.</p>
-</dd>
-<dt>2.0rc8 (April 11, 2007)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote class="last">
-<div><ul>
-<li><p class="first">added a ‘#unicode &lt;encoding&gt;’ directive to indicate that the output of the
-template should be a unicode string even if the template source is a
-normal byte string.</p>
-<blockquote>
-<div><ul>
-<li><p class="first">#unicode and #encoding are mutually exclusive. Use one or the other.</p>
-</li>
-<li><p class="first">#unicode must be on a line by itself.</p>
-</li>
-<li><p class="first">Strings in embedded code must be explictly marked as unicode if they
-contain non-ascii chars:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#unicode latin-1
-\$f(u&quot;&lt;some non-ascii char&gt;&quot;) ## right
-\$f(&quot;&lt;some non-ascii char&gt;&quot;) ## wrong
-</pre></div>
-</div>
-<p>However, this works fine:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#unicode latin-1</span>
-<span class="n">blah</span> <span class="n">blah</span> <span class="o">&lt;</span><span class="n">some</span> <span class="n">non</span><span class="o">-</span><span class="n">ascii</span> <span class="n">char</span><span class="o">&gt;</span> <span class="n">blah</span> <span class="n">blah</span>
-</pre></div>
-</div>
-</li>
-</ul>
-</div></blockquote>
-</li>
-<li><p class="first">fixed several unicode bugs in the compiler.</p>
-</li>
-<li><p class="first">fixed some unicode issues in the standard filters.</p>
-</li>
-<li><p class="first">fixed a few minor bugs in code that never gets called. Thanks to
-Alejandro Dubrovsky for pointing them out.</p>
-</li>
-<li><p class="first">make RawOrEncodedUnicode the baseclass of all filters and remove some
-unused/redudant filters</p>
-</li>
-<li><p class="first">added new compiler setting ‘addTimestampsToCompilerOutput’. See Brian
-Bird’s post about it. He stores his cheetah generated .py files in
-subversion and needed to disable the timestamp code so svn wouldn’t care
-when he recompiles those .py modules.</p>
-</li>
-<li><p class="first">added the #super directive, which calls the method from the parent class
-which has the same as the current #def or #block method:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#def foo</span>
- <span class="o">...</span> <span class="n">child</span> <span class="n">output</span>
- <span class="c1">#super ## includes output of super(&lt;CurrentClass&gt;, self).foo()</span>
- <span class="o">...</span> <span class="n">child</span> <span class="n">output</span>
-<span class="c1">#end def</span>
-
-<span class="c1">#def bar(arg)</span>
- <span class="o">...</span> <span class="n">child</span> <span class="n">output</span>
- <span class="c1">#super(arg) ## includes output of super(&lt;CurrentClass&gt;, self).bar(arg)</span>
- <span class="o">...</span> <span class="n">child</span> <span class="n">output</span>
-<span class="c1">#end def</span>
-</pre></div>
-</div>
-</li>
-<li><p class="first">added some unit tests for the new directives</p>
-</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0rc7 (July 4, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote>
-<div><ul>
-<li><p class="first">extended the #implements directive so an arguments list can be declared in
-the same fashion as #def and #block.</p>
-</li>
-<li><p class="first">made the parser raise ParseError when $*placeholder, $*5*placeholder,
-$(placeholder), etc. are found within expressions. They are only valid in
-top-level text.</p>
-</li>
-<li><p class="first">tweaked the parser so it’s possible to place a comment on the same line as
-a directive without needing to explicitly close the directive first. This
-works regardless of whether or not you added a colon:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="bp">self</span><span class="o">.</span><span class="n">verify</span><span class="p">(</span><span class="s2">&quot;#if 1:</span><span class="se">\\</span><span class="s2">n\$aStr</span><span class="se">\\</span><span class="s2">n#end if</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">,</span>
- <span class="s2">&quot;blarg</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
-
-<span class="bp">self</span><span class="o">.</span><span class="n">verify</span><span class="p">(</span><span class="s2">&quot;#if 1: </span><span class="se">\\</span><span class="s2">n\$aStr</span><span class="se">\\</span><span class="s2">n#end if</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">,</span>
- <span class="s2">&quot;blarg</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
-
-<span class="bp">self</span><span class="o">.</span><span class="n">verify</span><span class="p">(</span><span class="s2">&quot;#if 1: ##comment </span><span class="se">\\</span><span class="s2">n\$aStr</span><span class="se">\\</span><span class="s2">n#end if</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">,</span>
- <span class="s2">&quot;blarg</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
-
-<span class="bp">self</span><span class="o">.</span><span class="n">verify</span><span class="p">(</span><span class="s2">&quot;#if 1 ##comment </span><span class="se">\\</span><span class="s2">n\$aStr</span><span class="se">\\</span><span class="s2">n#end if</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">,</span>
- <span class="s2">&quot;blarg</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Previously, that last test would have required an extra # to close the #if
-directive before the comment directive started:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="bp">self</span><span class="o">.</span><span class="n">verify</span><span class="p">(</span><span class="s2">&quot;#if 1 ###comment </span><span class="se">\\</span><span class="s2">n\$aStr</span><span class="se">\\</span><span class="s2">n#end if</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">,</span>
- <span class="s2">&quot;blarg</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Code that makes use of explicit directive close tokens immediately followed by
-another directive will still work as expected:
-#if test##for i in range(10)# foo $i#end for##end if</p>
-</li>
-<li><p class="first">safer handling of the baseclass arg to Template.compile(). It now does
-the right thing if the user passes in an instance rather than a class.</p>
-</li>
-</ul>
-</div></blockquote>
-<p>ImportHooks: [TR]</p>
-<blockquote>
-<div><ul>
-<li><p class="first">made it possible to specify a list of template filename extentions that are
-looped through while searching for template modules. E.g.:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">Cheetah.ImportHooks</span>
-<span class="n">Cheetah</span><span class="o">.</span><span class="n">ImportHooks</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">templateFileExtensions</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;.tmpl&#39;</span><span class="p">,</span><span class="s1">&#39;.cheetah&#39;</span><span class="p">))</span>
-</pre></div>
-</div>
-</li>
-</ul>
-</div></blockquote>
-<p>Core changes by MO:</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>Filters are now new-style classes.</li>
-<li>WebSafe and the other optional filters in Filters.py now use
-RawOrEncodedUnicode instead of Filter as a base class. This allows them
-to work with Unicode values containing non-ASCII characters.</li>
-<li>User-written custom filters should inherit from RawOrEncodedUnicode
-and call the superclass .filter() instead of str(). str() as of
-Python 2.4.2 still converts Unicode to string using ASCII codec,
-which raises UnicodeEncodeError if it contains non-ASCII characters.</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0rc6 (Feb 4, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote class="last">
-<div><ul>
-<li><p class="first">added a Cheetah version dependency check that raises an assertion if a
-template was compiled with a previous version of Cheetah whose templates
-must be recompiled.</p>
-</li>
-<li><p class="first">made the Cheetah compilation metadata accessible via class attributes in
-addition to module globals</p>
-</li>
-<li><p class="first">major improvement to exception reporting in cases where bad Python syntax
-slips past the Cheetah parser:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>File &quot;/usr/lib/python2.4/site-packages/Cheetah/Template.py&quot;, line 792, in compile
- raise parseError
- Cheetah.Parser.ParseError:
-
- Error in the Python code which Cheetah generated for this template:
- ================================================================================
-
- invalid syntax (DynamicallyCompiledCheetahTemplate.py, line 86)
-
- Line|Python Code
- ----|-------------------------------------------------------------
- 84 |
- 85 | write(&#39;\\n\\n&#39;)
- 86 | for i an range(10): # generated from line 4, col 1
- ^
- 87 | _v = i # &#39;\$i&#39; on line 5, col 3
- 88 | if _v is not None: write(_filter(_v, rawExpr=&#39;\$i&#39;)) # from line 5, col 3.
- 89 | write(&#39;\\n&#39;)
-
- ================================================================================
-
- Here is the corresponding Cheetah code:
-
- Line 4, column 1
-
- Line|Cheetah Code
- ----|-------------------------------------------------------------
- 2 |#compiler useNameMapper=False
- 3 |
- 4 |#for i an range(10)
- ^
- 5 | \$i
- 6 |#end for
- 7 |
-</pre></div>
-</div>
-</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0rc5 (Feb 3, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed a memory leak in Template.compile(), reported by Andrea Arcangeli</li>
-<li>simplified concurrency locking and compile caching in Template.compile()</li>
-</ul>
-</div></blockquote>
-<p>The command line tool (CheetahWrapper.py):</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>added new option –settings for supplying compiler settings</li>
-<li>added new option –templateAPIClass to replace the environment var
-CHEETAH_TEMPLATE_CLASS lookup I added in 2.0b1</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0rc4 (Jan 31, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>fixed a typo-bug in the compile hashing code in Template.compile()</li>
-<li>improved the macros framework and made it possible to implement macros in
-Python code so they can be shared between templates</li>
-<li>more work on the #i18n directive. It’s now a macro directive.</li>
-<li>added new Cheetah.Macros package</li>
-<li>more tests</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0rc3 (Jan 29, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote>
-<div><ul>
-<li><p class="first">added short-form single line versions of all directives that have an #end
-tag, except for #errorCatcher:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#if, #else, #elif, #unless,</span>
-<span class="c1">#for, #while, #repeat,</span>
-<span class="c1">#try, #except, #finally,</span>
-<span class="c1">#cache, #raw</span>
-<span class="c1">#call, #capture</span>
-</pre></div>
-</div>
-<p>The #def and #block directives already had single-line versions:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#if cond: foo</span>
-<span class="c1">#elif cond2: bar</span>
-<span class="c1">#else: blarg</span>
-
-<span class="c1">#for i, val in enumerate(vals): \$i-\$val</span>
-</pre></div>
-</div>
-<p>Note that if you accidentally leave a colon at the end of one of these
-directives but nothing else follows it, aside from whitespace, the parser
-will treat it as a normal multi-line directive.</p>
-<p>The first leading space after the colon is discarded. Any additional
-spaces will be included in the output.</p>
-<p>Also note, if you use the short form versions of #if/#else/#elif you must
-it for all three. The following is not valid:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#if cond: foo</span>
-<span class="c1">#elif cond2</span>
- <span class="n">bar</span>
-<span class="c1">#else: blarg</span>
-</pre></div>
-</div>
-</li>
-<li><p class="first">added support for $!silentModePlaceholders. This is the same as quiet
-mode in Velocity: <a class="reference external" href="http://jakarta.apache.org/velocity/docs/user-guide.html#Quiet%20Reference%20Notation">http://jakarta.apache.org/velocity/docs/user-guide.html#Quiet%20Reference%20Notation</a></p>
-</li>
-<li><p class="first">added support for function/method &#64;decorators. It also works with blocks.
-As in vanilla Python, the &#64;decorator statement must be followed with a
-function/method definition (i.e. #def or #block):</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#from xxx import aDecorator</span>
-<span class="o">...</span>
-<span class="o">...</span>
-<span class="c1">#@aDecorator</span>
-<span class="c1">#def func</span>
- <span class="n">foo</span>
-<span class="c1">#end def</span>
-
-<span class="c1">#@aDecorator</span>
-<span class="c1">#def singleLineShortFormfunc: foo</span>
-
-<span class="c1">#@aDecorator</span>
-<span class="c1">#block func2</span>
- <span class="n">bar</span>
-<span class="c1">#end block</span>
-</pre></div>
-</div>
-</li>
-<li><p class="first">added a new callback hook ‘handlerForExtendsDirective’ to the compiler settings. It
-can be used to customize the handling of #extends directives. The
-callback can dynamically add import statements or rewrite the baseclass’
-name if needed:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">baseClassName</span> <span class="o">=</span> <span class="n">handler</span><span class="p">(</span><span class="n">compiler</span><span class="p">,</span> <span class="n">baseClassName</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>See the discussion on the mailing list on Jan 25th for more details.</p>
-</li>
-<li><p class="first">changed the default filter to the one that doesn’t try to encode Unicode
-It was ‘EncodeUnicode’ and is now ‘RawOrEncodedUnicode’.</p>
-</li>
-<li><p class="first">added optional support for parsing whitespace between the directive start
-token (#) and directive names, per Christophe Eymard’s request. For the
-argument behind this see the mailing list archives for Jan 29th. This is
-off by default. You must turn it on using the compiler setting
-allowWhitespaceAfterDirectiveStartToken=True:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for \$something in \$another
-# for \$somethin2 in \$another2
- blahblah \$something in \$something2
-# end for
-#end for
-</pre></div>
-</div>
-</li>
-<li><p class="first">made the handling of Template.compile()’s preprocessors arg simpler and
-fixed a bug in it.</p>
-</li>
-<li><p class="first">fixed attribute name bug in the .compile() method (it affected the feature
-that allows generated module files to be cached for better exception
-tracebacks)</p>
-</li>
-<li><p class="first">refactored the #cache/CacheRegions code to support abitrary backend cache
-data stores.</p>
-</li>
-<li><p class="first">added MemcachedCacheStore, which allows cache data to be stored in a
-memcached backend. See <a class="reference external" href="http://www.linuxjournal.com/article/7451">http://www.linuxjournal.com/article/7451</a> and
-<a class="reference external" href="http://www.danga.com/memcached/">http://www.danga.com/memcached/</a>. This is only appropriate for systems
-running many Python server processes that need to share cached data to
-reduce memory requirements. Don’t bother with this unless you actually
-need it. If you have a limited number of Python server processes it is
-much faster, simpler, and more secure to just cache in the memory of each
-process.</p>
-<p>KEEP MEMCACHED’S LIMITED SECURITY IN MIND!! It has no authentication or
-encryption and will introduce a gaping hole in your defenses unless you
-are careful. If you are caching sensitive data you should take measures
-to ensure that a) untrusted local system users cannot connect to memcached
-server, b) untrusted external servers cannot connect, and c) untrusted
-users on trusted external servers cannot connect. Case (a) can be dealt
-with via iptable’s owner match module for one way to do this: “iptables -A
-… -m owner …” Cases (b) and (c) can be handled by tunnelling
-memcached network connections over stunnel and implementing stunnel
-authentication with mandatory peer/client certs.</p>
-</li>
-<li><p class="first">some under-the-hood refactoring of the parser</p>
-</li>
-<li><p class="first">made it possible to add custom directives, or customize the
-parsing/handling of existing ones, via the compiler settings
-‘directiveNamesAndParsers’ and ‘endDirectiveNamesAndHandlers’</p>
-</li>
-<li><p class="first">added a compile-time macro facility to Cheetah. These macros are very
-similar to macros in Lisp:
-<a class="reference external" href="http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html">http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html</a>.</p>
-<p>As with Lisp macros, they take source code (Cheetah source) as input and
-return source code (again Cheetah source) as output. They are executed at
-compile-time, just like in Lisp and C. The resultant code
-gets executed at run-time.</p>
-<p>The new #defmacro directive allows users to create macros inside the
-source of their templates. Macros can also be provided via the compiler
-setting ‘macroDirectives’. The ‘macroDirectives’ setting allows you to
-share common macros between templates.</p>
-<p>The syntax for the opening tag of #defmacro is the same as for #def and
-#block. It expects a macro name followed by an optional argument list in
-brackets. A <cite>src</cite> argument is automatically added to the beginning of
-every macro’s argument list. The value of the <cite>src</cite> is the block of
-input source code that is provided during a macro call (see below):</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#defmacro &lt;macroname&gt;[(argspec)]</span>
- <span class="o">&lt;</span><span class="n">macrobody</span><span class="o">&gt;</span>
-<span class="c1">#end defmacro</span>
-</pre></div>
-</div>
-<p>All of Cheetah’s syntax is available for use inside macros, but the
-placeholderStartToken is &#64; instead of $ and the
-directiveStartToken/EndToken is % instead of #. Any syntax using the
-standard $/# tokens will be treated as plain text and included in the output
-of the macro.</p>
-<p>Here are some examples:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#defmacro addHeaderFooter</span>
- <span class="n">header</span>
- <span class="nd">@src</span>
- <span class="n">footer</span>
-<span class="c1">#end defmacro</span>
-
-<span class="c1">#defmacro addHeaderFooter(header=&#39;h&#39;, footer=&#39;f&#39;)</span>
- <span class="nd">@header</span>
- <span class="nd">@src</span>
- <span class="nd">@footer</span>
-<span class="c1">#end defmacro</span>
-</pre></div>
-</div>
-<p>There is a single-line short form like for other directives:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#defmacro addHeaderFooter: header @src footer</span>
-<span class="c1">#defmacro addHeaderFooter(header=&#39;h&#39;, footer=&#39;f&#39;): @header @src @footer</span>
-</pre></div>
-</div>
-<p>The syntax for calling a macro is similar to the simplest usage of the
-#call directive:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#addHeaderFooter
- Source \$code to wrap
-#end addHeaderFooter
-
-#addHeaderFooter: Source \$code to wrap
-
-#addHeaderFooter header=&#39;header&#39;, footer=&#39;footer: Source \$code to wrap
-</pre></div>
-</div>
-<dl class="docutils">
-<dt>In Elisp you write</dt>
-<dd><dl class="first last docutils">
-<dt>(defmacro inc (var)</dt>
-<dd><p class="first last">(list ‘setq var (list ‘1+ var)))</p>
-</dd>
-</dl>
-</dd>
-<dt>to define the macro <cite>inc</cite> and write</dt>
-<dd><p class="first last">(inc x)</p>
-</dd>
-<dt>which expands to</dt>
-<dd><p class="first last">(setq x (1+ x))</p>
-</dd>
-<dt>In Cheetah you’d write</dt>
-<dd><p class="first last">#defmacro inc: #set &#64;src +=1
-#inc: $i</p>
-</dd>
-<dt>which expands to</dt>
-<dd><p class="first">#set $i += 1</p>
-<p class="last">print Template(“”“\
-#defmacro inc: #set &#64;src +=1
-#set i = 1
-#inc: $i
-$i”“”).strip()==2</p>
-</dd>
-</dl>
-</li>
-<li><p class="first">fixed some bugs related to advanced usage of Template.compile(). These
-were found via new unit tests. No one had actually run into them yet.</p>
-</li>
-<li><p class="first">added the initial bits of an #i18n directive. It has the same semantics
-as:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#call self.handleI18n
- Some \$var cheetah source
-#end call
-</pre></div>
-</div>
-<p>but has a simpler syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#i18n
- Some \$var cheetah source
-#end i18n
-
-## single-line short form:
-#i18n: Some \$var cheetah source
-</pre></div>
-</div>
-<p>The method it calls, self.handleI18n, is just a stub at the moment, but it
-will soon be a wrapper around gettext. It currently has one required
-positional argument <cite>message</cite>. I anticipate supporting the following
-optional arguments:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="nb">id</span> <span class="o">=</span> <span class="n">msgid</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">translation</span> <span class="n">catalog</span>
-<span class="n">domain</span> <span class="o">=</span> <span class="n">translation</span> <span class="n">domain</span>
-<span class="n">source</span> <span class="o">=</span> <span class="n">source</span> <span class="n">lang</span>
-<span class="n">target</span> <span class="o">=</span> <span class="n">a</span> <span class="n">specific</span> <span class="n">target</span> <span class="n">lang</span>
-<span class="n">comment</span> <span class="o">=</span> <span class="n">a</span> <span class="n">comment</span> <span class="n">to</span> <span class="n">the</span> <span class="n">translation</span> <span class="n">team</span>
-
-<span class="n">plural</span> <span class="o">=</span> <span class="n">the</span> <span class="n">plural</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">message</span>
-<span class="n">n</span> <span class="o">=</span> <span class="n">a</span> <span class="n">sized</span> <span class="n">argument</span> <span class="n">to</span> <span class="n">distinguish</span> <span class="n">between</span> <span class="n">single</span> <span class="ow">and</span> <span class="n">plural</span> <span class="n">forms</span>
-</pre></div>
-</div>
-<p>#i18n is executed at runtime, but it can also be used in conjunction with
-a Cheetah preprocessor or macro (see above) to support compile time
-translation of strings that don’t have to deal with plural forms.</p>
-</li>
-<li><p class="first">added Cheetah.Utils.htmlEncode and Cheetah.Utils.htmlDecode</p>
-</li>
-<li><p class="first">more docstring text</p>
-</li>
-</ul>
-</div></blockquote>
-<p>Unit tests: [TR]</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>extended the caching tests</li>
-<li>added tests for the various calling styles of Template.compile()</li>
-<li>added copies of all the SyntaxAndOutput tests that use a template
-baseclass other than <cite>Template</cite>. This ensures that all syntax &amp; core
-features work with 2.0’s support for arbitrary baseclasses.</li>
-<li>added tests for all the new directives and the new single-line short forms</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0rc2 (Jan 13th, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed some python 2.4isms that slipped in. All the tests pass with Python
-2.2 now</li>
-<li>added lots more docstring content in the Template class</li>
-<li>made multiline comments gobble whitespace like other directives, per JJ’s
-request. The rather longwinded compiler setting
-gobbleWhitespaceAroundMultiLineComments can be used to go back to the old
-non-gobbling behaviour if needed.</li>
-<li>added #capture directive to complement the #call directive.
-#call executes a region of Cheetah code and passes its output into a function call
-#capture executes a region of Cheetah code and assigns its output to a variable</li>
-<li>extended the compile caching code in Template.compile so it works with the
-‘file’ arg.</li>
-<li>added cacheModuleFilesForTracebacks and cacheDirForModuleFiles args to
-Template.compile(). See the docstring for details.</li>
-<li>misc internal refactoring in the parser</li>
-<li>improved handling of keyword args in the __init__ method and fixed a
-potential clash between the namespaces and searchList args</li>
-</ul>
-</div></blockquote>
-<p>WWW: [TR]</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>added the source for the new Cheetah website layout/content</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0rc1 (Jan 10, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote>
-<div><ul>
-<li><p class="first">made it possible nest #filter directives</p>
-</li>
-<li><p class="first">added lots more docstring content in the Template class</p>
-</li>
-<li><p class="first">added Template.subclass() classmethod for quickly creating subclasses of
-existing Cheetah template classes. It takes the same args as the
-.compile() classmethod and returns a template that is a subclass of the
-template .subclass() is called from:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">T1</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39; foo - \$meth1 - bar</span><span class="se">\\</span><span class="s1">n#def meth1: this is T1.meth1&#39;</span><span class="p">)</span>
-<span class="n">T2</span> <span class="o">=</span> <span class="n">T1</span><span class="o">.</span><span class="n">subclass</span><span class="p">(</span><span class="s1">&#39;#implements meth1</span><span class="se">\\</span><span class="s1">n this is T2.meth1&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-</li>
-<li><p class="first">added baseclass arg to Template.compile(). It simplifies the reuse of
-dynamically compiled templates:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1"># example 1, quickly subclassing a normal Python class and using its</span>
-<span class="c1"># __init__ call signature:</span>
- <span class="n">dictTemplate</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;hello \$name from \$caller&#39;</span><span class="p">,</span> <span class="n">baseclass</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
- <span class="nb">print</span> <span class="n">dictTemplate</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;world&#39;</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="s1">&#39;me&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p># example 2, mixing a Cheetah method into a class definition:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Foo</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span>
- <span class="k">def</span> <span class="nf">meth1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="k">return</span> <span class="s1">&#39;foo&#39;</span>
- <span class="k">def</span> <span class="nf">meth2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="k">return</span> <span class="s1">&#39;bar&#39;</span>
-<span class="n">Foo</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;#implements meth3</span><span class="se">\\</span><span class="s1">nhello \$name from \$caller&#39;</span><span class="p">,</span>
- <span class="n">baseclass</span><span class="o">=</span><span class="n">Foo</span><span class="p">)</span>
-<span class="nb">print</span> <span class="n">Foo</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;world&#39;</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="s1">&#39;me&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>A side-benefit is the possibility to use the same Cheetah source with
-several baseclass, as the baseclass is orthogonal to the source code,
-unlike the #extends directive.</p>
-</li>
-<li><p class="first">added ‘namespaces’ as an alias for ‘searchList’ in Template.__init__</p>
-</li>
-<li><p class="first">made it possible to pass in a single namespace to ‘searchList’, which will
-automatically be converted into a list.</p>
-</li>
-<li><dl class="first docutils">
-<dt>fixed issue with buffering and use of #call when template is used as a</dt>
-<dd><p class="first last">webkit servlet</p>
-</dd>
-</dl>
-</li>
-<li><p class="first">added Cheetah.Utils.htmlEncode and htmlDecode</p>
-</li>
-</ul>
-</div></blockquote>
-<p>The command line tool (CheetahWrapper.py):</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>changed insertion order for the –env and –pickle options so they match the
-commandline UI of the compiled template modules themselves [TR]</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0b5 (Jan 7, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote>
-<div><ul>
-<li><p class="first">made Cheetah.Template a new-style class by inserting ‘object’ into its’
-inheritance tree. Templates can now use super(), properties and all the
-other goodies that come with new-style classes.</p>
-</li>
-<li><p class="first">removed the WebInputMixin by placing its one method directly in the
-Template class.</p>
-</li>
-<li><p class="first">removed the SettingsManager Mixin. It wasn’t being used by anything
-anymore.</p>
-</li>
-<li><p class="first">added a framework for caching the results of compilations in
-Template.compile(). This is on by default and protects against bad
-performance issues that are due to programmers misguidedly compiling
-templates inside tight loops. It also saves on memory usage.</p>
-</li>
-<li><p class="first">misc attr name changes to avoid namespace pollution</p>
-</li>
-<li><p class="first">more + improved docstrings</p>
-</li>
-<li><p class="first">replaced the oldstyle dynamic compile hacks with a wrapper around
-Template.compile(). The old usage pattern Template(src) now benefits from
-most of the recent changes:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Template</span><span class="p">(</span><span class="n">src</span><span class="p">)</span><span class="o">.</span><span class="vm">__class__</span> <span class="o">==</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
-</pre></div>
-</div>
-</li>
-<li><p class="first">removed all the extra imports required by oldstyle dynamic compile hacks</p>
-</li>
-<li><p class="first">converted the cheetah #include mechanism to newstyle compilation and made it
-more flexible</p>
-</li>
-<li><p class="first">made the #include mechanism work with file objects in addition to file names</p>
-</li>
-<li><p class="first">made the handling of args to Template.compile() more flexible. You can now
-provide defaults via class attributes.</p>
-</li>
-<li><p class="first">made preprocessors for Template.compile() work with file arguments</p>
-</li>
-<li><p class="first">added support for specifying a __metaclass__ on cheetah template classes</p>
-</li>
-<li><p class="first">refactored both the class and instance initialization processes</p>
-</li>
-<li><p class="first">improved the handling of __str__ in _assignRequiredMethodsToClass</p>
-</li>
-</ul>
-</div></blockquote>
-<p>The command line tool (CheetahWrapper.py): [TR]</p>
-<blockquote>
-<div><ul class="simple">
-<li>improved error output in CheetahWrapper</li>
-<li>switched fill command over to new style compile usage</li>
-</ul>
-</div></blockquote>
-<p>Unit tests: [TR]</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>fixed format string bug in unittest_local_copy.py</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0b4 (Jan 6, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote>
-<div><ul>
-<li><p class="first">fixed up parsing of target lists in for loops. This was previously limited
-to fairly simple target lists:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for (\$i, \$j) in [(&#39;aa&#39;,&#39;bb&#39;),(&#39;cc&#39;,&#39;dd&#39;)]
- \$i.upper,\$j.upper
-#end for&quot;
-#for (i, j) in [(&#39;aa&#39;,&#39;bb&#39;),(&#39;cc&#39;,&#39;dd&#39;)]
- \$i.upper,\$j.upper
-#end for&quot;
-#for i,(j, k) in enumerate([(&#39;aa&#39;,&#39;bb&#39;),(&#39;cc&#39;,&#39;dd&#39;)])
- \$j.upper,\$k.upper
-#end for&quot;
-</pre></div>
-</div>
-</li>
-<li><p class="first">refactored the class initialization process</p>
-</li>
-<li><p class="first">improved handling of target lists in #set directive. This was previously
-limited to fairly simple target lists.
-#set i,j = [1,2] … #set $i,$j = [1,2]
-#set (i,j) = [1,2] … #set ($i,$j) = [1,2]
-#set i, (j,k) = [1,(2,3)] … #set $i, ($j,$k) = [1,(2,3)]</p>
-</li>
-<li><p class="first">made it possible for the expressionFilter hooks to modify the code chunks
-they are fed. Also documented the hooks in a docstring. Thus the hooks
-can be used as preprocessors for expressions, ‘restricted execution’, or
-even enforcement of style guidelines.</p>
-</li>
-<li><p class="first">removed cheetah junk from docstrings and placed it all in comments or
-__moduleVars__. Per JJ’s suggestion.</p>
-</li>
-<li><p class="first">made it possible to nest #cache directives to any level</p>
-</li>
-<li><p class="first">made it possible to nest #call directives to any level</p>
-</li>
-</ul>
-</div></blockquote>
-<p>Unit Tests [TR]</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>extended tests for #for directive</li>
-<li>expanded tests for #set directive</li>
-<li>expanded tests for #call directive</li>
-<li>expanded tests for #cache directive</li>
-<li>added basic tests for the new $placeholder string expressions:
-c’text $placeholder text’</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0b3 (Jan 5, 2006)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!
-Core Changes: [TR]</p>
-<blockquote>
-<div><ul>
-<li><p class="first">added #yield statement</p>
-</li>
-<li><p class="first">added ability to create nested scopes/functions via nested #def statements</p>
-</li>
-<li><p class="first">added new #call directive and related #arg directive, per Ian Bicking’s
-suggestion.</p>
-</li>
-<li><p class="first">added new expression syntax c”text $placeholder text”</p>
-<blockquote>
-<div><p>for those basic function calling cases where you just need to pass in a
-small bit of cheetah output as an argument:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">c</span><span class="s1">&#39;a string with \$placeholders&#39;</span><span class="p">,</span>
-<span class="n">c</span><span class="s1">&#39;&#39;&#39;a string with \$placeholders&#39;&#39;&#39;</span><span class="p">,</span>
-<span class="n">c</span><span class="s2">&quot;a string with \$placeholders&quot;</span><span class="p">,</span>
-<span class="n">c</span><span class="s2">&quot;&quot;&quot;a string with \$placeholders&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<ul>
-<li><p class="first">They can’t contain #directives, but accept any valid $placeholder syntax
-except caching placeholders. Caching placeholders don’t make any sense in
-this context.</p>
-</li>
-<li><p class="first">They can be used *any* place where a python expression is expected.</p>
-</li>
-<li><p class="first">They can be nested to any depth:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>\$func(c&#39;&lt;li&gt;\$var1-\$var2&lt;/li&gt;&#39;)
-\$func(c&#39;&lt;li&gt;\$var1-\$var2&lt;/li&gt;&#39;, doSomething=True)
-\$func(content=c&#39;&lt;li&gt;\$var1-\$var2&lt;/li&gt;&#39;, doSomething=True)
-\$func(lambda x,y: c&#39;&lt;li&gt;\$x-\$y&lt;/li&gt;&#39;)
-\$func(callback=lambda x,y: c&#39;&lt;li&gt;\$x-\$y&lt;/li&gt;&#39;)
-\$func(lambda x,y: c&#39;&lt;li&gt;\$x-\$y-\$varInSearchList&lt;/li&gt;&#39;)
-\$func(c&#39;&lt;li&gt;\$var1-\$var2-\$(var3\*10)-\$(94.3\*58)&lt;/li&gt;&#39;)
-\$func(c&#39;&lt;li&gt;\$var1-\$var2-\$func2(c&quot;a nested expr \$var99&quot;)&lt;/li&gt;&#39;)
-#if \$cond then c&#39;&lt;li&gt;\$var1-\$var2&lt;/li&gt;&#39; else c&#39;&lt;p&gt;\$var1-\$var2&lt;/p&gt;&#39;
-#def foo(arg1=c&#39;\$var1&lt;span class=&quot;foo&quot;&gt;\$var2&lt;/span&gt;&#39;): blah \$arg1 blah
-\$foo(c&#39;\$var1&lt;i&gt;\$var2&lt;/i&gt;&#39;)
-</pre></div>
-</div>
-</li>
-</ul>
-</div></blockquote>
-</li>
-<li><p class="first">added preprocessor hooks to Template.compile()
-can be used for partial completion or ‘compile-time-caching’
-… more details and examples coming. It’s very useful, but takes a bit
-of explaining.</p>
-</li>
-<li><p class="first">added ‘#set module varName = expr’ for adding module globals. JJ’s suggestion</p>
-</li>
-<li><p class="first">improved generated docstring notes about cached vars</p>
-</li>
-<li><p class="first">fixed silly bug related to “”” in docstring comments and statements like
-this ‘#def foo: $str(“”“foo”“”)’. Reported by JJ.</p>
-</li>
-<li><p class="first">changed the handling of single-line defs so that
-‘#def xxx:&lt;just whitespace&gt;\n’ will be treated as a multi-line #def.
-The same applies to #block. There’s a compiler setting to turn this off
-if you really need empty single-line #def:’s.
-JJ reported that this was causing great confusion with beginners.</p>
-</li>
-<li><p class="first">improved error message for unclosed directives, per Mike Orr’s suggestion.</p>
-</li>
-<li><p class="first">added optional support for passing the trans arg to methods via **KWS rather
-than trans=None. See the discussion on the mailing list Jan 4th (JJ’s post) for
-details. The purpose is to avoid a positional argument clash that
-apparently is very confusing for beginners.</p>
-<blockquote>
-<div><p>Note that any existing client code that passing the trans arg in
-positionally rather than as a keyword will break as a result. WebKit
-does this with the .respond method so I’ve kept the old style there.
-You can also turn this new behaviour off by either manually including
-the trans arg in your method signature (see the example below) or by
-using the compiler setting ‘useKWsDictArgForPassingTrans’=False:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def manualOverride(arg1, trans=None)
- foo \$arg1
-#end def
-</pre></div>
-</div>
-</div></blockquote>
-</li>
-</ul>
-</div></blockquote>
-<p>ImportHooks:</p>
-<blockquote>
-<div><ul class="simple">
-<li>made the ImportHook more robust against compilation errors during import [TR]</li>
-</ul>
-</div></blockquote>
-<p>Install scripts: [TR]</p>
-<blockquote>
-<div><ul class="simple">
-<li>added optional support for pje’s setuptools</li>
-<li>added cheeseshop classifiers</li>
-<li>removed out of date install instructions in __init__.py</li>
-</ul>
-</div></blockquote>
-<p>Servlet Base Class For Webkit: [TR]</p>
-<blockquote>
-<div><ul class="simple">
-<li>disabled assignment of self.application (was a webware hack)</li>
-</ul>
-</div></blockquote>
-<p>Unit Tests: [TR]</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>unit tests for most of the new syntax elements</li>
-<li>tidied up some old tests</li>
-<li>misc refactoring</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0b2 (Dec 30, 2005)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!</p>
-<p>Core Changes:</p>
-<blockquote class="last">
-<div><ul>
-<li><p class="first">In previous versions of Cheetah tracebacks from exceptions that were raised
-inside dynamically compiled Cheetah templates were opaque because
-Python didn’t have access to a python source file to use in the traceback:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="n">File</span> <span class="s2">&quot;xxxx.py&quot;</span><span class="p">,</span> <span class="n">line</span> <span class="mi">192</span><span class="p">,</span> <span class="ow">in</span> <span class="n">getTextiledContent</span>
- <span class="n">content</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">template</span><span class="p">(</span><span class="n">searchList</span><span class="o">=</span><span class="n">searchList</span><span class="p">))</span>
- <span class="n">File</span> <span class="s2">&quot;cheetah_yyyy.py&quot;</span><span class="p">,</span> <span class="n">line</span> <span class="mi">202</span><span class="p">,</span> <span class="ow">in</span> <span class="fm">__str__</span>
- <span class="n">File</span> <span class="s2">&quot;cheetah_yyyy.py&quot;</span><span class="p">,</span> <span class="n">line</span> <span class="mi">187</span><span class="p">,</span> <span class="ow">in</span> <span class="n">respond</span>
- <span class="n">File</span> <span class="s2">&quot;cheetah_yyyy.py&quot;</span><span class="p">,</span> <span class="n">line</span> <span class="mi">139</span><span class="p">,</span> <span class="ow">in</span> <span class="n">writeBody</span>
-<span class="ne">ZeroDivisionError</span><span class="p">:</span> <span class="n">integer</span> <span class="n">division</span> <span class="ow">or</span> <span class="n">modulo</span> <span class="n">by</span> <span class="n">zero</span>
-</pre></div>
-</div>
-<p>It is now possible to keep the generated source code from the python
-classes returned by Template.compile() in a cache dir. Having these files
-around allows Python to include the actual source lines in tracebacks and
-makes them much easier to understand:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">File</span> <span class="s2">&quot;/usr/local/unsnarl/lib/python/us/ui/views/WikiPageRenderer.py&quot;</span><span class="p">,</span> <span class="n">line</span> <span class="mi">192</span><span class="p">,</span> <span class="ow">in</span> <span class="n">getTextiledContent</span>
- <span class="n">content</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">template</span><span class="p">(</span><span class="n">searchList</span><span class="o">=</span><span class="n">searchList</span><span class="p">))</span>
-<span class="n">File</span> <span class="s2">&quot;/tmp/CheetahCacheDir/cheetah_yyyy.py&quot;</span><span class="p">,</span> <span class="n">line</span> <span class="mi">202</span><span class="p">,</span> <span class="ow">in</span> <span class="fm">__str__</span>
- <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">respond</span><span class="p">()</span>
-<span class="n">File</span> <span class="s2">&quot;/tmp/CheetahCacheDir/cheetah_yyyy.py&quot;</span><span class="p">,</span> <span class="n">line</span> <span class="mi">187</span><span class="p">,</span> <span class="ow">in</span> <span class="n">respond</span>
- <span class="bp">self</span><span class="o">.</span><span class="n">writeBody</span><span class="p">(</span><span class="n">trans</span><span class="o">=</span><span class="n">trans</span><span class="p">)</span>
-<span class="n">File</span> <span class="s2">&quot;/tmp/CheetahCacheDir/cheetah_yyyy.py&quot;</span><span class="p">,</span> <span class="n">line</span> <span class="mi">139</span><span class="p">,</span> <span class="ow">in</span> <span class="n">writeBody</span>
- <span class="n">__v</span> <span class="o">=</span> <span class="mi">0</span><span class="o">/</span><span class="mi">0</span> <span class="c1"># \$(0/0)</span>
-<span class="ne">ZeroDivisionError</span><span class="p">:</span> <span class="n">integer</span> <span class="n">division</span> <span class="ow">or</span> <span class="n">modulo</span> <span class="n">by</span> <span class="n">zero</span>
-</pre></div>
-</div>
-<p>This is turned off by default. To turn it on, do this:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">NiceTracebackTemplate</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
- <span class="n">_CHEETAH_cacheModuleFilesForTracebacks</span> <span class="o">=</span> <span class="kc">True</span>
- <span class="n">_CHEETAH_cacheDirForModuleFiles</span> <span class="o">=</span> <span class="s1">&#39;/tmp/CheetahCacheDir&#39;</span> <span class="c1"># change to a dirname</span>
-
-<span class="n">templateClass</span> <span class="o">=</span> <span class="n">NiceTracebackTemplate</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
-
-<span class="c1"># or</span>
-<span class="n">templateClass</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">src</span><span class="p">,</span>
- <span class="n">cacheModuleFilesForTracebacks</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">cacheDirForModuleFiles</span><span class="o">=</span><span class="s1">&#39;/tmp/CheetahCacheDir&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>This only works with the new Template.compile(src) usage style!</p>
-<p>Note, Cheetah generated modules that are compiled on the command line have
-never been affected by this issue. [TR]</p>
-</li>
-<li><p class="first">added an extra comment per $placeholder to generated python code so it is
-easier to grok. [TR]</p>
-</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>2.0b1 (Dec 29, 2005)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!</p>
-<p>Core Changes:</p>
-<blockquote>
-<div><ul>
-<li><p class="first">enabled use of any expression in ${placeholders}. See the examples I posted to
-the email list on Dec 12th. All use cases of the #echo directive can now
-be handled with ${placeholders}. This came from a suggestion by Mike
-Orr. [TR]</p>
-</li>
-<li><p class="first">made it possible for templates to #extend (aka subclass) any arbitrary
-baseclass, including Python’s new style classes. You must either compile
-your classes on the command line or use the new classmethod
-Template.compile() as described below. The old Template(src) interface
-still works, provided you don’t try to use this new arbitrary baseclass
-stuff. See my messages to the email list for more details. [TR]</p>
-</li>
-<li><p class="first">made it possible to create template classes dynamically, rather than just
-instances. See the new classmethod Template.compile(). See my messages
-to the email list for more details. [TR]</p>
-<blockquote>
-<div><p>klass = Template.compile(src)</p>
-</div></blockquote>
-</li>
-<li><p class="first">made it easier to work with custom compiler settings, particularly from
-the command line tool. You can now define a subclass of Template which
-will compile your templates using custom compilerSettings, or even a
-custom compiler class, without requiring you to manually pass in your
-compilerSettings each time or define them in the template src itself via
-the #compiler directive. You can make the command line tool use your
-subclass by defining the environment variable CHEETAH_TEMPLATE_CLASS. It
-should be in the form ‘package.module:class’. See my messages
-to the email list for more details. [TR]</p>
-</li>
-<li><p class="first">made it possible to pass the searchList in as an argument to #def’ined
-methods. This makes all lookup that occur within the scope of that method
-use the provided searchList rather than self._searchList. This does not
-carry over to other methods called within the top method, unless they
-explicitly accept the searchList in their signature AND you pass it to
-them when calling them. This behaviour can be turned off with the
-corresponding compilerSetting ‘allowSearchListAsMethArg’ [TR]</p>
-</li>
-<li><p class="first">added hooks for filtering / restricting dangerous stuff in cheetah source
-code at compile time. These hooks can be used to enable Cheetah template
-authoring by untrusted users. See my messages to the email list for more
-details. Note, it filters expressions at parse/compile time, unlike Python’s
-old rexec module which restricted the Python environment at runtime. [TR]</p>
-<blockquote>
-<div><p># Here are the relevant compiler settings:
-# use lower case keys here!!
-‘disabledDirectives’:[], # list of directive keys, without the start token
-‘enabledDirectives’:[], # list of directive keys, without the start token</p>
-<dl class="docutils">
-<dt>‘disabledDirectiveHooks’:[], # callable(parser, directiveKey),</dt>
-<dd><p class="first last"># called when a disabled directive is found, prior to raising an exception</p>
-</dd>
-</dl>
-<p>‘preparseDirectiveHooks’:[], # callable(parser, directiveKey)
-‘postparseDirectiveHooks’:[], # callable(parser, directiveKey)</p>
-<p>‘preparsePlaceholderHooks’:[], # callable(parser)
-‘postparsePlaceholderHooks’:[], # callable(parser)</p>
-<p>‘expressionFilterHooks’:[],
-# callable(parser, expr, exprType, rawExpr=None, startPos=None)
-# exprType is the name of the directive, ‘psp’, or ‘placeholder’.
-#all lowercase</p>
-</div></blockquote>
-</li>
-<li><p class="first">added support for a short EOLSlurpToken to supplement the #slurp
-directive. It’s currently re.compile(‘#\s*\n’) (i.e # followed by
-arbitrary whitespace and a new line), but this is not set in stone. One
-other suggestion was the backslash char, but I believe Python’s own
-interpretation of backslashes will lead to confusion. The compiler
-setting ‘EOLSlurpToken’ controls this. You can turn it off completely by
-setting ‘EOLSlurpToken’ to None. See the email list for more details. [TR]</p>
-</li>
-<li><p class="first">added ‘_CHEETAH_’ prefix to all instance attribute names in compiled
-templates. This is related to the arbitrary baseclass change. [TR]</p>
-</li>
-<li><p class="first">shifted instance attribute setup to _initCheetahAttributes() method. This
-is related to the arbitrary baseclass change. [TR]</p>
-</li>
-<li><p class="first">made it possible to use full expressions in the #extends directive, rather
-than just dotted names. This allows you to do things like this:</p>
-<p>#from xx.TemplateRepository import getTemplateClass
-#extends getTemplateClass(‘someName’)</p>
-<p>I don’t expect this to be used much. I needed it for a wiki system in
-which the baseclasses for the templates are dynamically compiled at run
-time and are not available via simple imports. [TR]</p>
-</li>
-<li><p class="first">added compiler setting autoImportForExtendDirective=True, so this existing
-default behaviour can be turned off when needed. [TR]</p>
-</li>
-<li><p class="first">fixed a bug in the parsing of single-line #def’s and #block’s when they
-are enclosed within #if … #end if. Reported by Marcin Gajda [TR]</p>
-</li>
-<li><p class="first">tweak to remove needless write(‘’) calls in generated code [TR]</p>
-</li>
-</ul>
-</div></blockquote>
-<p>The command line tool (CheetahWrapper.py):</p>
-<blockquote>
-<div><ul class="simple">
-<li>added code to cleanup trailing slashes on path arguments (code originally
-from Mike Orr) [TR]</li>
-<li>turned on the ImportHooks by default for the ‘cheetah fill’ command. See the
-discussion on the email list [TR]</li>
-</ul>
-</div></blockquote>
-<p>ImportHooks:</p>
-<blockquote class="last">
-<div><ul class="simple">
-<li>fixed a name error bug in the ImportHooks [TR]</li>
-</ul>
-</div></blockquote>
-</dd>
-<dt>1.0 (Dec 4, 2005)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!</p>
-<p class="last">Version bump from 1.0rc3</p>
-</dd>
-<dt>1.0rc3 (Nov 30, 2005)</dt>
-<dd><p class="first">!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!</p>
-<ul class="last">
-<li><p class="first">added useSearchList compiler setting [TR]
-This defaults to True, but if false, the compiler assumes the first
-portion of a $variable (before the first dot) is a global, builtin, or local
-var that doesn’t need looking up in the searchlist. NameMapper’s unified
-dotted notation will still be used on the rest of the lookup (provide the
-setting useNameMapper==True):</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>\$aLocalDictVar.aKey.somethingElse
-</pre></div>
-</div>
-</li>
-</ul>
-</dd>
-</dl>
-<p>1.0rc2 (Nov 19, 2005)</p>
-<blockquote>
-<div><p>!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!</p>
-<p>See my email to the cheetahtemplate-discuss list on Sat. Nov. 12th for more
-details on these changes:</p>
-<ul class="simple">
-<li>faster list-based buffering in DummyTrans, rather than StringIO (my
-benchmarks showed it to be significantly faster. collections.deque wasn’t
-any faster than a simple list.) [TR]</li>
-<li>new CompilerSettings to tweak generated code: [TR]
-* alwaysFilterNone: filter out None immediately, before the filter is called
-* useFilters: allows you to turn them off completely and default to str()
-* includeRawExprInFilterArgs: allows you to disable this behaviour
-* autoAssignDummyTransactionToSelf: off by default</li>
-<li>and automatic $trans finding without having to pass it as an arg to methods
-based Jonathan Mark’s suggestion. If the template’s self.transaction
-attribute has been set, each method of the template will use it when
-called. [TR]</li>
-<li>applied Chris Murphy’s patch to fix a bug in the #shBang directive. [TR]</li>
-</ul>
-</div></blockquote>
-<p>1.0rc1 (Nov 2, 2005)</p>
-<blockquote>
-<div><p>!!!THIS RELEASE REQUIRES RECOMPILATION OF ALL COMPILED CHEETAH TEMPLATES!!!</p>
-<ul class="simple">
-<li>added the compiler option “useStackFrames” for optionally turning off the
-default lookup method which doesn’t work with psyco because it uses stack
-frame introspection. When useStackFrames=False, an alternative psyco
-friendly lookup method is used. [TR]</li>
-<li>fixed treatment of None in several filters, bug reported by Daniele Varrazzo
-[TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.18 (Aug 22, 2005)</p>
-<blockquote>
-<div><ul class="simple">
-<li>version bump from 0.9.18rc1 [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.18rc1 (Aug 15, 2005)</p>
-<blockquote>
-<div><ul class="simple">
-<li>applied Philippe Normand’s patch for extended cache support [TR]</li>
-<li>added filter RawOrEncodedUnicode to fix a unicode issue that was discussed
-on the email list on Aug. 9th 2005 [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.17 (May 30, 2005)</p>
-<blockquote>
-<div><ul class="simple">
-<li>this is just 0.9.17rc1 repackaged [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.17-rc1 (May 12, 2005)</p>
-<blockquote>
-<div><p>This simple bug fix release resolves some issues introduced by
-under-the-hood changes in release 0.9.16a1.</p>
-<ul class="simple">
-<li>removed the use of temp files for handling imports with dynamic
-compilation. This removes a whole slew of issues, including a temp file
-security issue reported on the email list by Brian Bird. [TR]</li>
-<li>fixed bug with handling of the searchList with dynamic inheritance, as
-reported by Brian Bird. [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.16 (Mar 27, 2005)</p>
-<blockquote>
-<div><ul class="simple">
-<li>this is just 0.9.16b1 repackaged [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.16b1 (Feb 28, 2005)</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed attr error in Parser.eatEncoding [TR]</li>
-<li>some tweaks to Compiler.py to prevent errors with dynamically compiled
-templates [TR]</li>
-<li>added tests for the #encoding directive [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.16a1 (Jan 6, 2005)</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed a unicode bug in Compiler.py [TR]</li>
-<li>added new EncodeUnicode filter that Rene Pijlman contributed (I optimized it
-slightly) and made it the default filter for all templates. [TR]</li>
-<li>added test cases for handling unicode with the default filter [TR]</li>
-<li>fixed a caching bug related to the #include directive. Thanks to Michael
-Engelhart for reporting it.[TR]</li>
-<li>added the new #encoding directive to handle PEP 263
-<a class="reference external" href="http://www.python.org/doc/2.3/whatsnew/section-encodings.html">http://www.python.org/doc/2.3/whatsnew/section-encodings.html</a> [TR]</li>
-<li>Tools.CGITemplate: fix bug in comment.[MO]</li>
-<li>Abort with a helpful error message if user runs ‘cheetah test’ in a
-directory without write permission. (Kludge in CheetahWrapper.py; we
-should probably move the temp files under the system tmp directory.) [MO]</li>
-<li>added better string type checking for args in Template.py, as suggested by
-Terrel Shumway [TR]</li>
-<li>minor tweak to the class attribute lookup style in the Compiler.py
-__getattr__ methods [TR]</li>
-<li>Fix printf format bug in “cheetah c –debug”, found by Terry MacDonald. [MO]</li>
-<li>Disabled NameMapperDict test (in SyntaxAndOutput.py) because the
-namemappers still have the dict-method bug. (Reminder: don’t use
-placehold names like $update that match dict method names.) [MO]</li>
-<li>#repeat now uses a local variable of the form __i$num which permits
-nesting [JJ]</li>
-<li>implemented a modified version of Bob and JJ’s patch for better parser
-warnings about mismatched directives and #end directives [TR]</li>
-<li>lots of little cleanups and refactoring [TR]</li>
-<li>refactored the class tree for the Parser and Compiler. They are now
-completely separate trees and the communication between them is one-way:
-explicit commands from the parser to the compiler. The parser now handles
-all parsing tasks by itself and delegates *all* code generation to the
-compiler. This last bit was my original intention, but things got a bit
-mixed up over time. Also, all SettingsManager stuff for handling
-compiler/parser settings is now handled by ModuleCompiler. This should make
-it easier to grok, maintain, and extend both. [TR]</li>
-<li>improved the parsing of singe-line #if directives. [TR]</li>
-<li>removed the old webware example of the cheetah site, as it was way out of
-date and was more confusing than helpful. [TR]</li>
-<li>added two new lookup functions to NameMapper (valueFromFrame and
-valueFromFrameOrSearchList) and synchronized the behaviour of the C and
-Python versions of all functions. [TR]</li>
-<li>improved the exception handling of both versions of NameMapper. NotFound
-exceptions now include more detail about what wasn’t found. [TR]</li>
-<li>made NameMapper’s searchList lookup functions work with any iterable
-type/class rather than just with lists. [TR]</li>
-<li>added and updated a variety of test cases. [TR]</li>
-<li>checked in a patch to CheetahWrapper that improves handling of the odir
-option when the path is absolute. I can’t remember where the patch came
-from. [TR]</li>
-<li>checked in a patch to Template.py for better include/import support under
-Jython. Again, I’ve forgotten who contributed it. [TR]</li>
-<li>updated various bits of the user guide. [TR]</li>
-<li>made the Cheetah NameMapper calls in the generated code use the new function
-valueFromFrameOrSearchList rather than passing locals, searchList, globals,
-and __builtins__ into valueFromSearchList. This is faster, less bug prone
-and simpler to read/grok. I also removed all tracking of local
-variable names by the compiler. [TR]</li>
-<li>other misc. refactorings [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.15 (Mar 25, 2003)</p>
-<blockquote>
-<div><ul class="simple">
-<li>a minor tweak to the cleanup actions of one of the test cases [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.15rc2 (Mar 23, 2003)</p>
-<blockquote>
-<div><ul class="simple">
-<li>Fixed a python version dependency bug related to Compiler.py’s use of
-isinstance() [TR]</li>
-</ul>
-</div></blockquote>
-<p>0.9.15rc1 (Mar 21, 2003)</p>
-<blockquote>
-<div>This is just 0.9.15b1 renamed.</div></blockquote>
-<p>0.9.15b1 (Mar 17, 2003)</p>
-<blockquote>
-<div><ul class="simple">
-<li>The Cheetah version of unittest now prints a blank line after each
-traceback to separate them. (MO)</li>
-<li>.webInput() now saves the cgi.FieldStorage() instance in a global
-variable rather than recreating it each call. That should allow the
-method to be called multiple times with POST variables outside Webware.
-(MO)</li>
-<li>CheetahWrapper: no verbose output on stdout with –stdout/-p. (MO)</li>
-<li>“#indent” is now undocumented. The existing code remains intact for now.
-See the TODO file for our future plans. (MO)</li>
-<li>Apply 2 unicode-support patches from Rodrigo B. de Oliveira (rodrigobamboo)
-that affected the Template and ModuleCompiler classes. (TR)</li>
-<li>Template: compiling a template from a string now works if the current
-directory doesn’t have write permission. (MO)</li>
-<li>remove temporary .pyo files in addition to .py and .pyc files (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.15a3 (Nov 10, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>corrected a dictionary bug in the Python version of NameMapper (TR)</li>
-<li>Rewrote the “cheetah” command (CheetahWrapper.py) again and added test
-cases. New options –flat and –nobackup; –stdout is now a synonym for
--p. See the “cheetah compile” section in the Users’ Guide for details.
-Deleted Utils.dualglob: merged into CheetahWrapper. (MO)</li>
-<li>.addToSearchList() and .prependToSearchList() are gone. Instead of
-adding containers to the searchList after instantiation, pass all the
-containers you need to the constuctor, keep another reference somewhere
-to the containers, and modify the containers directly. Generic libraries
-that want to add a new kind of information to the searchList (e.g.,
-web variables) should do “self.searchList().insert(0, myContainer)”. (MO)</li>
-</ul>
-</div></blockquote>
-<p>0.9.15a2 (Nov 4th, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>Filters now have access to the name of the placeholder they’re filtering.
-In the .filter() method, kw[‘rawExpr’] gives the entire placeholder name
-including subscripts and arguments, exactly as it appears in the template
-definition. (TR)</li>
-<li>Fix three bugs in “cheetah compile -R”: (1) the generated class name
-contained the subdirectory, (2) the destination path did not contain the
-subdirectory, (3) Cheetah failed to create the destination subdirectory
-if missing. All subdirectories created have an “__init__.py” file.
-“cheetah fill -R” does the same thing but does not create
-“__init__.py”. (MO) NOTE: this is still buggy!</li>
-<li>New directory “attic” in source contains code that has been abandoned
-for now but may come in handy someday. (MO)</li>
-<li>Tests.CheetahWrapper: test suite for “cheetah compile” and
-“cheetah fill”. If the module is run from the command line, the
-option “–list PATH/CheetahWrapper.py”, lists all scenarios that would be
-tested; the argument is the path to the test module itself. (MO)</li>
-<li>made Cheetah.NameMapper.NotFound subclass the builtin LookupError (TR)</li>
-<li>added an initial implementation of single line #if directives
-#if &lt;condition&gt; then &lt;true&gt; else &lt;false&gt;
-The parsing is fairly rudimentary for now and assumes that the keywords
-‘then’ and ‘else’ won’t appear any inside a string in this directive (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.15a1 (Oct 6th, 2002)</p>
-<blockquote>
-<div><ul>
-<li><p class="first">fixed a package-relative import bug in ImportHooks.py (TR)</p>
-</li>
-<li><p class="first">set ‘monitorSrcFile’ to false as it was causing problems with the
-ImportHooks … This might be temporary as the problem needs more thought
-(TR)</p>
-</li>
-<li><p class="first">fixed meta tag http_equiv to be http-equiv in SkeletonPage (TR)</p>
-</li>
-<li><p class="first">$webInput (Utils.WebInputMixin) ‘source’ arg can be either case. (MO)</p>
-</li>
-<li><p class="first">fixed code-gen bug in MethodCompiler.commitStrConst that was leading to
-triple single quotes followed immediately by another single quote if the
-template def contained a ‘$placeholder’ surrounded in single quotes and
-multiple \n newlines … plus added new test case.(TR)</p>
-</li>
-<li><p class="first">undocumented the ‘#settings’ directive. The directive itself will be
-removed soon. (MO)</p>
-</li>
-<li><p class="first">Utils.optik: Optik 1.3 package by Gregory P Ward, for parsing
-command-line options in ‘cheetah’ comamnd. Copied unchanged into
-Cheetah except added “Cheetah.Utils.optik.” prefix to intra-package
-imports. Optik’s copyright and license is in an appendix in the
-Cheetah Users’ Guide. (MO)</p>
-</li>
-<li><p class="first">rewrite of the “cheetah” and “cheetah-compile” commands.
-The command-line options have changed! Removed CheetahCompile module
-removed and its test suite too; CheetahWrapper now takes its place. (MO)</p>
-</li>
-<li><p class="first">Utils.dualglob: new module to recursively generate source+destination
-filenames from command-line filespecs. (MO)</p>
-</li>
-<li><p class="first">The command-line options of .py template modules have also changed
-to conform with the “cheetah” command. Also a –pickle bug was
-fixed. (MO)</p>
-</li>
-<li><p class="first">Utils.WebMixin: made a string type comparision backward compatible.
-This was why the Cheetah test suite was failing on Python &lt; 2.2! (MO)</p>
-</li>
-<li><p class="first">SettingsManager._createConfigFile(): bugfix in default argument. (MO)</p>
-</li>
-<li><p class="first">$hasVar(‘varName’) is an alias for $varExists(‘varName’). (MO)</p>
-</li>
-<li><p class="first">$_fileDirName and $_filePath are now None rather than missing if
-the template definition did not come from a named file. (MO)</p>
-</li>
-<li><p class="first">applied patch on SourceForge for “%” in default arguments of a block (TR)</p>
-</li>
-<li><p class="first">removed the _underscored attribute lookup step from NameMapper NOTE THIS
-MIGHT BREAK EXISTING TEMPLATES (TR)</p>
-</li>
-<li><p class="first">Install Cheetah into site-packages/Cheetah/ rather than
-site-packages/Webware/Cheetah/. Added code to automatically remove the old
-dir.(TR)</p>
-</li>
-<li><p class="first">fixed the variable name resolution order bug in $placeholders. The new
-implementation uses:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">valueFromSearchList</span><span class="p">([</span><span class="nb">locals</span><span class="p">()]</span> <span class="o">+</span> <span class="n">searchList</span> <span class="o">+</span> <span class="p">[</span><span class="nb">globals</span><span class="p">(),</span> <span class="n">__builtin__</span><span class="p">],</span>
-<span class="n">rest</span> <span class="n">of</span> <span class="n">the</span> <span class="n">args</span><span class="p">)</span> <span class="k">for</span> <span class="nb">all</span> <span class="n">lookups</span><span class="o">.</span> <span class="p">(</span><span class="n">TR</span><span class="p">)</span>
-</pre></div>
-</div>
-</li>
-<li><p class="first">removed the #settings directive (TR)</p>
-</li>
-<li><p class="first">added the #del directive, for using Python’s del statement (TR)</p>
-</li>
-<li><p class="first">I think I’ve fixed the problem with the searchList arg being discarded when a
-template is generated from a .tmpl file that #extends another template. This
-bug was reported by Edmund on Aug 30th
-(subject: “Bug? Was: Really basic searchList question”) (TR)</p>
-</li>
-</ul>
-</div></blockquote>
-<p>0.9.14 (July 14, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>Precompiled template Templates/SkeletonPage.py added to CVS. This file is
-needed for Cheetah’s regression tests. (MO)</li>
-<li>removed automatic recompilation of .py template in memory if the
-.tmpl file has changed. (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.14b1 (June 30, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>moved the Users’ Guide and the Developers’ Guide into a separate CVS module,
-‘CheetahDocs’, so they can be distributed separately from the source distro
-(TR,MO)</li>
-<li>added TypeType to the types that NameMapper won’t do autocalling on (TR)</li>
-<li>in Template.py moved the global LegalKWs to Template._legalKWs (TR)</li>
-<li>made #set work with RVALUES that are missing the recommended $ (TR)</li>
-<li>added some new test cases for the #set directive (TR)</li>
-<li>fixed bug in the output of the #unless directive that Mike found (TR)</li>
-<li>added some module constants to clear up a missing name bug that Mike found
-in cases where you use **KW in a Cheetah method definition (TR)</li>
-<li>fixed a bug in Parser.py:_LowLevelSemanticsParser.getExpression() that was
-related to the default enclosures=[] argument. This arg was unintentionally
-being shared between calls and thus leading to parsing errors as reported by
-Greg Czajkowski (TR)</li>
-<li>Filter: fixed an ‘== None’ expression (should be ‘is None’). (MO)</li>
-<li>TemplateMisc: new base class for Template. This is for optional
-convenience methods that don’t require Webware. (MO)</li>
-<li>User’s Guide: new sections “Non-Webware HTML Output” and “Non-HTML
-Output”. (MO)</li>
-<li>Expanded $webInput() – renamed from $cgiImport() – to work both with
-Webware input and CGI scripts. Handles GET/POST/cookie/session vars under
-Webware, and GET/POST under CGI. Defined in Cheetah.Utils.WebInputMixin,
-now inherited by Template directly. (MO)</li>
-<li>Tools.CGITemplate has methods to output CGI headers: .isCgi, .cgiHeaders
-and .cgiHeadersHook in TemplateMisc. (MO)</li>
-<li>New #indent directive allows you to indent block constructs in the
-template definition without having that indentation in the output, and
-allows you to set the output indentation per line independent of the
-indentation in the template definition. This version uses Robert
-Kuzelj’s #indent syntax exactly. In the next few days,
-Cheetah.Utils.Indenter will be refactored and
-*** THE #INDENT SYNTAX WILL CHANGE! *** (MO)</li>
-<li>added the #return directive as requested by Robert Kulezj (TR)</li>
-<li>added some test cases for the #return directive (TR)</li>
-<li>removed buggy import statement that had been left in Servlet.py after the
-CGIInputMixin changes (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.13 (May 8, 2002)</p>
-<blockquote>
-<div><ul>
-<li><p class="first">changed Cheetah.Servlet.isRunningFromWebKit to isWebwareInstalled (TR)</p>
-</li>
-<li><p class="first">fixed parsing bug that would exit an expression if the directiveEndToken was a
-valid Python token and was found inside the directive. (TR)</p>
-<p>E.g.:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#compiler-settings</span>
-<span class="n">directiveStartToken</span> <span class="o">=</span> <span class="o">.</span>
-<span class="n">directiveEndToken</span> <span class="o">=</span> <span class="p">:</span>
-<span class="n">commentStartToken</span> <span class="o">=</span> <span class="c1">#</span>
-<span class="c1">#end compiler-settings</span>
-
-<span class="o">.</span><span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">][</span><span class="mi">2</span><span class="p">:</span><span class="mi">3</span><span class="p">]:</span>
-<span class="n">blag</span>
-<span class="o">.</span><span class="n">end</span> <span class="k">for</span>
-</pre></div>
-</div>
-</li>
-<li><p class="first">fixed #include bug that was resulting in non-unique includeIDs (TR)</p>
-</li>
-</ul>
-</div></blockquote>
-<p>0.9.13b2 (May 3, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed the bug in Cheetah.Servlet.Servlet.serverSidePath that Jeff Johnson
-found. (TR)</li>
-<li>changed the attribute Cheetah.Servlet.ServletisRunningFromWebKit to
-isControlledByWebKit and set the default to False unless the .awake method
-is called. This makes a clear distinction between templates that are being
-used with WebKit via the inheritance approach and the containment approach
-(TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.13b1 (May 1, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>Was going to import cStringIO instead of StringIO, but it made the
-DummyTransaction.py unittest fail so I undid it. Cheetah aims to provide
-Unicode support, which cStringIO does not provide. (TR/MO)</li>
-<li>Utils.Misc.CheckKeywords(): prevent misspelled keyword arguments,
-used by Template constructor. (MO)</li>
-<li>removed support for multiple inheritance (TR)</li>
-<li>added some bounds-checking code to _namemapper.c’s getNameChunks function
-(TR)</li>
-<li>changed the exceptions in _namemapper.c from the old string exceptions
-to proper exception objects (TR)</li>
-<li>first portion of Developers’ Guide written (MO)</li>
-<li>implemented the extended #extends directive, which does automatic importing
-(MO,TR)</li>
-<li>added some new testcases for the extended #extends directive (TR)</li>
-<li>lots of work on the Users’ Guide (MO)</li>
-<li><dl class="first docutils">
-<dt>implemented and tested an import hook for .tmpl files (TR):</dt>
-<dd>import MyTemplate # will compile and import MyTemplate.tmpl</dd>
-</dl>
-</li>
-<li>made my True/False declarations friendly with Python 2.2.1, which already
-includes True/False as builtins (TR)</li>
-<li><dl class="first docutils">
-<dt>implemented the #compiler directive that Edmund Lian suggested (TR)</dt>
-<dd><dl class="first last docutils">
-<dt>e.g.:</dt>
-<dd>#compiler commentStartToken = ‘//’
-// a comment
-#compiler reset
-// no longer a comment</dd>
-</dl>
-</dd>
-</dl>
-</li>
-<li>fixed the bug that Edmund Lian found in .addSet() when useNameMapper = 0
-(TR)</li>
-<li>fixed bug in comment creation using lineCol that Mike found (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.12 (April 3, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>no code changes from beta 2</li>
-<li>more work on the docs (MO)</li>
-</ul>
-</div></blockquote>
-<p>0.9.12b2 (Mar 28, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed Win32 path bug in Template._makeDummyPackageForDir() (TR)</li>
-<li>prettied up the format of the debug comments in the Cheetah generated
-Python code (TR)</li>
-<li>fixed the non-unique key error in Template._includeCheetahSource (TR)</li>
-<li>fixed the module import bug in ‘cheetah compile -w’ (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.12b1 (Mar 24, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>$request().field(args) now works, identical to $request.field(args)
-to implement this, the request object is now self.request() instead of
-self.request. This provides compatibility with Webware’s servlet API.
-(self.session already was an accessor method). New read-only attribute
-self.isRunningFromWebKit is boolean. All changes are in Servlet.py. (MO)</li>
-<li>fixed nested-NotFound bug in _namemapper.c’s valueFromSearchList (TR)</li>
-<li>‘cheetah’ wrapper script has abbreviation -c for the ‘compile’ command,
--t for ‘test’, and an ASCII-art cheetah face in the help message. (MO)</li>
-<li>CheetahCompile.py: fixed to recognize –help option and to show –help/-h
-in help message. (MO)</li>
-<li>CheetahCompile.py:
-changed the order of the VERBOSE mode printouts, as per Mike’s request (TR)</li>
-<li>Template.py:
-fixed the #include’d template searchList sharing problem, as reported by
-Johannes (TR)</li>
-<li>corrected namemapper translation bug in
-Compiler.GenUtils.genNameMapperVar() (TR)</li>
-<li>Utils.Misc.UseOrRaise(): convenience function to return a
-value, or raise it if it’s a subclass of Exception. (MO)</li>
-<li>Utils.CGIImportMixin replaces Tools.WebwareMixin. Servlet now
-subclasses it. This adds the .cgiImport() method to all servlets, allowing
-sophisticated retrieval of form fields, cookies or session variables from
-one line of Cheetah or Python code. See module docstring. (MO)</li>
-<li>lots of updates to the docs (MO)</li>
-</ul>
-</div></blockquote>
-<p>0.9.11 (Mar 07, 2002)</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed a careless bug in cheetah-compile (TR)</li>
-<li>implemented the new ‘cheetah’ wrapper script (TR)</li>
-<li>refactored the local copy of unittest a bit (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.10 (Mar 06, 2002): Primarily a bug fix release</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed bug in srcfile-mtime monitoring / update code (TR)</li>
-<li>fixed the parsing of single-line #defs and #blocks so they can have
-arguments (TR)</li>
-<li>added test cases for single-line #defs and #blocks with args (TR)</li>
-<li>fixed a silly typo bug in Parser.py where a comma was left at the end of
-regex definition, make it a tuple rather than a regex</li>
-<li>fixed the directive matching bug that Jeff Johnson reported. It was
-causing #else# to not match, while #else # was matching. + added a test
-for it.(TR)</li>
-<li>fixed bug in a regex that was preventing bare $’s followed by whitespace
-and then valid varname chars from parsing as just $ instead of as a
-placeholder (TR)</li>
-<li>added some code to break reference cycles after the compilation is
-complete. This helps prevent memory leaks when a process in creating then
-discarding lots of Templates. You also need to manually call
-“template.shutdown()” to clear the remaining reference cycles.
-(TR)</li>
-<li>fixed string formating bug in the autogenerated docstring code (TR)</li>
-<li>added better error message for the #attr directive (TR)</li>
-<li>removed some residual code that was causing a bug with cheetahvars that
-started with the name of one of the imported modules, such as ‘time’. (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.9 (Dec 14, 2001)</p>
-<blockquote>
-<div><ul>
-<li><p class="first">implemented one-line #def’s and #block’s (TR):</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#def aTest: This is a \$adj test ---- READ THE MANUAL FOR MORE INFO.</span>
-</pre></div>
-</div>
-<p>NOTE: leading and trailing whitespace is stripped. These should only be
-used on lines by themselves as it reads to the end of the line.</p>
-</li>
-<li><p class="first">made cheetah-compile accept input on standard input (TR)</p>
-</li>
-<li><p class="first">made sure that #def and #block work with $’s on the method names (TR)</p>
-</li>
-</ul>
-</div></blockquote>
-<p>0.9.9b1 (Dec 6, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>template constructor arg ‘outputFilter’ now ‘filter’, for consistency
-with #filter (MO)</li>
-<li>template constructor raises TypeError if bad arguments (MO)</li>
-<li>Cheetah.Utils.VerifyType new module containing functions for verifying the
-type of an argument (MO)</li>
-<li>Cheetah.Utils: new package for non-Cheetah-specific modules needed by
-Cheetah (MO)</li>
-<li>Cheetah.Filters: new filter WebSafe, several bugfixes (MO)</li>
-<li>more work on the Users’ Guide (MO)</li>
-<li>fixed bug with adding Python’s __builtins__ to the local vars list (TR)</li>
-<li>fixed bug with #echo (TR)</li>
-<li>fixed bug that was preventing ${a, $b=1234} from working like ${a, b=1234} (TR)</li>
-<li>fixed some bugs in Template.varExists and Template.getVar()
-(TR - thanks to MH for spotting them)</li>
-<li>made it possible to use filenames like ‘spam-eggs.txt’ that have invalid
-characters for module names with Template(): Template(file=’spam-eggs.txt’)
-(TR/MH)</li>
-<li>refactored ‘cheetah-compile’ a little (TR)</li>
-<li>Cheetah.Filters.Strip: new filter to strip leading/trailing whitespace
-but preserve newlines. Suitable for #filter directive or (possible)
-future #sed directive. (MO)</li>
-<li>Cheetah.Filters.StripSqueeze: new filter to canonicalize all whitespace
-chunks to ‘ ‘. Also removes all newlines (joining multi-line input into
-one long line), and leading/trailing whitespace from the final result. (MO)</li>
-<li>Filters can now be used standalone for debugging or for use outside
-Cheetah. This works transparently; details are in Filters.py docstring.
-(MO)</li>
-<li>Cheetah.Tools.MondoReport: new module for dividing a long list into
-“pages”, and for calculating statistics useful in reports. (MO)</li>
-<li>refactored Cheetah.Servlet.Servlet.Awake a little (TR)</li>
-<li>fixed an output bug in the #block generated code that turned up when you
-tried to override a block method from Python rather than Cheetah. (TR)</li>
-<li>started preparing to shift some of the ‘shared’ utility classes, such as
-SettingsManager, to the Webware core. Cheetah 1.0 will probably require
-Webware to be installed so it can access those shared classes. (TR)</li>
-<li>extended the template module command line interface(TR/MO)</li>
-</ul>
-</div></blockquote>
-<p>0.9.9a6 (Nov 6, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed bug with quotations in longer constant string chunks (TR)</li>
-<li>fixed another bug in the cheetah-compile script (TR)</li>
-<li>fixed a bug in the file-update monitoring code that was resulting in
-infinite loops when used with Template sub-classes (TR)</li>
-<li>extended the #filter framework according to Mike’s suggestions (TR)</li>
-<li>added test modules for cheetah-compile and the file-update monitoring code (TR)</li>
-<li>extended the capabilities of cheetah-compile … (IB)</li>
-<li>updated the docs (MO)</li>
-</ul>
-</div></blockquote>
-<p>0.9.9a5 (October 31, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed a bug I created yesterday (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.9a4 (October 30, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>added #repeat (TR implementing Chuck’s suggestion)</li>
-<li>added #unless (TR implementing Mike’s suggestion)</li>
-<li>updates to the Users’ Guide (MO)</li>
-<li>fixed a small bug in the cheetah-compile script, as reported by Ian on the
-list (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.9a3 (October 12, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>more in the Users Guide (TR)</li>
-<li>renamed #attribute as #attr (TR)</li>
-<li>renamed #call as #silent (TR)</li>
-<li>added #echo directive (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.9a2 (October 11, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>updated the example site and the SkeletonPage framework (TR)</li>
-<li>fixed some small bugs (TR)</li>
-<li>corrected some typos in the docs (TR + MO)</li>
-<li>added Ian’s sitehiearchy class to Cheetah.Tools (TR + IB)</li>
-</ul>
-</div></blockquote>
-<p>0.9.9a1 (October 9, 2001) [many changes and bug-fixes]</p>
-<blockquote>
-<div><ul class="simple">
-<li>a complete reimplementation of Cheetah’s core (the parser and compiler
-classes) (TR + IB)</li>
-<li>implemented the #def, #implements, #import, and #from directives
-+ removed #redefine and #macros
-+ renamed #extend as #extends (TR + IB)</li>
-<li>replaced #data with #settings, see the docs (TR)</li>
-<li>restructured and updated the docs (TR + MO + IB)</li>
-<li>reimplemented the cheetah-compile script, without the -g option that Ian
-had added (TR)</li>
-<li>changed the signature of Template.__init__. See the docs. (TR)</li>
-<li>made #set distinguish between local and global vars. See the docs. (TR)</li>
-<li>added hundreds of new test cases (TR)</li>
-<li>added the #breakpoint and #compiler-settings directives (TR)</li>
-<li>started restructuring the SkeletonPage framework [not complete yet] (TR)</li>
-<li>started restructuring the example sites [not complete yet] (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.8 (October 9, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>added a few new language constructs (aka ‘directives’) to Cheetah (TR)
-#while … #end while
-#try … #except … #else … #finally … #end try</li>
-<li>fixed a bug in the handling of local vars in #for loops that was preventing
-callable local vars from being handled properly. See Chuck’s post of Sept
-10. (TR)</li>
-<li>fixed a pointer bug in the C version of NameMapper.valueFromSearchList()
-that was yielding undefined values for the NotFound exception when it was
-raised (TR)</li>
-<li>prefaced all internal args to Template() with underscores (TR)</li>
-<li>fixed the problem with parsing triple quoted strings in arg lists (TR)</li>
-<li>updated the docs (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.8a4 (September 7, 2001)</p>
-<blockquote>
-<div><ul>
-<li><p class="first">Added -g (appendGen function argument), which compiles x.tmpl to xGen.py,
-with x.py being for non-generated Python code. Also changed option handling
-a little and added a comment to the top of compiled files. (IB + MO)</p>
-</li>
-<li><p class="first">finalized the #include syntax after a lengthy discussion on the list
-This is different from in 0.9.8a3 (TR):</p>
-<blockquote>
-<div><p>#include &lt;ARGS&gt; &lt;EXPR&gt;
-… uses the value of EXPR as the path of the file to include.</p>
-<p>#include &lt;ARGS&gt; source = &lt;EXPR&gt;
-… includes the value of the EXPR</p>
-</div></blockquote>
-<p>where &lt;ARGS&gt; is ‘raw’ or ‘’</p>
-</li>
-<li><p class="first">re-implemented the output mechanism to use streaming via Webware’s
-Transaction and Response objects when available and fake it with the
-DummyTransaction DummyResponse classes when the Webware Transaction is not
-avialable. This behaviour is roughly the same as in Webware’s PSP. Will
-implement output buffering PHP-style later if there is any demand. (TR)</p>
-</li>
-<li><p class="first">made #include a run-time directive rather than compile-time. This is
-slower, but the semantics are better. (TR)</p>
-</li>
-<li><p class="first">various small optimizations to the generated code (TR)</p>
-</li>
-<li><p class="first">updated the docs (TR)</p>
-</li>
-</ul>
-</div></blockquote>
-<p>0.9.8a3 (August 22, 2001) [includes changes for 0.9.8a1 and 0.9.8a2]</p>
-<blockquote>
-<div><ul>
-<li><p class="first">Added package ./src/Tools/ for contributed classes/functions/packages not
-necessary to run Cheetah. The first such class is RecursiveNull.py by Ian
-Bicking. Added package Cheetah.Tools to list in ./setup.py . (MO)</p>
-</li>
-<li><p class="first">Template.__init__ keyword arg ‘searchList’: no longer has to be a tuple. It
-may be a list or any type that that Python’s ‘tuple’ function accepts. (MO)</p>
-</li>
-<li><p class="first">Template.__init__ new keyword arg ‘file’: this may be a filename or file
-object to read the Template Definition from. If you use this, you must not
-pass a Template Definition string also. New instance variables
-._fileName and ._fileMtime are set if a filename was passed; otherwise they
-are None. (MO)</p>
-</li>
-<li><p class="first">CodeGenerator new function ‘varNotFound_KeyError’: raises KeyError if a
-placeholder name is missing when filling the template. Disabled by default.
-(MO) NB - this change has been superceeded by ‘errorCheckers’</p>
-</li>
-<li><p class="first">Template.getUnknowns (new method): returns a list of Placeholder Names
-missing in the Search List. (MO) - this change has been superceeded by
-‘errorCheckers’</p>
-</li>
-<li><p class="first">made changes to Template.py, CodeGenerator.py, PlaceholderProcessor.py,
-and TagProcessor.py to enable customization of the placeholderStartToken so
-it can be set to any character sequence, rather than just the default ‘$’.
-This is configurable by the Template setting ‘placeholderStartToken’ (TR)</p>
-</li>
-<li><p class="first">fixed a small bug in PlaceholderProcessor.processTag() that prevented
-static caching (i.e. $*) of a value containing ‘’’ style quotes</p>
-</li>
-<li><p class="first">added #break and #continue (TR)</p>
-</li>
-<li><p class="first">fixed the relative path problem with #include when using Cheetah with WebKit
-(TR)</p>
-</li>
-<li><p class="first">implemented the #stop directive (TR)</p>
-</li>
-<li><p class="first">fixed a bug in the macro processing that prevented macros defined inside
-#includes from being visible at the top level (TR)</p>
-</li>
-<li><p class="first">fixed a bug in the handling of the setting ‘useAutocalling’ (TR)</p>
-</li>
-<li><p class="first">fixed some bugs in the handling of macros (TR)</p>
-</li>
-<li><p class="first">completed the transition to nested template #includes (TR)</p>
-</li>
-<li><p class="first">added direct #includes (TR)</p>
-</li>
-<li><p class="first">completed the transition to run-time evaluation (TR)</p>
-</li>
-<li><p class="first">renamed the .startServer() method of Template to .compile() (TR)</p>
-</li>
-<li><p class="first">renamed the ‘delayedStart’ setting as ‘delayedCompile’ (TR)</p>
-</li>
-<li><p class="first">added .redefineTemplateBlock as an alias to Template.defineTemplateBlock
-(TR)</p>
-</li>
-<li><p class="first">got relative path includes working with Webware and Cheetah.Servlet (TR)</p>
-</li>
-<li><p class="first">lots of changes in the docs (TR &amp; MO)</p>
-</li>
-<li><p class="first">implemented a C version of NameMapper (TR + CE)</p>
-</li>
-<li><p class="first">added the ‘errorCheckers’ framwork (TR)</p>
-</li>
-<li><p class="first">added the ‘formatters’ framework and the #formatter directive</p>
-</li>
-<li><p class="first">a major restructuring of the modules and internal API (TR)</p>
-</li>
-<li><p class="first">made sure that all the #directives with start and end tags are
-implemented in such a way that they won’t cause ‘maximum recursion’ limit
-errors if their content block is long. Simple regexes didn’t cut it in these
-cases. (TR)</p>
-<ul class="simple">
-<li>#macro</li>
-<li>multiline comments</li>
-<li>#data</li>
-<li>#block</li>
-<li>#raw</li>
-<li>the parsing of the core tags (the state-dependent ones) after they have been
-translated to the internal delimiters</li>
-</ul>
-</li>
-<li><p class="first">made a Template.shutdown() method for cleaning up reference cycles before a
-template object is deleted. (TR)</p>
-</li>
-<li><p class="first">made the parsing and processing of #macros() more robust (TR)</p>
-</li>
-<li><p class="first">implemented the file update checking mechanism (TR)
-NOTE, the syntax for the #include is now:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#include &lt;ARGS&gt; file = &lt;EXPR&gt;</span>
-<span class="o">...</span> <span class="n">uses</span> <span class="n">the</span> <span class="n">value</span> <span class="n">of</span> <span class="n">EXPR</span> <span class="k">as</span> <span class="n">the</span> <span class="n">path</span> <span class="n">of</span> <span class="n">the</span> <span class="n">file</span> <span class="n">to</span> <span class="n">include</span><span class="o">.</span>
-
-<span class="c1">#include &lt;ARGS&gt; &lt;EXPR&gt;</span>
-<span class="o">...</span> <span class="n">includes</span> <span class="n">the</span> <span class="n">value</span> <span class="n">of</span> <span class="n">the</span> <span class="n">EXPR</span>
-</pre></div>
-</div>
-<p>where &lt;ARGS&gt; is ‘raw’ or ‘direct’</p>
-</li>
-</ul>
-</div></blockquote>
-<p>0.9.7 (July 13, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>reimplemented the parsing of $placeholders using the Python tokenize module (TR)<ul>
-<li>now translates into Python code instead of going through NameMapper for
-each request</li>
-<li>supports arg lists and nested placeholders</li>
-<li>maintained support for autocalling of functions and methods,
-will do this serially for $func.otherFunc, etc.</li>
-</ul>
-</li>
-<li>reimplemented the #include and #raw directives using nested templates for
-parsed includes and string attributes of ‘Template’ to store raw text
-The support for file update monitoring of includes is still not implemented (TR)</li>
-<li>moved some stuff from __init__.py into CHANGES and TODO (TR)</li>
-<li>added a new command ‘sdist_docs’ to setup.py which rebuilds the docs
-when making a source distribution (TR)</li>
-<li>changed the name of the ./Cheetah dir to ./src (TR)</li>
-<li>fixed a bug in one of the code filters that was preventing commas from
-being used between $placeholders (TR)</li>
-<li>generalized the line ending regex for single-line comments (TR)</li>
-<li>corrected the spelling of ‘Delimiters’ throughout Cheetah (TR)</li>
-<li>made insertLines in Utilities.py more robust (Chuck)</li>
-<li>added key argument to raising some NotFound exceptions in NameMapper (Chuck)</li>
-<li>fixed strange bug involving missing templateObj parameter
-in PlaceholderProcessor.py(Chuck)</li>
-<li>expanded on the docs (Mike)</li>
-</ul>
-</div></blockquote>
-<p>0.9.6 (June 12, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed a bug in NameMapper that was preventing ‘obj.__class__.__name__’ from mapping (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.5 (June 10, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>implemented the #cache directive - see the mailing list (TR)</li>
-<li>reworked the handling of cached $placeholders and set $var to mean NO_CACHE,
-$*var to mean STATIC_CACHE, and $*15*var to mean TIMED_REFRESH_CACHE (TR)</li>
-<li>renamed Template._getValueForName as Template.mapName (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.4 (June 9, 2001)</p>
-<blockquote>
-<div><ul class="simple">
-<li>created a SettingsManager base class to handle settings for the Template class (TR)</li>
-<li>moved the HTML docs icons into the same dir as the HTML (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.3</p>
-<blockquote>
-<div><ul class="simple">
-<li>updated the User’s Guide Makefile. Builds HTML, PDF, and PS in the ./docs dir now. (TR)</li>
-<li>changed the refs to ‘Tavis Rudd’ in the docs to ‘The Cheetah Development Team’ (TR)</li>
-<li>added a few bits to the docs (TR)</li>
-<li>did some internal renaming so ‘nameMapperTags’ are referred as ‘placeholderTags’ (TR)</li>
-<li>added the #slurp directive (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.2</p>
-<blockquote>
-<div><ul class="simple">
-<li>got the PSP plugin working again. It still need test cases. (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.1</p>
-<blockquote>
-<div><ul class="simple">
-<li>Changed the name of the package to ‘Cheetah’ from TemplateServer (TR)</li>
-<li>Changed the name of the Server module and its TemplateServer class to ‘Template’ (TR)</li>
-<li>Changed the name of the ‘TScompile’ script to ‘cheetah-compile’ (TR)</li>
-<li>updated the docs (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.9.0</p>
-<blockquote>
-<div><ul class="simple">
-<li>changed the names and behaviour of the #parse and #include directives (TR)
-see the docs for more. (TR)</li>
-<li>changed #verbatim to #raw (TR)</li>
-<li>fixed a bug in Tests.py that caused an error on the first run. (TR)</li>
-<li>more docs (TR + MO)</li>
-<li>! all tests pass with Python 2.1 and 2.0 (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.8.4</p>
-<blockquote>
-<div><ul class="simple">
-<li>changed the #directive end tags to #end if instead of #/if and #end (TR)
-macro instead of #/macro (TR)</li>
-<li>more work on the User’s Guide (TR)</li>
-<li>fixed a bug in TScompile (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.8.3</p>
-<blockquote>
-<div><ul class="simple">
-<li>fixed a problem with the regexs that caused $vars and #directives at the (TR)
-very beginning of the template string not to match in Python 2.0 (TR)</li>
-<li>removed some Test cases that made invalid assumptions about the order (TR)
-of items in dictionaries. (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.8.2</p>
-<blockquote>
-<div><ul class="simple">
-<li>finished half of the User’s Guide (TR)</li>
-<li>fixed several small bugs (TR)</li>
-<li>added the #comment directive and removed the old &lt;# multiline comment tag #&gt; (TR)</li>
-<li>changed the explicit directive closure to /# from ;# (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.7.6</p>
-<blockquote>
-<div><ul class="simple">
-<li>several small bug fixes (TR)</li>
-<li>reimplemented the #block directive to avoid maximum recursion depth errors (TR)
-with large blocks. (TR)</li>
-<li>created many new test cases in the regression testing suite (TR)</li>
-<li>added an example site to the examples/ directory (TR)</li>
-<li>started the User’s Guide (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.7.5</p>
-<blockquote>
-<div><ul class="simple">
-<li>implemented the command-line compiler (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.7.3-4</p>
-<blockquote>
-<div><ul class="simple">
-<li>implemented the regression testing suite (TR)</li>
-<li>fixed a number of small bugs (TR)</li>
-</ul>
-</div></blockquote>
-<p>0.7.2</p>
-<blockquote>
-<div><ul class="simple">
-<li>implemented the #longMacro directive (TR)</li>
-</ul>
-</div></blockquote>
-<p>KEY TO INITIALS USED ABOVE:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">TR</span> <span class="o">-</span> <span class="n">Tavis</span> <span class="n">Rudd</span>
-<span class="n">MO</span> <span class="o">-</span> <span class="n">Mike</span> <span class="n">Orr</span>
-<span class="n">JJ</span> <span class="o">-</span> <span class="n">Shannon</span> <span class="s1">&#39;jj&#39;</span> <span class="n">Behrens</span>
-<span class="n">IB</span> <span class="o">-</span> <span class="n">Ian</span> <span class="n">Bicking</span>
-<span class="n">CE</span> <span class="o">-</span> <span class="n">Chuck</span> <span class="n">Esterbrook</span>
-<span class="n">MH</span> <span class="o">-</span> <span class="n">Mike</span> <span class="n">Halle</span>
-</pre></div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/py-modindex.html b/docs/html/py-modindex.html
deleted file mode 100644
index acf8834..0000000
--- a/docs/html/py-modindex.html
+++ /dev/null
@@ -1,406 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Python Module Index &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
-
-
-
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="#" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
-
- <h1>Python Module Index</h1>
-
- <div class="modindex-jumpbox">
- <a href="#cap-c"><strong>c</strong></a>
- </div>
-
- <table class="indextable modindextable">
- <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
- <tr class="cap" id="cap-c"><td></td><td>
- <strong>c</strong></td><td></td></tr>
- <tr>
- <td><img src="_static/minus.png" class="toggler"
- id="toggle-1" style="display: none" alt="-" /></td>
- <td>
- <a href="api/Cheetah.html#module-Cheetah"><code class="xref">Cheetah</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.CacheRegion.html#module-Cheetah.CacheRegion"><code class="xref">Cheetah.CacheRegion</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.CacheStore.html#module-Cheetah.CacheStore"><code class="xref">Cheetah.CacheStore</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.CheetahWrapper.html#module-Cheetah.CheetahWrapper"><code class="xref">Cheetah.CheetahWrapper</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.compat.html#module-Cheetah.compat"><code class="xref">Cheetah.compat</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Compiler.html#module-Cheetah.Compiler"><code class="xref">Cheetah.Compiler</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.convertTmplPathToModuleName.html#module-Cheetah.convertTmplPathToModuleName"><code class="xref">Cheetah.convertTmplPathToModuleName</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.DirectiveAnalyzer.html#module-Cheetah.DirectiveAnalyzer"><code class="xref">Cheetah.DirectiveAnalyzer</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Django.html#module-Cheetah.Django"><code class="xref">Cheetah.Django</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.DummyTransaction.html#module-Cheetah.DummyTransaction"><code class="xref">Cheetah.DummyTransaction</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.ErrorCatchers.html#module-Cheetah.ErrorCatchers"><code class="xref">Cheetah.ErrorCatchers</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.FileUtils.html#module-Cheetah.FileUtils"><code class="xref">Cheetah.FileUtils</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Filters.html#module-Cheetah.Filters"><code class="xref">Cheetah.Filters</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.ImportHooks.html#module-Cheetah.ImportHooks"><code class="xref">Cheetah.ImportHooks</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.ImportManager.html#module-Cheetah.ImportManager"><code class="xref">Cheetah.ImportManager</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Macros.html#module-Cheetah.Macros"><code class="xref">Cheetah.Macros</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Macros.I18n.html#module-Cheetah.Macros.I18n"><code class="xref">Cheetah.Macros.I18n</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.NameMapper.html#module-Cheetah.NameMapper"><code class="xref">Cheetah.NameMapper</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Parser.html#module-Cheetah.Parser"><code class="xref">Cheetah.Parser</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Servlet.html#module-Cheetah.Servlet"><code class="xref">Cheetah.Servlet</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.SettingsManager.html#module-Cheetah.SettingsManager"><code class="xref">Cheetah.SettingsManager</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.SourceReader.html#module-Cheetah.SourceReader"><code class="xref">Cheetah.SourceReader</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Template.html#module-Cheetah.Template"><code class="xref">Cheetah.Template</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.TemplateCmdLineIface.html#module-Cheetah.TemplateCmdLineIface"><code class="xref">Cheetah.TemplateCmdLineIface</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Templates.html#module-Cheetah.Templates"><code class="xref">Cheetah.Templates</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Templates.SkeletonPage.html#module-Cheetah.Templates.SkeletonPage"><code class="xref">Cheetah.Templates.SkeletonPage</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.html#module-Cheetah.Tests"><code class="xref">Cheetah.Tests</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Analyzer.html#module-Cheetah.Tests.Analyzer"><code class="xref">Cheetah.Tests.Analyzer</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Boinker.html#module-Cheetah.Tests.Boinker"><code class="xref">Cheetah.Tests.Boinker</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.CheetahWrapper.html#module-Cheetah.Tests.CheetahWrapper"><code class="xref">Cheetah.Tests.CheetahWrapper</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Cheps.html#module-Cheetah.Tests.Cheps"><code class="xref">Cheetah.Tests.Cheps</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Filters.html#module-Cheetah.Tests.Filters"><code class="xref">Cheetah.Tests.Filters</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Misc.html#module-Cheetah.Tests.Misc"><code class="xref">Cheetah.Tests.Misc</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.NameMapper.html#module-Cheetah.Tests.NameMapper"><code class="xref">Cheetah.Tests.NameMapper</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.NameMapper_pure.html#module-Cheetah.Tests.NameMapper_pure"><code class="xref">Cheetah.Tests.NameMapper_pure</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Parser.html#module-Cheetah.Tests.Parser"><code class="xref">Cheetah.Tests.Parser</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Performance.html#module-Cheetah.Tests.Performance"><code class="xref">Cheetah.Tests.Performance</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Pinger.html#module-Cheetah.Tests.Pinger"><code class="xref">Cheetah.Tests.Pinger</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Regressions.html#module-Cheetah.Tests.Regressions"><code class="xref">Cheetah.Tests.Regressions</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.SyntaxAndOutput.html#module-Cheetah.Tests.SyntaxAndOutput"><code class="xref">Cheetah.Tests.SyntaxAndOutput</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Template.html#module-Cheetah.Tests.Template"><code class="xref">Cheetah.Tests.Template</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Test.html#module-Cheetah.Tests.Test"><code class="xref">Cheetah.Tests.Test</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.Unicode.html#module-Cheetah.Tests.Unicode"><code class="xref">Cheetah.Tests.Unicode</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tests.xmlrunner.html#module-Cheetah.Tests.xmlrunner"><code class="xref">Cheetah.Tests.xmlrunner</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.html#module-Cheetah.Tools"><code class="xref">Cheetah.Tools</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.CGITemplate.html#module-Cheetah.Tools.CGITemplate"><code class="xref">Cheetah.Tools.CGITemplate</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.MondoReport.html#module-Cheetah.Tools.MondoReport"><code class="xref">Cheetah.Tools.MondoReport</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.RecursiveNull.html#module-Cheetah.Tools.RecursiveNull"><code class="xref">Cheetah.Tools.RecursiveNull</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.SiteHierarchy.html#module-Cheetah.Tools.SiteHierarchy"><code class="xref">Cheetah.Tools.SiteHierarchy</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.turbocheetah.html#module-Cheetah.Tools.turbocheetah"><code class="xref">Cheetah.Tools.turbocheetah</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.turbocheetah.cheetahsupport.html#module-Cheetah.Tools.turbocheetah.cheetahsupport"><code class="xref">Cheetah.Tools.turbocheetah.cheetahsupport</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.turbocheetah.tests.html#module-Cheetah.Tools.turbocheetah.tests"><code class="xref">Cheetah.Tools.turbocheetah.tests</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Tools.turbocheetah.tests.test_template.html#module-Cheetah.Tools.turbocheetah.tests.test_template"><code class="xref">Cheetah.Tools.turbocheetah.tests.test_template</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Unspecified.html#module-Cheetah.Unspecified"><code class="xref">Cheetah.Unspecified</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Utils.html#module-Cheetah.Utils"><code class="xref">Cheetah.Utils</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Utils.htmlDecode.html#module-Cheetah.Utils.htmlDecode"><code class="xref">Cheetah.Utils.htmlDecode</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Utils.htmlEncode.html#module-Cheetah.Utils.htmlEncode"><code class="xref">Cheetah.Utils.htmlEncode</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Utils.Indenter.html#module-Cheetah.Utils.Indenter"><code class="xref">Cheetah.Utils.Indenter</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Utils.Misc.html#module-Cheetah.Utils.Misc"><code class="xref">Cheetah.Utils.Misc</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Utils.WebInputMixin.html#module-Cheetah.Utils.WebInputMixin"><code class="xref">Cheetah.Utils.WebInputMixin</code></a></td><td>
- <em></em></td></tr>
- <tr class="cg-1">
- <td></td>
- <td>&#160;&#160;&#160;
- <a href="api/Cheetah.Version.html#module-Cheetah.Version"><code class="xref">Cheetah.Version</code></a></td><td>
- <em></em></td></tr>
- </table>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="#" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/recipes/inheritance.html b/docs/html/recipes/inheritance.html
deleted file mode 100644
index 5c0a119..0000000
--- a/docs/html/recipes/inheritance.html
+++ /dev/null
@@ -1,179 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Basic Inheritance &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Precompiled Templates" href="precompiled.html" />
- <link rel="prev" title="Cheetah Recipes" href="../documentation.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="precompiled.html" title="Precompiled Templates"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="../documentation.html" title="Cheetah Recipes"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../documentation.html" accesskey="U">Cheetah Recipes</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Basic Inheritance</a><ul>
-<li><a class="reference internal" href="#introduction">Introduction</a></li>
-<li><a class="reference internal" href="#cheetah-inheriting-from-python">Cheetah inheriting from Python</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="../documentation.html"
- title="previous chapter">Cheetah Recipes</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="precompiled.html"
- title="next chapter">Precompiled Templates</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/recipes/inheritance.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="basic-inheritance">
-<h1>Basic Inheritance<a class="headerlink" href="#basic-inheritance" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="introduction">
-<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah, like Python, is an object-oriented language if you so choose to
-use it in that fashion. That is to say that you can use Cheetah in with
-object-oriented principles <em>or</em> you can use Cheetah in a strictly functional
-sense, like Python, Cheetah does not place restrictions on these barriers.</p>
-<p>While Cheetah is not strictly Python, it was designed as such to interoperate,
-particularly with the notion of classes, with Python itself. In effect you can
-define Python classes that inherit and extend from Cheetah-derived classes and
-vice versa. For this, Cheetah defines a few <strong>directives</strong> (denoted with the <cite>#</cite>
-hash-mark) that are of some help, the most important one being the <cite>#extends</cite>
-directive, with others playing important roles like <cite>#import</cite>, <cite>#attr</cite> and <cite>#super</cite></p>
-<p>In this recipe/tutorial I intend to explain and define a few key inheritance
-patterns with Cheetah, being:</p>
-<ul class="simple">
-<li>A Cheetah Template inheriting from Python</li>
-<li>Python inheriting from a Cheetah Template</li>
-<li>Cheetah Templates and “<em>mixins</em>”</li>
-</ul>
-<p>This document also operates on the assumption that the reader is at least
-somewhat familiar with the basic tenets of object-oriented programming in
-Python.</p>
-</div>
-<div class="section" id="cheetah-inheriting-from-python">
-<h2>Cheetah inheriting from Python<a class="headerlink" href="#cheetah-inheriting-from-python" title="Permalink to this headline">¶</a></h2>
-<p>Whether or not you are aware of it, Cheetah templates are always inheriting from
-a Python class by default. Unless otherwise denoted, Cheetah templates are compiled
-to Python classes that subclass from the <cite>Cheetah.Template.Template</cite> class.</p>
-<p>What if you would like to introduce your own Template base class? Easily acheived by
-defining your own Template class in a Python module, for example:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">Cheetah.Template</span>
-
-<span class="k">class</span> <span class="nc">CookbookTemplate</span><span class="p">(</span><span class="n">Cheetah</span><span class="o">.</span><span class="n">Template</span><span class="o">.</span><span class="n">Template</span><span class="p">):</span>
- <span class="n">_page</span> <span class="o">=</span> <span class="s1">&#39;Cookbook&#39;</span>
- <span class="n">author</span> <span class="o">=</span> <span class="s1">&#39;R. Tyler Ballance&#39;</span>
- <span class="k">def</span> <span class="nf">pageName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_page</span> <span class="ow">or</span> <span class="s1">&#39;Unknown&#39;</span>
-</pre></div>
-</div>
-<p><strong>Figure 1. cookbook.py</strong></p>
-<p>For this example, I want all my subclasses of the <cite>CookbookTemplate</cite> to define a
-page author which will be used in some shared rendering code, to accomplish this
-my templates will need to subclass from <cite>CookbookTemplate</cite> explicitly instead of
-implicitly subclassing from <cite>Cheetah.Template.Template</cite>:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#import cookbook</span>
-<span class="c1">#extends cookbook.CookbookTemplate</span>
-<span class="c1">#attr author = &#39;Tavis Rudd&#39;</span>
-
-<span class="c1">## The rest of my recipe template would be below</span>
-</pre></div>
-</div>
-<p><strong>Figure 2. recipe1.tmpl</strong></p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="precompiled.html" title="Precompiled Templates"
- >next</a> |</li>
- <li class="right" >
- <a href="../documentation.html" title="Cheetah Recipes"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../documentation.html" >Cheetah Recipes</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/recipes/precompiled.html b/docs/html/recipes/precompiled.html
deleted file mode 100644
index 06f0ce1..0000000
--- a/docs/html/recipes/precompiled.html
+++ /dev/null
@@ -1,180 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Precompiled Templates &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="@staticmethod and @classmethod" href="staticmethod.html" />
- <link rel="prev" title="Basic Inheritance" href="inheritance.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="staticmethod.html" title="@staticmethod and @classmethod"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="inheritance.html" title="Basic Inheritance"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../documentation.html" accesskey="U">Cheetah Recipes</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Precompiled Templates</a><ul>
-<li><a class="reference internal" href="#why-bother">Why bother?</a></li>
-<li><a class="reference internal" href="#basic-pre-compilation">Basic Pre-compilation</a></li>
-<li><a class="reference internal" href="#importing-and-lookup">Importing and lookup</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="inheritance.html"
- title="previous chapter">Basic Inheritance</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="staticmethod.html"
- title="next chapter">&#64;staticmethod and &#64;classmethod</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/recipes/precompiled.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="precompiled-templates">
-<h1>Precompiled Templates<a class="headerlink" href="#precompiled-templates" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="why-bother">
-<h2>Why bother?<a class="headerlink" href="#why-bother" title="Permalink to this headline">¶</a></h2>
-<p>Since Cheetah supports two basic modes: dynamic and precompiled templates, you have
-a lot of options when it comes to utilizing Cheetah, particularly in web environments.</p>
-<p>There is added speed to be gained by using pre-compiled templates, especially when
-using mod_python with Apache. Precompiling your templates means Apache/mod_python
-can load your template’s generated module into memory and then execution is only
-limited by the speed of the Python being executed, and not the Cheetah compiler.
-You can further optimize things by then pre-compiling the generated Python files
-(.py) down to Python byte-code (.pyc) so save cycles interpreting the Python.</p>
-</div>
-<div class="section" id="basic-pre-compilation">
-<h2>Basic Pre-compilation<a class="headerlink" href="#basic-pre-compilation" title="Permalink to this headline">¶</a></h2>
-<p>Suppose you have a template that looks something like this:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#attr title = &quot;This is my Template&quot;
-&lt;html&gt;
- &lt;head&gt;
- &lt;title&gt;\${title}&lt;/title&gt;
- &lt;/head&gt;
- &lt;body&gt;
- Hello \${who}!
- &lt;/body&gt;
-&lt;/html&gt;
-</pre></div>
-</div>
-<p><strong>Figure 1. hello.tmpl</strong></p>
-<p>In order to compile this down to a Python file, you need to only execute the
-<cite>cheetah compile hello.tmpl</cite> command. The results will be a Python file (.py)
-which you can then treat as any other Python module in your code base.</p>
-</div>
-<div class="section" id="importing-and-lookup">
-<h2>Importing and lookup<a class="headerlink" href="#importing-and-lookup" title="Permalink to this headline">¶</a></h2>
-<p>Typically for the template in <em>Figure 1</em>, I could easily import it post-compilation
-as any other Python module:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">templates</span> <span class="k">import</span> <span class="n">hello</span>
-
-<span class="k">def</span> <span class="nf">myMethod</span><span class="p">():</span>
- <span class="n">tmpl</span> <span class="o">=</span> <span class="n">hello</span><span class="o">.</span><span class="n">hello</span><span class="p">(</span><span class="n">searchList</span><span class="o">=</span><span class="p">[{</span><span class="s1">&#39;who&#39;</span> <span class="p">:</span> <span class="s1">&#39;world&#39;</span><span class="p">}])</span>
- <span class="n">results</span> <span class="o">=</span> <span class="n">tmpl</span><span class="o">.</span><span class="n">respond</span><span class="p">()</span>
-</pre></div>
-</div>
-<p><strong>Figure 2. runner.py</strong></p>
-<p><em>Note:</em> If you use the <cite>#implements</cite> directive, <cite>respond</cite> may not be your “main
-method” for executing the Cheetah template. You can adjust the example above in
-<em>Figure 2</em> by using <cite>getattr()</cite> to make the lookup of the main method dynamic:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">myMethod</span><span class="p">():</span>
- <span class="n">tmpl</span> <span class="o">=</span> <span class="n">hello</span><span class="o">.</span><span class="n">hello</span><span class="p">(</span><span class="n">searchList</span><span class="o">=</span><span class="p">[{</span><span class="s1">&#39;who&#39;</span> <span class="p">:</span> <span class="s1">&#39;world&#39;</span><span class="p">}])</span>
- <span class="n">mainMethod</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">tmpl</span><span class="p">,</span> <span class="s1">&#39;_mainCheetahMethod_for_</span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">tmpl</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
- <span class="n">results</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">tmpl</span><span class="p">,</span> <span class="n">mainMethod</span><span class="p">)()</span>
-</pre></div>
-</div>
-<p><strong>Figure 3. Dynamic runner.py</strong></p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="staticmethod.html" title="@staticmethod and @classmethod"
- >next</a> |</li>
- <li class="right" >
- <a href="inheritance.html" title="Basic Inheritance"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../documentation.html" >Cheetah Recipes</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/recipes/staticmethod.html b/docs/html/recipes/staticmethod.html
deleted file mode 100644
index d366e52..0000000
--- a/docs/html/recipes/staticmethod.html
+++ /dev/null
@@ -1,163 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>@staticmethod and @classmethod &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Writing a “Recipe”" href="writing_a_recipe.html" />
- <link rel="prev" title="Precompiled Templates" href="precompiled.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="writing_a_recipe.html" title="Writing a “Recipe”"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="precompiled.html" title="Precompiled Templates"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../documentation.html" accesskey="U">Cheetah Recipes</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="precompiled.html"
- title="previous chapter">Precompiled Templates</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="writing_a_recipe.html"
- title="next chapter">Writing a “Recipe”</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/recipes/staticmethod.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="staticmethod-and-classmethod">
-<h1>&#64;staticmethod and &#64;classmethod<a class="headerlink" href="#staticmethod-and-classmethod" title="Permalink to this headline">¶</a></h1>
-<p>Refer the Python’s documentation if you’re unfamiliar with either
-<a class="reference external" href="http://docs.python.org/library/functions.html#staticmethod">&#64;staticmethod</a> or
-<a class="reference external" href="http://docs.python.org/library/functions.html#classmethod">&#64;classmethod</a> and their uses in Python, as they
-pertain to their uses in Cheetah as well. Using <a class="reference external" href="http://docs.python.org/library/functions.html#staticmethod">&#64;staticmethod</a> it’s
-trivial to create <em>utility templates</em> which are common when using
-Cheetah for web development. These <em>utility templates</em> might contain
-a number of small functions which generate useful snippets of markup.</p>
-<p>For example:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def copyright()
- #import time
- &amp;copy; CheetahCorp, Inc. $time.strftime(&#39;%Y&#39;, time.gmtime())
-#end def
-</pre></div>
-</div>
-<p><strong>Figure 1, util.tmpl</strong></p>
-<p>Prior to version <strong>v2.2.0</strong> of Cheetah, there wasn’t really an easy means
-of filling templates with bunches of these small utility functions. In
-<strong>v2.2.0</strong> however, you can decorate these methods with <cite>#&#64;staticmethod</cite>
-and use “proper” Python syntax for calling them, <strong>fig 1</strong> revisited:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#@staticmethod
-#def copyright()
- #import time
- &amp;copy; CheetahCorp, Inc. $time.strftime(&#39;%Y&#39;, time.gmtime())
-#end def
-</pre></div>
-</div>
-<p><strong>Figure 1.1, util.tmpl</strong></p>
-<p>With the addition of the <a class="reference external" href="http://docs.python.org/library/functions.html#staticmethod">&#64;staticmethod</a> decorator, the <cite>copyright()</cite>
-function can now be used without instantiating an instance of the <cite>util</cite>
-template class. In effect:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#from util import util
-
-&lt;strong&gt;This is my page&lt;/strong&gt;
-&lt;br/&gt;
-&lt;hr noshade/&gt;
-$util.copyright()
-</pre></div>
-</div>
-<p><strong>Figure 2, index.tmpl</strong></p>
-<p>This approach is however no means to structure anything complex,
-<a class="reference external" href="http://docs.python.org/library/functions.html#staticmethod">&#64;staticmethod</a> and <a class="reference external" href="http://docs.python.org/library/functions.html#classmethod">&#64;classmethod</a> use in Cheetah is not meant as a
-replacement for properly structured class hierarchies (which
-Cheetah supports). That said if you are building a web application
-<a class="reference external" href="http://docs.python.org/library/functions.html#staticmethod">&#64;staticmethod</a>/<a class="reference external" href="http://docs.python.org/library/functions.html#classmethod">&#64;classmethod</a> are quite useful for the little snippets
-of markup, etc that are needed (Google AdSense blocks, footers,
-banners, etc).</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="writing_a_recipe.html" title="Writing a “Recipe”"
- >next</a> |</li>
- <li class="right" >
- <a href="precompiled.html" title="Precompiled Templates"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../documentation.html" >Cheetah Recipes</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/recipes/writing_a_recipe.html b/docs/html/recipes/writing_a_recipe.html
deleted file mode 100644
index 91d9f26..0000000
--- a/docs/html/recipes/writing_a_recipe.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Writing a “Recipe” &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Cheetah Roadmap" href="../roadmap.html" />
- <link rel="prev" title="@staticmethod and @classmethod" href="staticmethod.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="../roadmap.html" title="Cheetah Roadmap"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="staticmethod.html" title="@staticmethod and @classmethod"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../documentation.html" accesskey="U">Cheetah Recipes</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="staticmethod.html"
- title="previous chapter">&#64;staticmethod and &#64;classmethod</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="../roadmap.html"
- title="next chapter">Cheetah Roadmap</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/recipes/writing_a_recipe.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="writing-a-recipe">
-<h1>Writing a “Recipe”<a class="headerlink" href="#writing-a-recipe" title="Permalink to this headline">¶</a></h1>
-<p>This document isn’t quite there yet ;)</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="../roadmap.html" title="Cheetah Roadmap"
- >next</a> |</li>
- <li class="right" >
- <a href="staticmethod.html" title="@staticmethod and @classmethod"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="../documentation.html" >Cheetah Recipes</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/roadmap.html b/docs/html/roadmap.html
deleted file mode 100644
index d6465d9..0000000
--- a/docs/html/roadmap.html
+++ /dev/null
@@ -1,133 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah Roadmap &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="search.html" />
- <link rel="next" title="Cheetah Developer’s Guide" href="dev_guide/index.html" />
- <link rel="prev" title="Writing a “Recipe”" href="recipes/writing_a_recipe.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="dev_guide/index.html" title="Cheetah Developer’s Guide"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="recipes/writing_a_recipe.html" title="Writing a “Recipe”"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah Roadmap</a><ul>
-<li><a class="reference internal" href="#cheetah-v3-0">Cheetah v3.0</a></li>
-<li><a class="reference internal" href="#cheetah-v2">Cheetah v2</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="recipes/writing_a_recipe.html"
- title="previous chapter">Writing a “Recipe”</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="dev_guide/index.html"
- title="next chapter">Cheetah Developer’s Guide</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="_sources/roadmap.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah-roadmap">
-<h1>Cheetah Roadmap<a class="headerlink" href="#cheetah-roadmap" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="cheetah-v3-0">
-<h2>Cheetah v3.0<a class="headerlink" href="#cheetah-v3-0" title="Permalink to this headline">¶</a></h2>
-<p><em>in development</em></p>
-<p>Cheetah v3.0 is for support for Python 2.7 and Python 3.</p>
-</div>
-<div class="section" id="cheetah-v2">
-<h2>Cheetah v2<a class="headerlink" href="#cheetah-v2" title="Permalink to this headline">¶</a></h2>
-<p>Old versions of Cheetah are no longer supported.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="dev_guide/index.html" title="Cheetah Developer’s Guide"
- >next</a> |</li>
- <li class="right" >
- <a href="recipes/writing_a_recipe.html" title="Writing a “Recipe”"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/search.html b/docs/html/search.html
deleted file mode 100644
index 7bd82c3..0000000
--- a/docs/html/search.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Search &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: './',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="_static/jquery.js"></script>
- <script type="text/javascript" src="_static/underscore.js"></script>
- <script type="text/javascript" src="_static/doctools.js"></script>
- <script type="text/javascript" src="_static/searchtools.js"></script>
- <link rel="index" title="Index" href="genindex.html" />
- <link rel="search" title="Search" href="#" />
- <script type="text/javascript">
- jQuery(function() { Search.loadIndex("searchindex.js"); });
- </script>
-
- <script type="text/javascript" id="searchindexloader"></script>
-
-
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <h1 id="search-documentation">Search</h1>
- <div id="fallback" class="admonition warning">
- <script type="text/javascript">$('#fallback').hide();</script>
- <p>
- Please activate JavaScript to enable the search
- functionality.
- </p>
- </div>
- <p>
- From here you can search these documents. Enter your search
- words into the box below and click "search". Note that the search
- function will automatically search for all of the words. Pages
- containing fewer words won't appear in the result list.
- </p>
- <form action="" method="get">
- <input type="text" name="q" value="" />
- <input type="submit" value="search" />
- <span id="search-progress" style="padding-left: 10px"></span>
- </form>
-
- <div id="search-results">
-
- </div>
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="nav-item nav-item-0"><a href="index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js
deleted file mode 100644
index c6a7718..0000000
--- a/docs/html/searchindex.js
+++ /dev/null
@@ -1 +0,0 @@
-Search.setIndex({docnames:["api/Cheetah","api/Cheetah.CacheRegion","api/Cheetah.CacheStore","api/Cheetah.CheetahWrapper","api/Cheetah.Compiler","api/Cheetah.DirectiveAnalyzer","api/Cheetah.Django","api/Cheetah.DummyTransaction","api/Cheetah.ErrorCatchers","api/Cheetah.FileUtils","api/Cheetah.Filters","api/Cheetah.ImportHooks","api/Cheetah.ImportManager","api/Cheetah.Macros","api/Cheetah.Macros.I18n","api/Cheetah.NameMapper","api/Cheetah.Parser","api/Cheetah.Servlet","api/Cheetah.SettingsManager","api/Cheetah.SourceReader","api/Cheetah.Template","api/Cheetah.TemplateCmdLineIface","api/Cheetah.Templates","api/Cheetah.Templates.SkeletonPage","api/Cheetah.Tests","api/Cheetah.Tests.Analyzer","api/Cheetah.Tests.Boinker","api/Cheetah.Tests.CheetahWrapper","api/Cheetah.Tests.Cheps","api/Cheetah.Tests.Filters","api/Cheetah.Tests.Misc","api/Cheetah.Tests.NameMapper","api/Cheetah.Tests.NameMapper_pure","api/Cheetah.Tests.Parser","api/Cheetah.Tests.Performance","api/Cheetah.Tests.Pinger","api/Cheetah.Tests.Regressions","api/Cheetah.Tests.SyntaxAndOutput","api/Cheetah.Tests.Template","api/Cheetah.Tests.Test","api/Cheetah.Tests.Unicode","api/Cheetah.Tests.xmlrunner","api/Cheetah.Tools","api/Cheetah.Tools.CGITemplate","api/Cheetah.Tools.MondoReport","api/Cheetah.Tools.RecursiveNull","api/Cheetah.Tools.SiteHierarchy","api/Cheetah.Tools.turbocheetah","api/Cheetah.Tools.turbocheetah.cheetahsupport","api/Cheetah.Tools.turbocheetah.tests","api/Cheetah.Tools.turbocheetah.tests.test_template","api/Cheetah.Unspecified","api/Cheetah.Utils","api/Cheetah.Utils.Indenter","api/Cheetah.Utils.Misc","api/Cheetah.Utils.WebInputMixin","api/Cheetah.Utils.htmlDecode","api/Cheetah.Utils.htmlEncode","api/Cheetah.Utils.statprof","api/Cheetah.Version","api/Cheetah.compat","api/Cheetah.convertTmplPathToModuleName","api/modules","authors","chep","cheps/1_chep","cheps/2_import","cheps/3_super","dev_guide/bnf","dev_guide/cache","dev_guide/comments","dev_guide/compiler","dev_guide/design","dev_guide/errorHandling","dev_guide/files","dev_guide/flowControl","dev_guide/history","dev_guide/index","dev_guide/inheritanceEtc","dev_guide/introduction","dev_guide/output","dev_guide/parser","dev_guide/parserInstructions","dev_guide/patching","dev_guide/placeholders","dev_guide/pyModules","dev_guide/safeDelegation","dev_guide/template","developers","documentation","download","index","news","news2","recipes/inheritance","recipes/precompiled","recipes/staticmethod","recipes/writing_a_recipe","roadmap","users_guide/comments","users_guide/comparisons","users_guide/editors","users_guide/errorHandling","users_guide/examples","users_guide/flowControl","users_guide/gettingStarted","users_guide/glossary","users_guide/index","users_guide/inheritanceEtc","users_guide/intro","users_guide/language","users_guide/libraries","users_guide/links","users_guide/nonHtml","users_guide/otherHtml","users_guide/output","users_guide/parserInstructions","users_guide/tipsAndTricks","users_guide/webware"],envversion:52,filenames:["api/Cheetah.rst","api/Cheetah.CacheRegion.rst","api/Cheetah.CacheStore.rst","api/Cheetah.CheetahWrapper.rst","api/Cheetah.Compiler.rst","api/Cheetah.DirectiveAnalyzer.rst","api/Cheetah.Django.rst","api/Cheetah.DummyTransaction.rst","api/Cheetah.ErrorCatchers.rst","api/Cheetah.FileUtils.rst","api/Cheetah.Filters.rst","api/Cheetah.ImportHooks.rst","api/Cheetah.ImportManager.rst","api/Cheetah.Macros.rst","api/Cheetah.Macros.I18n.rst","api/Cheetah.NameMapper.rst","api/Cheetah.Parser.rst","api/Cheetah.Servlet.rst","api/Cheetah.SettingsManager.rst","api/Cheetah.SourceReader.rst","api/Cheetah.Template.rst","api/Cheetah.TemplateCmdLineIface.rst","api/Cheetah.Templates.rst","api/Cheetah.Templates.SkeletonPage.rst","api/Cheetah.Tests.rst","api/Cheetah.Tests.Analyzer.rst","api/Cheetah.Tests.Boinker.rst","api/Cheetah.Tests.CheetahWrapper.rst","api/Cheetah.Tests.Cheps.rst","api/Cheetah.Tests.Filters.rst","api/Cheetah.Tests.Misc.rst","api/Cheetah.Tests.NameMapper.rst","api/Cheetah.Tests.NameMapper_pure.rst","api/Cheetah.Tests.Parser.rst","api/Cheetah.Tests.Performance.rst","api/Cheetah.Tests.Pinger.rst","api/Cheetah.Tests.Regressions.rst","api/Cheetah.Tests.SyntaxAndOutput.rst","api/Cheetah.Tests.Template.rst","api/Cheetah.Tests.Test.rst","api/Cheetah.Tests.Unicode.rst","api/Cheetah.Tests.xmlrunner.rst","api/Cheetah.Tools.rst","api/Cheetah.Tools.CGITemplate.rst","api/Cheetah.Tools.MondoReport.rst","api/Cheetah.Tools.RecursiveNull.rst","api/Cheetah.Tools.SiteHierarchy.rst","api/Cheetah.Tools.turbocheetah.rst","api/Cheetah.Tools.turbocheetah.cheetahsupport.rst","api/Cheetah.Tools.turbocheetah.tests.rst","api/Cheetah.Tools.turbocheetah.tests.test_template.rst","api/Cheetah.Unspecified.rst","api/Cheetah.Utils.rst","api/Cheetah.Utils.Indenter.rst","api/Cheetah.Utils.Misc.rst","api/Cheetah.Utils.WebInputMixin.rst","api/Cheetah.Utils.htmlDecode.rst","api/Cheetah.Utils.htmlEncode.rst","api/Cheetah.Utils.statprof.rst","api/Cheetah.Version.rst","api/Cheetah.compat.rst","api/Cheetah.convertTmplPathToModuleName.rst","api/modules.rst","authors.rst","chep.rst","cheps/1_chep.rst","cheps/2_import.rst","cheps/3_super.rst","dev_guide/bnf.rst","dev_guide/cache.rst","dev_guide/comments.rst","dev_guide/compiler.rst","dev_guide/design.rst","dev_guide/errorHandling.rst","dev_guide/files.rst","dev_guide/flowControl.rst","dev_guide/history.rst","dev_guide/index.rst","dev_guide/inheritanceEtc.rst","dev_guide/introduction.rst","dev_guide/output.rst","dev_guide/parser.rst","dev_guide/parserInstructions.rst","dev_guide/patching.rst","dev_guide/placeholders.rst","dev_guide/pyModules.rst","dev_guide/safeDelegation.rst","dev_guide/template.rst","developers.rst","documentation.rst","download.rst","index.rst","news.rst","news2.rst","recipes/inheritance.rst","recipes/precompiled.rst","recipes/staticmethod.rst","recipes/writing_a_recipe.rst","roadmap.rst","users_guide/comments.rst","users_guide/comparisons.rst","users_guide/editors.rst","users_guide/errorHandling.rst","users_guide/examples.rst","users_guide/flowControl.rst","users_guide/gettingStarted.rst","users_guide/glossary.rst","users_guide/index.rst","users_guide/inheritanceEtc.rst","users_guide/intro.rst","users_guide/language.rst","users_guide/libraries.rst","users_guide/links.rst","users_guide/nonHtml.rst","users_guide/otherHtml.rst","users_guide/output.rst","users_guide/parserInstructions.rst","users_guide/tipsAndTricks.rst","users_guide/webware.rst"],objects:{"":{Cheetah:[0,0,0,"-"]},"Cheetah.CacheRegion":{CacheItem:[1,1,1,""],CacheRegion:[1,1,1,""]},"Cheetah.CacheRegion.CacheItem":{clear:[1,2,1,""],getData:[1,2,1,""],getExpiryTime:[1,2,1,""],getRefreshTime:[1,2,1,""],hasExpired:[1,2,1,""],renderOutput:[1,2,1,""],setData:[1,2,1,""],setExpiryTime:[1,2,1,""]},"Cheetah.CacheRegion.CacheRegion":{clear:[1,2,1,""],getCacheItem:[1,2,1,""],isNew:[1,2,1,""]},"Cheetah.CacheStore":{AbstractCacheStore:[2,1,1,""],Error:[2,3,1,""],MemcachedCacheStore:[2,1,1,""],MemoryCacheStore:[2,1,1,""]},"Cheetah.CacheStore.AbstractCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],set:[2,2,1,""]},"Cheetah.CacheStore.MemcachedCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],clear:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],servers:[2,4,1,""],set:[2,2,1,""]},"Cheetah.CacheStore.MemoryCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],clear:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],set:[2,2,1,""]},"Cheetah.CheetahWrapper":{Bundle:[3,1,1,""],CheetahWrapper:[3,1,1,""],Error:[3,3,1,""],fprintfMessage:[3,5,1,""],usage:[3,5,1,""]},"Cheetah.CheetahWrapper.CheetahWrapper":{BACKUP_SUFFIX:[3,4,1,""],MAKE_BACKUPS:[3,4,1,""],chatter:[3,2,1,""],compile:[3,2,1,""],debug:[3,2,1,""],error:[3,2,1,""],fill:[3,2,1,""],help:[3,2,1,""],main:[3,2,1,""],options:[3,2,1,""],parseOpts:[3,2,1,""],test:[3,2,1,""],version:[3,2,1,""],warn:[3,2,1,""]},"Cheetah.Compiler":{AutoClassCompiler:[4,1,1,""],AutoMethodCompiler:[4,1,1,""],ClassCompiler:[4,1,1,""],Compiler:[4,4,1,""],Error:[4,3,1,""],GenUtils:[4,1,1,""],MethodCompiler:[4,1,1,""],ModuleCompiler:[4,1,1,""]},"Cheetah.Compiler.AutoMethodCompiler":{addMethArg:[4,2,1,""],addStop:[4,2,1,""],cleanupState:[4,2,1,""],isClassMethod:[4,2,1,""],isStaticMethod:[4,2,1,""],methodSignature:[4,2,1,""]},"Cheetah.Compiler.ClassCompiler":{addAttribute:[4,2,1,""],addChunkToInit:[4,2,1,""],addClassDocString:[4,2,1,""],addDecorator:[4,2,1,""],addErrorCatcherCall:[4,2,1,""],addSuper:[4,2,1,""],attributes:[4,2,1,""],classDef:[4,2,1,""],classDocstring:[4,2,1,""],className:[4,2,1,""],classSignature:[4,2,1,""],cleanupState:[4,2,1,""],closeBlock:[4,2,1,""],closeDef:[4,2,1,""],methodCompilerClass:[4,4,1,""],methodCompilerClassForInit:[4,4,1,""],methodDefs:[4,2,1,""],setBaseClass:[4,2,1,""],setClassName:[4,2,1,""],setMainMethodArgs:[4,2,1,""],setMainMethodName:[4,2,1,""],setting:[4,2,1,""],startMethodDef:[4,2,1,""],wrapClassDef:[4,2,1,""]},"Cheetah.Compiler.GenUtils":{addGetTextVar:[4,2,1,""],genCacheInfo:[4,2,1,""],genCacheInfoFromArgList:[4,2,1,""],genCheetahVar:[4,2,1,""],genNameMapperVar:[4,2,1,""],genPlainVar:[4,2,1,""],genTimeInterval:[4,2,1,""]},"Cheetah.Compiler.MethodCompiler":{addAssert:[4,2,1,""],addBreak:[4,2,1,""],addChunk:[4,2,1,""],addClosure:[4,2,1,""],addContinue:[4,2,1,""],addDel:[4,2,1,""],addEcho:[4,2,1,""],addElif:[4,2,1,""],addElse:[4,2,1,""],addExcept:[4,2,1,""],addFilteredChunk:[4,2,1,""],addFinally:[4,2,1,""],addFor:[4,2,1,""],addIf:[4,2,1,""],addInclude:[4,2,1,""],addIndentingDirective:[4,2,1,""],addMethComment:[4,2,1,""],addMethDocString:[4,2,1,""],addOneLineIf:[4,2,1,""],addPSP:[4,2,1,""],addPass:[4,2,1,""],addPlaceholder:[4,2,1,""],addRaise:[4,2,1,""],addRawText:[4,2,1,""],addReIndentingDirective:[4,2,1,""],addRepeat:[4,2,1,""],addReturn:[4,2,1,""],addSet:[4,2,1,""],addSilent:[4,2,1,""],addStrConst:[4,2,1,""],addTernaryExpr:[4,2,1,""],addTry:[4,2,1,""],addUnless:[4,2,1,""],addWhile:[4,2,1,""],addWriteChunk:[4,2,1,""],addYield:[4,2,1,""],appendToPrevChunk:[4,2,1,""],cleanupState:[4,2,1,""],closeFilterBlock:[4,2,1,""],commitStrConst:[4,2,1,""],dedent:[4,2,1,""],docString:[4,2,1,""],endCacheRegion:[4,2,1,""],endCallRegion:[4,2,1,""],endCaptureRegion:[4,2,1,""],handleWSBeforeDirective:[4,2,1,""],indent:[4,2,1,""],indentation:[4,2,1,""],isErrorCatcherOn:[4,2,1,""],methodBody:[4,2,1,""],methodDef:[4,2,1,""],methodName:[4,2,1,""],methodSignature:[4,2,1,""],nextCacheID:[4,2,1,""],nextCallRegionID:[4,2,1,""],nextCaptureRegionID:[4,2,1,""],nextFilterRegionID:[4,2,1,""],setCallArg:[4,2,1,""],setErrorCatcher:[4,2,1,""],setFilter:[4,2,1,""],setMethodName:[4,2,1,""],setMethodSignature:[4,2,1,""],setTransform:[4,2,1,""],setting:[4,2,1,""],startCacheRegion:[4,2,1,""],startCallRegion:[4,2,1,""],startCaptureRegion:[4,2,1,""],turnErrorCatcherOff:[4,2,1,""],turnErrorCatcherOn:[4,2,1,""],wrapCode:[4,2,1,""]},"Cheetah.Compiler.ModuleCompiler":{addAttribute:[4,2,1,""],addComment:[4,2,1,""],addImportStatement:[4,2,1,""],addImportedVarNames:[4,2,1,""],addModuleDocString:[4,2,1,""],addModuleGlobal:[4,2,1,""],addModuleHeader:[4,2,1,""],addSpecialVar:[4,2,1,""],classCompilerClass:[4,4,1,""],classDefs:[4,2,1,""],compile:[4,2,1,""],getModuleCode:[4,2,1,""],getModuleEncoding:[4,2,1,""],importStatements:[4,2,1,""],importedVarNames:[4,2,1,""],moduleConstants:[4,2,1,""],moduleDocstring:[4,2,1,""],moduleFooter:[4,2,1,""],moduleHeader:[4,2,1,""],parserClass:[4,4,1,""],setBaseClass:[4,2,1,""],setCompilerSetting:[4,2,1,""],setCompilerSettings:[4,2,1,""],setModuleEncoding:[4,2,1,""],setShBang:[4,2,1,""],specialVars:[4,2,1,""],timestamp:[4,2,1,""],wrapModuleDef:[4,2,1,""]},"Cheetah.DirectiveAnalyzer":{AnalysisCompiler:[5,1,1,""],Analyzer:[5,1,1,""],analyze:[5,5,1,""],main:[5,5,1,""],main_dir:[5,5,1,""],main_file:[5,5,1,""]},"Cheetah.DirectiveAnalyzer.AnalysisCompiler":{parserClass:[5,4,1,""]},"Cheetah.DirectiveAnalyzer.Analyzer":{eatDirective:[5,2,1,""]},"Cheetah.Django":{render:[6,5,1,""]},"Cheetah.DummyTransaction":{DummyResponse:[7,1,1,""],DummyResponseFailure:[7,3,1,""],DummyTransaction:[7,1,1,""],TransformerResponse:[7,1,1,""],TransformerTransaction:[7,1,1,""]},"Cheetah.DummyTransaction.DummyResponse":{flush:[7,2,1,""],getvalue:[7,2,1,""],safeConvert:[7,2,1,""],write:[7,2,1,""],writelines:[7,2,1,""],writeln:[7,2,1,""]},"Cheetah.DummyTransaction.DummyTransaction":{response:[7,2,1,""]},"Cheetah.DummyTransaction.TransformerResponse":{getvalue:[7,2,1,""]},"Cheetah.DummyTransaction.TransformerTransaction":{response:[7,2,1,""]},"Cheetah.ErrorCatchers":{BigEcho:[8,1,1,""],Echo:[8,4,1,""],Error:[8,3,1,""],ErrorCatcher:[8,1,1,""],KeyError:[8,1,1,""],ListErrors:[8,1,1,""]},"Cheetah.ErrorCatchers.BigEcho":{warn:[8,2,1,""]},"Cheetah.ErrorCatchers.ErrorCatcher":{exceptions:[8,2,1,""],warn:[8,2,1,""]},"Cheetah.ErrorCatchers.KeyError":{warn:[8,2,1,""]},"Cheetah.ErrorCatchers.ListErrors":{listErrors:[8,2,1,""],warn:[8,2,1,""]},"Cheetah.FileUtils":{FileFinder:[9,1,1,""],FindAndReplace:[9,1,1,""],SourceFileStats:[9,1,1,""],findFiles:[9,5,1,""],replaceRegexInFiles:[9,5,1,""],replaceStrInFiles:[9,5,1,""]},"Cheetah.FileUtils.FileFinder":{files:[9,2,1,""],filterDir:[9,2,1,""],processDir:[9,2,1,""],walkDirTree:[9,2,1,""]},"Cheetah.FileUtils.FindAndReplace":{results:[9,2,1,""]},"Cheetah.FileUtils.SourceFileStats":{getFileStats:[9,2,1,""],printStats:[9,2,1,""],rawStats:[9,2,1,""],summary:[9,2,1,""]},"Cheetah.Filters":{CodeHighlighter:[10,1,1,""],EncodeUnicode:[10,4,1,""],Filter:[10,1,1,""],Markdown:[10,1,1,""],MaxLen:[10,1,1,""],RawOrEncodedUnicode:[10,4,1,""],Strip:[10,1,1,""],StripSqueeze:[10,1,1,""],WebSafe:[10,1,1,""],test:[10,5,1,""]},"Cheetah.Filters.CodeHighlighter":{filter:[10,2,1,""]},"Cheetah.Filters.Filter":{filter:[10,2,1,""]},"Cheetah.Filters.Markdown":{filter:[10,2,1,""]},"Cheetah.Filters.MaxLen":{filter:[10,2,1,""]},"Cheetah.Filters.Strip":{filter:[10,2,1,""]},"Cheetah.Filters.StripSqueeze":{filter:[10,2,1,""]},"Cheetah.Filters.WebSafe":{filter:[10,2,1,""]},"Cheetah.ImportHooks":{CheetahDirOwner:[11,1,1,""],install:[11,5,1,""],setCacheDir:[11,5,1,""],uninstall:[11,5,1,""]},"Cheetah.ImportHooks.CheetahDirOwner":{getmod:[11,2,1,""],templateFileExtensions:[11,4,1,""]},"Cheetah.ImportManager":{BuiltinImportDirector:[12,1,1,""],DirOwner:[12,1,1,""],FrozenImportDirector:[12,1,1,""],ImportDirector:[12,1,1,""],ImportManager:[12,1,1,""],Owner:[12,1,1,""],PathImportDirector:[12,1,1,""],RegistryImportDirector:[12,1,1,""],getDescr:[12,5,1,""],getPathExt:[12,5,1,""],nameSplit:[12,5,1,""],packageName:[12,5,1,""],pathIsDir:[12,5,1,""]},"Cheetah.ImportManager.BuiltinImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.DirOwner":{getmod:[12,2,1,""]},"Cheetah.ImportManager.FrozenImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.ImportManager":{doimport:[12,2,1,""],importHook:[12,2,1,""],install:[12,2,1,""],reloadHook:[12,2,1,""],setThreaded:[12,2,1,""]},"Cheetah.ImportManager.Owner":{getmod:[12,2,1,""]},"Cheetah.ImportManager.PathImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.RegistryImportDirector":{getmod:[12,2,1,""]},"Cheetah.Macros":{I18n:[14,0,0,"-"]},"Cheetah.Macros.I18n":{I18n:[14,1,1,""]},"Cheetah.NameMapper":{NotFound:[15,3,1,""],hasKey:[15,5,1,""],valueForKey:[15,5,1,""],valueForName:[15,5,1,""],valueFromFrame:[15,5,1,""],valueFromFrameOrSearchList:[15,5,1,""],valueFromSearchList:[15,5,1,""]},"Cheetah.Parser":{ArgList:[16,1,1,""],CheetahVariable:[16,1,1,""],ForbiddenDirective:[16,3,1,""],ForbiddenExpression:[16,3,1,""],ForbiddenSyntax:[16,3,1,""],ParseError:[16,3,1,""],Parser:[16,4,1,""],Placeholder:[16,1,1,""],any:[16,5,1,""],cachedRegex:[16,5,1,""],escapeRegexChars:[16,5,1,""],group:[16,5,1,""],makeTripleQuoteRe:[16,5,1,""],maybe:[16,5,1,""],namedGroup:[16,5,1,""],nongroup:[16,5,1,""]},"Cheetah.Parser.ArgList":{add_argument:[16,2,1,""],add_default:[16,2,1,""],merge:[16,2,1,""],next:[16,2,1,""]},"Cheetah.Parser.ParseError":{report:[16,2,1,""]},"Cheetah.Servlet":{Servlet:[17,1,1,""]},"Cheetah.Servlet.Servlet":{application:[17,4,1,""],request:[17,4,1,""],respond:[17,2,1,""],serverSidePath:[17,2,1,""],session:[17,4,1,""],shutdown:[17,2,1,""],sleep:[17,2,1,""],transaction:[17,4,1,""]},"Cheetah.SettingsManager":{ConfigParserCaseSensitive:[18,1,1,""],Error:[18,3,1,""],NoDefault:[18,1,1,""],SettingsManager:[18,1,1,""],convStringToNum:[18,5,1,""],mergeNestedDictionaries:[18,5,1,""],stringIsNumber:[18,5,1,""]},"Cheetah.SettingsManager.ConfigParserCaseSensitive":{optionxform:[18,2,1,""]},"Cheetah.SettingsManager.SettingsManager":{copySettings:[18,2,1,""],deepcopySettings:[18,2,1,""],hasSetting:[18,2,1,""],setSetting:[18,2,1,""],setting:[18,2,1,""],settings:[18,2,1,""],updateSettings:[18,2,1,""],updateSettingsFromConfigFileObj:[18,2,1,""],updateSettingsFromConfigStr:[18,2,1,""],updateSettingsFromPySrcStr:[18,2,1,""]},"Cheetah.SourceReader":{ENCODINGsearch:[19,5,1,""],Error:[19,3,1,""],SourceReader:[19,1,1,""]},"Cheetah.SourceReader.SourceReader":{advance:[19,2,1,""],atEnd:[19,2,1,""],atStart:[19,2,1,""],breakPoint:[19,2,1,""],checkPos:[19,2,1,""],filename:[19,2,1,""],find:[19,2,1,""],findBOL:[19,2,1,""],findEOL:[19,2,1,""],getLine:[19,2,1,""],getNonWhiteSpace:[19,2,1,""],getRowCol:[19,2,1,""],getRowColLine:[19,2,1,""],getWhiteSpace:[19,2,1,""],getc:[19,2,1,""],gotoBookmark:[19,2,1,""],hasBookmark:[19,2,1,""],isLineClearToPos:[19,2,1,""],lineNum:[19,2,1,""],matchNonWhiteSpace:[19,2,1,""],matchWhiteSpace:[19,2,1,""],matches:[19,2,1,""],peek:[19,2,1,""],pos:[19,2,1,""],read:[19,2,1,""],readTo:[19,2,1,""],readToEOL:[19,2,1,""],rev:[19,2,1,""],rfind:[19,2,1,""],setBookmark:[19,2,1,""],setBreakPoint:[19,2,1,""],setPos:[19,2,1,""],splitlines:[19,2,1,""],src:[19,2,1,""],startswith:[19,2,1,""],ungetc:[19,2,1,""],validPos:[19,2,1,""]},"Cheetah.Template":{CompileCacheItem:[20,1,1,""],Error:[20,3,1,""],PreprocessError:[20,3,1,""],T:[20,4,1,""],Template:[20,1,1,""],TemplatePreprocessor:[20,1,1,""],checkFileMtime:[20,5,1,""],createMethod:[20,5,1,""],genParserErrorFromPythonException:[20,5,1,""],hashDict:[20,5,1,""],hashList:[20,5,1,""],updateLinecache:[20,5,1,""]},"Cheetah.Template.Template":{NonNumericInputError:[20,3,1,""],Reserved_SearchList:[20,4,1,""],compile:[20,6,1,""],errorCatcher:[20,2,1,""],generatedClassCode:[20,2,1,""],generatedModuleCode:[20,2,1,""],getCacheRegion:[20,2,1,""],getCacheRegions:[20,2,1,""],getFileContents:[20,2,1,""],getVar:[20,2,1,""],hasVar:[20,2,1,""],i18n:[20,2,1,""],refreshCache:[20,2,1,""],runAsMainProgram:[20,2,1,""],searchList:[20,2,1,""],shutdown:[20,2,1,""],subclass:[20,6,1,""],varExists:[20,2,1,""],webInput:[20,2,1,""]},"Cheetah.Template.TemplatePreprocessor":{preprocess:[20,2,1,""]},"Cheetah.TemplateCmdLineIface":{CmdLineIface:[21,1,1,""],Error:[21,3,1,""]},"Cheetah.TemplateCmdLineIface.CmdLineIface":{run:[21,2,1,""],usage:[21,2,1,""]},"Cheetah.Templates":{SkeletonPage:[23,0,0,"-"]},"Cheetah.Templates.SkeletonPage":{SkeletonPage:[23,1,1,""]},"Cheetah.Templates.SkeletonPage.SkeletonPage":{respond:[23,2,1,""],writeBody:[23,2,1,""],writeHeadTag:[23,2,1,""]},"Cheetah.Tests":{Analyzer:[25,0,0,"-"],Boinker:[26,0,0,"-"],CheetahWrapper:[27,0,0,"-"],Cheps:[28,0,0,"-"],Filters:[29,0,0,"-"],Misc:[30,0,0,"-"],NameMapper:[31,0,0,"-"],NameMapper_pure:[32,0,0,"-"],Parser:[33,0,0,"-"],Performance:[34,0,0,"-"],Pinger:[35,0,0,"-"],Regressions:[36,0,0,"-"],SyntaxAndOutput:[37,0,0,"-"],Template:[38,0,0,"-"],Test:[39,0,0,"-"],Unicode:[40,0,0,"-"],xmlrunner:[41,0,0,"-"]},"Cheetah.Tests.Analyzer":{AnalyzerTests:[25,1,1,""]},"Cheetah.Tests.Analyzer.AnalyzerTests":{test_compilersettings:[25,2,1,""],test_set:[25,2,1,""]},"Cheetah.Tests.Boinker":{Boinker:[26,1,1,""]},"Cheetah.Tests.Boinker.Boinker":{boink:[26,2,1,""]},"Cheetah.Tests.CheetahWrapper":{CFBase:[27,1,1,""],CFIdirBase:[27,1,1,""],Flat:[27,1,1,""],FlatRecurseCollision:[27,1,1,""],IdirFlatRecurseCollision:[27,1,1,""],IdirOdirRecurse:[27,1,1,""],IdirRecurse:[27,1,1,""],NoBackup:[27,1,1,""],OneFile:[27,1,1,""],OneFileNoExtension:[27,1,1,""],OneFileWithOdir:[27,1,1,""],Popen4:[27,1,1,""],RecurseExplicit:[27,1,1,""],RecurseExplicitWIthOdir:[27,1,1,""],RecurseImplicit:[27,1,1,""],SplatTmpl:[27,1,1,""],SplatTmplWithSubdirectories:[27,1,1,""],ThreeFilesWithSubdirectories:[27,1,1,""],ThreeFilesWithSubdirectoriesNoExtension:[27,1,1,""],VarietyWithOdir:[27,1,1,""],listTests:[27,5,1,""],main:[27,5,1,""],warn:[27,5,1,""]},"Cheetah.Tests.CheetahWrapper.CFBase":{assertPosixSubprocess:[27,2,1,""],assertSubprocess:[27,2,1,""],assertWin32Subprocess:[27,2,1,""],checkCompile:[27,2,1,""],checkFill:[27,2,1,""],checkNoBackup:[27,2,1,""],checkSubdirPyInit:[27,2,1,""],expectError:[27,4,1,""],go:[27,2,1,""],inform:[27,2,1,""],locate_cheetah:[27,2,1,""],setUp:[27,2,1,""],srcDir:[27,4,1,""],srcFiles:[27,4,1,""],subdirs:[27,4,1,""],tearDown:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.CFIdirBase":{srcDir:[27,4,1,""],srcFiles:[27,4,1,""],subdirs:[27,4,1,""]},"Cheetah.Tests.CheetahWrapper.Flat":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.FlatRecurseCollision":{expectError:[27,4,1,""],testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision":{expectError:[27,4,1,""],testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirOdirRecurse":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirRecurse":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.NoBackup":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFile":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFileNoExtension":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFileWithOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseExplicit":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseImplicit":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.SplatTmpl":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.VarietyWithOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.Cheps":{Chep_2_Conditionalized_Import_Behavior:[28,1,1,""]},"Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior":{test_InlineImport:[28,2,1,""],test_LegacyMode:[28,2,1,""],test_ModuleLevelImport:[28,2,1,""]},"Cheetah.Tests.Filters":{BasicCodeHighlighterFilterTest:[29,1,1,""],BasicMarkdownFilterTest:[29,1,1,""]},"Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest":{test_Html:[29,2,1,""],test_Python:[29,2,1,""]},"Cheetah.Tests.Filters.BasicMarkdownFilterTest":{test_BasicHeader:[29,2,1,""]},"Cheetah.Tests.Misc":{SettingsManagerTests:[30,1,1,""]},"Cheetah.Tests.Misc.SettingsManagerTests":{test_mergeDictionaries:[30,2,1,""]},"Cheetah.Tests.NameMapper":{DummyClass:[31,1,1,""],DummyClassGetAttrRaises:[31,1,1,""],MapBuiltins:[31,1,1,""],NameMapperTest:[31,1,1,""],VFF:[31,1,1,""],VFFSL:[31,1,1,""],VFFSL_2:[31,1,1,""],VFFSL_3:[31,1,1,""],VFFSL_4:[31,1,1,""],VFN:[31,1,1,""],VFS:[31,1,1,""],VFS_2namespaces:[31,1,1,""],VFS_3namespaces:[31,1,1,""],VFS_4namespaces:[31,1,1,""],aClass:[31,4,1,""],aFunc:[31,5,1,""],dummyFunc:[31,5,1,""],funcThatRaises:[31,5,1,""]},"Cheetah.Tests.NameMapper.DummyClass":{classVar1:[31,4,1,""],meth1:[31,2,1,""],meth2:[31,2,1,""],meth3:[31,2,1,""],meth:[31,2,1,""]},"Cheetah.Tests.NameMapper.MapBuiltins":{test_int:[31,2,1,""]},"Cheetah.Tests.NameMapper.NameMapperTest":{VFN:[31,2,1,""],VFS:[31,2,1,""],check:[31,2,1,""],failureException:[31,4,1,""],get:[31,2,1,""],namespace:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFF":{get:[31,2,1,""],setUp:[31,2,1,""],test_VFF_1:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFFSL":{VFFSL:[31,2,1,""],get:[31,2,1,""],setUp:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFN":{test10:[31,2,1,""],test11:[31,2,1,""],test12:[31,2,1,""],test13:[31,2,1,""],test14:[31,2,1,""],test15:[31,2,1,""],test16:[31,2,1,""],test17:[31,2,1,""],test18:[31,2,1,""],test19:[31,2,1,""],test1:[31,2,1,""],test20:[31,2,1,""],test21:[31,2,1,""],test22:[31,2,1,""],test23:[31,2,1,""],test24:[31,2,1,""],test27:[31,2,1,""],test28:[31,2,1,""],test29:[31,2,1,""],test2:[31,2,1,""],test30:[31,2,1,""],test31:[31,2,1,""],test32:[31,2,1,""],test33:[31,2,1,""],test34:[31,2,1,""],test35:[31,2,1,""],test36:[31,2,1,""],test37:[31,2,1,""],test38:[31,2,1,""],test39:[31,2,1,""],test3:[31,2,1,""],test40:[31,2,1,""],test41:[31,2,1,""],test42:[31,2,1,""],test43:[31,2,1,""],test44:[31,2,1,""],test45:[31,2,1,""],test46:[31,2,1,""],test47:[31,2,1,""],test48:[31,2,1,""],test49:[31,2,1,""],test4:[31,2,1,""],test50:[31,2,1,""],test51:[31,2,1,""],test52:[31,2,1,""],test53:[31,2,1,""],test54:[31,2,1,""],test55:[31,2,1,""],test56:[31,2,1,""],test57:[31,2,1,""],test58:[31,2,1,""],test59:[31,2,1,""],test5:[31,2,1,""],test60:[31,2,1,""],test61:[31,2,1,""],test6:[31,2,1,""],test7:[31,2,1,""],test8:[31,2,1,""],test9:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFS":{get:[31,2,1,""],searchList:[31,2,1,""],searchListGenerator:[31,2,1,""]},"Cheetah.Tests.NameMapper_pure":{NameMapperTest:[32,1,1,""],setUpModule:[32,5,1,""],tearDownModule:[32,5,1,""]},"Cheetah.Tests.NameMapper_pure.NameMapperTest":{test_valueForName:[32,2,1,""]},"Cheetah.Tests.Parser":{ArgListTest:[33,1,1,""]},"Cheetah.Tests.Parser.ArgListTest":{setUp:[33,2,1,""],test_merge1:[33,2,1,""],test_merge2:[33,2,1,""],test_merge3:[33,2,1,""]},"Cheetah.Tests.Performance":{BunchOfWriteCalls:[34,1,1,""],DurationError:[34,3,1,""],DynamicMethodCompilationTest:[34,1,1,""],DynamicSimpleCompilationTest:[34,1,1,""],DynamicTemplatePerformanceTest:[34,1,1,""],FilterTest:[34,1,1,""],LongCompileAndRun:[34,1,1,""],LongCompileTest:[34,1,1,""],LongCompile_CompilerSettingsTest:[34,1,1,""],PerformanceTest:[34,1,1,""],perftest:[34,5,1,""]},"Cheetah.Tests.Performance.BunchOfWriteCalls":{iterations:[34,4,1,""],performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.DynamicMethodCompilationTest":{performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.DynamicSimpleCompilationTest":{performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.DynamicTemplatePerformanceTest":{loops:[34,4,1,""],test_BasicDynamic:[34,2,1,""]},"Cheetah.Tests.Performance.FilterTest":{performanceSample:[34,2,1,""],setUp:[34,2,1,""],template:[34,4,1,""]},"Cheetah.Tests.Performance.LongCompileAndRun":{performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.LongCompileTest":{compile:[34,2,1,""],performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest":{compile:[34,2,1,""]},"Cheetah.Tests.Performance.PerformanceTest":{display:[34,4,1,""],iterations:[34,4,1,""],runTest:[34,2,1,""],save:[34,4,1,""]},"Cheetah.Tests.Pinger":{Pinger:[35,1,1,""]},"Cheetah.Tests.Pinger.Pinger":{ping:[35,2,1,""]},"Cheetah.Tests.Regressions":{CustomGetAttrClass:[36,1,1,""],GetAttrException:[36,3,1,""],GetAttrTest:[36,1,1,""],InlineImportTest:[36,1,1,""],Mantis_Issue_11_Regression_Test:[36,1,1,""],Mantis_Issue_21_Regression_Test:[36,1,1,""],Mantis_Issue_22_Regression_Test:[36,1,1,""]},"Cheetah.Tests.Regressions.GetAttrTest":{test_NotFoundException:[36,2,1,""],test_ValidException:[36,2,1,""]},"Cheetah.Tests.Regressions.InlineImportTest":{test_AutoImporting:[36,2,1,""],test_FromFooImportThing:[36,2,1,""],test_ImportFailModule:[36,2,1,""],test_ProperImportOfBadModule:[36,2,1,""],test_StuffBeforeImport_Legacy:[36,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test":{test_FailingBehavior:[36,2,1,""],test_FailingBehaviorWithSetting:[36,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test":{runTest:[36,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test":{test_DefinedFilter:[36,2,1,""],test_NoneFilter:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput":{AssertDirective:[37,1,1,""],AttrDirective:[37,1,1,""],Backslashes:[37,1,1,""],BlockDirective:[37,1,1,""],BreakDirective:[37,1,1,""],BreakpointDirective:[37,1,1,""],CGI:[37,1,1,""],CacheDirective:[37,1,1,""],CallDirective:[37,1,1,""],CaptureDirective:[37,1,1,""],Comments_MultiLine:[37,1,1,""],Comments_MultiLine_NoGobble:[37,1,1,""],Comments_SingleLine:[37,1,1,""],CompilerDirective:[37,1,1,""],CompilerSettingsDirective:[37,1,1,""],ContinueDirective:[37,1,1,""],DecoratorDirective:[37,1,1,""],DefDirective:[37,1,1,""],DefmacroDirective:[37,1,1,""],DummyClass:[37,1,1,""],EOLSlurpToken:[37,1,1,""],EchoDirective:[37,1,1,""],EmptyTemplate:[37,1,1,""],EncodingDirective:[37,1,1,""],ErrorCatcherDirective:[37,1,1,""],ExtendsDirective:[37,1,1,""],FilterDirective:[37,1,1,""],ForDirective:[37,1,1,""],GetVar:[37,1,1,""],I18nDirective:[37,1,1,""],IfDirective:[37,1,1,""],ImportDirective:[37,1,1,""],ImportantExampleCases:[37,1,1,""],IncludeDirective:[37,1,1,""],Indenter:[37,1,1,""],MiscComplexSyntax:[37,1,1,""],NameMapper:[37,1,1,""],NonTokens:[37,1,1,""],OutputTest:[37,1,1,""],PSP:[37,1,1,""],PassDirective:[37,1,1,""],PlaceholderStrings:[37,1,1,""],Placeholders:[37,1,1,""],Placeholders_Calls:[37,1,1,""],Placeholders_Esc:[37,1,1,""],Placeholders_Vals:[37,1,1,""],RaiseDirective:[37,1,1,""],RawDirective:[37,1,1,""],RepeatDirective:[37,1,1,""],ReturnDirective:[37,1,1,""],SetDirective:[37,1,1,""],SilentDirective:[37,1,1,""],SlurpDirective:[37,1,1,""],StopDirective:[37,1,1,""],SuperDirective:[37,1,1,""],TryDirective:[37,1,1,""],UnicodeDirective:[37,1,1,""],UnicodeStrings:[37,1,1,""],UnlessDirective:[37,1,1,""],Unspecified:[37,1,1,""],VarExists:[37,1,1,""],WhileDirective:[37,1,1,""],WhitespaceAfterDirectiveTokens:[37,1,1,""],YieldDirective:[37,1,1,""],dummyFunc:[37,5,1,""],install_eols:[37,5,1,""],testdecorator:[37,5,1,""]},"Cheetah.Tests.SyntaxAndOutput.AssertDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.AttrDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Backslashes":{convertEOLs:[37,4,1,""],setUp:[37,2,1,""],tearDown:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BlockDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BreakDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BreakpointDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CGI":{convertEOLs:[37,4,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CacheDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CallDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CaptureDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine":{test10:[37,2,1,""],test11:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine":{test10:[37,2,1,""],test11:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CompilerDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ContinueDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DecoratorDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DefDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DefmacroDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DummyClass":{callIt:[37,2,1,""],meth1:[37,2,1,""],meth2:[37,2,1,""],meth:[37,2,1,""],methWithPercentSignDefaultArg:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EchoDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EmptyTemplate":{convertEOLs:[37,4,1,""],test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EncodingDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ExtendsDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.FilterDirective":{convertEOLs:[37,4,1,""],test10:[37,2,1,""],test11:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ForDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.GetVar":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.I18nDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.IfDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ImportDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.IncludeDirective":{setUp:[37,2,1,""],tearDown:[37,2,1,""],test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Indenter":{control:[37,4,1,""],convertEOLs:[37,4,1,""],searchList:[37,2,1,""],source:[37,4,1,""],test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.NameMapper":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test20:[37,2,1,""],test21:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.NonTokens":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.OutputTest":{DEBUGLEV:[37,4,1,""],convertEOLs:[37,4,1,""],genClassCode:[37,2,1,""],genModuleCode:[37,2,1,""],report:[37,4,1,""],searchList:[37,2,1,""],verify:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PSP":{searchList:[37,2,1,""],test10:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PassDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test20:[37,2,1,""],test21:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test20:[37,2,1,""],test21:[37,2,1,""],test22:[37,2,1,""],test23:[37,2,1,""],test24:[37,2,1,""],test25:[37,2,1,""],test26:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc":{convertEOLs:[37,4,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals":{convertEOLs:[37,4,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RaiseDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RawDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RepeatDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ReturnDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SetDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test20:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SilentDirective":{test4:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SlurpDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.StopDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SuperDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.TryDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnicodeDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnicodeStrings":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnlessDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.VarExists":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.WhileDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.YieldDirective":{convertEOLs:[37,4,1,""],test1:[37,2,1,""]},"Cheetah.Tests.Template":{ClassMethodSupport:[38,1,1,""],ClassMethods_compile:[38,1,1,""],ClassMethods_subclass:[38,1,1,""],MultipleInheritanceSupport:[38,1,1,""],Preprocessors:[38,1,1,""],StaticMethodSupport:[38,1,1,""],SubclassSearchListTest:[38,1,1,""],TemplateTest:[38,1,1,""],TryExceptImportTest:[38,1,1,""]},"Cheetah.Tests.Template.ClassMethodSupport":{test_BasicDecorator:[38,2,1,""]},"Cheetah.Tests.Template.ClassMethods_compile":{test_baseclassArg:[38,2,1,""],test_basicUsage:[38,2,1,""],test_classNameArg:[38,2,1,""],test_compilationCache:[38,2,1,""],test_keepRefToGeneratedCodeArg:[38,2,1,""],test_mainMethodNameArg:[38,2,1,""],test_moduleFileCaching:[38,2,1,""],test_moduleGlobalsArg:[38,2,1,""],test_moduleNameArg:[38,2,1,""]},"Cheetah.Tests.Template.ClassMethods_subclass":{test_basicUsage:[38,2,1,""]},"Cheetah.Tests.Template.MultipleInheritanceSupport":{runTest:[38,2,1,""]},"Cheetah.Tests.Template.Preprocessors":{test_basicUsage1:[38,2,1,""],test_complexUsage:[38,2,1,""],test_i18n:[38,2,1,""],test_normalizePreprocessorArgVariants:[38,2,1,""]},"Cheetah.Tests.Template.StaticMethodSupport":{test_BasicDecorator:[38,2,1,""]},"Cheetah.Tests.Template.SubclassSearchListTest":{runTest:[38,2,1,""]},"Cheetah.Tests.Template.TryExceptImportTest":{test_FailCase:[38,2,1,""]},"Cheetah.Tests.Unicode":{CommandLineTest:[40,1,1,""],EncodeUnicodeCompatTest:[40,1,1,""],InlineSpanishTest:[40,1,1,""],JBQ_UTF8_Test1:[40,1,1,""],JBQ_UTF8_Test2:[40,1,1,""],JBQ_UTF8_Test3:[40,1,1,""],JBQ_UTF8_Test4:[40,1,1,""],JBQ_UTF8_Test5:[40,1,1,""],JBQ_UTF8_Test6:[40,1,1,""],JBQ_UTF8_Test7:[40,1,1,""],JBQ_UTF8_Test8:[40,1,1,""],Unicode_in_SearchList_Test:[40,1,1,""],loadModule:[40,5,1,""]},"Cheetah.Tests.Unicode.CommandLineTest":{createAndCompile:[40,2,1,""]},"Cheetah.Tests.Unicode.EncodeUnicodeCompatTest":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.InlineSpanishTest":{setUp:[40,2,1,""],test_failure:[40,2,1,""],test_success:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test1":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test2":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test3":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test4":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test5":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test6":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test7":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test8":{testDynamicCompile:[40,2,1,""],testStaticCompile:[40,2,1,""]},"Cheetah.Tests.Unicode.Unicode_in_SearchList_Test":{test_BasicASCII:[40,2,1,""],test_Thai:[40,2,1,""],test_Thai_utf8:[40,2,1,""]},"Cheetah.Tests.xmlrunner":{XMLTestProgram:[41,1,1,""],XMLTestRunner:[41,1,1,""],XMLTestRunnerTest:[41,1,1,""],create_error:[41,5,1,""],create_failure:[41,5,1,""],create_success:[41,5,1,""],main:[41,4,1,""]},"Cheetah.Tests.xmlrunner.XMLTestProgram":{runTests:[41,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunner":{path:[41,4,1,""],run:[41,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunnerTest":{NullStream:[41,1,1,""],setUp:[41,2,1,""],test_error:[41,2,1,""],test_failure:[41,2,1,""],test_no_tests:[41,2,1,""],test_stderr_capture:[41,2,1,""],test_stdout_capture:[41,2,1,""],test_success:[41,2,1,""],test_unittests_changing_stderr:[41,2,1,""],test_unittests_changing_stdout:[41,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream":{write:[41,2,1,""]},"Cheetah.Tools":{CGITemplate:[43,0,0,"-"],MondoReport:[44,0,0,"-"],RecursiveNull:[45,0,0,"-"],SiteHierarchy:[46,0,0,"-"],turbocheetah:[47,0,0,"-"]},"Cheetah.Tools.CGITemplate":{CGITemplate:[43,1,1,""]},"Cheetah.Tools.CGITemplate.CGITemplate":{cgiHeaders:[43,2,1,""],cgiHeadersHook:[43,2,1,""],isCgi:[43,2,1,""]},"Cheetah.Tools.MondoReport":{IndexFormats:[44,1,1,""],MondoReport:[44,1,1,""],NegativeError:[44,3,1,""],PrevNextPage:[44,1,1,""],RecordStats:[44,1,1,""],Roman:[44,5,1,""],Summary:[44,1,1,""],ValuesGetterMixin:[44,1,1,""],isNonNegative:[44,5,1,""],isNotNone:[44,5,1,""],isNumeric:[44,5,1,""],mean:[44,5,1,""],median:[44,5,1,""],standardDeviation:[44,5,1,""],standardDeviation_n:[44,5,1,""],sum:[44,5,1,""],variance:[44,5,1,""],variance_n:[44,5,1,""]},"Cheetah.Tools.MondoReport.IndexFormats":{Letter:[44,2,1,""],Roman:[44,2,1,""],even:[44,2,1,""],even_i:[44,2,1,""],index:[44,2,1,""],item:[44,2,1,""],letter:[44,2,1,""],number:[44,2,1,""],odd:[44,2,1,""],odd_i:[44,2,1,""],roman:[44,2,1,""]},"Cheetah.Tools.MondoReport.MondoReport":{all:[44,2,1,""],batch:[44,2,1,""],page:[44,2,1,""],summary:[44,2,1,""]},"Cheetah.Tools.MondoReport.RecordStats":{first:[44,2,1,""],firstValue:[44,2,1,""],last:[44,2,1,""],lastValue:[44,2,1,""],length:[44,2,1,""],next:[44,2,1,""],nextPages:[44,2,1,""],next_batches:[44,2,1,""],percentOfTotal:[44,2,1,""],prev:[44,2,1,""],prevPages:[44,2,1,""],prev_batches:[44,2,1,""],summary:[44,2,1,""]},"Cheetah.Tools.MondoReport.Summary":{average:[44,2,1,""],count:[44,2,1,""],max:[44,2,1,""],mean:[44,2,1,""],median:[44,2,1,""],min:[44,2,1,""],standardDeviation:[44,2,1,""],standardDeviation_n:[44,2,1,""],sum:[44,2,1,""],total:[44,2,1,""],variance:[44,2,1,""],variance_n:[44,2,1,""]},"Cheetah.Tools.RecursiveNull":{RecursiveNull:[45,1,1,""]},"Cheetah.Tools.SiteHierarchy":{Hierarchy:[46,1,1,""]},"Cheetah.Tools.SiteHierarchy.Hierarchy":{crumbLink:[46,2,1,""],crumbSeperator:[46,2,1,""],crumbTerminator:[46,2,1,""],crumbs:[46,2,1,""],emptyCrumb:[46,2,1,""],menuLink:[46,2,1,""],menuList:[46,2,1,""]},"Cheetah.Tools.turbocheetah":{TurboCheetah:[47,1,1,""],cheetahsupport:[48,0,0,"-"],tests:[49,0,0,"-"]},"Cheetah.Tools.turbocheetah.TurboCheetah":{extension:[47,4,1,""],load_template:[47,2,1,""],load_template_file:[47,2,1,""],load_template_module:[47,2,1,""],load_template_string:[47,2,1,""],render:[47,2,1,""]},"Cheetah.Tools.turbocheetah.cheetahsupport":{TurboCheetah:[48,1,1,""]},"Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah":{extension:[48,4,1,""],load_template:[48,2,1,""],load_template_file:[48,2,1,""],load_template_module:[48,2,1,""],load_template_string:[48,2,1,""],render:[48,2,1,""]},"Cheetah.Tools.turbocheetah.tests":{test_template:[50,0,0,"-"]},"Cheetah.Tools.turbocheetah.tests.test_template":{test_normal:[50,5,1,""],test_path:[50,5,1,""],test_search:[50,5,1,""],test_string:[50,5,1,""]},"Cheetah.Utils":{Indenter:[53,0,0,"-"],Misc:[54,0,0,"-"],WebInputMixin:[55,0,0,"-"],htmlDecode:[56,0,0,"-"],htmlEncode:[57,0,0,"-"]},"Cheetah.Utils.Indenter":{IndentProcessor:[53,1,1,""],Indenter:[53,1,1,""],indentize:[53,5,1,""]},"Cheetah.Utils.Indenter.IndentProcessor":{ARGS:[53,4,1,""],CHAR:[53,4,1,""],DEC:[53,4,1,""],DIRECTIVE:[53,4,1,""],INC:[53,4,1,""],INDENT_DIR:[53,4,1,""],LINE_SEP:[53,4,1,""],OFF:[53,4,1,""],ON:[53,4,1,""],POP:[53,4,1,""],PUSH:[53,4,1,""],SET:[53,4,1,""],WHITESPACES:[53,4,1,""],WS:[53,4,1,""],process:[53,2,1,""]},"Cheetah.Utils.Indenter.Indenter":{Chars:[53,4,1,""],Level:[53,4,1,""],LevelStack:[53,4,1,""],On:[53,4,1,""],dec:[53,2,1,""],inc:[53,2,1,""],indent:[53,2,1,""],off:[53,2,1,""],on:[53,2,1,""],pop:[53,2,1,""],push:[53,2,1,""],setChar:[53,2,1,""],setLevel:[53,2,1,""]},"Cheetah.Utils.Misc":{checkKeywords:[54,5,1,""],die:[54,5,1,""],mkdirsWithPyInitFiles:[54,5,1,""],removeFromList:[54,5,1,""],useOrRaise:[54,5,1,""]},"Cheetah.Utils.WebInputMixin":{NonNumericInputError:[55,3,1,""]},"Cheetah.Utils.htmlDecode":{htmlDecode:[56,5,1,""]},"Cheetah.Utils.htmlEncode":{htmlEncode:[57,5,1,""]},"Cheetah.Version":{convertVersionStringToTuple:[59,5,1,""]},"Cheetah.convertTmplPathToModuleName":{convertTmplPathToModuleName:[61,5,1,""]},Cheetah:{CacheRegion:[1,0,0,"-"],CacheStore:[2,0,0,"-"],CheetahWrapper:[3,0,0,"-"],Compiler:[4,0,0,"-"],DirectiveAnalyzer:[5,0,0,"-"],Django:[6,0,0,"-"],DummyTransaction:[7,0,0,"-"],ErrorCatchers:[8,0,0,"-"],FileUtils:[9,0,0,"-"],Filters:[10,0,0,"-"],ImportHooks:[11,0,0,"-"],ImportManager:[12,0,0,"-"],Macros:[13,0,0,"-"],NameMapper:[15,0,0,"-"],Parser:[16,0,0,"-"],Servlet:[17,0,0,"-"],SettingsManager:[18,0,0,"-"],SourceReader:[19,0,0,"-"],Template:[20,0,0,"-"],TemplateCmdLineIface:[21,0,0,"-"],Templates:[22,0,0,"-"],Tests:[24,0,0,"-"],Tools:[42,0,0,"-"],Unspecified:[51,0,0,"-"],Utils:[52,0,0,"-"],Version:[59,0,0,"-"],compat:[60,0,0,"-"],convertTmplPathToModuleName:[61,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","attribute","Python attribute"],"5":["py","function","Python function"],"6":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:attribute","5":"py:function","6":"py:classmethod"},terms:{"0b1":93,"0b2":93,"0b3":93,"0b4":93,"0b5":93,"0rc1":93,"0rc2":93,"0rc3":93,"0rc4":93,"0rc5":93,"0rc6":93,"0rc7":93,"0rc8":93,"0x816d0fc":73,"0x8170ecc":73,"10th":93,"12b1":93,"12b2":93,"12th":93,"13a1":70,"13b1":93,"13b2":93,"13th":93,"14b1":93,"15a1":93,"15a2":93,"15a3":93,"15b1":93,"15m":115,"15rc1":93,"15rc2":93,"16a1":93,"16b1":93,"17rc1":93,"17th":93,"18rc1":93,"19th":93,"1st":93,"20notat":93,"20refer":93,"24th":93,"25th":93,"29th":93,"30m":[69,115],"30th":93,"4ism":93,"4th":93,"6th":93,"8a1":93,"8a2":93,"8a3":[72,93],"8a4":93,"8th":93,"9a1":93,"9a2":93,"9a3":93,"9a4":93,"9a5":93,"9a6":93,"9b1":93,"9th":93,"abstract":[4,17],"boolean":[84,93,104,105,115],"break":[20,36,37,76,83,93,107,108,110,115,117],"byte":[93,95],"case":[18,20,25,27,28,29,30,31,32,33,34,36,37,38,39,40,41,72,86,93,100,103,108,110,111,115,117,118],"catch":[102,111],"char":[15,16,37,53,93,110],"class":[1,2,3,4,5,7,8,9,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48,53,66,70,73,78,80,83,84,85,91,93,94,96,99,102,105,106,107,108,109,110,111,114,115,117,118],"default":[1,4,15,18,20,37,44,66,78,80,83,84,93,94,100,102,104,108,110,111,114,115,116,117,118],"final":[20,37,72,73,76,79,93,100,101,106,107,109,110,114,118],"float":[20,31,37,44,84,100,118],"function":[4,9,12,15,17,18,20,36,37,42,54,56,57,61,66,69,72,80,84,85,91,93,94,96,100,104,105,106,110,111,114,115,117],"import":[4,10,11,12,20,28,36,37,38,43,55,64,73,77,83,84,85,89,91,93,94,96,100,105,107,110,111,114,117,118],"int":[20,27,31,37,84,118],"long":[37,39,69,83,85,93,105,108,110,115,117,118],"new":[1,20,28,66,73,75,76,83,88,91,93,100,104,107,108,111,116,117,118],"public":[20,37,65,66,67],"return":[1,2,4,8,9,10,15,16,18,19,20,37,43,44,53,54,56,57,66,73,78,80,84,85,93,94,100,102,107,110,111,114,115,117,118],"short":[20,37,93,105,106,108,110,115,117,118],"static":[20,72,91,93,107,115,118],"super":[64,93,94,100,117],"switch":[66,80,93,115],"throw":[86,111],"true":[3,4,9,16,18,19,20,27,31,37,41,65,69,73,75,78,84,85,93,100,104,108,109,110,115,117],"try":[1,4,10,20,37,66,69,76,84,85,86,88,93,105,107,109,110,111,114,117,118],"var":[4,15,20,37,84,93,99,100,104,108,110,115,117,118],"void":37,"while":[12,37,66,72,76,93,94,100,102,107,109,110,111,116,117],AND:[15,37,93,110],Added:93,And:[84,104,108,110,115,117],Are:107,BUT:[100,110],Being:114,But:[3,15,20,76,84,110,115,117,118],CVS:[9,76,83,85,93,117],Das:63,Doing:[72,111],FOR:[93,110],For:[1,4,15,20,66,72,84,85,93,94,96,100,103,105,108,109,110,111,115,117,118],Its:[15,108,111],KWS:[23,93],KWs:[23,37,84,85],NOT:[12,15,37,56],Not:[82,100,111],One:[20,65,72,84,91,93,107,109,110,117,118],Such:[10,106],THAT:110,THE:93,That:[12,69,80,83,85,93,94,96,101,108,110,111,115,117,118],The:[1,2,3,10,15,18,20,21,27,37,41,43,44,46,53,64,66,69,70,72,73,75,76,77,78,79,80,82,83,84,85,86,88,93,94,95,100,101,102,103,104,106,107,108,109,110,111,112,114,115,116,117],Then:[73,79,83,100,105,114,115],There:[12,20,42,46,75,93,95,99,100,102,105,106,108,109,110,114,115,117,118],These:[4,20,66,93,96,102,104,106,110,111,117,118],USED:93,Use:[46,86,92,93,100,108,115,117],Used:[3,16,117],Useful:[91,107,111],Using:[15,37,91,96,107,110],VFS:[31,69,70,73,75,78,80,84,85],WILL:93,Was:93,Will:[66,93],With:[15,96,110,116],_1var:110,________________________________________________0123456789_______abcdefghijklmnopqrstuvwxyz______abcdefghijklmnopqrstuvwxyz_____________________________________________________________________________________________________________________________________:61,__builtin__:93,__builtins__:93,__cach:69,__cache13925129__refreshtim:69,__cache55048032__refreshtim:69,__cache88939345__refreshtim:69,__call__:110,__cheetah_gentime__:[84,85],__cheetah_src__:85,__cheetah_version__:[84,85],__class__:[20,86,93,95],__delattr__:20,__dict__:[20,86],__doc__:20,__eq__:93,__errorcatcher1:73,__errorcatcher2:73,__errorcatcher3:73,__format__:20,__getattr__:[4,31,93],__getattribute__:20,__getatttr__:36,__hash__:20,__i0:75,__i:[75,93],__import__:12,__init__:[1,4,20,27,54,84,85,93,102,108,117],__main__:[41,84,85],__metaclass__:93,__module__:20,__modulevars__:93,__name__:[84,85,93,95],__ne__:93,__new__:20,__path__:12,__reduce__:20,__reduce_ex__:20,__refreshtim:69,__repr__:20,__setattr__:20,__sizeof__:20,__specialconstant__:4,__str__:[20,84,85,93,108,110,118],__subclasshook__:20,__v:[20,93],__weakref__:20,_addcheetahplumbingcodetoclass:20,_assignrequiredmethodstoclass:93,_bodytagattrib:111,_build:21,_cachedata:69,_cacheindex:69,_call:84,_callarg:84,_char:53,_cheetah_:93,_cheetah__globalsetvar:20,_cheetah__indent:53,_cheetah__iscontrolledbywebkit:37,_cheetah__xxx:20,_cheetah_cachecompilationresult:20,_cheetah_cachedirformodulefil:[20,93],_cheetah_cachemodulefilesfortraceback:[20,93],_cheetah_cacheregionclass:20,_cheetah_cachestor:20,_cheetah_cachestoreclass:20,_cheetah_cachestoreidprefix:20,_cheetah_compilecach:20,_cheetah_compilelock:20,_cheetah_compilerclass:20,_cheetah_compilerinst:20,_cheetah_compilerset:20,_cheetah_defaultbaseclassfortempl:20,_cheetah_defaultclassnamefortempl:20,_cheetah_defaultmainmethodnam:20,_cheetah_defaultmainmethodnamefortempl:20,_cheetah_defaultmoduleglobalsfortempl:20,_cheetah_defaultmodulenamefortempl:20,_cheetah_defaultpreprocessorclass:20,_cheetah_generatedmodulecod:20,_cheetah_keepreftogeneratedcod:20,_cheetah_preprocessor:20,_cheetah_requiredcheetahclassattribut:20,_cheetah_requiredcheetahclassmethod:20,_cheetah_requiredcheetahmethod:20,_cheetah_usecompilationcach:20,_cheetah_xxx:20,_compil:20,_createcacheregion:20,_createconfigfil:93,_currentfilt:[73,75,78,80,84,85],_default:53,_eatmultilinedef:93,_errorcatch:73,_exceptionstocatch:102,_filedirnam:93,_filemtim:[73,84,85,93],_filenam:93,_filepath:[73,84,85,93],_filter:[36,80,93],_filterslib:80,_getcachestor:20,_getcachestoreidprefix:20,_getcompilerclass:20,_getcompilerset:20,_gettemplateapiclassforincludedirectivecompil:20,_getvaluefornam:93,_globalsetvar:[20,26,35,43,73,75,78,84,85],_handlecheetahinclud:20,_highlevelpars:[4,5,16],_includecheetahsourc:[80,93],_indent:53,_initcheetahattribut:93,_initcheetahinst:20,_initialfilt:80,_input:37,_javascriptlib:111,_javascripttag:111,_legalkw:93,_level:53,_lowlevelpars:16,_lowlevelsemanticspars:93,_maincheetahmethod_for_:95,_maincheetahmethod_for_gentempl:84,_maincheetahmethod_for_x2:78,_maincheetahmethod_for_x:[73,85],_makedummypackagefordir:93,_metatag:111,_namemapp:[15,93,105],_normalizepreprocessor:20,_normalizepreprocessorarg:20,_normalizepreprocessorset:20,_output:37,_page:94,_pathnametranschar:61,_prebuiltsearchlist:[20,26,35,43],_preprocesssourc:20,_searchlist:[73,75,78,84,85,93],_set:18,_settingscollector:18,_sin:108,_skeletonpag:[23,37,111,118],_spawnmethodcompil:4,_sre:[16,53],_str1:37,_str3:37,_stylesheet:111,_stylesheetlib:111,_stylesheetsord:111,_templat:73,_testinfo:41,_txt:53,_underscor:93,_updatesettingswithpreprocesstoken:20,_var:110,a2p:117,aaa:20,aaron:109,abandon:[93,118],abbatiello:63,abbeyj:[63,93],abbrevi:93,abc:110,abil:[66,85,93,100],abitrari:93,abl:[10,15,72,109,110],abort:[3,93],about:[9,12,15,20,44,72,76,93,101,102,105,106,108,109,110,111,114,117,118],abov:[1,4,20,78,93,95,99,100,102,105,108,115,117,118],abramowitz:63,absenc:118,absolut:[93,118],absolute_url:100,abspath:17,abstractcachestor:2,accept:[9,12,20,93,100,104,117],acces:[37,99],access:[0,1,20,31,37,85,86,91,93,102,109,115,117,118],accessor:93,accident:93,accompani:117,accomplish:94,accord:[76,93,115],accumul:[8,85],acheiv:94,achiev:105,acknowledg:107,aclass:31,acompiletimecondit:20,across:115,act:20,action:[93,104,109],activ:[34,65,73,91],activest:[34,112],actual:[20,37,69,80,88,93,106,117],adam:[63,92],add:[1,2,4,37,69,79,83,84,93,100,101,105,108,110,114,115,118],add_argu:16,add_default:16,addassert:4,addattribut:4,addbreak:4,addchunk:4,addchunktoinit:4,addclassdocstr:4,addclosur:4,addcom:4,addcontinu:4,adddecor:4,adddel:4,addecho:4,added:[12,20,76,83,84,85,93,95,99,100],addelif:4,addels:4,adderrorcatchercal:4,addexcept:4,addfilteredchunk:4,addfin:4,addfor:4,addgettextvar:4,addheaderfoot:93,addif:4,addimportedvarnam:4,addimportstat:4,addinclud:4,addindentingdirect:4,adding:[10,20,93,99,117],addit:[6,85,88,93,96,105,114,115],addmetharg:4,addmethcom:4,addmethdocstr:4,addmoduledocstr:4,addmoduleglob:4,addmodulehead:4,addonelineif:4,addpass:4,addplacehold:4,addpsp:4,addrais:4,addrawtext:4,addreindentingdirect:4,addrepeat:4,address:[15,104,108,110,118],addreturn:4,addset:[4,93],addsil:4,addspecialvar:4,addstop:4,addstrconst:4,addsup:4,addternaryexpr:4,addtimestampstocompileroutput:93,addtosearchlist:93,addtri:4,addunless:4,addwhil:4,addwritechunk:4,addyield:4,adecor:93,adequ:117,adict:[31,84],adition:117,adj:[93,108],adjac:[80,117],adjust:95,administr:[91,105,108,114],adsens:96,advanc:[1,19,20,93,100,110],advantag:[37,78,100,108,109,117,118],advic:[84,85,109],affect:[82,85,93,110,115,117],afloat:84,after:[4,46,65,70,72,76,80,82,93,99,104,105,106,108,110,115,117,118],afunc:[31,84],afunct:66,again:[72,83,84,93,100,108,109,114,115,118],against:93,agre:[83,114],ahead:72,aim:[15,86,93,110],aix:105,aka:[4,20,83,93,99,110,118],akei:93,akin:115,alcatraz:86,alejandro:93,algorithm:118,alia:[4,5,8,10,16,20,31,41,80,85,93,102,108],alist:84,aliv:[75,104],all:[1,7,9,10,15,16,20,27,37,43,44,46,53,54,65,66,69,76,80,83,84,85,86,88,92,93,94,99,100,101,102,104,105,106,107,108,109,111,114,115,116,118],allair:86,allig:80,allmethod:[108,110,117],alloc:110,allow:[4,11,15,20,54,69,72,83,85,91,92,93,100,101,104,108,110,111,115,117,118],allow_no_valu:18,allowsearchlistasmetharg:93,allowwhitespaceafterdirectivestarttoken:93,almost:[80,100],alocaldictvar:93,alon:[110,117],along:[47,48,66],alphabet:111,alreadi:[2,20,54,78,85,93,105,115],also:[0,12,15,18,20,37,43,54,66,69,72,74,76,80,81,83,84,86,87,91,93,94,99,100,102,105,106,108,109,110,111,112,113,115,117,118],alt:111,altern:[20,37,76,84,93,105,109,110,118],although:[69,80,100,101,104,110,114,115],alwai:[3,44,83,94,115,117,118],alwaysfilternon:93,ambiti:111,ambrosch:93,amd64:10,ameth:[31,84],amethodyoudefin:20,among:[83,100],amount:[53,93],amp:[56,57],analag:[100,108],analog:108,analysi:69,analysiscompil:5,analyt:[109,118],analyz:[0,5,24,93],analyzertest:25,andrea:93,ani:[4,6,7,9,15,16,18,20,37,41,43,46,53,66,69,72,76,78,83,84,88,91,93,95,99,100,104,105,106,108,109,110,111,113,115,117,118],animal_nam:100,anint:[37,84],annoi:93,announc:[83,111],anobj:[31,84],anoth:[4,20,37,53,69,70,76,83,91,93,100,108,109,110,111,115,116,117,118],another2:93,anothermissingvalu:73,answer:[69,72,112,118],anticip:[72,93],anwesha:63,anybodi:[76,83],anymor:93,anyon:88,anyth:[20,43,45,80,83,85,93,96,100,102,105,109,110,111,118],anytim:[72,117],anywai:118,anywher:[85,105,117,118],aoeu:84,aoeuaoeu:84,apach:[37,93,95,100,112,114,118],api:[1,2,20,93],apl:93,app:93,appar:[93,100],appear:[20,27,78,93,99,102,105,106,108,111,115,117,118],append:[100,111],appendag:4,appendgen:93,appendix:[79,93,100],appendtoprevchunk:4,appet:105,appli:[53,66,80,84,85,88,93,100,110,111,117,118],applic:[17,18,20,76,93,96,100,105,107,108,111,118],appreci:109,approach:[4,20,66,72,79,93,96,100,108],appropri:[20,53,66,72,93,109,110,118],appserv:118,appveyor:92,apr:[70,84,85],apreprocessvar:20,april:93,aquarium:20,arbitrari:[72,93,100],arbitrarili:[20,118],arcang:93,architectur:[91,109],archiv:93,area:108,aren:[85,100,108,109,111,118],arendartchuk:93,arff:[31,37,84],arg1:[31,37,84,93,99,104,110,117],arg2:[31,37,84,104,110,117],arg3:117,arg:[3,4,5,7,9,20,23,31,34,37,41,53,66,78,84,85,93,110,115,117],argentina:110,arglist:[4,16,33,108],arglisttest:33,argnam:4,argslist:4,argspec:93,argstr:[37,84],arguabl:100,argument:[1,6,9,12,15,20,27,37,54,69,78,80,83,84,85,93,102,104,105,106,108,110,111,114,115,116,117,118],argv:[3,41],aris:66,arkaitz:109,around:[1,9,37,69,88,93,99,100,102,104,110,115,118],arr:[78,100],arrai:100,arrang:[43,105,118],art:93,articl:[1,93,100,109],arun:63,arunkakorp:63,aruntimecondit:20,aruntimevar:20,ascii:[56,57,93],asctim:118,asid:93,ask:[83,88,109,112,114,117],asp101:100,asp:[15,69,107,109,110,115],aspect:[15,109,110],assert:[37,76,93,107,110],assertdirect:37,assertionerror:[34,73,102],assertposixsubprocess:27,assertsubprocess:27,assertwin32subprocess:27,assign:[37,77,91,93,100,107,110,117,118],assignto:4,assum:[10,15,20,72,79,93,108,109,110,118],assumpt:[93,94,108],asterisk:115,astr:[84,93],atend:19,atest:93,atstart:19,attempt:[20,53],attic:93,attr:[37,80,86,93,94,95,107,110],attract:111,attrdirect:37,attribexpr:4,attribnam:4,attribu:118,attribut:[4,7,15,20,31,38,53,69,72,78,79,83,84,85,93,100,105,106,108,110,111,117],attributeerror:[20,117,118],aug:93,augment:108,august:[72,93],austin:63,authent:[93,100,118],author:[20,65,66,67,91,93,94,100,108],autoassigndummytransactiontoself:93,autocal:[0,4,20,31,37,72,84,93,100,106,117],autoclasscompil:4,autogener:[70,84,85,93,111],autoimportforextenddirect:93,autoindent:113,autom:88,automat:[15,20,53,83,93,105,108,110,115,117,118],automethodcompil:4,avail:[20,43,66,93,105,108,111,117,118],averag:44,avial:93,avoid:[20,93,99,104,115,117,118],awai:[76,80,109,118],awak:[93,108,117,118],awar:[94,99,110,114],babi:110,back:[15,37,41,72,75,80,83,84,93,100,105,108,109,115,116,118],backend:[2,93],background:118,backport:88,backslash:[37,72,85,93,99,100,110],backup:[3,27],backup_suffix:3,backward:[42,93,111],bad:[20,93,102,118],badfloat:[20,118],badger:93,badint:[20,118],bah:110,bak:3,balanc:115,ballanc:[65,66,67,94],bam:80,bang:110,banish:[20,118],banner:96,baptist:[63,93],bar:[37,93,99,100,110,111],bare:[84,93,110,115],barf:37,barn:20,barrier:94,baruch:109,base:[1,2,3,4,5,7,8,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,43,44,45,46,53,55,66,72,76,83,91,93,94,95,100,102,103,104,108,109,110,115,117],baseclass:[4,10,17,20,93,111],baseclassnam:[4,5,93],basenam:[4,9],basi:[9,65],basic:[16,20,23,37,66,89,91,93,100,109,110,111,118],basiccodehighlighterfiltertest:29,basicmarkdownfiltertest:29,batch:44,batchrecord:44,bathtim:80,batteri:[91,107],bbb:20,becam:76,becaus:[10,15,20,37,69,72,76,78,80,84,85,93,100,108,109,110,114,115,117,118],becom:[10,53,85,100],bedrock:105,been:[10,15,53,63,65,66,67,76,78,84,85,86,93,100,101,104,105,106,108,109,110,111,115,118],beer:110,befor:[20,69,70,72,80,82,83,88,93,99,100,104,108,109,110,111,117,118],began:118,begin:[4,20,70,76,93,100,101,108,110,115,117,118],beginn:93,behav:[76,117],behavior:[7,20,28,64,93,114,117,118],behaviorist:79,behaviour:[93,100,110,111,115,116],behind:[15,66,93,107],behren:[63,93],being:[0,36,37,53,65,72,80,83,93,94,95,100,104,106,109,111,115,117,118],believ:[93,114],bellomi:109,belong:[76,83,109],below:[15,20,53,69,83,85,91,93,94,102,104,108,111,115,118],benchmark:[86,93],benefici:66,benefit:[85,93,101,109,110,111],besid:[27,84,109,113,117],best:10,beta:[93,109],better:[20,37,72,88,93,100,117,118],between:[15,20,37,66,83,85,93,99,100,101,104,106,108,110,114,115,116,117,118],bgcolor:100,bick:[45,63,76,84,85,93,109,111],big:[69,75,84,101,104,117,118],bigecho:[8,102],biggest:117,bin:[70,84,85,92,93,105,114,115],binari:105,bind:[20,76],bird:93,bit:93,bitorika:109,bla:110,black:[39,110],blag:93,blah:[93,105],blahblah:93,blank:[10,20,93,99,109,118],blarg1:84,blarg:[84,93],blend:[91,109],bless:100,blew:76,blindli:69,block1:108,block2:108,block:[10,20,37,66,69,76,84,93,96,100,102,104,107,110,111,115,118],blockdirect:[33,37],blocknam:100,blocktobepars:37,bnf:[77,79],bob:[93,100],boddi:109,bodi:[37,73,75,78,84,85,95,100,105,106,108,109,110,111,115],bodycont:111,bodytag:111,bof:37,bogdano:93,bogu:[37,72],boink:26,boinker:[0,24],bold:110,bomb:118,bone:111,bonnet:63,bonni:75,border:111,both:[10,15,20,64,66,76,85,93,100,101,108,110,114,115,117,118],bother:[89,93],bottl:110,bottleneck:109,bottom:[78,118],bottommost:108,bound:[93,100,109],box:[20,39,118],brace:[100,110,115],bracket:[93,110],branch:[88,93],breakabl:108,breakdirect:37,breakpoint:[19,37,93,107,110],breakpointdirect:37,brian:93,briefli:105,bring:75,broad:118,broader:12,broken:[93,109,118],brows:103,browser:[10,20,69,72,108,109,115,118],broytman:[63,92],bsd:91,buffer:[15,41,93,108],bufsiz:27,bug:[31,36,37,69,75,76,83,91,92,93,117],bugfix:[79,93,111],buggi:[93,118],bugzilla:40,build:[15,21,76,88,93,96,100,108,109,110,117,118],built:[9,12,83,84,86,110,118],builtin:[4,12,20,31,80,84,93,100,110],builtinimportdirector:12,bulk:[20,55,111],bump:93,bunch:[12,20,96,118],bunchofwritecal:34,bundl:[3,93,111],buster:73,button:118,cach:[1,2,20,37,38,77,91,92,93,100,107,109,110,111,117],cache1:[69,115],cachecollector:69,cachecompilationresult:20,cachedir:11,cachedirect:37,cachedirformodulefil:[20,93],cachedplacehold:20,cachedregex:16,cacheid:1,cacheinfo:[4,20],cacheitem:1,cacheitemid:[1,20],cachekei:117,cachemodulefilesfortraceback:[20,93],cacheregion:[0,62,93],cacheregionid:[1,20],cachestor:[0,1,62],cachetoken:[4,16],cachetokenpart:4,calcul:[75,93,100,108,109,111,115,117,118],call:[4,15,20,36,37,41,54,73,76,78,80,83,84,85,93,96,100,102,104,105,106,107,108,110,114,115,118],callabl:[15,20,93,110],callback:[93,118],callbas:117,callbaseerror:117,calldirect:37,caller:[18,20,93,117],callingsuperclassmethod:[108,117,118],callit:[37,84],came:[20,76,93,118],can:[0,1,4,9,10,12,15,20,37,38,46,53,65,69,72,73,76,83,84,85,86,88,90,91,93,94,95,96,99,100,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118],canbethread:117,candid:90,cannot:[69,93,100,102,104,105,110,115,117,118],canonic:[10,37,93],capab:20,capabl:93,capit:100,captur:[37,93,100],capturedirect:37,caraldi:[63,93],care:[72,93,104,108,117],carefulli:[100,110],careless:93,carri:93,cart:100,cascad:[0,20,107],cat:[75,104],catalog:[20,93],catastroph:72,catchbreak:41,catcher:[111,117],caus:[10,36,38,93,115,117],caveat:117,ceas:104,central:88,cert:93,certain:[9,72,100,104,105,106,108,111,115,116,117,118],cfbase:27,cfidirbas:27,cgi:[20,36,37,40,43,83,85,93,100,107,117,118],cgihead:[43,93,114],cgiheadershook:[43,93,114],cgiimport:[37,54,93,111],cgiimportmixin:93,cgiinputmixin:93,cgitempl:[0,42,93,114],chain:[93,108,118],chanc:118,chang:[10,15,18,20,41,53,66,69,72,76,80,84,85,86,93,100,102,105,108,109,110,111,114,115,116,117,118],changelog:83,chapter:[74,84,85,87,101,105,108,110,112,114,117,118],charact:[15,20,37,80,93,99,100,104,110,114,115,117,118],charg:100,charset:[43,114],chatter:3,check:[20,27,31,39,41,69,75,83,93,111,117,118],checkbox:[20,118],checkcompil:27,checkfil:27,checkfilemtim:20,checkkeyword:[54,93],checknobackup:27,checkpo:19,checksubdirpyinit:27,cheeseshop:93,cheetah3:[0,20,26,35,43,88,105,109,112],cheetah:[63,66,69,70,72,73,74,75,79,80,84,85,86,87,92,93,95,96,99,101,102,103,106,108,110,113,114,115,116],cheetah_template_class:93,cheetah_yyyi:[20,93],cheetahcachedir:[20,93],cheetahcompil:93,cheetahcorp:96,cheetahdirown:11,cheetahdoc:93,cheetahsupport:[0,42,47],cheetahtempl:[0,83,84,85,90,91,93,111,112],cheetahtemplate3:[0,88,109,112],cheetahvar:93,cheetahvari:16,cheetahvarstarttoken:[37,116,117],cheetahwrapp:[0,24,62,93],cheetahwrapperfil:27,chep:[0,24,66,67,91],chep_2_conditionalized_import_behavior:28,cherrypi:20,chiefli:76,child:[27,46,93,100,108,118],children:[46,111,118],choic:[16,20,72,117,118],choos:[20,83,94,100,106,108,117,118],chop:[4,80],chose:[20,72,118],chri:93,christoph:93,chuck:[63,76,84,85,93,109],chui:109,chunk:[4,7,10,84,93,115],circuit:115,circumst:117,citi:[15,105,110,115],cito:[112,118],cjk:117,cjson:66,clark:109,clash:[38,93],classcompil:4,classcompilerclass:4,classdef:4,classdocstr:4,classifi:93,classmethod:[20,36,89,91,93],classmethods_compil:38,classmethods_subclass:38,classmethodsupport:38,classnam:[4,20,47,48],classsignatur:4,classvar1:31,clean:[91,93,109],cleanli:[83,109],cleanup:[92,93,102],cleanupst:4,clear:[1,2,39,93],clearli:69,client:[15,93,100,104,109,110],close:[18,69,72,81,93,110],close_fd:27,closeblock:4,closedef:4,closefilterblock:4,closer:100,closur:[37,66,93],cls:20,clutter:[83,115],cmd:27,cmdlinearg:21,cmdlineifac:[21,73],code:[0,1,3,4,8,10,12,15,18,20,29,34,36,37,39,44,53,56,57,66,69,70,73,75,76,78,80,82,83,84,85,86,91,92,93,94,95,99,100,102,104,105,106,107,108,109,110,111,112,115,116,117],codec:93,codechunk:4,codegener:[19,93],codehighlight:[10,93],col:[16,69,73,75,78,80,84,93],coldfus:112,collect:[18,93,100],colombia:110,colon:[93,108,110],color:[101,110],colorstudi:[115,118],column:[93,112],com:[0,1,34,40,53,63,65,66,67,88,93,100,109,112,114,118],comamnd:93,combin:[0,37,69,84,104,109,115],combo:[20,39,118],come:[15,20,46,93,95,100,103,105,110,111,115,117,118],comm:4,comma:[37,93,110,115],command:[20,21,27,69,80,84,85,91,93,95,100,106,107,117,118],commandlin:93,commandlineopt:20,commandlinetest:40,comment:[4,20,37,69,72,77,82,85,91,93,100,105,107,110,116,118],commentoffset:116,comments_multilin:37,comments_multiline_nogobbl:37,comments_singlelin:37,commentstarttoken:[37,82,93,116],commerci:76,commit:83,commitstrconst:[4,37,93],common:[88,93,96,109,117],commun:[63,91,93],communitycheetah:93,compact:109,companion:44,compar:[100,109],comparis:[20,93,100],comparison:[100,112,118],compat:[0,41,42,62,93,109,118],compil:[0,3,5,15,16,20,21,27,34,37,38,62,66,72,73,74,76,77,79,81,85,86,87,88,89,90,91,92,93,94,99,100,105,106,107,108,109,110,114,117,118],compilecacheitem:20,compilerclass:20,compilerdirect:37,compilerset:[20,26,35,37,43,93],compilersettingsdirect:37,complain:[83,118],complaint:72,complement:[93,109],complet:[18,20,72,83,93,100,114,115,117],complex:[15,18,37,96,107,108,109,111,118],complexexampl:84,complic:[76,84,86,100,117,118],compon:[84,100,109,111,118],componentarchitectur:20,comprehens:[108,110],comput:[83,85,104,110,118],computeres:106,concaten:[108,117],concentr:109,concept:[12,64,66],conceptu:[15,76,110,115],conclud:66,concret:109,concurr:93,cond2:93,cond:93,condit:[4,93,104,110,115],condition:[64,104],conditionexpr:4,conf:37,confid:83,config:[111,118],config_load:100,configpars:[18,111,117],configparsercasesensit:18,configstr:18,configur:[86,93,100,111,118],confirm:109,conflict:[72,117],conform:93,confus:[20,72,93,103,108,110],conjunct:[36,93],connect:93,consecut:10,consid:[15,65,106,109,110,111,115,117],consider:72,consist:[72,93,100,106,110,117],constant:[4,20,84,85,93,105,110,118],construct:[78,93,100,104,105,107,115,117,118],constructor:[20,85,87,93,106,110,111,115],constuctor:93,consult:[20,118],consum:76,contain:[1,4,27,37,42,54,66,72,76,78,79,83,84,93,96,99,100,103,104,106,107,108,109,110,111,114,115,117],content:[1,4,20,37,43,46,47,48,65,66,67,78,85,93,100,105,108,109,111,114,115,117,118],context1:100,context:[7,66,93,100,118],continu:[37,85,93,107,110],continuedirect:37,contrast:[106,108],contrib:93,contribut:[42,45,63,79,91,93,107,111,117],contributor:91,contribyt:111,control:[3,21,37,76,77,83,91,93,100,107,108,109,110,115,117,118],conveni:[83,93,104,111,117,118],convent:[72,106,110,115],convers:[20,118],convert:[18,20,37,69,72,84,93,105,108,111,115,118],converteol:37,converttmplpathtomodulenam:[0,62],convertversionstringtotupl:59,convstringtonum:18,cookbook:[94,112],cookbooktempl:94,cooki:[20,93,107,114,117],copi:[18,56,57,74,83,93,96,105,108,109,111,114,115,117],copyright:[93,96,111],copyset:18,core:[20,39,83,86,91,93,105,109,110,118],corefil:63,corner:12,correct:[10,83,93,100,111,118],correctli:[93,108],correspond:[10,15,19,93,110,118],corrspond:69,cos:[37,108],costa:110,could:[1,12,15,20,37,66,69,73,75,76,95,100,102,110,117],couldn:[72,76],count:[44,75,104,110],count_charact:100,count_paragraph:100,counter:[37,100,104],counterpart:115,countri:[108,110,115],coupl:[76,114,117],courier:110,cours:[15,86,105,109,110,111,117],courtesi:93,cover:[105,110],covers:[20,118],covert:80,covertoper:115,cpu:[115,117],craig:109,creat:[1,15,20,27,41,46,54,65,66,67,69,72,83,85,88,93,96,100,104,105,106,108,109,110,114,115,117,118],create_error:41,create_failur:41,create_success:41,createandcompil:40,createmethod:20,creation:93,creativ:109,crippl:72,criteria:115,croc:80,croi:63,cross:100,crumb:[46,111],crumbcssclass:46,crumblink:46,crumbseper:46,crumbtermin:46,css:10,cstringio:93,cumbersom:76,curli:[78,108],current:[1,4,12,20,26,35,41,43,44,46,53,66,78,80,84,85,88,93,104,105,111,115,117,118],current_pyston:34,currentclass:93,currenttim:[69,70,73,75,78,84,85],currenturl:[46,111],currentyr:111,curv:100,cust:115,custom:[15,20,43,46,88,93,100,105,109,110,114,115],customgetattrclass:36,customiz:102,cut:[10,93],cvs:83,cycl:[20,93,95,117],czajkowski:[93,117],dai:[20,93,115,118],damnsimpl:[63,118],dandi:108,danga:[1,93],danger:93,daniel:93,darkest:12,darren:63,das:63,data:[1,9,15,20,31,37,91,93,100,109,110,111,118],databas:[20,108,115,117,118],date:[20,69,76,86,90,93,100,103,117],date_format:100,datetim:[100,108],daycheckbox:[20,118],deadlock:93,deal:[10,20,69,93,117,118],dealt:[93,104],debogdano:93,debug:[2,3,20,76,93,102,110,111,115,116,117,118],debuglev:37,dec:[53,93],decemb:93,decid:[72,76],decim:44,deciph:4,decis:[77,117],declar:[66,77,91,93,107,110],decod:56,decor:[4,34,36,37,93,96,99],decoratordirect:37,decoratorexpr:4,decrement:53,dedent:4,deep:[18,117],deepcopi:18,deepcopyset:18,deepest:12,deepli:[37,84,108,117],def:[1,20,37,43,66,70,73,75,84,85,93,94,95,96,99,102,104,107,110,111,114,115,117,118],default_compiler_set:20,defaultfloat:[20,118],defaultint:[20,118],defaulttest:41,defaulttestnamespac:[83,84],defdirect:37,defdocstrmsg:116,defens:93,defer:104,defin:[1,20,36,43,46,83,85,91,93,94,102,108,110,111,115,118],definetemplateblock:93,definit:[20,79,80,82,83,85,93,99,100,101,105,106,108,109,111,114,115,117,118],defmacro:93,defmacrodirect:37,defval:4,del:[69,93,107,110],delai:76,delayedcompil:93,delayedstart:93,deleg:[77,93],delet:[2,20,27,83,93,105,108,110,111,117,118],delimet:[100,106,110],delimit:[37,85,93,108,110],deliveri:[20,118],demand:93,demet:[15,110],demonstr:[102,115],denman:76,denni:93,denot:[20,94],depend:[10,44,84,85,93,105,108,110,111,115,117,118],depeyrot:83,deploy:76,deprec:7,deprecationwarn:93,depreci:[105,117],depth:[18,37,46,93,108,111],dequ:93,deriv:[94,108],descend:108,describ:[20,72,76,79,83,85,93,102,105,108,111,115,118],descript:[20,46,88,99,109,111],deserv:117,design:[15,18,66,77,91,94,100,109,110,111,118],desir:[20,108,110,117,118],destin:[3,27,93],destroi:76,detail:[0,4,9,12,20,55,62,93,100,102,104,105,106,109,111,115,117,118],detect:[15,110],determin:[15,69,110,118],develop:[0,64,66,79,83,84,85,86,91,93,96,98,100,101,102,109,111,118],devhom:20,devsit:20,devtools_en:83,diagnost:107,dic:[20,54,118],dick:91,dict1:18,dict2:18,dict:[20,31,84,93,100,104,110,111,118],dict_typ:18,dictat:108,dictionari:[0,1,9,12,18,20,37,54,69,76,83,93,100,104,111,117,118],dicttempl:93,did:[72,76,93,104,110],didn:[20,76,78,82,83,93,102,117,118],die:54,diehl:109,diff:83,differ:[15,20,66,69,75,80,83,84,85,93,99,100,101,102,104,105,106,108,110,111,114,115,116,117,118],difficult:117,difficulti:109,diffutil:83,digit:[106,110],dile:80,dir:[9,20,93],direct:[1,4,10,12,20,36,37,53,66,69,72,76,77,79,83,85,86,93,94,95,99,100,101,102,104,106,107,109,111,115,116,117,118],directiveanalyz:[0,62,93],directiveendtoken:[93,116],directivekei:93,directivenamesandpars:93,directivestarttoken:[37,93,116],directivetoken:20,directli:[7,11,53,78,85,93,100,106,108,110,111],directori:[9,12,27,41,42,54,83,92,93,103,105,106,107,109,111,114],directorystructur:118,dirnam:93,dirown:[11,12],disabl:[15,28,86,93,110],disableddirect:93,disableddirectivehook:93,disallow:86,disappear:72,discard:[20,41,93,110,115,117],discov:72,discuss:[66,76,83,85,93,100,105,106,108,112,118],displai:[15,34,44,57,76,100,104,109,110,111,115,118],distinct:93,distinguish:[20,72,93,100,109,110,118],distribut:[20,79,83,93,103,105,109,115],distro:93,distutil:[83,93,105],ditto:118,divert:69,divid:[73,93],divis:[20,93],django:[0,62,93],doc:[12,70,83,84,92,93,99,100,111,112,117],docstr:[4,9,12,18,20,55,69,93,100,107,111,118],doctr:99,doctre:21,doctyp:111,document:[0,12,20,65,66,67,72,79,83,91,92,93,94,96,97,99,100,102,109,110,111,112,115,116,117,118],doe:[10,12,27,54,56,72,76,78,83,86,93,94,100,101,104,105,106,108,109,110,111,114,115,117,118],doesn:[1,2,4,20,44,69,72,83,93,102,105,110,115,117],doeveryth:115,doimport:12,doing:[100,108,111,114,115,117],dollar:[37,107,115],domain:[20,65,66,67,83,91,93,118],don:[3,4,18,20,27,36,37,41,44,53,54,72,74,85,93,101,104,105,108,110,114,115,117,118],done:[18,36,75,86,117],doo:[31,37,84],dooutput:78,dosometh:93,dot:[4,15,84,93,100,106,110,117,118],doubl:[103,111,118],doubt:110,doug:63,down:[73,76,88,95,108,110],download:[10,91,100,105,118],dozen:118,draft:[66,67],dramat:[90,91],drawback:72,dread:109,drew:76,drop:1,dropdown:100,dtml:[76,107],dualglob:93,dubrovski:93,duc:80,ducki:80,due:[66,72,93,115],dummi:[4,7,85,108,118],dummyclass:[31,37,84],dummyclassgetattrrais:31,dummyfunc:[31,37,84],dummyrespons:[7,93],dummyresponsefailur:7,dummyservlet:117,dummytran:[70,73,75,78,84,85,93],dummytransact:[0,62,69,73,75,78,84,85,93],dumpleton:109,duplic:[65,100,109],durationerror:34,dure:[76,93,117],duti:111,dutifulli:108,dynam:[20,72,91,93,95,108,109,111,114,115,117],dynamicallycompiledcheetahtempl:[4,5,20,36,93],dynamicmethodcompilationtest:34,dynamicsimplecompilationtest:34,dynamictemplateperformancetest:34,each:[1,9,10,12,15,20,27,38,46,54,69,72,73,75,76,79,80,84,85,93,100,104,106,108,109,110,111,115,117,118],earli:[117,118],earlier:[20,110,117],earth:105,easi:[15,72,76,91,96,100,101,109,110,115,118],easier:[15,20,72,91,93,100,101,105,109,113,115,117,118],easili:[94,95,118],eat:[37,115],eatdirect:5,eatencod:93,echo:[8,37,76,93,100,102,104,107,110,117],echodirect:37,echuck:63,edg:1,edit:[101,108,109,111],editor:[72,91,93,103,107,109],edmund:[76,93,109,117,118],edu:93,eeni:78,effect:[4,36,85,94,96,100,108,110,117,118],effici:[4,20,56,57,111],effort:[91,109,118],egenix:[100,108],egg:[90,92,93],eight:44,either:[15,20,83,88,93,96,102,105,106,109,110,111,114,117,118],eklitzk:93,elabor:[110,117],element:[20,54,93,100],elif:[20,37,69,75,93,100,104,110,118],elimin:69,elisp:93,eloranta:63,els:[4,20,37,66,69,73,75,78,80,83,84,85,93,100,102,106,107,108,109,110,115,117,118],elsewher:108,emac:101,email:[0,93,100,104,109],emb:[100,118],embed:[84,93,100,115],embperl:107,emded:100,emit:114,emphasi:109,empti:[20,37,45,93,100,104,111,114,115,118],emptycrumb:46,emptystr:[31,37],emptytempl:37,emul:[12,84,100,117],enabl:[66,93,102],enableddirect:93,encapsul:114,enclos:[37,84,93,99,110,115,117],enclosur:[37,93],encod:[4,10,19,37,40,57,66,93,100,110,113,115],encodeunicod:[10,93],encodeunicodecompattest:40,encodingdirect:37,encodingsearch:19,encount:[72,76,109,117],encourag:[88,91,109,111],encrypt:93,end:[1,4,16,20,27,37,46,47,48,66,69,72,73,75,76,78,80,84,85,91,93,96,99,100,101,106,107,109,110,111,114,115,116,117,118],endcacheregion:4,endcallregion:4,endcaptureregion:4,enddirectivenamesandhandl:93,endian:93,endpo:19,endtoken:93,energi:[109,117],enforc:93,engelhart:93,engin:[0,70,76,84,85,93,107,109,110],enhanc:[12,79,91],enough:[39,83,85,100,111,117],ensur:[93,100,108,109,111,115],entir:[20,72,93,100,108,110,117,118],entireti:10,entiti:[10,100,108,115],entri:[75,111,118],enumer:[65,93],env:[69,70,80,84,85,92,93],environ:[20,37,76,92,93,95,110,112,117],environment:[114,115,117,118],envvar:117,eof:37,eol:[37,93,110],eolslurptoken:[37,93],equal:[104,106,110],equiv:93,equival:[15,83,93,100,104,105,108,110,115,117],equval:100,erad:72,eric:93,erni:93,errmsg:54,erron:41,error:[2,3,4,8,18,19,20,21,27,41,54,77,88,91,93,105,107,109,110,111,117,118],errorcatch:[0,20,26,35,37,43,62,84,85,93,107,110,117],errorcatcherdirect:37,errorcatchernam:4,errorcheck:93,errorhandl:[73,102,110,111],errormessag:3,errorstempl:117,erwin:93,escap:[10,16,36,37,80,84,93,99,100,110,115,117],escaper:16,escaperegexchar:16,escapt:37,esoter:83,especi:[83,95,117,118],essenti:[85,108,110,117],establish:[105,118],esterbrook:[63,76,84,85,93,109],etc:[9,12,20,66,76,84,86,93,96,105,107,108,109,110,115,117,118],etext:108,euqival:100,eval:[72,73,100],evalu:[93,104,110,115,118],evalut:110,evan:[63,93,109],even:[0,12,15,44,69,76,93,100,101,105,109,110,114,117,118],even_i:44,evenrow:100,ever:[85,110],everi:[10,54,69,72,79,84,91,93,100,104,106,108,111,115,117,118],everybodi:100,everyon:88,everyth:[20,41,66,83,109,115,117],everytim:93,everywher:66,exact:[100,102],exactli:[78,93,106,108,110,117],examin:85,exampl:[1,4,15,20,46,66,69,72,80,84,91,93,94,95,96,100,104,105,107,108,111,115,116,117],exc:54,exc_info:73,exc_val:[8,73,102],except:[2,3,4,7,8,15,16,18,19,20,21,31,34,36,37,39,44,54,55,66,69,72,73,83,84,85,93,105,107,110,111,117,118],excit:117,exclus:[66,93],exec:[20,117],execut:[20,83,93,95,102,104,106,107,108,109,110,114,116,118],executecal:[4,15],exist:[1,20,27,54,72,73,83,84,85,91,93,100,109,114,115,117,118],exit:[3,41,93,104],expand:[69,84,93],expans:20,expect:[20,27,37,39,66,69,78,83,93,109,110,111,117,118],expectedoutput:[37,83],expectedoutputsubstr:27,expectedstatu:27,expecterror:27,expens:[72,117],experi:[15,88,109,110],experiment:[111,115],expir:104,explain:[15,20,93,94,106,109,110,117],explan:99,explanat:12,explicit:[37,84,93,106],explicitli:[93,94,108,110,115,118],explictli:93,exploit:83,expos:64,expr1:115,expr2:115,expr3:115,expr:[4,37,93,100,104,108,110,115],exprcompon:4,express:[16,37,72,75,76,84,93,100,104,106,107,108,110,117],expressionfilt:93,expressionfilterhook:93,expressli:100,exprtyp:93,expwebwar:118,extend:[20,37,43,79,91,92,93,94,99,100,107,109,110,111,114,117,118],extendsdirect:37,extens:[47,48,76,90,91,117,118],extensionstoignor:118,extent:93,extern:[93,108,115,117,118],extmsg:16,extra:[37,80,93,104,110,114,117,118],extra_vars_func:[47,48],extract:[76,100,108,114],extraimportstat:[4,5],extraurlpath:118,extrem:[15,20,105,110,117],eymard:93,face:[88,93],facil:[18,93,111],facilit:111,fact:[37,78,100,108],fail:[20,37,41,83,93,102,105,118],failfast:41,failur:[10,41,93,105,118],failureexcept:31,fairli:[83,93],fake:[93,118],fall:[15,76,93,105],fals:[2,3,4,15,18,19,20,27,34,37,47,48,69,70,73,75,78,84,85,93,100,104,109,110,114,115,117,118],falseexpr:4,familiar:[73,85,94],faq:[69,85,109,117],faqw:85,far:[15,76,84,88,100,110],fashion:[37,66,93,94],fast:[10,109],faster:[15,90,93,100,105,109,117],favor:93,featur:[69,72,76,79,83,84,88,92,93,101,105,107,108,109,110,111,115,117,118],feb:93,februari:93,fed:[4,93],feedback:76,feel:[91,110,111,118],fetch:100,fetchurl:100,few:[20,37,76,84,85,93,94,100,118],fewer:117,field:[20,44,93,109,110,117,118],fieldstorag:93,fifti:44,fig:96,figur:[69,72,94,95,96],fil:80,file:[3,4,5,6,9,11,12,18,20,26,27,35,36,37,41,43,46,47,48,54,69,70,73,76,77,79,80,84,85,86,91,92,93,95,99,100,103,106,107,108,109,110,111,114,115,117,118],filecont:9,filefind:9,filenam:[4,6,9,19,20,47,48,85,93,111,117,118],filename_expr:115,filerequir:83,filespec:93,filesystem:[12,93,117,118],fileutil:[0,62,107],fill:[3,27,45,72,74,76,77,79,85,86,93,96,100,102,105,106,108,109,110,111,114,115,116,117,118],filter:[0,9,20,24,26,35,36,37,43,62,69,73,75,78,84,85,91,93,100,107,110,117],filter_class_nam:115,filterarg:4,filterdir:9,filterdirect:37,filternam:80,filterslib:[20,26,35,43,115],filtertest:34,find:[1,9,19,83,93,100,104,105,109,110,111,117,118],findandreplac:9,findbol:19,findeol:19,findfil:9,fine:[76,83,93,105,108,110,111],finish:[85,93,106,111,117],first:[20,36,44,69,72,76,78,79,83,84,85,88,93,100,101,102,105,106,108,109,110,115,117,118],firstnam:[100,104,109],firstvalu:44,fit:[83,84,85,117,118],five:115,fix:[83,88,92,93,109,110],flag:[20,85,93,118],flake8:92,flat:[27,75,93,100,104],flatrecursecollis:27,fledg:100,flesh:111,flexibl:[0,20,72,91,93,100,105,109,115,118],flintston:105,flow:[76,77,91,100,107,109,110,115],flowcontrol:[75,104,115],flush:[7,117],fly:106,fname:110,fnm:12,follow:[1,15,20,27,31,36,37,72,83,84,85,88,93,99,102,104,105,106,108,109,110,111,115,117,118],font:115,foo:[20,37,66,84,93,100,110],foofoo:100,footer:[93,96],fopen:20,forbiddendirect:16,forbiddenexpress:16,forbiddensyntax:16,fordirect:37,foreach:100,forev:[42,115],forget:[69,75,114],forgot:117,forgotten:93,fork:[91,93],form:[0,15,20,37,45,75,76,93,99,102,107,109,110,111,114,115],format:[3,41,47,48,76,91,93,100,109,111,113,115,117,118],formatmetatag:111,formatt:93,former:72,formula:84,forum:118,found:[9,12,15,20,34,37,53,73,88,93,102,105,106,108,110,111,117,118],four:[85,100],fprintfmessag:3,fqname:12,fragil:72,fragment:[47,48],frame:[4,15,93],framework:[0,2,20,39,64,91,93,100,102,107,108,109,111],framwork:93,franz:109,fred:105,free:[91,111,117],freebsd:105,freeli:[100,117],frequent:[69,85,115,117,118],fri:70,friendli:[45,85,93,101,109,111],frogqueri:100,from:[4,10,12,15,18,20,26,31,33,35,36,37,40,41,43,46,66,69,72,73,75,76,83,84,85,88,89,90,91,92,93,95,96,99,100,104,105,107,109,110,111,114,116,117,118],fromlist:12,front:[18,109],frozen:12,frozenimportdirector:12,frustrat:[88,109],full:[4,55,91,93,100,109],fulli:[91,109],fullpath:9,fun:80,func2:[93,110],func3:110,func:[20,31,37,84,93,110,115],functhatrais:31,functionarg:115,functioncal:115,functionnam:4,funformkit:[100,118],further:[15,20,46,95,100,108,110],furthermor:100,futur:[7,20,64,69,83,86,93,100,111,115,116],gain:95,gajda:93,game:0,gape:93,garbag:37,gave:76,gazett:114,geiger:109,geir:109,gelato:76,gen:93,gencacheinfo:4,gencacheinfofromarglist:4,gencheetahvar:4,genclasscod:37,gener:[0,1,4,9,12,20,36,66,69,70,72,73,75,76,78,79,80,82,83,84,85,91,93,95,96,99,105,106,107,108,109,110,111,114,116,117,118],generatedclasscod:20,generatedmodulecod:[20,84],generatedpycod:20,genmodulecod:37,gennamemappervar:[4,93],genparsererrorfrompythonexcept:20,genplainvar:4,gentempl:84,gentimeinterv:4,genutil:[4,93],geoff:109,get:[2,12,18,20,31,37,38,43,69,73,74,76,84,86,90,91,93,100,104,106,107,108,110,111,114,117,118],get_suffix:12,getallvalu:[20,118],getarglist:16,getarticl:1,getarticleid:1,getattr:[73,80,85,95,117],getattrexcept:36,getattrtest:36,getbundl:3,getc:19,getcacheitem:1,getcacheregion:20,getcustom:[15,110],getdata:1,getdescr:12,getexpirytim:1,getexpress:93,getfilecont:[20,100],getfilestat:9,getfoo:108,getlin:19,getmethod:37,getmod:[11,12],getmodulecod:4,getmoduleencod:4,getmtim:[70,73,75,78,84,85],getnamechunk:93,getnonwhitespac:19,getparam:37,getpathext:12,getrefreshtim:1,getrowcol:19,getrowcollin:19,getsuffix:12,gettemplateclass:93,gettext:[4,84,93,100,107],gettextiledcont:[20,93],gettexttoken:117,gettingstart:[105,109,118],gettyp:37,getunknown:93,getvalu:[7,69,73,75,78,84,85,100],getvar:[20,37,93,100,110,117],getwhitespac:19,gill:83,git:88,github:[0,88,90,109,112,118],give:[46,69,80,85,86,91,93,100,107,108,114,117,118],given:[20,37,41,56,57],glob:[9,111],global:[4,12,20,37,73,80,83,84,85,93,108,110,115,117,118],globalsetvar:[73,75,78,84,85],globpattern:9,glossari:106,glue:108,gmail:[63,93],gmtime:96,gnuwin32:83,goal:[72,117],gobbl:[19,37,93,110],gobblewhitespacearoundmultilinecom:93,goe:[10,100,109],going:[76,93,118],gone:[93,104],good:[15,45,88,102,110,111],goodi:[93,117,118],googl:[15,63,93,96,103,110],gordon:12,got:[76,93,111],gotobookmark:19,gotten:12,govern:106,grace:93,gracefulli:[41,83],gradual:109,graham:[93,109],grammar:77,grandkid:27,grandpar:111,graphic:[91,109,118],great:[76,93,117],greater:[53,118],greet:[85,109],greg:[93,117],gregori:93,grei:100,grew:109,grok:[4,93],ground:66,group:[16,109,117],guarante:[42,111],guess:[10,101],guess_lex:10,guid:[20,72,83,85,91,93,106,108,110,112],guidelin:[64,93],gutenberg:108,hack:[12,83,93],had:[10,72,76,93],hadn:109,hahaha:73,haigh:63,hairi:91,half:[93,118],hall:[93,109],halt:102,hand:[20,117,118],handi:[18,93],handl:[1,20,37,66,72,77,85,91,93,107,108,109,111,114,117,118],handlei18n:93,handler:[93,110],handlerforextendsdirect:93,handlewsbeforedirect:4,happen:[20,76,80,85,88,105,109,110,111,115,117],happi:91,hard:[72,76,100,108,109,110,117],hardcod:117,harder:[69,101,117],harmless:4,harri:91,has:[10,15,18,46,65,66,67,69,72,76,78,83,84,85,86,93,100,101,102,104,105,106,108,109,110,111,112,115,117,118],has_lots_of_condit:110,hasattr:83,hasbookmark:19,hascooki:118,hasexpir:1,hasfield:118,hash:[37,93,94,99,110],hashdict:20,hashlib:66,hashlist:20,hashtabl:100,haskei:15,hasset:18,hasvalu:118,hasvar:[20,93,117],hat:40,have:[2,12,15,20,53,63,66,72,73,76,79,80,83,84,85,86,88,93,95,99,100,103,104,105,106,107,108,109,110,111,114,115,118],haven:[105,108,109,117],head:[95,105,108,109,111,115],header:[4,10,43,93,107,111,114],hear:117,heavi:66,hei:[102,110],height:[20,111,118],held:109,hell:76,hello:[20,66,84,85,93,95,105,109],help:[3,20,83,86,93,94,99,100,101,105,109,110,114,117,118],helper:[55,83,108,118],henc:117,her:118,here:[12,15,20,42,65,69,76,80,84,85,86,88,93,99,100,102,104,105,108,109,111,114,115,116,117,118],hereaft:66,hex:[100,110],hexdigest:66,hidden:[109,118],hide:[20,45,111],hierarch:118,hierarchi:[46,96,105,111,118],high:83,higher:110,highest:108,highli:[91,109],highlight:[10,29,93,101],his:[53,76,93],histori:77,hit:93,hiya:105,hmm:[78,111],hola:110,holder:1,hole:93,home:[20,26,35,43,46,105,111,112],homepag:[0,46],hood:[20,93,109],hook:[9,11,12,20,86,93,99],hope:109,host:[88,118],hour:[76,115],housekeep:105,how:[4,20,37,44,66,69,71,72,74,76,79,81,82,83,85,91,101,103,104,105,107,108,110,111,116,117,118],howel:112,howev:[86,93,96,100,101,104,108,110,111,115,117,118],howwork:[105,109,110,118],href:[100,104,109],htm:[83,112],html:[10,12,20,21,23,43,46,47,48,56,57,72,80,83,84,91,93,95,100,101,105,107,108,111,112,115,117,118],html_option:100,html_select_d:100,html_select_tim:100,htmldecod:[0,52,93],htmlencod:[0,52,56,93],htmltag:111,http:[0,1,10,12,20,34,40,83,84,85,88,93,100,108,109,111,112,114,115,117,118],http_equiv:93,httprequest:118,httpservlet:[20,118],human:[106,110,118],hundr:93,huss:93,hybrid:118,hyperlink:[111,115],hyphen:[104,118],i18n:[0,13,20,93],i18ndirect:37,ian:[45,63,76,84,85,93,109,111],ianbick:63,ibm:112,icon:93,idea:[20,76,88,100,109,115],ident:[69,85,93,100,104,108,110,118],identifi:[15,37,101,106,110],idiot:73,idir:27,idirflatrecursecollis:27,idirodirrecurs:27,idirrecurs:27,idontexist:102,iexist:102,ifdirect:37,ignor:[20,41,80,93,108,110,114,116,117,118],ignorebasenam:9,ignoredir:9,illeg:54,illustr:[104,109],imag:111,imagemagick:111,imagin:101,img:109,imgtag:111,immedi:[93,104,108,117,118],immun:111,impact:[86,102],implemen:[18,93],implement:[0,1,20,43,56,57,62,69,72,76,86,93,95,100,104,106,107,109,110,111,114,115,118],implicit:108,implicitli:[78,94,108,110],importantexamplecas:37,importdirect:37,importdirector:12,importedvarnam:4,importerror:[10,66,118],importhook:[0,12,62,93],importmanag:[0,11,62],importset:111,importstat:4,imposs:72,improv:[91,93],impstat:4,inaccess:109,inadvert:117,inc:[53,93,96],incant:72,includ:[15,20,37,42,83,84,88,91,93,99,100,104,106,107,108,110,114,117,118],include_php:100,includedirect:37,includefilenam:[37,115],includefrom:[4,80],includeid:[80,93],includerawexprinfilterarg:93,includeunderscor:4,incompat:111,inconsist:117,incorpor:[91,111],incorrectli:108,incorrig:117,increment:108,indent:[0,4,37,46,52,83,85,93,100,104,107,110,111,113,117],indent_dir:53,indentprocessor:53,independ:93,index:[4,44,90,91,96,100,112,118],indexformat:44,indexlog:108,indic:[84,93,118],indirect:83,individu:[10,100],ined:93,infil:[18,117],infinit:[93,104],influenc:85,info:[47,48,93,118],inform:[4,15,20,27,69,84,85,88,93,100,105,106,109,110,111,117,118],infrastructur:83,infrequ:115,ing:37,ingham:92,inherit:[20,43,77,79,83,84,89,91,92,93,105,107,110,111,114,115,117],inheritanceetc:[78,100,106,108,117,118],ini:[100,111,117],initi:[20,40,85,93,107,108,117],initialmethodcom:4,inlin:[28,36,38,66,93,99],inlineimporttest:36,inlinespanishtest:40,inner:108,innerblock1:108,innerblock2:108,innermost:84,input:[10,20,37,84,85,93,100,105,107,109,114,115,117],inputencod:37,inquiri:117,inquirytempl:117,insert:[4,20,93,100,101,108,117,118],insertlin:93,insid:[20,66,69,80,83,84,93,99,100,102,104,105,108,109,110,115,116,117,118],insignific:105,inspir:[69,109,110,115],instal:[10,11,12,83,90,92,93,107,109,112,117],install_eol:37,instanc:[1,4,9,15,19,20,41,69,72,73,75,85,93,96,100,104,105,106,108,110,111,115,117,118],instancevar1:31,instantan:117,instanti:[72,85,93,96,105,117,118],instead:[4,10,20,37,65,69,75,76,78,84,93,94,100,104,105,106,108,110,111,114,115,117,118],instruct:[77,91,93,106,107,110,118],insul:111,intact:[10,93],integ:[20,93,118],integr:[91,100,109,118],intellig:66,intend:[10,94,110,111,117],intens:115,intent:[93,108],interact:[99,105],interchang:72,interest:[76,85,100],interfac:[21,91,93,105,109,110],interfer:110,intermedi:[20,79,108,110],intermix:118,intern:[20,79,93,110,117,118],internation:[84,117],internet:[100,118],interoper:94,interpol:[76,115],interpret:[20,93,95,101,115,117],interrel:74,interspers:110,interv:[69,110,115],intn:37,intra:93,intrins:72,introduc:[36,66,85,93,94,104,105],introduct:[72,77,89,93,100,101,107],introspect:[4,93],invalid:[16,37,69,75,85,93,109,115],invent:101,invers:56,invok:[100,106,108,109,115],involv:[91,93,118],iptabl:93,irix:105,iron:[20,44],is_builtin:12,is_frozen:12,isbuiltin:12,iscgi:[43,93,114],isclassmethod:4,iscontrolledbywebkit:[93,114],isdbupd:[69,115],isdir:[9,12],iserrorcatcheron:4,isfrozen:12,isinst:93,isklass:4,islinecleartopo:19,isn:[15,37,97,110,115],isnew:1,isnonneg:44,isnotnon:44,isnumer:44,israw:4,isrunningfromwebkit:93,isstaticmethod:4,issu:[0,10,36,66,72,88,91,93,109,112,117],iswebwareinstal:93,ital:110,item0:84,item1:84,item2:84,item:[1,15,20,37,44,69,83,93,100,104,110,111,115,117,118],iter:[34,93,100,104,111],its:[0,9,10,20,44,69,72,73,76,85,91,93,100,102,103,104,105,106,108,109,110,111,115,117,118],itself:[42,80,85,91,93,94,108,109,110,117],jai:109,jakarta:[93,100,112],jame:[63,75],jan:93,januari:[69,76],java:[0,76,100,109,110,112,115,118],javascript:[100,111],javascripttag:111,jbq:[63,93],jbq_utf8_test1:40,jbq_utf8_test2:40,jbq_utf8_test3:40,jbq_utf8_test4:40,jbq_utf8_test5:40,jbq_utf8_test6:40,jbq_utf8_test7:40,jbq_utf8_test8:[40,93],jean:[63,93],jeff:[31,37,93,109],jeremiah:109,jhu:93,jjinux:63,job:118,joe:[75,104],johann:93,johnson:[31,37,93,109],join:[9,10,80,93,100,104,115],jon:63,jonathan:[63,92,93],jpq_utf8_test3:93,jroger:63,jsp:[107,109],juli:93,jump:104,jun:[65,66,67],june:93,jungl:12,junit:41,junk:93,just:[15,20,69,73,76,82,85,88,91,93,99,100,101,104,105,108,110,111,114,115,117,118],jython:93,karmix0:[63,93],karpierz:[63,92],kattner:109,kde:93,keen:108,keep:[20,53,76,83,90,93,114,115,117,118],keepreftogeneratedcod:20,kei:[1,2,4,15,18,20,37,54,69,76,84,93,94,100,104,106,110,111,116,117],kept:93,kerr:[15,110],keyerror:[2,8,93],keystrok:72,keyword:[4,6,12,20,37,54,69,80,93,102,110,111,115],kin:104,kind:[84,93,117],kindli:88,kiril:93,klass:[20,93],klitzk:[63,93],kludg:[20,93],knight:63,know:[20,69,76,105,109,110,111,115,117,118],knowledg:[79,109],known:[15,66,105,108,110],koi8:[43,114],kulezj:93,kumar:63,kuratomi:93,kurt:63,kuzelj:[53,93,109],kwarg:[5,6,7,10,27,37,41],kws:20,lack:[40,100],lakshmi:63,lambda:[84,93],lang:[20,93,112],languag:[64,72,76,79,91,93,94,100,103,106,107,109,117],larg:[34,53,76,93,103,108,109,110,118],larger:100,larri:[78,108],last:[1,15,20,36,44,70,73,78,80,84,85,93,100,104,108,109,110],lastvalu:44,late:76,latebind:72,later:[72,76,80,86,93,100,102,108,115,117,118],latest:115,latex:[93,109,115],latin:93,latter:[72,115],launch:118,law:[15,110],layout:[12,93],lazi:[1,110],ldelim:100,lead:[10,37,75,76,91,93,100,108,109,117],leaf:[108,118],leak:93,learn:[72,76,79,100,109,111],least:[1,20,83,84,94,101,110,114,118],leav:[0,20,44,69,93,102,117,118],led:76,left:[15,84,93,106,110,115,117],leftmost:84,legal:110,legalkeyword:[54,111],legalkw:93,legitim:[47,48],len:[37,100],length:[44,80,108,115],lengthi:93,less:[12,53,93,109,111,117],lesson:72,let:[72,75,80,84,105,108,111,115,117,118],letter:[15,44,105,106,110],leve:53,level:[12,27,28,37,53,66,84,93,100,106,108,110,115],levelstack:53,levestack:53,lexer:[10,16,81],liam:118,lian:[76,93,109,117],lib64:36,lib:[73,84,93,105,117,118],librari:[12,76,83,91,93,100,105,107,108,118],licens:[20,93],lie:[4,118],lied:80,lies:[75,99],life:117,like:[9,11,15,20,41,56,66,69,72,73,76,80,83,84,85,86,91,93,94,95,99,100,101,102,108,109,110,111,114,115,117,118],likewis:[37,104,108],limit:[20,93,95,109,110,115],line:[4,7,10,20,21,27,36,37,66,69,70,73,75,78,80,83,84,85,91,93,99,100,104,105,106,107,108,109,110,112,114,118],line_sep:53,linecol:[4,8,73,93,102],lineno:16,linenum:19,ling:10,link:[91,107,111],linter:92,linux:[10,92,105,114],linuxgazett:114,linuxjourn:93,lis:44,lisp:93,list:[4,8,9,20,27,37,44,46,54,72,76,79,83,84,86,93,100,102,104,105,106,108,109,110,111,112,115,116,117,118],list_:54,listdir:9,listerror:[8,102],listinfo:112,listtest:27,liter:[72,76,80,84,85,100,108,110,115],littl:[3,12,18,69,76,83,93,96,117],live:[12,66,76,117,118],load:[12,20,95],load_modul:12,load_templ:[47,48],load_template_fil:[47,48],load_template_modul:[47,48],load_template_str:[47,48],loadco:12,loader:41,loadingsit:[47,48],loadmod:12,loadmodul:40,local:[4,12,20,36,37,66,69,73,75,78,80,85,93,104,106,108,109,110,111,117,118],localsdict:73,locat:[46,66,104,105,108,111,114,117],locate_cheetah:27,lock:[93,117],log:[20,110,117,118],logic:[76,83,100,108,109,118],login:105,longcompile_compilersettingstest:34,longcompileandrun:34,longcompiletest:34,longer:[37,93,98,111,115,117],longmacro:93,longplacehold:72,longwind:93,look:[15,19,20,53,66,69,72,74,79,81,83,84,85,87,93,95,100,101,106,109,110,111,115,117,118],lookup:[31,69,72,80,84,85,89,93,100,106,110,115,117],lookuperror:[15,93],loop:[31,34,37,93,99,100,104,110,111,115,117],loos:93,lose:73,lost:[12,111],lot:[37,93,95,100,117,118],lotta:[69,101],love:[104,109],lover:44,low:117,lower:[93,100],lowercas:93,lowest:108,luca:93,lvalu:[106,110],mac:[12,93],macdonald:93,maco:83,macro:[0,62,93],macrobodi:93,macrodirect:93,macromedia:112,macronam:93,made:[12,63,72,83,85,86,93],magic:108,magnusson:109,mai:[7,20,69,72,73,76,83,85,93,95,100,104,105,106,108,109,110,111,114,115,117,118],mail:[76,93,100,105,108,109,111,112,115,117],mailto:[100,104,109],main:[3,5,20,21,27,41,69,70,73,75,78,80,84,85,95,100,101,106,108,110,114,115,118],main_dir:5,main_fil:5,mainclassnam:[4,5],mainli:[87,117],mainmethod:95,mainmethodnam:[4,5,20],maint:88,maintain:[69,76,83,86,91,93,99,100,101,102,106,109,110,111],maintian:[15,110],major:[20,91,92,93],make:[4,7,10,15,20,37,43,53,66,72,76,80,83,84,85,91,93,95,99,101,105,106,108,109,110,111,113,114,115,116,117,118],make_backup:3,makeappworkdir:118,makedir:54,makefil:[93,107,114],maker:[53,104],maketriplequoter:16,malici:117,manag:[15,18,105,110,111,118],mandatori:93,mani:[20,37,72,76,80,84,85,88,93,100,105,108,109,110,111,117,118],manner:118,manti:36,mantis_issue_11_regression_test:36,mantis_issue_21_regression_test:36,mantis_issue_22_regression_test:36,manual:[20,93,100,118],manualoverrid:93,map:[12,15,93,100,110],mapbuiltin:31,mapnam:93,mapper:72,mar:93,marc:63,march:93,marcin:93,margin:[4,10,117],mark:[4,84,93,94,99,108,109,110,114,117],markdown:[10,29,93,105],marker:[76,100,110],markup:[66,91,96],master:[88,91],mat:[75,104],match:[9,19,20,37,41,72,83,93,106,110,111],matchnonwhitespac:19,matchwhitespac:19,math:[37,78,100,108],mathia:[63,92],mathmodul:108,matter:[110,115],matur:107,max:[19,44,110],max_num_pyston:34,maxim:72,maximum:[72,93],maxlen:[10,37,80,115],maxsplit:100,mayb:[16,86,100,111,117],mcmillan:12,md5:66,mean:[20,44,66,72,80,83,84,86,93,95,96,105,106,108,110,114,115,116,117,118],meant:[10,93,96],meantim:118,meanwhil:[76,91],measur:93,mechan:[80,91,93,100,109],median:44,meeni:78,meet:[104,118],mel:63,member:[76,100,109],memcach:[1,2,93],memcachedcachestor:[1,2,93],memori:[1,20,93,95,104,110,115,117,118],memorycachestor:2,mention:[83,105,108,117],menu:[46,111],menubar:46,menucssclass:46,menulink:46,menulist:[46,111],mere:[105,108,115,118],merg:[16,18,88,93,111,117],mergenesteddictionari:18,messag:[3,20,27,54,83,93,105,109,118],messier:[15,110],met:76,meta:[20,93],metadata:93,metapath:12,metatag:111,meth1:[20,31,37,84,93],meth1n:20,meth2:[31,37,84,93],meth3:[31,93],meth:[31,37,84],method1:99,method2:99,method:[2,4,7,10,15,18,20,23,36,37,43,46,55,66,70,73,75,78,79,80,83,84,85,91,93,95,96,99,100,102,104,105,106,107,108,109,110,111,114,115,118],methodbodi:4,methodcompil:[4,37,93],methodcompilerclass:4,methodcompilerclassforinit:4,methoddef:4,methodnam:[4,25,27,28,29,30,31,32,33,34,36,37,38,40,41,117],methodsignatur:4,methwithpercentsigndefaultarg:37,mexico:110,michael:[93,109],michel:100,mid:109,middl:[66,113],might:[45,72,88,93,96,108,110,111,117,118],mightfail:102,mika:63,mike:[20,44,63,76,84,85,93,101,109,111],mikeb:[63,93],mikola:63,mimic:[20,118],min:44,mind:[93,115,117],mindspr:63,minei:78,mini:100,minim:[93,109],minimalist:105,minimum:[115,118],minimum_monkei:100,minor:[92,93],minut:[105,115],mirror:[102,110,114],misc:[0,24,52,93],misccomplexsyntax:37,miscellan:54,miscompil:110,misguidedli:93,misl:37,mismatch:[37,93],miss:[20,54,69,84,93,102,107,111,117,118],misspel:93,mistak:[72,118],mit:20,mix:[20,93,100],mixin:[18,43,83,93,94,117,118],mkdir:54,mkdirswithpyinitfil:54,mock:101,mod:[12,31],mod_python:[20,95],mode:[3,37,93,95,101,105,118],model:[43,65,69,118],modestli:86,modif:[85,93],modifi:[20,54,70,76,79,83,85,93,100,109,110,111,115,117,118],modul:[0,13,22,24,42,47,49,52,62,66,70,76,77,78,83,84,91,93,94,95,99,100,102,103,105,106,108,109,110,111,114,115,117,118],modular:[91,100,109],module_or_object:108,modulecompil:[4,5,93],moduleconst:4,moduledocstr:4,modulefoot:4,moduleglob:20,modulehead:4,modulenam:[4,5,20,40],modulo:[20,93],moe:[78,108],moin:112,moment:[93,100],mondai:[20,118],mondoreport:[0,42,93,100,111],mondoreportdoc:111,mondoreporttest:111,monitor:[93,115],monitorsrcfil:93,monkei:100,monkey_limit:100,monkeypox:63,month:76,mood:91,more:[1,4,9,10,15,20,37,56,57,72,76,77,83,84,85,88,93,100,103,104,105,106,107,109,110,111,112,115,117],more_condit:110,morefilt:115,most:[20,36,66,73,76,83,85,93,94,108,109,110,115,117,118],mostli:[66,117],mountainwebtool:112,move:[72,93,109,111,117],msg:[16,27],msgid:[20,93],mso:20,mtime:93,much:[10,15,20,27,44,72,80,93,100,109,117],muck:20,multi:[9,10,20,37,70,93,99,105,106,107,108,110,115,118],multilin:[37,93,99,117],multilinecommentendtoken:116,multilinecommentstarttoken:116,multilingu:100,multipl:[20,37,69,76,86,92,93,108,110,117,118],multipleinheritancesupport:38,multithread:117,murphi:93,must:[20,36,43,47,48,83,84,88,93,100,105,106,108,110,111,114,115,117,118],mutex:117,mutual:[66,93],myarrai:108,myattr:110,myclass:117,mycontain:93,mycooki:118,mydefault:117,myfield:118,myfilterclass:115,myinstanc:110,mylist:[110,115],mymaxlen:115,mymeth2:108,mymeth3:108,mymeth:108,mymethod:[95,117],mymixin:117,myobject:110,myparsetext:115,myprecompiledtempl:105,mypurepythonclass:108,mypythonclass:[43,114],mysessionvar:118,myset:111,mysql:112,mysubscript:110,mytempl:[20,93,99],mytemplateclasss:20,myvalu:118,myvar:[108,110,116],name:[4,11,12,15,16,18,19,20,31,37,41,63,69,72,76,78,84,85,91,93,100,104,105,106,108,109,110,111,115,117,118],namechunk:[4,16],namedgroup:16,nameerror:[84,85],namemapp:[0,4,20,24,36,37,62,72,73,84,85,90,92,93,100,102,105,106,107,117],namemapper_pur:[0,24],namemapperdict:93,namemapperpart:4,namemappertag:93,namemappertest:[31,32],namesak:109,nameslist:[78,108],namesmulti:[20,118],namespac:[0,20,26,31,35,37,43,78,83,93,100,102,105,106,107,117],namespace2:20,namesplit:12,naoeu:84,napkin:76,natur:[76,115],nautocal:84,navig:111,nbsp:[108,115],ndeepli:84,ndict:84,neat:[3,118],necessari:[4,69,72,83,85,86,88,93,106,107,111,115,117],necessarili:[72,118],need:[1,12,15,20,76,77,81,83,84,86,87,91,93,94,95,96,100,104,108,109,110,111,114,115,117,118],needless:93,neg:[37,39,104],negativeerror:44,neither:100,nest:[18,37,75,76,84,93,100,102,104,108,110,111,115,117],nesteddict:[31,84],nestedfunc:[31,84],nesteditem1:84,nesteditem2:84,net:[20,69,83,100,112,115,118],netus:100,network:93,never:[4,93,100,101,105],nevertheless:[76,117],new_modul:12,newin:37,newlin:[10,37,78,93,104,108,110,114,115],newmod:12,newset:[18,117],newspap:[20,118],newstyl:[12,93],next:[4,16,44,69,76,84,85,88,93,99,104,105,108,110,111,115,117,118],next_batch:44,nextcacheid:4,nextcallregionid:4,nextcaptureregionid:4,nextfilterregionid:4,nextpag:44,nfloat:37,nfunc:84,nfunction:84,ngettext:117,nhello:93,nicetracebacktempl:93,ninetynin:110,nintn:37,nlist:84,nnest:84,no_cach:93,noah:92,nobackup:[27,93],nobject:84,nobl:85,nodefault:18,nodelet:27,non:[15,20,80,91,93,105,107,108,109,110,111,115,118],none:[1,2,3,4,5,7,10,12,15,16,17,18,19,20,23,26,27,31,34,35,37,40,41,43,44,46,47,48,54,70,73,75,78,80,84,85,86,93,104,108,109,110,111,115,117,118],nongroup:16,nonhtml:113,nonnumericinputerror:[20,55,118],nontoken:37,nonzero:27,normal:[20,27,56,69,84,85,93,99,101,102,105,106,115,116,117,118],normand:93,normpath:17,noshad:96,notat:[4,15,84,93,100,106,110,117],note:[4,10,12,15,20,37,72,75,76,83,90,93,95,99,100,104,108,110,111,115,117,118],notfound:[15,20,31,36,73,84,85,93,102,110,111,117],noth:[20,37,45,54,82,93,100,104,108,110,111,114,115,117,118],notic:[15,72,84],notion:94,nov:[44,93],novalu:73,now:[20,37,72,76,93,96,105,108,109,110,111,114,115,117,118],npublic:37,npython:84,nstring:[37,84],nstringn:37,ntemplat:37,ntext:70,nthi:20,nucleu:76,nullstream:41,num:[37,75,93],number:[18,20,44,69,75,80,84,85,93,96,100,102,103,104,105,108,111,115,118],numer:[20,37,93,104,118],numon:37,numtwo:37,nveri:84,obei:[15,110],obj:[7,15,86,93,117],object:[1,2,3,4,7,9,10,14,15,16,17,18,19,20,31,36,37,41,42,45,53,54,69,72,76,79,80,83,84,85,91,93,94,100,106,107,108,109,110,111,112,115,117,118],objectvalu:100,observ:105,obtain:109,obviou:117,obvious:72,occas:118,occur:[36,72,73,76,93,102,106,110,116,117],ocean:75,oct:[31,93],octob:[93,109],odd:[44,76],odd_i:44,ode:80,odir:93,off:[4,10,15,20,34,37,53,66,80,86,93,102,110,117,118],offend:[102,104],offer:[76,91,115],offici:118,offset:19,offshoot:118,often:[69,108,109,112,115],ohmu:63,old:[20,92,93,98,100,117],older:[66,84,92,93,100,117],oldest:118,oldstyl:93,oleg:[63,92],oliveira:93,omit:[108,110,115],ommiss:100,onc:[76,100,102,115,117,118],one:[1,3,9,10,12,20,31,37,53,69,76,80,83,84,85,93,94,99,100,104,105,106,108,109,110,111,114,115,117,118],onefil:27,onefilenoextens:27,onefilewithodir:27,onelineif:[104,115],ones:[93,117],onli:[2,7,15,20,37,53,69,76,78,83,84,85,86,93,95,100,104,105,106,108,109,110,111,115,116,117,118],onto:115,opaqu:[20,93],open:[0,3,20,91,93,100,103,110,117],oper:[76,88,94,100,104,105,108,109,110,111,115,116,117,118],operand:37,opinion:100,oppos:117,opposit:[104,108,115],opt:[3,5,73,105],optik:93,optim:[15,91,93,95,107],option:[3,4,15,20,27,37,47,48,83,93,95,100,105,108,115],optionpars:93,optionstr:18,optionxform:18,optpars:93,order:[15,20,69,75,76,93,95,100,102,105,110,111,115],ordereddict:18,ordinari:[69,72,80,85,106,110,118],org:[0,10,12,20,63,84,85,93,100,108,111,112,117,118],organ:[76,88,118],orient:[15,20,91,94,109,110],orig_tran:69,origin:[20,63,91,93,100,108,114],origlist:44,orphan:44,orr:[20,44,63,76,84,85,93,109,111],orthogon:93,other:[0,7,20,31,37,69,72,76,78,84,85,88,90,91,93,94,95,105,106,107,108,109,110,113,115,117],otherfunc:93,otherhand:88,otherhtml:114,othertip:118,otherwis:[4,18,20,27,54,83,84,85,93,94,108,110,111,115,117,118],ouput:[102,107],our:[20,29,69,72,73,76,84,85,93,101,110,118],out:[0,3,9,10,20,27,37,38,54,69,72,76,77,83,86,93,100,103,104,105,106,108,109,117,118],outdat:93,outer:108,outerblock:108,outlin:[36,64,76],outpt:108,output:[4,10,20,27,36,37,41,43,46,53,69,70,73,75,76,77,78,82,83,84,85,91,93,99,100,101,102,104,105,107,108,109,110,111,118],outputchunk:7,outputencod:37,outputfilt:93,outputrowcolcom:116,outputstr:20,outputtest:[37,83],outputtransform:20,outsid:[66,69,78,85,93,100,105,108,110,111,115],over:[37,75,93,100,109,110,111,117,118],overal:100,overhaul:109,overhead:117,overkil:118,overlap:44,overrid:[18,20,37,43,46,83,93,105,108,110,114,115,116,117,118],overridden:[1,4,20,41,108],overview:[0,62,74,91,107,109],overwrit:[18,83,117],own:[20,43,73,83,93,94,100,105,108,111,114,117,118],owner:[12,93],ownertyp:12,packag:[12,48,62,73,74,83,90,93,105,108,109,111,118],packagenam:12,page1:108,page1log:108,page:[20,23,44,57,72,78,84,85,90,91,93,94,96,101,105,107,108,109,111,112,115,118],pagebreak:44,pagenam:94,pair:[69,76,108,111,115,117],paragraph:[15,105],parallel:[93,100],param:37,paramet:[1,20,69,93,115,117,118],parent1:92,parent2:92,parent:[54,93,100,106,108,111,118],parenthes:[15,75,108,110],parenthesi:110,parentnm:12,parrot:[100,104],pars:[4,20,84,93,100,110,115,116,117],parseerror:[16,93],parseopt:3,parser:[0,4,5,10,14,19,24,62,77,91,93,107,110],parserclass:[4,5],parsercom:4,parserinstruct:[82,116,117],parsetest:37,part:[37,76,83,85,100,102,105,106,108,110,117],parti:[100,107,111,118],partial:[20,37,93,116],particular:[12,83,88,100,101,106,108,109],particularli:[91,93,94,95,109,115],pass:[4,6,10,20,37,44,54,69,78,80,83,84,85,88,93,100,102,105,107,109,110,114,115,117],passdirect:37,past:[93,108],patch:[37,77,88,92,93],path:[3,11,12,17,20,27,37,40,41,47,48,54,66,84,85,93,105,111,117,118],pathimportdirector:12,pathisdir:12,pathlist:12,pathnam:[12,117],pattern:[9,16,20,93,94,111],patternorr:9,paul:109,pdf:93,peek:19,peer:93,pend:[4,110],peopl:[76,91,103,104,109,118],pep:[12,65,93],per:[20,93,117],percentoftot:44,percept:117,perfect:88,perform:[0,4,24,62,72,76,84,86,91,93,102,106,109,118],performancesampl:34,performancetest:34,perftest:34,perhap:[69,117],period:[78,106,110,115,117],perl:[20,72,100,101,104,115,118],permiss:[93,105,111,114],permit:[75,93],perso:83,person:[91,109],pertain:96,peru:110,peter:93,pformat:73,phd:[20,26,35,43,63],phdru:63,philipp:93,philosophi:107,phone:104,phoni:117,photo:112,php3:112,php:[15,20,93,107,109,110,112,114,115,118],phpbuilder:112,phplib:[76,107],phrase:99,physic:110,pick:93,pickl:93,pictur:105,picview:112,piec:[4,12,76,88],pijlman:93,pil:111,ping:35,pinger:[0,24],pip:[92,105],pipe:20,pipelin:100,pje:93,pkg_resourc:10,place:[7,20,54,65,66,67,93,94,100,106,109,110,111,115,117,118],placehold:[4,10,16,20,37,72,73,76,77,78,79,80,83,85,86,93,100,101,102,105,106,107,108,109,111,114,118],placeholder_to_a_filter_inst:115,placeholder_to_an_error_catcher_inst:102,placeholdernam:[110,115],placeholderprocessor:93,placeholders_cal:37,placeholders_esc:37,placeholders_v:37,placeholderstarttoken:93,placeholderstr:37,placeholdertag:93,placeholdertoken:20,plachold:115,plai:94,plain:[4,57,69,93,110],plan:[69,88,93,100,105,115,118],planet:105,platform:[76,83,118],pleas:[7,83,88,100,105,109,111,118],plenti:115,plone:20,plowplat:76,plu:[37,93,100],plug:[100,105,109],plugin:[10,20,93,111,118],plumb:20,plural:[20,93],point:[15,20,44,76,87,93,100,104,108,110,116],pointer:93,pollut:[93,109],pop:[37,53],popen4:27,popen:27,popul:100,popup:100,popup_init:100,port:[76,100],portion:[85,93,100,104,109,116,118],pos:[19,37],posit:[19,37,46,93,106,110],position:93,posix:105,possibl:[1,15,20,69,83,86,93,108,110,115,116,117,118],post:[20,43,93,95,109,111,114,117,118],postgresql:112,postparsedirectivehook:93,postparseplaceholderhook:93,postpon:69,postprocessor:100,postscript:[109,117],potenti:[93,109],power:[70,84,85,100,109,118],pprint:73,ppu:92,practic:[44,91,108],pre:[20,89,104,115,118],preced:[37,110,115,117],preceed:110,precompil:[83,85,89,90,91,93,105,108],precursor:100,predat:12,predefin:110,prefac:[93,108],prefer:[15,100,108,110,111,115,118],prefix:[20,46,93,99,105,110,115,117,118],prematur:104,premis:66,prepar:[12,93,118],preparsedirectivehook:93,preparseplaceholderhook:93,prependtosearchlist:93,prepopul:72,preprocess:[20,53],preprocesserror:20,preprocessor:[20,33,38,93,100],prerequisit:106,preselect:[20,118],presenc:118,present:[109,117,118],preserv:[10,93,115],press:[20,109,117,118],pretend:115,pretti:[20,44,93,105,118],prettycountri:108,prev:44,prev_batch:44,prevent:[53,72,83,93,104,108,117],preview:[20,101,118],previou:[20,37,41,69,84,93,99,104,110,111,115,118],previous:[20,93,118],prevnextpag:44,prevpag:44,primari:[88,110],primarili:[88,93],primit:[76,100],princip:108,principl:[0,94,109,110],print:[3,20,27,73,84,85,93,100,104,105,108,110,111,115,117,118],printabl:108,printarg:78,printer:117,printf:93,printout:93,printsourc:117,printstat:9,prior:[20,72,88,93,96],prioriti:101,privat:69,privileg:105,probabl:[76,93,117,118],problem:[83,92,93,104,105,108],procedur:83,process:[1,53,65,85,91,93,104,107,114],processdir:9,processformdata:118,processtag:93,produc:[69,78,84,85,99,102,104,106,108,109,115,117,118],product:[76,109,111],program:[3,15,20,21,72,76,82,83,84,85,91,94,100,104,105,109,110,111,115,117,118],programm:[15,20,69,91,93,109,110],programmat:115,project:[20,26,35,43,76,100,109,112,117,118],promis:118,prompt:[83,105],prone:93,propag:93,proper:[40,93,96],properli:[20,36,41,93,96,105],properti:[41,93],propog:6,propos:[10,66,91,100],proprieti:104,protect:93,protocol:[1,20,114],provid:[1,2,4,7,11,12,15,17,18,20,23,55,66,69,72,83,86,91,93,99,101,102,105,106,109,110,111,114,115,117,118],prune:93,pseudo:[37,72],pshaw:[20,118],psp:[4,15,37,93,107,108,109,110],pspetc:100,psyco:[4,93],ptl:20,publish:112,pull:[88,92],punctuat:84,pure:[90,92,108,109,110,117,118],purpos:[15,20,64,72,93,100,101,110,111,115],push:[37,53,72,76],put:[4,20,54,69,76,83,85,99,100,104,105,108,109,110,111,114,115,117,118],py_resourc:12,pyc:[93,95],pygment:[10,93],pyimport_importmodul:93,pymodul:[84,85],pyo:93,pypi:[90,92],python2:[36,73,93,105],python3:93,python:[0,1,2,4,10,11,12,15,18,20,37,43,44,47,48,54,63,64,66,69,70,72,73,76,79,83,84,85,88,89,90,92,93,95,96,98,99,100,102,104,105,106,107,108,109,110,111,114,115,116],pythonmethod:117,pythonpath:118,pyunit:41,pyz:12,qualiti:109,quenot:[63,93],queri:[44,69,115,118],question:[69,85,93,112],quick:100,quickli:[66,72,76,93],quickstart:107,quiet:93,quit:[80,85,96,97,100],quixot:20,quot:[37,56,57,80,84,93,110,115,116],quotat:93,quote_plu:100,rais:[2,10,15,20,31,36,37,54,82,93,102,110,111,117,118],raisedirect:37,raiseifmiss:117,random:108,rang:[37,75,80,93,100,104,110,115],rason:20,rat:[75,104],rather:[15,20,72,76,80,84,85,93,100,105,106,108,110,111,115,117,118],ratifi:10,raw:[4,9,37,93,100,102,107,110,117],raw_stat:4,rawcod:[4,8,73,102],rawdirect:37,rawexpr:[4,93,115],raworencodedunicod:[10,20,26,35,43,93],rawplacehold:4,rawsourc:16,rawstat:9,rawstr:37,rc1:93,rdelim:100,reach:115,read:[15,19,20,43,69,76,78,82,93,100,107,108,110,111,114,115,117,118],readabl:[12,91,110,118],reader:94,readi:[108,111],readto:19,readtoeol:19,real:[7,72,76,85,109],realist:15,realiz:[76,83],realli:[37,73,76,77,80,93,96,107,115,117],reason:[54,65,66,84,85,93,100,105,106,109,110,114,117,118],rebuild:93,recach:69,recalcul:117,recap:117,receiv:[10,106,117],recent:[36,73,93,109,117],recip:[34,91,94,112],recipe1:94,recogn:[4,27,93,110,114,115,117],recommend:[93,109,110,117,118],recompil:[20,84,85,92,93,117],record:[20,44,111,118],recordresult:9,recordstat:44,recov:41,recreat:93,recurs:[9,18,93,100,111],recurseexplicit:27,recurseexplicitwithodir:27,recurseimplicit:27,recursivenul:[0,42,93,111],red:40,redbeard0531:63,redefin:[20,93,111],redefinetemplateblock:93,redesign:118,redhat:[40,63],redirect:118,redisplai:118,reduc:93,redud:93,redund:85,ref:93,refactor:93,refer:[18,20,65,83,84,86,93,96,100,106,109,110,111,117,118],referenc:78,refin:[76,111],reflect:105,refresh:[1,20,39,100,115,117],refreshcach:[20,115],refreshtim:1,refus:114,regard:114,regardless:[91,93],regex:[9,15,93],regex_replac:100,region:[1,20,69,85,93,100,110],regionid:[1,20],regiontitl:4,registri:12,registryimportdirector:12,regress:[0,24,41,66,93,105,109],regular:[10,16,37,76,84,91,106,110],reimplement:[20,91,93,108,109,111],reinterpol:115,reiter:110,rel:[20,69,93,100,111,118],relat:93,releas:[20,42,76,88,90,92,93,105,109],releg:109,relev:[20,88,93],reli:7,reliabl:[101,111],reliant:36,reloadhook:12,reloc:[38,66],remain:[42,93,105,115],remainderofexpr:4,rememb:[69,83,84,85,93,104,108,110,111,115,117,118],remind:[69,93],reminisc:72,remot:20,remoteaddress:118,remotenam:118,remoteus:118,remov:[10,54,56,76,92,93,100,108,111],removefromlist:54,renam:[53,92,93,108,110,118],render:[6,10,47,48,72,93,94,100,109,111],renderoutput:1,rene:93,reorgan:12,repackag:93,repeat:[37,83,93,100,107,108,109,110,115],repeatdirect:37,repeatedli:20,repl:[9,100],replac:[2,9,10,12,20,36,76,93,96,100,108,109,110,111,118],replacenon:37,replaceregexinfil:9,replacestrinfil:9,replic:20,report:[16,31,37,44,76,88,92,93],repositori:88,repr:37,repres:[4,18,20,46,85,106,111,117,118],represent:[18,93,105,115],reprnewlinethreshold:116,reproduc:109,reproduct:88,reprshortstrconst:116,repugn:72,request:[17,20,85,88,92,93,106,109,115,117,118],request_method:114,requir:[72,76,92,93,100,102,104,107,108,110,114,115,117,118],reread:105,reserv:111,reserved_searchlist:20,reset:[37,82,93,116],residu:93,resolut:93,resolv:[45,93,102,111],resourc:117,resp:7,respect:84,respond:[4,17,20,23,36,43,70,73,75,78,84,85,93,95,99,106,108,111,114,118],respondtoget:118,respondtoput:118,respons:[7,18,69,73,75,78,84,85,93,100,109,117,118],rest:[20,84,93,94,104,118],restrict:[91,93,94],restructur:[93,118],result:[9,10,33,36,41,66,69,72,84,85,93,95,100,105,108,110,115,117,118],retain:78,retriev:[20,93,102,115,118],retrofit:66,returnaclass:20,returndirect:37,reus:[20,37,91,93,109],reusabl:[91,109],rev:19,reveal:69,revers:115,revert:116,review:118,revis:20,revisit:96,revolv:88,rework:93,rewrit:[76,93,105],rewrot:[72,93],rexec:93,rfind:19,rica:110,rich:20,right:[93,99,108,111,115,117,118],roadmap:91,rob:108,rober:109,robert:[53,93],robert_kuzelj:53,robust:[69,93],rodrigo:93,rodrigobamboo:93,roger:[63,92],roi:108,role:94,roman:44,root:[38,105,108,118],rootpath:9,ross:[63,92],roughli:[93,100],routin:[54,83,100,105,106,108,117],rst:[65,66,67,83,93],rtyler:93,rubber:80,rudd:[63,66,76,84,85,93,94,109,111],rudimentari:93,rule:[84,106,107,108,111],run:[20,21,27,39,41,72,73,83,84,85,88,92,93,99,100,104,105,108,109,110,114,116,117,118],runasmainprogram:[20,73,84,85],runner:[41,95],runtest:[25,27,28,29,30,31,32,33,34,36,37,38,40,41],runtim:[20,72,73,93,102,115],runtimeerror:[20,73,82,114],rvalu:93,sad:91,safe:[37,77,111,117,118],safeconvert:7,safedeleg:86,safedelegationlevel:86,safer:93,sai:[37,80,94,104,108,115],said:[96,101],same:[2,15,20,37,38,54,69,72,78,80,84,86,88,93,100,102,104,105,106,108,109,110,111,114,115,117,118],sampl:114,samplebaseclass:105,sandbox:83,sasa:109,sat:[75,85,93,104],satisfi:[92,118],satoh:93,satoru:93,save:[34,54,84,93,95,100],scale:118,scan:[4,19],scenario:[15,27,93,110],schedul:[20,69,118],scheme:12,schwaller:109,schwehr:63,scienc:110,scoobi:[31,37,84],scope:[66,93],scott:108,scratch:[27,110],screw:117,script:[20,27,37,43,85,92,93,100,105,107,117,118],scriptalia:114,scriptnam:21,sdist_doc:93,sea:75,search:[10,15,19,20,47,48,76,91,93,100,104,110,111,117,118],searchlist:[4,6,15,20,26,31,35,37,38,43,53,64,69,72,78,80,83,84,85,93,95,100,105,106,107,108,111,115,117,118],searchlistgener:31,second:[15,37,69,75,78,85,100,102,110,115,117,118],secretari:76,section:[15,20,78,80,91,93,100,104,105,106,108,109,110,111,114,115,117,118],sectionlog:108,secur:[86,93],sed:[10,93,100],see:[4,9,15,18,20,46,54,55,69,72,80,83,84,85,88,91,93,100,101,102,104,105,108,109,110,111,112,115,117,118],seem:[85,118],seen:80,segfault:[31,93],select:[18,91,100,108,109],self:[0,4,18,20,36,37,43,53,64,66,69,70,72,73,75,78,80,83,84,85,86,93,94,102,105,110,111,114,115,117,118],semant:[2,93,109],semi:86,send:[85,100,105,109,117,118],send_output:108,senorita:110,sens:[7,53,93,94,104],sensit:[18,93,110,115],sent:85,sentanc:100,sep:104,separ:[20,69,76,78,80,83,91,93,99,100,104,105,106,109,110,115,118],sept:93,septemb:[93,117],sequenc:[76,93,100,104,117],seri:[76,84],serial:[93,117],serv:[20,100,114,118],server:[2,93,107,112,114],serverdictionari:118,serversidepath:[17,20,93,111,117,118],serverurl:118,serverurldir:118,servic:[37,83,100,104,117],servlet2:118,servlet:[0,7,15,20,37,43,54,62,76,85,87,93,100,106,107,108,110,111,114,117],servletisrunningfromwebkit:93,session:[17,20,93,100,105,107,114,117],set:[2,4,5,15,18,20,37,53,66,69,72,75,80,84,85,86,91,93,99,100,101,102,104,107,109,110,111,114,115,117,118],set_block:100,set_fil:100,set_var:100,setbaseclass:4,setbookmark:19,setbreakpoint:19,setcachedir:11,setcallarg:4,setchar:53,setclassnam:4,setcompilerset:4,setdata:1,setdirect:37,seterrorcatch:4,setexpirytim:1,setfilt:4,setlevel:53,setmainmethodarg:4,setmainmethodnam:4,setmethodnam:4,setmethodsignatur:4,setmoduleencod:4,setpo:19,setq:93,setset:18,setshbang:4,setstyl:4,setthread:12,settingsmanag:[0,4,62,93,100,107,117],settingsmanagertest:30,settingsstr:4,settransform:4,setup:[27,31,33,34,37,40,41,83,93,105],setupmodul:32,setuptool:93,sever:[2,20,70,73,76,84,86,93,100,106,109,110,111,115,117],sgml:109,shadowpath:12,shall:66,shallow:18,shannon:[63,93],share:[88,93,94,100,104,109,117],shbang:[4,93,110],she:[104,118],sheep:110,shell:[27,72,80,83],shift:93,ship:83,shop:[76,100],shortcut:117,shorter:[15,37,84,91,100,110],should:[4,6,15,20,37,65,66,75,83,86,90,93,99,102,104,105,107,108,110,111,115,117,118],shouldn:[31,37,109],show:[27,72,79,83,84,85,93,99,101,104,105,109,110,111,117,118],show_bug:40,shown:[102,110],shumwai:[93,109],shutdown:[17,20,93],sick:117,siddl:63,side:[4,93,106,110,112,118],sidebar2:115,sidebar:[105,115],sidebarpag:118,sign:[37,106,107,115,117],signal:100,signatur:[4,20,93,108],signific:[72,76,93,102,109,110,117],significantli:[15,93,105],silenc:93,silent:[20,37,93,107,108,110,117,118],silentdirect:37,silentmod:4,silentmodeplacehold:93,silli:[80,93,115],similar:[64,78,93,100,110,115,117,118],simpl:[15,20,37,76,83,91,93,100,101,104,108,109,110,114,115,117,118],simpler:[93,118],simplest:[20,90,93,118],simpli:[83,100,108,109,115,117],simplifi:[20,93,110,118],simultan:[115,118],sin:[37,108],sinc:[10,20,69,72,76,91,93,95,99,100,101,104,105,108,109,110,118],sing:93,singl:[4,10,20,37,43,83,85,93,99,100,105,108,110,115,118],singleinherit:72,singlelineshortformfunc:93,sir:108,site1:118,site2:118,site:[46,73,91,93,105,107,108,109,111,114],sitecopyrightnam:111,sitecredit:111,sitedomainnam:111,siteframework:118,sitehiearchi:93,sitehierarchi:[0,42],sitelog:108,situat:[38,66,69,76,109,117,118],size:[20,44,75,93,101,104,108],skeleton:[23,111],skeletonpag:[0,22,37,93,100,108,118],skip:[27,78,104],slash:93,sleep:[17,20,117],slew:93,slice:[4,37,84],slide:[65,66,67,93],slightli:[20,37,93,110],slip:93,slow:[73,117],slowdown:93,slower:[15,93],slowli:117,sluggost:63,slurp:[20,37,43,75,78,93,100,104,107,108,110,114,116,118],slurpdirect:37,small:[75,93,96,104,105,108,111,118],smart:[110,114,117],smarter:76,smarti:[107,109],snag:117,snapshot:[20,117,118],snippet:96,snow:75,socialserv:63,soft:[20,37,109],softwar:[20,88,114,118],solari:105,sole:85,solut:[66,117],some:[1,11,20,31,37,39,53,69,76,83,84,88,91,93,94,99,100,101,104,105,106,108,109,111,114,115,116,117,118],somebodi:[76,83,86,118],someclass:78,somecondit:104,somedai:[76,93,100],somenam:93,someothercondit:[69,115],someplac:105,someth:[4,15,20,31,66,69,75,76,93,95,100,104,106,109,110,111,117,118],somethin2:93,something2:93,somethingels:93,sometim:[20,85,104,115,118],somewhat:[53,94],somewher:[93,108,117],soon:[53,93],sooner:115,sophist:[93,118],sophistoc:20,sorri:104,sort:115,sourc:[0,3,4,5,10,20,26,35,37,38,40,43,53,54,66,69,70,76,79,80,81,83,84,85,88,91,93,99,100,101,103,105,107,109,110,111,115,116,117,118],sourceexpr:4,sourcefilestat:9,sourceforg:[83,93,100,112,118],sourceread:[0,16,62],space:[10,20,37,80,84,93,108,110,115,117],spacifi:100,spam:[93,100],span:[70,93,110],special:[16,20,80,102,110,114,115,117],specialti:109,specialvar:4,specif:[7,15,20,72,83,85,91,93,100,105,106,108,109,111,115,116,117,118],specifi:[9,10,20,72,76,80,93,100,102,104,108,110,111,114,115,117,118],spectra:[86,112],speed:[72,85,95,105,115],speedup:117,spell:93,sphinx:[21,93],splattmpl:27,splattmplwithsubdirectori:27,split:[10,84,85,117],splitdriv:61,splitlin:19,spot:93,spread:109,spring:76,sql:[0,109],squeez:10,src:[18,19,20,27,83,93,109,111,114,118],srcdir:27,srcfile:[27,93],sre_pattern:[16,53],stabl:[76,109],stack:[4,91,93],stackoverflow:112,stale:93,stand:72,standalon:[0,20,54,76,85,93,100,109,111,117],standard:[12,15,18,20,27,66,67,83,84,85,93,100,105,108,111,115,116,117,118],standarddevi:44,standarddeviation_n:44,stanza:[69,84,85,117],star:[69,117],start:[4,12,16,19,20,44,69,73,75,78,84,85,91,93,100,104,106,107,110,111,115,118],startcacheregion:4,startcallregion:4,startcaptureregion:4,startmethoddef:4,startpo:93,startserv:93,startswith:19,startup:118,state:[20,34,76,83,93,118],statement:[4,20,37,38,66,76,85,93,102,104,105,108,110,117,118],static_cach:93,staticmethod:[36,89,91,93],staticmethodsupport:38,statist:[44,93,111],statprof:[0,52],statu:[27,65,66,67],stderr:[3,27,41,93,117],stdin:27,stdout:[3,27,41,93,100],steal:86,stearn:[63,92],step:[76,83,86,88,93,104,106,108,109,114,118],stephan:109,steve:112,stick:69,still:[12,15,20,38,66,76,93,101,118],stock:[111,118],stone:93,stop:[37,92,93,107,110,116],stopdirect:37,store:[1,12,41,88,93,105,111,118],str2:37,str:[10,20,80,84,85,93,108,115],strang:93,strategi:[100,118],strconst:4,strcont:4,stream:[3,16,37,41,93],street:[76,115],stress:108,strftime:96,strictli:[20,94,105],string:[1,4,9,10,12,18,19,20,27,31,37,45,54,56,57,69,72,76,83,84,85,93,99,100,102,104,105,106,108,110,111,114,115,117,118],string_expr:115,string_format:100,stringio:[85,93,100],stringisnumb:18,strip:[10,37,93,100,108],strip_tag:100,stripsqueez:[10,37,93],stroll:79,strong:[91,96],strorr:19,structur:[15,18,23,78,83,85,91,96,102,107,108,109,110,111,117],stub:[20,93],stuck:117,studi:83,stuff:[69,93,107,117],stunnel:93,stupid:[76,110],style:[20,37,66,84,91,92,93,100,107,110,111,115,116],stylesheettag:111,sub:[9,93],subclass:[15,20,27,38,43,54,83,85,91,93,94,102,106,108,109,110,111,115,117,118],subclasssearchlisttest:38,subcommand:[27,105],subcompon:4,subcript:[37,84],subdir:27,subdirectori:[27,93,103,105,118],subject:[20,93,109],submit:[20,37,79,83,88,109,118],submodul:62,subpackag:62,subplacehold:110,subprocess:27,subscript:[37,44,76,84,93,110,112,115],subsect:118,subsequ:[102,110],subsitut:118,substitut:[20,111,118],substr:[27,106],subsystem:83,subtempl:[76,93],subvers:93,succe:[27,80],success:[41,84,105,118],successfulli:[84,118],suffer:76,suffici:[34,83],suffix:[20,44,54,106,118],suggest:[76,93,118],suit:[41,83,84,91,93,105,109,111,118],suitabl:[93,111],sum:[44,104,110],summari:[9,44,107,111],summer:109,sun:84,superceed:93,superclass:[85,93,107,108,118],superdirect:37,superfici:100,supplement:93,suppli:[41,78,93,111,117],support:[4,15,48,76,91,92,93,95,96,98,105,106,108],suppos:[20,95],supposedli:72,suppress:[27,115],sure:[20,37,83,93,99,108,110,114,117,118],surnam:[100,104,109],surpris:[108,110],surreal:84,surround:[37,93],svn:[9,93],swath:93,symbol:66,syn:37,synchron:93,synonym:[93,104,117],syntact:104,syntax:[10,15,16,20,37,53,69,72,76,79,84,91,93,96,99,100,101,102,104,106,107,108,109,115,116,117],syntaxandoutput:[0,24,33,83,84,93,103],syntaxerror:117,sys:[12,20,73,84,85,100,117],system:[12,15,72,73,76,83,88,93,105,107,109,110,111,117],systemwid:105,tab:117,tabl:[100,104,109,118],tada:84,tag:[10,20,40,53,56,72,93,100,101,102,104,106,107,108,110,111,115,116,118],tag_nam:110,tagprocessor:93,take:[6,20,37,78,79,83,93,100,106,108,110,111,115,117,118],taken:[40,84],talk:108,tall:[20,118],talvola:109,tan:37,tarbal:[74,88,90,103],target:[20,37,93,100,117],task:[20,93,100,105,118],taught:15,tavi:[63,66,72,76,84,85,93,94,101,105,109,111],tclass:20,team:[20,91,93,109],teardown:[27,37],teardownmodul:32,technic:[108,109],techniqu:117,technolog:91,tediou:[100,117],tedium:117,tei:109,tell:[20,69,85,100,104,110,116],temp:93,templat:[0,4,6,7,10,15,17,21,24,26,33,34,35,36,37,39,40,43,47,48,54,55,62,64,66,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,86,89,92,93,94,96,99,101,102,104,105,106,107,108,110,113,114,115,116],template3:105,template_dir:6,template_fil:[6,47,48],template_str:[47,48],templateapiclass:[20,93],templatecacheidprefix:1,templateclass:93,templatecmdlineifac:[0,62,73],templatedef:105,templatefileextens:[11,93],templatemisc:93,templateobj:[8,21,73,93,102],templatepreprocessor:20,templaterepositori:93,templateserv:[76,93],templatesystem:112,templatetest:38,templt:93,temporari:[69,92,93,105],temporarili:100,tenet:94,term:[20,76,100,101,105,106,110,118],termin:20,terrel:[93,109],terri:93,ters:12,test10:[31,37],test11:[31,37],test12:[31,37],test13:[31,33,37],test14:[31,37],test15:[31,37],test16:[31,37,83],test17:[31,37],test18:[31,37],test19:[31,37],test1:[31,37,83],test20:[31,37],test21:[31,37],test22:[31,37],test23:[31,37],test24:[31,37],test25:37,test26:37,test27:31,test28:31,test29:31,test2:[31,37],test30:31,test31:31,test32:31,test33:31,test34:31,test35:31,test36:31,test37:31,test38:31,test39:31,test3:[31,37],test40:31,test41:31,test42:31,test43:31,test44:31,test45:31,test46:31,test47:31,test48:31,test49:31,test4:[31,33,37],test50:31,test51:31,test52:31,test53:31,test54:31,test55:31,test56:31,test57:31,test58:31,test59:31,test5:[31,37],test60:31,test61:31,test6:[31,37],test7:[31,37],test8:[31,37],test9:[31,37],test:[0,3,10,20,42,44,47,62,75,84,86,88,92,93,103,104,107,111,115,117,118],test_autoimport:36,test_baseclassarg:38,test_basicascii:40,test_basicdecor:38,test_basicdynam:34,test_basichead:29,test_basicusag:38,test_basicusage1:38,test_classnamearg:38,test_compilationcach:38,test_compilerset:25,test_complexusag:[33,38],test_definedfilt:36,test_error:41,test_failcas:38,test_failingbehavior:36,test_failingbehaviorwithset:36,test_failur:[40,41],test_fromfooimportth:36,test_html:29,test_i18n:38,test_importfailmodul:36,test_inlineimport:28,test_int:31,test_keepreftogeneratedcodearg:38,test_legacymod:28,test_mainmethodnamearg:38,test_merge1:33,test_merge2:33,test_merge3:33,test_mergedictionari:30,test_modulefilecach:38,test_moduleglobalsarg:38,test_modulelevelimport:28,test_modulenamearg:38,test_no_test:41,test_nonefilt:36,test_norm:50,test_normalizepreprocessorargvari:38,test_notfoundexcept:36,test_path:50,test_properimportofbadmodul:36,test_python:29,test_search:50,test_set:25,test_stderr_captur:41,test_stdout_captur:41,test_str:50,test_stuffbeforeimport_legaci:36,test_success:[40,41],test_templ:[0,42,47,49],test_thai:40,test_thai_utf8:40,test_unittests_changing_stderr:41,test_unittests_changing_stdout:41,test_validexcept:36,test_valuefornam:32,test_vff_1:31,testblock:[108,110],testcas:[25,27,28,29,30,31,32,33,34,36,37,38,40,41,83,93],testcompil:27,testdecor:37,testdynamiccompil:40,tester:83,testfil:27,testit:108,testitem:104,testload:41,testmondoreport:44,testprogram:41,testrunn:41,teststaticcompil:40,testtext:27,text:[3,4,37,43,46,57,65,66,67,69,70,72,76,80,82,84,91,93,99,100,101,103,104,106,108,109,110,113,114,115,117],text_and_placehold:108,than:[15,20,53,72,75,76,80,84,85,90,92,93,100,105,106,108,109,110,111,112,115,117,118],thank:[93,109],theblocknam:108,thefilt:[4,115],thei:[15,20,37,42,64,66,72,74,76,83,84,85,88,91,93,96,99,102,103,105,106,108,109,110,111,114,115,117,118],them:[12,15,20,37,65,72,76,83,84,85,86,93,96,99,100,102,105,108,109,110,111,114,115,117,118],themselv:[4,15,20,93,110,117],theprivatevar:86,therang:110,therefor:110,thestr:[9,18,37],thetim:4,thevari:117,thi:[1,2,4,7,9,10,12,15,17,18,20,27,34,37,41,42,43,44,45,46,53,56,57,65,66,67,69,70,72,73,74,75,76,77,78,80,82,83,84,85,86,87,91,92,93,94,95,96,97,99,100,101,102,103,104,105,106,107,108,110,111,112,114,115,116,117,118],thing:[12,54,76,80,86,93,95,105,106,108,109,111,117,118],think:[76,88,93,108,109,117,118],third:[20,84,100,107,109,111,118],thirdparti:112,this_is_a_very_long_lin:110,thoroughli:72,those:[2,20,66,76,79,86,88,93,104,106,107,108,109,114,115,117,118],though:[69,117],thought:[76,93],thread:[107,109,118],three:[93,100,105,106,110,111],threefileswithsubdirectori:27,threefileswithsubdirectoriesnoextens:27,through:[9,10,19,20,37,66,71,79,81,87,93,100,102,104,106,109,115],throughout:93,thrown:[20,118],thu:[15,20,93,99,100,108,109,110,118],thursdai:[20,118],tick:[69,85,118],tidi:93,tight:[93,100],tightli:100,till:37,tim20001112:112,time:[1,2,20,27,37,41,70,72,73,75,76,78,80,83,84,85,86,88,91,93,96,99,100,104,105,108,109,110,111,115,116,117,118],timed_refresh_cach:93,timedtest:34,timer:115,timestamp:[1,4,93,118],timestr:4,tini:108,tip:[88,91,100,107,108,109,110,114],titl:[65,66,67,95,105,108,109,111,115],title_or_id:100,tmp:[20,93],tmpl:[11,27,47,48,70,80,85,86,93,94,95,96,99,105,106,108,109,114,117,118],tmplinstanc:20,tmplpath:61,todo:[0,24,27,37,44,93,115],toe:[78,109],togeth:[100,109],token:[16,20,37,93,100],tom:[91,109],tomcat:100,too:[20,69,70,81,83,93,100,108,111,114,117,118],took:[20,117],tool:[0,62,83,91,93,100,102,107,109,114,116],top:[4,27,37,66,70,80,83,85,93,106,108,110,114,115,118],topic:[20,112],toshio:93,total:[44,110],touch:109,traceback:[15,20,36,73,88,93,109],track:[53,66,67,93],tracker:[0,88,91,109,112],tradeoff:[77,101],tradit:[28,66,85,91],trail:[10,37,78,93,100,108,110,115],tran:[17,20,23,69,70,73,75,78,80,84,85,93,117],transact:[7,17,20,37,55,78,85,87,93,117,118],transform:[4,10,20,93,99],transformerrespons:7,transformertransact:7,transit:93,translat:[4,20,84,85,93,101,117],transpar:93,travers:9,travi:[88,92],treat:[69,93,95,99,100,108,110,111,115],treatment:93,tree:[9,93,108,111],tri:[93,105],trick:[85,86,88,91,107,109],trigger:117,tripl:[37,93],trivial:[72,84,96,108],troubleshoot:[91,107,109],trueexpr:4,trump:20,truncat:[4,100,115],trust:[86,93],trydirect:37,tryexceptimporttest:38,tscompil:93,tuesdai:[20,118],tune:111,tunnel:93,tupl:[4,20,46,93,100],turbocheetah:[0,42],turbogear:20,turf:12,turn:[20,37,76,83,93,101,102,109,110,118],turnerrorcatcheroff:4,turnerrorcatcheron:4,turnoff:[20,118],turnon:[20,118],tut:63,tutori:[83,85,94,107,109,115],tweak:93,twice:27,twiki:115,two:[37,66,72,83,84,88,93,95,99,102,104,105,106,108,109,110,111,114,117,118],txt:[7,16,37,93,111,115],tyler:[63,65,66,67,93,94],type:[10,20,37,43,65,66,67,69,72,83,84,85,93,100,101,105,108,109,110,111,114,115,117],typeerror:[20,54,93,111,118],typefac:115,typetyp:93,typic:[88,95,109],typo:93,uhanov:93,unabl:10,unaccept:118,unattain:72,unavail:118,unbalanc:115,unchang:[37,84,93],uncheck:[20,118],unclos:[93,110],uncondition:2,undefin:[93,115],under:[20,78,83,93,102,109,117],underli:[110,117],underscor:[20,93,106,110],understand:[15,20,91,93,108,109,110,111,118],undesir:108,undid:93,undocu:[53,93,115],unfamiliar:96,unforeseen:66,unfortun:[69,88,108],ungetc:19,unicod:[0,10,24,37,92,93],unicode_in_searchlist_test:40,unicodedirect:37,unicodeencodeerror:93,unicodestr:37,unifi:[4,15,93,100,110],uniform:117,uninstal:[11,107],unintention:93,uniqu:[20,69,72,93,107,118],unit:[27,39,41,93,100,115],unittest:[25,27,28,29,30,31,32,33,34,36,37,38,40,41,83,93],unittest_local_copi:[83,93],univers:[84,106],unix:[83,85,118],unknown:[94,105,117],unless:[10,20,37,72,83,93,94,99,100,107,108,110,115,117],unlessdirect:37,unlik:[93,99,108,110,111,114,115],unlimit:20,unlock:117,unmolest:10,unnecessari:[86,105],unnecessarili:69,unpredict:[72,117],unsaf:117,unset:[20,118],unsnarl:93,unspecifi:[0,20,26,35,37,43,62],unsupport:[44,53],unsur:109,untest:93,until:[76,83,104],unto:91,untrust:[86,93],unus:93,unusu:108,updat:[18,66,69,83,84,92,93,105,108,112,115,117,118],updatelinecach:20,updateset:18,updatesettingsfromconfigfil:18,updatesettingsfromconfigfileobj:18,updatesettingsfromconfigstr:18,updatesettingsfrompysrcstr:18,upgrad:[111,117],upload:[20,111,118],uploadfil:111,uploadfilemixin:[20,118],upper:[84,93,100],uri:118,url:[12,20,46,100,106,108,111,117,118],urllib:100,urlpath:118,urlpathdir:118,uruguai:110,usabl:[10,43],usag:[3,15,20,21,27,37,43,72,93,108,117,118],usagemessag:3,use:[0,1,4,10,11,12,15,20,37,38,43,45,66,72,76,83,84,85,86,88,93,94,95,96,100,101,102,103,104,105,106,107,108,111,114,115,118],useac:4,useautocal:[4,15,93,110,116],usecach:20,used:[0,4,7,10,12,15,20,37,42,54,64,72,75,76,84,85,91,93,94,96,99,100,102,103,104,108,109,110,111,114,115,116,117,118],usefilt:93,useful:[10,20,43,54,57,83,88,93,96,99,108,109,111,115,117,118],usefulness:10,usekwsdictargforpassingtran:93,uselegacyimportmod:93,useless:105,uselessli:110,usenamemapp:[16,93,110,116],useorrais:[54,93],user:[20,42,69,72,78,79,83,90,91,93,100,101,105,106,109,110,111,115,117,118],usernam:118,uses:[10,15,20,37,53,85,88,93,96,100,101,104,108,109,110,111,115,117,118],usesearchlist:93,usestackfram:[4,93],using:[1,4,15,20,36,37,38,83,84,88,93,95,96,99,100,104,106,108,109,110,111,112,114,115,117,118],usr:[36,70,84,85,92,93,105],usual:[20,105,114,115,117,118],utf8:93,utf:93,util:[0,4,20,23,43,62,66,83,93,95,96,99,105,107,109,117,118],val1:110,val:[2,10,93,115],valid:[4,15,69,84,85,86,93,104,110,115,118],validpo:19,valu:[1,2,7,10,15,18,20,37,53,69,72,76,78,80,84,93,100,101,102,104,105,106,107,108,109,111,114,115,116,117,118],valuabl:109,value1:37,valueerror:[16,20,37,44,55,102,118],valueexpr:4,valueforkei:15,valuefornam:[4,15,70,73,75,78,84,85,93],valuefromfram:[15,93],valuefromframeorsearchlist:[4,15,93],valuefromsearchlist:[4,15,70,73,75,78,84,85,93],valuesgettermixin:44,vancouv:76,vanilla:93,var1:[93,110],var2:[93,110,115],var2_:110,var3:[93,115],var99:93,varexist:[20,37,93,117],vari:85,variabl:[12,15,20,37,43,55,69,75,76,78,80,83,84,85,93,100,104,106,107,108,109,110,111,114,115,117],varianc:44,variance_n:44,variant:20,variat:[15,20,108,110],varieti:[69,83,93,109,115],varietywithodir:27,varinsearchlist:93,variou:[20,79,84,93,100,105,106,111,117,118],varnam:[4,20,93,100,110,117],varnotfound_keyerror:93,varrazzo:93,varybi:[1,69,115],varybybrows:[69,115],varybyparam:[69,115],veloc:[72,76,93,107,109,110],velocitycontext:100,venezuela:110,verbatim:[93,110,115],verbos:[3,20,41,69,93,101,109,117],veri:[0,18,20,37,78,84,93,108,109,115,117,118],verifi:[27,28,36,37,38,54,83,86,93,105,110,111,117,118],verifytyp:93,versa:[91,94,109,110],version:[0,3,9,12,18,20,44,53,56,57,62,65,66,67,70,72,83,84,85,88,90,93,96,98,105,108,109,110,111,117,118],vesion:111,vff:31,vffsl:[4,31],vffsl_2:31,vffsl_3:31,vffsl_4:31,vfn:[4,31,70,73,75,78,84,85],vfs_2namespac:31,vfs_3namespac:31,vfs_4namespac:31,vfsl:4,via:[20,37,53,64,86,91,93,100,110,115,118],viabl:109,vice:[91,94,109,110],view:[1,93,103,109,115],viewer:112,vim:101,virtual:[92,118],visibl:[93,100,102,108,109,115,117],visit:[84,85,88,90,100,103,117,118],visual:[72,91,107,118],visualeditor:101,vital:117,vocabulari:[91,107],volunt:[84,85,88,109],voom:[69,80],vt_int:37,vt_variant:37,vt_void:37,vya:63,vyasarajan:63,w32:92,w4py:[112,118],wai:[20,37,44,45,66,69,83,84,86,90,91,93,100,101,102,104,105,106,108,109,110,111,115,117,118],wait:[20,118],walk:[9,71,81,87],walkdirtre:9,wall:110,walter:108,wanadoo:83,want:[15,20,43,45,72,76,79,84,85,86,93,94,100,101,104,105,108,109,110,111,114,115,117,118],wanteddai:[20,118],warasin:93,ward:93,warn:[3,7,8,12,27,73,76,93,102,117],wasn:[20,72,85,93,96,105],watch:[75,104,117],water:76,web:[0,20,55,57,76,91,93,95,96,100,106,107,108,109,111,117],webinput:[20,43,55,93,114,117],webinputmixin:[0,43,52,93,117],webkit:[93,111,117,118],webmacro:[107,109,110],webmast:109,webmixin:93,websaf:[10,37,80,93,100],websit:[15,91,93,109,110],webspher:112,webwar:[7,20,37,56,57,73,76,85,91,93,100,106,107,108,110,111,115,117],webwareexperiment:118,webwaremixin:93,wed:[73,85],week:[20,76,115,118],well:[10,18,76,91,96,102,108,109,111,118],went:72,were:[20,54,66,72,76,85,88,93,103,105,106,109,118],weren:84,what:[10,15,20,54,69,72,76,78,79,84,85,86,87,88,91,93,94,100,104,105,106,107,108,110,111,115,116,117,118],whatev:[20,108,109,110,114,118],whatever:115,whatsnew:93,wheel:[90,92],when:[4,7,10,20,36,41,46,76,78,79,83,84,85,86,91,93,95,96,101,102,104,106,107,108,109,110,111,115,116,118],whenev:[73,108,114,115],where:[4,15,20,27,31,36,38,41,46,72,76,83,88,93,100,101,107,108,115,117,118],wherea:[66,110,118],wherein:20,wherev:[20,105],whether:[20,41,69,72,85,91,93,94,105,109,110,111,115,117,118],which:[4,10,15,20,27,36,37,69,72,75,76,80,83,84,91,93,94,95,96,101,102,104,105,107,108,109,110,111,114,115,117,118],whichev:105,whiledirect:37,whitespac:[4,10,37,53,93,100,108],whitespaceafterdirectivetoken:37,who:[15,76,93,95,107,110,118],whole:[69,76,93,101,108],whom:86,whoop:[80,93],whose:[78,93,111,117],why:[20,86,89,93,107,118],wide:[10,72,83,105,109],width:[85,108,111],wiki:[20,93,103,111,112,117],wikipagerender:93,win32:93,window:[12,83,90,93,100,105,117],wish:[79,100,108,111,114,115,117,118],within:[20,37,66,84,93,110,116],without:[4,15,18,20,31,37,41,43,54,72,76,83,85,86,93,96,101,102,105,106,107,108,109,110,111,117,118],won:[15,37,83,93,101,105,111,117],wonder:[73,117],word:[20,37,100,108,109,115],wordi:[83,117],wordwrap:100,work:[1,4,9,15,18,20,28,29,37,39,41,72,73,76,79,83,88,92,93,100,103,105,108,109,110,111,113,114,115,117,118],workflow:[69,88],world:[20,76,84,85,93,95,105],worri:[72,114,118],worth:[100,118],worthwhil:111,would:[4,9,10,12,15,20,36,37,76,84,86,93,94,100,101,109,110,111,115,117,118],wouldn:[93,117],wow:[20,118],wrap:[3,73,80,84,93,100,108,115],wrapclassdef:4,wrapcod:4,wrapmoduledef:4,wrapper:[1,9,20,93,105],write:[3,7,15,20,37,41,66,69,70,72,73,75,76,78,80,82,83,84,85,86,89,91,93,100,105,106,109,110,111,115,117,118],writebodi:[20,23,66,93,108,111],writeheadtag:[23,111],writelin:7,writeln:7,writer:[100,109,118],written:[41,63,76,91,93,100,105,106,110,112,113,114,115,117],wrong:[69,93,100,109,117],wschar:19,www:[1,12,20,85,92,93,100,108,112,114,118],wysiwyg:109,x0c:19,x64:92,x86:92,xgen:93,xgettext:117,xml:[41,101,109],xmlrunner:[0,24],xmltestprogram:41,xmltestrunn:41,xmltestrunnertest:41,xrang:84,xxx:[27,93],xxxx:[20,93],yahoo:[53,111],yelp:63,yesterdai:93,yet:[10,20,44,69,84,91,93,97,100,101,105,108,109,110,111,115,118],yield:[37,93],yielddirect:37,yin:63,ymtd:100,you:[1,4,10,12,15,20,37,43,45,46,65,69,72,73,76,79,80,83,85,86,88,90,91,93,94,95,96,99,100,101,104,105,106,107,108,109,111,114,115,116,118],your:[6,15,20,43,44,72,83,85,86,88,91,93,94,95,99,100,101,103,104,107,108,109,110,111,114,115,117],yourself:[88,109,114,117,118],yourtempl:20,yyi:20,z_0:15,zero:[20,37,53,73,84,93,104,118],zerodivisionerror:[20,73,93],zip:12,zivkov:109,zope:[20,76,86,101,107,109,112],zpt2:100,zpt:[100,109],zptinternationalizationsupport:20,zwerschk:93,zzz:20},titles:["Cheetah package","Cheetah.CacheRegion module","Cheetah.CacheStore module","Cheetah.CheetahWrapper module","Cheetah.Compiler module","Cheetah.DirectiveAnalyzer module","Cheetah.Django module","Cheetah.DummyTransaction module","Cheetah.ErrorCatchers module","Cheetah.FileUtils module","Cheetah.Filters module","Cheetah.ImportHooks module","Cheetah.ImportManager module","Cheetah.Macros package","Cheetah.Macros.I18n module","Cheetah.NameMapper module","Cheetah.Parser module","Cheetah.Servlet module","Cheetah.SettingsManager module","Cheetah.SourceReader module","Cheetah.Template module","Cheetah.TemplateCmdLineIface module","Cheetah.Templates package","Cheetah.Templates.SkeletonPage module","Cheetah.Tests package","Cheetah.Tests.Analyzer module","Cheetah.Tests.Boinker module","Cheetah.Tests.CheetahWrapper module","Cheetah.Tests.Cheps module","Cheetah.Tests.Filters module","Cheetah.Tests.Misc module","Cheetah.Tests.NameMapper module","Cheetah.Tests.NameMapper_pure module","Cheetah.Tests.Parser module","Cheetah.Tests.Performance module","Cheetah.Tests.Pinger module","Cheetah.Tests.Regressions module","Cheetah.Tests.SyntaxAndOutput module","Cheetah.Tests.Template module","Cheetah.Tests.Test module","Cheetah.Tests.Unicode module","Cheetah.Tests.xmlrunner module","Cheetah.Tools package","Cheetah.Tools.CGITemplate module","Cheetah.Tools.MondoReport module","Cheetah.Tools.RecursiveNull module","Cheetah.Tools.SiteHierarchy module","Cheetah.Tools.turbocheetah package","Cheetah.Tools.turbocheetah.cheetahsupport module","Cheetah.Tools.turbocheetah.tests package","Cheetah.Tools.turbocheetah.tests.test_template module","Cheetah.Unspecified module","Cheetah.Utils package","Cheetah.Utils.Indenter module","Cheetah.Utils.Misc module","Cheetah.Utils.WebInputMixin module","Cheetah.Utils.htmlDecode module","Cheetah.Utils.htmlEncode module","Cheetah.Utils.statprof module","Cheetah.Version module","Cheetah.compat module","Cheetah.convertTmplPathToModuleName module","Cheetah","Authors and contributors","Cheetah Enhancement Proposals","(#1) CHEP Purpose and Guidelines","(#2) Conditionalized #import behavior","(#3) Exposing of super() and self via Template searchList","A BNF Grammar of Cheetah","Caching placeholders and #cache","Directives: Comments","The compiler","Design Decisions and Tradeoffs","Directives: Error Handling","Files","Directives: Flow Control","History of Cheetah","Cheetah Developer\u2019s Guide","Directives: Import, Inheritance, Declaration and Assignment","Introduction","Directives: Output","The parser","Directives: Parser Instructions","Patching Cheetah","Placeholders",".py Template Modules","Safe Delegation","Template","Contributing to Cheetah","Cheetah Recipes","Downloading Cheetah","Cheetah3, the Python-Powered Template Engine","News","&lt;no title&gt;","Basic Inheritance","Precompiled Templates","&#64;staticmethod and &#64;classmethod","Writing a \u201cRecipe\u201d","Cheetah Roadmap","Comments","Cheetah vs. Other Template Engines","Visual Editors","Error Handling","Examples","Flow Control","Getting Started","Vocabulary","Cheetah User\u2019s Guide","Import, Inheritance, Declaration and Assignment","Introduction","Language Overview","Batteries included: templates and other libraries","Useful Web Links","Non-HTML Output","non-Webware HTML output","Generating, Caching and Filtering Output","Instructions to the Parser/Compiler","Tips, Tricks and Troubleshooting","Using Cheetah with Webware"],titleterms:{"abstract":[65,66,67],"break":[75,104],"case":109,"class":100,"final":102,"function":109,"import":[66,78,95,108],"new":[92,109],"public":109,"return":[75,104],"static":[69,114],"super":67,"try":[73,102],"while":[75,104],Are:110,One:115,The:[71,81,105,118],Useful:112,Using:[117,118],access:[15,110],acknowledg:109,all:[110,117],analyz:25,applic:117,approach:118,asp:100,assert:[73,102],assign:[78,108],attr:[78,108],author:63,autocal:[15,110],backward:[66,67],basic:[94,95],batteri:111,behavior:66,behind:109,bigecho:73,bind:72,block:[78,108],bnf:68,boinker:26,bother:95,brace:69,breakpoint:[82,116],bug:[88,109],build:83,cach:[69,72,115],cacheregion:1,cachestor:2,call:117,can:[109,110],cascad:[15,110],catcher:73,cgi:114,cgitempl:43,chang:83,cheetah3:91,cheetah:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,68,76,77,83,88,89,90,91,94,98,100,105,107,109,111,112,117,118],cheetahsupport:48,cheetahwrapp:[3,27],chep:[28,64,65],classmethod:96,closur:110,code:[88,113,118],command:105,comment:[70,99],common:118,compat:[60,66,67,72],compil:[4,71,82,95,116],complex:[84,115],condit:69,condition:66,construct:110,contain:118,content:[79,91],continu:[75,104],contribut:[88,109],contributor:63,control:[75,104],converttmplpathtomodulenam:61,cooki:118,copyright:[65,66,67],databas:112,decis:72,declar:[78,108],def:[78,108],del:[78,108],deleg:86,delimit:72,design:72,detail:15,develop:[77,88,92,112],diagnost:117,dictionari:[15,110],direct:[70,73,75,78,80,82,108,110],directiveanalyz:5,directori:118,django:6,docstr:[70,99],doesn:109,dollar:110,download:90,dtml:100,dummytransact:7,dynam:69,echo:[73,80,115],editor:101,els:104,embperl:100,end:[102,104,108],engin:[91,100],enhanc:64,entir:115,error:[73,102],errorcatch:[8,73,102,111],etc:100,eval:80,exampl:[85,103,109,110,118],except:102,execut:115,exist:64,expos:67,express:[69,80,115],extend:[78,108],featur:100,file:[74,83,88,105],fileutil:[9,111],filter:[10,29,80,111,115],flow:[75,104],form:118,framework:[72,112,118],from:[78,80,94,108,115],gener:115,get:[88,105,109],gettext:117,give:109,global:78,grammar:68,guid:[77,79,107,109],guidelin:65,handl:[73,102,110],have:117,header:[70,99],histori:76,how:109,html:[109,113,114],htmldecod:56,htmlencod:57,i18n:14,implement:[15,66,67,78,108],importhook:11,importmanag:12,includ:[80,111,115],indent:[53,115],indic:91,individu:115,inherit:[72,78,94,108,118],initi:118,input:118,instal:[105,118],instruct:[82,116],internet:112,introduct:[79,91,94,109],jsp:100,languag:110,late:72,leav:15,librari:[109,111],line:115,link:112,listerror:73,lookup:95,macro:[13,14],makefil:117,master:92,matur:109,method:[69,117],misc:[30,54],miss:110,modul:[1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,48,50,51,53,54,55,56,57,58,59,60,61,85,112],mondoreport:44,more:118,motiv:[66,67],multi:117,namemapp:[15,31,110],namemapper_pur:32,namespac:[15,110],necessari:110,non:[113,114],nutshel:91,object:102,open:112,optim:117,other:[100,111,112,118],ouput:115,out:15,output:[80,113,114,115,117],overview:[15,77,110],packag:[0,13,22,24,42,47,49,52],page:[100,114],parser:[16,33,81,82,116],parti:112,pass:[75,104],patch:[83,109],perform:[15,34],philosophi:109,php:100,phplib:100,pinger:35,placehold:[69,84,110,115,117],power:91,pre:95,precompil:95,process:[88,118],propos:64,psp:[100,117],purpos:65,python:[91,94,112,113,117,118],quickstart:105,rais:73,rational:[66,67],raw:[80,115],read:[79,109],realli:110,recip:[89,97],recursivenul:45,refer:[66,67],refresh:69,region:115,regress:[36,83],repeat:[75,104],report:109,requir:[83,105],roadmap:98,rule:110,safe:86,script:114,searchlist:[67,110],self:[15,67],server:118,servlet:[17,109,118],session:118,set:[78,108,116],settingsmanag:[18,111],sever:118,should:[79,109],sign:110,silent:[80,115],simpl:84,singl:72,site:118,sitehierarchi:46,skeletonpag:[23,111],slurp:[80,115],smarti:100,sourc:[112,113],sourceread:19,specif:[66,67],standalon:118,start:105,staticmethod:96,statprof:58,stop:[75,104],string:80,structur:118,stuff:112,style:[109,117],submodul:[0,13,22,24,42,47,49,52],subpackag:[0,42,47],summari:110,superclass:117,syntax:[103,110],syntaxandoutput:37,system:[112,118],tabl:91,tag:[109,117],talk:91,templat:[20,22,23,38,67,85,87,91,95,100,109,111,112,117,118],templatecmdlineifac:21,test:[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,49,50,69,83,105,109],test_templ:50,thi:[79,109],third:112,those:110,thread:117,through:85,time:69,timer:69,tip:[117,118],todo:39,tool:[42,43,44,45,46,47,48,49,50,111],tradeoff:72,transact:72,trick:117,troubleshoot:117,turbocheetah:[47,48,49,50],tutori:105,under:118,unicod:40,uninstal:105,uniqu:100,unless:[75,104],unspecifi:51,use:[109,110,117],user:107,util:[52,53,54,55,56,57,58,111],valu:110,variabl:118,veloc:100,version:[15,59],via:67,visual:101,vocabulari:106,walk:85,web:[112,118],webinput:118,webinputmixin:55,webmacro:100,webwar:[72,103,109,112,114,118],what:109,when:117,where:[109,110],which:100,whitespac:110,who:[79,109],why:[91,95,109,117],without:115,write:97,xmlrunner:41,you:[110,117],your:[105,118],zope:100}}) \ No newline at end of file
diff --git a/docs/html/users_guide/comments.html b/docs/html/users_guide/comments.html
deleted file mode 100644
index 73a9dec..0000000
--- a/docs/html/users_guide/comments.html
+++ /dev/null
@@ -1,208 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Comments &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Generating, Caching and Filtering Output" href="output.html" />
- <link rel="prev" title="Language Overview" href="language.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="output.html" title="Generating, Caching and Filtering Output"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="language.html" title="Language Overview"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Comments</a><ul>
-<li><a class="reference internal" href="#docstring-comments">Docstring Comments</a></li>
-<li><a class="reference internal" href="#header-comments">Header Comments</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="language.html"
- title="previous chapter">Language Overview</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="output.html"
- title="next chapter">Generating, Caching and Filtering Output</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/comments.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="comments">
-<h1>Comments<a class="headerlink" href="#comments" title="Permalink to this headline">¶</a></h1>
-<p>(comments)</p>
-<p>Comments are used to mark notes, explanations, and decorative text
-that should not appear in the output. Cheetah maintains the
-comments in the Python module it generates from the Cheetah source
-code. There are two forms of the comment directive: single-line and
-multi-line.</p>
-<p>All text in a template definition that lies between two hash
-characters ({##}) and the end of the line is treated as a
-single-line comment and will not show up in the output, unless the
-two hash characters are escaped with a backslash.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>##============================= this is a decorative comment-bar
-$var ## this is an end-of-line comment
-##=============================
-</pre></div>
-</div>
-<p>Any text between {#*} and {*#} will be treated as a multi-line
-comment.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#*</span>
- <span class="n">Here</span> <span class="ow">is</span> <span class="n">some</span> <span class="n">multiline</span>
- <span class="n">comment</span> <span class="n">text</span>
-<span class="o">*</span><span class="c1">#</span>
-</pre></div>
-</div>
-<p>If you put blank lines around method definitions or loops to
-separate them, be aware that the blank lines will be output as is.
-To avoid this, make sure the blank lines are enclosed in a comment.
-Since you normally have a comment before the next method definition
-(right?), you can just extend that comment to include the blank
-lines after the previous method definition, like so:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def method1
-... lines ...
-#end def
-#*
-
-
- Description of method2.
- $arg1, string, a phrase.
-*#
-#def method2($arg1)
-... lines ...
-#end def
-</pre></div>
-</div>
-<div class="section" id="docstring-comments">
-<h2>Docstring Comments<a class="headerlink" href="#docstring-comments" title="Permalink to this headline">¶</a></h2>
-<p>(comments.docstring)</p>
-<p>Python modules, classes, and methods can be documented with inline
-‘documentation strings’ (aka ‘docstrings’). Docstrings, unlike
-comments, are accesible at run-time. Thus, they provide a useful
-hook for interactive help utilities.</p>
-<p>Cheetah comments can be transformed into doctrings by adding one of
-the following prefixes:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">##doc: This text will be added to the method docstring</span>
-<span class="c1">#*doc: If your template file is MyTemplate.tmpl, running &quot;cheetah compile&quot;</span>
- <span class="n">on</span> <span class="n">it</span> <span class="n">will</span> <span class="n">produce</span> <span class="n">MyTemplate</span><span class="o">.</span><span class="n">py</span><span class="p">,</span> <span class="k">with</span> <span class="n">a</span> <span class="k">class</span> <span class="nc">MyTemplate</span> <span class="ow">in</span> <span class="n">it</span><span class="p">,</span>
- <span class="n">containing</span> <span class="n">a</span> <span class="n">method</span> <span class="o">.</span><span class="n">respond</span><span class="p">()</span><span class="o">.</span> <span class="n">This</span> <span class="n">text</span> <span class="n">will</span> <span class="n">be</span> <span class="ow">in</span> <span class="n">the</span> <span class="o">.</span><span class="n">respond</span><span class="p">()</span>
- <span class="n">method</span><span class="s1">&#39;s docstring. *#</span>
-
-<span class="c1">##doc-method: This text will also be added to .respond()&#39;s docstring</span>
-<span class="c1">#*doc-method: This text will also be added to .respond()&#39;s docstring *#</span>
-
-<span class="c1">##doc-class: This text will be added to the MyTemplate class docstring</span>
-<span class="c1">#*doc-class: This text will be added to the MyTemplate class docstring *#</span>
-
-<span class="c1">##doc-module: This text will be added to the module docstring MyTemplate.py</span>
-<span class="c1">#*doc-module: This text will be added to the module docstring MyTemplate.py*#</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="header-comments">
-<h2>Header Comments<a class="headerlink" href="#header-comments" title="Permalink to this headline">¶</a></h2>
-<p>(comments.headers) Cheetah comments can also be transformed into
-module header comments using the following syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">##header: This text will be added to the module header comment</span>
-<span class="c1">#*header: This text will be added to the module header comment *#</span>
-</pre></div>
-</div>
-<p>Note the difference between {##doc-module: } and {header: }:
-“cheetah-compile” puts {##doc-module: } text inside the module
-docstring. {header: } makes the text go { above} the docstring, as
-a set of #-prefixed comment lines.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="output.html" title="Generating, Caching and Filtering Output"
- >next</a> |</li>
- <li class="right" >
- <a href="language.html" title="Language Overview"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/comparisons.html b/docs/html/users_guide/comparisons.html
deleted file mode 100644
index e42b632..0000000
--- a/docs/html/users_guide/comparisons.html
+++ /dev/null
@@ -1,573 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah vs. Other Template Engines &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Cheetah Recipes" href="../documentation.html" />
- <link rel="prev" title="Examples" href="examples.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="../documentation.html" title="Cheetah Recipes"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="examples.html" title="Examples"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Cheetah vs. Other Template Engines</a><ul>
-<li><a class="reference internal" href="#which-features-are-unique-to-cheetah">Which features are unique to Cheetah</a></li>
-<li><a class="reference internal" href="#cheetah-vs-velocity">Cheetah vs. Velocity</a></li>
-<li><a class="reference internal" href="#cheetah-vs-webmacro">Cheetah vs. WebMacro</a></li>
-<li><a class="reference internal" href="#cheetah-vs-zope-s-dtml">Cheetah vs. Zope’s DTML</a></li>
-<li><a class="reference internal" href="#cheetah-vs-zope-page-templates">Cheetah vs. Zope Page Templates</a></li>
-<li><a class="reference internal" href="#cheetah-vs-php-s-smarty-templates">Cheetah vs. PHP’s Smarty templates</a></li>
-<li><a class="reference internal" href="#cheetah-vs-phplib-s-template-class">Cheetah vs. PHPLib’s Template class</a></li>
-<li><a class="reference internal" href="#cheetah-vs-psp-php-asp-jsp-embperl-etc">Cheetah vs. PSP, PHP, ASP, JSP, Embperl, etc.</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="examples.html"
- title="previous chapter">Examples</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="../documentation.html"
- title="next chapter">Cheetah Recipes</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/comparisons.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah-vs-other-template-engines">
-<h1>Cheetah vs. Other Template Engines<a class="headerlink" href="#cheetah-vs-other-template-engines" title="Permalink to this headline">¶</a></h1>
-<p>(comparisons)</p>
-<p>This appendix compares Cheetah with various other template/emdedded
-scripting languages and Internet development frameworks. As Cheetah
-is similar to Velocity at a superficial level, you may also wish to
-read comparisons between Velocity and other languages at
-<a class="reference external" href="http://jakarta.apache.org/velocity/ymtd/ymtd.html">http://jakarta.apache.org/velocity/ymtd/ymtd.html</a>.</p>
-<div class="section" id="which-features-are-unique-to-cheetah">
-<h2>Which features are unique to Cheetah<a class="headerlink" href="#which-features-are-unique-to-cheetah" title="Permalink to this headline">¶</a></h2>
-<p>(comparisons.unique)</p>
-<ul class="simple">
-<li>The { block framework} (section inheritanceEtc.block)</li>
-<li>Cheetah’s powerful yet simple { caching framework} (section
-output.caching)</li>
-<li>Cheetah’s { Unified Dotted Notation} and { autocalling}
-(sections language.namemapper.dict and
-language.namemapper.autocalling)</li>
-<li>Cheetah’s searchList (section language.searchList) information.</li>
-<li>Cheetah’s {#raw} directive (section output.raw)</li>
-<li>Cheetah’s {#slurp} directive (section output.slurp)</li>
-<li>Cheetah’s tight integration with Webware for Python (section
-webware)</li>
-<li>Cheetah’s { SkeletonPage framework} (section
-libraries.templates.skeletonPage)</li>
-<li>Cheetah’s ability to mix PSP-style code with Cheetah Language
-syntax (section tips.PSP) Because of Cheetah’s design and Python’s
-flexibility it is relatively easy to extend Cheetah’s syntax with
-syntax elements from almost any other template or embedded
-scripting language.</li>
-</ul>
-</div>
-<div class="section" id="cheetah-vs-velocity">
-<h2>Cheetah vs. Velocity<a class="headerlink" href="#cheetah-vs-velocity" title="Permalink to this headline">¶</a></h2>
-<p>(comparisons.velocity)</p>
-<p>For a basic introduction to Velocity, visit
-<a class="reference external" href="http://jakarta.apache.org/velocity">http://jakarta.apache.org/velocity</a>.</p>
-<p>Velocity is a Java template engine. It’s older than Cheetah, has a
-larger user base, and has better examples and docs at the moment.
-Cheetah, however, has a number of advantages over Velocity:</p>
-<ul>
-<li><p class="first">Cheetah is written in Python. Thus, it’s easier to use and
-extend.</p>
-</li>
-<li><p class="first">Cheetah’s syntax is closer to Python’s syntax than Velocity’s is
-to Java’s.</p>
-</li>
-<li><p class="first">Cheetah has a powerful caching mechanism. Velocity has no
-equivalent.</p>
-</li>
-<li><p class="first">It’s far easier to add data/objects into the namespace where
-$placeholder values are extracted from in Cheetah. Velocity calls
-this namespace a ‘context’. Contexts are dictionaries/hashtables.
-You can put anything you want into a context, BUT you have to use
-the .put() method to populate the context; e.g.,</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">VelocityContext</span> <span class="n">context1</span> <span class="o">=</span> <span class="n">new</span> <span class="n">VelocityContext</span><span class="p">();</span>
-<span class="n">context1</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">,</span><span class="s2">&quot;Velocity&quot;</span><span class="p">);</span>
-<span class="n">context1</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">&quot;project&quot;</span><span class="p">,</span> <span class="s2">&quot;Jakarta&quot;</span><span class="p">);</span>
-<span class="n">context1</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">&quot;duplicate&quot;</span><span class="p">,</span> <span class="s2">&quot;I am in context1&quot;</span><span class="p">);</span>
-</pre></div>
-</div>
-<p>Cheetah takes a different approach. Rather than require you to
-manually populate the ‘namespace’ like Velocity, Cheetah will
-accept any existing Python object or dictionary AS the ‘namespace’.
-Furthermore, Cheetah allows you to specify a list namespaces that
-will be searched in sequence to find a varname-to-value mapping.
-This searchList can be extended at run-time.</p>
-<p>If you add a ‘foo’ object to the searchList and the ‘foo’ has an
-attribute called ‘bar’, you can simply type {$bar} in the template.
-If the second item in the searchList is dictionary ‘foofoo’
-containing {{‘spam’:1234, ‘parrot’:666}}, Cheetah will first look
-in the ‘foo’ object for a ‘spam’ attribute. Not finding it, Cheetah
-will then go to ‘foofoo’ (the second element in the searchList) and
-look among its dictionary keys for ‘spam’. Finding it, Cheetah will
-select {foofoo[‘spam’]} as {$spam}’s value.</p>
-</li>
-<li><p class="first">In Cheetah, the tokens that are used to signal the start of
-$placeholders and #directives are configurable. You can set them to
-any character sequences, not just $ and #.</p>
-</li>
-</ul>
-</div>
-<div class="section" id="cheetah-vs-webmacro">
-<h2>Cheetah vs. WebMacro<a class="headerlink" href="#cheetah-vs-webmacro" title="Permalink to this headline">¶</a></h2>
-<p>(comparisons.webmacro)</p>
-<p>For a basic introduction to WebMacro, visit <a class="reference external" href="http://webmacro.org">http://webmacro.org</a>.</p>
-<p>The points discussed in section comparisons.velocity also apply to
-the comparison between Cheetah and WebMacro. For further
-differences please refer to
-<a class="reference external" href="http://jakarta.apache.org/velocity/differences.html">http://jakarta.apache.org/velocity/differences.html</a>.</p>
-</div>
-<div class="section" id="cheetah-vs-zope-s-dtml">
-<h2>Cheetah vs. Zope’s DTML<a class="headerlink" href="#cheetah-vs-zope-s-dtml" title="Permalink to this headline">¶</a></h2>
-<p>(comparisons.dtml)</p>
-<p>For a basic introduction to DTML, visit
-<a class="reference external" href="http://www.zope.org/Members/michel/ZB/DTML.dtml">http://www.zope.org/Members/michel/ZB/DTML.dtml</a>.</p>
-<ul class="simple">
-<li>Cheetah is faster than DTML.</li>
-<li>Cheetah does not use HTML-style tags; DTML does. Thus, Cheetah
-tags are visible in rendered HTML output if something goes wrong.</li>
-<li>DTML can only be used with ZOPE for web development; Cheetah can
-be used as a standalone tool for any purpose.</li>
-<li>Cheetah’s documentation is more complete than DTML’s.</li>
-<li>Cheetah’s learning curve is shorter than DTML’s.</li>
-<li>DTML has no equivalent of Cheetah’s blocks, caching framework,
-unified dotted notation, and {#raw} directive.</li>
-</ul>
-<p>Here are some examples of syntax differences between DTML and
-Cheetah:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">ul</span><span class="o">&gt;</span>
-<span class="o">&lt;</span><span class="n">dtml</span><span class="o">-</span><span class="ow">in</span> <span class="n">frogQuery</span><span class="o">&gt;</span>
- <span class="o">&lt;</span><span class="n">li</span><span class="o">&gt;&lt;</span><span class="n">dtml</span><span class="o">-</span><span class="n">var</span> <span class="n">animal_name</span><span class="o">&gt;&lt;/</span><span class="n">li</span><span class="o">&gt;</span>
-<span class="o">&lt;/</span><span class="n">dtml</span><span class="o">-</span><span class="ow">in</span><span class="o">&gt;</span>
-<span class="o">&lt;/</span><span class="n">ul</span><span class="o">&gt;</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;ul&gt;
-#for $animal_name in $frogQuery
- &lt;li&gt;$animal_name&lt;/li&gt;
-#end for
-&lt;/ul&gt;
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;dtml-if expr=&quot;monkeys &gt; monkey_limit&quot;&gt;
- &lt;p&gt;There are too many monkeys!&lt;/p&gt;
-&lt;dtml-elif expr=&quot;monkeys &lt; minimum_monkeys&quot;&gt;
- &lt;p&gt;There aren&#39;t enough monkeys!&lt;/p&gt;
-&lt;dtml-else&gt;
- &lt;p&gt;There are just enough monkeys.&lt;/p&gt;
-&lt;/dtml-if&gt;
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#if $monkeys &gt; $monkey_limit
- &lt;p&gt;There are too many monkeys!&lt;/p&gt;
-#else if $monkeys &lt; $minimum_monkeys
- &lt;p&gt;There aren&#39;t enough monkeys!&lt;/p&gt;
-#else
- &lt;p&gt;There are just enough monkeys.&lt;/p&gt;
-#end if
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">table</span><span class="o">&gt;</span>
-<span class="o">&lt;</span><span class="n">dtml</span><span class="o">-</span><span class="ow">in</span> <span class="n">expr</span><span class="o">=</span><span class="s2">&quot;objectValues(&#39;File&#39;)&quot;</span><span class="o">&gt;</span>
- <span class="o">&lt;</span><span class="n">dtml</span><span class="o">-</span><span class="k">if</span> <span class="n">sequence</span><span class="o">-</span><span class="n">even</span><span class="o">&gt;</span>
- <span class="o">&lt;</span><span class="n">tr</span> <span class="n">bgcolor</span><span class="o">=</span><span class="s2">&quot;grey&quot;</span><span class="o">&gt;</span>
- <span class="o">&lt;</span><span class="n">dtml</span><span class="o">-</span><span class="k">else</span><span class="o">&gt;</span>
- <span class="o">&lt;</span><span class="n">tr</span><span class="o">&gt;</span>
- <span class="o">&lt;/</span><span class="n">dtml</span><span class="o">-</span><span class="k">if</span><span class="o">&gt;</span>
- <span class="o">&lt;</span><span class="n">td</span><span class="o">&gt;</span>
- <span class="o">&lt;</span><span class="n">a</span> <span class="n">href</span><span class="o">=</span><span class="s2">&quot;&amp;dtml-absolute_url;&quot;</span><span class="o">&gt;&lt;</span><span class="n">dtml</span><span class="o">-</span><span class="n">var</span> <span class="n">title_or_id</span><span class="o">&gt;&lt;/</span><span class="n">a</span><span class="o">&gt;</span>
- <span class="o">&lt;/</span><span class="n">td</span><span class="o">&gt;&lt;/</span><span class="n">tr</span><span class="o">&gt;</span>
-<span class="o">&lt;/</span><span class="n">dtml</span><span class="o">-</span><span class="ow">in</span><span class="o">&gt;</span>
-<span class="o">&lt;/</span><span class="n">table</span><span class="o">&gt;</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;table&gt;
-#set $evenRow = 0
-#for $file in $files(&#39;File&#39;)
- #if $evenRow
- &lt;tr bgcolor=&quot;grey&quot;&gt;
- #set $evenRow = 0
- #else
- &lt;tr&gt;
- #set $evenRow = 1
- #end if
- &lt;td&gt;
- &lt;a href=&quot;$file.absolute_url&quot;&gt;$file.title_or_id&lt;/a&gt;
- &lt;/td&gt;&lt;/tr&gt;
-#end for
-&lt;/table&gt;
-</pre></div>
-</div>
-<p>The last example changed the name of {$objectValues} to {$files}
-because that’s what a Cheetah developer would write. The developer
-would be responsible for ensuring {$files} returned a list (or
-tuple) of objects (or dictionaries) containing the attributes (or
-methods or dictionary keys) ‘absolute_url’ and ‘title_or_id’.
-All these names (‘objectValues’, ‘absolute_url’ and
-‘title_or_id’) are standard parts of Zope, but in Cheetah the
-developer is in charge of writing them and giving them a reasonable
-behaviour.</p>
-<p>Some of DTML’s features are being ported to Cheetah, such as
-{Cheetah.Tools.MondoReport}, which is based on the {&lt;dtml-in&gt;} tag.
-We are also planning an output filter as flexible as the
-{&lt;dtml-var&gt;} formatting options. However, neither of these are
-complete yet.</p>
-</div>
-<div class="section" id="cheetah-vs-zope-page-templates">
-<h2>Cheetah vs. Zope Page Templates<a class="headerlink" href="#cheetah-vs-zope-page-templates" title="Permalink to this headline">¶</a></h2>
-<p>(comparisons.zpt)</p>
-<p>For a basic introduction to Zope Page Templates, please visit
-<a class="reference external" href="http://www.zope.org/Documentation/Articles/ZPT2">http://www.zope.org/Documentation/Articles/ZPT2</a>.</p>
-</div>
-<div class="section" id="cheetah-vs-php-s-smarty-templates">
-<h2>Cheetah vs. PHP’s Smarty templates<a class="headerlink" href="#cheetah-vs-php-s-smarty-templates" title="Permalink to this headline">¶</a></h2>
-<p>(comparisons.smarty)</p>
-<p>PHP (<a class="reference external" href="http://www.php.net/">http://www.php.net/</a>) is one of the few scripting languages
-expressly designed for web servlets. However, it’s also a
-full-fledged programming language with libraries similar to
-Python’s and Perl’s. The syntax and functions are like a cross
-between Perl and C plus some original ideas (e.g.; a single array
-type serves as both a list and a dictionary, <code class="docutils literal"><span class="pre">$arr[]=&quot;value&quot;;</span></code>
-appends to an array).</p>
-<p>Smarty (<a class="reference external" href="http://smarty.php.net/">http://smarty.php.net/</a>) is an advanced template engine for
-PHP. ({ Note:} this comparision is based on Smarty’s on-line
-documentation. The author has not used Smarty. Please send
-corrections or ommissions to the Cheetah mailing list.) Like
-Cheetah, Smarty:</p>
-<ul class="simple">
-<li>compiles to the target programming language (PHP).</li>
-<li>has configurable delimeters.</li>
-<li>passes if-blocks directly to PHP, so you can use any PHP
-expression in them.</li>
-<li>allows you to embed PHP code in a template.</li>
-<li>has a caching framework (although it works quite differently).</li>
-<li>can read the template definition from any arbitrary source.</li>
-</ul>
-<p>Features Smarty has that Cheetah lacks:</p>
-<ul class="simple">
-<li>Preprocessors, postprocessors and output filters. You can
-emulate a preprocessor in Cheetah by running your template
-definition through a filter program or function before Cheetah sees
-it. To emulate a postprocessor, run a .py template module through a
-filter program/function. To emulate a Smarty output filter, run the
-template output through a filter program/function. If you want to
-use “cheetah compile” or “cheetah fill” in a pipeline, use {-} as
-the input file name and {-stdout} to send the result to standard
-output. Note that Cheetah uses the term “output filter” differently
-than Smarty: Cheetah output filters ({#filter}) operate on
-placeholders, while Smarty output filters operate on the entire
-template output. There has been a proposed {#sed} directive that
-would operate on the entire output line by line, but it has not
-been implemented.</li>
-<li>Variable modifiers. In some cases, Python has equivalent string
-methods ({.strip}, {.capitalize}, {.replace(SEARCH, REPL)}), but in
-other cases you must wrap the result in a function call or write a
-custom output filter ({#filter}).</li>
-<li>Certain web-specific functions, which can be emulated with
-third-party functions.</li>
-<li>The ability to “plug in” new directives in a modular way.
-Cheetah directives are tightly bound to the compiler. However,
-third-party { functions} can be freely imported and called from
-placeholders, and { methods} can be mixed in via {#extends}. Part
-of this is because Cheetah distinguishes between functions and
-directives, while Smarty treats them all as “functions”. Cheetah’s
-design does not allow functions to have flow control effect outside
-the function (e.g., {#if} and {#for}, which operate on template
-body lines), so directives like these cannot be encoded as
-functions.</li>
-<li>Configuration variables read from an .ini-style file. The
-{Cheetah.SettingsManager} module can parse such a file, but you’d
-have to invoke it manually. (See the docstrings in the module for
-details.) In Smarty, this feature is used for multilingual
-applications. In Cheetah, the developers maintain that everybody
-has their own preferred way to do this (such as using Python’s
-{gettext} module), and it’s not worth blessing one particular
-strategy in Cheetah since it’s easy enough to integrate third-party
-code around the template, or to add the resulting values to the
-searchList.</li>
-</ul>
-<p>Features Cheetah has that Smarty lacks:</p>
-<ul class="simple">
-<li>Saving the compilation result in a Python (PHP) module for quick
-reading later.</li>
-<li>Caching individual placeholders or portions of a template.
-Smarty caches only the entire template output as a unit.</li>
-</ul>
-<p>Comparisions of various Smarty constructs:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>{assign var=&quot;name&quot; value=&quot;Bob&quot;} (#set has better syntax in the author&#39;s opinion)
-counter (looks like equivalent to #for)
-eval (same as #include with variable)
-fetch: insert file content into output (#include raw)
-fetch: insert URL content into output (no euqivalent, user can write
- function calling urllib, call as $fetchURL(&#39;URL&#39;) )
-fetch: read file into variable (no equivalent, user can write function
- based on the &#39;open/file&#39; builtin, or on .getFileContents() in
- Template.)
-fetch: read URL content into variable (no equivalent, use above
- function and call as: #set $var = $fetchURL(&#39;URL&#39;)
-html_options: output an HTML option list (no equivalent, user can
- write custom function. Maybe FunFormKit can help.)
-html_select_date: output three dropdown controls to specify a date
- (no equivalent, user can write custom function)
-html_select_time: output four dropdown controls to specify a time
- (no equvalent, user can write custom function)
-math: eval calculation and output result (same as #echo)
-math: eval calculation and assign to variable (same as #set)
-popup_init: library for popup windows (no equivalent, user can write
- custom method outputting Javascript)
-
-
-Other commands:
-capture (no equivalent, collects output into variable. A Python
- program would create a StringIO instance, set sys.stdout to
- it temporarily, print the output, set sys.stdout back, then use
- .getvalue() to get the result.)
-config_load (roughly analagous to #settings, which was removed
- from Cheetah. Use Cheetah.SettingsManager manually or write
- a custom function.)
-include (same as #include, but can include into variable.
- Variables are apparently shared between parent and child.)
-include_php: include a PHP script (e.g., functions)
- (use #extends or #import instead)
-insert (same as #include not in a #cache region)
-{ldelim}{rdelim} (escape literal $ and # with a backslash,
- use #compiler-settings to change the delimeters)
-literal (#raw)
-php (``&lt;% %&gt;&#39;&#39; tags)
-section (#for $i in $range(...) )
-foreach (#for)
-strip (like the #sed tag which was never implemented. Strips
- leading/trailing whitespace from lines, joins several lines
- together.)
-
-
-Variable modifiers:
-capitalize ( $STRING.capitalize() )
-count_characters ( $len(STRING) )
-count_paragraphs/sentances/words (no equivalent, user can write function)
-date_format (use &#39;time&#39; module or download Egenix&#39;s mx.DateTime)
-default ($getVar(&#39;varName&#39;, &#39;default value&#39;) )
-escape: html encode ($cgi.escape(VALUE) )
-escape: url encode ($urllib.quote_plus(VALUE) )
-escape: hex encode (no equivalent? user can write function)
-escape: hex entity encode (no equivalent? user can write function)
-indent: indent all lines of a var&#39;s output (may be part of future
- #indent directive)
-lower ($STRING.lower() )
-regex_replace (&#39;re&#39; module)
-replace ($STRING.replace(OLD, NEW, MAXSPLIT) )
-spacify (#echo &quot;SEPARATOR&quot;.join(SEQUENCE) )
-string_format (#echo &quot;%.2f&quot; % FLOAT , etc.)
-strip_tags (no equivalent, user can write function to strip HTML tags,
- or customize the WebSafe filter)
-truncate (no equivalent, user can write function)
-upper ($STRING.upper() )
-wordwrap (&#39;writer&#39; module, or a new module coming in Python 2.3)
-</pre></div>
-</div>
-<p>Some of these modifiers could be added to the super output filter
-we want to write someday.</p>
-</div>
-<div class="section" id="cheetah-vs-phplib-s-template-class">
-<h2>Cheetah vs. PHPLib’s Template class<a class="headerlink" href="#cheetah-vs-phplib-s-template-class" title="Permalink to this headline">¶</a></h2>
-<p>(comparisons.php)</p>
-<p>PHPLib ((<a class="reference external" href="http://phplib.netuse.de/">http://phplib.netuse.de/</a>) is a collection of classes for
-various web objects (authentication, shopping cart, sessions, etc),
-but what we’re interested in is the {Template} object. It’s much
-more primitive than Smarty, and was based on an old Perl template
-class. In fact, one of the precursors to Cheetah was based on it
-too. Differences from Cheetah:</p>
-<ul class="simple">
-<li>Templates consist of text with {{placeholders}} in braces.</li>
-<li>Instead of a searchList, there is one flat namespace. Every
-variable must be assigned via the {set_var} method. However, you
-can pass this method an array (dictionary) of several variables at
-once.</li>
-<li>You cannot embed lookups or calculations into the template.
-Every placeholder must be an exact variable name.</li>
-<li>There are no directives. You must do all display logic (if, for,
-etc) in the calling routine.</li>
-<li>There is, however, a “block” construct. A block is a portion of
-text between the comment markers {&lt;!- BEGIN blockName -&gt; … &lt;!-
-END blockName&gt;}. The {set_block} method extracts this text into a
-namespace variable and puts a placeholder referring to it in the
-template. This has a few parallels with Cheetah’s {#block}
-directive but is overall quite different.</li>
-<li>To do the equivalent of {#if}, extract the block. Then if true,
-do nothing. If false, assign the empty string to the namespace
-variable.</li>
-<li>To do the equivalent of {#for}, extract the block. Set any
-namespace variables needed inside the loop. To parse one iteration,
-use the {parse} method to fill the block variable (a mini-template)
-into another namespace variable, appending to it. Refresh the
-namespace variables needed inside the loop and parse again; repeat
-for each iteration. You’ll end up with a mini-result that will be
-plugged into the main template’s placeholder.</li>
-<li>To read a template definition from a file, use the {set_file}
-method. This places the file’s content in a namespace variable. To
-read a template definition from a string, assign it to a namespace
-variable.</li>
-<li>Thus, for complicated templates, you are doing a lot of
-recursive block filling and file reading and parsing mini-templates
-all into one flat namespace as you finally build up values for the
-main template. In Cheetah, all this display logic can be embedded
-into the template using directives, calling out to Python methods
-for the more complicated tasks.</li>
-<li>Although you can nest blocks in the template, it becomes tedious
-and arguably hard to read, because all blocks have identical
-syntax. Unless you choose your block names carefully and put
-comments around them, it’s hard to tell which blocks are if-blocks
-and which are for-blocks, or what their nesting order is.</li>
-<li>PHPLib templates do not have caching, output filters, etc.</li>
-</ul>
-</div>
-<div class="section" id="cheetah-vs-psp-php-asp-jsp-embperl-etc">
-<h2>Cheetah vs. PSP, PHP, ASP, JSP, Embperl, etc.<a class="headerlink" href="#cheetah-vs-psp-php-asp-jsp-embperl-etc" title="Permalink to this headline">¶</a></h2>
-<p>(comparisons.pspEtc)</p>
-<dl class="docutils">
-<dt>Webware’s PSP Component</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://webware.sourceforge.net/Webware/PSP/Docs/">http://webware.sourceforge.net/Webware/PSP/Docs/</a></li>
-</ul>
-</dd>
-<dt>Tomcat JSP Information</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://jakarta.apache.org/tomcat/index.html">http://jakarta.apache.org/tomcat/index.html</a></li>
-</ul>
-</dd>
-<dt>ASP Information at ASP101</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://www.asp101.com/">http://www.asp101.com/</a></li>
-</ul>
-</dd>
-<dt>Embperl</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://perl.apache.org/embperl/">http://perl.apache.org/embperl/</a></li>
-</ul>
-</dd>
-</dl>
-<p>Here’s a basic Cheetah example:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;TABLE&gt;
-#for $client in $service.clients
-&lt;TR&gt;
-&lt;TD&gt;$client.surname, $client.firstname&lt;/TD&gt;
-&lt;TD&gt;&lt;A HREF=&quot;mailto:$client.email&quot; &gt;$client.email&lt;/A&gt;&lt;/TD&gt;
-&lt;/TR&gt;
-#end for
-&lt;/TABLE&gt;
-</pre></div>
-</div>
-<p>Compare this with PSP:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">TABLE</span><span class="o">&gt;</span>
-<span class="o">&lt;%</span> <span class="k">for</span> <span class="n">client</span> <span class="ow">in</span> <span class="n">service</span><span class="o">.</span><span class="n">clients</span><span class="p">():</span> <span class="o">%&gt;</span>
-<span class="o">&lt;</span><span class="n">TR</span><span class="o">&gt;</span>
-<span class="o">&lt;</span><span class="n">TD</span><span class="o">&gt;&lt;%=</span><span class="n">client</span><span class="o">.</span><span class="n">surname</span><span class="p">()</span><span class="o">%&gt;</span><span class="p">,</span> <span class="o">&lt;%=</span><span class="n">client</span><span class="o">.</span><span class="n">firstname</span><span class="p">()</span><span class="o">%&gt;&lt;/</span><span class="n">TD</span><span class="o">&gt;</span>
-<span class="o">&lt;</span><span class="n">TD</span><span class="o">&gt;&lt;</span><span class="n">A</span> <span class="n">HREF</span><span class="o">=</span><span class="s2">&quot;mailto:&lt;%=client.email()%&gt;&quot;</span><span class="o">&gt;&lt;%=</span><span class="n">client</span><span class="o">.</span><span class="n">email</span><span class="p">()</span><span class="o">%&gt;&lt;/</span><span class="n">A</span><span class="o">&gt;&lt;/</span><span class="n">TD</span><span class="o">&gt;</span>
-<span class="o">&lt;/</span><span class="n">TR</span><span class="o">&gt;</span>
-<span class="o">&lt;%</span><span class="n">end</span><span class="o">%&gt;</span>
-<span class="o">&lt;/</span><span class="n">TABLE</span><span class="o">&gt;</span>
-</pre></div>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="../documentation.html" title="Cheetah Recipes"
- >next</a> |</li>
- <li class="right" >
- <a href="examples.html" title="Examples"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/editors.html b/docs/html/users_guide/editors.html
deleted file mode 100644
index d6d5ce6..0000000
--- a/docs/html/users_guide/editors.html
+++ /dev/null
@@ -1,145 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Visual Editors &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Useful Web Links" href="links.html" />
- <link rel="prev" title="Batteries included: templates and other libraries" href="libraries.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="links.html" title="Useful Web Links"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="libraries.html" title="Batteries included: templates and other libraries"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="libraries.html"
- title="previous chapter">Batteries included: templates and other libraries</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="links.html"
- title="next chapter">Useful Web Links</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/editors.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="visual-editors">
-<h1>Visual Editors<a class="headerlink" href="#visual-editors" title="Permalink to this headline">¶</a></h1>
-<p>(visualEditors)</p>
-<p>This chapter is about maintaining Cheetah templates with visual
-editors, and the tradeoffs between making it friendly to both text
-editors and visual editors.</p>
-<p>Cheetah’s main developers do not use visual editors. Tavis uses
-{emacs}; Mike uses {vim}. So our first priority is to make
-templates easy to maintain in text editors. In particular, we don’t
-want to add features like Zope Page Template’s
-placeholder-value-with-mock-text-for-visual-editors-all-in-an-XML-tag.
-The syntax is so verbose it makes for a whole lotta typing just to
-insert a simple placeholder, for the benefit of editors we never
-use. However, as users identify features which would help their
-visual editing without making it harder to maintain templates in a
-text editor, we’re all for it.</p>
-<p>As it said in the introduction, Cheetah purposely does not use
-HTML/XML tags for $placeholders or #directives. That way, when you
-preview the template in an editor that interprets HTML tags, you’ll
-still see the placeholder and directive source definitions, which
-provides some “mock text” even if it’s not the size the final
-values will be, and allows you to use your imagination to translate
-how the directive output will look visually in the final.</p>
-<p>If your editor has syntax highlighting, turn it on. That makes a
-big difference in terms of making the template easier to edit.
-Since no “Cheetah mode” has been invented yet, set your
-highlighting to Perl mode, and at least the directives/placeholders
-will show up in different colors, although the editor won’t
-reliably guess where the directive/placeholder ends and normal text
-begins.</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="links.html" title="Useful Web Links"
- >next</a> |</li>
- <li class="right" >
- <a href="libraries.html" title="Batteries included: templates and other libraries"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/errorHandling.html b/docs/html/users_guide/errorHandling.html
deleted file mode 100644
index 27ed9ae..0000000
--- a/docs/html/users_guide/errorHandling.html
+++ /dev/null
@@ -1,245 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Error Handling &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Instructions to the Parser/Compiler" href="parserInstructions.html" />
- <link rel="prev" title="Flow Control" href="flowControl.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="parserInstructions.html" title="Instructions to the Parser/Compiler"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="flowControl.html" title="Flow Control"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Error Handling</a><ul>
-<li><a class="reference internal" href="#try-except-end-try-finally-and-assert">#try … #except … #end try, #finally, and #assert</a></li>
-<li><a class="reference internal" href="#errorcatcher-and-errorcatcher-objects">#errorCatcher and ErrorCatcher objects</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="flowControl.html"
- title="previous chapter">Flow Control</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="parserInstructions.html"
- title="next chapter">Instructions to the Parser/Compiler</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/errorHandling.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="error-handling">
-<h1>Error Handling<a class="headerlink" href="#error-handling" title="Permalink to this headline">¶</a></h1>
-<p>(errorHandling)</p>
-<p>There are two ways to handle runtime errors (exceptions) in
-Cheetah. The first is with the Cheetah directives that mirror
-Python’s structured exception handling statements. The second is
-with Cheetah’s {ErrorCatcher} framework. These are described
-below.</p>
-<div class="section" id="try-except-end-try-finally-and-assert">
-<h2>#try … #except … #end try, #finally, and #assert<a class="headerlink" href="#try-except-end-try-finally-and-assert" title="Permalink to this headline">¶</a></h2>
-<p>(errorHandling.directives)</p>
-<p>Cheetah’s exception-handling directives are exact mirrors Python’s
-exception-handling statements. See Python’s documentation for
-details. The following Cheetah code demonstrates their use:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#try
- $mightFail()
-#except
- It failed
-#end try
-
-#try
- #assert $x == $y
-#except AssertionError
- They&#39;re not the same!
-#end try
-
-#try
- #raise ValueError
-#except ValueError
- #pass
-#end try
-
-
-#try
- $mightFail()
-#except ValueError
- Hey, it raised a ValueError!
-#except NameMapper.NotFound
- Hey, it raised a NameMapper.NotFound!
-#else
- It didn&#39;t raise anything!
-#end try
-
-#try
- $mightFail()
-#finally
- $cleanup()
-#end try
-</pre></div>
-</div>
-<p>Like Python, {#except} and {#finally} cannot appear in the same
-try-block, but can appear in nested try-blocks.</p>
-</div>
-<div class="section" id="errorcatcher-and-errorcatcher-objects">
-<h2>#errorCatcher and ErrorCatcher objects<a class="headerlink" href="#errorcatcher-and-errorcatcher-objects" title="Permalink to this headline">¶</a></h2>
-<p>(errorHandling.errorCatcher)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#errorCatcher CLASS</span>
-<span class="c1">#errorCatcher $PLACEHOLDER_TO_AN_ERROR_CATCHER_INSTANCE</span>
-</pre></div>
-</div>
-<p>{ErrorCatcher} is a debugging tool that catches exceptions that
-occur inside {$placeholder} tags and provides a customizable
-warning to the developer. Normally, the first missing namespace
-value raises a {NameMapper.NotFound} error and halts the filling of
-the template. This requires the developer to resolve the exceptions
-in order without seeing the subsequent output. When an
-{ErrorCatcher} is enabled, the developer can see all the exceptions
-at once as well as the template output around them.</p>
-<p>The {Cheetah.ErrorCatchers} module defines the base class for
-ErrorCatchers:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">ErrorCatcher</span><span class="p">:</span>
- <span class="n">_exceptionsToCatch</span> <span class="o">=</span> <span class="p">(</span><span class="n">NameMapper</span><span class="o">.</span><span class="n">NotFound</span><span class="p">,)</span>
-
- <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">templateObj</span><span class="p">):</span>
- <span class="k">pass</span>
-
- <span class="k">def</span> <span class="nf">exceptions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_exceptionsToCatch</span>
-
- <span class="k">def</span> <span class="nf">warn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_val</span><span class="p">,</span> <span class="n">code</span><span class="p">,</span> <span class="n">rawCode</span><span class="p">,</span> <span class="n">lineCol</span><span class="p">):</span>
- <span class="k">return</span> <span class="n">rawCode</span>
-</pre></div>
-</div>
-<p>This ErrorCatcher catches {NameMapper.NotFound} exceptions and
-leaves the offending placeholder visible in its raw form in the
-template output. If the following template is executed:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#errorCatcher Echo</span>
-<span class="c1">#set $iExist = &#39;Here I am!&#39;</span>
-<span class="n">Here</span><span class="s1">&#39;s a good placeholder: $iExist</span>
-<span class="n">Here</span><span class="s1">&#39;s bad placeholder: $iDontExist</span>
-</pre></div>
-</div>
-<p>the output will be:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Here</span><span class="s1">&#39;s a good placeholder: Here I am!</span>
-<span class="n">Here</span><span class="s1">&#39;s bad placeholder: $iDontExist</span>
-</pre></div>
-</div>
-<p>The base class shown above is also accessible under the alias
-{Cheetah.ErrorCatchers.Echo}. {Cheetah.ErrorCatchers} also provides
-a number of specialized subclasses that warn about exceptions in
-different ways. {Cheetah.ErrorCatchers.BigEcho} will output</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Here</span><span class="s1">&#39;s a good placeholder: Here I am!</span>
-<span class="n">Here</span><span class="s1">&#39;s bad placeholder: ===============&amp;lt;$iDontExist could not be found&amp;gt;===============</span>
-</pre></div>
-</div>
-<p>ErrorCatcher has a significant performance impact and is turned off
-by default. It can also be turned on with the {Template} class’
-{‘errorCatcher’} keyword argument. The value of this argument
-should either be a string specifying which of the classes in
-{Cheetah.ErrorCatchers} to use, or a class that subclasses
-{Cheetah.ErrorCatchers.ErrorCatcher}. The {#errorCatcher} directive
-can also be used to change the errorCatcher part way through a
-template.</p>
-<p>{Cheetah.ErrorCatchers.ListErrors} will produce the same ouput as
-{Echo} while maintaining a list of the errors that can be retrieved
-later. To retrieve the list, use the {Template} class’
-{‘errorCatcher’} method to retrieve the errorCatcher and then call
-its {listErrors} method.</p>
-<p>ErrorCatcher doesn’t catch exceptions raised inside directives.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="parserInstructions.html" title="Instructions to the Parser/Compiler"
- >next</a> |</li>
- <li class="right" >
- <a href="flowControl.html" title="Flow Control"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/examples.html b/docs/html/users_guide/examples.html
deleted file mode 100644
index 18c7bc3..0000000
--- a/docs/html/users_guide/examples.html
+++ /dev/null
@@ -1,145 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Examples &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Cheetah vs. Other Template Engines" href="comparisons.html" />
- <link rel="prev" title="Useful Web Links" href="links.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="comparisons.html" title="Cheetah vs. Other Template Engines"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="links.html" title="Useful Web Links"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Examples</a><ul>
-<li><a class="reference internal" href="#syntax-examples">Syntax examples</a></li>
-<li><a class="reference internal" href="#webware-examples">Webware Examples</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="links.html"
- title="previous chapter">Useful Web Links</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="comparisons.html"
- title="next chapter">Cheetah vs. Other Template Engines</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/examples.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="examples">
-<h1>Examples<a class="headerlink" href="#examples" title="Permalink to this headline">¶</a></h1>
-<p>(examples)</p>
-<p>The Cheetah distribution comes with an ‘examples’ directory. Browse
-the files in this directory and its subdirectories for examples of
-how Cheetah can be used.</p>
-<div class="section" id="syntax-examples">
-<h2>Syntax examples<a class="headerlink" href="#syntax-examples" title="Permalink to this headline">¶</a></h2>
-<p>The {Cheetah.Tests} module contains a large number of test cases
-that can double as examples of how the Cheetah Language works. To
-view these cases go to the base directory of your Cheetah
-distribution and open the file {Cheetah/Tests/SyntaxAndOutput.py}
-in a text editor.</p>
-</div>
-<div class="section" id="webware-examples">
-<h2>Webware Examples<a class="headerlink" href="#webware-examples" title="Permalink to this headline">¶</a></h2>
-<p>For examples of Cheetah in use with Webware visit the Cheetah and
-Webware wikis or use google. We used to have more examples in the
-cheetah source tarball, but they were out of date and confused
-people.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="comparisons.html" title="Cheetah vs. Other Template Engines"
- >next</a> |</li>
- <li class="right" >
- <a href="links.html" title="Useful Web Links"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/flowControl.html b/docs/html/users_guide/flowControl.html
deleted file mode 100644
index a150026..0000000
--- a/docs/html/users_guide/flowControl.html
+++ /dev/null
@@ -1,480 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Flow Control &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Error Handling" href="errorHandling.html" />
- <link rel="prev" title="Import, Inheritance, Declaration and Assignment" href="inheritanceEtc.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="errorHandling.html" title="Error Handling"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="inheritanceEtc.html" title="Import, Inheritance, Declaration and Assignment"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Flow Control</a><ul>
-<li><a class="reference internal" href="#for-end-for">#for … #end for</a></li>
-<li><a class="reference internal" href="#repeat-end-repeat">#repeat … #end repeat</a></li>
-<li><a class="reference internal" href="#while-end-while">#while … #end while</a></li>
-<li><a class="reference internal" href="#if-else-if-else-end-if">#if … #else if … #else … #end if</a></li>
-<li><a class="reference internal" href="#unless-end-unless">#unless … #end unless</a></li>
-<li><a class="reference internal" href="#break-and-continue">#break and #continue</a></li>
-<li><a class="reference internal" href="#pass">#pass</a></li>
-<li><a class="reference internal" href="#stop">#stop</a></li>
-<li><a class="reference internal" href="#return">#return</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="inheritanceEtc.html"
- title="previous chapter">Import, Inheritance, Declaration and Assignment</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="errorHandling.html"
- title="next chapter">Error Handling</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/flowControl.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="flow-control">
-<h1>Flow Control<a class="headerlink" href="#flow-control" title="Permalink to this headline">¶</a></h1>
-<p>(flowControl)</p>
-<div class="section" id="for-end-for">
-<h2>#for … #end for<a class="headerlink" href="#for-end-for" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.for)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#for $var in EXPR</span>
-<span class="c1">#end for</span>
-</pre></div>
-</div>
-<p>The {#for} directive iterates through a sequence. The syntax is the
-same as Python, but remember the {$} before variables.</p>
-<p>Here’s a simple client listing:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;TABLE&gt;
-#for $client in $service.clients
-&lt;TR&gt;
-&lt;TD&gt;$client.surname, $client.firstname&lt;/TD&gt;
-&lt;TD&gt;&lt;A HREF=&quot;mailto:$client.email&quot; &gt;$client.email&lt;/A&gt;&lt;/TD&gt;
-&lt;/TR&gt;
-#end for
-&lt;/TABLE&gt;
-</pre></div>
-</div>
-<p>Here’s how to loop through the keys and values of a dictionary:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;PRE&gt;
-#for $key, $value in $dict.items()
-$key: $value
-#end for
-&lt;/PRE&gt;
-</pre></div>
-</div>
-<p>Here’s how to create list of numbers separated by hyphens. This
-“#end for” tag shares the last line to avoid introducing a newline
-character after each hyphen.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $i in range(15)
-$i - #end for
-</pre></div>
-</div>
-<p>If the location of the {#end for} offends your sense of
-indentational propriety, you can do this instead:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $i in $range(15)
-$i - #slurp
-#end for
-</pre></div>
-</div>
-<p>The previous two examples will put an extra hyphen after last
-number. Here’s how to get around that problem, using the {#set}
-directive, which will be dealt with in more detail below.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#set $sep = &#39;&#39;
-#for $name in $names
-$sep$name
-#set $sep = &#39;, &#39;
-#end for
-</pre></div>
-</div>
-<p>Although to just put a separator between strings, you don’t need a
-for loop:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#echo &#39;, &#39;.join($names)</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="repeat-end-repeat">
-<h2>#repeat … #end repeat<a class="headerlink" href="#repeat-end-repeat" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.repeat)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#repeat EXPR</span>
-<span class="c1">#end repeat</span>
-</pre></div>
-</div>
-<p>Do something a certain number of times. The argument may be any
-numeric expression. If it’s zero or negative, the loop will execute
-zero times.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#repeat $times + 3</span>
-<span class="n">She</span> <span class="n">loves</span> <span class="n">me</span><span class="p">,</span> <span class="n">she</span> <span class="n">loves</span> <span class="n">me</span> <span class="ow">not</span><span class="o">.</span>
-<span class="c1">#repeat</span>
-<span class="n">She</span> <span class="n">loves</span> <span class="n">me</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>Inside the loop, there’s no way to tell which iteration you’re on.
-If you need a counter variable, use {#for} instead with Python’s
-{range} function. Since Python’s ranges are base 0 by default,
-there are two ways to start counting at 1. Say we want to count
-from 1 to 5, and that {$count} is 5.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $i in $range($count)
-#set $step = $i + 1
-$step. Counting from 1 to $count.
-#end for
-
-
-#for $i in $range(1, $count + 1)
-$i. Counting from 1 to $count.
-#end for
-</pre></div>
-</div>
-<p>A previous implementation used a local variable {$i} as the repeat
-counter. However, this prevented instances of {#repeat} from being
-nested. The current implementation does not have this problem as it
-uses a new local variable for every instance of {#repeat}.</p>
-</div>
-<div class="section" id="while-end-while">
-<h2>#while … #end while<a class="headerlink" href="#while-end-while" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.while)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#while EXPR</span>
-<span class="c1">#end while</span>
-</pre></div>
-</div>
-<p>{#while} is the same as Python’s {while} statement. It may be
-followed by any boolean expression:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#while $someCondition(&#39;arg1&#39;, $arg2)</span>
-<span class="n">The</span> <span class="n">condition</span> <span class="ow">is</span> <span class="n">true</span><span class="o">.</span>
-<span class="c1">#end while</span>
-</pre></div>
-</div>
-<p>Be careful not to create an infinite loop. {#while 1} will loop
-until the computer runs out of memory.</p>
-</div>
-<div class="section" id="if-else-if-else-end-if">
-<h2>#if … #else if … #else … #end if<a class="headerlink" href="#if-else-if-else-end-if" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.if)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#if EXPR</span>
-<span class="c1">#else if EXPR</span>
-<span class="c1">#elif EXPR</span>
-<span class="c1">#else</span>
-<span class="c1">#end if</span>
-</pre></div>
-</div>
-<p>The {#if} directive and its kin are used to display a portion of
-text conditionally. {#if} and {#else if} should be followed by a
-true/false expression, while {#else} should not. Any valid Python
-expression is allowed. As in Python, the expression is true unless
-it evaluates to 0, ‘’, None, an empty list, or an empty dictionary.
-In deference to Python, {#elif} is accepted as a synonym for {#else
-if}.</p>
-<p>Here are some examples:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#if $size &gt;= 1500</span>
-<span class="n">It</span><span class="s1">&#39;s big</span>
-<span class="c1">#else if $size &lt; 1500 and $size &gt; 0</span>
-<span class="n">It</span><span class="s1">&#39;s small</span>
-<span class="c1">#else</span>
-<span class="n">It</span><span class="s1">&#39;s not there</span>
-<span class="c1">#end if</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#if $testItem($item)
-The item $item.name is OK.
-#end if
-</pre></div>
-</div>
-<p>Here’s an example that combines an {#if} tag with a {#for} tag.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#if $people
-&lt;table&gt;
-&lt;tr&gt;
-&lt;th&gt;Name&lt;/th&gt;
-&lt;th&gt;Address&lt;/th&gt;
-&lt;th&gt;Phone&lt;/th&gt;
-&lt;/tr&gt;
-#for $p in $people
-&lt;tr&gt;
-&lt;td&gt;$p.name&lt;/td&gt;
-&lt;td&gt;$p.address&lt;/td&gt;
-&lt;td&gt;$p.phone&lt;/td&gt;
-&lt;/tr&gt;
-#end for
-&lt;/table&gt;
-#else
-&lt;p&gt; Sorry, the search did not find any people. &lt;/p&gt;
-#end if
-</pre></div>
-</div>
-<p>See section output.oneLineIf for the one-line {#if} directive,
-which is equivalent to Perl’s and C’s {?:} operator.</p>
-</div>
-<div class="section" id="unless-end-unless">
-<h2>#unless … #end unless<a class="headerlink" href="#unless-end-unless" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.unless)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#unless EXPR</span>
-<span class="c1">#end unless</span>
-</pre></div>
-</div>
-<p>{#unless} is the opposite of {#if}: the text is executed if the
-condition is { false}. Sometimes this is more convenient. {#unless
-EXPR} is equivalent to {#if not (EXPR)}.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#unless $alive
-This parrot is no more! He has ceased to be!
-&#39;E&#39;s expired and gone to meet &#39;is maker! ...
-THIS IS AN EX-PARROT!!
-#end unless
-</pre></div>
-</div>
-<p>You cannot use {#else if} or {#else} inside an {#unless} construct.
-If you need those, use {#if} instead.</p>
-</div>
-<div class="section" id="break-and-continue">
-<h2>#break and #continue<a class="headerlink" href="#break-and-continue" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.break)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#break</span>
-<span class="c1">#continue</span>
-</pre></div>
-</div>
-<p>These directives are used as in Python. {#break} will exit a {#for}
-loop prematurely, while {#continue} will immediately jump to the
-next iteration in the {#for} loop.</p>
-<p>In this example the output list will not contain “10 -“.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $i in range(15)
-#if $i == 10
- #continue
-#end if
-$i - #slurp
-#end for
-</pre></div>
-</div>
-<p>In this example the loop will exit if it finds a name that equals
-‘Joe’:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $name in $names
-#if $name == &#39;Joe&#39;
- #break
-#end if
-$name - #slurp
-#end for
-</pre></div>
-</div>
-</div>
-<div class="section" id="pass">
-<h2>#pass<a class="headerlink" href="#pass" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.pass)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#pass</span>
-</pre></div>
-</div>
-<p>The {#pass} directive is identical to Python {pass} statement: it
-does nothing. It can be used when a statement is required
-syntactically but the program requires no action.</p>
-<p>The following example does nothing if only $A is true</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#if $A and $B</span>
- <span class="n">do</span> <span class="n">something</span>
-<span class="c1">#elif $A</span>
- <span class="c1">#pass</span>
-<span class="c1">#elif $B</span>
- <span class="n">do</span> <span class="n">something</span>
-<span class="c1">#else</span>
- <span class="n">do</span> <span class="n">something</span>
-<span class="c1">#end if</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="stop">
-<h2>#stop<a class="headerlink" href="#stop" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.stop)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#stop</span>
-</pre></div>
-</div>
-<p>The {#stop} directive is used to stop processing of a template at a
-certain point. The output will show { only} what has been processed
-up to that point.</p>
-<p>When {#stop} is called inside an {#include} it skips the rest of
-the included code and continues on from after the {#include}
-directive. stop the processing of the included code. Likewise, when
-{#stop} is called inside a {#def} or {#block}, it stops only the
-{#def} or {#block}.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">A</span> <span class="n">cat</span>
-<span class="c1">#if 1</span>
- <span class="n">sat</span> <span class="n">on</span> <span class="n">a</span> <span class="n">mat</span>
- <span class="c1">#stop</span>
- <span class="n">watching</span> <span class="n">a</span> <span class="n">rat</span>
-<span class="c1">#end if</span>
-<span class="ow">in</span> <span class="n">a</span> <span class="n">flat</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>will print</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">A</span> <span class="n">cat</span>
- <span class="n">sat</span> <span class="n">on</span> <span class="n">a</span> <span class="n">mat</span>
-</pre></div>
-</div>
-<p>And</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">A</span> <span class="n">cat</span>
-<span class="c1">#block action</span>
- <span class="n">sat</span> <span class="n">on</span> <span class="n">a</span> <span class="n">mat</span>
- <span class="c1">#stop</span>
- <span class="n">watching</span> <span class="n">a</span> <span class="n">rat</span>
-<span class="c1">#end block</span>
-<span class="ow">in</span> <span class="n">a</span> <span class="n">flat</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>will print</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">A</span> <span class="n">cat</span>
- <span class="n">sat</span> <span class="n">on</span> <span class="n">a</span> <span class="n">mat</span>
-<span class="ow">in</span> <span class="n">a</span> <span class="n">flat</span><span class="o">.</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="return">
-<h2>#return<a class="headerlink" href="#return" title="Permalink to this headline">¶</a></h2>
-<p>(flowControl.return)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#return</span>
-</pre></div>
-</div>
-<p>This is used as in Python. {#return} will exit the current method
-with a default return value of {None} or the value specified. It
-may be used only inside a {#def} or a {#block}.</p>
-<p>Note that {#return} is different from the {#stop} directive, which
-returns the sum of all text output from the method in which it is
-called. The following examples illustrate this point:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>1
-$test[1]
-3
-#def test
-1.5
-#if 1
-#return &#39;123&#39;
-#else
-99999
-#end if
-#end def
-</pre></div>
-</div>
-<p>will produce</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">1</span>
-<span class="mi">2</span>
-<span class="mi">3</span>
-</pre></div>
-</div>
-<p>while</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>1
-$test
-3
-#def test
-1.5
-#if 1
-#stop
-#else
-99999
-#end if
-#end def
-</pre></div>
-</div>
-<p>will produce</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">1</span>
-<span class="mf">1.5</span>
-<span class="mi">3</span>
-</pre></div>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="errorHandling.html" title="Error Handling"
- >next</a> |</li>
- <li class="right" >
- <a href="inheritanceEtc.html" title="Import, Inheritance, Declaration and Assignment"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/gettingStarted.html b/docs/html/users_guide/gettingStarted.html
deleted file mode 100644
index 6bbdc98..0000000
--- a/docs/html/users_guide/gettingStarted.html
+++ /dev/null
@@ -1,357 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Getting Started &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Language Overview" href="language.html" />
- <link rel="prev" title="Vocabulary" href="glossary.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="language.html" title="Language Overview"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="glossary.html" title="Vocabulary"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Getting Started</a><ul>
-<li><a class="reference internal" href="#requirements">Requirements</a></li>
-<li><a class="reference internal" href="#installation">Installation</a></li>
-<li><a class="reference internal" href="#files">Files</a></li>
-<li><a class="reference internal" href="#uninstalling">Uninstalling</a></li>
-<li><a class="reference internal" href="#the-cheetah-command">The ‘cheetah’ command</a></li>
-<li><a class="reference internal" href="#testing-your-installation">Testing your installation</a></li>
-<li><a class="reference internal" href="#quickstart-tutorial">Quickstart tutorial</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="glossary.html"
- title="previous chapter">Vocabulary</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="language.html"
- title="next chapter">Language Overview</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/gettingStarted.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="getting-started">
-<h1>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h1>
-<p>(gettingStarted)</p>
-<div class="section" id="requirements">
-<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this headline">¶</a></h2>
-<p>(gettingStarted.requirements)</p>
-<p>Cheetah requires Python release 2.7 (there are plans to support 3.4+).
-It is known to run on Linux, Windows, FreeBSD and Solaris,
-and should run anywhere Python runs.</p>
-<p>99% of Cheetah is written in Python. There is one small C module
-({_namemapper.so}) for speed, but Cheetah automatically falls back
-to a Python equivalent ({NameMapper.py}) if the C module is not
-available.</p>
-<p>Cheetah can use an additional module Markdown but it’s not strictly required.</p>
-</div>
-<div class="section" id="installation">
-<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h2>
-<p>(gettingStarted.install)</p>
-<p>To install Cheetah in your system-wide Python library:</p>
-<ol class="arabic simple">
-<li>Login as a user with privileges to install system-wide Python
-packages. On POSIX systems (AIX, Solaris, Linux, IRIX, etc.), the
-command is normally ‘su root’. On non-POSIX systems such as Windows
-NT, login as an administrator.</li>
-<li>Run {pip install Cheetah3} at the command prompt.</li>
-<li>Or download source code and run {python setup.py install}.</li>
-<li>The setup program will install the wrapper script { cheetah} to
-wherever it usually puts Python binaries (“/usr/bin/”, “bin/” in
-the Python install directory, etc.)</li>
-<li>If you cannot login as as an administrator install Cheetah as user to your
-own home directory: add option {–user} to commands: either
-{pip install –user Cheetah3} or {python setup.py install –user}.</li>
-</ol>
-<p>Cheetah’s installation is managed by Python’s Distribution
-Utilities (‘distutils’). There are many options for customization.
-Type {python setup.py help} for more information.</p>
-<p>To install Cheetah in an alternate location - someplace outside
-Python’s {site-packages/} directory, use one of these options:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">install</span> <span class="o">--</span><span class="n">home</span> <span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="n">tavis</span>
-<span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">install</span> <span class="o">--</span><span class="n">install</span><span class="o">-</span><span class="n">lib</span> <span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="n">tavis</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">python</span>
-</pre></div>
-</div>
-<p>Either way installs to /home/tavis/lib/python/Cheetah/ . Of course,
-/home/tavis/lib/python must be in your Python path in order for
-Python to find Cheetah.</p>
-</div>
-<div class="section" id="files">
-<h2>Files<a class="headerlink" href="#files" title="Permalink to this headline">¶</a></h2>
-<p>(gettingstarted.files)</p>
-<p>If you do the systemwide install, all Cheetah modules are installed
-in the { site-packages/Cheetah/} subdirectory of your standard
-library directory; e.g.,
-/opt/Python2.2/lib/python2.2/site-packages/Cheetah.</p>
-<p>Two commands are installed in Python’s {bin/} directory or a system
-bin directory: {cheetah} (section gettingStarted.cheetah) and
-{cheetah-compile} (section howWorks.cheetah-compile).</p>
-</div>
-<div class="section" id="uninstalling">
-<h2>Uninstalling<a class="headerlink" href="#uninstalling" title="Permalink to this headline">¶</a></h2>
-<p>(gettingstarted.uninstalling)</p>
-<p>To uninstall Cheetah, merely delete the site-packages/Cheetah/
-directory. Then delete the “cheetah” and “cheetah-compile” commands
-from whichever bin/ directory they were put in.</p>
-</div>
-<div class="section" id="the-cheetah-command">
-<h2>The ‘cheetah’ command<a class="headerlink" href="#the-cheetah-command" title="Permalink to this headline">¶</a></h2>
-<p>(gettingStarted.cheetah)</p>
-<p>Cheetah comes with a utility {cheetah} that provides a command-line
-interface to various housekeeping tasks. The command’s first
-argument is the name of the task. The following commands are
-currently supported:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">cheetah</span> <span class="nb">compile</span> <span class="p">[</span><span class="n">options</span><span class="p">]</span> <span class="p">[</span><span class="n">FILES</span> <span class="o">...</span><span class="p">]</span> <span class="p">:</span> <span class="n">Compile</span> <span class="n">template</span> <span class="n">definitions</span>
-<span class="n">cheetah</span> <span class="n">fill</span> <span class="p">[</span><span class="n">options</span><span class="p">]</span> <span class="p">[</span><span class="n">FILES</span> <span class="o">...</span><span class="p">]</span> <span class="p">:</span> <span class="n">Fill</span> <span class="n">template</span> <span class="n">definitions</span>
-<span class="n">cheetah</span> <span class="n">help</span> <span class="p">:</span> <span class="n">Print</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span>
-<span class="n">cheetah</span> <span class="n">options</span> <span class="p">:</span> <span class="n">Print</span> <span class="n">options</span> <span class="n">help</span> <span class="n">message</span>
-<span class="n">cheetah</span> <span class="n">test</span> <span class="p">:</span> <span class="n">Run</span> <span class="n">Cheetah</span><span class="s1">&#39;s regression tests</span>
-<span class="n">cheetah</span> <span class="n">version</span> <span class="p">:</span> <span class="n">Print</span> <span class="n">Cheetah</span> <span class="n">version</span> <span class="n">number</span>
-</pre></div>
-</div>
-<p>You only have to type the first letter of the command: {cheetah c}
-is the same as {cheetah compile}.</p>
-<p>The test suite is described in the next section. The {compile}
-command will be described in section howWorks.cheetah-compile, and
-the {fill} command in section howWorks.cheetah-fill.</p>
-<p>The depreciated {cheetah-compile} program does the same thing as
-{cheetah compile}.</p>
-</div>
-<div class="section" id="testing-your-installation">
-<h2>Testing your installation<a class="headerlink" href="#testing-your-installation" title="Permalink to this headline">¶</a></h2>
-<p>(gettingStarted.test)</p>
-<p>After installing Cheetah, you can run its self-test routine to
-verify it’s working properly on your system. Change directory to
-any directory you have write permission in (the tests write
-temporary files). Do not run the tests in the directory you
-installed Cheetah from, or you’ll get unnecessary errors. Type the
-following at the command prompt:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">cheetah</span> <span class="n">test</span>
-</pre></div>
-</div>
-<p>The tests will run for about three minutes and print a
-success/failure message. If the tests pass, start Python in
-interactive mode and try the example in the next section.</p>
-<p>Certain test failures are insignificant:</p>
-<blockquote>
-<div><p>Python 2.3 changed the string representation of booleans, and the
-tests haven’t yet been updated to reflect this.</p>
-<p>Certain tests run “cheetah” as a subcommand. The failure may mean
-the command wasn’t found in your system path. (What happens if you
-run “cheetah” on the command line?) The failure also happens on
-some Windows systems for unknown reasons. This failure has never
-been observed outside the test suite. Long term, we plan to rewrite
-the tests to do a function call rather than a subcommand, which
-will also make the tests run significantly faster.</p>
-<p>The test tried to write a temporary module in the current directory
-and {import} it. Reread the first paragraph in this section about
-the current directory.</p>
-<p>May be the same problem as SampleBaseClass; let us know if changing
-the current directory doesn’t work.</p>
-</div></blockquote>
-<p>If any other tests fail, please send a message to the e-mail list
-with a copy of the test output and the following details about your
-installation:</p>
-<ol class="arabic simple">
-<li>your version of Cheetah</li>
-<li>your version of Python</li>
-<li>your operating system</li>
-<li>whether you have changed anything in the Cheetah installation</li>
-</ol>
-</div>
-<div class="section" id="quickstart-tutorial">
-<h2>Quickstart tutorial<a class="headerlink" href="#quickstart-tutorial" title="Permalink to this headline">¶</a></h2>
-<p>(gettingStarted.tutorial)</p>
-<p>This tutorial briefly introduces how to use Cheetah from the Python
-prompt. The following chapters will discuss other ways to use
-templates and more of Cheetah’s features.</p>
-<p>The core of Cheetah is the {Template} class in the
-{Cheetah.Template} module. The following example shows how to use
-the {Template} class in an interactive Python session. {t} is the
-Template instance. Lines prefixed with {&gt;&gt;&gt;} and {…} are user
-input. The remaining lines are Python output.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">templateDef</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
-<span class="gp">... </span><span class="s2">&lt;HTML&gt;</span>
-<span class="gp">... </span><span class="s2">&lt;HEAD&gt;&lt;TITLE&gt;$title&lt;/TITLE&gt;&lt;/HEAD&gt;</span>
-<span class="gp">... </span><span class="s2">&lt;BODY&gt;</span>
-<span class="gp">... </span><span class="s2">$contents</span>
-<span class="gp">... </span><span class="s2">## this is a single-line Cheetah comment and won&#39;t appear in the output</span>
-<span class="gp">... </span><span class="s2">#* This is a multi-line comment and won&#39;t appear in the output</span>
-<span class="gp">... </span><span class="s2"> blah, blah, blah</span>
-<span class="gp">... </span><span class="s2">*#</span>
-<span class="gp">... </span><span class="s2">&lt;/BODY&gt;</span>
-<span class="gp">... </span><span class="s2">&lt;/HTML&gt;&quot;&quot;&quot;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">nameSpace</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="s1">&#39;Hello World Example&#39;</span><span class="p">,</span> <span class="s1">&#39;contents&#39;</span><span class="p">:</span> <span class="s1">&#39;Hello World!&#39;</span><span class="p">}</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">templateDef</span><span class="p">,</span> <span class="n">searchList</span><span class="o">=</span><span class="p">[</span><span class="n">nameSpace</span><span class="p">])</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">t</span>
-
-<span class="go">&lt;HTML&gt;</span>
-<span class="go">&lt;HEAD&gt;&lt;TITLE&gt;Hello World Example&lt;/TITLE&gt;&lt;/HEAD&gt;</span>
-<span class="go">&lt;BODY&gt;</span>
-<span class="go">Hello World!</span>
-<span class="go">&lt;/BODY&gt;</span>
-<span class="go">&lt;/HTML&gt;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">t</span> <span class="c1"># print it as many times as you want</span>
-<span class="go"> [ ... same output as above ... ]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">nameSpace</span><span class="p">[</span><span class="s1">&#39;title&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Example #2&#39;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">nameSpace</span><span class="p">[</span><span class="s1">&#39;contents&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Hiya Planet Earth!&#39;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">t</span> <span class="c1"># Now with different plug-in values.</span>
-<span class="go">&lt;HTML&gt;</span>
-<span class="go">&lt;HEAD&gt;&lt;TITLE&gt;Example #2&lt;/TITLE&gt;&lt;/HEAD&gt;</span>
-<span class="go">&lt;BODY&gt;</span>
-<span class="go">Hiya Planet Earth!</span>
-<span class="go">&lt;/BODY&gt;</span>
-<span class="go">&lt;/HTML&gt;</span>
-</pre></div>
-</div>
-<p>Since Cheetah is extremely flexible, you can achieve the same
-result this way:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">templateDef</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;Hello World Example!&#39;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span><span class="o">.</span><span class="n">contents</span> <span class="o">=</span> <span class="s1">&#39;Hello World&#39;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">t2</span>
-<span class="go"> [ ... same output as the first example above ... ]</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;Example #2&#39;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span><span class="o">.</span><span class="n">contents</span> <span class="o">=</span> <span class="s1">&#39;Hello World!&#39;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">t2</span>
-<span class="go"> [ ... same as Example #2 above ... ]</span>
-</pre></div>
-</div>
-<p>Or this way:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">Template3</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
-<span class="gp">&gt;&gt;&gt; </span> <span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;Hello World Example!&#39;</span>
-<span class="gp">&gt;&gt;&gt; </span> <span class="n">contents</span> <span class="o">=</span> <span class="s1">&#39;Hello World!&#39;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">t3</span> <span class="o">=</span> <span class="n">Template3</span><span class="p">(</span><span class="n">templateDef</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">t3</span>
-<span class="go"> [ ... you get the picture ... ]</span>
-</pre></div>
-</div>
-<p>The template definition can also come from a file instead of a
-string, as we will see in section howWorks.constructing.</p>
-<p>The above is all fine for short templates, but for long templates
-or for an application that depends on many templates in a
-hierarchy, it’s easier to store the templates in separate *.tmpl
-files and use the { cheetah compile} program to convert them into
-Python classes in their own modules. This will be covered in
-section howWorks.cheetah-compile.</p>
-<p>As an appetizer, we’ll just briefly mention that you can store
-constant values { inside} the template definition, and they will be
-converted to attributes in the generated class. You can also create
-methods the same way. You can even use inheritance to arrange your
-templates in a hierarchy, with more specific templates overriding
-certain parts of more general templates (e.g., a “page” template
-overriding a sidebar in a “section” template).</p>
-<p>For the minimalists out there, here’s a template definition,
-instantiation and filling all in one Python statement:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span> <span class="n">Template</span><span class="p">(</span><span class="s2">&quot;Templates are pretty useless without placeholders.&quot;</span><span class="p">)</span>
-<span class="go">Templates are pretty useless without placeholders.</span>
-</pre></div>
-</div>
-<p>You use a precompiled template the same way, except you don’t
-provide a template definition since it was already established:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">MyPrecompiledTemplate</span> <span class="k">import</span> <span class="n">MyPrecompiledTemplate</span>
-<span class="n">t</span> <span class="o">=</span> <span class="n">MyPrecompiledTemplate</span><span class="p">()</span>
-<span class="n">t</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Fred Flintstone&quot;</span>
-<span class="n">t</span><span class="o">.</span><span class="n">city</span> <span class="o">=</span> <span class="s2">&quot;Bedrock City&quot;</span>
-<span class="nb">print</span> <span class="n">t</span>
-</pre></div>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="language.html" title="Language Overview"
- >next</a> |</li>
- <li class="right" >
- <a href="glossary.html" title="Vocabulary"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/glossary.html b/docs/html/users_guide/glossary.html
deleted file mode 100644
index 3a53ee0..0000000
--- a/docs/html/users_guide/glossary.html
+++ /dev/null
@@ -1,197 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Vocabulary &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Getting Started" href="gettingStarted.html" />
- <link rel="prev" title="Introduction" href="intro.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="gettingStarted.html" title="Getting Started"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="intro.html" title="Introduction"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="intro.html"
- title="previous chapter">Introduction</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="gettingStarted.html"
- title="next chapter">Getting Started</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/glossary.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="vocabulary">
-<h1>Vocabulary<a class="headerlink" href="#vocabulary" title="Permalink to this headline">¶</a></h1>
-<p>(glossary) (vocabulary)</p>
-<p>{ Template} is an informal term meaning a template definition, a
-template instance or a template class. A { template definition} is
-what the human { template maintainer} writes: a string consisting
-of text, placeholders and directives. { Placeholders} are variables
-that will be looked up when the template is filled. { Directives}
-are commands to be executed when the template is filled, or
-instructions to the Cheetah compiler. The conventional suffix for a
-file containing a template definition is { .tmpl}.</p>
-<p>There are two things you can do with a template: compile it or fill
-it. { Filling} is the reason you have a template in the first
-place: to get a finished string out of it. Compiling is a necessary
-prerequisite: the { Cheetah compiler} takes a template definition
-and produces Python code to create the finished string. Cheetah
-provides several ways to compile and fill templates, either as one
-step or two.</p>
-<p>Cheetah’s compiler produces a subclass of {Cheetah.Template}
-specific to that template definition; this is called the {
-generated class}. A { template instance} is an instance of a
-generated class.</p>
-<p>If the user calls the {Template} constructor directly (rather than
-a subclass constructor), s/he will get what appears to be an
-instance of {Template} but is actually a subclass created
-on-the-fly.</p>
-<p>The user can make the subclass explicit by using the
-“cheetah compile” command to write the template class to a Python
-module. Such a module is called a { .py template module}.</p>
-<p>The { Template Definition Language} - or the “Cheetah language” for
-short - is the syntax rules governing placeholders and directives.
-These are discussed in sections language and following in this
-Guide.</p>
-<p>To fill a template, you call its { main method}. This is normally
-{.respond()}, but it may be something else, and you can use the
-{#implements} directive to choose the method name. (Section
-inheritanceEtc.implements.</p>
-<p>A { template-servlet} is a .py template module in a Webware servlet
-directory. Such templates can be filled directly through the web by
-requesting the URL. “Template-servlet” can also refer to the
-instance being filled by a particular web request. If a Webware
-servlet that is not a template-servlet invokes a template, that
-template is not a template-servlet either.</p>
-<p>A { placeholder tag} is the substring in the template definition
-that is the placeholder, including the start and end delimeters (if
-there is an end delimeter). The { placeholder name} is the same but
-without the delimeters.</p>
-<p>Placeholders consist of one or more { identifiers} separated by
-periods (e.g., {a.b}). Each identifier must follow the same rules
-as Python identifiers; that is, a letter or underscore followed by
-one or more letters, digits or underscores. (This is the regular
-expression <code class="docutils literal"><span class="pre">[A-Za-z_][A-Za-z0-9_]*</span></code>.)</p>
-<p>The first (or only) identifier of a placeholder name represents a {
-variable} to be looked up. Cheetah looks up variables in various {
-namespaces}: the searchList, local variables, and certain other
-places. The searchList is a list of objects ({ containers}) with
-attributes and/or keys: each container is a namespace. Every
-template instance has exactly one searchList. Identifiers after the
-first are looked up only in the parent object. The final value
-after all lookups have been performed is the { placeholder value}.</p>
-<p>Placeholders may occur in three positions: top-level, expression
-and LVALUE. { Top-level} placeholders are those in ordinary text
-(“top-level text”). { Expression} placeholders are those in Python
-expressions. { LVALUE} placeholders are those naming a variable to
-receive a value. (LVALUE is computerese for
-“the left side of the equal sign”.) Section
-language.placeholders.positions explains the differences between
-these three positions.</p>
-<p>The routine that does the placeholder lookups is called the {
-NameMapper}. Cheetah’s NameMapper supports universal dotted
-notation and autocalling. { Universal dotted notation} means that
-keys may be written as if they were attributes: {a.b} instead of
-{a[‘b’]}. { Autocalling} means that if any identifier’s value is
-found to be a function or method, Cheetah will call it without
-arguments if there is no <code class="docutils literal"><span class="pre">()</span></code> following. More about the
-NameMapper is in section language.namemapper.</p>
-<p>Some directives are multi-line, meaning they have a matching {
-#end} tag. The lines of text between the start and end tags is the
-{ body} of the directive. Arguments on the same line as the start
-tag, in contrast, are considered part of the directive tag. More
-details are in section language.directives.syntax (Directive Syntax
-Rules).</p>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="gettingStarted.html" title="Getting Started"
- >next</a> |</li>
- <li class="right" >
- <a href="intro.html" title="Introduction"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/index.html b/docs/html/users_guide/index.html
deleted file mode 100644
index b6586a5..0000000
--- a/docs/html/users_guide/index.html
+++ /dev/null
@@ -1,272 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Cheetah User’s Guide &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Introduction" href="intro.html" />
- <link rel="prev" title="Downloading Cheetah" href="../download.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="intro.html" title="Introduction"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="../download.html" title="Downloading Cheetah"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h4>Previous topic</h4>
- <p class="topless"><a href="../download.html"
- title="previous chapter">Downloading Cheetah</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="intro.html"
- title="next chapter">Introduction</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/index.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="cheetah-user-s-guide">
-<h1>Cheetah User’s Guide<a class="headerlink" href="#cheetah-user-s-guide" title="Permalink to this headline">¶</a></h1>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#who-should-read-this-guide">Who should read this Guide?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#what-is-cheetah">What is Cheetah?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#what-is-the-philosophy-behind-cheetah">What is the philosophy behind Cheetah?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#give-me-an-example">Give me an example!</a></li>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#give-me-an-example-of-a-webware-servlet">Give me an example of a Webware servlet!</a></li>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#how-mature-is-cheetah">How mature is Cheetah?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#where-can-i-get-news">Where can I get news?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#how-can-i-contribute">How can I contribute?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="intro.html#acknowledgements">Acknowledgements</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="glossary.html">Vocabulary</a></li>
-<li class="toctree-l1"><a class="reference internal" href="gettingStarted.html">Getting Started</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="gettingStarted.html#requirements">Requirements</a></li>
-<li class="toctree-l2"><a class="reference internal" href="gettingStarted.html#installation">Installation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="gettingStarted.html#files">Files</a></li>
-<li class="toctree-l2"><a class="reference internal" href="gettingStarted.html#uninstalling">Uninstalling</a></li>
-<li class="toctree-l2"><a class="reference internal" href="gettingStarted.html#the-cheetah-command">The ‘cheetah’ command</a></li>
-<li class="toctree-l2"><a class="reference internal" href="gettingStarted.html#testing-your-installation">Testing your installation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="gettingStarted.html#quickstart-tutorial">Quickstart tutorial</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="language.html">Language Overview</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="language.html#language-constructs-summary">Language Constructs - Summary</a></li>
-<li class="toctree-l2"><a class="reference internal" href="language.html#placeholder-syntax-rules">Placeholder Syntax Rules</a></li>
-<li class="toctree-l2"><a class="reference internal" href="language.html#where-can-you-use-placeholders">Where can you use placeholders?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="language.html#are-all-those-dollar-signs-really-necessary">Are all those dollar signs really necessary?</a></li>
-<li class="toctree-l2"><a class="reference internal" href="language.html#namemapper-syntax">NameMapper Syntax</a></li>
-<li class="toctree-l2"><a class="reference internal" href="language.html#namespace-cascading-and-the-searchlist">Namespace cascading and the searchList</a></li>
-<li class="toctree-l2"><a class="reference internal" href="language.html#missing-values">Missing Values</a></li>
-<li class="toctree-l2"><a class="reference internal" href="language.html#directive-syntax-rules">Directive Syntax Rules</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="comments.html">Comments</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="comments.html#docstring-comments">Docstring Comments</a></li>
-<li class="toctree-l2"><a class="reference internal" href="comments.html#header-comments">Header Comments</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="output.html">Generating, Caching and Filtering Output</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="output.html#output-from-complex-expressions-echo">Output from complex expressions: #echo</a></li>
-<li class="toctree-l2"><a class="reference internal" href="output.html#executing-expressions-without-output-silent">Executing expressions without output: #silent</a></li>
-<li class="toctree-l2"><a class="reference internal" href="output.html#one-line-if">One-line #if</a></li>
-<li class="toctree-l2"><a class="reference internal" href="output.html#caching-output">Caching Output</a></li>
-<li class="toctree-l2"><a class="reference internal" href="output.html#raw">#raw</a></li>
-<li class="toctree-l2"><a class="reference internal" href="output.html#include">#include</a></li>
-<li class="toctree-l2"><a class="reference internal" href="output.html#slurp">#slurp</a></li>
-<li class="toctree-l2"><a class="reference internal" href="output.html#indent">#indent</a></li>
-<li class="toctree-l2"><a class="reference internal" href="output.html#ouput-filtering-and-filter">Ouput Filtering and #filter</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="inheritanceEtc.html">Import, Inheritance, Declaration and Assignment</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="inheritanceEtc.html#import-and-from-directives">#import and #from directives</a></li>
-<li class="toctree-l2"><a class="reference internal" href="inheritanceEtc.html#extends">#extends</a></li>
-<li class="toctree-l2"><a class="reference internal" href="inheritanceEtc.html#implements">#implements</a></li>
-<li class="toctree-l2"><a class="reference internal" href="inheritanceEtc.html#set">#set</a></li>
-<li class="toctree-l2"><a class="reference internal" href="inheritanceEtc.html#del">#del</a></li>
-<li class="toctree-l2"><a class="reference internal" href="inheritanceEtc.html#attr">#attr</a></li>
-<li class="toctree-l2"><a class="reference internal" href="inheritanceEtc.html#def">#def</a></li>
-<li class="toctree-l2"><a class="reference internal" href="inheritanceEtc.html#block-end-block">#block … #end block</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="flowControl.html">Flow Control</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#for-end-for">#for … #end for</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#repeat-end-repeat">#repeat … #end repeat</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#while-end-while">#while … #end while</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#if-else-if-else-end-if">#if … #else if … #else … #end if</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#unless-end-unless">#unless … #end unless</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#break-and-continue">#break and #continue</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#pass">#pass</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#stop">#stop</a></li>
-<li class="toctree-l2"><a class="reference internal" href="flowControl.html#return">#return</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="errorHandling.html">Error Handling</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="errorHandling.html#try-except-end-try-finally-and-assert">#try … #except … #end try, #finally, and #assert</a></li>
-<li class="toctree-l2"><a class="reference internal" href="errorHandling.html#errorcatcher-and-errorcatcher-objects">#errorCatcher and ErrorCatcher objects</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="parserInstructions.html">Instructions to the Parser/Compiler</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="parserInstructions.html#breakpoint">#breakpoint</a></li>
-<li class="toctree-l2"><a class="reference internal" href="parserInstructions.html#compiler-settings">#compiler-settings</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="tipsAndTricks.html">Tips, Tricks and Troubleshooting</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#placeholder-tips">Placeholder Tips</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#diagnostic-output">Diagnostic Output</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#when-to-use-python-methods">When to use Python methods</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#calling-superclass-methods-and-why-you-have-to">Calling superclass methods, and why you have to</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#all-methods">All methods</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#optimizing-templates">Optimizing templates</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#psp-style-tags">PSP-style tags</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#makefiles">Makefiles</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#using-cheetah-in-a-multi-threaded-application">Using Cheetah in a Multi-Threaded Application</a></li>
-<li class="toctree-l2"><a class="reference internal" href="tipsAndTricks.html#using-cheetah-with-gettext">Using Cheetah with gettext</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="webware.html">Using Cheetah with Webware</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#installing-cheetah-on-a-webware-system">Installing Cheetah on a Webware system</a></li>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#containment-vs-inheritance">Containment vs Inheritance</a></li>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#site-frameworks">Site frameworks</a></li>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#directory-structure">Directory structure</a></li>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#initializing-your-template-servlet-with-python-code">Initializing your template-servlet with Python code</a></li>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#form-processing">Form processing</a></li>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#form-input-cookies-session-variables-and-web-server-variables">Form input, cookies, session variables and web server variables</a></li>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#more-examples">More examples</a></li>
-<li class="toctree-l2"><a class="reference internal" href="webware.html#other-tips">Other Tips</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="otherHtml.html">non-Webware HTML output</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="otherHtml.html#static-html-pages">Static HTML Pages</a></li>
-<li class="toctree-l2"><a class="reference internal" href="otherHtml.html#cgi-scripts">CGI scripts</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="nonHtml.html">Non-HTML Output</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="nonHtml.html#python-source-code">Python source code</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="libraries.html">Batteries included: templates and other libraries</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="libraries.html#errorcatchers">ErrorCatchers</a></li>
-<li class="toctree-l2"><a class="reference internal" href="libraries.html#fileutils">FileUtils</a></li>
-<li class="toctree-l2"><a class="reference internal" href="libraries.html#filters">Filters</a></li>
-<li class="toctree-l2"><a class="reference internal" href="libraries.html#settingsmanager">SettingsManager</a></li>
-<li class="toctree-l2"><a class="reference internal" href="libraries.html#templates">Templates</a></li>
-<li class="toctree-l2"><a class="reference internal" href="libraries.html#tools">Tools</a></li>
-<li class="toctree-l2"><a class="reference internal" href="libraries.html#utils">Utils</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="editors.html">Visual Editors</a></li>
-<li class="toctree-l1"><a class="reference internal" href="links.html">Useful Web Links</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="links.html#cheetah-links">Cheetah Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="links.html#third-party-cheetah-stuff">Third-party Cheetah Stuff</a></li>
-<li class="toctree-l2"><a class="reference internal" href="links.html#webware-links">Webware Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="links.html#python-links">Python Links</a></li>
-<li class="toctree-l2"><a class="reference internal" href="links.html#other-useful-links">Other Useful Links</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="examples.html#syntax-examples">Syntax examples</a></li>
-<li class="toctree-l2"><a class="reference internal" href="examples.html#webware-examples">Webware Examples</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="comparisons.html">Cheetah vs. Other Template Engines</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="comparisons.html#which-features-are-unique-to-cheetah">Which features are unique to Cheetah</a></li>
-<li class="toctree-l2"><a class="reference internal" href="comparisons.html#cheetah-vs-velocity">Cheetah vs. Velocity</a></li>
-<li class="toctree-l2"><a class="reference internal" href="comparisons.html#cheetah-vs-webmacro">Cheetah vs. WebMacro</a></li>
-<li class="toctree-l2"><a class="reference internal" href="comparisons.html#cheetah-vs-zope-s-dtml">Cheetah vs. Zope’s DTML</a></li>
-<li class="toctree-l2"><a class="reference internal" href="comparisons.html#cheetah-vs-zope-page-templates">Cheetah vs. Zope Page Templates</a></li>
-<li class="toctree-l2"><a class="reference internal" href="comparisons.html#cheetah-vs-php-s-smarty-templates">Cheetah vs. PHP’s Smarty templates</a></li>
-<li class="toctree-l2"><a class="reference internal" href="comparisons.html#cheetah-vs-phplib-s-template-class">Cheetah vs. PHPLib’s Template class</a></li>
-<li class="toctree-l2"><a class="reference internal" href="comparisons.html#cheetah-vs-psp-php-asp-jsp-embperl-etc">Cheetah vs. PSP, PHP, ASP, JSP, Embperl, etc.</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="intro.html" title="Introduction"
- >next</a> |</li>
- <li class="right" >
- <a href="../download.html" title="Downloading Cheetah"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/inheritanceEtc.html b/docs/html/users_guide/inheritanceEtc.html
deleted file mode 100644
index 560a737..0000000
--- a/docs/html/users_guide/inheritanceEtc.html
+++ /dev/null
@@ -1,550 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Import, Inheritance, Declaration and Assignment &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Flow Control" href="flowControl.html" />
- <link rel="prev" title="Generating, Caching and Filtering Output" href="output.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="flowControl.html" title="Flow Control"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="output.html" title="Generating, Caching and Filtering Output"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Import, Inheritance, Declaration and Assignment</a><ul>
-<li><a class="reference internal" href="#import-and-from-directives">#import and #from directives</a></li>
-<li><a class="reference internal" href="#extends">#extends</a></li>
-<li><a class="reference internal" href="#implements">#implements</a></li>
-<li><a class="reference internal" href="#set">#set</a></li>
-<li><a class="reference internal" href="#del">#del</a></li>
-<li><a class="reference internal" href="#attr">#attr</a></li>
-<li><a class="reference internal" href="#def">#def</a></li>
-<li><a class="reference internal" href="#block-end-block">#block … #end block</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="output.html"
- title="previous chapter">Generating, Caching and Filtering Output</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="flowControl.html"
- title="next chapter">Flow Control</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/inheritanceEtc.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="import-inheritance-declaration-and-assignment">
-<h1>Import, Inheritance, Declaration and Assignment<a class="headerlink" href="#import-inheritance-declaration-and-assignment" title="Permalink to this headline">¶</a></h1>
-<p>(inheritanceEtc)</p>
-<div class="section" id="import-and-from-directives">
-<h2>#import and #from directives<a class="headerlink" href="#import-and-from-directives" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.import)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#import MODULE_OR_OBJECT [as NAME] [, ...]</span>
-<span class="c1">#from MODULE import MODULE_OR_OBJECT [as NAME] [, ...]</span>
-</pre></div>
-</div>
-<p>The {#import} and {#from} directives are used to make external
-Python modules or objects available to placeholders. The syntax is
-identical to the import syntax in Python. Imported modules are
-visible globally to all methods in the generated Python class.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#import math</span>
-<span class="c1">#import math as mathModule</span>
-<span class="c1">#from math import sin, cos</span>
-<span class="c1">#from math import sin as _sin</span>
-<span class="c1">#import random, re</span>
-<span class="c1">#from mx import DateTime # ## Part of Egenix&#39;s mx package.</span>
-</pre></div>
-</div>
-<p>After the above imports, {$math}, {$mathModule}, {$sin}, {$cos} and
-{$_sin}, {$random}, {$re} and {$DateTime} may be used in
-{$placeholders} and expressions.</p>
-</div>
-<div class="section" id="extends">
-<h2>#extends<a class="headerlink" href="#extends" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.extends)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#extends CLASS</span>
-</pre></div>
-</div>
-<p>All templates are subclasses of {Cheetah.Template.Template}.
-However, it’s possible for a template to subclass another template
-or a pure Python class. This is where {#extends} steps in: it
-specifies the parent class. It’s equivalent to PSP’s
-{“&#64;page extends=”} directive.</p>
-<p>Cheetah imports the class mentioned in an {#extends} directive
-automatically if you haven’t imported it yet. The implicit
-importing works like this:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#extends Superclass</span>
-<span class="c1">## Implicitly does &#39;#from Superclass import Superclass&#39;.</span>
-
-<span class="c1">#extends Cheetah.Templates.SkeletonPage</span>
-<span class="c1">## Implicitly does &#39;#from Cheetah.Templates.SkeletonPage import SkeletonPage&#39;.</span>
-</pre></div>
-</div>
-<p>If your superclass is in an unusual location or in a module named
-differently than the class, you must import it explicitly. There is
-no support for extending from a class that is not imported; e.g.,
-from a template dynamically created from a string. Since the most
-practical way to get a parent template into a module is to
-precompile it, all parent templates essentially have to be
-precompiled.</p>
-<p>There can be only one {#extends} directive in a template and it may
-list only one class. In other words, templates don’t do multiple
-inheritance. This is intentional: it’s too hard to initialize
-multiple base classes correctly from inside a template. However,
-you can do multiple inheritance in your pure Python classes.</p>
-<p>If your pure Python class overrides any of the standard {Template}
-methods such as {.__init__} or {.awake}, be sure to call the
-superclass method in your method or things will break. Examples of
-calling the superclass method are in section
-tips.callingSuperclassMethods. A list of all superclass methods is
-in section tips.allMethods.</p>
-<p>In all cases, the root superclass must be {Template}. If your
-bottommost class is a template, simply omit the {#extends} in it
-and it will automatically inherit from {Template}. { If your
-bottommost class is a pure Python class, it must inherit from
-{Template} explicitly: }</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span>
-<span class="k">class</span> <span class="nc">MyPurePythonClass</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
-</pre></div>
-</div>
-<p>If you’re not keen about having your Python classes inherit from
-{Template}, create a tiny glue class that inherits both from your
-class and from {Template}.</p>
-<p>Before giving any examples we’ll stress that Cheetah does { not}
-dictate how you should structure your inheritance tree. As long as
-you follow the rules above, many structures are possible.</p>
-<p>Here’s an example for a large web site that has not only a general
-site template, but also a template for this section of the site,
-and then a specific template-servlet for each URL. (This is the
-“inheritance approach” discussed in the Webware chapter.) Each
-template inherits from a pure Python class that contains
-methods/attributes used by the template. We’ll begin with the
-bottommost superclass and end with the specific template-servlet:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mf">1.</span> <span class="n">SiteLogic</span><span class="o">.</span><span class="n">py</span> <span class="p">(</span><span class="n">pure</span> <span class="n">Python</span> <span class="k">class</span> <span class="nc">containing</span> <span class="n">methods</span> <span class="k">for</span> <span class="n">the</span> <span class="n">site</span><span class="p">)</span>
- <span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span>
- <span class="k">class</span> <span class="nc">SiteLogic</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
-
-<span class="mf">2.</span> <span class="n">Site</span><span class="o">.</span><span class="n">tmpl</span><span class="o">/</span><span class="n">py</span> <span class="p">(</span><span class="n">template</span> <span class="n">containing</span> <span class="n">the</span> <span class="n">general</span> <span class="n">site</span> <span class="n">framework</span><span class="p">;</span>
- <span class="n">this</span> <span class="ow">is</span> <span class="n">the</span> <span class="n">template</span> <span class="n">that</span> <span class="n">controls</span> <span class="n">the</span> <span class="n">output</span><span class="p">,</span>
- <span class="n">the</span> <span class="n">one</span> <span class="n">that</span> <span class="n">contains</span> <span class="s2">&quot;&lt;HTML&gt;&lt;HEAD&gt;...&quot;</span><span class="p">,</span> <span class="n">the</span> <span class="n">one</span>
- <span class="n">that</span> <span class="n">contains</span> <span class="n">text</span> <span class="n">outside</span> <span class="nb">any</span> <span class="c1">#def/#block.)</span>
- <span class="c1">#from SiteLogic import SiteLogic</span>
- <span class="c1">#extends SiteLogic</span>
- <span class="c1">#implements respond</span>
-
-<span class="mf">3.</span> <span class="n">SectionLogic</span><span class="o">.</span><span class="n">py</span> <span class="p">(</span><span class="n">pure</span> <span class="n">Python</span> <span class="k">class</span> <span class="nc">with</span> <span class="n">helper</span> <span class="n">code</span> <span class="k">for</span> <span class="n">the</span> <span class="n">section</span><span class="p">)</span>
- <span class="kn">from</span> <span class="nn">Site</span> <span class="k">import</span> <span class="n">Site</span>
- <span class="k">class</span> <span class="nc">SectionLogic</span><span class="p">(</span><span class="n">Site</span><span class="p">)</span>
-
-<span class="mf">4.</span> <span class="n">Section</span><span class="o">.</span><span class="n">tmpl</span><span class="o">/</span><span class="n">py</span> <span class="p">(</span><span class="n">template</span> <span class="k">with</span> <span class="s1">&#39;#def&#39;</span> <span class="n">overrides</span> <span class="n">etc</span><span class="o">.</span> <span class="k">for</span> <span class="n">the</span> <span class="n">section</span><span class="p">)</span>
- <span class="c1">#from SectionLogic import SectionLogic</span>
- <span class="c1">#extends SectionLogic</span>
-
-<span class="mf">5.</span> <span class="n">page1Logic</span><span class="o">.</span><span class="n">py</span> <span class="p">(</span><span class="n">pure</span> <span class="n">Python</span> <span class="k">class</span> <span class="nc">with</span> <span class="n">helper</span> <span class="n">code</span> <span class="k">for</span> <span class="n">the</span> <span class="n">template</span><span class="o">-</span><span class="n">servlet</span><span class="p">)</span>
- <span class="kn">from</span> <span class="nn">Section</span> <span class="k">import</span> <span class="n">Section</span>
- <span class="k">class</span> <span class="nc">indexLogic</span><span class="p">(</span><span class="n">Section</span><span class="p">):</span>
-
-<span class="mf">6.</span> <span class="n">page1</span><span class="o">.</span><span class="n">tmpl</span><span class="o">/</span><span class="n">py</span> <span class="p">(</span><span class="n">template</span><span class="o">-</span><span class="n">servlet</span> <span class="k">for</span> <span class="n">a</span> <span class="n">certain</span> <span class="n">page</span> <span class="n">on</span> <span class="n">the</span> <span class="n">site</span><span class="p">)</span>
- <span class="c1">#from page1Logic import page1Logic</span>
- <span class="c1">#extends page1Logic</span>
-</pre></div>
-</div>
-<p>A pure Python classes might also contain methods/attributes that
-aren’t used by their immediate child template, but are available
-for any descendant template to use if it wishes. For instance, the
-site template might have attributes for the name and e-mail address
-of the site administrator, ready to use as $placeholders in any
-template that wants it.</p>
-<p>{ Whenever you use {#extends}, you often need {#implements} too,}
-as in step 2 above. Read the next section to understand what
-{#implements} is and when to use it.</p>
-</div>
-<div class="section" id="implements">
-<h2>#implements<a class="headerlink" href="#implements" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.implements)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#implements METHOD</span>
-</pre></div>
-</div>
-<p>You can call any {#def} or {#block} method directly and get its
-outpt. The top-level content - all the text/placeholders/directives
-outside any {#def}/{#block} - gets concatenated and wrapped in a
-“main method”, by default {.respond()}. So if you call
-{.respond()}, you get the “whole template output”. When Webware
-calls {.respond()}, that’s what it’s doing. And when you do ‘print
-t’ or ‘str(t)’ on a template instance, you’re taking advantage of
-the fact that Cheetah makes {.__str__()} an alias for the main
-method.</p>
-<p>That’s all fine and dandy, but what if your application prefers to
-call another method name rather than {.respond()}? What if it wants
-to call, say, {.send_output()} instead? That’s where {#implements}
-steps in. It lets you choose the name for the main method. Just put
-this in your template definition:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#implements send_output</span>
-</pre></div>
-</div>
-<p>When one template extends another, every template in the
-inheritance chain has its own main method. To fill the template,
-you invoke exactly one of these methods and the others are ignored.
-The method you call may be in any of the templates in the
-inheritance chain: the base template, the leaf template, or any in
-between, depending on how you structure your application. So you
-have two problems: (1) calling the right method name, and (2)
-preventing an undesired same-name subclass method from overriding
-the one you want to call.</p>
-<p>Cheetah assumes the method you will call is {.respond()} because
-that’s what Webware calls. It further assumes the desired main
-method is the one in the lowest-level base template, because that
-works well with {#block} as described in the Inheritance Approach
-for building Webware servlets (section webware.inheritance), which
-was originally the principal use for Cheetah. So when you use
-{#extends}, Cheetah changes that template’s main method to
-{.writeBody()} to get it out of the way and prevent it from
-overriding the base template’s {.respond()}.</p>
-<p>Unfortunately this assumption breaks down if the template is used
-in other ways. For instance, you may want to use the main method in
-the highest-level leaf template, and treat the base template(s) as
-merely a library of methods/attributes. In that case, the leaf
-template needs {#implements respond} to change its main method name
-back to {.respond()} (or whatever your application desires to
-call). Likewise, if your main method is in one of the intermediate
-templates in an inheritance chain, that template needs {#implements
-respond}.</p>
-<p>The other way the assumption breaks down is if the main method {
-is} in the base template but that template extends a pure Python
-class. Cheetah sees the {#extends} and dutifully but incorrectly
-renames the method to {.writeBody()}, so you have to use
-{#implements respond} to change it back. Otherwise the dummy
-{.respond()} in {Cheetah.Template} is found, which outputs…
-nothing. { So if you’re using {#extends} and get no output, the {
-first} thing you should think is,
-“Do I need to add {#implements respond} somewhere?” }</p>
-</div>
-<div class="section" id="set">
-<h2>#set<a class="headerlink" href="#set" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.set)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#set [global] $var = EXPR</span>
-</pre></div>
-</div>
-<p>{#set} is used to create and update local variables at run time.
-The expression may be any Python expression. Remember to preface
-variable names with $ unless they’re part of an intermediate result
-in a list comprehension.</p>
-<p>Here are some examples:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#set $size = $length * 1096</span>
-<span class="c1">#set $buffer = $size + 1096</span>
-<span class="c1">#set $area = $length * $width</span>
-<span class="c1">#set $namesList = [&#39;Moe&#39;,&#39;Larry&#39;,&#39;Curly&#39;]</span>
-<span class="c1">#set $prettyCountry = $country.replace(&#39; &#39;, &#39;&amp;nbsp;&#39;)</span>
-</pre></div>
-</div>
-<p>{#set} variables are useful to assign a short name to a
-{$deeply.nested.value}, to a calculation, or to a printable version
-of a value. The last example above converts any spaces in the
-‘country’ value into HTML non-breakable-space entities, to ensure
-the entire value appears on one line in the browser.</p>
-<p>{#set} variables are also useful in {#if} expressions, but remember
-that complex logical routines should be coded in Python, not in
-Cheetah!</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#if $size &gt; 1500</span>
- <span class="c1">#set $adj = &#39;large&#39;</span>
-<span class="c1">#else</span>
- <span class="c1">#set $adj = &#39;small&#39;</span>
-<span class="c1">#end if</span>
-</pre></div>
-</div>
-<p>Or Python’s one-line equivalent, “A and B or C”. Remember that in
-this case, B must be a true value (not None, ‘’, 0, [] or {}).</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#set $adj = $size &gt; 1500 and &#39;large&#39; or &#39;small&#39;</span>
-</pre></div>
-</div>
-<p>(Note: Cheetah’s one-line {#if} will not work for this, since it
-produces output rather than setting a variable.</p>
-<p>You can also use the augmented assignment operators:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">## Increment $a by 5.</span>
-<span class="c1">#set $a += 5</span>
-</pre></div>
-</div>
-<p>By default, {#set} variables are not visible in method calls or
-include files unless you use the {global} attribute: {#set global
-$var = EXPRESSION}. Global variables are visible in all methods,
-nested templates and included files. Use this feature with care to
-prevent surprises.</p>
-</div>
-<div class="section" id="del">
-<h2>#del<a class="headerlink" href="#del" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.del)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#del $var</span>
-</pre></div>
-</div>
-<p>{#del} is the opposite of {#set}. It deletes a { local} variable.
-Its usage is just like Python’s {del} statement:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#del $myVar</span>
-<span class="c1">#del $myVar, $myArray[5]</span>
-</pre></div>
-</div>
-<p>Only local variables can be deleted. There is no directive to
-delete a {#set global} variable, a searchList variable, or any
-other type of variable.</p>
-</div>
-<div class="section" id="attr">
-<h2>#attr<a class="headerlink" href="#attr" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.attr)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#attr $var = EXPR</span>
-</pre></div>
-</div>
-<p>The {#attr} directive creates class attributes in the generated
-Python class. It should be used to assign simple Python literals
-such as numbers or strings. In particular, the expression must {
-not} depend on searchList values or {#set} variables since those
-are not known at compile time.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#attr $title = &quot;Rob Roy&quot;</span>
-<span class="c1">#attr $author = &quot;Sir Walter Scott&quot;</span>
-<span class="c1">#attr $version = 123.4</span>
-</pre></div>
-</div>
-<p>This template or any child template can output the value thus:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$title, by $author, version $version
-</pre></div>
-</div>
-<p>If you have a library of templates derived from etexts
-(<a class="reference external" href="http://www.gutenberg.org/">http://www.gutenberg.org/</a>), you can extract the titles and authors
-and put them in a database (assuming the templates have been
-compiled into .py template modules):</p>
-</div>
-<div class="section" id="def">
-<h2>#def<a class="headerlink" href="#def" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.def)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#def METHOD[(ARGUMENTS)]</span>
-<span class="c1">#end def</span>
-</pre></div>
-</div>
-<p>Or the one-line variation:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#def METHOD[(ARGUMENTS)] : TEXT_AND_PLACEHOLDERS</span>
-</pre></div>
-</div>
-<p>The {#def} directive is used to define new methods in the generated
-Python class, or to override superclass methods. It is analogous to
-Python’s {def} statement. The directive is silent, meaning it does
-not itself produce any output. However, the content of the method
-will be inserted into the output (and the directives executed)
-whenever the method is later called by a $placeholder.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def myMeth()
-This is the text in my method
-$a $b $c(123) ## these placeholder names have been defined elsewhere
-#end def
-
-## and now use it...
-$myMeth()
-</pre></div>
-</div>
-<p>The arglist and parentheses can be omitted:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def myMeth
-This is the text in my method
-$a $b $c(123)
-#end def
-
-## and now use it...
-$myMeth
-</pre></div>
-</div>
-<p>Methods can have arguments and have defaults for those arguments,
-just like in Python. Remember the {$} before variable names:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def myMeth($a, $b=1234)
-This is the text in my method
-$a - $b
-#end def
-
-## and now use it...
-$myMeth(1)
-</pre></div>
-</div>
-<p>The output from this last example will be:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">This</span> <span class="ow">is</span> <span class="n">the</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">my</span> <span class="n">method</span>
-<span class="mi">1</span> <span class="o">-</span> <span class="mi">1234</span>
-</pre></div>
-</div>
-<p>There is also a single line version of the {#def} directive. {
-Unlike the multi-line directives, it uses a colon (:) to delimit
-the method signature and body}:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#attr $adj = &#39;trivial&#39;
-#def myMeth: This is the $adj method
-$myMeth
-</pre></div>
-</div>
-<p>Leading and trailing whitespace is stripped from the method. This
-is in contrast to:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def myMeth2
-This is the $adj method
-#end def
-</pre></div>
-</div>
-<p>where the method includes a newline after “method”. If you don’t
-want the newline, add {#slurp}:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#def myMeth3
-This is the $adj method#slurp
-#end def
-</pre></div>
-</div>
-<p>Because {#def} is handled at compile time, it can appear above or
-below the placeholders that call it. And if a superclass
-placeholder calls a method that’s overridden in a subclass, it’s
-the subclass method that will be called.</p>
-</div>
-<div class="section" id="block-end-block">
-<h2>#block … #end block<a class="headerlink" href="#block-end-block" title="Permalink to this headline">¶</a></h2>
-<p>(inheritanceEtc.block)</p>
-<p>The {#block} directive allows you to mark a section of your
-template that can be selectively reimplemented in a subclass. It is
-very useful for changing part of a template without having to
-copy-paste-and-edit the entire thing. The output from a template
-definition that uses blocks will be identical to the output from
-the same template with the {#block … #end block} tags removed.</p>
-<p>({ Note:} don’t be confused by the generic word ‘block’’ in this
-Guide, which means a section of code inside { any} {#TAG … #end
-TAG} pair. Thus, an if-block, for-block, def-block, block-block
-etc. In this section we are talking only of block-blocks.)</p>
-<p>To reimplement the block, use the {#def} directive. The magical
-effect is that it appears to go back and change the output text {
-at the point the original block was defined} rather than at the
-location of the reimplementation.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#block testBlock
-Text in the contents
-area of the block directive
-#if $testIt
-$getFoo()
-#end if
-#end block testBlock
-</pre></div>
-</div>
-<p>You can repeat the block name in the {#end block} directive or not,
-as you wish.</p>
-<p>{#block} directives can be nested to any depth.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#block outerBlock</span>
-<span class="n">Outer</span> <span class="n">block</span> <span class="n">contents</span>
-
-<span class="c1">#block innerBlock1</span>
-<span class="n">inner</span> <span class="n">block1</span> <span class="n">contents</span>
-<span class="c1">#end block innerBlock1</span>
-
-<span class="c1">#block innerBlock2</span>
-<span class="n">inner</span> <span class="n">block2</span> <span class="n">contents</span>
-<span class="c1">#end block innerBlock2</span>
-
-<span class="c1">#end block outerBlock</span>
-</pre></div>
-</div>
-<p>Note that the name of the block is optional for the {#end block}
-tag.</p>
-<p>Technically, {#block} directive is equivalent to a {#def} directive
-followed immediately by a {#placeholder} for the same name. In
-fact, that’s what Cheetah does. Which means you can use
-{$theBlockName} elsewhere in the template to output the block
-content again.</p>
-<p>There is a one-line {#block} syntax analagous to the one-line
-{#def}.</p>
-<p>The block must not require arguments because the implicit
-placeholder that’s generated will call the block without
-arguments.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="flowControl.html" title="Flow Control"
- >next</a> |</li>
- <li class="right" >
- <a href="output.html" title="Generating, Caching and Filtering Output"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/intro.html b/docs/html/users_guide/intro.html
deleted file mode 100644
index 32c7b52..0000000
--- a/docs/html/users_guide/intro.html
+++ /dev/null
@@ -1,402 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Introduction &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Vocabulary" href="glossary.html" />
- <link rel="prev" title="Cheetah User’s Guide" href="index.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="glossary.html" title="Vocabulary"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="index.html" title="Cheetah User’s Guide"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Introduction</a><ul>
-<li><a class="reference internal" href="#who-should-read-this-guide">Who should read this Guide?</a></li>
-<li><a class="reference internal" href="#what-is-cheetah">What is Cheetah?</a></li>
-<li><a class="reference internal" href="#what-is-the-philosophy-behind-cheetah">What is the philosophy behind Cheetah?</a><ul>
-<li><a class="reference internal" href="#why-cheetah-doesn-t-use-html-style-tags">Why Cheetah doesn’t use HTML-style tags</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#give-me-an-example">Give me an example!</a></li>
-<li><a class="reference internal" href="#give-me-an-example-of-a-webware-servlet">Give me an example of a Webware servlet!</a></li>
-<li><a class="reference internal" href="#how-mature-is-cheetah">How mature is Cheetah?</a></li>
-<li><a class="reference internal" href="#where-can-i-get-news">Where can I get news?</a></li>
-<li><a class="reference internal" href="#how-can-i-contribute">How can I contribute?</a><ul>
-<li><a class="reference internal" href="#bug-reports-and-patches">Bug reports and patches</a></li>
-<li><a class="reference internal" href="#template-libraries-and-function-libraries">Template libraries and function libraries</a></li>
-<li><a class="reference internal" href="#test-cases">Test cases</a></li>
-<li><a class="reference internal" href="#publicity">Publicity</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#acknowledgements">Acknowledgements</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="index.html"
- title="previous chapter">Cheetah User’s Guide</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="glossary.html"
- title="next chapter">Vocabulary</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/intro.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="introduction">
-<h1>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h1>
-<div class="section" id="who-should-read-this-guide">
-<h2>Who should read this Guide?<a class="headerlink" href="#who-should-read-this-guide" title="Permalink to this headline">¶</a></h2>
-<p>This Users’ Guide provides a technical overview and reference for
-the Cheetah template system. Knowledge of Python and
-object-oriented programming is assumed. The emphasis in this Guide
-is on features useful in a wide variety of situations. Information
-on less common situations and troubleshooting tips are gradually
-being moved to the Cheetah FAQ. There is also a Cheetah Developer’s
-Guide for those who want to know what goes on under the hood.</p>
-</div>
-<div class="section" id="what-is-cheetah">
-<h2>What is Cheetah?<a class="headerlink" href="#what-is-cheetah" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah is a Python-powered template engine and code generator. It
-may be used as a standalone utility or combined with other tools.
-Cheetah has many potential uses, but web developers looking for a
-viable alternative to ASP, JSP, PHP and PSP are expected to be its
-principle user group.</p>
-<p>Cheetah:</p>
-<ul class="simple">
-<li>generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX,
-or any other text-based format. It has also been used to produce
-Python, Java and PHP source code.</li>
-<li>cleanly separates content, graphic design, and program code.
-This leads to highly modular, flexible, and reusable site
-architectures; faster development time; and HTML and program code
-that is easier to understand and maintain. It is particularly well
-suited for team efforts.</li>
-<li>blends the power and flexibility of Python with a simple
-template language that non-programmers can understand.</li>
-<li>gives template writers full access in their templates to any
-Python data structure, module, function, object, or method.</li>
-<li>makes code reuse easy by providing an object-oriented interface
-to templates that is accessible from Python code or other Cheetah
-templates. One template can subclass another and selectively
-reimplement sections of it. A compiled template <strong>is</strong> a Python
-class, so it can subclass a pure Python class and vice-versa.</li>
-<li>provides a simple yet powerful caching mechanism</li>
-</ul>
-<p>Like its namesake, Cheetah is fast, flexible and powerful.</p>
-</div>
-<div class="section" id="what-is-the-philosophy-behind-cheetah">
-<h2>What is the philosophy behind Cheetah?<a class="headerlink" href="#what-is-the-philosophy-behind-cheetah" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah’s design was guided by these principles:</p>
-<ul>
-<li><p class="first">Python for the back end, Cheetah for the front end. Cheetah was
-designed to complement Python, not replace it.</p>
-</li>
-<li><p class="first">Cheetah’s core syntax should be easy for non-programmers to
-learn.</p>
-</li>
-<li><p class="first">Cheetah should make code reuse easy by providing an
-object-oriented interface to templates that is accessible from
-Python code or other Cheetah templates.</p>
-</li>
-<li><p class="first">Python objects, functions, and other data structures should be
-fully accessible in Cheetah.</p>
-</li>
-<li><p class="first">Cheetah should provide flow control and error handling. Logic
-that belongs in the front end shouldn’t be relegated to the back
-end simply because it’s complex.</p>
-</li>
-<li><p class="first">It should be easy to <strong>separate</strong> content, graphic design, and
-program code, but also easy to <strong>integrate</strong> them.</p>
-<p>A clean separation makes it easier for a team of content writers,
-HTML/graphic designers, and programmers to work together without
-stepping on each other’s toes and polluting each other’s work. The
-HTML framework and the content it contains are two separate things,
-and analytical calculations (program code) is a third thing. Each
-team member should be able to concentrate on their specialty and to
-implement their changes without having to go through one of the
-others (i.e., the dreaded “webmaster bottleneck”).</p>
-<p>While it should be easy to develop content, graphics and program
-code separately, it should be easy to integrate them together into
-a website. In particular, it should be easy:</p>
-<ul class="simple">
-<li>for <strong>programmers</strong> to create reusable components and functions
-that are accessible and understandable to designers.</li>
-<li>for <strong>designers</strong> to mark out placeholders for content and
-dynamic components in their templates.</li>
-<li>for <strong>designers</strong> to soft-code aspects of their design that are
-either repeated in several places or are subject to change.</li>
-<li>for <strong>designers</strong> to reuse and extend existing templates and thus
-minimize duplication of effort and code.</li>
-<li>and, of course, for <strong>content writers</strong> to use the templates that
-designers have created.</li>
-</ul>
-</li>
-</ul>
-<div class="section" id="why-cheetah-doesn-t-use-html-style-tags">
-<h3>Why Cheetah doesn’t use HTML-style tags<a class="headerlink" href="#why-cheetah-doesn-t-use-html-style-tags" title="Permalink to this headline">¶</a></h3>
-<p>Cheetah does not use HTML/XML-style tags like some other template
-languages for the following reasons: Cheetah is not limited to
-HTML, HTML-style tags are hard to distinguish from real HTML tags,
-HTML-style tags are not visible in rendered HTML when something
-goes wrong, HTML-style tags often lead to invalid HTML (e.g., <code class="docutils literal"><span class="pre">&lt;img</span>
-<span class="pre">src=&quot;&lt;template-directive&gt;&quot;&gt;</span></code>), Cheetah tags are less verbose and
-easier to understand than HTML-style tags, and HTML-style tags
-aren’t compatible with most WYSIWYG editors</p>
-<p>Besides being much more compact, Cheetah also has some advantages
-over languages that put information inside the HTML tags, such as
-Zope Page Templates or PHP: HTML or XML-bound languages do not work
-well with other languages, While ZPT-like syntaxes work well in
-many ways with WYSIWYG HTML editors, they also give up a
-significant advantage of those editors - concrete editing of the
-document. When logic is hidden away in (largely inaccessible) tags
-it is hard to understand a page simply by viewing it, and it is
-hard to confirm or modify that logic.</p>
-</div>
-</div>
-<div class="section" id="give-me-an-example">
-<h2>Give me an example!<a class="headerlink" href="#give-me-an-example" title="Permalink to this headline">¶</a></h2>
-<p>Here’s a very simple example that illustrates some of Cheetah’s
-basic syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;HTML&gt;
-&lt;HEAD&gt;&lt;TITLE&gt;$title&lt;/TITLE&gt;&lt;/HEAD&gt;
-&lt;BODY&gt;
-
-&lt;TABLE&gt;
-#for $client in $clients
-&lt;TR&gt;
-&lt;TD&gt;$client.surname, $client.firstname&lt;/TD&gt;
-&lt;TD&gt;&lt;A HREF=&quot;mailto:$client.email&quot;&gt;$client.email&lt;/A&gt;&lt;/TD&gt;
-&lt;/TR&gt;
-#end for
-&lt;/TABLE&gt;
-
-&lt;/BODY&gt;
-&lt;/HTML&gt;
-</pre></div>
-</div>
-<p>Compare this with PSP:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&lt;</span><span class="n">HTML</span><span class="o">&gt;</span>
-<span class="o">&lt;</span><span class="n">HEAD</span><span class="o">&gt;&lt;</span><span class="n">TITLE</span><span class="o">&gt;&lt;%=</span><span class="n">title</span><span class="o">%&gt;&lt;/</span><span class="n">TITLE</span><span class="o">&gt;&lt;/</span><span class="n">HEAD</span><span class="o">&gt;</span>
-<span class="o">&lt;</span><span class="n">BODY</span><span class="o">&gt;</span>
-
-<span class="o">&lt;</span><span class="n">TABLE</span><span class="o">&gt;</span>
-<span class="o">&lt;%</span> <span class="k">for</span> <span class="n">client</span> <span class="ow">in</span> <span class="n">clients</span><span class="p">:</span> <span class="o">%&gt;</span>
-<span class="o">&lt;</span><span class="n">TR</span><span class="o">&gt;</span>
-<span class="o">&lt;</span><span class="n">TD</span><span class="o">&gt;&lt;%=</span><span class="n">client</span><span class="p">[</span><span class="s1">&#39;surname&#39;</span><span class="p">]</span><span class="o">%&gt;</span><span class="p">,</span> <span class="o">&lt;%=</span><span class="n">client</span><span class="p">[</span><span class="s1">&#39;firstname&#39;</span><span class="p">]</span><span class="o">%&gt;&lt;/</span><span class="n">TD</span><span class="o">&gt;</span>
-<span class="o">&lt;</span><span class="n">TD</span><span class="o">&gt;&lt;</span><span class="n">A</span> <span class="n">HREF</span><span class="o">=</span><span class="s2">&quot;mailto:&lt;%=client[&#39;email&#39;]%&gt;&quot;</span><span class="o">&gt;&lt;%=</span><span class="n">client</span><span class="p">[</span><span class="s1">&#39;email&#39;</span><span class="p">]</span><span class="o">%&gt;&lt;/</span><span class="n">A</span><span class="o">&gt;&lt;/</span><span class="n">TD</span><span class="o">&gt;</span>
-<span class="o">&lt;/</span><span class="n">TR</span><span class="o">&gt;</span>
-<span class="o">&lt;%</span><span class="n">end</span><span class="o">%&gt;</span>
-<span class="o">&lt;/</span><span class="n">TABLE</span><span class="o">&gt;</span>
-
-<span class="o">&lt;/</span><span class="n">BODY</span><span class="o">&gt;</span>
-<span class="o">&lt;/</span><span class="n">HTML</span><span class="o">&gt;</span>
-</pre></div>
-</div>
-<p>Section gettingStarted.tutorial has a more typical example that
-shows how to get the plug-in values <strong>into</strong> Cheetah, and section
-howWorks.cheetah-compile explains how to turn your template
-definition into an object-oriented Python module.</p>
-</div>
-<div class="section" id="give-me-an-example-of-a-webware-servlet">
-<h2>Give me an example of a Webware servlet!<a class="headerlink" href="#give-me-an-example-of-a-webware-servlet" title="Permalink to this headline">¶</a></h2>
-<p>This example uses an HTML form to ask the user’s name, then invokes
-itself again to display a <strong>personalized</strong> friendly greeting.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;My Template-Servlet&lt;/TITLE&gt;&lt;/HEAD&gt;&lt;BODY&gt;
-#set $name = $request.field(&#39;name&#39;, None)
-#if $name
-Hello $name
-#else
-&lt;FORM ACTION=&quot;&quot; METHOD=&quot;GET&quot;&gt;
-Name: &lt;INPUT TYPE=&quot;text&quot; NAME=&quot;name&quot;&gt;&lt;BR&gt;
-&lt;INPUT TYPE=&quot;submit&quot;&gt;
-&lt;/FORM&gt;
-#end if
-&lt;/BODY&gt;&lt;/HTML&gt;
-</pre></div>
-</div>
-<p>To try it out for yourself on a Webware system:</p>
-<ol class="arabic simple">
-<li>copy the template definition to a file <strong>test.tmpl</strong> in your
-Webware servlet directory.</li>
-<li>Run <code class="docutils literal"><span class="pre">cheetah</span> <span class="pre">compile</span> <span class="pre">test.tmpl</span></code>. This produces <code class="docutils literal"><span class="pre">test.py</span></code> (a
-.py template module) in the same directory.</li>
-<li>In your web browser, go to <code class="docutils literal"><span class="pre">test.py</span></code>, using whatever site and
-directory is appropriate.</li>
-</ol>
-<p>At the first request, field ‘name’ will be blank (false) so the
-“#else” portion will execute and present a form. You type your name
-and press submit. The form invokes the same page. Now ‘name’ is
-true so the “#if” portion executes, which displays the greeting.
-The “#set” directive creates a local variable that lasts while the
-template is being filled.</p>
-</div>
-<div class="section" id="how-mature-is-cheetah">
-<h2>How mature is Cheetah?<a class="headerlink" href="#how-mature-is-cheetah" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah is stable, production quality, post-beta code. Cheetah’s
-syntax, semantics and performance have been generally stable since
-a performance overhaul in mid 2001. Most of the changes since
-October 2001 have been in response to specific requests by
-production sites, things they need that we hadn’t considered.</p>
-<p>As of summer 2003, we are putting in the final touches before the
-1.0 release.</p>
-</div>
-<div class="section" id="where-can-i-get-news">
-<h2>Where can I get news?<a class="headerlink" href="#where-can-i-get-news" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah releases can be obtained from the <a class="reference external" href="http://cheetahtemplate.org/">Cheetah
-website</a></p>
-<p>If you encounter difficulties, or are unsure about how to do something, please
-post a detailed message to the <cite>bug tracker
-&lt;https://github.com/CheetahTemplate3/cheetah3/issues&gt;</cite>.</p>
-</div>
-<div class="section" id="how-can-i-contribute">
-<h2>How can I contribute?<a class="headerlink" href="#how-can-i-contribute" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah is the work of many volunteers. If you use Cheetah please
-share your experiences, tricks, customizations, and frustrations.</p>
-<div class="section" id="bug-reports-and-patches">
-<h3>Bug reports and patches<a class="headerlink" href="#bug-reports-and-patches" title="Permalink to this headline">¶</a></h3>
-<p>If you think there is a bug in Cheetah, send a message to the
-e-mail list with the following information:</p>
-<ol class="arabic simple">
-<li>a description of what you were trying to do and what happened</li>
-<li>all tracebacks and error output</li>
-<li>your version of Cheetah</li>
-<li>your version of Python</li>
-<li>your operating system</li>
-<li>whether you have changed anything in the Cheetah installation</li>
-</ol>
-</div>
-<div class="section" id="template-libraries-and-function-libraries">
-<h3>Template libraries and function libraries<a class="headerlink" href="#template-libraries-and-function-libraries" title="Permalink to this headline">¶</a></h3>
-<p>We hope to build up a framework of Template libraries (see section
-libraries.templates) to distribute with Cheetah and would
-appreciate any contributions.</p>
-</div>
-<div class="section" id="test-cases">
-<h3>Test cases<a class="headerlink" href="#test-cases" title="Permalink to this headline">¶</a></h3>
-<p>Cheetah is packaged with a regression testing suite that is run
-with each new release to ensure that everything is working as
-expected and that recent changes haven’t broken anything. The test
-cases are in the Cheetah.Tests module. If you find a reproduceable
-bug please consider writing a test case that will pass only when
-the bug is fixed. Send any new test cases to the email list with
-the subject-line “new test case for Cheetah.”</p>
-</div>
-<div class="section" id="publicity">
-<h3>Publicity<a class="headerlink" href="#publicity" title="Permalink to this headline">¶</a></h3>
-<p>Help spread the word … recommend it to others, write articles
-about it, etc.</p>
-</div>
-</div>
-<div class="section" id="acknowledgements">
-<h2>Acknowledgements<a class="headerlink" href="#acknowledgements" title="Permalink to this headline">¶</a></h2>
-<p>Cheetah is one of several templating frameworks that grew out of a
-‘templates’ thread on the Webware For Python email list. Tavis
-Rudd, Mike Orr, Chuck Esterbrook and Ian Bicking are the core
-developers.</p>
-<p>We’d like to thank the following people for contributing valuable
-advice, code and encouragement: Geoff Talvola, Jeff Johnson, Graham
-Dumpleton, Clark C. Evans, Craig Kattner, Franz Geiger, Geir
-Magnusson, Tom Schwaller, Rober Kuzelj, Jay Love, Terrel Shumway,
-Sasa Zivkov, Arkaitz Bitorika, Jeremiah Bellomy, Baruch Even, Paul
-Boddie, Stephan Diehl, Chui Tey, Michael Halle, Edmund Lian and
-Aaron Held.</p>
-<p>The Velocity, WebMacro and Smarty projects provided inspiration and
-design ideas. Cheetah has benefitted from the creativity and energy
-of their developers. Thank you.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="glossary.html" title="Vocabulary"
- >next</a> |</li>
- <li class="right" >
- <a href="index.html" title="Cheetah User’s Guide"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/language.html b/docs/html/users_guide/language.html
deleted file mode 100644
index dbb5d91..0000000
--- a/docs/html/users_guide/language.html
+++ /dev/null
@@ -1,713 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Language Overview &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Comments" href="comments.html" />
- <link rel="prev" title="Getting Started" href="gettingStarted.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="comments.html" title="Comments"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="gettingStarted.html" title="Getting Started"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Language Overview</a><ul>
-<li><a class="reference internal" href="#language-constructs-summary">Language Constructs - Summary</a></li>
-<li><a class="reference internal" href="#placeholder-syntax-rules">Placeholder Syntax Rules</a></li>
-<li><a class="reference internal" href="#where-can-you-use-placeholders">Where can you use placeholders?</a></li>
-<li><a class="reference internal" href="#are-all-those-dollar-signs-really-necessary">Are all those dollar signs really necessary?</a></li>
-<li><a class="reference internal" href="#namemapper-syntax">NameMapper Syntax</a><ul>
-<li><a class="reference internal" href="#example">Example</a></li>
-<li><a class="reference internal" href="#dictionary-access">Dictionary Access</a></li>
-<li><a class="reference internal" href="#autocalling">Autocalling</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#namespace-cascading-and-the-searchlist">Namespace cascading and the searchList</a></li>
-<li><a class="reference internal" href="#missing-values">Missing Values</a></li>
-<li><a class="reference internal" href="#directive-syntax-rules">Directive Syntax Rules</a><ul>
-<li><a class="reference internal" href="#directive-closures-and-whitespace-handling">Directive closures and whitespace handling</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="gettingStarted.html"
- title="previous chapter">Getting Started</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="comments.html"
- title="next chapter">Comments</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/language.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="language-overview">
-<h1>Language Overview<a class="headerlink" href="#language-overview" title="Permalink to this headline">¶</a></h1>
-<p>(language)</p>
-<p>Cheetah’s basic syntax was inspired by the Java-based template
-engines Velocity and WebMacro. It has two types of tags: {
-$placeholders} and { #directives}. Both types are case-sensitive.</p>
-<p>Placeholder tags begin with a dollar sign ({$varName}) and are
-similar to data fields in a form letter or to the {%(key)s} fields
-on the left side of Python’s {%} operator. When the template is
-filled, the placeholders are replaced with the values they refer
-to.</p>
-<p>Directive tags begin with a hash character (#) and are used for
-comments, loops, conditional blocks, includes, and all other
-advanced features. ({ Note:} you can customize the start and end
-delimeters for placeholder and directive tags, but in this Guide
-we’ll assume you’re using the default.)</p>
-<p>Placeholders and directives can be escaped by putting a backslash
-before them. <code class="docutils literal"><span class="pre">\$var</span></code> and <code class="docutils literal"><span class="pre">\#if</span></code> will be output as literal
-text.</p>
-<p>A placeholder or directive can span multiple physical lines,
-following the same rules as Python source code: put a backslash
-(<code class="docutils literal"><span class="pre">\</span></code>) at the end of all lines except the last line. However, if
-there’s an unclosed parenthesis, bracket or brace pending, you
-don’t need the backslash.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#if $this_is_a_very_long_line and $has_lots_of_conditions \
- and $more_conditions:
-&lt;H1&gt;bla&lt;/H1&gt;
-#end if
-
-#if $country in (&#39;Argentina&#39;, &#39;Uruguay&#39;, &#39;Peru&#39;, &#39;Colombia&#39;,
- &#39;Costa Rica&#39;, &#39;Venezuela&#39;, &#39;Mexico&#39;)
-&lt;H1&gt;Hola, senorita!&lt;/H1&gt;
-#else
-&lt;H1&gt;Hey, baby!&lt;/H1&gt;
-#end if
-</pre></div>
-</div>
-<div class="section" id="language-constructs-summary">
-<h2>Language Constructs - Summary<a class="headerlink" href="#language-constructs-summary" title="Permalink to this headline">¶</a></h2>
-<p>(language.constructs)</p>
-<ol class="arabic simple">
-<li>Comments and documentation strings<ol class="arabic">
-<li>{## single line}</li>
-<li>{#* multi line *#}</li>
-</ol>
-</li>
-<li>Generation, caching and filtering of output<ol class="arabic">
-<li>plain text</li>
-<li>look up a value: {$placeholder}</li>
-<li>evaluate an expression: {#echo} …</li>
-<li>same but discard the output: {#silent} …</li>
-<li>one-line if: {#if EXPR then EXPR else EXPR}</li>
-<li>gobble the EOL: {#slurp}</li>
-<li>parsed file includes: {#include} …</li>
-<li>raw file includes: {#include raw} …</li>
-<li>verbatim output of Cheetah code: {#raw} … {#end raw}</li>
-<li>cached placeholders: {$*var}, {$*&lt;interval&gt;*var}</li>
-<li>cached regions: {#cache} … {#end cache}</li>
-<li>set the output filter: {#filter} …</li>
-<li>control output indentation: {#indent} … ({ not implemented
-yet})</li>
-</ol>
-</li>
-<li>Importing Python modules and objects: {#import} …, {#from}
-…</li>
-<li>Inheritance<ol class="arabic">
-<li>set the base class to inherit from: {#extends}</li>
-<li>set the name of the main method to implement: {#implements}
-…</li>
-</ol>
-</li>
-<li>Compile-time declaration<ol class="arabic">
-<li>define class attributes: {#attr} …</li>
-<li>define class methods: {#def} … {#end def}</li>
-<li>{#block} … {#end block} provides a simplified interface to
-{#def} … {#end def}</li>
-</ol>
-</li>
-<li>Run-time assignment<ol class="arabic">
-<li>local vars: {#set} …</li>
-<li>global vars: {#set global} …</li>
-<li>deleting local vars: {#del} …</li>
-</ol>
-</li>
-<li>Flow control<ol class="arabic">
-<li>{#if} … {#else} … {#else if} (aka {#elif}) … {#end if}</li>
-<li>{#unless} … {#end unless}</li>
-<li>{#for} … {#end for}</li>
-<li>{#repeat} … {#end repeat}</li>
-<li>{#while} … {#end while}</li>
-<li>{#break}</li>
-<li>{#continue}</li>
-<li>{#pass}</li>
-<li>{#stop}</li>
-</ol>
-</li>
-<li>error/exception handling<ol class="arabic">
-<li>{#assert}</li>
-<li>{#raise}</li>
-<li>{#try} … {#except} … {#else} … {#end try}</li>
-<li>{#try} … {#finally} … {#end try}</li>
-<li>{#errorCatcher} … set a handler for exceptions raised by
-$placeholder calls.</li>
-</ol>
-</li>
-<li>Instructions to the parser/compiler<ol class="arabic">
-<li>{#breakpoint}</li>
-<li>{#compiler-settings} … {#end compiler-settings}</li>
-</ol>
-</li>
-<li>Escape to pure Python code<ol class="arabic">
-<li>evalute expression and print the output: {&lt;%=} … {%&gt;}</li>
-<li>execute code and discard output: {&lt;%} … {%&gt;}</li>
-</ol>
-</li>
-<li>Fine control over Cheetah-generated Python modules<ol class="arabic">
-<li>set the source code encoding of compiled template modules:
-{#encoding}</li>
-<li>set the sh-bang line of compiled template modules: {#shBang}</li>
-</ol>
-</li>
-</ol>
-<p>The use of all these constructs will be covered in the next several
-chapters.</p>
-</div>
-<div class="section" id="placeholder-syntax-rules">
-<h2>Placeholder Syntax Rules<a class="headerlink" href="#placeholder-syntax-rules" title="Permalink to this headline">¶</a></h2>
-<p>(language.placeholders.syntax)</p>
-<ul>
-<li><p class="first">Placeholders follow the same syntax rules as Python variables
-except that they are preceded by {$} (the short form) or enclosed
-in {${}} (the long form). Examples:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$var
-${var}
-$var2.abc[&#39;def&#39;](&#39;gh&#39;, $subplaceholder, 2)
-${var2.abc[&#39;def&#39;](&#39;gh&#39;, $subplaceholder, 2)}
-</pre></div>
-</div>
-<p>We recommend {$} in simple cases, and {${}} when followed directly
-by a letter or when Cheetah or a human template maintainer might
-get confused about where the placeholder ends. You may alternately
-use <code class="docutils literal"><span class="pre">$()</span></code> or <code class="docutils literal"><span class="pre">$[]</span></code>, although this may confuse the (human)
-template maintainer:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$(var)
-$[var]
-$(var2.abc[&#39;def&#39;](&#39;gh&#39;, $subplaceholder, 2))
-$[var2.abc[&#39;def&#39;](&#39;gh&#39;, $subplaceholder, 2)]
-</pre></div>
-</div>
-<p>{ Note:} Advanced users can change the delimiters to anything they
-want via the {#compiler} directive.</p>
-<p>{ Note 2:} The long form can be used only with top-level
-placeholders, not in expressions. See section
-language.placeholders.positions for an elaboration on this.</p>
-</li>
-<li><p class="first">To reiterate Python’s rules, placeholders consist of one or more
-identifiers separated by periods. Each identifier must start with a
-letter or an underscore, and the subsequent characters must be
-letters, digits or underscores. Any identifier may be followed by
-arguments enclosed in <code class="docutils literal"><span class="pre">()</span></code> and/or keys/subscripts in <code class="docutils literal"><span class="pre">[]</span></code>.</p>
-</li>
-<li><p class="first">Identifiers are case sensitive. {$var} does not equal {$Var} or
-{$vAr} or {$VAR}.</p>
-</li>
-<li><p class="first">Arguments inside <code class="docutils literal"><span class="pre">()</span></code> or <code class="docutils literal"><span class="pre">[]</span></code> are just like in Python.
-Strings may be quoted using any Python quoting style. Each argument
-is an expression and may use any of Python’s expression operators.
-Variables used in argument expressions are placeholders and should
-be prefixed with {$}. This also applies to the *arg and **kw
-forms. However, you do { not} need the {$} with the special Python
-constants {None}, {True} and {False}. Examples:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$hex($myVar)
-$func($arg=1234)
-$func2($*args, $**kw)
-$func3(3.14159, $arg2, None, True)
-$myList[$mySubscript]
-</pre></div>
-</div>
-</li>
-<li><p class="first">Trailing periods are ignored. Cheetah will recognize that the
-placeholder name in {$varName.} is {varName}, and the period will
-be left alone in the template output.</p>
-</li>
-<li><p class="first">The syntax {${placeholderName, arg1=”val1”}} passes arguments to
-the output filter (see {#filter}, section output.filter. The braces
-and comma are required in this case. It’s conventional to omit the
-{$} before the keyword arguments (i.e. {arg1}) in this case.</p>
-</li>
-<li><p class="first">Cheetah ignores all dollar signs ({$}) that are not followed by
-a letter or an underscore.</p>
-</li>
-</ul>
-<p>The following are valid $placeholders:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$a $_ $var $_var $var1 $_1var $var2_ $dict.key $list[3]
-$object.method $object.method() $object.method
-$nest($nest($var))
-</pre></div>
-</div>
-<p>These are not $placeholders but are treated as literal text:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$@var $^var $15.50 $$
-</pre></div>
-</div>
-</div>
-<div class="section" id="where-can-you-use-placeholders">
-<h2>Where can you use placeholders?<a class="headerlink" href="#where-can-you-use-placeholders" title="Permalink to this headline">¶</a></h2>
-<p>(language.placeholders.positions)</p>
-<p>There are three places you can use placeholders: top-level
-position, expression position and LVALUE position. Each has
-slightly different syntax rules.</p>
-<p>Top-level position means interspersed in text. This is the only
-place you can use the placeholder long form: {${var}}.</p>
-<p>{ Expression position} means inside a Cheetah expression, which is
-the same as a Python expression. The placeholder names a searchList
-or other variable to be read. Expression position occurs inside ()
-and <span class="math">$[]$</span> arguments within placeholder tags (i.e., a
-placeholder inside a placeholder), and in several directive tags.</p>
-<p>{ LVALUE position} means naming a variable that will be written to.
-LVALUE is a computer science term meaning
-“the left side of an assignment statement”. The first argument of
-directives {#set}, {#for}, {#def}, {#block} and {#attr} is an
-LVALUE.</p>
-<p>This stupid example shows the three positions. Top-level position
-is shown in {courier}, expression position is { italic}, and LVALUE
-position is { bold}.</p>
-<blockquote>
-<div>#for { $count} in { $range}({ $ninetyNine}, 0, -1)
-#set { $after} = { $count} - 1
-{$count} bottles of beer on the wall. {$count} bottles of beer!
-Take one down, pass it around. {$after} bottles of beer on the
-wall.
-#end for
-{$hex}({ $myVar}, { $default}={ None})</div></blockquote>
-<p>The output of course is:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>99 bottles of beer on the wall. 99 bottles of beer!
- Take one down, pass it around. 98 bottles of beer on the wall.
-98 bottles of beer on the wall. 98 bottles of beer!
- Take one down, pass it around. 97 bottles of beer on the wall.
-...
-</pre></div>
-</div>
-</div>
-<div class="section" id="are-all-those-dollar-signs-really-necessary">
-<h2>Are all those dollar signs really necessary?<a class="headerlink" href="#are-all-those-dollar-signs-really-necessary" title="Permalink to this headline">¶</a></h2>
-<p>(language.placeholders.dollar-signs)</p>
-<p>{$} is a “smart variable prefix”. When Cheetah sees {$}, it
-determines both the variable’s position and whether it’s a
-searchList value or a non-searchList value, and generates the
-appropriate Python code.</p>
-<p>In top-level position, the {$} is { required}. Otherwise there’s
-nothing to distinguish the variable from ordinary text, and the
-variable name is output verbatim.</p>
-<p>In expression position, the {$} is { required} if the value comes
-from the searchList or a “#set global” variable, { recommended} for
-local/global/builtin variables, and { not necessary} for the
-special constants {None}, {True} and {False}. This works because
-Cheetah generates a function call for a searchList placeholder, but
-a bare variable name for a local/global/builtin variable.</p>
-<p>In LVALUE position, the {$} is { recommended}. Cheetah knows where
-an LVALUE is expected, so it can handle your variable name whether
-it has {$} or not.</p>
-<p>EXCEPTION: Do { not} use the {$} prefix for intermediate variables
-in a Python list comprehensions. This is a limitation of Cheetah’s
-parser; it can’t tell which variables in a list comprehension are
-the intermediate variables, so you have to help it. For example:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#set $theRange = [x ** 2 for x in $range(10)]</span>
-</pre></div>
-</div>
-<p>{$theRange} is a regular {#set} variable. {$range} is a Python
-built-in function. But {x} is a scratch variable internal to the
-list comprehension: if you type {$x}, Cheetah will miscompile it.</p>
-</div>
-<div class="section" id="namemapper-syntax">
-<h2>NameMapper Syntax<a class="headerlink" href="#namemapper-syntax" title="Permalink to this headline">¶</a></h2>
-<p>(language.namemapper)</p>
-<p>One of our core aims for Cheetah was to make it easy for
-non-programmers to use. Therefore, Cheetah uses a simplified syntax
-for mapping placeholders in Cheetah to values in Python. It’s known
-as the { NameMapper syntax} and allows for non-programmers to use
-Cheetah without knowing (a) the difference between an instance and
-a dictionary, (b) what functions and methods are, and (c) what
-‘self’ is. A side benefit is that you can change the underlying
-data structure (e.g., instance to dictionary or vice-versa) without
-having to modify the templates.</p>
-<p>NameMapper syntax is used for all variables in Cheetah placeholders
-and directives. If desired, it can be turned off via the {Template}
-class’ {‘useNameMapper’} compiler setting. But it’s doubtful you’d
-ever want to turn it off.</p>
-<div class="section" id="example">
-<h3>Example<a class="headerlink" href="#example" title="Permalink to this headline">¶</a></h3>
-<p>(language.namemapper.example)</p>
-<p>Consider this scenario:</p>
-<p>You are building a customer information system. The designers with
-you want to use information from your system on the client’s
-website -AND- they want to understand the display code and so they
-can maintian it themselves.</p>
-<p>You write a UI class with a ‘customers’ method that returns a
-dictionary of all the customer objects. Each customer object has an
-‘address’ method that returns the a dictionary with information
-about the customer’s address. The designers want to be able to
-access that information.</p>
-<p>Using PSP, the display code for the website would look something
-like the following, assuming your servlet subclasses the class you
-created for managing customer information:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&lt;%=</span> <span class="bp">self</span><span class="o">.</span><span class="n">customer</span><span class="p">()[</span><span class="n">ID</span><span class="p">]</span><span class="o">.</span><span class="n">address</span><span class="p">()[</span><span class="s1">&#39;city&#39;</span><span class="p">]</span> <span class="o">%&gt;</span> <span class="p">(</span><span class="mi">42</span> <span class="n">chars</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>With Cheetah’s NameMapper syntax, you can use any of the
-following:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$self.customers()[$ID].address()[&#39;city&#39;] (39 chars)
---OR--
-$customers()[$ID].address()[&#39;city&#39;]
---OR--
-$customers()[$ID].address().city
---OR--
-$customers()[$ID].address.city
---OR--
-$customers[$ID].address.city (27 chars)
-</pre></div>
-</div>
-<p>Which of these would you prefer to explain to the designers, who
-have no programming experience? The last form is 15 characters
-shorter than the PSP version and - conceptually - far more
-accessible. With PHP or ASP, the code would be even messier than
-with PSP.</p>
-<p>This is a rather extreme example and, of course, you could also
-just implement {$getCustomer($ID).city} and obey the Law of Demeter
-(search Google for more on that). But good object orientated design
-isn’t the point of this example.</p>
-</div>
-<div class="section" id="dictionary-access">
-<h3>Dictionary Access<a class="headerlink" href="#dictionary-access" title="Permalink to this headline">¶</a></h3>
-<p>(language.namemapper.dict)</p>
-<p>NameMapper syntax allows access to dictionary items with the same
-dotted notation used to access object attributes in Python. This
-aspect of NameMapper syntax is known as ‘Unified Dotted Notation’.
-For example, with Cheetah it is possible to write:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$customers()[&#39;kerr&#39;].address() --OR-- $customers().kerr.address()
-</pre></div>
-</div>
-<p>where the second form is in NameMapper syntax.</p>
-<p>This works only with dictionary keys that also happen to be valid
-Python identifiers.</p>
-</div>
-<div class="section" id="autocalling">
-<h3>Autocalling<a class="headerlink" href="#autocalling" title="Permalink to this headline">¶</a></h3>
-<p>(language.namemapper.autocalling)</p>
-<p>Cheetah automatically detects functions and methods in Cheetah
-$variables and calls them if the parentheses have been left off.
-Our previous example can be further simplified to:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$customers.kerr.address
-</pre></div>
-</div>
-<p>As another example, if ‘a’ is an object, ‘b’ is a method</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$a.b
-</pre></div>
-</div>
-<p>is equivalent to</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$a.b()
-</pre></div>
-</div>
-<p>If b returns a dictionary, then following variations are possible</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$a.b.c --OR-- $a.b().c --OR-- $a.b()[&#39;c&#39;]
-</pre></div>
-</div>
-<p>where ‘c’ is a key in the dictionary that a.b() returns.</p>
-<p>Further notes:</p>
-<ul class="simple">
-<li>When Cheetah autocalls a function/method, it calls it without
-any arguments. Thus, the function/method must have been declared
-without arguments (except {self} for methods) or to provide default
-values for all arguments. If the function requires arguments, you
-must use the {()}.</li>
-<li>Cheetah autocalls only functions and methods. Classes and other
-callable objects are not autocalled. The reason is that the primary
-purpose of a function/method is to call it, whereas the primary
-purpose of an instance is to look up its attributes or call its
-methods, not to call the instance itself. And calling a class may
-allocate large sums of memory uselessly or have other side effects,
-depending on the class. For instance, consider {$myInstance.fname}.
-Do we want to look up {fname} in the namespace of {myInstance} or
-in the namespace of whatever {myinstance} returns? It could go
-either way, so Cheetah follows the principle of least surprise. If
-you { do} want to call the instance, put the {()} on, or rename the
-{.__call__()} method to {.__str__}.</li>
-<li>Autocalling can be disabled via Cheetah’s ‘useAutocalling’
-compiler setting. You can also disable it for one placeholder by
-using the syntax {$getVar(‘varName’, ‘default value’, False)}.
-({.getVar()} works only with searchList values.)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="namespace-cascading-and-the-searchlist">
-<h2>Namespace cascading and the searchList<a class="headerlink" href="#namespace-cascading-and-the-searchlist" title="Permalink to this headline">¶</a></h2>
-<p>(language.searchList)</p>
-<p>When Cheetah maps a variable name in a template to a Python value,
-it searches several namespaces in order:</p>
-<ol class="arabic simple">
-<li>{ Local variables:} created by {#set}, {#for}, or predefined by
-Cheetah.</li>
-<li>The { searchList}, consisting of:<ol class="arabic">
-<li>{#set global} variables.</li>
-<li>The { searchList} containers you passed to the {Template}
-constructor, if any.</li>
-<li>The { Template instance} (“self”). This contains any attributes
-you assigned, {#def} methods and {#block methods},
-attributes/methods inherited via {#extends}, and other
-attributes/methods built into {Template} or inherited by it
-(there’s a list of all these methods in section tips.allMethods).</li>
-</ol>
-</li>
-<li>{ Python globals:} created by {#import}, {#from … import}, or
-otherwise predefined by Cheetah.</li>
-<li>{ Python builtins:} {None}, {max}, etc.</li>
-</ol>
-<p>The first matching name found is used.</p>
-<p>Remember, these namespaces apply only to the { first} identifier
-after the {$}. In a placeholder like {$a.b}, only ‘a’ is looked up
-in the searchList and other namespaces. ‘b’ is looked up only
-inside ‘a’.</p>
-<p>A searchList container can be any Python object with attributes or
-keys: dictionaries, instances, classes or modules. If an instance
-contains both attributes and keys, its attributes are searched
-first, then its keys.</p>
-<p>Because the {Template} instance is part of the searchList, you can
-access its attributes/methods without ‘self’: {$myAttr}. However,
-use the ‘self’ if you want to make sure you’re getting the
-{Template} attribute and not a same-name variable defined in a
-higher namespace: {$self.myAttr}. This works because “self” itself
-is a local variable.</p>
-<p>The final resulting value, after all lookups and function calls
-(but before the filter is applied) is called the { placeholder
-value}, no matter which namespace it was found in.</p>
-<p>{ { Note carefully:}} if you put an object ‘myObject’ in the
-searchList, you { cannot} look up {$myObject}! You can look up only
-the attributes/keys { inside} ‘myObject’.</p>
-<p>Earlier versions of Cheetah did not allow you to override Python
-builtin names, but this was fixed in Cheetah 0.9.15.</p>
-<p>If your template will be used as a Webware servlet, do not override
-methods ‘name’ and ‘log’ in the {Template} instance or it will
-interfere with Webware’s logging. However, it { is} OK to use those
-variables in a higher namespace, since Webware doesn’t know about
-Cheetah namespaces.</p>
-</div>
-<div class="section" id="missing-values">
-<h2>Missing Values<a class="headerlink" href="#missing-values" title="Permalink to this headline">¶</a></h2>
-<p>(language.namemapper.missing)</p>
-<p>If NameMapper can not find a Python value for a Cheetah variable
-name, it will raise the NameMapper.NotFound exception. You can use
-the {#errorCatcher} directive (section errorHandling.errorCatcher)
-or { errorCatcher} Template constructor argument (section
-howWorks.constructing) to specify an alternate behaviour. BUT BE
-AWARE THAT errorCatcher IS ONLY INTENDED FOR DEBUGGING!</p>
-<p>To provide a default value for a placeholder, write it like this:
-{$getVar(‘varName’, ‘default value’)}. If you don’t specify a
-default and the variable is missing, {NameMapper.NotFound} will be
-raised.</p>
-</div>
-<div class="section" id="directive-syntax-rules">
-<h2>Directive Syntax Rules<a class="headerlink" href="#directive-syntax-rules" title="Permalink to this headline">¶</a></h2>
-<p>(language.directives.syntax)</p>
-<p>Directive tags begin with a hash character (#) and are used for
-comments, loops, conditional blocks, includes, and all other
-advanced features. Cheetah uses a Python-like syntax inside
-directive tags and understands any valid Python expression. {
-However, unlike Python, Cheetah does not use colons (:) and
-indentation to mark off multi-line directives.} That doesn’t work
-in an environment where whitespace is significant as part of the
-text. Instead, multi-line directives like {#for} have corresponding
-closing tags ({#end for}). Most directives are direct mirrors of
-Python statements.</p>
-<p>Many directives have arguments after the opening tag, which must be
-in the specified syntax for the tag. All end tags have the
-following syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#end TAG_NAME [EXPR]</span>
-</pre></div>
-</div>
-<p>The expression is ignored, so it’s essentially a comment.</p>
-<div class="section" id="directive-closures-and-whitespace-handling">
-<h3>Directive closures and whitespace handling<a class="headerlink" href="#directive-closures-and-whitespace-handling" title="Permalink to this headline">¶</a></h3>
-<p>(language.directives.closures) Directive tags can be closed
-explicitly with {#}, or implicitly with the end of the line if
-you’re feeling lazy.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#block testBlock #</span>
-<span class="n">Text</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">body</span> <span class="n">of</span> <span class="n">the</span>
-<span class="n">block</span> <span class="n">directive</span>
-<span class="c1">#end block testBlock #</span>
-</pre></div>
-</div>
-<p>is identical to:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#block testBlock</span>
-<span class="n">Text</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">body</span> <span class="n">of</span> <span class="n">the</span>
-<span class="n">block</span> <span class="n">directive</span>
-<span class="c1">#end block testBlock</span>
-</pre></div>
-</div>
-<p>When a directive tag is closed explicitly, it can be followed with
-other text on the same line:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">bah</span><span class="p">,</span> <span class="n">bah</span><span class="p">,</span> <span class="c1">#if $sheep.color == &#39;black&#39;# black#end if # sheep.</span>
-</pre></div>
-</div>
-<p>When a directive tag is closed implicitly with the end of the line,
-all trailing whitespace is gobbled, including the newline
-character:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">foo #set $x = 2</span>
-<span class="sd">bar</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="n">outputs</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">foo bar</span>
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="k">while</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">foo #set $x = 2 #</span>
-<span class="sd">bar</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="n">outputs</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">foo</span>
-<span class="sd">bar</span>
-<span class="sd">&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<p>When a directive tag is closed implicitly AND there is no other
-text on the line, the ENTIRE line is gobbled up including any
-preceeding whitespace:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">foo</span>
-<span class="sd"> #set $x = 2</span>
-<span class="sd">bar</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="n">outputs</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">foo</span>
-<span class="sd">bar</span>
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="k">while</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">foo</span>
-<span class="sd"> - #set $x = 2</span>
-<span class="sd">bar</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="n">outputs</span>
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">foo</span>
-<span class="sd"> - bar</span>
-<span class="sd">&quot;&quot;&quot;</span>
-</pre></div>
-</div>
-<p>The {#slurp} directive (section output.slurp) also gobbles up
-whitespace.</p>
-<p>Spaces outside directives are output { exactly} as written. In the
-black sheep example, there’s a space before “black” and another
-before “sheep”. So although it’s legal to put multiple directives
-on one line, it can be hard to read.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#if $a# #echo $a + 1# #end if
- - There&#39;s a space between each directive,
- or two extra spaces total.
-#if $a##echo $a + 1##end if
- - No spaces, but you have to look closely
- to verify none of the ``##&#39;&#39; are comment markers.
-#if $a##echo $a + 1##end if ### A comment.
- - In ``###&#39;&#39;, the first ``#&#39;&#39; ends the directive,
- the other two begin the comment. (This also shows
- how you can add extra whitespace in the directive
- tag without affecting the output.)
-#if $a##echo $a + 1##end if # ## A comment.
- - More readable, but now there&#39;s a space before the
- comment.
-</pre></div>
-</div>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="comments.html" title="Comments"
- >next</a> |</li>
- <li class="right" >
- <a href="gettingStarted.html" title="Getting Started"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/libraries.html b/docs/html/users_guide/libraries.html
deleted file mode 100644
index 9b0a86b..0000000
--- a/docs/html/users_guide/libraries.html
+++ /dev/null
@@ -1,397 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Batteries included: templates and other libraries &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Visual Editors" href="editors.html" />
- <link rel="prev" title="Non-HTML Output" href="nonHtml.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="editors.html" title="Visual Editors"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="nonHtml.html" title="Non-HTML Output"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Batteries included: templates and other libraries</a><ul>
-<li><a class="reference internal" href="#errorcatchers">ErrorCatchers</a></li>
-<li><a class="reference internal" href="#fileutils">FileUtils</a></li>
-<li><a class="reference internal" href="#filters">Filters</a></li>
-<li><a class="reference internal" href="#settingsmanager">SettingsManager</a></li>
-<li><a class="reference internal" href="#templates">Templates</a></li>
-<li><a class="reference internal" href="#tools">Tools</a></li>
-<li><a class="reference internal" href="#utils">Utils</a><ul>
-<li><a class="reference internal" href="#cheetah-templates-skeletonpage">Cheetah.Templates.SkeletonPage</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="nonHtml.html"
- title="previous chapter">Non-HTML Output</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="editors.html"
- title="next chapter">Visual Editors</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/libraries.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="batteries-included-templates-and-other-libraries">
-<h1>Batteries included: templates and other libraries<a class="headerlink" href="#batteries-included-templates-and-other-libraries" title="Permalink to this headline">¶</a></h1>
-<p>(libraries)</p>
-<p>Cheetah comes “batteries included” with libraries of templates,
-functions, classes and other objects you can use in your own
-programs. The different types are listed alphabetically below,
-followed by a longer description of the SkeletonPage framework.
-Some of the objects are classes for specific purposes (e.g.,
-filters or error catchers), while others are standalone and can be
-used without Cheetah.</p>
-<p>If you develop any objects which are generally useful for Cheetah
-sites, please consider posting them on the wiki with an
-announcement on the mailing list so we can incorporate them into
-the standard library. That way, all Cheetah users will benefit, and
-it will encourage others to contribute their objects, which might
-include something you want.</p>
-<div class="section" id="errorcatchers">
-<h2>ErrorCatchers<a class="headerlink" href="#errorcatchers" title="Permalink to this headline">¶</a></h2>
-<p>(libraries.ErrorCatchers)</p>
-<p>Module {Cheetah.ErrorCatchers} contains error-handling classes
-suitable for the {#errorCatcher} directive. These are debugging
-tools that are not intended for use in production systems. See
-section errorHandling.errorCatcher for a description of the error
-catchers bundled with Cheetah.</p>
-</div>
-<div class="section" id="fileutils">
-<h2>FileUtils<a class="headerlink" href="#fileutils" title="Permalink to this headline">¶</a></h2>
-<p>(libraries.FileUtils)</p>
-<p>Module {Cheetah.FileUtils} contains generic functions and classes
-for doing bulk search-and-replace on several files, and for finding
-all the files in a directory hierarchy whose names match a glob
-pattern.</p>
-</div>
-<div class="section" id="filters">
-<h2>Filters<a class="headerlink" href="#filters" title="Permalink to this headline">¶</a></h2>
-<p>(libraries.Filters)</p>
-<p>Module {Filters} contains filters suitable for the {#Filter}
-directive. See section output.filter for a description of the
-filters bundled with Cheetah.</p>
-</div>
-<div class="section" id="settingsmanager">
-<h2>SettingsManager<a class="headerlink" href="#settingsmanager" title="Permalink to this headline">¶</a></h2>
-<p>(libraries.SettingsManager)</p>
-<p>The {SettingsManager} class in the {Cheetah.SettingsManager} module
-is a baseclass that provides facilities for managing application
-settings. It facilitates the use of user-supplied configuration
-files to fine tune an application. A setting is a key/value pair
-that an application or component (e.g., a filter, or your own
-servlets) looks up and treats as a configuration value to modify
-its (the component’s) behaviour.</p>
-<p>SettingsManager is designed to:</p>
-<ul class="simple">
-<li>work well with nested settings dictionaries of any depth</li>
-<li>read/write {.ini style config files} (or strings)</li>
-<li>read settings from Python source files (or strings) so that
-complex Python objects can be stored in the application’s settings
-dictionary. For example, you might want to store references to
-various classes that are used by the application, and plugins to
-the application might want to substitute one class for another.</li>
-<li>allow sections in {.ini config files} to be extended by settings
-in Python src files. If a section contains a setting like
-“{importSettings=mySettings.py}”, {SettingsManager} will merge all
-the settings defined in “{mySettings.py}” with the settings for
-that section that are defined in the {.ini config file}.</li>
-<li>maintain the case of setting names, unlike the ConfigParser
-module</li>
-</ul>
-<p>Cheetah uses {SettingsManager} to manage its configuration
-settings. {SettingsManager} might also be useful in your own
-applications. See the source code and docstrings in the file
-{src/SettingsManager.py} for more information.</p>
-</div>
-<div class="section" id="templates">
-<h2>Templates<a class="headerlink" href="#templates" title="Permalink to this headline">¶</a></h2>
-<p>(libraries.templates)</p>
-<p>Package {Cheetah.Templates} contains stock templates that you can
-either use as is, or extend by using the {#def} directive to
-redefine specific { blocks}. Currently, the only template in here
-is SkeletonPage, which is described in detail below in section
-libraries.templates.skeletonPage. (Contributed by Tavis Rudd.)</p>
-</div>
-<div class="section" id="tools">
-<h2>Tools<a class="headerlink" href="#tools" title="Permalink to this headline">¶</a></h2>
-<p>(libraries.Tools)</p>
-<p>Package {Cheetah.Tools} contains functions and classes contributed
-by third parties. Some are Cheetah-specific but others are generic
-and can be used standalone. None of them are imported by any other
-Cheetah component; you can delete the Tools/ directory and Cheetah
-will function fine.</p>
-<p>Some of the items in Tools/ are experimental and have been placed
-there just to see how useful they will be, and whether they attract
-enough users to make refining them worthwhile (the tools, not the
-users :).</p>
-<p>Nothing in Tools/ is guaranteed to be: (A) tested, (B) reliable,
-(C) immune from being deleted in a future Cheetah version, or (D)
-immune from backwards-incompatable changes. If you depend on
-something in Tools/ on a production system, consider making a copy
-of it outside the Cheetah/ directory so that this version won’t be
-lost when you upgrade Cheetah. Also, learn enough about Python and
-about the Tool so that you can maintain it and bugfix it if
-necessary.</p>
-<p>If anything in Tools/ is found to be necessary to Cheetah’s
-operation (i.e., if another Cheetah component starts importing it),
-it will be moved to the {Cheetah.Utils} package.</p>
-<p>Current Tools include:</p>
-<blockquote>
-<div><p>an ambitious class useful when iterating over records of data
-({#for} loops), displaying one pageful of records at a time (with
-previous/next links), and printing summary statistics about the
-records or the current page. See {MondoReportDoc.txt} in the same
-directory as the module. Some features are not implemented yet.
-{MondoReportTest.py} is a test suite (and it shows there are
-currently some errors in MondoReport, hmm). Contributed by Mike
-Orr.</p>
-<p>Nothing, but in a friendly way. Good for filling in for objects you
-want to hide. If {$form.f1} is a RecursiveNull object, then
-{$form.f1.anything[“you”].might(“use”)} will resolve to the empty
-string. You can also put a {RecursiveNull} instance at the end of
-the searchList to convert missing values to ‘’ rather than raising
-a {NotFound} error or having a (less efficient) errorCatcher handle
-it. Of course, maybe you prefer to get a {NotFound} error…
-Contributed by Ian Bicking.</p>
-<p>Provides navigational links to this page’s parents and children.
-The constructor takes a recursive list of (url,description) pairs
-representing a tree of hyperlinks to every page in the site (or
-section, or application…), and also a string containing the
-current URL. Two methods ‘menuList’ and ‘crumbs’ return
-output-ready HTML showing an indented menu (hierarchy tree) or
-crumbs list (Yahoo-style bar: home &gt; grandparent &gt; parent &gt;
-currentURL). Contributed by Ian Bicking.</p>
-</div></blockquote>
-</div>
-<div class="section" id="utils">
-<h2>Utils<a class="headerlink" href="#utils" title="Permalink to this headline">¶</a></h2>
-<p>(libraries.Utils)</p>
-<p>Package {Cheetah.Utils} contains non-Cheetah-specific functions and
-classes that are imported by other Cheetah components. Many of
-these utils can be used standalone in other applications too.</p>
-<p>Current Utils include:</p>
-<blockquote>
-<div><p>This is inherited by {Template} objects, and provides the method,
-{.cgiImport} method (section webware.cgiImport).</p>
-<p>A catch-all module for small functions.</p>
-<blockquote>
-<div><p>Raise ‘thing’ if it’s a subclass of Exception, otherwise return it.
-Useful when one argument does double duty as a default value or an
-exception to throw. Contribyted by Mike Orr.</p>
-<p>Verifies the dictionary does not contain any keys not listed in
-‘legalKeywords’. If it does, raise TypeError. Useful for checking
-the keyword arguments to a function. Contributed by Mike Orr.</p>
-</div></blockquote>
-<p>Not implemented yet, but will contain the {.uploadFile} method (or
-three methods) to “safely” copy a form-uploaded file to a local
-file, to a searchList variable, or return it. When finished, this
-will be inherited by {Template}, allowing all templates to do this.
-If you want this feature, read the docstring in the source and let
-us know on the mailing list what you’d like this method to do.
-Contributed by Mike Orr.</p>
-<p>Functions to verify the type of a user-supplied function argument.
-Contributed by Mike Orr.</p>
-</div></blockquote>
-<div class="section" id="cheetah-templates-skeletonpage">
-<h3>Cheetah.Templates.SkeletonPage<a class="headerlink" href="#cheetah-templates-skeletonpage" title="Permalink to this headline">¶</a></h3>
-<p>(libraries.templates.skeletonPage)</p>
-<p>A stock template class that may be useful for web developers is
-defined in the {Cheetah.Templates.SkeletonPage} module. The
-{SkeletonPage} template class is generated from the following
-Cheetah source code:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>##doc-module: A Skeleton HTML page template, that provides basic structure and utility methods.
-################################################################################
-#extends Cheetah.Templates._SkeletonPage
-#implements respond
-################################################################################
-#cache id=&#39;header&#39;
-$docType
-$htmlTag
-&lt;!-- This document was autogenerated by Cheetah (http://cheetahtemplate.org/).
-Do not edit it directly!
-
-Copyright $currentYr - $siteCopyrightName - All Rights Reserved.
-Feel free to copy any javascript or html you like on this site,
-provided you remove all links and/or references to $siteDomainName
-However, please do not copy any content or images without permission.
-
-$siteCredits
-
---&gt;
-
-
-#block writeHeadTag
-&lt;head&gt;
-&lt;title&gt;$title&lt;/title&gt;
-$metaTags
-$stylesheetTags
-$javascriptTags
-&lt;/head&gt;
-#end block writeHeadTag
-
-#end cache header
-#################
-
-$bodyTag
-
-#block writeBody
-This skeleton page has no flesh. Its body needs to be implemented.
-#end block writeBody
-
-&lt;/body&gt;
-&lt;/html&gt;
-</pre></div>
-</div>
-<p>You can redefine any of the blocks defined in this template by
-writing a new template that {#extends} SkeletonPage. (As you
-remember, using {#extends} makes your template implement the
-{.writeBody()} method instead of {.respond()} - which happens to be
-the same method SkeletonPage expects the page content to be (note
-the writeBody block in SkeletonPage).)</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#def bodyContents</span>
-<span class="n">Here</span><span class="s1">&#39;s my new body. I&#39;</span><span class="n">ve</span> <span class="n">got</span> <span class="n">some</span> <span class="n">flesh</span> <span class="n">on</span> <span class="n">my</span> <span class="n">bones</span> <span class="n">now</span><span class="o">.</span>
-<span class="c1">#end def bodyContents</span>
-</pre></div>
-</div>
-<p>All of the $placeholders used in the {SkeletonPage} template
-definition are attributes or methods of the {SkeletonPage} class.
-You can reimplement them as you wish in your subclass. Please read
-the source code of the file {src/Templates/_SkeletonPage.py}
-before doing so.</p>
-<p>You’ll need to understand how to use the following methods of the
-{SkeletonPage} class: {$metaTags()}, {$stylesheetTags()},
-{$javascriptTags()}, and {$bodyTag()}. They take the data you
-define in various attributes and renders them into HTML tags.</p>
-<ul class="simple">
-<li>{ metaTags()} - Returns a formatted vesion of the
-self._metaTags dictionary, using the formatMetaTags function from
-{_SkeletonPage.py}.</li>
-<li>{ stylesheetTags()} - Returns a formatted version of the
-{self._stylesheetLibs} and {self._stylesheets} dictionaries. The
-keys in {self._stylesheets} must be listed in the order that they
-should appear in the list {self._stylesheetsOrder}, to ensure that
-the style rules are defined in the correct order.</li>
-<li>{ javascriptTags()} - Returns a formatted version of the
-{self._javascriptTags} and {self._javascriptLibs} dictionaries.
-Each value in {self._javascriptTags} should be a either a code
-string to include, or a list containing the JavaScript version
-number and the code string. The keys can be anything. The same
-applies for {self._javascriptLibs}, but the string should be the
-SRC filename rather than a code string.</li>
-<li>{ bodyTag()} - Returns an HTML body tag from the entries in the
-dict {self._bodyTagAttribs}.</li>
-</ul>
-<p>The class also provides some convenience methods that can be used
-as $placeholders in your template definitions:</p>
-<ul class="simple">
-<li>{ imgTag(self, src, alt=’‘, width=None, height=None, border=0)}
-- Dynamically generate an image tag. Cheetah will try to convert
-the “{src}” argument to a WebKit serverSidePath relative to the
-servlet’s location. If width and height aren’t specified they are
-calculated using PIL or ImageMagick if either of these tools are
-available. If all your images are stored in a certain directory you
-can reimplement this method to append that directory’s path to the
-“{src}” argument. Doing so would also insulate your template
-definitions from changes in your directory structure.</li>
-</ul>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="editors.html" title="Visual Editors"
- >next</a> |</li>
- <li class="right" >
- <a href="nonHtml.html" title="Non-HTML Output"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/links.html b/docs/html/users_guide/links.html
deleted file mode 100644
index e3a4ec9..0000000
--- a/docs/html/users_guide/links.html
+++ /dev/null
@@ -1,281 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Useful Web Links &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Examples" href="examples.html" />
- <link rel="prev" title="Visual Editors" href="editors.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="examples.html" title="Examples"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="editors.html" title="Visual Editors"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Useful Web Links</a><ul>
-<li><a class="reference internal" href="#cheetah-links">Cheetah Links</a></li>
-<li><a class="reference internal" href="#third-party-cheetah-stuff">Third-party Cheetah Stuff</a></li>
-<li><a class="reference internal" href="#webware-links">Webware Links</a></li>
-<li><a class="reference internal" href="#python-links">Python Links</a></li>
-<li><a class="reference internal" href="#other-useful-links">Other Useful Links</a><ul>
-<li><a class="reference internal" href="#python-database-modules-and-open-source-databases">Python Database Modules and Open Source Databases</a></li>
-<li><a class="reference internal" href="#other-template-systems">Other Template Systems</a></li>
-<li><a class="reference internal" href="#other-internet-development-frameworks">Other Internet development frameworks</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="editors.html"
- title="previous chapter">Visual Editors</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="examples.html"
- title="next chapter">Examples</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/links.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="useful-web-links">
-<h1>Useful Web Links<a class="headerlink" href="#useful-web-links" title="Permalink to this headline">¶</a></h1>
-<p>(links)</p>
-<p>See the wiki for more links. (The wiki is also updated more often
-than this chapter is.)</p>
-<div class="section" id="cheetah-links">
-<h2>Cheetah Links<a class="headerlink" href="#cheetah-links" title="Permalink to this headline">¶</a></h2>
-<p>(links.cheetah)</p>
-<dl class="docutils">
-<dt>Home Page, issue tracker</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="https://github.com/CheetahTemplate3/cheetah3">https://github.com/CheetahTemplate3/cheetah3</a></li>
-</ul>
-</dd>
-<dt>On-line Documentation</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://cheetahtemplate.org/">http://cheetahtemplate.org/</a></li>
-</ul>
-</dd>
-</dl>
-<p>Questions can also be asked and answered on <a class="reference external" href="https://stackoverflow.com/questions/tagged/cheetah">StackOverflow</a>.</p>
-</div>
-<div class="section" id="third-party-cheetah-stuff">
-<h2>Third-party Cheetah Stuff<a class="headerlink" href="#third-party-cheetah-stuff" title="Permalink to this headline">¶</a></h2>
-<p>(links.thirdParty)</p>
-<ul class="simple">
-<li>Steve Howell has written a photo viewer using Python.
-<a class="reference external" href="http://mountainwebtools.com/PicViewer/install.htm">http://mountainwebtools.com/PicViewer/install.htm</a></li>
-</ul>
-</div>
-<div class="section" id="webware-links">
-<h2>Webware Links<a class="headerlink" href="#webware-links" title="Permalink to this headline">¶</a></h2>
-<p>(links.webware)</p>
-<dl class="docutils">
-<dt>Home Page</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="https://cito.github.io/w4py/">https://cito.github.io/w4py/</a></li>
-</ul>
-</dd>
-<dt>On-line Documentation</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="https://webware.sf.net/Webware/Docs/">https://webware.sf.net/Webware/Docs/</a></li>
-</ul>
-</dd>
-<dt>SourceForge Project Page</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="https://sf.net/projects/webware/">https://sf.net/projects/webware/</a></li>
-</ul>
-</dd>
-<dt>Mailing List Subscription Page</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://lists.sourceforge.net/lists/listinfo/webware-discuss">http://lists.sourceforge.net/lists/listinfo/webware-discuss</a></li>
-</ul>
-</dd>
-</dl>
-</div>
-<div class="section" id="python-links">
-<h2>Python Links<a class="headerlink" href="#python-links" title="Permalink to this headline">¶</a></h2>
-<p>(links.python)</p>
-<dl class="docutils">
-<dt>Home Page</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://www.python.org/">http://www.python.org/</a></li>
-</ul>
-</dd>
-<dt>On-line Documentation</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://www.python.org/doc/">http://www.python.org/doc/</a></li>
-</ul>
-</dd>
-<dt>Python Cookbook</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="https://code.activestate.com/recipes/langs/python/">https://code.activestate.com/recipes/langs/python/</a></li>
-</ul>
-</dd>
-</dl>
-</div>
-<div class="section" id="other-useful-links">
-<h2>Other Useful Links<a class="headerlink" href="#other-useful-links" title="Permalink to this headline">¶</a></h2>
-<p>(links.other)</p>
-<div class="section" id="python-database-modules-and-open-source-databases">
-<h3>Python Database Modules and Open Source Databases<a class="headerlink" href="#python-database-modules-and-open-source-databases" title="Permalink to this headline">¶</a></h3>
-<p>(links.database)</p>
-<dl class="docutils">
-<dt>Python Database Topic Guide</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://python.org/topics/database/">http://python.org/topics/database/</a></li>
-</ul>
-</dd>
-<dt>PostgreSQL Database</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://www.postgresql.org/index.html">http://www.postgresql.org/index.html</a></li>
-</ul>
-</dd>
-<dt>MySQL Database</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://www.mysql.com/">http://www.mysql.com/</a></li>
-</ul>
-</dd>
-<dt>A comparison of PostgreSQL and MySQL</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://phpbuilder.com/columns/tim20001112.php3">http://phpbuilder.com/columns/tim20001112.php3</a></li>
-</ul>
-</dd>
-</dl>
-</div>
-<div class="section" id="other-template-systems">
-<h3>Other Template Systems<a class="headerlink" href="#other-template-systems" title="Permalink to this headline">¶</a></h3>
-<p>(links.other.templateSystems)</p>
-<dl class="docutils">
-<dt>Python Wiki</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="https://wiki.python.org/moin/Templating">https://wiki.python.org/moin/Templating</a></li>
-</ul>
-</dd>
-</dl>
-</div>
-<div class="section" id="other-internet-development-frameworks">
-<h3>Other Internet development frameworks<a class="headerlink" href="#other-internet-development-frameworks" title="Permalink to this headline">¶</a></h3>
-<p>(links.internet)</p>
-<dl class="docutils">
-<dt>ZOPE (Z Object Publishing Environment)</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://zope.org/">http://zope.org/</a></li>
-</ul>
-</dd>
-<dt>Server Side Java</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://jakarta.apache.org/">http://jakarta.apache.org/</a></li>
-</ul>
-</dd>
-<dt>PHP</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://php.net/">http://php.net/</a></li>
-</ul>
-</dd>
-<dt>IBM Websphere</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://www.ibm.com/websphere/">http://www.ibm.com/websphere/</a></li>
-</ul>
-</dd>
-<dt>Coldfusion and Spectra</dt>
-<dd><ul class="first last simple">
-<li><a class="reference external" href="http://www.macromedia.com/">http://www.macromedia.com/</a></li>
-</ul>
-</dd>
-</dl>
-</div>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="examples.html" title="Examples"
- >next</a> |</li>
- <li class="right" >
- <a href="editors.html" title="Visual Editors"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/nonHtml.html b/docs/html/users_guide/nonHtml.html
deleted file mode 100644
index e545822..0000000
--- a/docs/html/users_guide/nonHtml.html
+++ /dev/null
@@ -1,133 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Non-HTML Output &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Batteries included: templates and other libraries" href="libraries.html" />
- <link rel="prev" title="non-Webware HTML output" href="otherHtml.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="libraries.html" title="Batteries included: templates and other libraries"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="otherHtml.html" title="non-Webware HTML output"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Non-HTML Output</a><ul>
-<li><a class="reference internal" href="#python-source-code">Python source code</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="otherHtml.html"
- title="previous chapter">non-Webware HTML output</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="libraries.html"
- title="next chapter">Batteries included: templates and other libraries</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/nonHtml.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="non-html-output">
-<h1>Non-HTML Output<a class="headerlink" href="#non-html-output" title="Permalink to this headline">¶</a></h1>
-<p>(nonHTML)</p>
-<p>Cheetah can also output any other text format besides HTML.</p>
-<div class="section" id="python-source-code">
-<h2>Python source code<a class="headerlink" href="#python-source-code" title="Permalink to this headline">¶</a></h2>
-<p>(nonHTML.python)</p>
-<p>To be written. We’re in the middle of working on an autoindenter to
-make it easier to encode Python indentation in a Cheetah template.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="libraries.html" title="Batteries included: templates and other libraries"
- >next</a> |</li>
- <li class="right" >
- <a href="otherHtml.html" title="non-Webware HTML output"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/otherHtml.html b/docs/html/users_guide/otherHtml.html
deleted file mode 100644
index 36cd2d7..0000000
--- a/docs/html/users_guide/otherHtml.html
+++ /dev/null
@@ -1,205 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>non-Webware HTML output &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Non-HTML Output" href="nonHtml.html" />
- <link rel="prev" title="Using Cheetah with Webware" href="webware.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="nonHtml.html" title="Non-HTML Output"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="webware.html" title="Using Cheetah with Webware"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">non-Webware HTML output</a><ul>
-<li><a class="reference internal" href="#static-html-pages">Static HTML Pages</a></li>
-<li><a class="reference internal" href="#cgi-scripts">CGI scripts</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="webware.html"
- title="previous chapter">Using Cheetah with Webware</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="nonHtml.html"
- title="next chapter">Non-HTML Output</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/otherHtml.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="non-webware-html-output">
-<h1>non-Webware HTML output<a class="headerlink" href="#non-webware-html-output" title="Permalink to this headline">¶</a></h1>
-<p>(otherHTML)</p>
-<p>Cheetah can be used with all types of HTML output, not just with
-Webware.</p>
-<div class="section" id="static-html-pages">
-<h2>Static HTML Pages<a class="headerlink" href="#static-html-pages" title="Permalink to this headline">¶</a></h2>
-<p>(otherHTML.static)</p>
-<p>Some sites like Linux Gazette (<a class="reference external" href="http://www.linuxgazette.com/">http://www.linuxgazette.com/</a>)
-require completely static pages because they are mirrored on
-servers running completely different software from the main site.
-Even dynamic sites may have one or two pages that are static for
-whatever reason, and the site administrator may wish to generate
-those pages from Cheetah templates.</p>
-<p>There’s nothing special here. Just create your templates as usual.
-Then compile and fill them whenever the template definition
-changes, and fill them again whenever the placeholder values
-change. You may need an extra step to copy the .html files to their
-final location. A Makefile (chapter tips.Makefile) can help
-encapsulate these steps.</p>
-</div>
-<div class="section" id="cgi-scripts">
-<h2>CGI scripts<a class="headerlink" href="#cgi-scripts" title="Permalink to this headline">¶</a></h2>
-<p>(otherHTML)</p>
-<p>Unlike Webware servlets, which don’t have to worry about the HTTP
-headers, CGI scripts must emit their own headers. To make a
-template CGI aware, add this at the top:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#extends Cheetah.Tools.CGITemplate
-#implements respond
-$cgiHeaders#slurp
-</pre></div>
-</div>
-<p>Or if your template is inheriting from a Python class:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#extends MyPythonClass
-#implements respond
-$cgiHeaders#slurp
-</pre></div>
-</div>
-<p>A sample Python class:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">Cheetah.Tools</span> <span class="k">import</span> <span class="n">CGITemplate</span>
-<span class="k">class</span> <span class="nc">MyPythonClass</span><span class="p">(</span><span class="n">CGITemplate</span><span class="p">):</span>
- <span class="k">def</span> <span class="nf">cgiHeadersHook</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
- <span class="k">return</span> <span class="s2">&quot;Content-Type: text/html; charset=koi8-r</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</pre></div>
-</div>
-<p>Compile the template as usual, put the .py template module in your
-cgi-bin directory and give it execute permission. {.cgiHeaders()}
-is a “smart” method that outputs the headers if the module is
-called as a CGI script, or outputs nothing if not. Being
-“called as a CGI script” means the environmental variable
-{REQUEST_METHOD} exists and {self.isControlledByWebKit} is false.
-If you don’t agree with that definition, override {.isCgi()} and
-provide your own.</p>
-<p>The default header is a simple <code class="docutils literal"><span class="pre">Content-type:</span> <span class="pre">text/html\n\n</span></code>,
-which works with all CGI scripts. If you want to customize the
-headers (e.g., to specify the character set), override
-{.cgiHeadersHook()} and return a string containing all the headers.
-Don’t forget to include the extra newline at the end of the string:
-the HTTP protocol requires this empty line to mark the end of the
-headers.</p>
-<p>To read GET/POST variables from form input, use the {.webInput()}
-method (section webware.webInput), or extract them yourself using
-Python’s {cgi} module or your own function. Although {.webInput()}
-was originally written for Webware servlets, it now handles CGI
-scripts too. There are a couple behavioral differences between CGI
-scripts and Webware servlets regarding input variables:</p>
-<ol class="arabic simple">
-<li>CGI scripts, using Python’s {cgi} module, believe
-{REQUEST_METHOD} and recognize { either} GET variables { or} POST
-variables, not both. Webware servlets, doing additional processing,
-ignore {REQUEST_METHOD} and recognize both, like PHP does.</li>
-<li>Webware servlets can ask for cookies or session variables
-instead of GET/POST variables, by passing the argument {src=’c’} or
-{src=’s’}. CGI scripts get a {RuntimeError} if they try to do
-this.</li>
-</ol>
-<p>If you keep your .tmpl files in the same directory as your CGI
-scripts, make sure they don’t have execute permission. Apache at
-least refuses to serve files in a {ScriptAlias} directory that
-don’t have execute permission.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="nonHtml.html" title="Non-HTML Output"
- >next</a> |</li>
- <li class="right" >
- <a href="webware.html" title="Using Cheetah with Webware"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/output.html b/docs/html/users_guide/output.html
deleted file mode 100644
index ed8fb08..0000000
--- a/docs/html/users_guide/output.html
+++ /dev/null
@@ -1,501 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Generating, Caching and Filtering Output &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Import, Inheritance, Declaration and Assignment" href="inheritanceEtc.html" />
- <link rel="prev" title="Comments" href="comments.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="inheritanceEtc.html" title="Import, Inheritance, Declaration and Assignment"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="comments.html" title="Comments"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Generating, Caching and Filtering Output</a><ul>
-<li><a class="reference internal" href="#output-from-complex-expressions-echo">Output from complex expressions: #echo</a></li>
-<li><a class="reference internal" href="#executing-expressions-without-output-silent">Executing expressions without output: #silent</a></li>
-<li><a class="reference internal" href="#one-line-if">One-line #if</a></li>
-<li><a class="reference internal" href="#caching-output">Caching Output</a><ul>
-<li><a class="reference internal" href="#caching-individual-placeholders">Caching individual placeholders</a></li>
-<li><a class="reference internal" href="#caching-entire-regions">Caching entire regions</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#raw">#raw</a></li>
-<li><a class="reference internal" href="#include">#include</a></li>
-<li><a class="reference internal" href="#slurp">#slurp</a></li>
-<li><a class="reference internal" href="#indent">#indent</a></li>
-<li><a class="reference internal" href="#ouput-filtering-and-filter">Ouput Filtering and #filter</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="comments.html"
- title="previous chapter">Comments</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="inheritanceEtc.html"
- title="next chapter">Import, Inheritance, Declaration and Assignment</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/output.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="generating-caching-and-filtering-output">
-<h1>Generating, Caching and Filtering Output<a class="headerlink" href="#generating-caching-and-filtering-output" title="Permalink to this headline">¶</a></h1>
-<p>(output)</p>
-<div class="section" id="output-from-complex-expressions-echo">
-<h2>Output from complex expressions: #echo<a class="headerlink" href="#output-from-complex-expressions-echo" title="Permalink to this headline">¶</a></h2>
-<p>(output.echo)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#echo EXPR</span>
-</pre></div>
-</div>
-<p>The {#echo} directive is used to echo the output from expressions
-that can’t be written as simple $placeholders.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Here</span> <span class="ow">is</span> <span class="n">my</span> <span class="c1">#echo &#39;, &#39;.join([&#39;silly&#39;]*5) # example</span>
-</pre></div>
-</div>
-<p>This produces:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Here</span> <span class="ow">is</span> <span class="n">my</span> <span class="n">silly</span><span class="p">,</span> <span class="n">silly</span><span class="p">,</span> <span class="n">silly</span><span class="p">,</span> <span class="n">silly</span><span class="p">,</span> <span class="n">silly</span> <span class="n">example</span><span class="o">.</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="executing-expressions-without-output-silent">
-<h2>Executing expressions without output: #silent<a class="headerlink" href="#executing-expressions-without-output-silent" title="Permalink to this headline">¶</a></h2>
-<p>(output.silent)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#silent EXPR</span>
-</pre></div>
-</div>
-<p>{#silent} is the opposite of {#echo}. It executes an expression but
-discards the output.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#silent $myList.reverse()</span>
-<span class="c1">#silent $myList.sort()</span>
-<span class="n">Here</span> <span class="ow">is</span> <span class="c1">#silent $covertOperation() # nothing</span>
-</pre></div>
-</div>
-<p>If your template requires some Python code to be executed at the
-beginning; (e.g., to calculate placeholder values, access a
-database, etc), you can put it in a “doEverything” method you
-inherit, and call this method using {#silent} at the top of the
-template.</p>
-</div>
-<div class="section" id="one-line-if">
-<h2>One-line #if<a class="headerlink" href="#one-line-if" title="Permalink to this headline">¶</a></h2>
-<p>(output.oneLineIf)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#if EXPR1 then EXPR2 else EXPR3#</span>
-</pre></div>
-</div>
-<p>The {#if} flow-control directive (section flowControl.if) has a
-one-line counterpart akin to Perl’s and C’s {?:} operator. If
-{EXPR1} is true, it evaluates {EXPR2} and outputs the result (just
-like {#echo EXPR2#}). Otherwise it evaluates {EXPR3} and outputs
-that result. This directive is short-circuiting, meaning the
-expression that isn’t needed isn’t evaluated.</p>
-<p>You MUST include both ‘then’ and ‘else’. If this doesn’t work for
-you or you don’t like the style use multi-line {#if} directives
-(section flowControl.if).</p>
-<p>The trailing {#} is the normal end-of-directive character. As usual
-it may be omitted if there’s nothing after the directive on the
-same line.</p>
-</div>
-<div class="section" id="caching-output">
-<h2>Caching Output<a class="headerlink" href="#caching-output" title="Permalink to this headline">¶</a></h2>
-<p>(output.caching)</p>
-<div class="section" id="caching-individual-placeholders">
-<h3>Caching individual placeholders<a class="headerlink" href="#caching-individual-placeholders" title="Permalink to this headline">¶</a></h3>
-<p>(output.caching.placeholders)</p>
-<p>By default, the values of each $placeholder is retrieved and
-interpolated for every request. However, it’s possible to cache the
-values of individual placeholders if they don’t change very often,
-in order to speed up the template filling.</p>
-<p>To cache the value of a single {$placeholder}, add an asterisk
-after the $; e.g., {$*var}. The first time the template is filled,
-{$var} is looked up. Then whenever the template is filled again,
-the cached value is used instead of doing another lookup.</p>
-<p>The {$*} format caches “forever”; that is, as long as the template
-instance remains in memory. It’s also possible to cache for a
-certain time period using the form {$*&lt;interval&gt;*variable}, where
-{&lt;interval&gt;} is the interval. The time interval can be specified in
-seconds (5s), minutes (15m), hours (3h), days (2d) or weeks (1.5w).
-The default is minutes.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>&lt;HTML&gt;
-&lt;HEAD&gt;&lt;TITLE&gt;$title&lt;/TITLE&gt;&lt;/HEAD&gt;
-&lt;BODY&gt;
-
-$var ${var} ## dynamic - will be reinterpolated for each request
-$*var2 $*{var2} ## static - will be interpolated only once at start-up
-$*5*var3 $*5*{var3} ## timed refresh - will be updated every five minutes.
-
-&lt;/BODY&gt;
-&lt;/HTML&gt;
-</pre></div>
-</div>
-<p>Note that “every five minutes” in the example really means every
-five minutes: the variable is looked up again when the time limit
-is reached, whether the template is being filled that frequently or
-not. Keep this in mind when setting refresh times for CPU-intensive
-or I/O intensive operations.</p>
-<p>If you’re using the long placeholder syntax, <code class="docutils literal"><span class="pre">${}</span></code>, the braces go
-only around the placeholder name: <code class="docutils literal"><span class="pre">$*.5h*{var.func('arg')}</span></code>.</p>
-<p>Sometimes it’s preferable to explicitly invalidate a cached item
-whenever you say so rather than at certain time intervals. You
-can’t do this with individual placeholders, but you can do it with
-cached regions, which will be described next.</p>
-</div>
-<div class="section" id="caching-entire-regions">
-<h3>Caching entire regions<a class="headerlink" href="#caching-entire-regions" title="Permalink to this headline">¶</a></h3>
-<p>(output.caching.regions)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#cache [id=EXPR] [timer=EXPR] [test=EXPR]</span>
-<span class="c1">#end cache</span>
-</pre></div>
-</div>
-<p>The {#cache} directive is used to cache a region of content in a
-template. The region is cached as a single unit, after placeholders
-and directives inside the region have been evaluated. If there are
-any {$*&lt;interval&gt;*var} placholders inside the cache region, they
-are refreshed only when { both} the cache region { and} the
-placeholder are simultaneously due for a refresh.</p>
-<p>Caching regions offers more flexibility than caching individual
-placeholders. You can specify the refresh interval using a
-placeholder or expression, or refresh according to other criteria
-rather than a certain time interval.</p>
-<p>{#cache} without arguments caches the region statically, the same
-way as {$*var}. The region will not be automatically refreshed.</p>
-<p>To refresh the region at an interval, use the {timer=EXPRESSION}
-argument, equivalent to {$*&lt;interval&gt;*}. The expression should
-evaluate to a number or string that is a valid interval (e.g., 0.5,
-‘3m’, etc).</p>
-<p>To refresh whenever an expression is true, use {test=EXPRESSION}.
-The expression can be a method/function returning true or false, a
-boolean placeholder, several of these joined by {and} and/or {or},
-or any other expression. If the expression contains spaces, it’s
-easier to read if you enclose it in {()}, but this is not
-required.</p>
-<p>To refresh whenever you say so, use {id=EXPRESSION}. Your program
-can then call {.refreshCache(ID)} whenever it wishes. This is
-useful if the cache depends on some external condition that changes
-infrequently but has just changed now.</p>
-<p>You can combine arguments by separating them with commas. For
-instance, you can specify both {id=} and {interval=}, or {id=} and
-{test=}. (You can also combine interval and test although it’s not
-very useful.) However, repeating an argument is undefined.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#cache
-This is a static cache. It will not be refreshed.
-$a $b $c
-#end cache
-
-#cache timer=&#39;30m&#39;, id=&#39;cache1&#39;
-#for $cust in $customers
-$cust.name:
-$cust.street - $cust.city
-#end for
-#end cache
-
-#cache id=&#39;sidebar&#39;, test=$isDBUpdated
-... left sidebar HTML ...
-#end cache
-
-#cache id=&#39;sidebar2&#39;, test=($isDBUpdated or $someOtherCondition)
-... right sidebar HTML ...
-#end cache
-</pre></div>
-</div>
-<p>The {#cache} directive cannot be nested.</p>
-<p>We are planning to add a {‘varyBy’} keyword argument in the future
-that will allow a separate cache instances to be created for a
-variety of conditions, such as different query string parameters or
-browser types. This is inspired by ASP.net’s varyByParam and
-varyByBrowser output caching keywords.</p>
-</div>
-</div>
-<div class="section" id="raw">
-<h2>#raw<a class="headerlink" href="#raw" title="Permalink to this headline">¶</a></h2>
-<p>(output.raw)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#raw</span>
-<span class="c1">#end raw</span>
-</pre></div>
-</div>
-<p>Any section of a template definition that is inside a {#raw …
-#end raw} tag pair will be printed verbatim without any parsing of
-$placeholders or other directives. This can be very useful for
-debugging, or for Cheetah examples and tutorials.</p>
-<p>{#raw} is conceptually similar to HTML’s {&lt;PRE&gt;} tag and LaTeX’s {
-verbatim{}} tag, but unlike those tags, {#raw} does not cause the
-body to appear in a special font or typeface. It can’t, because
-Cheetah doesn’t know what a font is.</p>
-</div>
-<div class="section" id="include">
-<h2>#include<a class="headerlink" href="#include" title="Permalink to this headline">¶</a></h2>
-<p>(output.include)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#include [raw] FILENAME_EXPR</span>
-<span class="c1">#include [raw] source=STRING_EXPR</span>
-</pre></div>
-</div>
-<p>The {#include} directive is used to include text from outside the
-template definition. The text can come from an external file or
-from a {$placeholder} variable. When working with external files,
-Cheetah will monitor for changes to the included file and update as
-necessary.</p>
-<p>This example demonstrates its use with external files:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#include &quot;includeFileName.txt&quot;</span>
-</pre></div>
-</div>
-<p>The content of “includeFileName.txt” will be parsed for Cheetah
-syntax.</p>
-<p>And this example demonstrates use with {$placeholder} variables:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#include source=$myParseText</span>
-</pre></div>
-</div>
-<p>The value of {$myParseText} will be parsed for Cheetah syntax. This
-is not the same as simply placing the $placeholder tag
-“{$myParseText}” in the template definition. In the latter case,
-the value of $myParseText would not be parsed.</p>
-<p>By default, included text will be parsed for Cheetah tags. The
-argument “{raw}” can be used to suppress the parsing.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#include raw &quot;includeFileName.txt&quot;</span>
-<span class="c1">#include raw source=$myParseText</span>
-</pre></div>
-</div>
-<p>Cheetah wraps each chunk of {#include} text inside a nested
-{Template} object. Each nested template has a copy of the main
-template’s searchList. However, {#set} variables are visible across
-includes only if the defined using the {#set global} keyword.</p>
-<p>All directives must be balanced in the include file. That is, if
-you start a {#for} or {#if} block inside the include, you must end
-it in the same include. (This is unlike PHP, which allows
-unbalanced constructs in include files.)</p>
-</div>
-<div class="section" id="slurp">
-<h2>#slurp<a class="headerlink" href="#slurp" title="Permalink to this headline">¶</a></h2>
-<p>(output.slurp)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#slurp</span>
-</pre></div>
-</div>
-<p>The {#slurp} directive eats up the trailing newline on the line it
-appears in, joining the following line onto the current line.</p>
-<p>It is particularly useful in {#for} loops:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#for $i in range(5)
-$i #slurp
-#end for
-</pre></div>
-</div>
-<p>outputs:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">0</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">3</span> <span class="mi">4</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="indent">
-<h2>#indent<a class="headerlink" href="#indent" title="Permalink to this headline">¶</a></h2>
-<p>(output.indent)</p>
-<p>This directive is not implemented yet. When/if it’s completed, it
-will allow you to</p>
-<ol class="arabic simple">
-<li>indent your template definition in a natural way (e.g., the
-bodies of {#if} blocks) without affecting the output</li>
-<li>add indentation to output lines without encoding it literally in
-the template definition. This will make it easier to use Cheetah to
-produce indented source code programmatically (e.g., Java or Python
-source code).</li>
-</ol>
-<p>There is some experimental code that recognizes the {#indent}
-directive with options, but the options are purposely undocumented
-at this time. So pretend it doesn’t exist. If you have a use for
-this feature and would like to see it implemented sooner rather
-than later, let us know on the mailing list.</p>
-<p>The latest specification for the future {#indent} directive is in
-the TODO file in the Cheetah source distribution.</p>
-</div>
-<div class="section" id="ouput-filtering-and-filter">
-<h2>Ouput Filtering and #filter<a class="headerlink" href="#ouput-filtering-and-filter" title="Permalink to this headline">¶</a></h2>
-<p>(output.filter)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#filter FILTER_CLASS_NAME</span>
-<span class="c1">#filter $PLACEHOLDER_TO_A_FILTER_INSTANCE</span>
-<span class="c1">#filter None</span>
-</pre></div>
-</div>
-<p>Output from $placeholders is passed through an ouput filter. The
-default filter merely returns a string representation of the
-placeholder value, unless the value is {None}, in which case the
-filter returns an empty string. Only top-level placeholders invoke
-the filter; placeholders inside expressions do not.</p>
-<p>Certain filters take optional arguments to modify their behaviour.
-To pass arguments, use the long placeholder syntax and precede each
-filter argument by a comma. By convention, filter arguments don’t
-take a {$} prefix, to avoid clutter in the placeholder tag which
-already has plenty of dollar signs. For instance, the MaxLen filter
-takes an argument ‘maxlen’:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>${placeholderName, maxlen=20}
-${functionCall($functionArg), maxlen=$myMaxLen}
-</pre></div>
-</div>
-<p>To change the output filter, use the {‘filter’} keyword to the
-{Template} class constructor, or the {#filter} directive at runtime
-(details below). You may use {#filter} as often as you wish to
-switch between several filters, if certain {$placeholders} need one
-filter and other {$placeholders} need another.</p>
-<p>The standard filters are in the module {Cheetah.Filters}. Cheetah
-currently provides:</p>
-<blockquote>
-<div><p>The default filter, which converts None to ‘’ and everything else
-to {str(whateverItIs)}. This is the base class for all other
-filters, and the minimum behaviour for all filters distributed with
-Cheetah.</p>
-<p>Same.</p>
-<p>Same, but truncate the value if it’s longer than a certain length.
-Use the ‘maxlen’ filter argument to specify the length, as in the
-examples above. If you don’t specify ‘maxlen’, the value will not
-be truncated.</p>
-<p>Output a “pageful” of a long string. After the page, output HTML
-hyperlinks to the previous and next pages. This filter uses several
-filter arguments and environmental variables, which have not been
-documented yet.</p>
-<p>Same as default, but convert HTML-sensitive characters
-(‘<span class="math">$<$</span>’, ‘&amp;’, ‘<span class="math">$>$</span>’) to HTML entities so that the
-browser will display them literally rather than interpreting them
-as HTML tags. This is useful with database values or user input
-that may contain sensitive characters. But if your values contain
-embedded HTML tags you want to preserve, you do not want this
-filter.</p>
-<p>The filter argument ‘also’ may be used to specify additional
-characters to escape. For instance, say you want to ensure a value
-displays all on one line. Escape all spaces in the value with
-‘&amp;nbsp’, the non-breaking space:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>${$country, also=&#39; &#39;}}
-</pre></div>
-</div>
-</div></blockquote>
-<p>To switch filters using a class object, pass the class using the {
-filter} argument to the Template constructor, or via a placeholder
-to the {#filter} directive: {#filter $myFilterClass}. The class
-must be a subclass of {Cheetah.Filters.Filter}. When passing a
-class object, the value of { filtersLib} does not matter, and it
-does not matter where the class was defined.</p>
-<p>To switch filters by name, pass the name of the class as a string
-using the { filter} argument to the Template constructor, or as a
-bare word (without quotes) to the {#filter} directive: {#filter
-TheFilter}. The class will be looked up in the { filtersLib}.</p>
-<p>The filtersLib is a module containing filter classes, by default
-{Cheetah.Filters}. All classes in the module that are subclasses of
-{Cheetah.Filters.Filter} are considered filters. If your filters
-are in another module, pass the module object as the { filtersLib}
-argument to the Template constructor.</p>
-<p>Writing a custom filter is easy: just override the {.filter}
-method.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span> <span class="c1"># Returns a string.</span>
-</pre></div>
-</div>
-<p>Return the { string} that should be output for ‘val’. ‘val’ may be
-any type. Most filters return `’ for {None}. Cheetah passes one
-keyword argument: <code class="docutils literal"><span class="pre">kw['rawExpr']</span></code> is the placeholder name as it
-appears in the template definition, including all subscripts and
-arguments. If you use the long placeholder syntax, any options you
-pass appear as keyword arguments. Again, the return value must be a
-string.</p>
-<p>You can always switch back to the default filter this way: {#filter
-None}. This is easy to remember because “no filter” means the
-default filter, and because None happens to be the only object the
-default filter treats specially.</p>
-<p>We are considering additional filters; see
-<a class="reference external" href="http://webware.colorstudy.net/twiki/bin/view/Cheetah/MoreFilters">http://webware.colorstudy.net/twiki/bin/view/Cheetah/MoreFilters</a>
-for the latest ideas.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="inheritanceEtc.html" title="Import, Inheritance, Declaration and Assignment"
- >next</a> |</li>
- <li class="right" >
- <a href="comments.html" title="Comments"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/parserInstructions.html b/docs/html/users_guide/parserInstructions.html
deleted file mode 100644
index 9ae76b8..0000000
--- a/docs/html/users_guide/parserInstructions.html
+++ /dev/null
@@ -1,219 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Instructions to the Parser/Compiler &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Tips, Tricks and Troubleshooting" href="tipsAndTricks.html" />
- <link rel="prev" title="Error Handling" href="errorHandling.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="tipsAndTricks.html" title="Tips, Tricks and Troubleshooting"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="errorHandling.html" title="Error Handling"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Instructions to the Parser/Compiler</a><ul>
-<li><a class="reference internal" href="#breakpoint">#breakpoint</a></li>
-<li><a class="reference internal" href="#compiler-settings">#compiler-settings</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="errorHandling.html"
- title="previous chapter">Error Handling</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="tipsAndTricks.html"
- title="next chapter">Tips, Tricks and Troubleshooting</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/parserInstructions.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="instructions-to-the-parser-compiler">
-<h1>Instructions to the Parser/Compiler<a class="headerlink" href="#instructions-to-the-parser-compiler" title="Permalink to this headline">¶</a></h1>
-<p>(parserInstructions)</p>
-<div class="section" id="breakpoint">
-<h2>#breakpoint<a class="headerlink" href="#breakpoint" title="Permalink to this headline">¶</a></h2>
-<p>(parserInstructions.breakpoint)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#breakpoint</span>
-</pre></div>
-</div>
-<p>{#breakpoint} is a debugging tool that tells the parser to stop
-parsing at a specific point. All source code from that point on
-will be ignored.</p>
-<p>The difference between {#breakpoint} and {#stop} is that {#stop}
-occurs in normal templates (e.g., inside an {#if}) but
-{#breakpoint} is used only when debugging Cheetah. Another
-difference is that {#breakpoint} operates at compile time, while
-{#stop} is executed at run time while filling the template.</p>
-</div>
-<div class="section" id="compiler-settings">
-<h2>#compiler-settings<a class="headerlink" href="#compiler-settings" title="Permalink to this headline">¶</a></h2>
-<p>(parserInstructions.compiler-settings)</p>
-<p>Syntax:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#compiler-settings</span>
-<span class="n">key</span> <span class="o">=</span> <span class="n">value</span> <span class="p">(</span><span class="n">no</span> <span class="n">quotes</span><span class="p">)</span>
-<span class="c1">#end compiler-settings</span>
-
-<span class="c1">#compiler-settings reset</span>
-</pre></div>
-</div>
-<p>The {#compiler-settings} directive overrides Cheetah’s standard
-settings, changing how it parses source code and generates Python
-code. This makes it possible to change the behaviour of Cheetah’s
-parser/compiler for a certain template, or within a portion of the
-template.</p>
-<p>The {reset} argument reverts to the default settings. With {reset},
-there’s no end tag.</p>
-<p>Here are some examples of what you can do:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$myVar
-#compiler-settings
-cheetahVarStartToken = @
-#end compiler-settings
-@myVar
-#compiler-settings reset
-$myVar
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">## normal comment</span>
-<span class="c1">#compiler-settings</span>
-<span class="n">commentStartToken</span> <span class="o">=</span> <span class="o">//</span>
-<span class="c1">#end compiler-settings</span>
-
-<span class="o">//</span> <span class="n">new</span> <span class="n">style</span> <span class="n">of</span> <span class="n">comment</span>
-
-<span class="c1">#compiler-settings reset</span>
-
-<span class="c1">## back to normal comments</span>
-</pre></div>
-</div>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#slurp</span>
-<span class="c1">#compiler-settings</span>
-<span class="n">directiveStartToken</span> <span class="o">=</span> <span class="o">%</span>
-<span class="c1">#end compiler-settings</span>
-
-<span class="o">%</span><span class="n">slurp</span>
-<span class="o">%</span><span class="n">compiler</span><span class="o">-</span><span class="n">settings</span> <span class="n">reset</span>
-
-<span class="c1">#slurp</span>
-</pre></div>
-</div>
-<p>Here’s a partial list of the settings you can change:</p>
-<ol class="arabic simple">
-<li>syntax settings<ol class="arabic">
-<li>cheetahVarStartToken</li>
-<li>commentStartToken</li>
-<li>multilineCommentStartToken</li>
-<li>multilineCommentEndToken</li>
-<li>directiveStartToken</li>
-<li>directiveEndToken</li>
-</ol>
-</li>
-<li>code generation settings<ol class="arabic">
-<li>commentOffset</li>
-<li>outputRowColComments</li>
-<li>defDocStrMsg</li>
-<li>useNameMapper</li>
-<li>useAutocalling</li>
-<li>reprShortStrConstants</li>
-<li>reprNewlineThreshold</li>
-</ol>
-</li>
-</ol>
-<p>The meaning of these settings and their default values will be
-documented in the future.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="tipsAndTricks.html" title="Tips, Tricks and Troubleshooting"
- >next</a> |</li>
- <li class="right" >
- <a href="errorHandling.html" title="Error Handling"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/tipsAndTricks.html b/docs/html/users_guide/tipsAndTricks.html
deleted file mode 100644
index 3bfcf69..0000000
--- a/docs/html/users_guide/tipsAndTricks.html
+++ /dev/null
@@ -1,598 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Tips, Tricks and Troubleshooting &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="Using Cheetah with Webware" href="webware.html" />
- <link rel="prev" title="Instructions to the Parser/Compiler" href="parserInstructions.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="webware.html" title="Using Cheetah with Webware"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="parserInstructions.html" title="Instructions to the Parser/Compiler"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Tips, Tricks and Troubleshooting</a><ul>
-<li><a class="reference internal" href="#placeholder-tips">Placeholder Tips</a></li>
-<li><a class="reference internal" href="#diagnostic-output">Diagnostic Output</a></li>
-<li><a class="reference internal" href="#when-to-use-python-methods">When to use Python methods</a></li>
-<li><a class="reference internal" href="#calling-superclass-methods-and-why-you-have-to">Calling superclass methods, and why you have to</a></li>
-<li><a class="reference internal" href="#all-methods">All methods</a></li>
-<li><a class="reference internal" href="#optimizing-templates">Optimizing templates</a></li>
-<li><a class="reference internal" href="#psp-style-tags">PSP-style tags</a></li>
-<li><a class="reference internal" href="#makefiles">Makefiles</a></li>
-<li><a class="reference internal" href="#using-cheetah-in-a-multi-threaded-application">Using Cheetah in a Multi-Threaded Application</a></li>
-<li><a class="reference internal" href="#using-cheetah-with-gettext">Using Cheetah with gettext</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="parserInstructions.html"
- title="previous chapter">Instructions to the Parser/Compiler</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="webware.html"
- title="next chapter">Using Cheetah with Webware</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/tipsAndTricks.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="tips-tricks-and-troubleshooting">
-<h1>Tips, Tricks and Troubleshooting<a class="headerlink" href="#tips-tricks-and-troubleshooting" title="Permalink to this headline">¶</a></h1>
-<p>(tips)</p>
-<p>This chapter contains short stuff that doesn’t fit anywhere else.</p>
-<p>See the Cheetah FAQ for more specialized issues and for
-troubleshooting tips. Check the wiki periodically for recent tips
-contributed by users. If you get stuck and none of these resources
-help, ask on the mailing list.</p>
-<div class="section" id="placeholder-tips">
-<h2>Placeholder Tips<a class="headerlink" href="#placeholder-tips" title="Permalink to this headline">¶</a></h2>
-<p>(tips.placeholder)</p>
-<p>Here’s how to do certain important lookups that may not be obvious.
-For each, we show first the Cheetah expression and then the Python
-equivalent, because you can use these either in templates or in
-pure Python subclasses. The Cheetah examples use NameMapper
-shortcuts (uniform dotted notation, autocalling) as much as
-possible.</p>
-<p>To verify whether a variable exists in the searchList:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$varExists(&#39;theVariable&#39;)
-self.varExists(&#39;theVariable&#39;)
-</pre></div>
-</div>
-<p>This is useful in {#if} or {#unless} constructs to avoid a
-{#NameMapper.NotFound} error if the variable doesn’t exist. For
-instance, a CGI GET parameter that is normally supplied but in this
-case the user typed the URL by hand and forgot the parameter (or
-didn’t know about it). ({.hasVar} is a synonym for {.varExists}.)</p>
-<p>To look up a variable in the searchList from a Python method:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="bp">self</span><span class="o">.</span><span class="n">getVar</span><span class="p">(</span><span class="s1">&#39;theVariable&#39;</span><span class="p">)</span>
-<span class="bp">self</span><span class="o">.</span><span class="n">getVar</span><span class="p">(</span><span class="s1">&#39;theVariable&#39;</span><span class="p">,</span> <span class="n">myDefault</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>This is the equivalent to {$theVariable} in the template. If the
-variable is missing, it returns the second argument, {myDefault},
-if present, or raises {NameMapper.NotFound} if there is no second
-argument. However, it usually easier to write your method so that
-all needed searchList values come in as method arguments. That way
-the caller can just use a {$placeholder} to specify the argument,
-which is less verbose than you writing a getVar call.</p>
-<p>To do a “safe” placeholder lookup that returns a default value if
-the variable is missing:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$getVar(&#39;theVariable&#39;, None)
-$getVar(&#39;theVariable&#39;, $myDefault)
-</pre></div>
-</div>
-<p>To get an environmental variable, put {os.environ} on the
-searchList as a container. Or read the envvar in Python code and
-set a placeholder variable for it.</p>
-<p>Remember that variables found earlier in the searchList override
-same-name variables located in a later searchList object. Be
-careful when adding objects containing other variables besides the
-ones you want (e.g., {os.environ}, CGI parameters). The “other”
-variables may override variables your application depends on,
-leading to hard-to-find bugs. Also, users can inadvertently or
-maliciously set an environmental variable or CGI parameter you
-didn’t expect, screwing up your program. To avoid all this, know
-what your namespaces contain, and place the namespaces you have the
-most control over first. For namespaces that could contain
-user-supplied “other” variables, don’t put the namespace itself in
-the searchList; instead, copy the needed variables into your own
-“safe” namespace.</p>
-</div>
-<div class="section" id="diagnostic-output">
-<h2>Diagnostic Output<a class="headerlink" href="#diagnostic-output" title="Permalink to this headline">¶</a></h2>
-<p>(tips.diagnostic)</p>
-<p>If you need send yourself some debugging output, you can use
-{#silent} to output it to standard error:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#silent $sys.stderr.write(&quot;Incorrigible var is &#39;$incorrigible&#39;.\n&quot;)
-#silent $sys.stderr.write(&quot;Is &#39;unknown&#39; in the searchList? &quot; +
- $getVar(&quot;unknown&quot;, &quot;No.&quot;) + &quot;\n&quot; )
-</pre></div>
-</div>
-<p>(Tip contributed by Greg Czajkowski.)</p>
-</div>
-<div class="section" id="when-to-use-python-methods">
-<h2>When to use Python methods<a class="headerlink" href="#when-to-use-python-methods" title="Permalink to this headline">¶</a></h2>
-<p>(tips.pythonMethods)</p>
-<p>You always have a choice whether to code your methods as Cheetah
-{#def} methods or Python methods (the Python methods being located
-in a class your template inherits). So how do you choose?</p>
-<p>Generally, if the method consists mostly of text and placeholders,
-use a Cheetah method (a {#def} method). That’s why {#def} exists,
-to take the tedium out of writing those kinds of methods. And if
-you have a couple {#if} stanzas to {#set} some variables, followed
-by a {#for} loop, no big deal. But if your method consists mostly
-of directives and only a little text, you’re better off writing it
-in Python. Especially be on the watch for extensive use of {#set},
-{#echo} and {#silent} in a Cheetah method-it’s a sure sign you’re
-probably using the wrong language. Of course, though, you are free
-to do so if you wish.</p>
-<p>Another thing that’s harder to do in Cheetah is adjacent or nested
-multiline stanzas (all those directives with an accompanying {#end}
-directive). Python uses indentation to show the beginning and end
-of nested stanzas, but Cheetah can’t do that because any
-indentation shows up in the output, which may not be desired. So
-unless all those extra spaces and tabs in the output are
-acceptable, you have to keep directives flush with the left margin
-or the preceding text.</p>
-<p>The most difficult decisions come when you have conflicting goals.
-What if a method generates its output in parts (i.e., output
-concatenation), contains many searchList placeholders and lots of
-text, { and} requires lots of {#if … #set … #else #set … #end
-if} stanzas. A Cheetah method would be more advantageous in some
-ways, but a Python method in others. You’ll just have to choose,
-perhaps coding groups of methods all the same way. Or maybe you can
-split your method into two, one Cheetah and one Python, and have
-one method call the other. Usually this means the Cheetah method
-calling the Python method to calculate the needed values, then the
-Cheetah method produces the output. One snag you might run into
-though is that {#set} currently can set only one variable per
-statement, so if your Python method needs to return multiple values
-to your Cheetah method, you’ll have to do it another way.</p>
-</div>
-<div class="section" id="calling-superclass-methods-and-why-you-have-to">
-<h2>Calling superclass methods, and why you have to<a class="headerlink" href="#calling-superclass-methods-and-why-you-have-to" title="Permalink to this headline">¶</a></h2>
-<p>(tips.callingSuperclassMethods)</p>
-<p>If your template or pure Python class overrides a standard method
-or attribute of {Template} or one of its base classes, you should
-call the superclass method in your method to prevent various things
-from breaking. The most common methods to override are {.awake} and
-{.__init__}. {.awake} is called automatically by Webware early
-during the web transaction, so it makes a convenient place to put
-Python initialization code your template needs. You’ll definitely
-want to call the superclass {.awake} because it sets up many
-wonderful attributes and methods, such as those to access the CGI
-input fields.</p>
-<p>There’s nothing Cheetah-specific to calling superclass methods, but
-because it’s vital, we’ll recap the standard Python techniques
-here. We mention only the solution for old-style classes because
-Cheetah classes are old-style (in other Python documentation, you
-will find the technique for new-style classes, but they are not
-listed here because they cannot be used with Cheetah if you use
-dynamically-compiled templates).</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span>
-<span class="k">class</span> <span class="nc">MyClass</span><span class="p">(</span><span class="n">Template</span><span class="p">):</span>
- <span class="k">def</span> <span class="nf">awake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trans</span><span class="p">):</span>
- <span class="n">Template</span><span class="o">.</span><span class="n">awake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trans</span><span class="p">)</span>
- <span class="o">...</span> <span class="n">great</span> <span class="ow">and</span> <span class="n">exciting</span> <span class="n">features</span> <span class="n">written</span> <span class="n">by</span> <span class="n">me</span> <span class="o">...</span>
-</pre></div>
-</div>
-<p>[ &#64;&#64;MO: Need to test this. .awake is in Servlet, which is a
-superclass of Template. Do we really need both imports? Can we call
-Template.awake? ]</p>
-<p>To avoid hardcoding the superclass name, you can use this function
-{callbase()}, which emulates {super()} for older versions of
-Python. It also works even {super()} does exist, so you don’t have
-to change your servlets immediately when upgrading. Note that the
-argument sequence is different than {super} uses.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">===========================================================================</span>
-<span class="c1"># Place this in a module SOMEWHERE.py . Contributed by Edmund Lian.</span>
-<span class="k">class</span> <span class="nc">CallbaseError</span><span class="p">(</span><span class="ne">AttributeError</span><span class="p">):</span>
- <span class="k">pass</span>
-
-<span class="k">def</span> <span class="nf">callbase</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">base</span><span class="p">,</span> <span class="n">methodname</span><span class="o">=</span><span class="s1">&#39;__init__&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(),</span> <span class="n">kw</span><span class="o">=</span><span class="p">{},</span>
- <span class="n">raiseIfMissing</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
- <span class="k">try</span><span class="p">:</span> <span class="n">method</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">base</span><span class="p">,</span> <span class="n">methodname</span><span class="p">)</span>
- <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
- <span class="k">if</span> <span class="n">raiseIfMissing</span><span class="p">:</span>
- <span class="k">raise</span> <span class="n">CallbaseError</span><span class="p">,</span> <span class="n">methodname</span>
- <span class="k">return</span> <span class="kc">None</span>
- <span class="k">if</span> <span class="n">args</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="n">args</span> <span class="o">=</span> <span class="p">()</span>
- <span class="k">return</span> <span class="n">method</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
-<span class="o">===========================================================================</span>
-<span class="c1"># Place this in your class that&#39;s overriding .awake (or any method).</span>
-<span class="kn">from</span> <span class="nn">SOMEWHERE</span> <span class="k">import</span> <span class="n">callbase</span>
-<span class="k">class</span> <span class="nc">MyMixin</span><span class="p">:</span>
- <span class="k">def</span> <span class="nf">awake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trans</span><span class="p">):</span>
- <span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="n">trans</span><span class="p">,)</span>
- <span class="n">callbase</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">MyMixin</span><span class="p">,</span> <span class="s1">&#39;awake&#39;</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
- <span class="o">...</span> <span class="n">everything</span> <span class="k">else</span> <span class="n">you</span> <span class="n">want</span> <span class="n">to</span> <span class="n">do</span> <span class="o">...</span>
-<span class="o">===========================================================================</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="all-methods">
-<h2>All methods<a class="headerlink" href="#all-methods" title="Permalink to this headline">¶</a></h2>
-<p>(tips.allMethods)</p>
-<p>Here is a list of all the standard methods and attributes that can
-be accessed from a placeholder. Some of them exist for you to call,
-others are mainly used by Cheetah internally but you can call them
-if you wish, and others are only for internal use by Cheetah or
-Webware. Do not use these method names in mixin classes
-({#extends}, section inheritanceEtc.extends) unless you intend to
-override the standard method.</p>
-<p>Variables with a star prefix ({ *}) are frequently used in
-templates or in pure Python classes.</p>
-<p>*{Inherited from Cheetah.Template}</p>
-<blockquote>
-<div><p>Compile the template. Automatically called by {.__init__}.</p>
-<p>Return the module code the compiler generated, or {None} if no
-compilation took place.</p>
-<p>Return the class code the compiler generated, or {None} if no
-compilation took place.</p>
-<p>Return a reference to the underlying search list. (a list of
-objects). Use this to print out your searchList for debugging.
-Modifying the returned list will affect your placeholder searches!</p>
-<p>Return a reference to the current error catcher.</p>
-<p>If ‘cacheKey’ is not {None}, refresh that item in the cache. If
-{None}, delete all items in the cache so they will be recalculated
-the next time they are encountered.</p>
-<p>Break reference cycles before discarding a servlet.</p>
-<p>Look up a variable in the searchList. Same as {$varName} but allows
-you to specify a default value and control whether autocalling
-occurs.</p>
-<p>Read the named file. If used as a placeholder, inserts the file’s
-contents in the output without interpretation, like {#include raw}.
-If used in an expression, returns the file’s content (e.g., to
-assign it to a variable).</p>
-<p>This is what happens if you run a .py template module as a
-standalone program.</p>
-</div></blockquote>
-<p>*{Inherited from Cheetah.Utils.WebInputMixin}</p>
-<blockquote>
-<div><p>Exception raised by {.webInput}.</p>
-<p>Convenience method to access GET/POST variables from a Webware
-servlet or CGI script, or Webware cookie or session variables. See
-section webware.webInput for usage information.</p>
-</div></blockquote>
-<p>*{Inherited from Cheetah.SettingsManager}</p>
-<blockquote>
-<div><p>Get a compiler setting.</p>
-<p>Does this compiler setting exist?</p>
-<p>Set setting ‘name’ to ‘value’. See {#compiler-settings}, section
-parserInstructions.compiler-settings.</p>
-<p>Return the underlying settings dictionary. (Warning: modifying this
-dictionary will change Cheetah’s behavior.)</p>
-<p>Return a copy of the underlying settings dictionary.</p>
-<p>Return a deep copy of the underlying settings dictionary. See
-Python’s {copy} module.</p>
-<p>Update Cheetah’s compiler settings from the ‘newSettings’
-dictionary. If ‘merge’ is true, update only the names in
-newSettings and leave the other names alone. (The SettingsManager
-is smart enough to update nested dictionaries one key at a time
-rather than overwriting the entire old dictionary.) If ‘merge’ is
-false, delete all existing settings so that the new ones are the
-only settings.</p>
-<p>Same, but pass a string of {name=value} pairs rather than a
-dictionary, the same as you would provide in a {#compiler-settings}
-directive, section parserInstructions.compiler-settings.</p>
-<p>Same, but exec a Python source file and use the variables it
-contains as the new settings. (e.g.,
-{cheetahVarStartToken = “&#64;”}).</p>
-<p>Same, but get the new settings from a text file in ConfigParser
-format (similar to Windows’ *.ini file format). See Python’s
-{ConfigParser} module.</p>
-<p>Same, but read the open file object ‘inFile’ for the new settings.</p>
-<p>Same, but read the new settings from a string in ConfigParser
-format.</p>
-<p>Write the current compiler settings to a file named ‘path’ in
-*.ini format.</p>
-<p>Return a string containing the current compiler settings in *.ini
-format.</p>
-</div></blockquote>
-<p>*{Inherited from Cheetah.Servlet}</p>
-<p>{ Do not override these in a subclass or assign to them as
-attributes if your template will be used as a servlet,} otherwise
-Webware will behave unpredictably. However, it { is} OK to put
-same-name variables in the searchList, because Webware does not use
-the searchList.</p>
-<p>EXCEPTION: It’s OK to override { awake} and { sleep} as long as you
-call the superclass methods. (See section
-tips.callingSuperclassMethods.)</p>
-<blockquote>
-<div><p>True if this template instance is part of a live transaction in a
-running WebKit servlet.</p>
-<p>True if Webware is installed and the template instance inherits
-from WebKit.Servlet. If not, it inherits from
-Cheetah.Servlet.DummyServlet.</p>
-<p>Called by WebKit at the beginning of the web transaction.</p>
-<p>Called by WebKit at the end of the web transaction.</p>
-<p>Called by WebKit to produce the web transaction content. For a
-template-servlet, this means filling the template.</p>
-<p>Break reference cycles before deleting instance.</p>
-<p>The filesystem pathname of the template-servlet (as opposed to the
-URL path).</p>
-<p>The current Webware transaction.</p>
-<p>The current Webware application.</p>
-<p>The current Webware response.</p>
-<p>The current Webware request.</p>
-<p>The current Webware session.</p>
-<p>Call this method to insert text in the filled template output.</p>
-</div></blockquote>
-<p>Several other goodies are available to template-servlets under the
-{request} attribute, see section webware.input.</p>
-<p>{transaction}, {response}, {request} and {session} are created from
-the current transaction when WebKit calls {awake}, and don’t exist
-otherwise. Calling {awake} yourself (rather than letting WebKit
-call it) will raise an exception because the {transaction} argument
-won’t have the right attributes.</p>
-<p>*{Inherited from WebKit.Servlet} These are accessible only if
-Cheetah knows Webware is installed. This listing is based on a CVS
-snapshot of Webware dated 22 September 2002, and may not include
-more recent changes.</p>
-<p>The same caveats about overriding these methods apply.</p>
-<blockquote>
-<div><p>The simple name of the class. Used by Webware’s logging and
-debugging routines.</p>
-<p>Used by Webware’s logging and debugging routines.</p>
-<p>True if the servlet can be multithreaded.</p>
-<p>True if the servlet can be used for another transaction after the
-current transaction is finished.</p>
-<p>Depreciated by {.serverSidePath()}.</p>
-</div></blockquote>
-</div>
-<div class="section" id="optimizing-templates">
-<h2>Optimizing templates<a class="headerlink" href="#optimizing-templates" title="Permalink to this headline">¶</a></h2>
-<p>(tips.optimizing)</p>
-<p>Here are some things you can do to make your templates fill faster
-and user fewer CPU cycles. Before you put a lot of energy into
-this, however, make sure you really need to. In many situations,
-templates appear to initialize and fill instantaneously, so no
-optimization is necessary. If you do find a situation where your
-templates are filling slowly or taking too much memory or too many
-CPU cycles, we’d like to hear about it on the mailing list.</p>
-<p>Cache $placeholders whose values don’t change frequently. (Section
-output.caching).</p>
-<p>Use {#set} for values that are very frequently used, especially if
-they come out of an expensive operation like a
-deeply.nested.structure or a database lookup. {#set} variables are
-set to Python local variables, which have a faster lookup time than
-Python globals or values from Cheetah’s searchList.</p>
-<p>Moving variable lookups into Python code may provide a speedup in
-certain circumstances. If you’re just reading {self} attributes,
-there’s no reason to use NameMapper lookup ($placeholders) for
-them. NameMapper does a lot more work than simply looking up a
-{self} attribute.</p>
-<p>On the other hand, if you don’t know exactly where the value will
-come from (maybe from {self}, maybe from the searchList, maybe from
-a CGI input variable, etc), it’s easier to just make that an
-argument to your method, and then the template can handle all the
-NameMapper lookups for you:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#silent $myMethod($arg1, $arg2, $arg3)</span>
-</pre></div>
-</div>
-<p>Otherwise you’d have to call {self.getVar(‘arg1’)} etc in your
-method, which is more wordy, and tedious.</p>
-</div>
-<div class="section" id="psp-style-tags">
-<h2>PSP-style tags<a class="headerlink" href="#psp-style-tags" title="Permalink to this headline">¶</a></h2>
-<p>(tips.PSP)</p>
-<p>{&lt;%= … %&gt;} and {&lt;% … %&gt;} allow an escape to Python syntax
-inside the template. You do not need it to use Cheetah effectively,
-and we’re hard pressed to think of a case to recommend it.
-Nevertheless, it’s there in case you encounter a situation you
-can’t express adequately in Cheetah syntax. For instance, to set a
-local variable to an elaborate initializer.</p>
-<p>{&lt;%= … %&gt;} encloses a Python expression whose result will be
-printed in the output.</p>
-<p>{&lt;% … %&gt;} encloses a Python statement or expression (or set of
-statements or expressions) that will be included as-is into the
-generated method. The statements themselves won’t produce any
-output, but you can use the local function {write(EXPRESSION)} to
-produce your own output. (Actually, it’s a method of a file-like
-object, but it looks like a local function.) This syntax also may
-be used to set a local variable with a complicated initializer.</p>
-<p>To access Cheetah services, you must use Python code like you would
-in an inherited Python class. For instance, use {self.getVar()} to
-look up something in the searchList.</p>
-<p>{ Warning:} { No error checking is done!} If you write:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">&lt;%</span> <span class="k">break</span> <span class="o">%&gt;</span> <span class="c1">## Wrong!</span>
-</pre></div>
-</div>
-<p>you’ll get a {SyntaxError} when you fill the template, but that’s
-what you deserve.</p>
-<p>Note that these are PSP-{ style} tags, not PSP tags. A Cheetah
-template is not a PSP document, and you can’t use PSP commands in
-it.</p>
-</div>
-<div class="section" id="makefiles">
-<h2>Makefiles<a class="headerlink" href="#makefiles" title="Permalink to this headline">¶</a></h2>
-<p>(tips.Makefile)</p>
-<p>If your project has several templates and you get sick of typing
-“cheetah compile FILENAME.tmpl” all the time-much less remembering
-which commands to type when-and your system has the {make} command
-available, consider building a Makefile to make your life easier.</p>
-<p>Here’s a simple Makefile that controls two templates,
-ErrorsTemplate and InquiryTemplate. Two external commands,
-{inquiry} and {receive}, depend on ErrorsTemplate.py. Aditionally,
-InquiryTemplate itself depends on ErrorsTemplate.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="nb">all</span><span class="p">:</span> <span class="n">inquiry</span> <span class="n">receive</span>
-
-<span class="o">.</span><span class="n">PHONY</span><span class="p">:</span> <span class="nb">all</span> <span class="n">receive</span> <span class="n">inquiry</span> <span class="n">printsource</span>
-
-<span class="n">printsource</span><span class="p">:</span>
- <span class="n">a2ps</span> <span class="n">InquiryTemplate</span><span class="o">.</span><span class="n">tmpl</span> <span class="n">ErrorsTemplate</span><span class="o">.</span><span class="n">tmpl</span>
-
-<span class="n">ErrorsTemplate</span><span class="o">.</span><span class="n">py</span><span class="p">:</span> <span class="n">ErrorsTemplate</span><span class="o">.</span><span class="n">tmpl</span>
- <span class="n">cheetah</span> <span class="nb">compile</span> <span class="n">ErrorsTemplate</span><span class="o">.</span><span class="n">tmpl</span>
-
-<span class="n">InquiryTemplate</span><span class="o">.</span><span class="n">py</span><span class="p">:</span> <span class="n">InquiryTemplate</span><span class="o">.</span><span class="n">tmpl</span> <span class="n">ErrorsTemplate</span><span class="o">.</span><span class="n">py</span>
- <span class="n">cheetah</span> <span class="nb">compile</span> <span class="n">InquiryTemplate</span><span class="o">.</span><span class="n">tmpl</span>
-
-<span class="n">inquiry</span><span class="p">:</span> <span class="n">InquiryTemplate</span><span class="o">.</span><span class="n">py</span> <span class="n">ErrorsTemplate</span><span class="o">.</span><span class="n">py</span>
-
-<span class="n">receive</span><span class="p">:</span> <span class="n">ErrorsTemplate</span><span class="o">.</span><span class="n">py</span>
-</pre></div>
-</div>
-<p>Now you can type {make} anytime and it will recompile all the
-templates that have changed, while ignoring the ones that haven’t.
-Or you can recompile all the templates {receive} needs by typing
-{make receive}. Or you can recompile only ErrorsTemplate by typing
-{make ErrorsTemplate}. There’s also another target, “printsource”:
-this sends a Postscript version of the project’s source files to
-the printer. The .PHONY target is explained in the {make}
-documentation; essentially, you have it depend on every target that
-doesn’t produce an output file with the same name as the target.</p>
-</div>
-<div class="section" id="using-cheetah-in-a-multi-threaded-application">
-<h2>Using Cheetah in a Multi-Threaded Application<a class="headerlink" href="#using-cheetah-in-a-multi-threaded-application" title="Permalink to this headline">¶</a></h2>
-<p>(tips.threads)</p>
-<p>Template classes may be shared freely between threads. However,
-template instances should not be shared unless you either:</p>
-<ul>
-<li><p class="first">Use a lock (mutex) to serialize template fills, to prevent two
-threads from filling the template at the same time.</p>
-</li>
-<li><p class="first">Avoid thread-unsafe features:</p>
-<ul class="simple">
-<li>Modifying searchList values or instance variables.</li>
-<li>Caching ({$*var}, {#cache}, etc).</li>
-<li>{#set global}, {#filter}, {#errorCatcher}.</li>
-</ul>
-<p>Any changes to these in one thread will be visible in other
-threads, causing them to give inconsistent output.</p>
-</li>
-</ul>
-<p>About the only advantage in sharing a template instance is building
-up the placeholder cache. But template instances are so low
-overhead that it probably wouldn’t take perceptibly longer to let
-each thread instantiate its own template instance. Only if you’re
-filling templates several times a second would the time difference
-be significant, or if some of the placeholders trigger extremely
-slow calculations (e.g., parsing a long text file each time). The
-biggest overhead in Cheetah is importing the {Template} module in
-the first place, but that has to be done only once in a
-long-running application.</p>
-<p>You can use Python’s {mutex} module for the lock, or any similar
-mutex. If you have to change searchList values or instance
-variables before each fill (which is usually the case), lock the
-mutex before doing this, and unlock it only after the fill is
-complete.</p>
-<p>For Webware servlets, you’re probably better off using Webware’s
-servlet caching rather than Cheetah’s caching. Don’t override the
-servlet’s {.canBeThreaded()} method unless you avoid the unsafe
-operations listed above.</p>
-</div>
-<div class="section" id="using-cheetah-with-gettext">
-<h2>Using Cheetah with gettext<a class="headerlink" href="#using-cheetah-with-gettext" title="Permalink to this headline">¶</a></h2>
-<p>(tips.gettext)</p>
-<p>{ gettext} is a project for creating internationalized
-applications. For more details, visit
-<a class="reference external" href="http://docs.python.org/lib/module-gettext.html">http://docs.python.org/lib/module-gettext.html</a>. gettext can be used
-with Cheetah to create internationalized applications, even for CJK
-character sets, but you must keep a couple things in mind:</p>
-<ul class="simple">
-<li>xgettext is used on compiled templates, not on the templates
-themselves.</li>
-<li>The way the NameMapper syntax gets compiled to Python gets in
-the way of the syntax that xgettext recognizes. Hence, a special
-case exists for the functions {_}, {N_}, and {ngettext}. If you
-need to use a different set of functions for marking strings for
-translation, you must set the Cheetah setting {gettextTokens} to a
-list of strings representing the names of the functions you are
-using to mark strings for translation.</li>
-</ul>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="webware.html" title="Using Cheetah with Webware"
- >next</a> |</li>
- <li class="right" >
- <a href="parserInstructions.html" title="Instructions to the Parser/Compiler"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/html/users_guide/webware.html b/docs/html/users_guide/webware.html
deleted file mode 100644
index ba9afa2..0000000
--- a/docs/html/users_guide/webware.html
+++ /dev/null
@@ -1,667 +0,0 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Using Cheetah with Webware &#8212; Cheetah3 - The Python-Powered Template Engine</title>
- <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
- <script type="text/javascript">
- var DOCUMENTATION_OPTIONS = {
- URL_ROOT: '../',
- VERSION: '3.1.0',
- COLLAPSE_INDEX: false,
- FILE_SUFFIX: '.html',
- HAS_SOURCE: true,
- SOURCELINK_SUFFIX: '.txt'
- };
- </script>
- <script type="text/javascript" src="../_static/jquery.js"></script>
- <script type="text/javascript" src="../_static/underscore.js"></script>
- <script type="text/javascript" src="../_static/doctools.js"></script>
- <link rel="index" title="Index" href="../genindex.html" />
- <link rel="search" title="Search" href="../search.html" />
- <link rel="next" title="non-Webware HTML output" href="otherHtml.html" />
- <link rel="prev" title="Tips, Tricks and Troubleshooting" href="tipsAndTricks.html" />
- </head>
- <body>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- accesskey="I">index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="otherHtml.html" title="non-Webware HTML output"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="tipsAndTricks.html" title="Tips, Tricks and Troubleshooting"
- accesskey="P">previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <h3><a href="../index.html">Table Of Contents</a></h3>
- <ul>
-<li><a class="reference internal" href="#">Using Cheetah with Webware</a><ul>
-<li><a class="reference internal" href="#installing-cheetah-on-a-webware-system">Installing Cheetah on a Webware system</a></li>
-<li><a class="reference internal" href="#containment-vs-inheritance">Containment vs Inheritance</a><ul>
-<li><a class="reference internal" href="#the-containment-approach">The Containment Approach</a></li>
-<li><a class="reference internal" href="#the-inheritance-approach">The Inheritance Approach</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#site-frameworks">Site frameworks</a></li>
-<li><a class="reference internal" href="#directory-structure">Directory structure</a></li>
-<li><a class="reference internal" href="#initializing-your-template-servlet-with-python-code">Initializing your template-servlet with Python code</a></li>
-<li><a class="reference internal" href="#form-processing">Form processing</a></li>
-<li><a class="reference internal" href="#form-input-cookies-session-variables-and-web-server-variables">Form input, cookies, session variables and web server variables</a><ul>
-<li><a class="reference internal" href="#webinput">.webInput()</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#more-examples">More examples</a><ul>
-<li><a class="reference internal" href="#example-a-a-standalone-servlet">Example A - a standalone servlet</a></li>
-<li><a class="reference internal" href="#example-b-a-servlet-under-a-site-framework">Example B - a servlet under a site framework</a></li>
-<li><a class="reference internal" href="#example-c-several-servlets-with-a-common-template">Example C - several servlets with a common template</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#other-tips">Other Tips</a></li>
-</ul>
-</li>
-</ul>
-
- <h4>Previous topic</h4>
- <p class="topless"><a href="tipsAndTricks.html"
- title="previous chapter">Tips, Tricks and Troubleshooting</a></p>
- <h4>Next topic</h4>
- <p class="topless"><a href="otherHtml.html"
- title="next chapter">non-Webware HTML output</a></p>
- <div role="note" aria-label="source link">
- <h3>This Page</h3>
- <ul class="this-page-menu">
- <li><a href="../_sources/users_guide/webware.rst.txt"
- rel="nofollow">Show Source</a></li>
- </ul>
- </div>
-<div id="searchbox" style="display: none" role="search">
- <h3>Quick search</h3>
- <form class="search" action="../search.html" method="get">
- <div><input type="text" name="q" /></div>
- <div><input type="submit" value="Go" /></div>
- <input type="hidden" name="check_keywords" value="yes" />
- <input type="hidden" name="area" value="default" />
- </form>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
- </div>
- </div>
-
- <div class="document">
- <div class="documentwrapper">
- <div class="bodywrapper">
- <div class="body" role="main">
-
- <div class="section" id="using-cheetah-with-webware">
-<h1>Using Cheetah with Webware<a class="headerlink" href="#using-cheetah-with-webware" title="Permalink to this headline">¶</a></h1>
-<p>(webware)</p>
-<p>{ Webware for Python} is a ‘Python-Powered Internet Platform’ that
-runs servlets in a manner similar to Java servlets. { WebKit} is
-the name of Webware’s application server. For more details, please
-visit <a class="reference external" href="https://cito.github.io/w4py/">https://cito.github.io/w4py/</a>.</p>
-<p>All comments below refer to the official version of Webware, the
-DamnSimple! offshoot at ?, and the now-abandoned
-WebwareExperimental implementation at
-<a class="reference external" href="http://sourceforge.net/projects/expwebware/">http://sourceforge.net/projects/expwebware/</a>, except where noted.
-All the implementations are 95% identical to the servlet writer:
-their differences lie in their internal structure and configuration
-files. One difference is that the executable you run to launch
-standard Webware is called {AppServer}, whereas in
-WebwareExperimental it’s called {webkit}. But to servlets they’re
-both “WebKit, Webware’s application server”, so it’s one half dozen
-to the other. In this document, we generally use the term { WebKit}
-to refer to the currently-running application server.</p>
-<div class="section" id="installing-cheetah-on-a-webware-system">
-<h2>Installing Cheetah on a Webware system<a class="headerlink" href="#installing-cheetah-on-a-webware-system" title="Permalink to this headline">¶</a></h2>
-<p>(webware.installing)</p>
-<p>Install Cheetah after you have installed Webware, following the
-instructions in chapter gettingStarted.</p>
-<p>The standard Cheetah test suite (‘cheetah test’) does not test
-Webware features. We plan to build a test suite that can run as a
-Webware servlet, containing Webware-specific tests, but that has
-not been built yet. In the meantime, you can make a simple template
-containing something like “This is a very small template.”, compile
-it, put the *.py template module in a servlet directory, and see
-if Webware serves it up OK.</p>
-<p>{ You must not have a Webware context called “Cheetah”.} If you do,
-Webware will mistake that directory for the Cheetah module
-directory, and all template-servlets will bomb out with a
-“ImportError: no module named Template”. (This applies only to the
-standard Webware; WebwareExperimental does not have contexts.)</p>
-<p>If Webware complains that it cannot find your servlet, make sure
-‘.tmpl’ is listed in ‘ExtensionsToIgnore’ in your
-‘Application.config’ file.</p>
-</div>
-<div class="section" id="containment-vs-inheritance">
-<h2>Containment vs Inheritance<a class="headerlink" href="#containment-vs-inheritance" title="Permalink to this headline">¶</a></h2>
-<p>(webware.background)</p>
-<p>Because Cheetah’s core is flexible, there are many ways to
-integrate it with Webware servlets. There are two broad strategies:
-the { Inheritance approach} and the { Containment approach}. The
-difference is that in the Inheritance approach, your template
-object { is} the servlet, whereas in the Containment approach, the
-servlet is not a template but merely { uses} template(s) for
-portion(s) of its work.</p>
-<p>The Inheritance approach is recommended for new sites because it’s
-simpler, and because it scales well for large sites with a
-site-&gt;section-&gt;subsection-&gt;servlet hierarchy. The Containment
-approach is better for existing servlets that you don’t want to
-restructure. For instance, you can use the Containment approach to
-embed a discussion-forum table at the bottom of a web page.</p>
-<p>However, most people who use Cheetah extensively seem to prefer the
-Inheritance approach because even the most analytical servlet needs
-to produce { some} output, and it has to fit the site’s look and
-feel { anyway}, so you may as well use a template-servlet as the
-place to put the output. Especially since it’s so easy to add a
-template-servlet to a site once the framework is established. So we
-recommend you at least evaluate the effort that would be required
-to convert your site framework to template superclasses as
-described below, vs the greater flexibility and manageability it
-might give the site over the long term. You don’t necessarily have
-to convert all your existing servlets right away: just build common
-site templates that are visually and behaviorally compatible with
-your specification, and use them for new servlets. Existing
-servlets can be converted later, if at all.</p>
-<p>Edmund Liam is preparing a section on a hybrid approach, in which
-the servlet is not a template, but still calls template(s) in an
-inheritance chain to produce the output. The advantage of this
-approach is that you aren’t dealing with {Template} methods and
-Webware methods in the same object.</p>
-<div class="section" id="the-containment-approach">
-<h3>The Containment Approach<a class="headerlink" href="#the-containment-approach" title="Permalink to this headline">¶</a></h3>
-<p>(webware.containment)</p>
-<p>In the Containment approach, your servlet is not a template.
-Instead, it it makes its own arrangements to create and use
-template object(s) for whatever it needs. The servlet must
-explicitly call the template objects’ {.respond()} (or
-{.__str__()}) method each time it needs to fill the template.
-This does not present the output to the user; it merely gives the
-output to the servlet. The servlet then calls its
-{#self.response().write()} method to send the output to the user.</p>
-<p>The developer has several choices for managing her templates. She
-can store the template definition in a string, file or database and
-call {Cheetah.Template.Template} manually on it. Or she can put the
-template definition in a *.tmpl file and use { cheetah compile}
-(section howWorks.cheetah-compile) to convert it to a Python class
-in a *.py module, and then import it into her servlet.</p>
-<p>Because template objects are not thread safe, you should not store
-one in a module variable and allow multiple servlets to fill it
-simultaneously. Instead, each servlet should instantiate its own
-template object. Template { classes}, however, are thread safe,
-since they don’t change once created. So it’s safe to store a
-template class in a module global variable.</p>
-</div>
-<div class="section" id="the-inheritance-approach">
-<h3>The Inheritance Approach<a class="headerlink" href="#the-inheritance-approach" title="Permalink to this headline">¶</a></h3>
-<p>(webware.inheritance)</p>
-<p>In the Inheritance approach, your template object doubles as as
-Webware servlet, thus these are sometimes called {
-template-servlets}. { cheetah compile} (section
-howWorks.cheetah-compile) automatically creates modules containing
-valid Webware servlets. A servlet is a subclass of Webware’s
-{WebKit.HTTPServlet} class, contained in a module with the same
-name as the servlet. WebKit uses the request URL to find the
-module, and then instantiates the servlet/template. The servlet
-must have a {.respond()} method (or {.respondToGet()},
-{.respondToPut()}, etc., but the Cheetah default is {.respond()}).
-Servlets created by {cheetah compile} meet all these requirements.</p>
-<p>(Cheetah has a Webware plugin that automatically converts a {.tmpl
-servlet file} into a {.py servlet file} when the {.tmpl servlet
-file} is requested by a browser. However, that plugin is currently
-unavailable because it’s being redesigned. For now, use {cheetah
-compile} instead.)</p>
-<p>What about logic code? Cheetah promises to keep content (the
-placeholder values), graphic design (the template definition and is
-display logic), and algorithmic logic (complex calculations and
-side effects) separate. How? Where do you do form processing?</p>
-<p>The answer is that your template class can inherit from a pure
-Python class containing the analytical logic. You can either use
-the {#extends} directive in Cheetah to indicate the superclass(es),
-or write a Python {class} statement to do the same thing. See the
-template {Cheetah.Templates.SkeletonPage.tmpl} and its pure Python
-class {Cheetah.Templates._SkeletonPage.py} for an example of a
-template inheriting logic code. (See sections
-inheritanceEtc.extends and inheritanceEtc.implements for more
-information about {#extends} and {#implements}. They have to be
-used a certain right way.)</p>
-<p>If {#WebKit.HTTPServlet} is not available, Cheetah fakes it with a
-dummy class to satisfy the dependency. This allows servlets to be
-tested on the command line even on systems where Webware is not
-installed. This works only with servlets that don’t call back into
-WebKit for information about the current web transaction, since
-there is no web transaction. Trying to access form input, for
-instance, will raise an exception because it depends on a live web
-request object, and in the dummy class the request object is
-{None}.</p>
-<p>Because Webware servlets must be valid Python modules, and
-“cheetah compile” can produce only valid module names, if you’re
-converting an existing site that has .html filenames with hyphens
-(-), extra dots (.), etc, you’ll have to rename them (and possibly
-use redirects).</p>
-</div>
-</div>
-<div class="section" id="site-frameworks">
-<h2>Site frameworks<a class="headerlink" href="#site-frameworks" title="Permalink to this headline">¶</a></h2>
-<p>(webware.siteFrameworks)</p>
-<p>Web sites are normally arranged hierarchically, with certain
-features common to every page on the site, other features common to
-certain sections or subsections, and others unique to each page.
-You can model this easily with a hierarchy of classes, with
-specific servlets inheriting from their more general superclasses.
-Again, you can do this two ways, using Cheetah’s { Containment}
-approach or { Inheritance} approach.</p>
-<p>In the Inheritance approach, parents provide {#block}s and children
-override them using {#def}. Each child {#extend}s its immediate
-parent. Only the leaf servlets need to be under WebKit’s document
-root directory. The superclass servlets can live anywhere in the
-filesystem that’s in the Python path. (You may want to modify your
-WebKit startup script to add that library directory to your
-{PYTHONPATH} before starting WebKit.)</p>
-<p>Section libraries.templates.skeletonPage contains information on a
-stock template that simplifies defining the basic HTML structure of
-your web page templates.</p>
-<p>In the Containment approach, your hierarchy of servlets are not
-templates, but each uses one or more templates as it wishes.
-Children provide callback methods to to produce the various
-portions of the page that are their responsibility, and parents
-call those methods. Webware’s {WebKit.Page} and
-{WebKit.SidebarPage} classes operate like this.</p>
-<p>Note that the two approaches are not compatible! {WebKit.Page} was
-not designed to intermix with {Cheetah.Templates.SkeletonPage}.
-Choose either one or the other, or expect to do some integration
-work.</p>
-<p>If you come up with a different strategy you think is worth noting
-in this chapter, let us know.</p>
-</div>
-<div class="section" id="directory-structure">
-<h2>Directory structure<a class="headerlink" href="#directory-structure" title="Permalink to this headline">¶</a></h2>
-<p>(webware.directoryStructure)</p>
-<p>Here’s one way to organize your files for Webware+Cheetah.</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">www</span><span class="o">/</span> <span class="c1"># Web root directory.</span>
- <span class="n">site1</span><span class="o">.</span><span class="n">example</span><span class="o">.</span><span class="n">com</span><span class="o">/</span> <span class="c1"># Site subdirectory.</span>
- <span class="n">apache</span><span class="o">/</span> <span class="c1"># Web server document root (for non-servlets).</span>
- <span class="n">www</span><span class="o">/</span> <span class="c1"># WebKit document root.</span>
- <span class="n">index</span><span class="o">.</span><span class="n">py</span> <span class="c1"># http://site1.example.com/</span>
- <span class="n">index</span><span class="o">.</span><span class="n">tmpl</span> <span class="c1"># Source for above.</span>
- <span class="n">servlet2</span><span class="o">.</span><span class="n">py</span> <span class="c1"># http://site1.example.com/servlet2</span>
- <span class="n">servlet2</span><span class="o">.</span><span class="n">tmpl</span> <span class="c1"># Source for above.</span>
- <span class="n">lib</span><span class="o">/</span> <span class="c1"># Directory for helper classes.</span>
- <span class="n">Site</span><span class="o">.</span><span class="n">py</span> <span class="c1"># Site superclass (&quot;#extends Site&quot;).</span>
- <span class="n">Site</span><span class="o">.</span><span class="n">tmpl</span> <span class="c1"># Source for above.</span>
- <span class="n">Logic</span><span class="o">.</span><span class="n">py</span> <span class="c1"># Logic class inherited by some template.</span>
- <span class="n">webkit</span><span class="o">.</span><span class="n">config</span> <span class="c1"># Configuration file (for WebwareExperimental).</span>
- <span class="n">Webware</span><span class="o">/</span> <span class="c1"># Standard Webware&#39;s MakeAppWorkDir directory.</span>
- <span class="n">AppServer</span> <span class="c1"># Startup program (for standard Webware).</span>
- <span class="n">Configs</span><span class="o">/</span> <span class="c1"># Configuration directory (for standard Webware).</span>
- <span class="n">Application</span><span class="o">.</span><span class="n">config</span>
- <span class="c1"># Configuration file (for standard Webware).</span>
- <span class="n">site2</span><span class="o">.</span><span class="n">example</span><span class="o">.</span><span class="n">org</span><span class="o">/</span> <span class="c1"># Another virtual host on this computer....</span>
-</pre></div>
-</div>
-</div>
-<div class="section" id="initializing-your-template-servlet-with-python-code">
-<h2>Initializing your template-servlet with Python code<a class="headerlink" href="#initializing-your-template-servlet-with-python-code" title="Permalink to this headline">¶</a></h2>
-<p>(webware.calculations)</p>
-<p>If you need a place to initialize variables or do calculations for
-your template-servlet, you can put it in an {.awake()} method
-because WebKit automatically calls that early when processing the
-web transaction. If you do override {.awake()}, be sure to call the
-superclass {.awake} method. You probably want to do that first so
-that you have access to the web transaction data {Servlet.awake}
-provides. You don’t have to worry about whether your parent class
-has its own {.awake} method, just call it anyway, and somebody up
-the inheritance chain will respond, or at minimum {Servlet.awake}
-will respond. Section tips.callingSuperclassMethods gives examples
-of how to call a superclass method.</p>
-<p>As an alternative, you can put all your calculations in your own
-method and call it near the top of your template. ({#silent},
-section output.silent).</p>
-</div>
-<div class="section" id="form-processing">
-<h2>Form processing<a class="headerlink" href="#form-processing" title="Permalink to this headline">¶</a></h2>
-<p>(webware.form)</p>
-<p>There are many ways to display and process HTML forms with Cheetah.
-But basically, all form processing involves two steps.</p>
-<ol class="arabic simple">
-<li>Display the form.</li>
-<li>In the next web request, read the parameters the user submitted,
-check for user errors, perform any side effects (e.g.,
-reading/writing a database or session data) and present the user an
-HTML response or another form.</li>
-</ol>
-<p>The second step may involve choosing between several templates to
-fill (or several servlets to redirect to), or a big
-if-elif-elif-else construct to display a different portion of the
-template depending on the situation.</p>
-<p>In the oldest web applications, step 1 and step 2 were handled by
-separate objects. Step 1 was a static HTML file, and step 2 was a
-CGI script. Frequently, a better strategy is to have a single
-servlet handle both steps. That way, the servlet has better control
-over the entire situation, and if the user submits unacceptable
-data, the servlet can redisplay the form with a “try again” error
-message at the top and and all the previous input filled in. The
-servlet can use the presence or absence of certain CGI parameters
-(e.g., the submit button, or a hidden mode field) to determine
-which step to take.</p>
-<p>One neat way to build a servlet that can handle both the form
-displaying and form processing is like this:</p>
-<ol class="arabic simple">
-<li>Put your form HTML into an ordinary template-servlet. In each
-input field, use a placeholder for the value of the {VALUE=}
-attribue. Place another placeholder next to each field, for that
-field’s error message.</li>
-<li>Above the form, put a {$processFormData} method call.</li>
-<li>Define that method in a Python class your template {#extend}s.
-(Or if it’s a simple method, you can define it in a {#def}.) The
-method should:<ol class="arabic">
-<li>Get the form input if any.</li>
-<li>If the input variable corresponding to the submit field is
-empty, there is no form input, so we’re showing the form for the
-first time. Initialize all VALUE= variables to their default value
-(usually “”), and all error variables to “”. Return “”, which will
-be the value for {$processFormData}.</li>
-<li>If the submit variable is not empty, fill the VALUE= variables
-with the input data the user just submitted.</li>
-<li>Now check the input for errors and put error messages in the
-error placeholders.</li>
-<li>If there were any user errors, return a general error message
-string; this will be the value for {$processFormData}.</li>
-<li>If there were no errors, do whatever the form’s job is (e.g.,
-update a database) and return a success message; this will be the
-value for {$processFormData}.</li>
-</ol>
-</li>
-<li>The top of the page will show your success/failure message (or
-nothing the first time around), with the form below. If there are
-errors, the user will have a chance to correct them. After a
-successful submit, the form will appear again, so the user can
-either review their entry, or change it and submit it again.
-Depending on the application, this may make the servlet update the
-same database record again, or it may generate a new record.</li>
-</ol>
-<p>{FunFormKit} is a third-party Webware package that makes it easier
-to produce forms and handle their logic. It has been successfully
-been used with Cheetah. You can download FunFormKit from
-<a class="reference external" href="http://colorstudy.net/software/funformkit/">http://colorstudy.net/software/funformkit/</a> and try it out for
-yourself.</p>
-</div>
-<div class="section" id="form-input-cookies-session-variables-and-web-server-variables">
-<h2>Form input, cookies, session variables and web server variables<a class="headerlink" href="#form-input-cookies-session-variables-and-web-server-variables" title="Permalink to this headline">¶</a></h2>
-<p>(webware.input)</p>
-<p>General variable tips that also apply to servlets are in section
-tips.placeholder.</p>
-<p>To look up a CGI GET or POST parameter (with POST overriding):</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>$request.field(&#39;myField&#39;)
-self.request().field(&#39;myField&#39;)
-</pre></div>
-</div>
-<p>These will fail if Webware is not available, because {$request}
-(aka {self.request()} will be {None} rather than a Webware
-{WebKit.Request} object. If you plan to read a lot of CGI
-parameters, you may want to put the {.fields} method into a local
-variable for convenience:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>#set $fields = $request.fields
-$fields.myField
-</pre></div>
-</div>
-<p>But remember to do complicated calculations in Python, and assign
-the results to simple variables in the searchList for display.
-These {$request} forms are useful only for occasions where you just
-need one or two simple request items that going to Python for would
-be overkill.</p>
-<p>To get a cookie or session parameter, subsitute “cookie” or
-“session” for “field” above. To get a dictionary of all CGI
-parameters, substitute “fields” (ditto for “cookies”). To verify a
-field exists, substitute “hasField” (ditto for “hasCookie”).</p>
-<p>Other useful request goodies:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>## Defined in WebKit.Request
-$request.field(&#39;myField&#39;, &#39;default value&#39;)
-$request.time ## Time this request began in Unix ticks.
-$request.timeStamp ## Time in human-readable format (&#39;asctime&#39; format).
-## Defined in WebKit.HTTPRequest
-$request.hasField.myField ## Is a CGI parameter defined?
-$request.fields ## Dictionary of all CGI parameters.
-$request.cookie.myCookie ## A cookie parameter (also .hasCookie, .cookies).
-$request.value.myValue ## A field or cookie variable (field overrides)
- ## (also .hasValue).
-$request.session.mySessionVar # A session variable.
-$request.extraURLPath ## URL path components to right of servlet, if any.
-$request.serverDictionary ## Dict of environmental vars from web server.
-$request.remoteUser ## Authenticated username. HTTPRequest.py source
- ## suggests this is broken and always returns None.
-$request.remoteAddress ## User&#39;s IP address (string).
-$request.remoteName ## User&#39;s domain name, or IP address if none.
-$request.urlPath ## URI of this servlet.
-$request.urlPathDir ## URI of the directory containing this servlet.
-$request.serverSidePath ## Absolute path of this servlet on local filesystem.
-$request.serverURL ## URL of this servlet, without &quot;http://&quot; prefix,
- ## extra path info or query string.
-$request.serverURLDir ## URL of this servlet&#39;s directory, without &quot;http://&quot;.
-$log(&quot;message&quot;) ## Put a message in the Webware server log. (If you
- ## define your own &#39;log&#39; variable, it will override
- ## this; use $self.log(&quot;message&quot;) in that case.
-</pre></div>
-</div>
-<div class="section" id="webinput">
-<h3>.webInput()<a class="headerlink" href="#webinput" title="Permalink to this headline">¶</a></h3>
-<p>(webware.webInput)</p>
-<p>From the method docstring:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span> def webInput(self, names, namesMulti=(), default=&#39;&#39;, src=&#39;f&#39;,
- defaultInt=0, defaultFloat=0.00, badInt=0, badFloat=0.00, debug=False):
-
-This method places the specified GET/POST fields, cookies or session variables
-into a dictionary, which is both returned and put at the beginning of the
-searchList. It handles:
- * single vs multiple values
- * conversion to integer or float for specified names
- * default values/exceptions for missing or bad values
- * printing a snapshot of all values retrieved for debugging
-All the &#39;default*&#39; and &#39;bad*&#39; arguments have &quot;use or raise&quot; behavior, meaning
-that if they&#39;re a subclass of Exception, they&#39;re raised. If they&#39;re anything
-else, that value is substituted for the missing/bad value.
-
-The simplest usage is:
-
- #silent $webInput([&#39;choice&#39;])
- $choice
-
- dic = self.webInput([&#39;choice&#39;])
- write(dic[&#39;choice&#39;])
-
-Both these examples retrieves the GET/POST field &#39;choice&#39; and print it. If you
-leave off the &quot;#silent&quot;, all the values would be printed too. But a better way
-to preview the values is
-
- #silent $webInput([&#39;name&#39;], $debug=1)
-
-because this pretty-prints all the values inside HTML &lt;PRE&gt; tags.
-
-Since we didn&#39;t specify any coversions, the value is a string. It&#39;s a &quot;single&quot;
-value because we specified it in &#39;names&#39; rather than &#39;namesMulti&#39;. Single
-values work like this:
- * If one value is found, take it.
- * If several values are found, choose one arbitrarily and ignore the rest.
- * If no values are found, use or raise the appropriate &#39;default*&#39; value.
-
-Multi values work like this:
- * If one value is found, put it in a list.
- * If several values are found, leave them in a list.
- * If no values are found, use the empty list ([]). The &#39;default*&#39;
- arguments are *not* consulted in this case.
-
-Example: assume &#39;days&#39; came from a set of checkboxes or a multiple combo box
-on a form, and the user chose &quot;Monday&quot;, &quot;Tuesday&quot; and &quot;Thursday&quot;.
-
- #silent $webInput([], [&#39;days&#39;])
- The days you chose are: #slurp
- #for $day in $days
- $day #slurp
- #end for
-
- dic = self.webInput([], [&#39;days&#39;])
- write(&quot;The days you chose are: &quot;)
- for day in dic[&#39;days&#39;]:
- write(day + &quot; &quot;)
-
-Both these examples print: &quot;The days you chose are: Monday Tuesday Thursday&quot;.
-
-By default, missing strings are replaced by &quot;&quot; and missing/bad numbers by zero.
-(A &quot;bad number&quot; means the converter raised an exception for it, usually because
-of non-numeric characters in the value.) This mimics Perl/PHP behavior, and
-simplifies coding for many applications where missing/bad values *should* be
-blank/zero. In those relatively few cases where you must distinguish between
-&quot;&quot;/zero on the one hand and missing/bad on the other, change the appropriate
-&#39;default*&#39; and &#39;bad*&#39; arguments to something like:
- * None
- * another constant value
- * $NonNumericInputError/self.NonNumericInputError
- * $ValueError/ValueError
-(NonNumericInputError is defined in this class and is useful for
-distinguishing between bad input vs a TypeError/ValueError
-thrown for some other reason.)
-
-Here&#39;s an example using multiple values to schedule newspaper deliveries.
-&#39;checkboxes&#39; comes from a form with checkboxes for all the days of the week.
-The days the user previously chose are preselected. The user checks/unchecks
-boxes as desired and presses Submit. The value of &#39;checkboxes&#39; is a list of
-checkboxes that were checked when Submit was pressed. Our task now is to
-turn on the days the user checked, turn off the days he unchecked, and leave
-on or off the days he didn&#39;t change.
-
- dic = self.webInput([], [&#39;dayCheckboxes&#39;])
- wantedDays = dic[&#39;dayCheckboxes&#39;] # The days the user checked.
- for day, on in self.getAllValues():
- if not on and day in wantedDays:
- self.TurnOn(day)
- # ... Set a flag or insert a database record ...
- elif on and day not in wantedDays:
- self.TurnOff(day)
- # ... Unset a flag or delete a database record ...
-
-&#39;source&#39; allows you to look up the variables from a number of different
-sources:
- &#39;f&#39; fields (CGI GET/POST parameters)
- &#39;c&#39; cookies
- &#39;s&#39; session variables
- &#39;v&#39; &quot;values&quot;, meaning fields or cookies
-
-In many forms, you&#39;re dealing only with strings, which is why the
-&#39;default&#39; argument is third and the numeric arguments are banished to
-the end. But sometimes you want automatic number conversion, so that
-you can do numeric comparisons in your templates without having to
-write a bunch of conversion/exception handling code. Example:
-
- #silent $webInput([&#39;name&#39;, &#39;height:int&#39;])
- $name is $height cm tall.
- #if $height &gt;= 300
- Wow, you&#39;re tall!
- #else
- Pshaw, you&#39;re short.
- #end if
-
- dic = self.webInput([&#39;name&#39;, &#39;height:int&#39;])
- name = dic[name]
- height = dic[height]
- write(&quot;%s is %s cm tall.&quot; % (name, height))
- if height &gt; 300:
- write(&quot;Wow, you&#39;re tall!&quot;)
- else:
- write(&quot;Pshaw, you&#39;re short.&quot;)
-
-To convert a value to a number, suffix &quot;:int&quot; or &quot;:float&quot; to the name. The
-method will search first for a &quot;height:int&quot; variable and then for a &quot;height&quot;
-variable. (It will be called &quot;height&quot; in the final dictionary.) If a numeric
-conversion fails, use or raise &#39;badInt&#39; or &#39;badFloat&#39;. Missing values work
-the same way as for strings, except the default is &#39;defaultInt&#39; or
-&#39;defaultFloat&#39; instead of &#39;default&#39;.
-
-If a name represents an uploaded file, the entire file will be read into
-memory. For more sophisticated file-upload handling, leave that name out of
-the list and do your own handling, or wait for Cheetah.Utils.UploadFileMixin.
-
-This mixin class works only in a subclass that also inherits from
-Webware&#39;s Servlet or HTTPServlet. Otherwise you&#39;ll get an AttributeError
-on &#39;self.request&#39;.
-
-EXCEPTIONS: ValueError if &#39;source&#39; is not one of the stated characters.
-TypeError if a conversion suffix is not &quot;:int&quot; or &quot;:float&quot;.
-</pre></div>
-</div>
-</div>
-</div>
-<div class="section" id="more-examples">
-<h2>More examples<a class="headerlink" href="#more-examples" title="Permalink to this headline">¶</a></h2>
-<p>(webware.examples)</p>
-<div class="section" id="example-a-a-standalone-servlet">
-<h3>Example A - a standalone servlet<a class="headerlink" href="#example-a-a-standalone-servlet" title="Permalink to this headline">¶</a></h3>
-</div>
-<div class="section" id="example-b-a-servlet-under-a-site-framework">
-<h3>Example B - a servlet under a site framework<a class="headerlink" href="#example-b-a-servlet-under-a-site-framework" title="Permalink to this headline">¶</a></h3>
-</div>
-<div class="section" id="example-c-several-servlets-with-a-common-template">
-<h3>Example C - several servlets with a common template<a class="headerlink" href="#example-c-several-servlets-with-a-common-template" title="Permalink to this headline">¶</a></h3>
-</div>
-</div>
-<div class="section" id="other-tips">
-<h2>Other Tips<a class="headerlink" href="#other-tips" title="Permalink to this headline">¶</a></h2>
-<p>(webware.otherTips)</p>
-<p>If your servlet accesses external files (e.g., via an {#include}
-directive), remember that the current directory is not necessarily
-directory the servlet is in. It’s probably some other directory
-WebKit chose. To find a file relative to the servlet’s directory,
-prefix the path with whatever {self.serverSidePath()} returns (from
-{Servlet.serverSidePath()}.</p>
-<p>If you don’t understand how {#extends} and {#implements} work, and
-about a template’s main method, read the chapter on inheritance
-(sections inheritanceEtc.extends and inheritanceEtc.implements).
-This may help you avoid buggy servlets.</p>
-</div>
-</div>
-
-
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <h3>Navigation</h3>
- <ul>
- <li class="right" style="margin-right: 10px">
- <a href="../genindex.html" title="General Index"
- >index</a></li>
- <li class="right" >
- <a href="../py-modindex.html" title="Python Module Index"
- >modules</a> |</li>
- <li class="right" >
- <a href="otherHtml.html" title="non-Webware HTML output"
- >next</a> |</li>
- <li class="right" >
- <a href="tipsAndTricks.html" title="Tips, Tricks and Troubleshooting"
- >previous</a> |</li>
- <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
- <li class="nav-item nav-item-1"><a href="index.html" >Cheetah User’s Guide</a> &#187;</li>
- </ul>
- </div>
- <div class="footer" role="contentinfo">
- &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Mar 03, 2018.
- Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/news.rst b/docs/news.rst
index 2a6ff8c..5e7f8f1 100644
--- a/docs/news.rst
+++ b/docs/news.rst
@@ -4,6 +4,47 @@ News
Development (master)
--------------------
+3.2.0 (2019-02-06)
+------------------
+
+Features:
+
+ - Dropped support for Python 3.3.
+ - Implement LoadTemplate.loadTemplate{Module,Class} to load templates
+ from .py[co], .py or .tmpl.
+ - CheetahDirOwner caches compiled template in the template directory.
+ - CheetahDirOwner now silently ignores errors on compiled templates
+ writing. To get tracebacks set CheetahDirOwner.debuglevel = 1.
+ - CheetahDirOwner and DirOwner byte-compile compiled templates
+ to .pyc/.pyo. Errors on writing are silently ignored.
+
+Minor features:
+
+ - Implement Compiler.__unicode__ under Python 2 and Compiler.__bytes__
+ under Python 3.
+
+Bug fixes:
+
+ - Fix a bug in Compiler.__str__: under Python 2 the method now always
+ returns str; it encodes unicode to str using encoding from the
+ compiled source. Under Python 3 the method decodes bytes to str.
+
+Code:
+
+ - Source code was made flake8-clean using the latest flake8.
+
+Documentation:
+
+ - Remove outdated section markers.
+ - Better documentation for ImportHooks.
+ - Add an example of a universal makefile.
+
+CI:
+
+ - Run tests with Python 3.7.
+ - At travis deploy sdists and wheels for tags.
+
+
3.1.0 (2018-03-03)
------------------
diff --git a/docs/recipes/writing_a_recipe.rst b/docs/recipes/writing_a_recipe.rst
deleted file mode 100644
index 73d146a..0000000
--- a/docs/recipes/writing_a_recipe.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Writing a "Recipe"
-==================
-
-This document isn't quite there yet ;)
diff --git a/docs/roadmap.rst b/docs/roadmap.rst
index 5057742..69781e9 100644
--- a/docs/roadmap.rst
+++ b/docs/roadmap.rst
@@ -1,11 +1,10 @@
Cheetah Roadmap
===============
-Cheetah v3.0
-^^^^^^^^^^^^
-*in development*
+Cheetah v3
+^^^^^^^^^^
-Cheetah v3.0 is for support for Python 2.7 and Python 3.
+Cheetah v3 supports Python 2.7 and Python 3.
Cheetah v2
diff --git a/docs/users_guide/comments.rst b/docs/users_guide/comments.rst
index 5bd45dc..7ad642e 100644
--- a/docs/users_guide/comments.rst
+++ b/docs/users_guide/comments.rst
@@ -1,7 +1,6 @@
Comments
========
-(comments)
Comments are used to mark notes, explanations, and decorative text
that should not appear in the output. Cheetah maintains the
@@ -55,7 +54,6 @@ lines after the previous method definition, like so:
Docstring Comments
------------------
-(comments.docstring)
Python modules, classes, and methods can be documented with inline
'documentation strings' (aka 'docstrings'). Docstrings, unlike
diff --git a/docs/users_guide/comparisons.rst b/docs/users_guide/comparisons.rst
index 6886035..0c59c08 100644
--- a/docs/users_guide/comparisons.rst
+++ b/docs/users_guide/comparisons.rst
@@ -1,7 +1,6 @@
Cheetah vs. Other Template Engines
==================================
-(comparisons)
This appendix compares Cheetah with various other template/emdedded
scripting languages and Internet development frameworks. As Cheetah
@@ -12,7 +11,6 @@ http://jakarta.apache.org/velocity/ymtd/ymtd.html.
Which features are unique to Cheetah
------------------------------------
-(comparisons.unique)
- The { block framework} (section inheritanceEtc.block)
@@ -46,7 +44,6 @@ Which features are unique to Cheetah
Cheetah vs. Velocity
--------------------
-(comparisons.velocity)
For a basic introduction to Velocity, visit
http://jakarta.apache.org/velocity.
@@ -102,7 +99,6 @@ Cheetah, however, has a number of advantages over Velocity:
Cheetah vs. WebMacro
--------------------
-(comparisons.webmacro)
For a basic introduction to WebMacro, visit http://webmacro.org.
@@ -114,7 +110,6 @@ http://jakarta.apache.org/velocity/differences.html.
Cheetah vs. Zope's DTML
-----------------------
-(comparisons.dtml)
For a basic introduction to DTML, visit
http://www.zope.org/Members/michel/ZB/DTML.dtml.
@@ -227,7 +222,6 @@ complete yet.
Cheetah vs. Zope Page Templates
-------------------------------
-(comparisons.zpt)
For a basic introduction to Zope Page Templates, please visit
http://www.zope.org/Documentation/Articles/ZPT2.
@@ -235,7 +229,6 @@ http://www.zope.org/Documentation/Articles/ZPT2.
Cheetah vs. PHP's Smarty templates
----------------------------------
-(comparisons.smarty)
PHP (http://www.php.net/) is one of the few scripting languages
expressly designed for web servlets. However, it's also a
@@ -405,7 +398,6 @@ we want to write someday.
Cheetah vs. PHPLib's Template class
-----------------------------------
-(comparisons.php)
PHPLib ((http://phplib.netuse.de/) is a collection of classes for
various web objects (authentication, shopping cart, sessions, etc),
@@ -471,7 +463,6 @@ too. Differences from Cheetah:
Cheetah vs. PSP, PHP, ASP, JSP, Embperl, etc.
---------------------------------------------
-(comparisons.pspEtc)
Webware's PSP Component
- http://webware.sourceforge.net/Webware/PSP/Docs/
diff --git a/docs/users_guide/editors.rst b/docs/users_guide/editors.rst
index 35bf0a5..a037a60 100644
--- a/docs/users_guide/editors.rst
+++ b/docs/users_guide/editors.rst
@@ -1,7 +1,6 @@
Visual Editors
==============
-(visualEditors)
This chapter is about maintaining Cheetah templates with visual
editors, and the tradeoffs between making it friendly to both text
diff --git a/docs/users_guide/errorHandling.rst b/docs/users_guide/errorHandling.rst
index 752c5b5..caf8d51 100644
--- a/docs/users_guide/errorHandling.rst
+++ b/docs/users_guide/errorHandling.rst
@@ -1,7 +1,6 @@
Error Handling
==============
-(errorHandling)
There are two ways to handle runtime errors (exceptions) in
Cheetah. The first is with the Cheetah directives that mirror
@@ -12,7 +11,6 @@ below.
#try ... #except ... #end try, #finally, and #assert
----------------------------------------------------
-(errorHandling.directives)
Cheetah's exception-handling directives are exact mirrors Python's
exception-handling statements. See Python's documentation for
@@ -61,7 +59,6 @@ try-block, but can appear in nested try-blocks.
#errorCatcher and ErrorCatcher objects
--------------------------------------
-(errorHandling.errorCatcher)
Syntax:
diff --git a/docs/users_guide/examples.rst b/docs/users_guide/examples.rst
index 7304cd1..0107c54 100644
--- a/docs/users_guide/examples.rst
+++ b/docs/users_guide/examples.rst
@@ -1,7 +1,6 @@
Examples
========
-(examples)
The Cheetah distribution comes with an 'examples' directory. Browse
the files in this directory and its subdirectories for examples of
diff --git a/docs/users_guide/flowControl.rst b/docs/users_guide/flowControl.rst
index dbaecd3..89d3ef1 100644
--- a/docs/users_guide/flowControl.rst
+++ b/docs/users_guide/flowControl.rst
@@ -1,12 +1,10 @@
Flow Control
============
-(flowControl)
#for ... #end for
-----------------
-(flowControl.for)
Syntax:
@@ -81,7 +79,6 @@ for loop:
#repeat ... #end repeat
-----------------------
-(flowControl.repeat)
Syntax:
@@ -127,7 +124,6 @@ uses a new local variable for every instance of {#repeat}.
#while ... #end while
---------------------
-(flowControl.while)
Syntax:
@@ -151,7 +147,6 @@ until the computer runs out of memory.
#if ... #else if ... #else ... #end if
--------------------------------------
-(flowControl.if)
Syntax:
@@ -218,7 +213,6 @@ which is equivalent to Perl's and C's {?:} operator.
#unless ... #end unless
-----------------------
-(flowControl.unless)
Syntax:
@@ -245,7 +239,6 @@ If you need those, use {#if} instead.
#break and #continue
--------------------
-(flowControl.break)
Syntax:
@@ -284,7 +277,6 @@ In this example the loop will exit if it finds a name that equals
#pass
-----
-(flowControl.pass)
Syntax:
@@ -313,7 +305,6 @@ The following example does nothing if only $A is true
#stop
-----
-(flowControl.stop)
Syntax:
@@ -371,7 +362,6 @@ will print
#return
-------
-(flowControl.return)
Syntax:
diff --git a/docs/users_guide/gettingStarted.rst b/docs/users_guide/gettingStarted.rst
index de4159f..90aac8f 100644
--- a/docs/users_guide/gettingStarted.rst
+++ b/docs/users_guide/gettingStarted.rst
@@ -1,12 +1,10 @@
Getting Started
===============
-(gettingStarted)
Requirements
------------
-(gettingStarted.requirements)
Cheetah requires Python release 2.7 (there are plans to support 3.4+).
It is known to run on Linux, Windows, FreeBSD and Solaris,
@@ -22,7 +20,6 @@ Cheetah can use an additional module Markdown but it's not strictly required.
Installation
------------
-(gettingStarted.install)
To install Cheetah in your system-wide Python library:
@@ -63,7 +60,6 @@ Python to find Cheetah.
Files
-----
-(gettingstarted.files)
If you do the systemwide install, all Cheetah modules are installed
in the { site-packages/Cheetah/} subdirectory of your standard
@@ -77,7 +73,6 @@ bin directory: {cheetah} (section gettingStarted.cheetah) and
Uninstalling
------------
-(gettingstarted.uninstalling)
To uninstall Cheetah, merely delete the site-packages/Cheetah/
directory. Then delete the "cheetah" and "cheetah-compile" commands
@@ -86,7 +81,6 @@ from whichever bin/ directory they were put in.
The 'cheetah' command
---------------------
-(gettingStarted.cheetah)
Cheetah comes with a utility {cheetah} that provides a command-line
interface to various housekeeping tasks. The command's first
@@ -115,7 +109,6 @@ The depreciated {cheetah-compile} program does the same thing as
Testing your installation
-------------------------
-(gettingStarted.test)
After installing Cheetah, you can run its self-test routine to
verify it's working properly on your system. Change directory to
@@ -170,7 +163,6 @@ installation:
Quickstart tutorial
-------------------
-(gettingStarted.tutorial)
This tutorial briefly introduces how to use Cheetah from the Python
prompt. The following chapters will discuss other ways to use
diff --git a/docs/users_guide/inheritanceEtc.rst b/docs/users_guide/inheritanceEtc.rst
index e0bb125..419b9de 100644
--- a/docs/users_guide/inheritanceEtc.rst
+++ b/docs/users_guide/inheritanceEtc.rst
@@ -1,12 +1,10 @@
Import, Inheritance, Declaration and Assignment
===============================================
-(inheritanceEtc)
#import and #from directives
----------------------------
-(inheritanceEtc.import)
Syntax:
@@ -36,7 +34,6 @@ After the above imports, {$math}, {$mathModule}, {$sin}, {$cos} and
#extends
--------
-(inheritanceEtc.extends)
Syntax:
@@ -154,7 +151,6 @@ as in step 2 above. Read the next section to understand what
#implements
-----------
-(inheritanceEtc.implements)
Syntax:
@@ -225,7 +221,6 @@ first} thing you should think is,
#set
----
-(inheritanceEtc.set)
Syntax:
@@ -292,7 +287,6 @@ prevent surprises.
#del
----
-(inheritanceEtc.del)
Syntax:
@@ -315,7 +309,6 @@ other type of variable.
#attr
-----
-(inheritanceEtc.attr)
Syntax:
@@ -349,7 +342,6 @@ compiled into .py template modules):
#def
----
-(inheritanceEtc.def)
Syntax:
@@ -449,7 +441,6 @@ the subclass method that will be called.
#block ... #end block
---------------------
-(inheritanceEtc.block)
The {#block} directive allows you to mark a section of your
template that can be selectively reimplemented in a subclass. It is
diff --git a/docs/users_guide/language.rst b/docs/users_guide/language.rst
index 679fe7b..b2af603 100644
--- a/docs/users_guide/language.rst
+++ b/docs/users_guide/language.rst
@@ -4,7 +4,6 @@
Language Overview
=================
-(language)
Cheetah's basic syntax was inspired by the Java-based template
engines Velocity and WebMacro. It has two types of tags: {
@@ -49,7 +48,6 @@ don't need the backslash.
Language Constructs - Summary
-----------------------------
-(language.constructs)
#. Comments and documentation strings
@@ -193,7 +191,6 @@ chapters.
Placeholder Syntax Rules
------------------------
-(language.placeholders.syntax)
- Placeholders follow the same syntax rules as Python variables
@@ -282,7 +279,6 @@ These are not $placeholders but are treated as literal text:
Where can you use placeholders?
-------------------------------
-(language.placeholders.positions)
There are three places you can use placeholders: top-level
position, expression position and LVALUE position. Each has
@@ -329,7 +325,6 @@ The output of course is:
Are all those dollar signs really necessary?
--------------------------------------------
-(language.placeholders.dollar-signs)
{$} is a "smart variable prefix". When Cheetah sees {$}, it
determines both the variable's position and whether it's a
@@ -367,7 +362,6 @@ list comprehension: if you type {$x}, Cheetah will miscompile it.
NameMapper Syntax
-----------------
-(language.namemapper)
One of our core aims for Cheetah was to make it easy for
non-programmers to use. Therefore, Cheetah uses a simplified syntax
@@ -387,7 +381,6 @@ ever want to turn it off.
Example
~~~~~~~
-(language.namemapper.example)
Consider this scenario:
@@ -439,7 +432,6 @@ isn't the point of this example.
Dictionary Access
~~~~~~~~~~~~~~~~~
-(language.namemapper.dict)
NameMapper syntax allows access to dictionary items with the same
dotted notation used to access object attributes in Python. This
@@ -458,7 +450,6 @@ Python identifiers.
Autocalling
~~~~~~~~~~~
-(language.namemapper.autocalling)
Cheetah automatically detects functions and methods in Cheetah
$variables and calls them if the parentheses have been left off.
@@ -519,7 +510,6 @@ Further notes:
Namespace cascading and the searchList
--------------------------------------
-(language.searchList)
When Cheetah maps a variable name in a template to a Python value,
it searches several namespaces in order:
@@ -588,7 +578,6 @@ Cheetah namespaces.
Missing Values
--------------
-(language.namemapper.missing)
If NameMapper can not find a Python value for a Cheetah variable
name, it will raise the NameMapper.NotFound exception. You can use
@@ -605,7 +594,6 @@ raised.
Directive Syntax Rules
----------------------
-(language.directives.syntax)
Directive tags begin with a hash character (#) and are used for
comments, loops, conditional blocks, includes, and all other
diff --git a/docs/users_guide/libraries.rst b/docs/users_guide/libraries.rst
index cbdeb14..ae68110 100644
--- a/docs/users_guide/libraries.rst
+++ b/docs/users_guide/libraries.rst
@@ -1,7 +1,6 @@
Batteries included: templates and other libraries
=================================================
-(libraries)
Cheetah comes "batteries included" with libraries of templates,
functions, classes and other objects you can use in your own
@@ -21,7 +20,6 @@ include something you want.
ErrorCatchers
-------------
-(libraries.ErrorCatchers)
Module {Cheetah.ErrorCatchers} contains error-handling classes
suitable for the {#errorCatcher} directive. These are debugging
@@ -32,7 +30,6 @@ catchers bundled with Cheetah.
FileUtils
---------
-(libraries.FileUtils)
Module {Cheetah.FileUtils} contains generic functions and classes
for doing bulk search-and-replace on several files, and for finding
@@ -42,7 +39,6 @@ pattern.
Filters
-------
-(libraries.Filters)
Module {Filters} contains filters suitable for the {#Filter}
directive. See section output.filter for a description of the
@@ -51,7 +47,6 @@ filters bundled with Cheetah.
SettingsManager
---------------
-(libraries.SettingsManager)
The {SettingsManager} class in the {Cheetah.SettingsManager} module
is a baseclass that provides facilities for managing application
@@ -92,7 +87,6 @@ applications. See the source code and docstrings in the file
Templates
---------
-(libraries.templates)
Package {Cheetah.Templates} contains stock templates that you can
either use as is, or extend by using the {#def} directive to
@@ -103,7 +97,6 @@ libraries.templates.skeletonPage. (Contributed by Tavis Rudd.)
Tools
-----
-(libraries.Tools)
Package {Cheetah.Tools} contains functions and classes contributed
by third parties. Some are Cheetah-specific but others are generic
@@ -162,7 +155,6 @@ Current Tools include:
Utils
-----
-(libraries.Utils)
Package {Cheetah.Utils} contains non-Cheetah-specific functions and
classes that are imported by other Cheetah components. Many of
@@ -199,7 +191,6 @@ Current Utils include:
Cheetah.Templates.SkeletonPage
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-(libraries.templates.skeletonPage)
A stock template class that may be useful for web developers is
defined in the {Cheetah.Templates.SkeletonPage} module. The
diff --git a/docs/users_guide/links.rst b/docs/users_guide/links.rst
index 1927ff8..02f6143 100644
--- a/docs/users_guide/links.rst
+++ b/docs/users_guide/links.rst
@@ -1,7 +1,6 @@
Useful Web Links
================
-(links)
See the wiki for more links. (The wiki is also updated more often
than this chapter is.)
@@ -9,7 +8,6 @@ than this chapter is.)
Cheetah Links
-------------
-(links.cheetah)
Home Page, issue tracker
- https://github.com/CheetahTemplate3/cheetah3
@@ -24,7 +22,6 @@ Questions can also be asked and answered on `StackOverflow
Third-party Cheetah Stuff
-------------------------
-(links.thirdParty)
- Steve Howell has written a photo viewer using Python.
@@ -34,7 +31,6 @@ Third-party Cheetah Stuff
Webware Links
-------------
-(links.webware)
Home Page
- https://cito.github.io/w4py/
@@ -52,7 +48,6 @@ Mailing List Subscription Page
Python Links
------------
-(links.python)
Home Page
- http://www.python.org/
@@ -67,12 +62,10 @@ Python Cookbook
Other Useful Links
------------------
-(links.other)
Python Database Modules and Open Source Databases
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-(links.database)
Python Database Topic Guide
- http://python.org/topics/database/
@@ -90,7 +83,6 @@ A comparison of PostgreSQL and MySQL
Other Template Systems
~~~~~~~~~~~~~~~~~~~~~~
-(links.other.templateSystems)
Python Wiki
- https://wiki.python.org/moin/Templating
@@ -99,7 +91,6 @@ Python Wiki
Other Internet development frameworks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-(links.internet)
ZOPE (Z Object Publishing Environment)
- http://zope.org/
diff --git a/docs/users_guide/nonHtml.rst b/docs/users_guide/nonHtml.rst
index 19f9667..5f84594 100644
--- a/docs/users_guide/nonHtml.rst
+++ b/docs/users_guide/nonHtml.rst
@@ -1,14 +1,12 @@
Non-HTML Output
===============
-(nonHTML)
Cheetah can also output any other text format besides HTML.
Python source code
------------------
-(nonHTML.python)
To be written. We're in the middle of working on an autoindenter to
make it easier to encode Python indentation in a Cheetah template.
diff --git a/docs/users_guide/otherHtml.rst b/docs/users_guide/otherHtml.rst
index eeceaab..fdba38d 100644
--- a/docs/users_guide/otherHtml.rst
+++ b/docs/users_guide/otherHtml.rst
@@ -1,7 +1,6 @@
non-Webware HTML output
=======================
-(otherHTML)
Cheetah can be used with all types of HTML output, not just with
Webware.
@@ -9,7 +8,6 @@ Webware.
Static HTML Pages
-----------------
-(otherHTML.static)
Some sites like Linux Gazette (http://www.linuxgazette.com/)
require completely static pages because they are mirrored on
@@ -28,7 +26,6 @@ encapsulate these steps.
CGI scripts
-----------
-(otherHTML)
Unlike Webware servlets, which don't have to worry about the HTTP
headers, CGI scripts must emit their own headers. To make a
diff --git a/docs/users_guide/output.rst b/docs/users_guide/output.rst
index d7fb8e0..590c752 100644
--- a/docs/users_guide/output.rst
+++ b/docs/users_guide/output.rst
@@ -4,12 +4,10 @@
Generating, Caching and Filtering Output
========================================
-(output)
Output from complex expressions: #echo
--------------------------------------
-(output.echo)
Syntax:
@@ -33,7 +31,6 @@ This produces:
Executing expressions without output: #silent
---------------------------------------------
-(output.silent)
Syntax:
@@ -59,7 +56,6 @@ template.
One-line #if
------------
-(output.oneLineIf)
Syntax:
@@ -85,12 +81,10 @@ same line.
Caching Output
--------------
-(output.caching)
Caching individual placeholders
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-(output.caching.placeholders)
By default, the values of each $placeholder is retrieved and
interpolated for every request. However, it's possible to cache the
@@ -139,7 +133,6 @@ cached regions, which will be described next.
Caching entire regions
~~~~~~~~~~~~~~~~~~~~~~
-(output.caching.regions)
Syntax:
@@ -218,7 +211,6 @@ varyByBrowser output caching keywords.
#raw
----
-(output.raw)
Syntax:
@@ -240,7 +232,6 @@ Cheetah doesn't know what a font is.
#include
--------
-(output.include)
Syntax:
@@ -296,7 +287,6 @@ unbalanced constructs in include files.)
#slurp
------
-(output.slurp)
Syntax:
@@ -324,7 +314,6 @@ outputs:
#indent
-------
-(output.indent)
This directive is not implemented yet. When/if it's completed, it
will allow you to
@@ -351,7 +340,6 @@ the TODO file in the Cheetah source distribution.
Ouput Filtering and #filter
---------------------------
-(output.filter)
Syntax:
diff --git a/docs/users_guide/parserInstructions.rst b/docs/users_guide/parserInstructions.rst
index b187e7f..f59ee3e 100644
--- a/docs/users_guide/parserInstructions.rst
+++ b/docs/users_guide/parserInstructions.rst
@@ -1,12 +1,10 @@
Instructions to the Parser/Compiler
===================================
-(parserInstructions)
#breakpoint
-----------
-(parserInstructions.breakpoint)
Syntax:
@@ -27,7 +25,6 @@ difference is that {#breakpoint} operates at compile time, while
#compiler-settings
------------------
-(parserInstructions.compiler-settings)
Syntax:
diff --git a/docs/users_guide/tipsAndTricks.rst b/docs/users_guide/tipsAndTricks.rst
index 8e06952..4f8d02c 100644
--- a/docs/users_guide/tipsAndTricks.rst
+++ b/docs/users_guide/tipsAndTricks.rst
@@ -1,7 +1,6 @@
Tips, Tricks and Troubleshooting
================================
-(tips)
This chapter contains short stuff that doesn't fit anywhere else.
@@ -13,7 +12,6 @@ help, ask on the mailing list.
Placeholder Tips
----------------
-(tips.placeholder)
Here's how to do certain important lookups that may not be obvious.
For each, we show first the Cheetah expression and then the Python
@@ -79,7 +77,6 @@ the searchList; instead, copy the needed variables into your own
Diagnostic Output
-----------------
-(tips.diagnostic)
If you need send yourself some debugging output, you can use
{#silent} to output it to standard error:
@@ -90,12 +87,10 @@ If you need send yourself some debugging output, you can use
#silent $sys.stderr.write("Is 'unknown' in the searchList? " +
$getVar("unknown", "No.") + "\n" )
-(Tip contributed by Greg Czajkowski.)
When to use Python methods
--------------------------
-(tips.pythonMethods)
You always have a choice whether to code your methods as Cheetah
{#def} methods or Python methods (the Python methods being located
@@ -139,7 +134,6 @@ to your Cheetah method, you'll have to do it another way.
Calling superclass methods, and why you have to
-----------------------------------------------
-(tips.callingSuperclassMethods)
If your template or pure Python class overrides a standard method
or attribute of {Template} or one of its base classes, you should
@@ -207,7 +201,6 @@ argument sequence is different than {super} uses.
All methods
-----------
-(tips.allMethods)
Here is a list of all the standard methods and attributes that can
be accessed from a placeholder. Some of them exist for you to call,
@@ -389,7 +382,6 @@ The same caveats about overriding these methods apply.
Optimizing templates
--------------------
-(tips.optimizing)
Here are some things you can do to make your templates fill faster
and user fewer CPU cycles. Before you put a lot of energy into
@@ -430,7 +422,6 @@ method, which is more wordy, and tedious.
PSP-style tags
--------------
-(tips.PSP)
{<%= ... %>} and {<% ... %>} allow an escape to Python syntax
inside the template. You do not need it to use Cheetah effectively,
@@ -467,10 +458,56 @@ Note that these are PSP-{ style} tags, not PSP tags. A Cheetah
template is not a PSP document, and you can't use PSP commands in
it.
+Calling one template from another
+---------------------------------
+
+Cheetah templates are really python modules in disguise. I.e., when
+Cheetah loads a template it compiles it to python code and then to byte
+code. Every template is compiled as a single class. The thing is,
+neither the source code nor byte code are saved to files automatically.
+
+There are a few ways to allow a user to import one template (python
+module!) from another.
+
+1. A user can compile templates to `*.py` files using `cheetah compile`
+command line program. Then import works at the Python level.
+
+To semi-automatically compile all templates after editing them one can
+use the following `Makefile` (GNU flavour)::
+
+ .SUFFIXES: # Clear the suffix list
+ .SUFFIXES: .py .tmpl
+
+ %.py: %.tmpl
+ cheetah compile --nobackup $<
+ python -m compile $@
+
+ templates = $(shell echo \*.tmpl)
+ modules = $(patsubst %.tmpl,%.py,$(templates))
+
+ .PHONY: all
+ all: $(modules)
+
+(Don't forget - makefiles require indent with tabs, not spaces.)
+
+2. Subvert Python import to make Cheetah import directly from `*.tmpl`
+files using `import hooks <../api/Cheetah.ImportHooks.html>`_.
+
+Example code::
+
+ from Cheetah import ImportHooks
+ ImportHooks.install()
+
+ import sys
+ sys.path.insert(0, 'path/to/template_dir') # or sys.path.append
+
+ImportHooks try to import from `*.pyc`, `*.py` and `*.tmpl` - whatever
+is found first. ImportHooks automatically compile `*.tmpl` to `*.py` and
+`*.pyc`.
+
Makefiles
---------
-(tips.Makefile)
If your project has several templates and you get sick of typing
"cheetah compile FILENAME.tmpl" all the time-much less remembering
@@ -514,7 +551,6 @@ doesn't produce an output file with the same name as the target.
Using Cheetah in a Multi-Threaded Application
---------------------------------------------
-(tips.threads)
Template classes may be shared freely between threads. However,
template instances should not be shared unless you either:
@@ -562,7 +598,6 @@ operations listed above.
Using Cheetah with gettext
--------------------------
-(tips.gettext)
{ gettext} is a project for creating internationalized
applications. For more details, visit
diff --git a/docs/users_guide/webware.rst b/docs/users_guide/webware.rst
index bc36a2b..c385af9 100644
--- a/docs/users_guide/webware.rst
+++ b/docs/users_guide/webware.rst
@@ -1,7 +1,6 @@
Using Cheetah with Webware
==========================
-(webware)
{ Webware for Python} is a 'Python-Powered Internet Platform' that
runs servlets in a manner similar to Java servlets. { WebKit} is
@@ -24,7 +23,6 @@ to refer to the currently-running application server.
Installing Cheetah on a Webware system
--------------------------------------
-(webware.installing)
Install Cheetah after you have installed Webware, following the
instructions in chapter gettingStarted.
@@ -50,7 +48,6 @@ If Webware complains that it cannot find your servlet, make sure
Containment vs Inheritance
--------------------------
-(webware.background)
Because Cheetah's core is flexible, there are many ways to
integrate it with Webware servlets. There are two broad strategies:
@@ -91,7 +88,6 @@ Webware methods in the same object.
The Containment Approach
~~~~~~~~~~~~~~~~~~~~~~~~
-(webware.containment)
In the Containment approach, your servlet is not a template.
Instead, it it makes its own arrangements to create and use
@@ -119,7 +115,6 @@ template class in a module global variable.
The Inheritance Approach
~~~~~~~~~~~~~~~~~~~~~~~~
-(webware.inheritance)
In the Inheritance approach, your template object doubles as as
Webware servlet, thus these are sometimes called {
@@ -174,7 +169,6 @@ use redirects).
Site frameworks
---------------
-(webware.siteFrameworks)
Web sites are normally arranged hierarchically, with certain
features common to every page on the site, other features common to
@@ -214,7 +208,6 @@ in this chapter, let us know.
Directory structure
-------------------
-(webware.directoryStructure)
Here's one way to organize your files for Webware+Cheetah.
@@ -243,7 +236,6 @@ Here's one way to organize your files for Webware+Cheetah.
Initializing your template-servlet with Python code
---------------------------------------------------
-(webware.calculations)
If you need a place to initialize variables or do calculations for
your template-servlet, you can put it in an {.awake()} method
@@ -264,7 +256,6 @@ section output.silent).
Form processing
---------------
-(webware.form)
There are many ways to display and process HTML forms with Cheetah.
But basically, all form processing involves two steps.
@@ -350,7 +341,6 @@ yourself.
Form input, cookies, session variables and web server variables
---------------------------------------------------------------
-(webware.input)
General variable tips that also apply to servlets are in section
tips.placeholder.
@@ -418,7 +408,6 @@ Other useful request goodies:
.webInput()
~~~~~~~~~~~
-(webware.webInput)
From the method docstring:
@@ -567,7 +556,6 @@ From the method docstring:
More examples
-------------
-(webware.examples)
Example A - a standalone servlet
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -581,7 +569,6 @@ Example C - several servlets with a common template
Other Tips
----------
-(webware.otherTips)
If your servlet accesses external files (e.g., via an {#include}
directive), remember that the current directory is not necessarily
diff --git a/setup.cfg b/setup.cfg
index 6e25dcc..d551301 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -10,11 +10,11 @@ skip_covered = True
[easy_install]
optimize = 2
+[flake8]
+exclude = .git,.tox,Cheetah/Templates/SkeletonPage.py
+ignore = W503,W605
+
[egg_info]
tag_build =
tag_date = 0
-tag_svn_revision = 0
-
-[flake8]
-exclude = .git,.tox,Cheetah/Templates/SkeletonPage.py
diff --git a/tox.ini b/tox.ini
index 074e177..a45b662 100644
--- a/tox.ini
+++ b/tox.ini
@@ -5,15 +5,15 @@
[tox]
minversion = 2.0
-envlist = py27, py3{3,4,5,6}, py{27,34}-flake8, pypy
+envlist = py27, py3{4,5,6,7}, py{27,37}-flake8, pypy
[testenv]
basepython =
py27: {env:TOXPYTHON:python2.7}
- py33: {env:TOXPYTHON:python3.3}
py34: {env:TOXPYTHON:python3.4}
py35: {env:TOXPYTHON:python3.5}
py36: {env:TOXPYTHON:python3.6}
+ py37: {env:TOXPYTHON:python3.7}
pypy: {env:TOXPYTHON:pypy}
commands =
{envpython} --version
@@ -22,6 +22,8 @@ deps =
Markdown >= 2.0.1
pygments
passenv = CI TRAVIS TRAVIS_* APPVEYOR DISTUTILS_USE_SDK MSSdk INCLUDE LIB WINDIR
+setenv =
+ LC_CTYPE = en_US.UTF-8
[tests]
commands =
@@ -32,10 +34,6 @@ commands =
commands =
{[tests]commands}
-[testenv:py33]
-commands =
- {[tests]commands}
-
[testenv:py34]
commands =
{[tests]commands}
@@ -48,6 +46,10 @@ commands =
commands =
{[tests]commands}
+[testenv:py37]
+commands =
+ {[tests]commands}
+
[testenv:py27-flake8]
deps =
flake8
@@ -55,7 +57,7 @@ commands =
{[testenv]commands}
flake8 .
-[testenv:py34-flake8]
+[testenv:py37-flake8]
deps =
flake8
commands =