[Sqlalchemy-commits] [2375] sqlalchemy/branches/mako-docs/doc/build: progress
Brought to you by:
zzzeek
From: <co...@sq...> - 2007-03-03 20:51:07
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[2375] sqlalchemy/branches/mako-docs/doc/build: progress</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>2375</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2007-03-03 16:53:32 -0600 (Sat, 03 Mar 2007)</dd> </dl> <h3>Log Message</h3> <pre>progress</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemybranchesmakodocsdocbuildgenhtmlpy">sqlalchemy/branches/mako-docs/doc/build/genhtml.py</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildlibtocpy">sqlalchemy/branches/mako-docs/doc/build/lib/toc.py</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildread_markdownpy">sqlalchemy/branches/mako-docs/doc/build/read_markdown.py</a></li> </ul> <h3>Added Paths</h3> <ul> <li><a href="#sqlalchemybranchesmakodocsdocbuildcontentdocstringshtml">sqlalchemy/branches/mako-docs/doc/build/content/docstrings.html</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildcontentdocumentationhtml">sqlalchemy/branches/mako-docs/doc/build/content/documentation.html</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildcontentindexhtml">sqlalchemy/branches/mako-docs/doc/build/content/index.html</a></li> <li>sqlalchemy/branches/mako-docs/doc/build/templates/</li> <li><a href="#sqlalchemybranchesmakodocsdocbuildtemplatesautohandler">sqlalchemy/branches/mako-docs/doc/build/templates/autohandler</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildtemplatesbasehtml">sqlalchemy/branches/mako-docs/doc/build/templates/base.html</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildtemplatescontent_layouthtml">sqlalchemy/branches/mako-docs/doc/build/templates/content_layout.html</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildtemplatesformattinghtml">sqlalchemy/branches/mako-docs/doc/build/templates/formatting.html</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildtemplatesnavhtml">sqlalchemy/branches/mako-docs/doc/build/templates/nav.html</a></li> <li><a href="#sqlalchemybranchesmakodocsdocbuildtemplatestochtml">sqlalchemy/branches/mako-docs/doc/build/templates/toc.html</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemybranchesmakodocsdocbuildcontentdocstringshtml"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/content/docstrings.html (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/content/docstrings.html 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/content/docstrings.html 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,19 @@ </span><ins>+<%flags>inherit='content_layout.myt'</%flags> +<%attr> + title='Modules and Classes' + filename='docstrings' +</%attr> +<%args> + toc + extension +</%args> +<%init> + import cPickle as pickle + import os + filename = os.path.join(os.path.dirname(self.file), 'compiled_docstrings.pickle') + data = pickle.load(file(filename)) +</%init> + +% for obj in data: +<& pydoc.myt:obj_doc, obj=obj, toc=toc, extension=extension &> +% </ins></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildcontentdocumentationhtml"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/content/documentation.html (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/content/documentation.html 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/content/documentation.html 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,23 @@ </span><ins>+<%inherit file="base.html"/> +<%namespace name="tocns" file="toc.html"/> +<%namespace name="nav" file="nav.html"/> +<%page args="toc, extension"/> + +${tocns.toc(toc, extension=extension, paged=False)} + +<%def name="title()"> + Mako Documentation +</%def> + +% for file in toc.filenames: + <% + item = toc.get_by_file(file) + %> + + <A name="${item.path}"></a> + + ${nav.pagenav(item=item, paged=False, extension=extension)} + + ${self.get_namespace(file + '.html').body(toc=toc, extension=extension, paged=False)} +% endfor + </ins></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildcontentindexhtml"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/content/index.html (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/content/index.html 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/content/index.html 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,6 @@ </span><ins>+<%inherit file="base.html"/> +<%page args="toc, extension"/> + +<%namespace name="tocns" file="toc.html"/> + +${tocns.toc(toc, paged=True, extension=extension)} </ins></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildgenhtmlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/mako-docs/doc/build/genhtml.py (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/genhtml.py 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/genhtml.py 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -1,15 +1,16 @@ </span><span class="cx"> #!/usr/bin/env python </span><span class="cx"> import sys,re,os,shutil </span><del>-import myghty.interp -import myghty.exception as exception </del><span class="cx"> import cPickle as pickle </span><span class="cx"> </span><span class="cx"> sys.path = ['../../lib', './lib/'] + sys.path </span><span class="cx"> </span><span class="cx"> import gen_docstrings, read_markdown, toc </span><ins>+from mako.lookup import TemplateLookup +from mako import exceptions </ins><span class="cx"> </span><span class="cx"> files = [ </span><span class="cx"> 'index', </span><ins>+ 'documentation', </ins><span class="cx"> 'tutorial', </span><span class="cx"> 'dbengine', </span><span class="cx"> 'metadata', </span><span class="lines">@@ -20,7 +21,7 @@ </span><span class="cx"> 'types', </span><span class="cx"> 'pooling', </span><span class="cx"> 'plugins', </span><del>- 'docstrings' </del><ins>+# 'docstrings' </ins><span class="cx"> ] </span><span class="cx"> </span><span class="cx"> title='SQLAlchemy 0.3 Documentation' </span><span class="lines">@@ -28,9 +29,9 @@ </span><span class="cx"> </span><span class="cx"> root = toc.TOCElement('', 'root', '', version=version, doctitle=title) </span><span class="cx"> </span><del>-shutil.copy('./content/index.myt', './output/index.myt') -shutil.copy('./content/docstrings.myt', './output/docstrings.myt') -shutil.copy('./content/documentation.myt', './output/documentation.myt') </del><ins>+shutil.copy('./content/index.html', './output/index.html') +shutil.copy('./content/docstrings.html', './output/docstrings.html') +shutil.copy('./content/documentation.html', './output/documentation.html') </ins><span class="cx"> </span><span class="cx"> read_markdown.parse_markdown_files(root, files) </span><span class="cx"> docstrings = gen_docstrings.make_all_docs() </span><span class="lines">@@ -39,29 +40,26 @@ </span><span class="cx"> pickle.dump(docstrings, file('./output/compiled_docstrings.pickle', 'w')) </span><span class="cx"> pickle.dump(root, file('./output/table_of_contents.pickle', 'w')) </span><span class="cx"> </span><del>-component_root = [ - {'components': './components'}, - {'output' :'./output'} -] </del><ins>+template_dirs = ['./templates', './output'] </ins><span class="cx"> output = os.path.dirname(os.getcwd()) </span><span class="cx"> </span><del>-interp = myghty.interp.Interpreter(component_root = component_root, output_encoding='utf-8') </del><ins>+lookup = TemplateLookup(template_dirs, module_directory='./modules', output_encoding='utf-8') </ins><span class="cx"> </span><span class="cx"> def genfile(name, toc): </span><del>- infile = name + ".myt" </del><ins>+ infile = name + ".html" </ins><span class="cx"> outname = os.path.join(os.getcwd(), '../', name + ".html") </span><span class="cx"> outfile = file(outname, 'w') </span><span class="cx"> print infile, '->', outname </span><del>- interp.execute(infile, out_buffer=outfile, request_args={'toc':toc,'extension':'html'}, raise_error=True) </del><ins>+ outfile.write(lookup.get_template(infile).render(attributes={})) </ins><span class="cx"> </span><del>-try: - for filename in files: </del><ins>+for filename in files: + try: </ins><span class="cx"> genfile(filename, root) </span><del>- genfile("documentation", root) -except exception.Error, e: - sys.stderr.write(e.textformat()) </del><ins>+ except: + print exceptions.text_error_template().render() </ins><span class="cx"> </span><span class="cx"> </span><ins>+ </ins><span class="cx"> </span><span class="cx"> </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildlibtocpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/mako-docs/doc/build/lib/toc.py (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/lib/toc.py 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/lib/toc.py 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -4,7 +4,7 @@ </span><span class="cx"> TOCElements define a name, a description, and also a uniquely-identifying "path" which is </span><span class="cx"> used to generate hyperlinks between document sections. </span><span class="cx"> """ </span><del>-import time </del><ins>+import time, re </ins><span class="cx"> </span><span class="cx"> toc_by_file = {} </span><span class="cx"> toc_by_path = {} </span><span class="lines">@@ -13,13 +13,13 @@ </span><span class="cx"> class TOCElement(object): </span><span class="cx"> def __init__(self, filename, name, description, parent=None, version=None, last_updated=None, doctitle=None, **kwargs): </span><span class="cx"> self.filename = filename </span><del>- self.name = name </del><ins>+ self.name = re.sub(r'[<>&;%]', '', name) </ins><span class="cx"> self.description = description </span><span class="cx"> self.parent = parent </span><span class="cx"> self.content = None </span><ins>+ self.filenames = filenames </ins><span class="cx"> self.toc_by_path = toc_by_path </span><span class="cx"> self.toc_by_file = toc_by_file </span><del>- self.filenames = filenames </del><span class="cx"> self.last_updated = time.time() </span><span class="cx"> self.version = version </span><span class="cx"> self.doctitle = doctitle </span><span class="lines">@@ -35,6 +35,7 @@ </span><span class="cx"> toc_by_file[self.filename] = self </span><span class="cx"> if self.filename: </span><span class="cx"> filenames.append(self.filename) </span><ins>+ </ins><span class="cx"> self.root = self.parent or self </span><span class="cx"> </span><span class="cx"> self.content = None </span><span class="lines">@@ -64,7 +65,8 @@ </span><span class="cx"> return "%s.%s" % (self.filename, extension) </span><span class="cx"> else: </span><span class="cx"> return "#%s" % (self.path) </span><del>- </del><ins>+ + </ins><span class="cx"> def _create_path(self): </span><span class="cx"> elem = self </span><span class="cx"> tokens = [] </span></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildread_markdownpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/mako-docs/doc/build/read_markdown.py (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/read_markdown.py 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/read_markdown.py 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -16,13 +16,14 @@ </span><span class="cx"> import markdown </span><span class="cx"> </span><span class="cx"> def dump_tree(elem, stream): </span><del>- if elem.tag.startswith('MYGHTY:'): - dump_myghty_tag(elem, stream) </del><ins>+ if elem.tag.startswith('MAKO:'): + dump_mako_tag(elem, stream) </ins><span class="cx"> else: </span><del>- if len(elem.attrib): - stream.write("<%s %s>" % (elem.tag, " ".join(["%s=%s" % (key, repr(val)) for key, val in elem.attrib.iteritems()]))) - else: - stream.write("<%s>" % elem.tag) </del><ins>+ if elem.tag != 'html': + if len(elem.attrib): + stream.write("<%s %s>" % (elem.tag, " ".join(["%s=%s" % (key, repr(val)) for key, val in elem.attrib.iteritems()]))) + else: + stream.write("<%s>" % elem.tag) </ins><span class="cx"> if elem.text: </span><span class="cx"> stream.write(elem.text) </span><span class="cx"> for child in elem: </span><span class="lines">@@ -31,24 +32,17 @@ </span><span class="cx"> stream.write(child.tail) </span><span class="cx"> stream.write("</%s>" % elem.tag) </span><span class="cx"> </span><del>-def dump_myghty_tag(elem, stream): - tag = elem.tag[7:] - params = ', '.join(['%s=%s' % i for i in elem.items()]) - pipe = '' - if elem.text or len(elem): - pipe = '|' - comma = '' - if params: - comma = ', ' - stream.write('<&%s%s%s%s&>' % (pipe, tag, comma, params)) - if pipe: - if elem.text: - stream.write(elem.text) - for n in elem: - dump_tree(n, stream) - if n.tail: - stream.write(n.tail) - stream.write("</&>") </del><ins>+def dump_mako_tag(elem, stream): + tag = elem.tag[5:] + params = ','.join(['%s=%s' % i for i in elem.items()]) + stream.write('<%%call expr="%s(%s)">' % (tag, params)) + if elem.text: + stream.write(elem.text) + for n in elem: + dump_tree(n, stream) + if n.tail: + stream.write(n.tail) + stream.write("</%call>") </ins><span class="cx"> </span><span class="cx"> def create_toc(filename, tree, tocroot): </span><span class="cx"> title = [None] </span><span class="lines">@@ -80,7 +74,7 @@ </span><span class="cx"> </span><span class="cx"> level[0] = taglevel </span><span class="cx"> </span><del>- tag = et.Element("MYGHTY:formatting.myt:section", path=literal(current[0].path), toc="toc", onepage="onepage") </del><ins>+ tag = et.Element("MAKO:formatting.section", path=repr(current[0].path), paged='paged', extension='extension', toc='toc') </ins><span class="cx"> tag.text = (node.tail or "") + '\n' </span><span class="cx"> tag.tail = '\n' </span><span class="cx"> tag[:] = content </span><span class="lines">@@ -123,9 +117,9 @@ </span><span class="cx"> (bold, path) = m.group(1,2) </span><span class="cx"> text = a.text </span><span class="cx"> if text == path: </span><del>- tag = et.Element("MYGHTY:nav.myt:toclink", path=literal(path), toc="toc", extension="extension", onepage="onepage") </del><ins>+ tag = et.Element("MAKO:nav.toclink", path=repr(path), extension='extension', paged='paged', toc='toc') </ins><span class="cx"> else: </span><del>- tag = et.Element("MYGHTY:nav.myt:toclink", path=literal(path), description=literal(text), toc="toc", extension="extension", onepage="onepage") </del><ins>+ tag = et.Element("MAKO:nav.toclink", path=repr(path), description=repr(text), extension='extension', paged='paged', toc='toc') </ins><span class="cx"> a_parent = parent[a] </span><span class="cx"> if bold: </span><span class="cx"> bold = et.Element('strong') </span><span class="lines">@@ -136,42 +130,32 @@ </span><span class="cx"> tag.tail = a.tail </span><span class="cx"> a_parent[index(a_parent, a)] = tag </span><span class="cx"> </span><del>-def replace_pre_with_myt(tree): - def splice_code_tag(pre, text, type=None, title=None): </del><ins>+def replace_pre_with_mako(tree): + def splice_code_tag(pre, text, code=None, title=None): </ins><span class="cx"> doctest_directives = re.compile(r'#\s*doctest:\s*[+-]\w+(,[+-]\w+)*\s*$', re.M) </span><span class="cx"> text = re.sub(doctest_directives, '', text) </span><del>- # process '>>>' to have quotes around it, to work with the myghty python </del><ins>+ # process '>>>' to have quotes around it, to work with the pygments </ins><span class="cx"> # syntax highlighter which uses the tokenize module </span><span class="cx"> text = re.sub(r'>>> ', r'">>>" ', text) </span><span class="cx"> </span><del>- # indent two spaces. among other things, this helps comment lines "# " from being - # consumed as Myghty comments. - text = re.compile(r'^(?!<&)', re.M).sub(' ', text) - </del><span class="cx"> sqlre = re.compile(r'{sql}(.*?)((?:SELECT|INSERT|DELETE|UPDATE|CREATE|DROP|PRAGMA|DESCRIBE).*?)\n\s*(\n|$)', re.S) </span><span class="cx"> if sqlre.search(text) is not None: </span><span class="cx"> use_sliders = False </span><span class="cx"> else: </span><span class="cx"> use_sliders = True </span><span class="cx"> </span><del>- text = sqlre.sub(r"<&formatting.myt:poplink&>\1\n<&|formatting.myt:codepopper, link='sql'&>\2</&>\n\n", text) </del><ins>+ text = sqlre.sub(r"""${formatting.poplink()}\1\n<%call expr="formatting.codepopper()">\2</%call>\n\n""", text) </ins><span class="cx"> </span><span class="cx"> sqlre2 = re.compile(r'{opensql}(.*?)((?:SELECT|INSERT|DELETE|UPDATE|CREATE|DROP).*?)\n\s*(\n|$)', re.S) </span><del>- text = sqlre2.sub(r"<&|formatting.myt:poppedcode &>\1\n\2</&>\n\n", text) </del><ins>+ text = sqlre2.sub(r"<%call expr='formatting.poppedcode()' >\1\n\2</%call>\n\n", text) </ins><span class="cx"> </span><del>- opts = {} - if type == 'python': - opts['syntaxtype'] = literal('python') - else: - opts['syntaxtype'] = None - - if title is not None: - opts['title'] = literal(title) - </del><ins>+ tag = et.Element("MAKO:formatting.code") + if code: + tag.attrib["syntaxtype"] = repr(code) + if title: + tag.attrib["title"] = repr(title) </ins><span class="cx"> if use_sliders: </span><del>- opts['use_sliders'] = True - - tag = et.Element("MYGHTY:formatting.myt:code", **opts) </del><ins>+ tag.attrib['use_sliders'] = True </ins><span class="cx"> tag.text = text </span><span class="cx"> </span><span class="cx"> pre_parent = parents[pre] </span><span class="lines">@@ -181,16 +165,27 @@ </span><span class="cx"> parents = get_parent_map(tree) </span><span class="cx"> </span><span class="cx"> for precode in tree.findall('.//pre/code'): </span><del>- m = re.match(r'\{(python|code)(?: title="(.*?)"){0,1}\}', precode.text.lstrip()) </del><ins>+ reg = re.compile(r'\{(python|code)(?: title="(.*?)"){0,1}\}(.*)', re.S) + m = reg.match(precode[0].text.lstrip()) </ins><span class="cx"> if m: </span><span class="cx"> code = m.group(1) </span><span class="cx"> title = m.group(2) </span><del>- text = precode.text.lstrip() </del><ins>+ text = m.group(3) </ins><span class="cx"> text = re.sub(r'{(python|code).*?}(\n\s*)?', '', text) </span><del>- splice_code_tag(parents[precode], text, type=code, title=title) </del><ins>+ splice_code_tag(parents[precode], text, code=code, title=title) </ins><span class="cx"> elif precode.text.lstrip().startswith('>>> '): </span><span class="cx"> splice_code_tag(parents[precode], precode.text) </span><span class="cx"> </span><ins>+def safety_code(tree): + parents = get_parent_map(tree) + for code in tree.findall('.//code'): + tag = et.Element('%text') + if parents[code].tag != 'pre': + tag.attrib["filter"] = "h" + tag.text = code.text + code.append(tag) + code.text = "" + </ins><span class="cx"> def reverse_parent(parent, item): </span><span class="cx"> for n, i in enumerate(parent): </span><span class="cx"> if i is item: </span><span class="lines">@@ -200,21 +195,17 @@ </span><span class="cx"> return dict([(c, p) for p in tree.getiterator() for c in p]) </span><span class="cx"> </span><span class="cx"> def header(toc, title, filename): </span><del>- return """#encoding: utf-8 -<%%flags> - inherit='content_layout.myt' -</%%flags> -<%%args> - toc - extension - onepage=False -</%%args> -<%%attr> - title='%s - %s' - filename = '%s' -</%%attr> -<%%doc>This file is generated. Edit the .txt files instead of this one.</%%doc> -""" % (toc.root.doctitle, title, filename) </del><ins>+ return """# -*- coding: utf-8 -*- + <%%inherit file="content_layout.html"/> + <%%page args="toc, extension, paged"/> + <%%namespace name="formatting" file="formatting.html"/> + <%%namespace name="nav" file="nav.html"/> + <%%def name="title()">%s - %s</%%def> + <%%! + filename = '%s' + %%> + ## This file is generated. Edit the .txt files instead of this one. + """ % (toc.root.doctitle, title, filename) </ins><span class="cx"> </span><span class="cx"> class utf8stream(object): </span><span class="cx"> def __init__(self, stream): </span><span class="lines">@@ -230,9 +221,10 @@ </span><span class="cx"> html = markdown.markdown(file(infile).read()) </span><span class="cx"> tree = et.fromstring("<html>" + html + "</html>") </span><span class="cx"> (title, toc_element) = create_toc(inname, tree, toc) </span><del>- replace_pre_with_myt(tree) </del><ins>+ safety_code(tree) + replace_pre_with_mako(tree) </ins><span class="cx"> process_rel_href(tree) </span><del>- outname = 'output/%s.myt' % inname </del><ins>+ outname = 'output/%s.html' % inname </ins><span class="cx"> print infile, '->', outname </span><span class="cx"> outfile = utf8stream(file(outname, 'w')) </span><span class="cx"> outfile.write(header(toc, title, inname)) </span></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildtemplatesautohandler"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/templates/autohandler (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/templates/autohandler 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/templates/autohandler 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,21 @@ </span><ins>+<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + <title>${self.title()}</title> + ${self.style()} +<%def name="style()"> +</%def> + +</head> +<body> +${next.body()} + +</body> +</html> + + +<%def name="title()"> +Documentation +</%def> + + </ins></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildtemplatesbasehtml"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/templates/base.html (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/templates/base.html 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/templates/base.html 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,48 @@ </span><ins>+<%! + from mako.ext.autohandler import autohandler +%> +<%inherit file="${autohandler(template, context)}"/> +<%page cached="False" cache_key="${self.filename}"/> + +<%def name="style()"> + <link rel="stylesheet" href="style.css"></link> + <link rel="stylesheet" href="docs.css"></link> + <link href="syntaxhighlight.css" rel="stylesheet" type="text/css"></link> + <script src="scripts.js"></script> + ${parent.style()} +</%def> + +<%doc> + base.html - common to all documentation pages. intentionally separate + from autohandler, which can be swapped out for a different one +</%doc> + +<% + # bootstrap TOC structure from request args, or pickled file if not present. + import cPickle as pickle + import os, time + print "%s generating from table of contents for file %s" % (local.filename, self.filename) + filename = os.path.join(os.path.dirname(self.filename), 'table_of_contents.pickle') + toc = pickle.load(file(filename)) + version = toc.version + last_updated = toc.last_updated + + kwargs = context.kwargs + kwargs.setdefault('extension', 'html') + extension = kwargs['extension'] + kwargs.setdefault('paged', True) + kwargs.setdefault('toc', toc) +%> + +<div id="topanchor"><a name="top">&nbsp;</a></div> + +<div id="pagecontrol"><a href="index.${extension}">Multiple Pages</a> | <a href="documentation.${extension}">One Page</a></div> + +<h1>${toc.root.doctitle}</h1> + +<div class="versionheader">Version: ${version} Last Updated: ${time.strftime('%x %X', time.localtime(last_updated))}</div> + +${next.body(**kwargs)} + + + </ins></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildtemplatescontent_layouthtml"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/templates/content_layout.html (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/templates/content_layout.html 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/templates/content_layout.html 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,16 @@ </span><ins>+## defines the default layout for normal documentation pages (not including the index) +<%inherit file="base.html"/> +<%page args="toc, extension, paged"/> +<%namespace file="nav.html" import="topnav, pagenav"/> + +<% + current = toc.get_by_file(self.template.module.filename) +%> + +<A name="<% current.path %>"></a> + +${topnav(item=current, toc=toc, extension=extension, paged=paged)} + +${next.body(toc=toc, extension=extension, paged=paged)} + +${pagenav(item=current, extension=extension, paged=paged)} </ins><span class="cx">\ No newline at end of file </span></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildtemplatesformattinghtml"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/templates/formatting.html (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/templates/formatting.html 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/templates/formatting.html 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,136 @@ </span><ins>+## formatting.myt - Provides section formatting elements, syntax-highlighted code blocks, and other special filters. +<%! + import string, re, cgi + from mako import filters + import highlight + + def plainfilter(f): + f = re.sub(r'\n[\s\t]*\n[\s\t]*', '</p>\n<p>', f) + f = "<p>" + f + "</p>" + return f + +%> + +<%namespace name="nav" file="nav.html"/> + +<%def name="section(toc, path, paged, extension, description=None)"> + ## Main section formatting element. + <% + content = capture(caller.body) + re2 = re.compile(r"'''PYESC(.+?)PYESC'''", re.S) + content = re2.sub(lambda m: m.group(1), content) + + item = toc.get_by_path(path) + subsection = item.depth > 1 + %> + <A name="${item.path}"></a> + + <div class="${subsection and 'subsection' or 'section'}"> + + <h3>${description or item.description}</h3> + + ${content} + + % if (subsection and item.next and item.next.depth >= item.depth) or not subsection: + % if paged: + <a href="#top">back to section top</a> + % else: + <a href="#${item.get_page_root().path}">back to section top</a> + % endif + % endif + </div> + +</%def> + + +<%def name="formatplain()" filter="plainfilter"> + ${ caller.body() | h} +</%def> + + +<%def name="codeline()" filter="trim,h"> + <span class="codeline">${ caller.body() }</span> +</%def> + +<%def name="code(title=None, syntaxtype='mako', html_escape=False, use_sliders=False)"> + <% + def fix_indent(f): + f =string.expandtabs(f, 4) + g = '' + lines = string.split(f, "\n") + whitespace = None + for line in lines: + if whitespace is None: + match = re.match(r"^([ ]*).+", line) + if match is not None: + whitespace = match.group(1) + + if whitespace is not None: + line = re.sub(r"^%s" % whitespace, "", line) + + if whitespace is not None or re.search(r"\w", line) is not None: + g += (line + "\n") + + + return g.rstrip() + + p = re.compile(r'<pre>(.*?)</pre>', re.S) + def hlight(match): + return "<pre>" + highlight.highlight(fix_indent(match.group(1)), html_escape = html_escape, syntaxtype = syntaxtype) + "</pre>" + content = p.sub(hlight, "<pre>" + capture(caller.body) + "</pre>") + %> + + <div class="${ use_sliders and "sliding_code" or "code" }"> + % if title is not None: + ${title} + % endif + ${ content } + </div> +</%def> + + +<%def name="popboxlink(name=None, show='show', hide='hide')"> + <% + if name is None: + name = attributes.setdefault('popbox_name', 0) + name += 1 + attributes['popbox_name'] = name + name = "popbox_" + repr(name) + %> +javascript:togglePopbox('${name}', '${show}', '${hide}') +</%def> + +<%def name="popbox(name=None, class_=None)"> +<% + if name is None: + name = 'popbox_' + repr(attributes['popbox_name']) +%> +<div id="${name}_div" class="${class_}" style="display:none;">${capture(caller.body) | trim}</div> +</%def> + +<%def name="poplink(link='sql')"> + <% + href = capture(popboxlink) + %> + '''PYESC${nav.link(href=href, text=link, class_="codepoplink")}PYESC''' +</%def> + +<%def name="codepopper()"> + <% + c = capture(caller.body) + c = re.sub(r'\n', '<br/>\n', c.strip()) + %> + </pre><%call expr="popbox(class_='codepop')">${c}</%call><pre> +</%def> + +<%def name="poppedcode()"> + <% + c = capture(caller.body) + c = re.sub(r'\n', '<br/>\n', c.strip()) + %> + </pre><div class="codepop">${c}</div><pre> +</%def> + + + + </ins></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildtemplatesnavhtml"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/templates/nav.html (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/templates/nav.html 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/templates/nav.html 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,60 @@ </span><ins>+## nav.myt - Provides page navigation elements that are derived from toc.TOCElement structures, including +## individual hyperlinks as well as navigational toolbars and table-of-content listings. +<%namespace name="tocns" file="toc.html"/> + +<%def name="itemlink(item, paged, extension, anchor=True)" filter="trim"> + <a href="${ item.get_link(anchor=anchor, usefilename=paged, extension=extension) }">${ item.description }</a> +</%def> + +<%def name="toclink(toc, path, extension, paged, description=None)" filter="trim"> + <% + item = toc.get_by_path(path) + if description is None: + if item: + description = item.description + else: + description = path + if item: + anchor = not paged or item.depth > 1 + else: + anchor = False + %> + % if item: + <a href="${ item.get_link(extension=extension, anchor=anchor, usefilename=paged) }">${ description }</a> + % else: + <b>${ description }</b> + % endif +</%def> + + +<%def name="link(href, text, class_)" filter="trim"> + <a href="${ href }" ${ class_ and (('class=\"%s\"' % class_) or '')}>${ text }</a> +</%def> + +<%def name="topnav(item, toc, extension, paged)"> + <div class="topnav"> + + ${pagenav(item, extension=extension, paged=paged)} + + <br/> + ${itemlink(item=item, anchor=True, paged=pagd, extension=extension)} + + ${tocns.printtoc(root=item, current=None, anchor_toplevel=True, paged=paged, extension=extension)} + </div> +</%def> + +<%def name="pagenav(item, paged, extension)"> + <div class="toolbar"> + <div class="prevnext"> + % if item.previous is not None: + Previous: ${itemlink(item=item.previous, paged=paged, anchor=not paged, extension=extension)} + % endif + + % if item.next is not None: + ${item.previous is not None and "|" or ""} + Next: ${itemlink(item=item.next, paged=paged, anchor=not paged, extension=extension)} + % endif + </div> + <h3><a href="${paged and 'index' or 'documentation'}.${ extension }">Table of Contents</a></h3> + </div> +</%def> </ins></span></pre></div> <a id="sqlalchemybranchesmakodocsdocbuildtemplatestochtml"></a> <div class="addfile"><h4>Added: sqlalchemy/branches/mako-docs/doc/build/templates/toc.html (2374 => 2375)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/mako-docs/doc/build/templates/toc.html 2007-03-03 21:25:44 UTC (rev 2374) +++ sqlalchemy/branches/mako-docs/doc/build/templates/toc.html 2007-03-03 22:53:32 UTC (rev 2375) </span><span class="lines">@@ -0,0 +1,26 @@ </span><ins>+## toc.myt - prints table of contents listings given toc.TOCElement strucures + +<%def name="toc(toc, paged, extension)"> + <div class="topnav"> + + <a name="full_index"></a> + <h3>Table of Contents</h3> + + ${printtoc(root=toc,paged=paged, extension=extension, current=None,children=True,anchor_toplevel=False)} + + </div> +</%def> + + +<%def name="printtoc(root, paged, extension, current=None, children=True, anchor_toplevel=False)"> + <ul> + % for item in root.children: + <li><A style="${item is current and "font-weight:bold;" or "" }" href="${item.get_link(extension=extension,anchor=anchor_toplevel, usefilename=paged) }">${item.description}</a></li> + + % if children: + ${printtoc(item, current=current, children=True,anchor_toplevel=True, paged=paged, extension=extension)} + % endif + % endfor + </ul> +</%def> + </ins></span></pre> </div> </div> </body> </html> |