[svn] jinja webpage update. (one dirty script more)
authorArmin Ronacher <armin.ronacher@active-4.com>
Tue, 13 Mar 2007 21:29:01 +0000 (22:29 +0100)
committerArmin Ronacher <armin.ronacher@active-4.com>
Tue, 13 Mar 2007 21:29:01 +0000 (22:29 +0100)
--HG--
branch : trunk

17 files changed:
docs/generate.py
jinja/datastructure.py
jinja/exceptions.py
jinja/translators/python.py
www/documentation.html
www/documentation.tmpl
www/documentation/item.tmpl [new file with mode: 0644]
www/download.html
www/download.tmpl
www/faq.html
www/faq.tmpl
www/generate.py
www/index.html
www/index.tmpl
www/layout/base.html
www/layout/base.tmpl
www/static/style.css

index 0c155c0574ae4d97f528949b00f77f8091ed1fd4..a6dbb4e432ce863ea232d166bb56a3b415b67e1d 100755 (executable)
@@ -109,7 +109,7 @@ LIST_OF_FILTERS = generate_list_of_filters()
 LIST_OF_TESTS = generate_list_of_tests()
 LIST_OF_LOADERS = generate_list_of_loaders()
 
-TEMPLATE = e.from_string('''\
+FULL_TEMPLATE = e.from_string('''\
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
 <html>
@@ -156,6 +156,13 @@ TEMPLATE = e.from_string('''\
 </html>\
 ''')
 
+PREPROC_TEMPLATE = e.from_string('''\
+<!-- TITLE -->{{ title }}<!-- ENDTITLE -->
+<!-- TOC -->{% for key, value in toc %}<li><a href="{{
+    key }}">{{ value }}</a></li>{% endfor %}<!-- ENDTOC -->
+<!-- BODY -->{{ body }}<!-- ENDBODY -->\
+''')
+
 def pygments_directive(name, arguments, options, content, lineno,
                       content_offset, block_text, state, state_machine):
     try:
@@ -238,7 +245,7 @@ def generate_documentation(data, link_style):
     }
 
 
-def handle_file(filename, fp, dst):
+def handle_file(filename, fp, dst, preproc):
     now = datetime.now()
     title = os.path.basename(filename)[:-4]
     content = fp.read()
@@ -248,11 +255,15 @@ def handle_file(filename, fp, dst):
     c['style'] = PYGMENTS_FORMATTER.get_style_defs('.syntax')
     c['generation_date'] = now
     c['file_id'] = title
-    result.write(TEMPLATE.render(c).encode('utf-8'))
+    if preproc:
+        tmpl = PREPROC_TEMPLATE
+    else:
+        tmpl = FULL_TEMPLATE
+    result.write(tmpl.render(c).encode('utf-8'))
     result.close()
 
 
-def run(dst, sources=()):
+def run(dst, preproc, sources=(), handle_file=handle_file):
     path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src'))
     if not sources:
         sources = [os.path.join(path, fn) for fn in os.listdir(path)]
@@ -262,13 +273,13 @@ def run(dst, sources=()):
         print 'Processing %s' % fn
         f = open(fn)
         try:
-            handle_file(fn, f, dst)
+            handle_file(fn, f, dst, preproc)
         finally:
             f.close()
 
 
-def main(dst='build/', *sources):
-    return run(os.path.realpath(dst), sources)
+def main(dst='build/', preproc=False, *sources):
+    run(os.path.realpath(dst), str(preproc).lower() == 'true', sources)
 
 
 if __name__ == '__main__':
index 3b13ae060b62477abb385ed8f3619c9607f957d1..c15519f40a9c6352f442f0b9e508b7a26ac064e5 100644 (file)
@@ -33,6 +33,10 @@ class UndefinedType(object):
             raise TypeError('cannot create %r instances' %
                             self.__class__.__name__)
 
+    def __add__(self, other):
+        return other
+    __sub__ = __mul__ = __div__ = __add__
+
     def __getitem__(self, arg):
         return self
 
index c13725e0df900b0bf0fa9ad1a7d9e2eabe7bcdec..08732811f7253626b614660d70e2758032885bcc 100644 (file)
@@ -47,6 +47,15 @@ class TestNotFound(KeyError, TemplateError):
         KeyError.__init__(self, message)
 
 
