summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Tyler Ballance <tyler@slide.com>2009-07-16 15:45:30 -0700
committerR. Tyler Ballance <tyler@slide.com>2009-07-16 15:45:30 -0700
commit7c3f027fd7f7c31750e693dcf7f9a49d751ea2d7 (patch)
tree11737f795f2f9799883be891c8fe3e3a3ccc7811
parent2a8c22e911bc8b198614b25acd9e298fca572a0d (diff)
downloadpython-cheetah-7c3f027fd7f7c31750e693dcf7f9a49d751ea2d7.tar.gz
Add generated documentation
-rw-r--r--chep.html129
-rw-r--r--cheps/1_chep.html154
-rw-r--r--cheps/2_import.html246
-rw-r--r--cheps/3_super.html159
-rw-r--r--developers.html157
-rw-r--r--documentation.html135
-rw-r--r--download.html131
-rw-r--r--genindex.html90
-rw-r--r--index.html184
-rw-r--r--objects.inv3
-rw-r--r--recipes/inheritance.html172
-rw-r--r--recipes/precompiled.html172
-rw-r--r--recipes/staticmethod.html153
-rw-r--r--recipes/writing_a_recipe.html111
-rw-r--r--roadmap.html140
-rw-r--r--search.html92
-rw-r--r--searchindex.js1
-rw-r--r--static/basic.css414
-rw-r--r--static/contents.pngbin0 -> 202 bytes
-rw-r--r--static/doctools.js232
-rw-r--r--static/file.pngbin0 -> 392 bytes
-rw-r--r--static/jquery.js32
-rw-r--r--static/minus.pngbin0 -> 199 bytes
-rw-r--r--static/navigation.pngbin0 -> 218 bytes
-rw-r--r--static/plus.pngbin0 -> 199 bytes
-rw-r--r--static/pygments.css61
-rw-r--r--static/searchtools.js467
-rw-r--r--static/sphinxdoc.css327
28 files changed, 3762 insertions, 0 deletions
diff --git a/chep.html b/chep.html
new file mode 100644
index 0000000..6ad0bbb
--- /dev/null
+++ b/chep.html
@@ -0,0 +1,129 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="static/jquery.js"></script>
+ <script type="text/javascript" src="static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="index.html" />
+ <link rel="next" title="(#1) CHEP Purpose and Guidelines" href="cheps/1_chep.html" />
+ <link rel="prev" title="Writing a “Recipe”" href="recipes/writing_a_recipe.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="cheps/1_chep.html" title="(#1) CHEP Purpose and Guidelines"
+ 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><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">Cheetah Enhancement Proposals</a><ul>
+<li><a class="reference external" href="#existing-cheps">Existing CHEPs</a><ul>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="recipes/writing_a_recipe.html"
+ title="previous chapter">Writing a &#8220;Recipe&#8221;</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>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="sources/chep.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="cheps/1_chep.html">(#1) CHEP Purpose and Guidelines</a></li>
+<li class="toctree-l1"><a class="reference external" href="cheps/2_import.html">(#2) Conditionalized #import behavior</a></li>
+<li class="toctree-l1"><a class="reference external" href="cheps/3_super.html">(#3) Exposing of super() and self via Template searchList</a></li>
+</ul>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related">
+ <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="cheps/1_chep.html" title="(#1) CHEP Purpose and Guidelines"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="recipes/writing_a_recipe.html" title="Writing a “Recipe”"
+ >previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/cheps/1_chep.html b/cheps/1_chep.html
new file mode 100644
index 0000000..9a16914
--- /dev/null
+++ b/cheps/1_chep.html
@@ -0,0 +1,154 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="../static/jquery.js"></script>
+ <script type="text/javascript" src="../static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="../index.html" />
+ <link rel="up" title="Cheetah Enhancement Proposals" href="../chep.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">
+ <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="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><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../chep.html" accesskey="U">Cheetah Enhancement Proposals</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="../index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">(#1) CHEP Purpose and Guidelines</a><ul>
+<li><a class="reference external" href="#abstract">Abstract</a></li>
+<li><a class="reference external" 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>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../sources/cheps/1_chep.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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"><th class="field-name">CHEP:</th><td class="field-body">1</td>
+</tr>
+<tr class="field"><th class="field-name">Title:</th><td class="field-body">CHEP Purpose and Guidelines</td>
+</tr>
+<tr class="field"><th class="field-name">Version:</th><td class="field-body">1</td>
+</tr>
+<tr class="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"><th class="field-name">Status:</th><td class="field-body">Active</td>
+</tr>
+<tr class="field"><th class="field-name">Type:</th><td class="field-body">Process</td>
+</tr>
+<tr class="field"><th class="field-name">Content-Type:</th><td class="field-body">text/x-rst</td>
+</tr>
+<tr class="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 &#8220;purpose and guidelines&#8221; 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">
+ <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="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><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../chep.html" >Cheetah Enhancement Proposals</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/cheps/2_import.html b/cheps/2_import.html
new file mode 100644
index 0000000..c34d875
--- /dev/null
+++ b/cheps/2_import.html
@@ -0,0 +1,246 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="../static/jquery.js"></script>
+ <script type="text/javascript" src="../static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="../index.html" />
+ <link rel="up" title="Cheetah Enhancement Proposals" href="../chep.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">
+ <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="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><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../chep.html" accesskey="U">Cheetah Enhancement Proposals</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="../index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">(#2) Conditionalized #import behavior</a><ul>
+<li><a class="reference external" href="#abstract">Abstract</a></li>
+<li><a class="reference external" href="#motivation">Motivation</a></li>
+<li><a class="reference external" href="#specification">Specification</a></li>
+<li><a class="reference external" href="#rationale">Rationale</a></li>
+<li><a class="reference external" href="#backwards-compatibility">Backwards Compatibility</a></li>
+<li><a class="reference external" href="#reference-implementation">Reference Implementation</a></li>
+<li><a class="reference external" 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>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../sources/cheps/2_import.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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"><th class="field-name">CHEP:</th><td class="field-body">2</td>
+</tr>
+<tr class="field"><th class="field-name">Title:</th><td class="field-body">Conditionalized #import behavior</td>
+</tr>
+<tr class="field"><th class="field-name">Version:</th><td class="field-body">1</td>
+</tr>
+<tr class="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"><th class="field-name">Status:</th><td class="field-body">Draft</td>
+</tr>
+<tr class="field"><th class="field-name">Type:</th><td class="field-body">Standards Track</td>
+</tr>
+<tr class="field"><th class="field-name">Content-Type:</th><td class="field-body">text/x-rst</td>
+</tr>
+<tr class="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
+&#8220;traditional&#8221; handling for #from/#import (hereafter referred to as &#8220;module imports&#8221;)
+is that the generated import statements shall all be relocated to
+the top of the generated module&#8217;s source code, i.e.</p>
+<div class="highlight-python"><pre>#import cjson
+
+Hello $cjson.encode([1, 2, 3])</pre>
+</div>
+<p>Will result in generated module code along the lines of:</p>
+<div class="highlight-python"><div class="highlight"><pre><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="s">&#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="mf">1</span><span class="p">,</span> <span class="mf">2</span><span class="p">,</span> <span class="mf">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 &#8220;function imports&#8221;) in the generated
+code, with this block of Cheetah for example:</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="c">#def aFunction(arg)</span>
+ <span class="c">#try</span>
+ <span class="c">#from hashlib import md5</span>
+ <span class="c">#except ImportError</span>
+ <span class="c">#from md5 import md5</span>
+ <span class="c">#end try</span>
+ <span class="c">#return $md5.new(arg).hexdigest()</span>
+<span class="c">#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-python"><div class="highlight"><pre><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="kn">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="kn">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 &#8220;intelligent&#8221;. For module imports, the
+&#8220;traditional&#8221; 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 &#8220;function import&#8221; was introduced in Cheetah v2.1.0
+and quickly retrofitted to &#8220;live&#8221; 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 &#8220;pythonic&#8221; import
+functionality (i.e. &#8220;function import&#8221; also known as &#8220;inline imports&#8221;) 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&#8217;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">
+ <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="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><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../chep.html" >Cheetah Enhancement Proposals</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/cheps/3_super.html b/cheps/3_super.html
new file mode 100644
index 0000000..0de3eab
--- /dev/null
+++ b/cheps/3_super.html
@@ -0,0 +1,159 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="../static/jquery.js"></script>
+ <script type="text/javascript" src="../static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="../index.html" />
+ <link rel="up" title="Cheetah Enhancement Proposals" href="../chep.html" />
+ <link rel="prev" title="(#2) Conditionalized #import behavior" href="2_import.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="2_import.html" title="(#2) Conditionalized #import behavior"
+ accesskey="P">previous</a> |</li>
+ <li><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../chep.html" accesskey="U">Cheetah Enhancement Proposals</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="../index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">(#3) Exposing of super() and self via Template searchList</a><ul>
+<li><a class="reference external" href="#abstract">Abstract</a></li>
+<li><a class="reference external" href="#specification">Specification</a></li>
+<li><a class="reference external" href="#motivation">Motivation</a></li>
+<li><a class="reference external" href="#rationale">Rationale</a></li>
+<li><a class="reference external" href="#backwards-compatibility">Backwards Compatibility</a></li>
+<li><a class="reference external" href="#reference-implementation">Reference Implementation</a></li>
+<li><a class="reference external" 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>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../sources/cheps/3_super.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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"><th class="field-name">CHEP:</th><td class="field-body">3</td>
+</tr>
+<tr class="field"><th class="field-name">Title:</th><td class="field-body">Exposing of super() and self via Template searchList</td>
+</tr>
+<tr class="field"><th class="field-name">Version:</th><td class="field-body">1</td>
+</tr>
+<tr class="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"><th class="field-name">Status:</th><td class="field-body">Draft</td>
+</tr>
+<tr class="field"><th class="field-name">Type:</th><td class="field-body">Standards Track</td>
+</tr>
+<tr class="field"><th class="field-name">Content-Type:</th><td class="field-body">text/x-rst</td>
+</tr>
+<tr class="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">
+ <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="2_import.html" title="(#2) Conditionalized #import behavior"
+ >previous</a> |</li>
+ <li><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../chep.html" >Cheetah Enhancement Proposals</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/developers.html b/developers.html
new file mode 100644
index 0000000..967eb6f
--- /dev/null
+++ b/developers.html
@@ -0,0 +1,157 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="static/jquery.js"></script>
+ <script type="text/javascript" src="static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="index.html" />
+ <link rel="next" title="Downloading Cheetah" href="download.html" />
+ <link rel="prev" title="Cheetah, the Python-Powered Template Engine" href="index.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="download.html" title="Downloading Cheetah"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="index.html" title="Cheetah, the Python-Powered Template Engine"
+ accesskey="P">previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">Contributing to Cheetah</a><ul>
+<li><a class="reference external" href="#getting-the-code">Getting the Code</a></li>
+<li><a class="reference external" href="#development-process">Development Process</a></li>
+<li><a class="reference external" href="#filing-bugs">Filing Bugs</a></li>
+</ul>
+</li>
+</ul>
+
+ <h4>Previous topic</h4>
+ <p class="topless"><a href="index.html"
+ title="previous chapter">Cheetah, the Python-Powered Template Engine</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="download.html"
+ title="next chapter">Downloading Cheetah</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="sources/developers.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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 join the <a class="reference external" href="http://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss">mailing list</a></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/cheetahtemplate/cheetah">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&#8217;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="http://bugs.cheetahtemplate.org">Cheetah 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 <a class="reference external" href="http://hudson-ci.org">Hudson</a> for
+automating builds and test runs on a number of platforms (see: <a class="reference external" href="http://hudson.cheetahtemplate.org">Cheetah&#8217;s Hudson</a>).
+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&#8217;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="http://bugs.cheetahtemplate.org">Cheetah 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&#8217;re using</li>
+<li>The version of Python you&#8217;re using</li>
+<li>The operating system you&#8217;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">
+ <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="download.html" title="Downloading Cheetah"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="index.html" title="Cheetah, the Python-Powered Template Engine"
+ >previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/documentation.html b/documentation.html
new file mode 100644
index 0000000..13d3976
--- /dev/null
+++ b/documentation.html
@@ -0,0 +1,135 @@
+<!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>User Documentation &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="static/jquery.js"></script>
+ <script type="text/javascript" src="static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="index.html" />
+ <link rel="next" title="Basic Inheritance" href="recipes/inheritance.html" />
+ <link rel="prev" title="Cheetah Roadmap" href="roadmap.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="recipes/inheritance.html" title="Basic Inheritance"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="roadmap.html" title="Cheetah Roadmap"
+ accesskey="P">previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">User Documentation</a><ul>
+<li><a class="reference external" href="#simple-recipes">Simple Recipes</a><ul>
+</ul>
+</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="recipes/inheritance.html"
+ title="next chapter">Basic Inheritance</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="sources/documentation.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <div class="section" id="user-documentation">
+<h1>User Documentation<a class="headerlink" href="#user-documentation" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="simple-recipes">
+<h2>Simple Recipes<a class="headerlink" href="#simple-recipes" title="Permalink to this headline">¶</a></h2>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="recipes/inheritance.html">Basic Inheritance</a><ul>
+<li class="toctree-l2"><a class="reference external" href="recipes/inheritance.html#introduction">Introduction</a></li>
+<li class="toctree-l2"><a class="reference external" href="recipes/inheritance.html#cheetah-inheriting-from-python">Cheetah inheriting from Python</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference external" href="recipes/precompiled.html">Precompiled Templates</a><ul>
+<li class="toctree-l2"><a class="reference external" href="recipes/precompiled.html#why-bother">Why bother?</a></li>
+<li class="toctree-l2"><a class="reference external" href="recipes/precompiled.html#basic-pre-compilation">Basic Pre-compilation</a></li>
+<li class="toctree-l2"><a class="reference external" href="recipes/precompiled.html#importing-and-lookup">Importing and lookup</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference external" href="recipes/staticmethod.html">&#64;staticmethod and &#64;classmethod</a></li>
+<li class="toctree-l1"><a class="reference external" href="recipes/writing_a_recipe.html">Writing a &#8220;Recipe&#8221;</a></li>
+</ul>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related">
+ <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="recipes/inheritance.html" title="Basic Inheritance"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="roadmap.html" title="Cheetah Roadmap"
+ >previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/download.html b/download.html
new file mode 100644
index 0000000..b289426
--- /dev/null
+++ b/download.html
@@ -0,0 +1,131 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="static/jquery.js"></script>
+ <script type="text/javascript" src="static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="index.html" />
+ <link rel="next" title="Cheetah Roadmap" href="roadmap.html" />
+ <link rel="prev" title="Contributing to Cheetah" href="developers.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="roadmap.html" title="Cheetah Roadmap"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="developers.html" title="Contributing to Cheetah"
+ accesskey="P">previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">Downloading Cheetah</a><ul>
+<li><a class="reference external" href="#download-v2-2-1">Download v2.2.1</a></li>
+</ul>
+</li>
+</ul>
+
+ <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="roadmap.html"
+ title="next chapter">Cheetah Roadmap</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="sources/download.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <div class="section" id="downloading-cheetah">
+<h1>Downloading Cheetah<a class="headerlink" href="#downloading-cheetah" title="Permalink to this headline">¶</a></h1>
+<p>The most recent stable release of Cheetah <strong>v2.2.1</strong> which was released on
+June 1st, 2009.</p>
+<div class="section" id="download-v2-2-1">
+<h2>Download v2.2.1<a class="headerlink" href="#download-v2-2-1" title="Permalink to this headline">¶</a></h2>
+<ul class="simple">
+<li><a class="reference external" href="http://github.com/cheetahtemplate/cheetah/tarball/v2.2.1">v2.2.1 tarball</a></li>
+<li><a class="reference external" href="http://github.com/cheetahtemplate/cheetah/zipball/v2.2.1">v2.2.1 zip</a></li>
+</ul>
+<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/cheetahtemplate/cheetah/downloads">cheetahtemplate GitHub page</a></p>
+<p><strong>Note to Windows users:</strong> You should install the compiled version of Cheetah&#8217;s
+NameMapper. It is dramatically faster than the pure Python version, in the source
+tree you can find compiled versions for Python 2.4: namemapper.pyd2.4,
+Python 2.5: namemapper.pyd2.5. Install it wherever your system puts
+Cheetah/NameMapper.py. Strip the version numbers off the filename.</p>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related">
+ <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="roadmap.html" title="Cheetah Roadmap"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="developers.html" title="Contributing to Cheetah"
+ >previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/genindex.html b/genindex.html
new file mode 100644
index 0000000..3c5f2a7
--- /dev/null
+++ b/genindex.html
@@ -0,0 +1,90 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="static/jquery.js"></script>
+ <script type="text/javascript" src="static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="index.html" />
+ </head>
+ <body>
+ <div class="related">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="" title="General Index"
+ accesskey="I">index</a></li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+
+
+
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+
+ <h1 id="index">Index</h1>
+
+
+
+ <hr />
+
+
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="" title="General Index"
+ >index</a></li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..eb0640b
--- /dev/null
+++ b/index.html
@@ -0,0 +1,184 @@
+<!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, the Python-Powered Template Engine &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="static/jquery.js"></script>
+ <script type="text/javascript" src="static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="" />
+ <link rel="next" title="Contributing to Cheetah" href="developers.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="developers.html" title="Contributing to Cheetah"
+ accesskey="N">next</a> |</li>
+ <li><a href="">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">Cheetah, the Python-Powered Template Engine</a><ul>
+<li><a class="reference external" href="#introduction">Introduction</a><ul>
+<li><a class="reference external" href="#talk-cheetah">Talk Cheetah</a></li>
+<li><a class="reference external" href="#contents">Contents</a><ul>
+</ul>
+</li>
+</ul>
+</li>
+<li><a class="reference external" href="#cheetah-in-a-nutshell">Cheetah in a nutshell</a></li>
+<li><a class="reference external" href="#why-cheetah">Why Cheetah?</a></li>
+<li><a class="reference external" href="#indices-and-tables">Indices and tables</a></li>
+</ul>
+</li>
+</ul>
+
+ <h4>Next topic</h4>
+ <p class="topless"><a href="developers.html"
+ title="next chapter">Contributing to Cheetah</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="sources/index.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <div class="section" id="cheetah-the-python-powered-template-engine">
+<h1>Cheetah, the Python-Powered Template Engine<a class="headerlink" href="#cheetah-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>Cheetah is an <a class="reference external" href="https://github.com/rtyler/cheetah/tree">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&#8217;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>
+<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="http://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss">Cheetah mailing list</a>
+(<em>cheetahtemplate-discuss&#64;lists.sourceforge.net</em>) or on the <strong>IRC</strong> channel:
+<strong>#cheetah</strong> on <a class="reference external" href="http://freenode.net/">Freenode</a></p>
+</div>
+<div class="section" id="contents">
+<h3>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h3>
+<ul>
+<li class="toctree-l1"><a class="reference external" href="developers.html">Contributing to Cheetah</a></li>
+<li class="toctree-l1"><a class="reference external" href="download.html">Downloading Cheetah</a></li>
+<li class="toctree-l1"><a class="reference external" href="roadmap.html">Cheetah Roadmap</a></li>
+<li class="toctree-l1"><a class="reference external" href="documentation.html">User Documentation</a></li>
+<li class="toctree-l1"><a class="reference external" href="chep.html">Cheetah Enhancement Proposals</a></li>
+</ul>
+</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&#8217;s practically
+Python. You can import, inherit and define methods just like in a regular Python
+module, since that&#8217;s what your Cheetah templates are compiled to :)</p>
+<div class="highlight-python"><pre>#from Cheetah.Template import Template
+#extends Template
+
+#set $people = [{'name' : 'Tom', 'mood' : 'Happy'}, {'name' : 'Dick',
+ 'mood' : 'Sad'}, {'name' : 'Harry', 'mood' : 'Hairy'}]
+
+&lt;strong&gt;How are you feeling?&lt;/strong&gt;
+&lt;ul&gt;
+ #for $person in $people
+ &lt;li&gt;
+ $person['name'] is $person['mood']
+ &lt;/li&gt;
+ #end for
+&lt;/ul&gt;</pre>
+</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 external" href="genindex.html"><em>Index</em></a></li>
+<li><a class="reference external" href="modindex.html"><em>Module Index</em></a></li>
+<li><a class="reference external" href="search.html"><em>Search Page</em></a></li>
+</ul>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related">
+ <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="developers.html" title="Contributing to Cheetah"
+ >next</a> |</li>
+ <li><a href="">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/objects.inv b/objects.inv
new file mode 100644
index 0000000..93fe884
--- /dev/null
+++ b/objects.inv
@@ -0,0 +1,3 @@
+# Sphinx inventory version 1
+# Project: Cheetah
+# Version: 2.2.1
diff --git a/recipes/inheritance.html b/recipes/inheritance.html
new file mode 100644
index 0000000..f9c4edf
--- /dev/null
+++ b/recipes/inheritance.html
@@ -0,0 +1,172 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="../static/jquery.js"></script>
+ <script type="text/javascript" src="../static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="../index.html" />
+ <link rel="up" title="User Documentation" href="../documentation.html" />
+ <link rel="next" title="Precompiled Templates" href="precompiled.html" />
+ <link rel="prev" title="User Documentation" href="../documentation.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="precompiled.html" title="Precompiled Templates"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="../documentation.html" title="User Documentation"
+ accesskey="P">previous</a> |</li>
+ <li><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../documentation.html" accesskey="U">User Documentation</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="../index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">Basic Inheritance</a><ul>
+<li><a class="reference external" href="#introduction">Introduction</a></li>
+<li><a class="reference external" 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">User Documentation</a></p>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="precompiled.html"
+ title="next chapter">Precompiled Templates</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../sources/recipes/inheritance.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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 &#8220;<em>mixins</em>&#8220;</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-python"><div class="highlight"><pre><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="s">&#39;Cookbook&#39;</span>
+ <span class="n">author</span> <span class="o">=</span> <span class="s">&#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="s">&#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-python"><div class="highlight"><pre><span class="c">#import cookbook</span>
+<span class="c">#extends cookbook.CookbookTemplate</span>
+<span class="c">#attr author = &#39;Tavis Rudd&#39;</span>
+
+<span class="c">## 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">
+ <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="precompiled.html" title="Precompiled Templates"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="../documentation.html" title="User Documentation"
+ >previous</a> |</li>
+ <li><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../documentation.html" >User Documentation</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/recipes/precompiled.html b/recipes/precompiled.html
new file mode 100644
index 0000000..23972c9
--- /dev/null
+++ b/recipes/precompiled.html
@@ -0,0 +1,172 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="../static/jquery.js"></script>
+ <script type="text/javascript" src="../static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="../index.html" />
+ <link rel="up" title="User Documentation" href="../documentation.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">
+ <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="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><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../documentation.html" accesskey="U">User Documentation</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="../index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">Precompiled Templates</a><ul>
+<li><a class="reference external" href="#why-bother">Why bother?</a></li>
+<li><a class="reference external" href="#basic-pre-compilation">Basic Pre-compilation</a></li>
+<li><a class="reference external" 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>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../sources/recipes/precompiled.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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&#8217;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-python"><pre>#attr title = "This is my Template"
+&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>
+<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-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">templates</span> <span class="kn">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="s">&#39;who&#39;</span> <span class="p">:</span> <span class="s">&#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 &#8220;main
+method&#8221; 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-python"><div class="highlight"><pre><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="s">&#39;who&#39;</span> <span class="p">:</span> <span class="s">&#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="s">&#39;_mainCheetahMethod_for_</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">tmpl</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__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">
+ <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="staticmethod.html" title="@staticmethod and @classmethod"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="inheritance.html" title="Basic Inheritance"
+ >previous</a> |</li>
+ <li><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../documentation.html" >User Documentation</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/recipes/staticmethod.html b/recipes/staticmethod.html
new file mode 100644
index 0000000..e527b17
--- /dev/null
+++ b/recipes/staticmethod.html
@@ -0,0 +1,153 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="../static/jquery.js"></script>
+ <script type="text/javascript" src="../static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="../index.html" />
+ <link rel="up" title="User Documentation" href="../documentation.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">
+ <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="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><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../documentation.html" accesskey="U">User Documentation</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <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 &#8220;Recipe&#8221;</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../sources/recipes/staticmethod.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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&#8217;s documentation if you&#8217;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&#8217;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-python"><pre>#def copyright()
+ #import time
+ &amp;copy; CheetahCorp, Inc. $time.strftime('%Y', time.gmtime())
+#end def</pre>
+</div>
+<p><strong>Figure 1, util.tmpl</strong></p>
+<p>Prior to version <strong>v2.2.0</strong> of Cheetah, there wasn&#8217;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 &#8220;proper&#8221; Python syntax for calling them, <strong>fig 1</strong> revisited:</p>
+<div class="highlight-python"><pre>#@staticmethod
+#def copyright()
+ #import time
+ &amp;copy; CheetahCorp, Inc. $time.strftime('%Y', time.gmtime())
+#end def</pre>
+</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-python"><pre>#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>
+<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">
+ <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="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><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../documentation.html" >User Documentation</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/recipes/writing_a_recipe.html b/recipes/writing_a_recipe.html
new file mode 100644
index 0000000..43fe6eb
--- /dev/null
+++ b/recipes/writing_a_recipe.html
@@ -0,0 +1,111 @@
+<!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” &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="../static/jquery.js"></script>
+ <script type="text/javascript" src="../static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="../index.html" />
+ <link rel="up" title="User Documentation" href="../documentation.html" />
+ <link rel="next" title="Cheetah Enhancement Proposals" href="../chep.html" />
+ <link rel="prev" title="@staticmethod and @classmethod" href="staticmethod.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="../chep.html" title="Cheetah Enhancement Proposals"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="staticmethod.html" title="@staticmethod and @classmethod"
+ accesskey="P">previous</a> |</li>
+ <li><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../documentation.html" accesskey="U">User Documentation</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <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="../chep.html"
+ title="next chapter">Cheetah Enhancement Proposals</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../sources/recipes/writing_a_recipe.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <div class="section" id="writing-a-recipe">
+<h1>Writing a &#8220;Recipe&#8221;<a class="headerlink" href="#writing-a-recipe" title="Permalink to this headline">¶</a></h1>
+<p>This document isn&#8217;t quite there yet ;)</p>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related">
+ <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="../chep.html" title="Cheetah Enhancement Proposals"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="staticmethod.html" title="@staticmethod and @classmethod"
+ >previous</a> |</li>
+ <li><a href="../index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ <li><a href="../documentation.html" >User Documentation</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/roadmap.html b/roadmap.html
new file mode 100644
index 0000000..445163e
--- /dev/null
+++ b/roadmap.html
@@ -0,0 +1,140 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="static/jquery.js"></script>
+ <script type="text/javascript" src="static/doctools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="index.html" />
+ <link rel="next" title="User Documentation" href="documentation.html" />
+ <link rel="prev" title="Downloading Cheetah" href="download.html" />
+ </head>
+ <body>
+ <div class="related">
+ <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="documentation.html" title="User Documentation"
+ accesskey="N">next</a> |</li>
+ <li class="right" >
+ <a href="download.html" title="Downloading Cheetah"
+ accesskey="P">previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ <h3><a href="index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">Cheetah Roadmap</a><ul>
+<li><a class="reference external" href="#cheetah-v2-2">Cheetah v2.2</a></li>
+<li><a class="reference external" href="#cheetah-v2-3">Cheetah v2.3</a></li>
+<li><a class="reference external" href="#cheetah-v3-0">Cheetah v3.0</a></li>
+</ul>
+</li>
+</ul>
+
+ <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="documentation.html"
+ title="next chapter">User Documentation</a></p>
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="sources/roadmap.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ <div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+ </div>
+ <script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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-v2-2">
+<h2>Cheetah v2.2<a class="headerlink" href="#cheetah-v2-2" title="Permalink to this headline">¶</a></h2>
+<p>The first release in the v2.2 series (<em>v2.2.0</em>) introduced an overhaul of
+Cheetah&#8217;s string handling to convert everything internally to use <cite>unicode()</cite>
+objects instead of encoded string buffers.</p>
+<p>The subsequent releases in the v2.2 series are planned to have a number of
+important upgrades to Cheetah&#8217;s infrastructure:</p>
+<ul class="simple">
+<li>Built-in Django support</li>
+<li>Cleaner code generation</li>
+<li>Finish and document #defmacro support</li>
+</ul>
+</div>
+<div class="section" id="cheetah-v2-3">
+<h2>Cheetah v2.3<a class="headerlink" href="#cheetah-v2-3" title="Permalink to this headline">¶</a></h2>
+<p><em>still in planning</em></p>
+<p>The third major series in the Cheetah 2 line of releases will have one focal point, <strong>performance</strong></p>
+</div>
+<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>still in planning</em></p>
+<p>Cheetah 3000 will be the seminal milestone for running Cheetah on Python 3.0</p>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related">
+ <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="documentation.html" title="User Documentation"
+ >next</a> |</li>
+ <li class="right" >
+ <a href="download.html" title="Downloading Cheetah"
+ >previous</a> |</li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/search.html b/search.html
new file mode 100644
index 0000000..10207e3
--- /dev/null
+++ b/search.html
@@ -0,0 +1,92 @@
+<!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 &mdash; Cheetah - 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: '2.2.1',
+ COLLAPSE_MODINDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="static/jquery.js"></script>
+ <script type="text/javascript" src="static/doctools.js"></script>
+ <script type="text/javascript" src="static/searchtools.js"></script>
+ <link rel="top" title="Cheetah - The Python-Powered Template Engine" href="index.html" />
+ </head>
+ <body>
+ <div class="related">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <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">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="genindex.html" title="General Index"
+ >index</a></li>
+ <li><a href="index.html">Cheetah - The Python-Powered Template Engine</a> &raquo;</li>
+ </ul>
+ </div>
+
+ <div class="footer">
+ &copy; Copyright 2009, R. Tyler Ballance.
+ Last updated on Jul 16, 2009.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
+ </div>
+ <script type="text/javascript" src="searchindex.js"></script>
+
+ </body>
+</html> \ No newline at end of file
diff --git a/searchindex.js b/searchindex.js
new file mode 100644
index 0000000..74de090
--- /dev/null
+++ b/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({desctypes:{},terms:{all:[4,11,12,3],code:[0,1,3,4,6,12],concept:[4,2],tavi:[4,3],abil:4,follow:12,lookup:[5,1],retrofit:4,middl:4,git:12,flexibl:0,readabl:0,program:[0,3],aris:4,introduc:[4,6,3],sourc:[4,0,10,12],everi:0,string:6,far:12,unfamiliar:8,util:[4,1,8],candid:10,mechan:0,implicitli:3,syntax:[0,8],relev:12,condition:[4,2],recip:[7,5,3],administr:0,harri:0,list:[0,12],"_maincheetahmethod_for_":1,"try":[4,12],adjust:1,team:0,small:8,pleas:12,work:12,chep:[4,11,9,2],direct:[4,0,1,3],design:[4,0,3],pass:12,download:[10,0],further:1,compat:[4,9],index:[0,8],what:[0,12,3],barrier:3,sun:0,section:0,current:[4,12],version:[4,8,9,10,11,12],awar:3,"new":[4,12],net:0,"public":[4,11,9],involv:0,full:0,hash:3,deriv:3,gener:[4,0,8,1,6],here:[11,12],closur:4,modular:0,path:4,along:4,strong:[0,8],sinc:[0,1],interpret:1,search:0,technolog:0,host:12,everyon:12,prior:[12,8],staticmethod:[5,8],implement:[4,1,9],via:[0,9,2],volunt:12,appli:[4,12],modul:[4,0,1,3],releas:[10,12,6],otherhand:12,"1st":10,instal:10,select:0,highli:0,from:[0,1,3,4,5,8,12],zip:10,commun:0,hudson:12,visit:10,two:[4,12,1],next:12,websit:0,few:3,live:4,call:8,save:1,scope:4,basi:11,type:[4,11,9],more:12,peopl:0,enhanc:[0,2],indic:0,particular:12,known:4,central:12,effort:0,cach:0,must:12,reproduct:12,graphic:0,join:12,outlin:2,can:[0,1,3,8,10,11,12],purpos:[11,2],root:0,def:[4,8,1,3],quickstart:0,give:0,process:[11,12],share:[12,3],templat:[0,1,2,3,4,5,8,9],want:3,tarbal:[10,12],everywher:4,alwai:3,end:[4,0,8],anoth:0,revisit:8,snippet:8,how:[4,0],anyon:12,pure:10,instead:[11,6,3],simpl:[0,5],updat:4,rudd:[4,3],after:11,befor:12,mymethod:1,mixin:3,mai:[0,1],data:0,github:[10,12],practic:0,third:6,footer:8,classmethod:[5,8],revolv:12,django:6,issu:[4,12],inform:12,"switch":4,maintain:0,environ:1,incorpor:0,exclus:4,order:1,talk:0,help:3,through:4,same:12,hierarchi:8,still:[4,6],dynam:[0,1],bunch:8,perfect:12,write:[4,7,5],style:4,overhaul:6,unforeseen:4,fix:12,"__class__":1,better:12,platform:12,window:10,tyler:[4,11,9,3],fig:8,mail:[0,12],main:1,might:[12,8],easier:0,them:[11,8],good:12,"return":[4,3],thei:[4,0,12,8,2],python:[0,1,2,3,4,5,6,8,10,12],namemapp:10,framework:[0,2],cheetah:[0,1,2,3,4,5,6,8,10,12],now:8,discuss:[4,0],introduct:[0,5,3],name:0,anyth:8,level:4,separ:0,easili:[1,3],slide:[4,11,9],mode:1,found:12,unicod:6,mean:[4,1,8],compil:[0,1,3,4,5,10,12],everyth:[4,6],domain:[4,0,11,9],intellig:4,replac:8,idea:12,realli:8,heavi:4,backport:12,expect:4,happen:12,patch:12,orient:[0,3],accomplish:3,recipe1:3,content:[4,0,11,9],mainmethod:1,adapt:0,rational:[4,9],reader:3,merg:12,common:[12,8],tmpl:[8,1,3],insid:4,workflow:12,situat:4,standard:[4,9],reason:[4,11],base:[4,0,1,3],ask:12,"byte":1,md5:4,precompil:[5,1],reusabl:0,could:[4,1],traceback:12,put:10,keep:10,thing:1,place:[4,11,9,3],isn:7,outsid:4,regress:4,principl:3,think:12,first:[12,6],oper:[12,3],softwar:12,major:[0,6],reimplement:0,render:3,feel:0,number:[10,12,8,6],yourself:12,restrict:[0,3],date:10,wasn:8,stabl:10,custom:12,open:0,primari:12,differ:4,searchlist:[1,2,9],unknown:3,top:4,system:[10,12],least:[0,3],cheetahtempl:[10,0],master:[0,12],statement:4,tom:0,draft:[4,9],store:12,option:1,especi:1,tool:0,copi:8,somewhat:3,rst:[4,11,9],than:10,hashlib:4,provid:[4,0],bother:[5,1],tree:10,structur:[0,8],reus:0,kindli:12,were:[4,12],seri:6,pre:[5,1],cleaner:6,sai:3,fashion:[4,3],behavior:[4,2],runner:1,ani:[4,0,12,1],sad:0,titl:[4,11,1,9],have:[4,12,1,6],tabl:0,need:[8,0,1,3],engin:0,built:6,self:[4,9,2,3],note:[10,1],also:[4,0,3],exampl:[4,0,8,1,3],build:[12,8],which:[8,0,10,1,3],adsens:8,channel:0,unless:3,reloc:4,shall:4,track:[4,9],object:[0,6,3],most:[4,10,3],plai:3,regular:0,plan:[12,6],pyc:1,why:[0,5,1],tradit:[4,0],hereaft:4,request:12,face:12,meanwhil:0,declar:4,clean:0,blend:0,notion:3,mostli:4,text:[4,0,11,9],maint:12,tenet:3,particularli:[0,1,3],"static":0,trivial:8,find:10,ground:4,pagenam:3,access:0,onli:1,explicitli:3,locat:4,just:[0,12],copyright:[4,11,8,9],explain:3,dick:0,activ:[0,11],written:0,should:[4,0,10,11],suppos:1,local:4,meant:8,contribut:[0,12],get:[0,12],familiar:3,autom:12,report:12,afunct:4,banner:8,experi:12,enabl:4,organ:12,dramat:[10,0],method:[4,0,1,8],sens:3,"default":[4,3],ballanc:[4,11,9,3],integr:0,contain:[4,0,8],where:12,respond:1,set:[4,0],roadmap:[0,6],see:[0,12],result:[4,1],arg:4,mileston:6,statu:[4,11,9],said:8,extend:[0,3],pattern:3,someth:[4,1],enumer:11,getattr:1,languag:[0,2,3],between:4,"import":[0,1,2,3,4,5,6,8],irc:0,approach:[4,8],assumpt:3,kei:3,acheiv:3,extens:0,come:1,addit:[12,8],hairi:0,expos:[9,2],cycl:1,howev:8,etc:[4,8],instanc:8,context:4,mani:12,com:[4,11,9],strftime:8,load:1,figur:[8,1,3],instanti:8,guidelin:[11,2],typic:[12,1],noshad:8,duplic:11,cheetahcorp:8,due:4,been:[4,11,9],mark:3,treat:1,basic:[4,5,1,3],quickli:4,both:[4,2],convert:6,apach:1,understand:0,those:[4,12],interoper:3,look:[4,1],sourceforg:0,tutori:3,trick:12,defin:[0,3],"while":[4,3],abov:1,error:12,pertain:8,infrastructur:6,non:0,itself:[0,3],motiv:[4,9],decor:8,develop:[4,0,12,8,2],author:[4,0,11,9,3],perform:[0,6],make:[4,0,1],hexdigest:4,shorter:0,handl:[4,6],complex:8,document:[0,3,4,5,6,7,8,9,11],complet:0,finish:6,optim:[0,1],wherea:4,effect:[8,3],solut:4,user:[10,0,5],improv:0,wherev:10,stack:0,focal:6,recent:10,appropri:4,off:[4,10],older:4,cjson:4,markup:[4,0,8],well:[0,8],inherit:[0,5,3],person:0,without:8,command:[0,1],thi:[0,1,3,4,7,8,9,11],choos:3,programm:0,model:11,propos:[4,0,2],execut:1,tip:12,rest:3,behind:4,regardless:0,speed:1,yet:[0,7],unto:0,web:[0,1,8],easi:[0,8],point:6,except:4,littl:8,versa:[0,3],els:4,subsequ:6,applic:8,around:12,format:0,premis:4,piec:12,world:1,like:[4,0,1,3],specif:[4,0,9],filenam:10,html:[0,1],necessari:12,either:[12,8],output:0,page:[10,0,8,3],some:[0,12,3],intern:6,toctre:0,proper:8,mood:0,lead:0,pep:11,subclass:[0,3],buffer:6,tracker:12,foo:4,refer:[4,11,8,9],core:0,encourag:[0,12],who:1,run:[12,6],power:0,quit:[7,8],importerror:4,gmtime:8,step:12,nutshel:0,repositori:12,fulli:0,"__name__":1,post:1,"super":[9,2,3],actual:12,would:3,memori:1,unfortun:12,block:[4,8],own:3,primarili:12,within:4,encod:[4,6],upgrad:6,down:[12,1],strip:10,chang:4,your:[10,0,12,1,3],"_page":3,mod_python:1,wai:[4,0],frustrat:12,support:[8,0,1,6],bodi:1,submit:12,happi:0,avail:4,interfac:0,includ:12,lot:1,suit:0,strictli:3,"function":[4,0,8,3],head:1,properli:8,offer:0,conclud:4,jun:[4,11,9],defmacro:6,cookbooktempl:3,gain:1,line:[4,0,6],inlin:4,"true":11,bug:12,freenod:0,writebodi:4,attr:[1,3],whether:[0,3],below:[0,3],limit:1,site:0,otherwis:3,similar:2,featur:12,creat:[0,4,8,9,11,12],"abstract":[4,11,9],exist:[0,2],file:[0,12,1],doe:3,fill:8,denot:3,mutual:4,googl:8,allow:0,when:[0,1,8],other:[10,0,12,1,3],role:3,futur:2,branch:12,test:12,you:[0,1,3,8,10,11,12],architectur:0,intend:3,benefici:4,symbol:4,june:10,semin:6,"class":[4,0,8,3],consid:11,pyd2:10,backward:[4,9],sphinx:0,faster:10,vice:[0,3],descript:12,time:[0,12,8],cookbook:3,inc:8,hello:[4,1]},titles:["Cheetah, the Python-Powered Template Engine","Precompiled Templates","Cheetah Enhancement Proposals","Basic Inheritance","(#2) Conditionalized #import behavior","User Documentation","Cheetah Roadmap","Writing a &#8220;Recipe&#8221;","&#64;staticmethod and &#64;classmethod","(#3) Exposing of super() and self via Template searchList","Downloading Cheetah","(#1) CHEP Purpose and Guidelines","Contributing to Cheetah"],modules:{},descrefs:{},filenames:["index","recipes/precompiled","chep","recipes/inheritance","cheps/2_import","documentation","roadmap","recipes/writing_a_recipe","recipes/staticmethod","cheps/3_super","download","cheps/1_chep","developers"]}) \ No newline at end of file
diff --git a/static/basic.css b/static/basic.css
new file mode 100644
index 0000000..ed737d3
--- /dev/null
+++ b/static/basic.css
@@ -0,0 +1,414 @@
+/**
+ * Sphinx stylesheet -- basic theme
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 0 0 0 230px;
+}
+
+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%;
+}
+
+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;
+}
+
+img {
+ border: 0;
+}
+
+/* -- 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%;
+}
+
+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 td {
+ text-align: left;
+ vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+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;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+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 {
+ visibility: visible;
+}
+
+div.body p.caption {
+ text-align: inherit;
+}
+
+div.body td {
+ text-align: left;
+}
+
+.field-list ul {
+ padding-left: 1em;
+}
+
+.first {
+ margin-top: 0 !important;
+}
+
+p.rubric {
+ margin-top: 30px;
+ font-weight: bold;
+}
+
+/* -- 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.docutils td, table.docutils th {
+ padding: 1px 8px 1px 0;
+ border-top: 0;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+ border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+ border: 0 !important;
+}
+
+th {
+ text-align: left;
+ padding-right: 5px;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+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, .highlight {
+ background-color: #fbe54e;
+}
+
+dl.glossary dt {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+.field-list ul {
+ margin: 0;
+ padding-left: 1em;
+}
+
+.field-list p {
+ margin: 0;
+}
+
+.refcount {
+ color: #060;
+}
+
+.optional {
+ font-size: 1.3em;
+}
+
+.versionmodified {
+ font-style: italic;
+}
+
+.system-message {
+ background-color: #fda;
+ padding: 5px;
+ border: 3px solid red;
+}
+
+.footnote:target {
+ background-color: #ffa
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+ overflow: auto;
+}
+
+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;
+}
+
+tt.descname {
+ background-color: transparent;
+ font-weight: bold;
+ font-size: 1.2em;
+}
+
+tt.descclassname {
+ background-color: transparent;
+}
+
+tt.xref, a tt {
+ background-color: transparent;
+ font-weight: bold;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+ background-color: transparent;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+ vertical-align: middle;
+}
+
+div.math p {
+ text-align: center;
+}
+
+span.eqno {
+ float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+ div.document,
+ div.documentwrapper,
+ div.bodywrapper {
+ margin: 0;
+ width: 100%;
+ }
+
+ div.sphinxsidebar,
+ div.related,
+ div.footer,
+ #top-link {
+ display: none;
+ }
+}
diff --git a/static/contents.png b/static/contents.png
new file mode 100644
index 0000000..7fb8215
--- /dev/null
+++ b/static/contents.png
Binary files differ
diff --git a/static/doctools.js b/static/doctools.js
new file mode 100644
index 0000000..9447678
--- /dev/null
+++ b/static/doctools.js
@@ -0,0 +1,232 @@
+/// XXX: make it cross browser
+
+/**
+ * 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;
+}
+
+/**
+ * small function to check if an array contains
+ * a given item.
+ */
+jQuery.contains = function(arr, item) {
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i] == item)
+ return true;
+ }
+ return false;
+}
+
+/**
+ * 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) {
+ if (node.nodeType == 3) {
+ var val = node.nodeValue;
+ var pos = val.toLowerCase().indexOf(text);
+ if (pos >= 0 && !jQuery.className.has(node.parentNode, className)) {
+ var 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);
+ }
+ }
+ else if (!jQuery(node).is("button, select, textarea")) {
+ jQuery.each(node.childNodes, function() {
+ highlight(this)
+ });
+ }
+ }
+ return this.each(function() {
+ highlight(this);
+ });
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+ init : function() {
+ this.fixFirefoxAnchorBug();
+ this.highlightSearchWords();
+ this.initModIndex();
+ },
+
+ /**
+ * 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 savely 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
+ */
+ fixFirefoxAnchorBug : function() {
+ if (document.location.hash && $.browser.mozilla)
+ 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');
+ window.setTimeout(function() {
+ $.each(terms, function() {
+ body.highlightText(this.toLowerCase(), 'highlight');
+ });
+ }, 10);
+ $('<li class="highlight-link"><a href="javascript:Documentation.' +
+ 'hideSearchWords()">' + _('Hide Search Matches') + '</a></li>')
+ .appendTo($('.sidebar .this-page-menu'));
+ }
+ },
+
+ /**
+ * init the modindex toggle buttons
+ */
+ initModIndex : function() {
+ var togglers = $('img.toggler').click(function() {
+ var src = $(this).attr('src');
+ var idnum = $(this).attr('id').substr(7);
+ console.log($('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_MODINDEX) {
+ togglers.click();
+ }
+ },
+
+ /**
+ * helper function to hide the search marks again
+ */
+ hideSearchWords : function() {
+ $('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
+ $('span.highlight').removeClass('highlight');
+ },
+
+ /**
+ * 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);
+ }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+ Documentation.init();
+});
diff --git a/static/file.png b/static/file.png
new file mode 100644
index 0000000..d18082e
--- /dev/null
+++ b/static/file.png
Binary files differ
diff --git a/static/jquery.js b/static/jquery.js
new file mode 100644
index 0000000..82b98e1
--- /dev/null
+++ b/static/jquery.js
@@ -0,0 +1,32 @@
+/*
+ * jQuery 1.2.6 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
+ * $Rev: 5685 $
+ */
+(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
+return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
+return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
+selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
+return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
+this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
+return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
+jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
+script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
+for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
+for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
+jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
+ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
+while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
+while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
+for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
+jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
+xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
+jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
+for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
+s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
+e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})(); \ No newline at end of file
diff --git a/static/minus.png b/static/minus.png
new file mode 100644
index 0000000..da1c562
--- /dev/null
+++ b/static/minus.png
Binary files differ
diff --git a/static/navigation.png b/static/navigation.png
new file mode 100644
index 0000000..1081dc1
--- /dev/null
+++ b/static/navigation.png
Binary files differ
diff --git a/static/plus.png b/static/plus.png
new file mode 100644
index 0000000..b3cb374
--- /dev/null
+++ b/static/plus.png
Binary files differ
diff --git a/static/pygments.css b/static/pygments.css
new file mode 100644
index 0000000..1f2d2b6
--- /dev/null
+++ b/static/pygments.css
@@ -0,0 +1,61 @@
+.hll { background-color: #ffffcc }
+.c { color: #408090; font-style: italic } /* Comment */
+.err { border: 1px solid #FF0000 } /* Error */
+.k { color: #007020; font-weight: bold } /* Keyword */
+.o { color: #666666 } /* Operator */
+.cm { color: #408090; font-style: italic } /* Comment.Multiline */
+.cp { color: #007020 } /* Comment.Preproc */
+.c1 { color: #408090; font-style: italic } /* Comment.Single */
+.cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
+.gd { color: #A00000 } /* Generic.Deleted */
+.ge { font-style: italic } /* Generic.Emph */
+.gr { color: #FF0000 } /* Generic.Error */
+.gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.gi { color: #00A000 } /* Generic.Inserted */
+.go { color: #303030 } /* Generic.Output */
+.gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.gs { font-weight: bold } /* Generic.Strong */
+.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.gt { color: #0040D0 } /* Generic.Traceback */
+.kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.kp { color: #007020 } /* Keyword.Pseudo */
+.kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.kt { color: #902000 } /* Keyword.Type */
+.m { color: #208050 } /* Literal.Number */
+.s { color: #4070a0 } /* Literal.String */
+.na { color: #4070a0 } /* Name.Attribute */
+.nb { color: #007020 } /* Name.Builtin */
+.nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.no { color: #60add5 } /* Name.Constant */
+.nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.ne { color: #007020 } /* Name.Exception */
+.nf { color: #06287e } /* Name.Function */
+.nl { color: #002070; font-weight: bold } /* Name.Label */
+.nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.nt { color: #062873; font-weight: bold } /* Name.Tag */
+.nv { color: #bb60d5 } /* Name.Variable */
+.ow { color: #007020; font-weight: bold } /* Operator.Word */
+.w { color: #bbbbbb } /* Text.Whitespace */
+.mf { color: #208050 } /* Literal.Number.Float */
+.mh { color: #208050 } /* Literal.Number.Hex */
+.mi { color: #208050 } /* Literal.Number.Integer */
+.mo { color: #208050 } /* Literal.Number.Oct */
+.sb { color: #4070a0 } /* Literal.String.Backtick */
+.sc { color: #4070a0 } /* Literal.String.Char */
+.sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.s2 { color: #4070a0 } /* Literal.String.Double */
+.se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.sh { color: #4070a0 } /* Literal.String.Heredoc */
+.si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.sx { color: #c65d09 } /* Literal.String.Other */
+.sr { color: #235388 } /* Literal.String.Regex */
+.s1 { color: #4070a0 } /* Literal.String.Single */
+.ss { color: #517918 } /* Literal.String.Symbol */
+.bp { color: #007020 } /* Name.Builtin.Pseudo */
+.vc { color: #bb60d5 } /* Name.Variable.Class */
+.vg { color: #bb60d5 } /* Name.Variable.Global */
+.vi { color: #bb60d5 } /* Name.Variable.Instance */
+.il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file
diff --git a/static/searchtools.js b/static/searchtools.js
new file mode 100644
index 0000000..a243b15
--- /dev/null
+++ b/static/searchtools.js
@@ -0,0 +1,467 @@
+/**
+ * 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 occurance, the
+ * latter for highlighting it.
+ */
+
+jQuery.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, 'highlight');
+ });
+ return rv;
+}
+
+/**
+ * Porter Stemmer
+ */
+var PorterStemmer = 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;
+ }
+}
+
+
+/**
+ * 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);
+ }
+ },
+
+ /**
+ * Sets the index
+ */
+ 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() {
+ Search._pulse_status = (Search._pulse_status + 1) % 4;
+ var dotString = '';
+ for (var 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
+ */
+ 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);
+ },
+
+ query : function(query) {
+ // stem the searchterms and add them to the
+ // correct list
+ var stemmer = new PorterStemmer();
+ var searchterms = [];
+ var excluded = [];
+ var hlterms = [];
+ var tmp = query.split(/\s+/);
+ var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
+ for (var i = 0; i < tmp.length; i++) {
+ // stem the word
+ var word = stemmer.stemWord(tmp[i]).toLowerCase();
+ // select the correct list
+ if (word[0] == '-') {
+ var toAppend = excluded;
+ word = word.substr(1);
+ }
+ else {
+ var toAppend = searchterms;
+ hlterms.push(tmp[i].toLowerCase());
+ }
+ // only add if not already in the list
+ if (!$.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 filenames = this._index.filenames;
+ var titles = this._index.titles;
+ var terms = this._index.terms;
+ var descrefs = this._index.descrefs;
+ var modules = this._index.modules;
+ var desctypes = this._index.desctypes;
+ var fileMap = {};
+ var files = null;
+ var objectResults = [];
+ var regularResults = [];
+ $('#search-progress').empty();
+
+ // lookup as object
+ if (object != null) {
+ for (var module in modules) {
+ if (module.indexOf(object) > -1) {
+ fn = modules[module];
+ descr = _('module, in ') + titles[fn];
+ objectResults.push([filenames[fn], module, '#module-'+module, descr]);
+ }
+ }
+ for (var prefix in descrefs) {
+ for (var name in descrefs[prefix]) {
+ if (name.toLowerCase().indexOf(object) > -1) {
+ match = descrefs[prefix][name];
+ fullname = (prefix ? prefix + '.' : '') + name;
+ descr = desctypes[match[1]] + _(', in ') + titles[match[0]];
+ objectResults.push([filenames[match[0]], fullname, '#'+fullname, descr]);
+ }
+ }
+ }
+ }
+
+ // sort results descending
+ objectResults.sort(function(a, b) {
+ return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
+ });
+
+
+ // perform the search on the required terms
+ for (var i = 0; i < searchterms.length; i++) {
+ var word = searchterms[i];
+ // no match but word was a required one
+ if ((files = terms[word]) == null)
+ break;
+ if (files.length == undefined) {
+ files = [files];
+ }
+ // create the mapping
+ for (var j = 0; j < files.length; j++) {
+ var 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 (var 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 (var i = 0; i < excluded.length; i++) {
+ if (terms[excluded[i]] == file ||
+ $.contains(terms[excluded[i]] || [], file)) {
+ valid = false;
+ break;
+ }
+ }
+
+ // if we have still a valid result we can add it
+ // to the result list
+ if (valid)
+ regularResults.push([filenames[file], titles[file], '', null]);
+ }
+
+ // delete unused variables in order to not waste
+ // memory until list is retrieved completely
+ delete filenames, titles, terms;
+
+ // now sort the regular results descending by title
+ regularResults.sort(function(a, b) {
+ var left = a[1].toLowerCase();
+ var right = b[1].toLowerCase();
+ return (left > right) ? -1 : ((left < right) ? 1 : 0);
+ });
+
+ // combine both
+ var results = regularResults.concat(objectResults);
+
+ // 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>');
+ 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) {
+ $.get('_sources/' + item[0] + '.txt', function(data) {
+ listItem.append($.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();
+ }
+}
+
+$(document).ready(function() {
+ Search.init();
+});
diff --git a/static/sphinxdoc.css b/static/sphinxdoc.css
new file mode 100644
index 0000000..1d11e8b
--- /dev/null
+++ b/static/sphinxdoc.css
@@ -0,0 +1,327 @@
+/**
+ * Sphinx stylesheet -- sphinxdoc theme
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * Originally created by Armin Ronacher for Werkzeug, adapted by Georg Brandl.
+ */
+
+@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.documentwrapper {
+ float: none;
+}
+
+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, tt {
+ font-family: 'Consolas', 'Deja Vu Sans Mono',
+ 'Bitstream Vera Sans Mono', monospace;
+ font-size: 0.95em;
+ letter-spacing: 0.01em;
+}
+
+tt {
+ background-color: #f2f2f2;
+ border-bottom: 1px solid #ddd;
+ color: #333;
+}
+
+tt.descname, tt.descclassname, tt.xref {
+ border: 0;
+}
+
+hr {
+ border: 1px solid #abc;
+ margin: 2em;
+}
+
+a tt {
+ border: 0;
+ color: #CA7900;
+}
+
+a tt: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;
+}