root/livinglogic.python.www/site/Python_xmlns.py @ 305:f8f5a547ebaa

Revision 305:f8f5a547ebaa, 36.0 KB (checked in by Walter Doerwald <walter@…>, 15 years ago)

Switch to px everywhere in the stylesheet.

Change layout of the "here" navigation.

Add missing background images.

Add missing dependency for ansistyle/INSTALL.xml.

Line 
1# -*- coding: iso-8859-1 -*-
2import sys, types, inspect
3
4import ll
5from ll import url
6from ll.xist import xsc, sims, parsers
7from ll.xist.ns import html, chars, htmlspecials, specials, abbr, meta, doc, code, xml, text
8
9
10class Page(object):
11    """
12    A webpage in the sitemap tree.
13    This is an abstract class, that provides common
14    functionality for derived classes.
15    """
16
17    class keywords(ll.propclass):
18        def __get__(self):
19            keywords = list(self.localkeywords)
20            page = self
21            while page is not None:
22                keywords[:0] = page.inheritablekeywords
23                page = page.getParent()
24            return keywords
25
26    @ll.notimplemented
27    def getParent(self):
28        pass
29
30    @ll.notimplemented
31    def setParent(self):
32        pass
33
34    @ll.notimplemented
35    def getChildByIndex(self, index):
36        pass
37
38    @ll.notimplemented
39    def getChildByName(self, index):
40        pass
41
42    def getFirstSibling(self):
43        parent = self.getParent()
44        if parent is None:
45            return None
46        else:
47            return parent.getChildByIndex(0)
48
49    def getPrevSibling(self):
50        parent = self.getParent()
51        if parent is None:
52            return None
53        else:
54            sibling = None
55            for child in parent.getChildren():
56                if child is self:
57                    break
58                sibling = child
59            return sibling
60
61    def getNextSibling(self):
62        parent = self.getParent()
63        if parent is None:
64            return None
65        else:
66            sibling = None
67            for child in parent.getChildren():
68                if child is self:
69                    sibling = self
70                elif sibling is not None:
71                    return child
72                else:
73                    sibling = None
74            return None
75
76    def getLastSibling(self):
77        parent = self.getParent()
78        if parent is None:
79            return None
80        else:
81            return parent.getChildByIndex(-1)
82
83    @ll.notimplemented
84    def __len__(self):
85        pass
86
87    def getChildren(self):
88        children = []
89        index = 0
90        while 1:
91            try:
92                children.append(self.getChildByIndex(index))
93            except IndexError:
94                break
95            index + 1
96        return children
97
98    def __getitem__(self, index):
99        if type(index) in (types.IntType, types.LongType):
100            return self.getChildByIndex(index)
101        elif type(index) in (types.StringType, types.UnicodeType):
102            if index=="":
103                index = []
104            else:
105                index = index.split("/")
106        if type(index) in (types.ListType, types.TupleType):
107            result = self
108            for i in index:
109                if type(i) in (types.IntType, types.LongType):
110                    result = result.getChildByIndex(i)
111                elif type(i) in (types.StringType, types.UnicodeType):
112                    result = result.getChildByName(i)
113                else:
114                    raise TypeError("illegal index type %r" % type(i))
115            return result
116        else:
117            raise TypeError("wrong type %s for index (must be int, long, string, unicode or tuple)" % type(index))
118
119    def getPath(self):
120        path = []
121        page = self
122        while page is not None:
123            path.insert(0, page)
124            page = page.getParent()
125        return path
126
127    def getPathString(self):
128        return "/".join([ page.name for page in self.getPath() if page.getParent()])
129
130    def getRoot(self):
131        """
132        return the root page (i.e. the one without a parent)
133        """
134        parent = self
135        while 1:
136            testparent = parent.getParent()
137            if testparent is None:
138                return parent
139            parent = testparent
140
141    def __repr__(self):
142        return '<%s object path="%s" at 0x%x>' % (self.__class__.__name__, self.getPathString(), id(self))
143
144    def getLinks(self):
145        return []
146
147
148class StaticPage(Page):
149    """
150    A webpage in the sitemap tree
151    """
152    def __init__(self, name, *children, **attrs):
153        self.__parent = None
154        self.name = name
155        self.title = None
156        self.crumb = None
157        self.url = None
158        self.header = None
159        self.subheader = None
160        self.localkeywords = []
161        self.inheritablekeywords = []
162        self.description = None
163        for (k, v) in attrs.items():
164            if k=="crumb":
165                self.crumb = v
166            elif k=="url":
167                self.url = v
168            elif k=="title":
169                self.title = v
170            elif k=="header":
171                self.header = v
172            elif k=="subheader":
173                self.subheader = v
174            elif k=="localkeywords":
175                self.localkeywords = v
176            elif k=="inheritablekeywords":
177                self.inheritablekeywords = v
178            elif k=="description":
179                self.description = v
180            else:
181                raise ValueError("unknown keyword %s" % k)
182        for child in children:
183            child.setParent(self) # this creates a cycle
184        self.__children = list(children)
185
186    def getParent(self):
187        return self.__parent
188
189    def setParent(self, parent):
190        self.__parent = parent
191
192    def getChildByIndex(self, index):
193        return self.__children[index]
194
195    def getChildByName(self, index):
196        for child in self.__children:
197            if child.name == index:
198                return child
199        raise KeyError("unknown child %r in page %r" % (index, self.getPathString()))
200
201    def getChildren(self):
202        return self.__children
203
204    def __len__(self):
205        return len(self.__children)
206
207    def getLinks(self):
208        links = super(StaticPage, self).getLinks()
209
210        url = self.url
211        pos = url.rfind(".")
212        if pos>=0:
213            fourl = url[:pos+1] + "fo"
214            pdfurl = url[:pos+1] + "pdf"
215        else:
216            fourl = url + ".fo"
217            pdfurl = url + ".pdf"
218
219        return links + [
220            html.link(href=fourl, rel="alternate", type="text/xml", title="An XSL-FO version of this page"),
221            html.link(href=pdfurl, rel="alternate", type="application/pdf", title="A PDF version of this page"),
222        ]
223
224
225class XISTPage(StaticPage):
226    def getLinks(self):
227        links = super(XISTPage, self).getLinks()
228
229        url = self.url
230        pos = url.rfind(".")
231        if pos>=0:
232            txturl = url[:pos+1] + "txt"
233            xmlurl = url[:pos+1] + "htmlxsc"
234        else:
235            txturl = url + ".txt"
236            xmlurl = url + ".htmlxsc"
237
238        return [
239            html.link(href=txturl, rel="alternate", type="text/plain", title="A plain text version of this page"),
240            html.link(href=xmlurl, rel="alternate", type="text/xml", title=("The ", abbr.xist(), " source of this page"))
241        ] + links
242
243
244class PythonSourcePage(XISTPage):
245    def getLinks(self):
246        links = super(PythonSourcePage, self).getLinks()
247        url = self.url
248        if url.endswith(".html"):
249            url = url[:-5] + "_module.py"
250        else:
251            url = url + "_module.py"
252        return links + [html.link(href=url, rel="alternate", type="text/x-python", title="The Python module described in this page")]
253
254
255pages = XISTPage(u"python",
256    PythonSourcePage(u"core",
257        XISTPage(u"download",
258            crumb=u"Download",
259            title=u"Core download · Python software · LivingLogic AG",
260            header=u"Core download",
261            subheader=u"All versions for download",
262            url=u"root:core/Download.html",
263            localkeywords=["download", "file", "archive"],
264        ),
265        XISTPage(u"history",
266            crumb=u"History",
267            title=u"Core history · Python software · LivingLogic AG",
268            header=u"Core history",
269            subheader=u"The development history",
270            url=u"root:core/History.html",
271            localkeywords=["history", "changes", "version"],
272        ),
273        XISTPage(u"installation",
274            crumb=u"Installation",
275            title=u"Core requirements and installation · Python software · LivingLogic AG",
276            header=u"Core installation",
277            subheader=u"Requirements and installation",
278            url=u"root:core/Installation.html",
279            localkeywords=["installation", "distutils"],
280        ),
281        crumb=u"Core",
282        title=u"Core · Python software · LivingLogic AG",
283        header=u"Core",
284        subheader=u"Common utilities",
285        url=u"root:core/index.html",
286        inheritablekeywords=["Python", "package", "utilities", "decorator", "property", "module", "namespace"],
287    ),
288    PythonSourcePage(u"xist",
289        XISTPage(u"examples",
290            crumb=u"Examples",
291            title=(abbr.xist(), u" examples · Python software · LivingLogic AG"),
292            header=(abbr.xist(), u" examples"),
293            subheader=(u"An introduction to ", abbr.xist(), u" by examples"),
294            url=u"root:xist/Examples.html",
295            localkeywords=[],
296        ),
297        XISTPage(u"howto",
298            crumb=u"Howto",
299            title=(abbr.xist(), u" howto · Python software · LivingLogic AG"),
300            header=(abbr.xist(), u" howto"),
301            subheader=(u"A quick tour of ", abbr.xist()),
302            url=u"root:xist/Howto.html",
303            localkeywords=[],
304        ),
305        PythonSourcePage(u"xsc",
306            crumb=u"xsc",
307            title=(abbr.xist(), u".xsc · Python software · LivingLogic AG"),
308            header=(abbr.xist(), u".xsc"),
309            subheader=(abbr.xist(), u" core classes"),
310            url=u"root:xist/xsc/index.html",
311        ),
312        PythonSourcePage(u"ns",
313            PythonSourcePage(u"html",
314                crumb=u"html",
315                title=(abbr.xist(), u".ns.html · Python software · LivingLogic AG"),
316                header=(abbr.xist(), u".ns.html"),
317                subheader=(u"Module implementing ", abbr.html(), u" 4.01 (with additions)"),
318                url=u"root:xist/ns/html/index.html",
319            ),
320            PythonSourcePage(u"xml",
321                crumb=u"xml",
322                title=(abbr.xist(), u".ns.xml · Python software · LivingLogic AG"),
323                header=(abbr.xist(), u".ns.xml"),
324                subheader=(u"Module for global attributes from the ", abbr.xml(), u" namespace"),
325                url=u"root:xist/ns/xml/index.html",
326            ),
327            PythonSourcePage(u"wml",
328                crumb=u"wml",
329                title=(abbr.xist(), u".ns.wml · Python software · LivingLogic AG"),
330                header=(abbr.xist(), u".ns.wml"),
331                subheader=(u"Module implementing ", abbr.wml(), u" 1.3"),
332                url=u"root:xist/ns/wml/index.html",
333            ),
334            PythonSourcePage(u"ihtml",
335                crumb=u"ihtml",
336                title=(abbr.xist(), u".ns.ihtml · Python software · LivingLogic AG"),
337                header=(abbr.xist(), u".ns.ihtml"),
338                subheader=(u"Module module implementing iMode compatible ", abbr.html()),
339                url=u"root:xist/ns/ihtml/index.html",
340            ),
341            PythonSourcePage(u"docbook",
342                crumb=u"docbook",
343                title=(abbr.xist(), u".ns.docbook · Python software · LivingLogic AG"),
344                header=(abbr.xist(), u".ns.docbook"),
345                subheader=u"Namespace module implementing DocBook 4.3",
346                url=u"root:xist/ns/docbook/index.html",
347            ),
348            PythonSourcePage(u"svg",
349                crumb=u"svg",
350                title=(abbr.xist(), u".ns.svg · Python software · LivingLogic AG"),
351                header=(abbr.xist(), u".ns.svg"),
352                subheader=(u"Namespace module implementing ", abbr.svg(), u" 1.0"),
353                url=u"root:xist/ns/svg/index.html",
354            ),
355            PythonSourcePage(u"abbr",
356                crumb=u"abbr",
357                title=(abbr.xist(), u".ns.abbr · Python software · LivingLogic AG"),
358                header=(abbr.xist(), u".ns.abbr"),
359                subheader=u"Namespace module containing many abbreviation entities",
360                url=u"root:xist/ns/abbr/index.html",
361            ),
362            PythonSourcePage(u"cond",
363                crumb=u"cond",
364                title=(abbr.xist(), u".ns.cond · Python software · LivingLogic AG"),
365                header=(abbr.xist(), u".ns.cond"),
366                subheader=u"Namespace module implementing conditional elements (if, else, etc.)",
367                url=u"root:xist/ns/cond/index.html",
368            ),
369            PythonSourcePage(u"code",
370                crumb=u"code",
371                title=(abbr.xist(), u".ns.code · Python software · LivingLogic AG"),
372                header=(abbr.xist(), u".ns.code"),
373                subheader=(u"Namespace module for embedding Python code in ", abbr.xml()),
374                url=u"root:xist/ns/code/index.html",
375            ),
376            PythonSourcePage(u"form",
377                crumb=u"form",
378                title=(abbr.xist(), u".ns.form · Python software · LivingLogic AG"),
379                header=(abbr.xist(), u".ns.form"),
380                subheader=u"Namespace module implementing form related elements",
381                url=u"root:xist/ns/form/index.html",
382            ),
383            PythonSourcePage(u"php",
384                crumb=u"php",
385                title=(abbr.xist(), u".ns.php · Python software · LivingLogic AG"),
386                header=(abbr.xist(), u".ns.php"),
387                subheader=(u"Namespace module for PHP processing instructions"),
388                url=u"root:xist/ns/php/index.html",
389            ),
390            PythonSourcePage(u"jsp",
391                crumb=u"jsp",
392                title=(abbr.xist(), u".ns.jsp · Python software · LivingLogic AG"),
393                header=(abbr.xist(), u".ns.jsp"),
394                subheader=(u"Namespace module for embedding ", abbr.jsp(), u" code as processing instructions"),
395                url=u"root:xist/ns/jsp/index.html",
396            ),
397            PythonSourcePage(u"meta",
398                crumb=u"meta",
399                title=(abbr.xist(), u".ns.meta · Python software · LivingLogic AG"),
400                header=(abbr.xist(), u".ns.meta"),
401                subheader=u"Namespace module containing meta information elements",
402                url=u"root:xist/ns/meta/index.html",
403            ),
404            PythonSourcePage(u"ruby",
405                crumb=u"ruby",
406                title=(abbr.xist(), u".ns.ruby · Python software · LivingLogic AG"),
407                header=(abbr.xist(), u".ns.ruby"),
408                subheader=u"Namespace implementing the W3C ruby draft",
409                url=u"root:xist/ns/ruby/index.html",
410            ),
411            PythonSourcePage(u"specials",
412                crumb=u"specials",
413                title=(abbr.xist(), u".ns.specials · Python software · LivingLogic AG"),
414                header=(abbr.xist(), u".ns.specials"),
415                subheader=u"Common useful elements",
416                url=u"root:xist/ns/specials/index.html",
417            ),
418            PythonSourcePage(u"htmlspecials",
419                crumb=u"htmlspecials",
420                title=(abbr.xist(), u".ns.htmlspecials · Python software · LivingLogic AG"),
421                header=(abbr.xist(), u".ns.htmlspecials"),
422                subheader=(u"Common useful elements for ", abbr.html(), u" generation"),
423                url=u"root:xist/ns/htmlspecials/index.html",
424            ),
425            PythonSourcePage(u"doc",
426                crumb=u"doc",
427                title=(abbr.xist(), u".ns.doc · Python software · LivingLogic AG"),
428                header=(abbr.xist(), u".ns.doc"),
429                subheader=u"Namespace module for automated documentation generation",
430                url=u"root:xist/ns/doc/index.html",
431            ),
432            PythonSourcePage(u"css",
433                crumb=u"css",
434                title=(abbr.xist(), u".ns.css · Python software · LivingLogic AG"),
435                header=(abbr.xist(), u".ns.css"),
436                subheader=(u"Namespace module implementing ", abbr.css(), u" as ", abbr.xml(), u" elements"),
437                url=u"root:xist/ns/css/index.html",
438            ),
439            PythonSourcePage(u"cssspecials",
440                crumb=u"cssspecials",
441                title=(abbr.xist(), u".ns.cssspecials · Python software · LivingLogic AG"),
442                header=(abbr.xist(), u".ns.cssspecials"),
443                subheader=(u"Module implementing some useful elements for ", abbr.css()),
444                url=u"root:xist/ns/cssspecials/index.html",
445            ),
446            PythonSourcePage(u"struts_html",
447                crumb=u"struts_html",
448                title=(abbr.xist(), u"ns.struts_html · Python software · LivingLogic AG"),
449                header=(abbr.xist(), u".ns.struts_html"),
450                subheader=(u"Mamespace module implementing the the Struts ", abbr.html(), u" tags"),
451                url=u"root:xist/ns/struts_html/index.html",
452            ),
453            PythonSourcePage(u"struts_config",
454                crumb=u"struts_config",
455                title=(abbr.xist(), u".ns.struts_config · Python software · LivingLogic AG"),
456                header=(abbr.xist(), u".ns.struts_config"),
457                subheader=(u"Namespace module for Struts configuration files"),
458                url=u"root:xist/ns/struts_config/index.html",
459            ),
460            crumb=u"ns",
461            title=(abbr.xist(), u".ns"),
462            header=(abbr.xist(), u".ns"),
463            subheader=u"Subpackage containing namespace modules",
464            url=u"root:xist/ns/index.html",
465        ),
466        PythonSourcePage(u"parsers",
467            crumb=u"parsers",
468            title=(abbr.xist(), u".parsers · Python software · LivingLogic AG"),
469            header=(abbr.xist(), u".parsers"),
470            subheader=u"Module with classes for parsing files",
471            url=u"root:xist/parsers/index.html",
472        ),
473        PythonSourcePage(u"converters",
474            crumb=u"converters",
475            title=(abbr.xist(), u".converters · Python software · LivingLogic AG"),
476            header=(abbr.xist(), u".converters"),
477            subheader=u"Module with the converter class",
478            url=u"root:xist/converters/index.html",
479        ),
480        PythonSourcePage(u"presenters",
481            crumb=u"presenters",
482            title=(abbr.xist(), u".presenters · Python software · LivingLogic AG"),
483            header=(abbr.xist(), u".presenters"),
484            subheader=u"Module with classes for printing trees",
485            url=u"root:xist/presenters/index.html",
486        ),
487        PythonSourcePage(u"publishers",
488            crumb=u"publishers",
489            title=(abbr.xist(), u".publishers · Python software · LivingLogic AG"),
490            header=(abbr.xist(), u".publishers"),
491            subheader=u"Module with classes for publishing trees",
492            url=u"root:xist/publishers/index.html",
493        ),
494        PythonSourcePage(u"sims",
495            crumb=u"sims",
496            title=(abbr.xist(), u".sims · Python software · LivingLogic AG"),
497            header=(abbr.xist(), u".sims"),
498            subheader=u"Simple schema validation",
499            url=u"root:xist/sims/index.html",
500        ),
501        PythonSourcePage(u"xfind",
502            crumb=u"xfind",
503            title=(abbr.xist(), u".xfind · Python software · LivingLogic AG"),
504            header=(abbr.xist(), u".xfind"),
505            subheader=u"Tree iteration and filtering",
506            url=u"root:xist/xfind/index.html",
507        ),
508        PythonSourcePage(u"errors",
509            crumb=u"errors",
510            title=(abbr.xist(), u".errors · Python software · LivingLogic AG"),
511            header=(abbr.xist(), u".errors"),
512            subheader=u"Module containing exception classes",
513            url=u"root:xist/errors/index.html",
514        ),
515        XISTPage(u"download",
516            crumb=u"Download",
517            title=(abbr.xist(), u" download · Python software · LivingLogic AG"),
518            header=(abbr.xist(), u" download"),
519            subheader=u"All versions for download",
520            url=u"root:xist/Download.html",
521            localkeywords=["download", "file", "archive"],
522        ),
523        XISTPage(u"history",
524            crumb=u"History",
525            title=(abbr.xist(), u" history · Python software · LivingLogic AG"),
526            header=(abbr.xist(), u" history"),
527            subheader=u"The development history",
528            url=u"root:xist/History.html",
529            localkeywords=["history", "changes", "version"],
530        ),
531        XISTPage(u"installation",
532            crumb=u"Installation",
533            title=(abbr.xist(), u" requirements and installation · Python software · LivingLogic AG"),
534            header=(abbr.xist(), u" installation"),
535            subheader=u"Requirements, installation and configuration",
536            url=u"root:xist/Installation.html",
537            localkeywords=["installation", "distutils"],
538        ),
539        XISTPage(u"migration",
540            crumb=u"Migration",
541            title=(abbr.xist(), u" migration guide · Python software · LivingLogic AG"),
542            header=(abbr.xist(), u" migration"),
543            subheader=(u"How to update your code to new versions of ", abbr.xist()),
544            url=u"root:xist/Migration.html",
545            localkeywords=[],
546        ),
547        XISTPage(u"mailinglists",
548            crumb=u"Mailing lists",
549            title=(abbr.xist(), u" mailing lists · Python software · LivingLogic AG"),
550            header=(abbr.xist(), u" mailing lists"),
551            subheader=u"How to subscribe to the mailing lists",
552            url=u"root:xist/Mailinglists.html",
553            localkeywords=["mailing list", "list", "posting", "discussion", "announcement"],
554        ),
555        crumb=abbr.xist(),
556        title=(abbr.xist(), u" · Python software · LivingLogic AG"),
557        header=abbr.xist(),
558        subheader=(u"An extensible ", abbr.html(), u"/", abbr.xml(), u" generator"),
559        url=u"root:xist/index.html",
560        inheritablekeywords=[abbr.xist(), abbr.xml(), "transformation", abbr.xsl(), "hsc"],
561    ),
562    PythonSourcePage(u"url",
563        XISTPage(u"howto",
564            crumb=u"Howto",
565            title=u"URL howto · Python software · LivingLogic AG",
566            header=u"URL documentation",
567            subheader=u"Special features of URL",
568            url=u"root:url/Howto.html",
569            localkeywords=[],
570        ),
571        XISTPage(u"download",
572            crumb=u"Download",
573            title=u"URL download · Python software · LivingLogic AG",
574            header=u"URL download",
575            subheader=u"All versions for download",
576            url=u"root:url/Download.html",
577            localkeywords=["download", "file", "archive"],
578        ),
579        XISTPage(u"history",
580            crumb=u"History",
581            title=u"URL history · Python software · LivingLogic AG",
582            header=u"URL history",
583            subheader=u"The development history",
584            url=u"root:url/History.html",
585            localkeywords=["packages", "history", "changes", "version"],
586        ),
587        XISTPage(u"installation",
588            crumb=u"Installation",
589            title=u"URL requirements and installation · Python software · LivingLogic AG",
590            header=u"URL installation",
591            subheader=u"Requirements and installation",
592            url=u"root:url/Installation.html",
593            localkeywords=["installation", "distutils"],
594        ),
595        crumb=u"url",
596        title=u"URL · Python software · LivingLogic AG",
597        header=u"url",
598        subheader=(u"Module implementing ", abbr.url(), u"s"),
599        url=u"root:url/index.html",
600    ),
601    PythonSourcePage(u"make",
602        XISTPage(u"download",
603            crumb=u"Download",
604            title=u"Make download · Python software · LivingLogic AG",
605            header=u"Make download",
606            subheader=u"All versions for download",
607            url=u"root:make/Download.html",
608            localkeywords=["packages", "download", "file", "archive"],
609        ),
610        XISTPage(u"history",
611            crumb=u"History",
612            title=u"Make history · Python software · LivingLogic AG",
613            header=u"Make history",
614            subheader=u"The development history",
615            url=u"root:make/History.html",
616            localkeywords=["packages", "history", "changes", "version"],
617        ),
618        XISTPage(u"installation",
619            crumb=u"Installation",
620            title=u"Make requirements and installation · Python software · LivingLogic AG",
621            header=u"Make installation",
622            subheader=u"Requirements and installation",
623            url=u"root:make/Installation.html",
624            localkeywords=["installation", "distutils"],
625        ),
626        XISTPage(u"migration",
627            crumb=u"Migration",
628            title=u"Make migration guide · Python software · LivingLogic AG",
629            header=u"Make migration guide",
630            subheader=u"How to update your code to new versions of Make",
631            url=u"root:make/Migration.html",
632            localkeywords=[],
633        ),
634        crumb=u"Make",
635        title=u"Make · Python software · LivingLogic AG",
636        header=u"Make",
637        subheader=u"Object oriented make replacement",
638        url=u"root:make/index.html",
639        localkeywords=["make", "build", "dependencies", "development", "target"],
640    ),
641    PythonSourcePage(u"color",
642        XISTPage(u"download",
643            crumb=u"Download",
644            title=u"Color download · Python software · LivingLogic AG",
645            header=u"Color download",
646            subheader=u"All versions for download",
647            url=u"root:color/Download.html",
648            localkeywords=["packages", "download", "file", "archive"],
649        ),
650        XISTPage(u"history",
651            crumb=u"History",
652            title=u"Color history · Python software · LivingLogic AG",
653            header=u"Color history",
654            subheader=u"The development history",
655            url=u"root:color/History.html",
656            localkeywords=["packages", "history", "changes", "version"],
657        ),
658        XISTPage(u"installation",
659            crumb=u"Installation",
660            title=u"Color requirements and installation · Python software · LivingLogic AG",
661            header=u"Color installation",
662            subheader=u"Requirements and installation",
663            url=u"root:color/Installation.html",
664            localkeywords=["installation", "distutils"],
665        ),
666        crumb=u"Color",
667        title=u"Color · Python software · LivingLogic AG",
668        header=u"Color",
669        subheader=u"RGB color values and color model conversion",
670        url=u"root:color/index.html",
671        localkeywords=["RGB", "red", "green", "blue", "HSV", "HSB", "HSL", "HLS", "hue", "saturation", "value", "brightness", "luminance"],
672    ),
673    PythonSourcePage(u"sisyphus",
674        XISTPage(u"download",
675            crumb=u"Download",
676            title=u"Sisyphus download · Python software · LivingLogic AG",
677            header=u"Sisyphus download",
678            subheader=u"All versions for download",
679            url=u"root:sisyphus/Download.html",
680            localkeywords=["download", "file", "archive"],
681        ),
682        XISTPage(u"history",
683            crumb=u"History",
684            title=u"Sisyphus history · Python software · LivingLogic AG",
685            header=u"Sisyphus history",
686            subheader=u"The development history",
687            url=u"root:sisyphus/History.html",
688            localkeywords=["history", "changes", "version"],
689        ),
690        crumb=u"Sisyphus",
691        title=u"Sisyphus · Python software · LivingLogic AG",
692        header=u"Sisyphus",
693        subheader=u"Writing cron jobs with Python",
694        url=u"root:sisyphus/index.html",
695        inheritablekeywords=["packages", "Sisyphus", "cron", "job"],
696    ),
697    PythonSourcePage(u"ansistyle",
698        XISTPage(u"download",
699            crumb=u"Download",
700            title=u"ANSIStyle download · Python software · LivingLogic AG",
701            header=u"ANSIStyle download",
702            subheader=u"All versions for download",
703            url=u"root:ansistyle/Download.html",
704            localkeywords=["download", "file", "archive"],
705        ),
706        XISTPage(u"history",
707            crumb=u"History",
708            title=u"ANSIStyle history · Python software · LivingLogic AG",
709            header=u"ANSIStyle history",
710            subheader=u"The development history",
711            url=u"root:ansistyle/History.html",
712            localkeywords=["history", "changes", "version"],
713        ),
714        XISTPage(u"installation",
715            crumb=u"Installation",
716            title=u"ANSIStyle requirements and installation · Python software · LivingLogic AG",
717            header=u"ANSIStyle installation",
718            subheader=u"Requirements and installation",
719            url=u"root:ansistyle/Installation.html",
720            localkeywords=["installation", "distutils"],
721        ),
722        crumb=u"ANSIStyle",
723        title=u"ANSIStyle · Python software · LivingLogic AG",
724        header=u"ANSIStyle",
725        subheader=u"ANSI colors for output streams and strings",
726        url=u"root:ansistyle/index.html",
727        inheritablekeywords=["packages", "ANSIStyle", abbr.ansi(), "escape", "color", "console"],
728    ),
729    PythonSourcePage(u"toxic",
730        XISTPage(u"download",
731            crumb=u"Download",
732            title=u"Toxic download · Python software · LivingLogic AG",
733            header=u"Toxic download",
734            subheader=u"All versions for download",
735            url=u"root:toxic/Download.html",
736            localkeywords=["packages", "download", "file", "archive"],
737        ),
738        XISTPage(u"history",
739            crumb=u"History",
740            title=u"Toxic history · Python software · LivingLogic AG",
741            header=u"Toxic history",
742            subheader=u"The development history",
743            url=u"root:toxic/History.html",
744            localkeywords=["packages", "history", "changes", "version"],
745        ),
746        XISTPage(u"installation",
747            crumb=u"Installation",
748            title=u"Toxic requirements and installation · Python software · LivingLogic AG",
749            header=u"Toxic installation",
750            subheader=u"Requirements and installation",
751            url=u"root:toxic/Installation.html",
752            localkeywords=["installation", "distutils"],
753        ),
754        crumb=u"Toxic",
755        title=u"Toxic · Python software · LivingLogic AG",
756        header=u"Toxic",
757        subheader=(u"Generate Oracle functions from PL/SQL embedded in ", abbr.xml()),
758        url=u"root:toxic/index.html",
759        localkeywords=["Oracle", "user defined function", "PL/SQL", "XML", "HTML", "processing instruction", "PI", "embed"],
760    ),
761    PythonSourcePage(u"orasql",
762        XISTPage(u"download",
763            crumb=u"Download",
764            title=u"OraSQL download · Python software · LivingLogic AG",
765            header=u"OraSQL download",
766            subheader=u"All versions for download",
767            url=u"root:orasql/Download.html",
768            localkeywords=["packages", "download", "file", "archive"],
769        ),
770        XISTPage(u"history",
771            crumb=u"History",
772            title=u"OraSQL history · Python software · LivingLogic AG",
773            header=u"OraSQL history",
774            subheader=u"The development history",
775            url=u"root:orasql/History.html",
776            localkeywords=["packages", "history", "changes", "version"],
777        ),
778        XISTPage(u"installation",
779            crumb=u"Installation",
780            title=u"OraSQL installation · Python software · LivingLogic AG",
781            header=u"OraSQL installation",
782            subheader=u"Requirements and installation",
783            url=u"root:orasql/Installation.html",
784            localkeywords=["installation", "distutils"],
785        ),
786        crumb=u"OraSQL",
787        title=u"OraSQL · Python software · LivingLogic AG",
788        header=u"OraSQL",
789        subheader=u"Utilities for working with cx_Oracle",
790        url=u"root:orasql/index.html",
791        localkeywords=["Oracle", "cx_Oracle"],
792    ),
793    PythonSourcePage(u"sql",
794        XISTPage(u"download",
795            crumb=u"Download",
796            title=u"SQL download · Python software · LivingLogic AG",
797            header=u"SQL download",
798            subheader=u"All versions for download",
799            url=u"root:sql/Download.html",
800            localkeywords=["packages", "download", "file", "archive"]
801        ),
802        XISTPage(u"history",
803            crumb=u"History",
804            title=u"SQL history · Python software · LivingLogic AG",
805            header=u"SQL history",
806            subheader=u"The development history",
807            url=u"root:sql/History.html",
808            localkeywords=["packages", "history", "changes", "version"]
809        ),
810        XISTPage(u"installation",
811            crumb=u"Installation",
812            title=u"SQL requirements and installation · Python software · LivingLogic AG",
813            header=u"SQL installation",
814            subheader=u"Requirements and installation",
815            url=u"root:sql/Installation.html",
816            localkeywords=["installation", "distutils"]
817        ),
818        crumb=u"SQL",
819        title=u"SQL · Python software · LivingLogic AG",
820        header=u"SQL",
821        subheader=(u"Simplifies generating ", abbr.sql(), u" queries"),
822        url=u"root:sql/index.html",
823        localkeywords=["packages", "SQL", "query"]
824    ),
825    XISTPage(u"cvs",
826        crumb=(abbr.cvs(), u" access"),
827        title=(abbr.cvs(), u" access · Python software · LivingLogic AG"),
828        subheader=(u"Access to the ", abbr.cvs(), u" repository via ViewCVS"),
829        url=u"root:cvs.html",
830        localkeywords=[abbr.cvs(), "development", "repository"]
831    ),
832    crumb=u"Python software",
833    title=u"Python software · LivingLogic AG",
834    header=u"Python packages",
835    subheader=u"Python packages and modules by LivingLogic",
836    url=u"root:index.html",
837    inheritablekeywords=["Living", "Logic", "LivingLogic", "Bayreuth", "Python"],
838    localkeywords=["packages", abbr.xist(), "sql", "ansistyle", "sisyphus", "toxic", "orasql"]
839)
840
841
842class cat(xsc.Entity):
843    def convert(self, converter):
844        return html.span(u"CATsystems", class_=u"caps")
845
846
847class hsc(xsc.Entity):
848    def convert(self, converter):
849        return html.span(u"HSC", class_=u"caps")
850
851
852class pageref(xsc.Element):
853    model = sims.NoElements()
854    class Attrs(xsc.Element.Attrs):
855        class ref(xsc.TextAttr): pass
856
857    def convert(self, converter):
858        if "ref" in self.attrs:
859            page = pages[unicode(self["ref"].convert(converter))]
860        else:
861            page = pages
862        e = html.a(self.content, href=page.url, title=page.description)
863        return e.convert(converter)
864
865
866class download(xsc.Element):
867    model = sims.Empty()
868    class Attrs(xsc.Element.Attrs):
869        class href(xsc.TextAttr): pass
870        class type(xsc.TextAttr): pass
871
872    def convert(self, converter):
873        target = converter.target
874        name = url.URL(unicode(self["href"].convert(converter))).file
875        if "type" in self.attrs:
876            type = self["type"]
877        elif name.endswith(".tar.gz") or name.endswith(".tar.bz2") or name.endswith(".zip"):
878            type = "Source"
879        elif name.endswith(".exe"):
880            type = "Windows installer"
881            pos = name.rfind("py")
882            if pos >= 0:
883                version = name[pos+2:-4]
884                type += " (Python %s)" % version
885        elif name.endswith(".src.rpm"):
886            type = "Source RPM"
887        elif name.endswith(".rpm"):
888            type = "Binary RPM"
889        else:
890            type = chars.nbsp()
891
892        if issubclass(target, doc):
893            e = target.item(
894                target.link(unicode(name), href=("http://ftp.livinglogic.de/", self["href"])),
895                " (",
896                type,
897                ", ",
898                specials.filesize(href=("http://ftp.livinglogic.de/", self["href"])),
899                " bytes)"
900            )
901        else:
902            e = html.tr(
903                html.td(html.a(unicode(name), href=("http://ftp.livinglogic.de/", self["href"]), title=("Download http://ftp.livinglogic.de/", self["href"])), class_="file"),
904                html.td(type, class_="type"),
905                html.td(specials.filesize(href=("http://ftp.livinglogic.de/", self["href"])), class_="size"),
906                class_="download"
907            )
908        return e.convert(converter)
909
910
911class downloads(xsc.Element):
912    model = sims.Elements(download)
913    class Attrs(xsc.Element.Attrs):
914        class version(xsc.TextAttr): pass
915        class date(xsc.TextAttr): pass
916
917    def convert(self, converter):
918        target = converter.target
919        if issubclass(target, doc):
920            e = target.section(
921                target.title("Version ", self["version"], " (released ", self["date"], ")"),
922                target.ulist(self.content)
923            )
924        else:
925            e = xsc.Frag(
926                html.tr(
927                    html.th(self["version"], class_="version"),
928                    html.th("Type", class_="type"),
929                    html.th("Size", class_="size")
930                ),
931                self.content
932            )
933            if "date" in self.attrs:
934                e[0][0].append(" ", html.span("(released ", self["date"], ")", class_="note"))
935        return e.convert(converter)
936
937
938class alldownloads(xsc.Element):
939    model = sims.Elements(downloads)
940
941    def convert(self, converter):
942        target = converter.target
943        if issubclass(target, doc):
944            e = self.content
945        else:
946            e = html.div(
947                htmlspecials.plaintable(
948                    self.content,
949                    class_="downloads"
950                ),
951                align="center"
952            )
953        return e.convert(converter)
954
955
956class page(xsc.Element):
957    model = sims.Elements(alldownloads, doc.block)
958    class Attrs(xsc.Element.Attrs):
959        class refresh(xsc.TextAttr): pass
960        class path(xsc.TextAttr): pass
961
962    def _nodetype(self, path, activepath):
963        if path[-1] is activepath[-1]:
964            return "here"
965        elif path[-1] in activepath:
966            return "path"
967        else:
968            return "other"
969
970    def _node(self, path, activepath):
971        type = self._nodetype(path, activepath)
972        page = path[-1]
973        if type == "here":
974            e = html.div(page.crumb)
975            children = True
976        else:
977            e = html.a(html.span(u"\u2713", class_="visited", title="You have already visited that page"), page.crumb, href=page.url, class_=type)
978            children = (type == "path")
979        if len(path) > 1:
980            e = html.li(e, class_=type)
981        else:
982            e = xsc.Frag(e)
983        if children:
984            e.append(self._children(path, activepath))
985        return e
986
987    def _children(self, path, activepath):
988        e = html.ul()
989        for child in path[-1].getChildren():
990            e.append(self._node(path + [child], activepath))
991        return e
992
993    def _links(self, context):
994        return self._node([pages], context.page.getPath())
995
996    def _crumbs(self, context):
997        e = xsc.Frag()
998        page = context.page
999        while page is not None:
1000            if page is context.page:
1001                e.insert(0, html.span(page.crumb, class_="here"))
1002            else:
1003                e.insert(0, self.__ns__.pageref(page.crumb, ref=page.getPathString()))
1004            e.insert(0, u"\xa0\u203a\xa0")
1005            page = page.getParent()
1006        e.insert(0, html.a("Home", href="http://www.livinglogic.de/", hreflang="de", title="The company homepage (in german)"))
1007        return e
1008
1009    def convert(self, converter):
1010        converter[doc.pyref].base = "root:"
1011        target = converter.target
1012        context = converter[self]
1013        context.path = unicode(self["path"].convert(converter))
1014        context.page = pages[context.path]
1015        if issubclass(target, text):
1016            e = target.html(
1017                target.head(
1018                    meta.contenttype(),
1019                    target.title(context.page.title),
1020                ),
1021                target.body(
1022                    self.content
1023                )
1024            )
1025        elif issubclass(target, doc):
1026            return self.content.convert(converter)
1027        elif not issubclass(target, html):
1028            raise ValueError("unknown conversion target %r" % target)
1029        else:
1030            header = xsc.Frag()
1031            if context.page.header:
1032                header.append(html.h1(context.page.header))
1033            if context.page.subheader:
1034                header.append(html.h2(context.page.subheader))
1035
1036            c = htmlspecials.plaintable(
1037                html.tr(
1038                    html.td(htmlspecials.pixel(height=50), class_="header1", width="20%"),
1039                    html.td(header, class_="header2", width="79%"),
1040                    html.td(htmlspecials.pixel(height=120, width=30), class_="header3", width="1%"),
1041                    valign="bottom",
1042                ),
1043                html.tr(
1044                    html.td(htmlspecials.pixel(), class_="crumbs1"),
1045                    html.td(self._crumbs(context), class_="crumbs2"),
1046                ),
1047                html.tr(
1048                    html.td(
1049                        htmlspecials.pixel(width=200),
1050                        self._links(context),
1051                        rowspan=2,
1052                        class_="links",
1053                    ),
1054                    html.td(self.content, class_="content"),
1055                    valign="top",
1056                ),
1057                width="100%",
1058            )
1059
1060            keywords = context.page.keywords
1061            if keywords:
1062                keywords = meta.keywords(xsc.Frag(*keywords).withsep(", "))
1063            else:
1064                keywords = xsc.Null
1065            description = context.page.description
1066            if description is not None:
1067                description = meta.description(description)
1068            else:
1069                description = xsc.Null
1070            if "refresh" in self.attrs:
1071                refresh = html.meta(http_equiv="refresh", content=self["refresh"])
1072            else:
1073                refresh = xsc.Null
1074
1075            firstsibling = context.page.getFirstSibling()
1076            if firstsibling is not None:
1077                if firstsibling != context.page:
1078                    firstsibling = html.link(rel="first", title="First page in set", href=firstsibling.url)
1079                else:
1080                    firstsibling = None
1081
1082            prevsibling = context.page.getPrevSibling()
1083            if prevsibling is not None:
1084                if prevsibling != context.page:
1085                    prevsibling = html.link(rel="prev", title="Previous page", href=prevsibling.url)
1086                else:
1087                    prevsibling = None
1088
1089            nextsibling = context.page.getNextSibling()
1090            if nextsibling is not None:
1091                if nextsibling != context.page:
1092                    nextsibling = html.link(rel="next", title="Next page", href=nextsibling.url)
1093                else:
1094                    nextsibling = None
1095
1096            lastsibling = context.page.getLastSibling()
1097            if lastsibling is not None:
1098                if lastsibling != context.page:
1099                    lastsibling = html.link(rel="last", title="Last page in set", href=lastsibling.url)
1100                else:
1101                    lastsibling = None
1102
1103            parent = context.page.getParent()
1104            if parent is not None:
1105                parent = html.link(rel="up", href=parent.url)
1106
1107            top = context.page.getRoot()
1108            if top is not None:
1109                if top != context.page:
1110                    top = html.link(rel="top", href=top.url)
1111                else:
1112                    top = None
1113
1114            icbm = "49.9433; 11.5703"
1115
1116            e = target.html(
1117                target.head(
1118                    meta.contenttype(),
1119                    target.title(context.page.title),
1120                    meta.stylesheet(href="root:main_screen.css", media="screen, projection, tv"),
1121                    meta.stylesheet(href="root:doc_screen.css", media="screen, projection, tv"),
1122                    meta.stylesheet(href="root:main_print.css", media="print"),
1123                    meta.stylesheet(href="root:doc_print.css", media="print"),
1124                    meta.author(name=u"Walter Dörwald", email="walter.doerwald@livinglogic.de"),
1125                    html.meta(name="icbm", content=icbm),
1126                    html.meta(name="geo.position", content=icbm),
1127                    html.meta(name="geo.placename", content="Bayreuth, Germany, Europe"),
1128                    html.meta(name="geo.region", content="DE-BY"),
1129                    html.meta(name="DC.title", content=context.page.title),
1130                    html.link(rel="icon", href="root:images/favicon.gif", type="image/gif"),
1131                    top,
1132                    parent,
1133                    firstsibling,
1134                    prevsibling,
1135                    nextsibling,
1136                    lastsibling,
1137                    context.page.getLinks(),
1138                    keywords,
1139                    description,
1140                    refresh
1141                ),
1142                target.body(c),
1143                {(xml, "lang"): "en"},
1144                lang="en",
1145            )
1146            e = xsc.Frag(
1147                xml.XML10(),
1148                "\n",
1149                target.DocTypeXHTML10transitional(),
1150                "\n",
1151                e
1152            )
1153        return e.convert(converter)
1154
1155
1156class xmlns(xsc.Namespace):
1157    xmlname = "py"
1158    xmlurl = "http://xmlns.livinglogic.de/Python"
1159xmlns.makemod(vars())
1160
Note: See TracBrowser for help on using the browser.