+class TestArgumentError(TypeError, TemplateError):
+    """
+    An argument passed to a test function was invalid.
+    """
+
+    def __init__(self, message):
+        TypeError.__init__(self, message)
+
+
 class TemplateNotFound(IOError, TemplateError):
     """
     Raised if a template does not exist.
index a71a4f532b737e1c1372f57ceb28718d202dffc9..4caddd95ffc3c93ab52eff78283f0b007889fa90 100644 (file)
@@ -232,6 +232,14 @@ class PythonTranslator(Translator):
             raise AssertionError('unhandled node %r' % node.__class__)
         return out
 
+    def reset(self):
+        self.indention = 0
+        self.last_cycle_id = 0
+
+    def translate(self):
+        self.reset()
+        return self.handle_node(self.node)
+
     # -- jinja nodes
 
     def handle_template(self, node):
@@ -851,11 +859,3 @@ class PythonTranslator(Translator):
         for n in node.nodes:
             args.append(self.handle_node(n))
         return '[%s]' % ':'.join(args)
-
-    def reset(self):
-        self.indention = 0
-        self.last_cycle_id = 0
-
-    def translate(self):
-        self.reset()
-        return self.handle_node(self.node)
index 2edeb79182b10d27d6ed36dbf22a3bf36ff3fbdd..d674dfe2011b964d575612ddf3e6618c1616bb84 100644 (file)
       <h1>Jinja</h1>
     </div>
     <ul id="navigation">
-                  <li><a href="./index.html">Index</a></li>
-                        <li><a href="./faq.html">FAQ</a></li>
-                        <li class="active">Documentation</li>
-                        <li><a href="./download.html">Download</a></li>
-              </ul>
+          <li><a href="./index.html">Index</a></li>
+          <li><a href="./faq.html">FAQ</a></li>
+          <li class="active"><a href="./documentation.html">Documentation</a></li>
+          <li><a href="./download.html">Download</a></li>
+        </ul>
         <div id="content">
       <div id="contentwrapper">
           <h1>Documentation</h1>
   <p>
-    You can browse the documentation either online or download it:
+    Currently Jinja 1 in still under heavy development and we have neither
+    released a final version nor do we provide a documentation you can download.
+    However you can browse the documentation of the current SVN version online:
   </p>
+  <p><a href="./documentation/index.html">browse online documentation</a></p>
       </div>
-      <p id="meta">
-        <a href="./documentation.tmpl">show template source</a>
-      </p>
     </div>
     <div id="footer">
       &copy; Copyright 2007 by the Pocoo Team.
index 2e6fa97ea84b41848bff0a24eef6e9225d84eedd..49ae1456891fdbf7eb0be6cd963bb1d009a3e4a4 100644 (file)
@@ -1,8 +1,12 @@
 <% extends 'layout/base.tmpl' %>
-<% block title %>Documentation<% endblock %>
+<% set title = 'Documentation' %>
+<% set active_page = 'documentation' %>
 <% block content %>
   <h1>Documentation</h1>
   <p>
-    You can browse the documentation either online or download it:
+    Currently Jinja 1 in still under heavy development and we have neither
+    released a final version nor do we provide a documentation you can download.
+    However you can browse the documentation of the current SVN version online:
   </p>
+  <p><a href="./documentation/index.html">browse online documentation</a></p>
 <% endblock %>
diff --git a/www/documentation/item.tmpl b/www/documentation/item.tmpl
new file mode 100644 (file)
index 0000000..a5f3009
--- /dev/null
@@ -0,0 +1,11 @@
+<% 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 %>
index 996fb38c2653c316cbd6eb932352d2172a578ca0..277b46ef26ef61ae0cc3946a05640c12453d3049 100644 (file)
       <h1>Jinja</h1>
     </div>
     <ul id="navigation">
-                  <li><a href="./index.html">Index</a></li>
-                        <li><a href="./faq.html">FAQ</a></li>
-                        <li><a href="./documentation.html">Documentation</a></li>
-                        <li class="active">Download</li>
-              </ul>
+          <li><a href="./index.html">Index</a></li>
+          <li><a href="./faq.html">FAQ</a></li>
+          <li><a href="./documentation.html">Documentation</a></li>
+          <li class="active"><a href="./download.html">Download</a></li>
+        </ul>
         <div id="content">
       <div id="contentwrapper">
           <h1>Download</h1>
@@ -41,9 +41,6 @@
     <a href="http://trac.pocoo.org/browser/jinja/trunk">here</a>.
   </p>
       </div>
-      <p id="meta">
-        <a href="./download.tmpl">show template source</a>
-      </p>
     </div>
     <div id="footer">
       &copy; Copyright 2007 by the Pocoo Team.
index 53aac9215a3c71c14754686019c38e6fe3648a89..f8d8d190bdedf2bfcf62462e514d39e2924a3162 100644 (file)
@@ -1,5 +1,6 @@
 <% extends 'layout/base.tmpl' %>
-<% block title %>Download<% endblock %>
+<% set title = 'Download' %>
+<% set active_page = 'download' %>
 <% block content %>
   <h1>Download</h1>
   <p>
index 7d0cadc746d80dee4e87387376705851dc427d20..b0ff3b050ed5220a3d10f756de0facdcf5459274 100644 (file)
       <h1>Jinja</h1>
     </div>
     <ul id="navigation">
-                  <li><a href="./index.html">Index</a></li>
-                        <li class="active">FAQ</li>
-                        <li><a href="./documentation.html">Documentation</a></li>
-                        <li><a href="./download.html">Download</a></li>
-              </ul>
+          <li><a href="./index.html">Index</a></li>
+          <li class="active"><a href="./faq.html">FAQ</a></li>
+          <li><a href="./documentation.html">Documentation</a></li>
+          <li><a href="./download.html">Download</a></li>
+        </ul>
         <div id="content">
       <div id="contentwrapper">
           <h1>Frequently Asked Questions</h1>
@@ -61,9 +61,6 @@
     you probably want to check out Jinja.
   </p>
       </div>
-      <p id="meta">
-        <a href="./faq.tmpl">show template source</a>
-      </p>
     </div>
     <div id="footer">
       &copy; Copyright 2007 by the Pocoo Team.
index 55eb8a3dd34baaf070cc0003b072525f030a5bc4..630aeef53480b39b256fafde1fd81c2c3881105a 100644 (file)
@@ -1,5 +1,6 @@
 <% extends 'layout/base.tmpl' %>
-<% block title %>FAQ<% endblock %>
+<% set title = 'FAQ' %>
+<% set active_page = 'faq' %>
 <% block content %>
   <h1>Frequently Asked Questions</h1>
   <p>
index b68818b3b689745f93034955ce89f7f35f3167c6..6edd973ba38add65e3fab85991f580e6025e8150 100755 (executable)
@@ -4,6 +4,8 @@
     ~~~~~~~~~~~~~~~~~~~~~~~
 """
 import os
