From 9d472dfefac5306f6901057f5ab174ee21563689 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Sun, 4 May 2008 19:56:34 +0200 Subject: [PATCH] added style for html documentation --HG-- branch : trunk --- .hgignore | 2 +- CHANGES | 221 +--------------------------- docs/_static/headerbg.png | Bin 0 -> 281 bytes docs/_static/jinjabanner.png | Bin 0 -> 10539 bytes docs/_static/style.css | 256 +++++++++++++++++++++++++++++++++ docs/_static/watermark.png | Bin 0 -> 9521 bytes docs/_templates/genindex.html | 44 ++++++ docs/_templates/layout.html | 72 ++++++++++ docs/_templates/opensearch.xml | 9 ++ docs/_templates/page.html | 4 + docs/_templates/search.html | 35 +++++ docs/changelog.rst | 4 + docs/conf.py | 14 +- docs/index.rst | 10 +- docs/jinjaext.py | 41 +++++- 15 files changed, 480 insertions(+), 232 deletions(-) create mode 100644 docs/_static/headerbg.png create mode 100644 docs/_static/jinjabanner.png create mode 100644 docs/_static/style.css create mode 100644 docs/_static/watermark.png create mode 100644 docs/_templates/genindex.html create mode 100644 docs/_templates/layout.html create mode 100644 docs/_templates/opensearch.xml create mode 100644 docs/_templates/page.html create mode 100644 docs/_templates/search.html create mode 100644 docs/changelog.rst diff --git a/.hgignore b/.hgignore index 55d124f4..0aa46ee2 100644 --- a/.hgignore +++ b/.hgignore @@ -1,7 +1,7 @@ ^instance$ ^instance/ ^jinja2/.*\.so$ -^docs/_.* +^docs/_build ^(build|dist|Jinja2\.egg-info)/ \.py[co]$ \.DS_Store$ diff --git a/CHANGES b/CHANGES index 85ba238d..0c8e30ee 100644 --- a/CHANGES +++ b/CHANGES @@ -1,221 +1,8 @@ -Jinja Changelog +Jinja2 Changelog =============== -Version 1.3 +Version 2.0 ----------- -(codename to be selected, release around February 2007) +(codename to be selected, release around July 2008) -Version 1.2 ------------ -(codename to be hatsuyuki, released Nov 17th 2007) - -.. admonition:: Backwards Incompatible Changes - - - `call` is a keyword now - - the internal parser AST changed - - `extends` must be the first tag in a template - - the tuple literal yields tuples now, instead of lists. - -- environments now have a `translator_factory` parameter that allows - to change the translator without subclassing the environment. - -- fixed bug in buffet plugin regarding the package loader - -- once again improved debugger. - -- added `groupby` filter. - -- added `sameas` test function. - -- standalone parser. Jinja does not use the python parser any more and will - continue having the same semantics in any future python versions. This - was done in order to simplify updating Jinja to 2.6 and 3.0 and to support - non python syntax. - -- added support for ``expr1 if test else expr2`` (conditional expressions) - -- ``foo.0`` as alias for ``foo[0]`` is possible now. This is mainly for - django compatibility. - -- the filter operators has a much higher priority now which makes it - possible to do ``foo|filter + bar|filter``. - -- new AST. the return value of `Environment.parse` is now a Jinja AST and not - a Jinja-Python AST. This is also the only backwards incompatible change but - should not affect many users because this feature is more or less - undocumented and has few use cases. - -- tuple syntax returns tuples now and not lists any more. - -- the print directive and ``{{ variable }}`` syntax now accepts and implicit - tuple like the `for` and `cycle` tags. (``{{ 1, 2 }}`` is an implicit alias - for ``{{ (1, 2) }}` like ``{% for a, b in seq %}`` is for - ``{% for (a, b) in seq %}``. - -- tests called with *one* parameter don't need parentheses. This gives a more - natural syntax for the `sameas` test and some others: - ``{{ foo is sameas bar }}`` instead of ``{{ foo is sameas(bar) }}``. If you - however want to pass more than one argument you have to use parentheses - because ``{{ foo is sometest bar, baz }}`` is handled as - ``{{ (foo is sometest(bar), baz) }}``, so as tuple expression. - -- removed support for octal character definitions in strings such as - ``'\14'``, use ``'\x0c'`` now. - -- added regular expression literal. ``@/expr/flags`` equals - ``re.compile(r'(?flags)expr')``. This is useful for the `matching` test and - probably some others. - -- added set literal. We do not use python3's {1, 2} syntax because - this conflicts with the dict literal. To be compatible with the regex - literal we use ``@(1, 2)`` instead. - -- fixed bug in `get_attribute` that disallowed retreiving attributes of objects - without a `__class__` such as `_sre.SRE_Pattern`. - -- addded `django.contrib.jinja` which provides advanced support for django. - (thanks Bryan McLemore) - -- debugger is now able to rewrite the whole traceback, not only the first - frame. (requires the optional debugger c module which is compiled - automatically on installation if possible) - -- if the set that is postfixed with a bang (!) it acts like the python 3 - "nonlocal" keyword. This means that you can now override variables - defined in the outer scope from within a loop. - -- ``foo ~ bar`` is now a simpler alternative to ``foo|string + bar|string`` - -- `PackageLoader` can now work without pkg_resources too - -- added `getattribute` and `getitem` filter. - -- added support for the `pretty` library. - -- changed the way the `MemcachedLoaderMixin` creates the class so that it's - possible to hook your own client in. - - -Version 1.1 ------------ -(codename: sinka, released Jun 1, 2007) - -- blocks now support ``{{ super() }}`` to render the parent output. - -- debugging system improved, smaller filesize for the cached files. - Debugging works now well for any module using linecache. - -- ``{{ debug() }}`` can now be used to get a list of filters and - tags. - -- the template lexer keeps not track of brace, parenthesis and - bracket balance in order to not break variable tags apart if they - are configured to look like this: ``${expr}``. This also fixes - the problem with nested dicts in variable expressions. - -- it's now possible to configure the variable blocks to look the - same as the block delimiters. Thus you can set the syntax to something - like ``{ / }`` for both blocks and variables. - -- added whitespace management system for the template designer. - -- some small bugfixes. - -- improved security system regarding function calls and variable - assignment in for loops. - -- added `lipsum` function to generate random text. - -- strings without unicode characters are processed as binary strings now - to workaround problems with `datetime.strftime` which only accepts - binary strings. - -- it's now possible to use newlines in string literals - -- developer friendly traceback is now toggleable - -- the variable failure is now pluggable by replacing the undefined - singleton for an environment instance - -- fixed issue with old-style classes not implementing `__getitem__` - (thanks to Axel Böhm for discovering that bug) - -- added a bunch of new docstrings to the Jinja classes. Makes fun now to - use pydoc :-) - -- fixed severe memcaching bug. Formerly it wasn't possible to use memcaching - without enabling disk cache. - -- fixed a bug that allowed users to override the special names `_`, `true` etc. - -- added `batch` and `slice` filters for batching or slicing sequences - -- added `sum`, `abs`, `round` and `sort` filters. This fixes #238 - -- added `striptags` and `xmlattr` filters for easier SGML/XML processing - -- the trans tag does not need explicit naming for variables with the same - name any more. You can now use ``{% trans foo %}`` instead of the verbose - version ``{% trans foo=foo %}``. - -- reimplemented Buffet plugin so that it works at least for pylons - -- added `Environment.get_translations_for_string` - -- fixed a bug in the parser that didn't unescape keyword arguments. (thanks - to Alexey Melchakov for reporting) - -- You can now use the environment to just tokenize a template. This can - be useful for syntax highlighting or other purposes. - -- added optional C-implementation of the context baseclass. - -- you can now use optional parentheses around macro defintions. Thus it's - possible to write ``{% macro foo(a, b, c) %}`` instead of ``{% macro - foo a, b, c %}``. - -- additional macro arguments now end up in `varargs`. - -- implemented the `{% call %}` block. `call` and `endcall` can still be used - as identifiers until Jinja 1.3 - -- it's now possible to stream templates. - -- fixed a corner case when defining a block inside of a condition - -- the cached loader mixin is now able to cache multiple templates from - different loaders in the same cache folder. - -- Translatable strings returned by ``_()`` will leave their string formatting - signs untouched. Thanks to Stefan Ebner for reporting. - -- ``{% block name "data" %}`` is now an alias for - ``{% block name %}data{% endblock %}``. Note that the second argument can - be an expression. As soon as you specify an expression as second argument - the closing tag has to be omitted. - -- It's now possible to iterate over iterators additionally to sequences. - If the iterator is inifite it will crash however, so makes sure you don't - pass something like that to a template! - -- added `rendetemplate` to render included templates in an isolated - environment and get the outout back. - -- added `simplefilter` decorator. - -- improved ChoiceLoader error reporting (thanks to Bryan McLemore) - -- fixed extended slicing - -- reworked loader layer. All the cached loaders now have "private" non cached - baseclasses so that you can easily mix your own caching layers in. - -- added `MemcachedLoaderMixin` and `MemcachedFileSystemLoader` contributed - by Bryan McLemore. - - -Version 1.0 ------------ -(codename: siyutusan, released Mar 23, 2007) - -- Initial release +- initial release of Jinja2 diff --git a/docs/_static/headerbg.png b/docs/_static/headerbg.png new file mode 100644 index 0000000000000000000000000000000000000000..035f9d4947b0ee8ed87c993222d5bf7eb39f9d7f GIT binary patch literal 281 zc-rd>@N?(olHy`uVBq!ia0vp^j6i&Xg9%73n;^3YNO2Z;L>4nJa0`PlBg3pY5H=O_Up`I0-{=sq7`C5A=whwh!W@g+}zZ>5(ej@)Wnk16ovB4k_?5Aj8p}8Pv3y| zDXMuuh5eo`jv*T7dnY*xF)MPg?5u%QWo_8E1MVme`@Brw{Ps_M=)P^&_V1Y| zcb1v_4CeAy-BENu=l@rw$(DELNbh}m??dcAt7&V$|Gg&r{q1q?^{4$5KYf#5duz{r ZhI?ib>J@q!=YdXR@O1TaS?83{1OWExXD9#w literal 0 Hc-jL100001 diff --git a/docs/_static/jinjabanner.png b/docs/_static/jinjabanner.png new file mode 100644 index 0000000000000000000000000000000000000000..c672118065d1caa3bc52d440aecc99441a252fa8 GIT binary patch literal 10539 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 C$V(>x literal 0 Hc-jL100001 diff --git a/docs/_static/style.css b/docs/_static/style.css new file mode 100644 index 00000000..7675bc25 --- /dev/null +++ b/docs/_static/style.css @@ -0,0 +1,256 @@ +body { + background-color: #333; + margin: 0; + padding: 0; + font-family: 'Georgia', serif; + font-size: 15px; + color: #eee; +} + +div.footer { + padding: 5px; + text-align: center; +} + +div.footer a { + color: #eee; +} + +div.header { + background: url(headerbg.png) repeat-x; + border-top: 6px solid #D20000; + border-bottom: 1px solid #ACACAC; + margin: -10px -10px 0 -10px; +} + +div.relnav { + border-top: 1px solid #F1F1F1; + border-bottom: 1px solid #ACACAC; + background-color: #ECECEC; + padding: 4px 20px 4px 28px; + margin: 0 -10px 10px -10px; + font-size: 13px; +} + +#content { + background-color: white; + color: #111; + background-image: url(watermark.png); + padding: 10px; + margin: 0; +} + +h1.heading { + margin: 0; + padding: 0; + height: 80px; + background-image: url(jinjabanner.png); + background-repeat: no-repeat; +} + +h1.heading a { + display: block; + width: 200px; + height: 80px; +} + +h1.heading span { + display: none; +} + +h2.subheading { + margin: -55px 0 35px 200px; + font-weight: normal; + font-size: 30px; + color: #444; +} + +h2.plain { + margin: 0; +} + +#jinjalogo { + background-image: url(jinjalogo.png); + background-repeat: no-repeat; + width: 400px; + height: 160px; +} + +#contentwrapper { + max-width: 700px; + padding: 0 0 20px 18px; +} + +#contentwrapper h3, +#contentwrapper h3 a { + color: #b41717; + font-size: 26px; + margin: 20px 0 0 -5px; +} + +#contentwrapper h4, +#contentwrapper h4 a { + color: #b41717; + font-size: 20px; + margin: 20px 0 0 0; +} + +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; +} + +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; +} + +dl { + margin-left: 10px; +} + +li, dt { + margin-top: 5px; +} + +dt { + font-weight: bold; +} + +th { + text-align: left; + padding: 3px; + background-color: #f2f2f2; +} + +a { + color: #b41717; +} + +a:hover { + color: #444; +} + +pre { + background-color: #f9f9f9; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 5px; + font-size: 13px; + font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace; +} + +tt { + font-size: 13px; + font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace; + color: black; + padding: 1px 2px 1px 2px; + background-color: #f0f0f0; +} + +cite { + /* abusing , 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; +} + +#toc { + margin: 20px -10px 10px 15px; + padding: 10px; + width: 200px; + float: right; + background-color: #f8f8f8; + border: 1px solid #ccc; + border-right: none; +} + +#toc h3 { + font-size: 20px; + margin: 0 0 10px 0; + padding: 0; + color: #444; +} + +#toc ul { + margin: 0 0 0 30px; + padding: 0; +} + +#toc ul li { + padding: 0; + margin: 2px 0 2px 0; +} + +a.headerlink { + color: #A70000; + font-size: 0.8em; + margin-left: 8px; + padding: 0 4px 0 4px; + text-decoration: none!important; + 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; +} + +a.headerlink:hover { + background-color: #A70000; + color: white!important; +} + +table.indextable { + width: 100%; +} + +table.indextable td { + vertical-align: top; + width: 50%; +} diff --git a/docs/_static/watermark.png b/docs/_static/watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..297d8990c5a23df6f98f811e183171399904aec2 GIT binary patch literal 9521 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 + + {% for key, dummy in genindexentries -%} + {{ key }} {% if not loop.last %}| {% endif %} + {%- endfor %} + +
+ + {% for key, entries in genindexentries %} +

{{ key }}

+
+
+{%- breakat = genindexcounts[loop.index0] // 2 %} +{%- numcols = 1 %} +{%- numitems = 0 %} +{% for entryname, (links, subitems) in entries %} +
{%- if links -%}{{ entryname|e }} + {%- for link in links[1:] %}, [Link]{% endfor -%} + {%- else -%} +{{ entryname|e }} + {%- endif -%}
+ {%- if subitems %} +
+ {%- for subentryname, subentrylinks in subitems %} +
{{ subentryname|e }} + {%- for link in subentrylinks[1:] %}, [Link]{% endfor -%} +
+ {%- endfor %} +
+ {%- endif -%} +{%- numitems = numitems + 1 + len(subitems) -%} +{%- if numcols < 2 and numitems > breakat -%} +{%- numcols = numcols+1 -%} +
+{%- endif -%} +{%- endfor %} +
+{% endfor %} + +{% endblock %} diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html new file mode 100644 index 00000000..83e48ae7 --- /dev/null +++ b/docs/_templates/layout.html @@ -0,0 +1,72 @@ + + + + Jinja2 Documentation + + + + {%- if builder != 'htmlhelp' %} + + + + + {%- endif %} + {%- if use_opensearch and builder != 'htmlhelp' %} + + {%- endif %} + {%- if hasdoc('about') %} + + {%- endif %} + + + + {%- if hasdoc('copyright') %} + + {%- endif %} + + {%- if parents %} + + {%- endif %} + {%- if next %} + + {%- endif %} + {%- if prev %} + + {%- endif %} + + +
+
+

Jinja

+
+
+ {%- if prev %} + « {{ prev.title }} | + {%- endif %} + {{ title }} + {%- if next %} + | {{ next.title }} » + {%- endif %} +
+ {%- if display_toc %} +
+

Table Of Contents

+ {{ toc }} +
+ {%- endif %} +
+ {% block body %}{% endblock %} +
+
+ + + diff --git a/docs/_templates/opensearch.xml b/docs/_templates/opensearch.xml new file mode 100644 index 00000000..9f2fa427 --- /dev/null +++ b/docs/_templates/opensearch.xml @@ -0,0 +1,9 @@ + + + {{ project }} + Search {{ docstitle }} + utf-8 + + {{ docstitle }} + diff --git a/docs/_templates/page.html b/docs/_templates/page.html new file mode 100644 index 00000000..ee6cad3d --- /dev/null +++ b/docs/_templates/page.html @@ -0,0 +1,4 @@ +{% extends 'layout.html' %} +{% block body %} + {{ body }} +{% endblock %} diff --git a/docs/_templates/search.html b/docs/_templates/search.html new file mode 100644 index 00000000..82a78d04 --- /dev/null +++ b/docs/_templates/search.html @@ -0,0 +1,35 @@ +{% extends "layout.html" %} +{% title = 'Search' %} +{% block extrahead %} + +{% endblock %} +{% block body %} +

Search

+

+ 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 less words won't appear in the result list. +

+
+ + +
+ {% if search_performed %} +

Search Results

+ {% if not search_results %} +

Your search did not match any results.

+ {% endif %} + {% endif %} +
+ {% if search_results %} +
    + {% for href, caption, context in search_results %} +
  • {{ caption }} +
    {{ context|e }}
    +
  • + {% endfor %} +
+ {% endif %} +
+{% endblock %} diff --git a/docs/changelog.rst b/docs/changelog.rst new file mode 100644 index 00000000..6e514be8 --- /dev/null +++ b/docs/changelog.rst @@ -0,0 +1,4 @@ +Changelog +========= + +.. jinjachangelog:: diff --git a/docs/conf.py b/docs/conf.py index 8a418743..91e1ca41 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -76,7 +76,7 @@ pygments_style = 'jinjaext.JinjaStyle' # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. -html_style = 'default.css' +html_style = 'style.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". @@ -95,15 +95,11 @@ html_last_updated_fmt = '%b %d, %Y' # typographically correct entities. #html_use_smartypants = True -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} +# use jinja2 for templates +template_bridge = 'jinjaext.Jinja2Bridge' -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_use_modindex = True +# no modindex +html_use_modindex = False # If true, the reST sources are included in the HTML build as _sources/. #html_copy_source = True diff --git a/docs/index.rst b/docs/index.rst index d7b4d89e..db5c1b5b 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,7 +1,7 @@ -Welcome to Jinja2's documentation! -================================== +Jinja2 Documentation +==================== -Contents: +Welcome in the Jinja2 documentation. .. toctree:: :maxdepth: 2 @@ -9,3 +9,7 @@ Contents: intro api templates + + changelog + +* :ref:`genindex` diff --git a/docs/jinjaext.py b/docs/jinjaext.py index 57c70973..78aacf86 100644 --- a/docs/jinjaext.py +++ b/docs/jinjaext.py @@ -8,17 +8,20 @@ :copyright: Copyright 2008 by Armin Ronacher. :license: BSD. """ +import os import re import inspect +import jinja2 +from itertools import islice from types import BuiltinFunctionType from docutils import nodes from docutils.statemachine import ViewList from sphinx.ext.autodoc import prepare_docstring - - +from sphinx.application import TemplateBridge from pygments.style import Style from pygments.token import Keyword, Name, Comment, String, Error, \ Number, Operator, Generic +from jinja2 import Environment, FileSystemLoader class JinjaStyle(Style): @@ -60,6 +63,17 @@ class JinjaStyle(Style): Error: '#F00 bg:#FAA' } + +class Jinja2Bridge(TemplateBridge): + + def init(self, builder): + path = builder.config.templates_path + self.env = Environment(loader=FileSystemLoader(path)) + + def render(self, template, context): + return self.env.get_template(template).render(context) + + _sig_re = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*(\(.*?\))') @@ -112,6 +126,28 @@ def dump_functions(mapping): return directive +def jinja_changelog(dirname, arguments, options, content, lineno, + content_offset, block_text, state, state_machine): + doc = ViewList() + changelog = file(os.path.join(os.path.dirname(jinja2.__file__), '..', + 'CHANGES')) + try: + for line in islice(changelog, 3, None): + doc.append(line.rstrip(), '') + finally: + changelog.close() + node = nodes.section() + # hack around title style bookkeeping + surrounding_title_styles = state.memo.title_styles + surrounding_section_level = state.memo.section_level + state.memo.title_styles = [] + state.memo.section_level = 0 + state.nested_parse(doc, content_offset, node, match_titles=1) + state.memo.title_styles = surrounding_title_styles + state.memo.section_level = surrounding_section_level + return node.children + + from jinja2.defaults import DEFAULT_FILTERS, DEFAULT_TESTS jinja_filters = dump_functions(DEFAULT_FILTERS) jinja_tests = dump_functions(DEFAULT_TESTS) @@ -120,3 +156,4 @@ jinja_tests = dump_functions(DEFAULT_TESTS) def setup(app): app.add_directive('jinjafilters', jinja_filters, 0, (0, 0, 0)) app.add_directive('jinjatests', jinja_tests, 0, (0, 0, 0)) + app.add_directive('jinjachangelog', jinja_changelog, 0, (0, 0, 0)) -- 2.47.2