mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-14 12:47:22 -04:00
185 lines
4.1 KiB
Myghty
185 lines
4.1 KiB
Myghty
|
|
<%python scope="global">
|
|
import sys, string, re
|
|
|
|
# datastructure that will store the whole contents of the documentation
|
|
class TOCElement:
|
|
def __init__(self, filename, name, description, parent = None, ext = None, header = None, last_updated = 0):
|
|
self.filename = filename
|
|
self.name = name
|
|
self.parent = parent
|
|
self.path = self._create_path()
|
|
self.header = header
|
|
|
|
if self.parent is not None:
|
|
self.root = parent.root
|
|
self.root.pathlookup[self.path] = self
|
|
|
|
if self.parent.filename != self.filename:
|
|
self.root.filelookup[self.filename] = self
|
|
self.isTop = True
|
|
else:
|
|
self.root = self
|
|
self.pathlookup = {}
|
|
self.pathlookup[''] = self
|
|
self.filelookup = {}
|
|
self.filelookup[filename] = self
|
|
|
|
if ext is not None:
|
|
self.ext = ext
|
|
else:
|
|
self.ext = self.root.ext
|
|
|
|
self.last_updated = last_updated
|
|
self.description = description
|
|
self.content = None
|
|
self.previous = None
|
|
self.next = None
|
|
self.children = []
|
|
if parent:
|
|
if len(parent.children):
|
|
self.previous = parent.children[-1]
|
|
parent.children[-1].next = self
|
|
parent.children.append(self)
|
|
if last_updated > parent.last_updated:
|
|
parent.last_updated = self.last_updated
|
|
|
|
def get_file(self, name):
|
|
name = re.sub("\.\w+$", "", name)
|
|
return self.root.filelookup[name]
|
|
|
|
def lookup(self, path):
|
|
return self.root.pathlookup[path]
|
|
|
|
def get_link(self, includefile = True, anchor = True):
|
|
if includefile:
|
|
if anchor:
|
|
return "%s%s#%s" % (self.filename, self.ext, self.path)
|
|
else:
|
|
return "%s%s" % (self.filename, self.ext)
|
|
else:
|
|
if anchor:
|
|
return "#" + self.path
|
|
else:
|
|
return ""
|
|
|
|
|
|
def _create_path(self):
|
|
elem = self
|
|
tokens = []
|
|
while elem.parent is not None:
|
|
tokens.insert(0, elem.name)
|
|
elem = elem.parent
|
|
path = string.join(tokens, '_')
|
|
return path
|
|
|
|
|
|
|
|
</%python>
|
|
|
|
<%python scope="request">
|
|
current = Value()
|
|
filename = Value()
|
|
</%python>
|
|
|
|
|
|
<%args scope="request">
|
|
paged = 'yes'
|
|
</%args>
|
|
|
|
<%python scope="init">
|
|
|
|
try:
|
|
a = r
|
|
isdynamic = True
|
|
ext = ".myt"
|
|
except:
|
|
isdynamic = False
|
|
ext = ".html"
|
|
|
|
request_comp = m.request_comp()
|
|
|
|
if isdynamic and not m.interpreter.attributes.get('docs_static_cache', False):
|
|
page_cache = True
|
|
else:
|
|
page_cache = False
|
|
|
|
# for dynamic page, cache the output of the final page
|
|
|
|
if page_cache:
|
|
if m.cache_self(key="doc_%s" % paged, component = request_comp):
|
|
return
|
|
|
|
list_comp = m.fetch_next()
|
|
files = request_comp.attributes['files']
|
|
title = request_comp.attributes.setdefault('title', "Documentation")
|
|
version = request_comp.attributes['version']
|
|
wrapper = request_comp.attributes['wrapper']
|
|
index = request_comp.attributes['index']
|
|
onepage = request_comp.attributes['onepage']
|
|
|
|
|
|
|
|
def buildtoc():
|
|
root = TOCElement("", "root", "root element", ext = ext)
|
|
current.assign(root)
|
|
|
|
for file in files:
|
|
filename.assign(file)
|
|
comp = m.fetch_component(file + ".myt")
|
|
|
|
main = m.scomp(comp)
|
|
|
|
return root
|
|
|
|
if not page_cache:
|
|
# non-dynamic (i.e. command-line) page, cache the datastructure so successive
|
|
# pages are fast (disables auto-recompiling)
|
|
cache = m.get_cache(list_comp)
|
|
|
|
toc = cache.get_value('toc', createfunc = buildtoc)
|
|
|
|
else:
|
|
toc = buildtoc()
|
|
|
|
last_updated = toc.last_updated
|
|
m.comp(wrapper, isdynamic=isdynamic, ext = ext, toc = toc, comp = request_comp, onepage = onepage, paged = paged, title = title, version = version, index=index, last_updated = last_updated)
|
|
|
|
</%python>
|
|
|
|
<%method title>
|
|
<% m.request_comp().get_attribute('title', inherit = True) or "Documentation" %>
|
|
</%method>
|
|
|
|
<%method item>
|
|
<%doc>stores an item in the table of contents</%doc>
|
|
<%args>
|
|
# name should be a URL friendly name used for hyperlinking the section
|
|
name
|
|
|
|
# description is the heading for the item
|
|
description
|
|
|
|
escapedesc = False
|
|
|
|
header = None
|
|
</%args>
|
|
<%python scope="init">
|
|
if escapedesc:
|
|
description = m.apply_escapes(description, ['h'])
|
|
|
|
current(TOCElement(filename(), name, description, current(), header = header, last_updated = m.caller.component_source.last_modified))
|
|
current().content = m.content()
|
|
current(current().parent)
|
|
</%python></%method>
|
|
|
|
|
|
<%method current>
|
|
<%init>return current()</%init>
|
|
</%method>
|
|
|
|
|
|
|
|
|
|
|