This file can also be run as a script to install or upgrade setuptools.
"""
import sys
-DEFAULT_VERSION = "0.6b3"
+DEFAULT_VERSION = "0.6c5"
DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3]
md5_data = {
'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a',
'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618',
'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac',
- 'setuptools-0.6b3dev_r46791-py2.3.egg': 'e765a29566575ffac5d81cdf0c6f8db9',
- 'setuptools-0.6b3dev_r46791-py2.4.egg': 'd249c022ed029ad60d134bd998adc880',
+ 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5',
+ 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4',
+ 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c',
+ 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b',
+ 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',
+ 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',
+ 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',
+ 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',
+ 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',
+ 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',
+ 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',
+ 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',
+ 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',
+ 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',
+ 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',
}
import sys, os
try:
pkg_resources.require("setuptools>="+version)
- except pkg_resources.VersionConflict:
+ except pkg_resources.VersionConflict, e:
# XXX could we install in a subprocess here?
print >>sys.stderr, (
"The required version of setuptools (>=%s) is not available, and\n"
"can't be installed while this script is running. Please install\n"
- " a more recent version first."
- ) % version
+ " a more recent version first.\n\n(Currently using %r)"
+ ) % (version, e.args[0])
sys.exit(2)
def download_setuptools(
try:
import setuptools
except ImportError:
- import tempfile, shutil
- tmpdir = tempfile.mkdtemp(prefix="easy_install-")
+ egg = None
try:
- egg = download_setuptools(version, to_dir=tmpdir, delay=0)
+ egg = download_setuptools(version, delay=0)
sys.path.insert(0,egg)
from setuptools.command.easy_install import main
return main(list(argv)+[egg]) # we're done here
finally:
- shutil.rmtree(tmpdir)
+ if egg and os.path.exists(egg):
+ os.unlink(egg)
else:
if setuptools.__version__ == '0.0.1':
# tell the user to uninstall obsolete version
--- /dev/null
+[egg_info]
+tag_build = dev
+tag_svn_revision = true
+
+[aliases]
+release = egg_info -RDb ''
.. _jinja webpage: http://jinja.pocoo.org/
.. _documentation: http://jinja.pocoo.org/documentation/index.html
"""
-try:
- import ez_setup
- ez_setup.use_setuptools()
-except ImportError:
- pass
+import os
+import ez_setup
+ez_setup.use_setuptools()
from setuptools import setup
+
setup(
name = 'Jinja',
version = '1.0',
],
keywords = ['python.templating.engines'],
packages = ['jinja', 'jinja.translators'],
- extras_require = {'plugin': ['setuptools>=0.6a2']},
+ data_files = [
+ ('docs', os.listdir('docs/build')),
+ ('docs/txt', os.listdir('docs/src'))
+ ],
+ platforms = 'any',
+ extras_require = {'plugin': ['setuptools>=0.6a2']}
)
+++ /dev/null
-<% extends 'layout/base.tmpl' %>
-<% set title = 'Contribute' %>
-<% set active_page = 'contribute' %>
-<% block content %>
- <h1>Contribute</h1>
- <p>
- Because Jinja is an open source project we're always open towards
- suggestions and patches. If you want to participate in the Jinja
- development python knowlege is required of corse since the project is
- implemented completely in python.
- </p>
- <p>
- Development takes place on <a href="http://trac.pocoo.org/">trac.pocoo.org</a>,
- where the Subversion repository, tickets and development Wiki pages
- can be viewed.
- </p>
- <h2>Ways to contact the authors</h2>
- <p>
- Our primary communication instrument is the IRC channel <em>#pocoo</em>
- on the Freenode network. To join it, let your IRC client connect to
- <tt>irc.freenode.net</tt> and do <tt>/join #pocoo</tt>.
- </p>
- <p>
- If you found a bug, just open a ticket in the trac tracker. Be sure to
- add your e-mail address under "CC" to be notified when the issue is fixed.
- </p>
- <h2>The Authors</h2>
- <p>
- Jinja is maintained by <strong>Armin Ronacher</strong> (nickname
- <em>mitsuhiko</em>), e-mail address <em>armin.ronacher (guess what)
- active-4.com</em>.
- </p>
-<% endblock %>
+++ /dev/null
-<% extends 'layout/base.tmpl' %>
-<% set title = page_title + " | Documentation" %>
-<% set active_page = 'documentation' %>
-<% block content %>
- <h1><%= page_title %></h1>
- <% if page_toc %>
- <h2 class="toc">Table Of Contents</h2>
- <ul><%= page_toc %></ul>
- <% endif %>
- <%= page_body %>
-<% endblock %>
+++ /dev/null
-<% extends 'layout/base.tmpl' %>
-<% set title = 'Download' %>
-<% set active_page = 'download' %>
-<% block content %>
- <h1>Download</h1>
- <p>
- If you want to install the release with
- <a href="http://peak.telecommunity.com/DevCenter/EasyInstall">easy_install</a>,
- you can do it using this command:
- </p>
- <pre>easy_install Jinja</pre>
- <p>
- You can also get the development source from subversion using this command:
- </p>
- <pre>svn co http://trac.pocoo.org/repos/jinja/trunk jinja</pre>
- <p>
- Installing the current subversion trunk as a Python egg is done with:
- </p>
- <pre>easy_install Jinja==dev</pre>
- <p>
- Development takes place at the <a href="http://trac.pocoo.org/">Pocoo trac</a>,
- you can browse the source online
- <a href="http://trac.pocoo.org/browser/jinja/trunk">here</a>.
- </p>
-<% endblock %>
+++ /dev/null
-<% extends 'layout/base.tmpl' %>
-<% set title = 'Page Not Found' %>
-<% block content %>
- <h1>Page Not Found</h1>
- <p>
- Sorry, but the pge you requested was not found on this server.
- </p>
- <p>
- Click <a href="index.html">here</a> to return to the index.
- </ul>
-<% endblock %>
+++ /dev/null
-<% extends 'layout/base.tmpl' %>
-<% set title = 'FAQ' %>
-<% set active_page = 'faq' %>
-<% block content %>
- <h1>Frequently Asked Questions</h1>
- <p>
- Here a list of frequently asked questions.
- </p>
- <h2>Why the Name?</h2>
- <p>
- The name Jinja was chosen because it's the name of a Japanese temple and
- temple and template share a similar pronunciation.
- </p>
- <h2>How fast is it?</h2>
- <p>
- I really hate benchmarks especially since they don't reflect much. The
- performance of a template depends on many factors and you would have to
- benchmark different engines in differen situations. However Jinja isn't
- slow. The benchmarks from the testsuite show that Jinja is about twice
- as fast as Django templates and about three times as slow as
- <a href="http://www.makotemplates.org/">mako</a>. That's not bad for a
- sandboxed template engine that has to sanitize template input on the fly.
- If you really need the best performance of a template engine consider
- using mako.
- </p>
- <h2>What happened to Jinja < 1?</h2>
- <p>
- Before Jinja 1 there was a template engine too with the same name. Beside
- the name and the same maintainer those two projects don't share a single
- line of code. If you have an application using Jinja < 1 you should try
- to make it Jinja 1 compatible. If that's not possible, the old project is
- still available as
- <a href="http://trac.pocoo.org/repos/jinja/branches/0.9-maint/">0.9-maint</a>
- in the Jinja subversion repository.
- </p>
- <h2>Why should I use Jinja?</h2>
- <p>
- There are dozens of template engines for Python, many of them try to
- achieve different things. If you are looking for a XML based template
- engine have a look at <a href="http://genshi.edgewall.org/">genshi</a>,
- if you want a bleezing fast template engine with the full range of
- python constructs have a look at mako. If you want sandboxed templates
- you probably want to check out Jinja.
- </p>
- <h2>Differences to Django</h2>
- <p>
- While the Jinja default syntax looks pretty much like Django the rest of
- the template engine works completely different. Jinja was designed to be
- used without Django and to support Python expressions.
- </p>
- <p>Features that Jinja has in common with Django</p>
- <ul>
- <li>filter functions</li>
- <li>block based template inheritance</li>
- <li>the <tt>{% cycle %}</tt> and <tt>{% filter %}</tt> tag</li>
- <li>being sandboxed</li>
- <li>similar default syntax</li>
- </ul>
- <p>Differences to Django</p>
- <ul>
- <li>advanced lexer that allows escaping of tags</li>
- <li>generation of bytecode for faster template execution</li>
- <li>definition of macros (often recurring tasks like rendering
- dialog boxes, form elements etc.)</li>
- <li>raw blocks</li>
- <li>uncoupled internationalization support</li>
- <li>expression support in any tag</li>
- <li>abbility of modifying the context from the template
- by using the <tt>{% set %}</tt> tag.</li>
- <li>support for function calling with arguments</li>
- <li>filters can be called with a variable argument count</li>
- <li>full unicode support</li>
- <li>deferred objects (objects that are resolved on first
- access, not on context instanciation)</li>
- <li>Missing support for <tt>{{ block.super }}</tt></li>
- <li>Support for recursing by using recursing for loops
- or self calling macros.</li>
- <li>If blocks have support for multiple elif statements</li>
- <li>for loops have an optional else block executed if
- there was no iteration.</li>
- <li>test functions like <tt>is even</tt> etc.</li>
- <li>block delimiters are exchangeable.</il>
- <li>no implicit function calling</li>
- <li><tt>{% endblock %}</tt> doesn't support the optional name argument</li>
- <li><tt>{% ifchanged %}</tt> is not implemented because of performance
- reasons. If there's enough interest an implementation might be added</li>
- <li><tt>{% templatetag %}</tt> is not implemented because Jinja supports
- escaping via <tt>{% raw %}</tt> or the variable syntax</li>
- <li><tt>{% comment %}</tt> is not implemented, rather use
- <tt>{# ... #}</tt> for commenting out stuff.</li>
- <li><tt>{% now %}</tt> is not implemented because Jinja doesn't handle
- l10n. Datetime specific stuff should be provided by the application.</li>
- <li><tt>{% load %}</tt>, loading components for Jinja works from the
- application side. Template designers don't have to import stuff on
- their own.</li>
- <li><tt>{% debug %}</tt> is not implemented. You can use the global
- function <tt>debug()</tt>.</li>
- <li>custom tags are not supported. Most of the stuff that is
- possible with django template tags is possible with either functions,
- filters, tests or a combination of them.</li>
- <li>using keywords like <tt>endfor</tt> as identifer raises an
- exception.</li>
- </ul>
-<% endblock %>
+++ /dev/null
-#!/usr/bin/env python
-"""
- jinja webpage generator
- ~~~~~~~~~~~~~~~~~~~~~~~
-"""
-import os
-import sys
-import re
-from codecs import open
-from jinja import Environment, FileSystemLoader
-from jinja.filters import stringfilter
-from pygments import highlight
-from pygments.lexers import get_lexer_by_name
-from pygments.formatters import HtmlFormatter
-
-
-_data_re = re.compile(
- r'<!-- TITLE -->(?P<page_title>.*?)<!-- ENDTITLE -->.*?'
- r'<!-- TOC -->(?P<page_toc>.*?)<!-- ENDTOC -->.*?'
- r'<!-- BODY -->(?P<page_body>.*?)<!-- ENDBODY -->(?sm)'
-)
-
-formatter = HtmlFormatter(cssclass='syntax', encoding=None, style='pastie')
-
-env = Environment('<%', '%>', '<%=', '%>', loader=FileSystemLoader('.',
- cache_folder='/tmp'), trim_blocks=True)
-env.filters['pygmentize'] = stringfilter(lambda v, l:
- highlight(v.strip(), get_lexer_by_name(l), formatter))
-
-
-def get_files(folder):
- for fn in os.listdir(folder):
- fn = os.path.join(folder, fn)
- if os.path.isdir(fn):
- for item in get_files(fn):
- yield item
- elif fn.endswith('.tmpl'):
- yield fn
-
-
-# generate static stuff
-for filename in get_files('.'):
- root = './' + ''.join(['../' for _ in os.path.dirname(filename).
- split(os.path.sep)[1:]])
-
- t = env.get_template(filename)
- f = open(filename[:-5] + '.html', 'w', 'utf-8')
- f.write(t.render(
- root=root
- ))
- f.close()
- print filename
-
-# generate pygments stylesheet
-f = file('static/pygments.css', 'w')
-f.write(formatter.get_style_defs('.syntax'))
-f.close()
-
-# generate documentation
-os.system(sys.executable + ' ../docs/generate.py documentation true')
-
-# render documentation with documentation template
-tmpl = env.get_template('documentation/item.tmpl')
-
-for filename in os.listdir('documentation'):
- if not filename.endswith('.html'):
- continue
- filename = 'documentation/' + filename
- f = open(filename, 'r', 'utf-8')
- try:
- data = f.read()
- finally:
- f.close()
- match = _data_re.search(data)
- if match is None:
- continue
- data = match.groupdict()
- data['page_toc'] = data['page_toc'].strip()
- if data['page_toc'].count('</li') < 2:
- data['page_toc'] = ''
- f = open(filename, 'w', 'utf-8')
- f.write(tmpl.render(
- root='./../',
- **data
- ))
- f.close()
- print 'postprocessed', filename
+++ /dev/null
-<% extends 'layout/base.tmpl' %>
-<% set title = 'Index' %>
-<% set active_page = 'index' %>
-<% block content %>
- <h1>Jinja Templates</h1>
- <p>
- Jinja is a
- <a href="http://en.wikipedia.org/wiki/Sandbox_%28computer_security%29">sandboxed</a>
- template engine written in pure <a href="http://www.python.org/">Python</a>. It
- provides a <a href="http://www.djangoproject.com/">Django</a>-like non-XML syntax
- and compiles templates into executable python code. It's basically a combination
- of Django templates and python code.
- </p>
- <h2>Nutshell</h2>
- <% filter pygmentize('html+jinja') %>
-{% extends 'base.html' %}
-{% block title %}Memberlist{% endblock %}
-{% block content %}
- <ul>
- {% for user in users %}
- <li><a href="{{ user.url|e }}">{{ user.username|e }}</a></li>
- {% endfor %}
- </ul>
-{% endblock %}
-<% endfilter %>
- <h2>Philosophy</h2>
- <p>
- Application logic is for the controller but don't try to make the life for the
- template designer too hard by giving him too few functionality.
- </p>
- <h2>Features</h2>
- <ul>
- <li><strong>Simple API</strong>. For basic usage just one function is needed:
-<% filter pygmentize('python') %>
-from jinja import from_string
-print from_string('Hello {{ data }}!').render(data='World')
-<% endfilter %></li>
- <li><strong>Sandboxed</strong>. The whole engine is completely sandboxed. A
- template designer won't be able to modify application data or execute
- dangerous code.</li>
- <li><strong>Python expressions</strong>. You can use nearly every python
- expression. Not supported are the binary operators and list comprehensions /
- generator expressions.</li>
- <li><strong>Inheritance</strong>. Jinja uses the same concept for inheritance
- Django uses. It's very powerful and easy to understand.</li>
- <li><strong>Macros</strong>. Jinja provides so called macros that allow you to
- put often used template snippets into callable blocks:
-<% filter pygmentize('html+jinja') %>
-{% macro dialog title, text %}
- <div class="dialog">
- <h2 class="title">{{ title }}</h2>
- <div class="text">{{ text }}</div>
- </div>
-{% endmacro %}
-<% endfilter %>You can then use this block by calling it:
-<% filter pygmentize('html+jinja') %>
-{{ dialog('Notification', 'Here the text for the macro.') }}
-<% endfilter %></li>
- <li><strong>Designer friendly</strong>. Jinja simplifies many things for a
- template designer. Loops can be used in a recursive way, filters are
- available to format values, loops know about their iteration etc.</li>
- <li><strong>Dynamic Syntax</strong>. You don't like the Django block syntax?
- You can override the syntax elements on environment initialisation. It's
- no problem to use ASP/PHP/Ruby syntax, html comments for blocks etc.</li>
- <li><strong>extremely lightweight</strong>. According to sloccount the number
- of source lines is below 3000. The tarfile is less than 200KB in size.</li>
- </ul>
-<% endblock %>
+++ /dev/null
-<% set navigation = [
- ('index.html', 'index', 'Index'),
- ('faq.html', 'faq', 'FAQ'),
- ('documentation/index.html', 'documentation', 'Documentation'),
- ('download.html', 'download', 'Download'),
- ('contribute.html', 'contribute', 'Contribute')
-] %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Frameset//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title><%= title or 'Untitled' %> | Jinja Template Engine</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link rel="stylesheet" href="<%= root %>static/style.css" type="text/css" />
- <link rel="stylesheet" href="<%= root %>static/print.css" type="text/css" media="print" />
- <link rel="stylesheet" href="<%= root %>static/pygments.css" type="text/css" />
- </head>
- <body>
- <div id="header">
- <h1><span>Jinja</span></h1>
- </div>
- <ul id="navigation">
- <% for href, id, caption in navigation %>
- <li<% if id == active_page %> class="active"<% endif
- %>><a href="<%= (root + href)|escape %>"><%= caption|escape %></a></li>
- <% endfor %>
- </ul>
- <div id="content">
- <div id="contentwrapper">
- <% block content %><% endblock %>
- </div>
- </div>
- <div id="footer">
- © Copyright 2007 by the <a href="http://www.pocoo.org/">Pocoo</a> Team.
- </div>
- </body>
-</html>
+++ /dev/null
-#header, #footer, #navigation {
- display: none;
-}
-
-#contentwrapper, #content {
- max-width: 100%;
- padding: 0;
-}
-
-a {
- color: inherit;
- text-decoration: inherit;
-}
-
-#contentwrapper h1 {
- margin-left: 0;
-}
+++ /dev/null
-.syntax { background: #ffffff; }
-.syntax .c { color: #888888 } /* Comment */
-.syntax .err { color: #a61717; background-color: #e3d2d2 } /* Error */
-.syntax .k { color: #008800; font-weight: bold } /* Keyword */
-.syntax .cm { color: #888888 } /* Comment.Multiline */
-.syntax .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
-.syntax .c1 { color: #888888 } /* Comment.Single */
-.syntax .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
-.syntax .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
-.syntax .ge { font-style: italic } /* Generic.Emph */
-.syntax .gr { color: #aa0000 } /* Generic.Error */
-.syntax .gh { color: #999999 } /* Generic.Heading */
-.syntax .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
-.syntax .go { color: #888888 } /* Generic.Output */
-.syntax .gp { color: #555555 } /* Generic.Prompt */
-.syntax .gs { font-weight: bold } /* Generic.Strong */
-.syntax .gu { color: #aaaaaa } /* Generic.Subheading */
-.syntax .gt { color: #aa0000 } /* Generic.Traceback */
-.syntax .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
-.syntax .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
-.syntax .kp { color: #008800 } /* Keyword.Pseudo */
-.syntax .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
-.syntax .kt { color: #888888; font-weight: bold } /* Keyword.Type */
-.syntax .m { color: #0000DD; font-weight: bold } /* Literal.Number */
-.syntax .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
-.syntax .na { color: #336699 } /* Name.Attribute */
-.syntax .nb { color: #003388 } /* Name.Builtin */
-.syntax .nc { color: #bb0066; font-weight: bold } /* Name.Class */
-.syntax .no { color: #003366; font-weight: bold } /* Name.Constant */
-.syntax .nd { color: #555555 } /* Name.Decorator */
-.syntax .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
-.syntax .nf { color: #0066bb; font-weight: bold } /* Name.Function */
-.syntax .nl { color: #336699; font-style: italic } /* Name.Label */
-.syntax .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
-.syntax .py { color: #336699; font-weight: bold } /* Name.Property */
-.syntax .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
-.syntax .nv { color: #336699 } /* Name.Variable */
-.syntax .ow { color: #008800 } /* Operator.Word */
-.syntax .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
-.syntax .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
-.syntax .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
-.syntax .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
-.syntax .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
-.syntax .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
-.syntax .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
-.syntax .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
-.syntax .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
-.syntax .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
-.syntax .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
-.syntax .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
-.syntax .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
-.syntax .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
-.syntax .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
-.syntax .bp { color: #003388 } /* Name.Builtin.Pseudo */
-.syntax .vc { color: #336699 } /* Name.Variable.Class */
-.syntax .vg { color: #dd7700 } /* Name.Variable.Global */
-.syntax .vi { color: #3333bb } /* Name.Variable.Instance */
-.syntax .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
\ No newline at end of file
+++ /dev/null
-/**
- * Jinja Webpage Design
- */
-
-body {
- background-color: #222;
- margin: 0;
- padding: 0;
- font-family: 'Georgia', serif;
- font-size: 15px;
- color: #111;
-}
-
-p, li, dd, dt, blockquote {
- color: #333;
-}
-
-p {
- line-height: 150%;
- margin-bottom: 0;
- margin-top: 10px;
- text-align: justify;
-}
-
-hr {
- border-top: 1px solid #ccc;
- border-bottom: 0;
- border-right: 0;
- border-left: 0;
- margin-bottom: 10px;
- margin-top: 20px;
-}
-
-a {
- color: #b41717;
-}
-
-a:hover {
- color: #444;
-}
-
-pre {
- background-color: #f8f8f8;
- color: #000;
- border-top: 1px solid #ccc;
- border-bottom: 1px solid #ccc;
- padding: 5px;
- font-size: 13px;
- font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace;
-}
-
-table.docutils {
- border-collapse: collapse;
- border: 2px solid #aaa;
- margin: 0.5em 1.5em 0.5em 1.5em;
-}
-
-table.docutils td {
- padding: 2px;
- border: 1px solid #ddd;
-}
-
-dl {
- margin-left: 10px;
-}
-
-li, dt {
- margin-top: 5px;
-}
-
-dt {
- font-weight: bold;
-}
-
-th {
- text-align: left;
- padding: 3px;
- background-color: #f2f2f2;
-}
-
-tt {
- font-size: 13px;
- font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace;
- color: black;
- padding: 1px 2px 1px 2px;
- background-color: #f0f0f0;
-}
-
-cite {
- /* abusing <cite>, it's generated by ReST for `x` */
- font-size: 13px;
- font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace;
- font-weight: bold;
- font-style: normal;
-}
-
-div.admonition {
- margin: 10px 0 10px 0;
- padding: 10px;
- border: 1px solid #ccc;
- background-color: #f8f8f8;
-}
-
-div.admonition p.admonition-title {
- margin: -3px 0 5px 0;
- font-weight: bold;
- color: #b41717;
- font-size: 16px;
-}
-
-div.admonition p {
- margin: 0 0 0 40px;
-}
-
-#content {
- background-color: white;
- background-image: url(watermark.png);
- padding: 10px;
-}
-
-#footer {
- color: #fff;
- text-align: center;
- font-size: 14px;
- padding: 10px 20px 10px 20px;
-}
-
-#footer a {
- color: #fff;
-}
-
-#contentwrapper {
- max-width: 700px;
- padding: 0 10px 20px 20px;
-}
-
-#header {
- padding: 10px;
- border-top: 6px solid #d20000;
- background-color: #888;
- background-image: url(headerbg.png);
- background-position: top left;
-}
-
-#header h1 {
- margin: 0;
- padding: 0;
- height: 80px;
- background-image: url(jinjabanner.png);
- background-repeat: no-repeat;
-}
-
-#header h1 span {
- display: none;
-}
-
-#navigation {
- border: 1px solid #ccc;
- background-color: #555;
- font-family: 'Trebuchet MS', 'Arial', sans-serif;
- margin: -60px 29px 10px 10px;
- padding: 0;
- float: right;
- list-style: none;
- font-weight: bold;
-}
-
-#navigation li {
- float: left;
- margin: 0;
- padding: 0;
-}
-
-#navigation li a {
- display: block;
- text-decoration: none;
- padding: 5px 10px 5px 10px;
- color: #eee;
-}
-
-#navigation li a:hover {
- color: #fff;
- background-color: #444;
-}
-
-#navigation li.active {
- background-color: #b41717;
-}
-
-#navigation li.active a {
- color: #fff;
-}
-
-#navigation li a:focus {
- outline: none;
- background-color: #222;
- color: #fff;
-}
-
-#contentwrapper h1,
-#contentwrapper h2,
-#contentwrapper h3,
-#contentwrapper h4 {
- font-family: 'Trebuchet MS', 'Arial', sans-serif;
-}
-
-#contentwrapper h2 a,
-#contentwrapper h3 a,
-#contentwrapper h4 a {
- color: #333;
-}
-
-#contentwrapper h1 {
- color: #b41717;
- font-size: 28px;
- margin: 20px 0 0 -8px;
-}
-
-#contentwrapper h2 {
- color: #444;
- font-size: 22px;
- margin: 20px 0 0 0;
-}
-
-#contentwrapper h2.toc {
- color: #222;
- font-size: 16px;
- margin: 20px 0 0 0;
-}