+import sys
+import re
 from codecs import open
 from jinja import Environment, FileSystemLoader
 from jinja.filters import stringfilter
@@ -11,6 +13,11 @@ 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')
 
@@ -30,6 +37,7 @@ def get_files(folder):
             yield fn
 
 
+# generate static stuff
 for filename in get_files('.'):
     root = './' + ''.join(['../' for _ in os.path.dirname(filename).
                            split(os.path.sep)[1:]])
@@ -37,11 +45,42 @@ for filename in get_files('.'):
     t = env.get_template(filename)
     f = open(filename[:-5] + '.html', 'w', 'utf-8')
     f.write(t.render(
-        file_id=filename[2:-5],
         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
index 8615465b36cd5ea6eb994fa6cc3a172400b4532c..c4fb8b8e87d39946f67e63726c40b7e57025fe85 100644 (file)
       <h1>Jinja</h1>
     </div>
     <ul id="navigation">
-                  <li class="active">Index</li>
-                        <li><a href="./faq.html">FAQ</a></li>
-                        <li><a href="./documentation.html">Documentation</a></li>
-                        <li><a href="./download.html">Download</a></li>
-              </ul>
+          <li class="active"><a href="./index.html">Index</a></li>
+          <li><a href="./faq.html">FAQ</a></li>
+          <li><a href="./documentation.html">Documentation</a></li>
+          <li><a href="./download.html">Download</a></li>
+        </ul>
         <div id="content">
       <div id="contentwrapper">
           <h1>Jinja Templates</h1>
@@ -81,9 +81,6 @@ You can then use this block by calling it:
         no problem to use ASP/PHP/Ruby syntax, html comments for blocks etc.</li>
   </ul>
       </div>
-      <p id="meta">
-        <a href="./index.tmpl">show template source</a>
-      </p>
     </div>
     <div id="footer">
       &copy; Copyright 2007 by the Pocoo Team.
index 6e7d4fe5ad37be899de247057de5fb7d2ea003b9..a354486519557158d246e71a78af4abf07117cec 100644 (file)
@@ -1,5 +1,6 @@
 <% extends 'layout/base.tmpl' %>
-<% block title %>Index<% endblock %>
+<% set title = 'Index' %>
+<% set active_page = 'index' %>
 <% block content %>
   <h1>Jinja Templates</h1>
   <p>
index c4fbe16b86ebc002a7da3fbe0bbd87bb81b3673c..bcfd39dbccab575c55745524c6266520a9371618 100644 (file)
       <h1>Jinja</h1>
     </div>
     <ul id="navigation">
-                  <li><a href="./../index.html">Index</a></li>
-                        <li><a href="./../faq.html">FAQ</a></li>
-                        <li><a href="./../documentation.html">Documentation</a></li>
-                        <li><a href="./../download.html">Download</a></li>
-              </ul>
+          <li><a href="./../index.html">Index</a></li>
+          <li><a href="./../faq.html">FAQ</a></li>
+          <li><a href="./../documentation.html">Documentation</a></li>
+          <li><a href="./../download.html">Download</a></li>
+        </ul>
         <div id="content">
       <div id="contentwrapper">
               </div>
-      <p id="meta">
-        <a href="./../layout/base.tmpl">show template source</a>
-      </p>
     </div>
     <div id="footer">
       &copy; Copyright 2007 by the Pocoo Team.
index 8f6d8c5950fa1a75c9e7203a932ee88b2faa79c1..b6317ff0ccfeaac5f2546abbb9c12a5303b86821 100644 (file)
@@ -4,12 +4,11 @@
   ('documentation', 'Documentation'),
   ('download', 'Download')
 ] %>
-<% block code %><% endblock %>
 <!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><% block title %>Untitled<% endblock %> | Jinja Template Engine</title>
+    <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" />
     </div>
     <ul id="navigation">
     <% for id, caption in navigation %>
-      <% if id == file_id or id.startswith(file_id + '/') %>
-        <li class="active"><%= caption|escape %></li>
-      <% else %>
-        <li><a href="<%= root %><%= id|escape %>.html"><%= caption|escape %></a></li>
-      <% endif %>
+      <li<% if id == active_page %> class="active"<% endif
+        %>><a href="<%= root %><%= id|escape %>.html"><%= caption|escape
+        %></a></li>
     <% endfor %>
     </ul>
     <% if trace %>
@@ -43,9 +40,6 @@
       <div id="contentwrapper">
         <% block content %><% endblock %>
       </div>
-      <p id="meta">
-        <a href="<%= root + file_id + '.tmpl' %>">show template source</a>
-      </p>
     </div>
     <div id="footer">
       &copy; Copyright 2007 by the Pocoo Team.
index 9070d40738a65f939021390cb5a184b4f38c41ae..ff33585464c9ab4bc38777d9ddfd14878781cf77 100644 (file)
@@ -48,6 +48,69 @@ pre {
     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);
@@ -62,8 +125,9 @@ pre {
     border: 4px solid #ddd;
     border-top: none;
     background-color: #fff;
+    color: #999;
     text-align: right;
-    padding: 0 10px 5px 0;
+    padding: 0 20px 20px 0;
 }
 
 #contentwrapper {
@@ -94,6 +158,10 @@ pre {
     font-weight: bold;
 }
 
+#navigation li {
+    margin: 0;
+}
+
 #navigation li a {
     display: block;
     text-decoration: none;
@@ -107,9 +175,11 @@ pre {
 }
 
 #navigation li.active {
-    padding: 5px 10px 5px 10px;
     background-color: #b41717;
-    color: white;
+}
+
+#navigation li.active a {
+    color: #fff;
 }
 
 #navigation li a:focus {
@@ -130,9 +200,8 @@ pre {
     margin: 20px 0 0 0;
 }
 
-#meta {
-    clear: both;
-    text-align: right;
-    color: #888;
-    font-size: 13px;
+#contentwrapper h2.toc {
+    color: #222;
+    font-size: 16px;
+    margin: 20px 0 0 0;
 }