Changeset 205:3f36299ff25c in livinglogic.python.www for site/Python_xmlns.py

Show
Ignore:
Timestamp:
07/31/03 23:56:26 (16 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Update for XIST 2.2 with all new downloads.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • site/Python_xmlns.py

    r203 r205  
    44from ll import url 
    55from ll.xist import xsc, parsers 
    6 from ll.xist.ns import html, htmlspecials, specials, abbr, meta, doc, code, xml 
    7  
    8 class Page: 
     6from ll.xist.ns import html, htmlspecials, specials, abbr, meta, doc, code, xml, text 
     7 
     8class Page(object): 
    99    """ 
    1010    A webpage in the sitemap tree. 
     
    177177                return parent 
    178178            parent = testparent 
     179 
    179180    def __repr__(self): 
    180181        return '<%s object path="%s" at 0x%x>' % (self.__class__.__name__, self.getPathString(), id(self)) 
     182 
     183    def getLinks(self): 
     184        return [] 
    181185 
    182186class StaticPage(Page): 
     
    260264        return len(self.__children) 
    261265 
     266    def getLinks(self): 
     267        links = super(StaticPage, self).getLinks() 
     268 
     269        url = self.getURL() 
     270        pos = url.rfind(".") 
     271        if pos>=0: 
     272            fourl = url[:pos+1] + "fo" 
     273            pdfurl = url[:pos+1] + "pdf" 
     274        else: 
     275            fourl = url + ".fo" 
     276            pdfurl = url + ".pdf" 
     277 
     278        return links + [ 
     279            html.link(href=fourl, rel="alternate", type="text/xml", title="An XSL-FO version of this page"), 
     280            html.link(href=pdfurl, rel="alternate", type="application/pdf", title="A PDF version of this page"), 
     281        ] 
     282 
    262283class XISTPage(StaticPage): 
    263     def __init__(self, name, *children, **attrs): 
    264         StaticPage.__init__(self, name, *children, **attrs) 
     284    def getLinks(self): 
     285        links = super(XISTPage, self).getLinks() 
     286 
     287        url = self.getURL() 
     288        pos = url.rfind(".") 
     289        if pos>=0: 
     290            txturl = url[:pos+1] + "txt" 
     291            xmlurl = url[:pos+1] + "htmlxsc" 
     292        else: 
     293            txturl = url + ".txt" 
     294            xmlurl = url + ".htmlxsc" 
     295 
     296        return [ 
     297            html.link(href=txturl, rel="alternate", type="text/plain", title="A plain text version of this page"), 
     298            html.link(href=xmlurl, rel="alternate", type="text/xml", title=("The ", abbr.xist(), " source of this page")) 
     299        ] + links 
     300 
     301class PythonSourcePage(XISTPage): 
     302    def getLinks(self): 
     303        links = super(PythonSourcePage, self).getLinks() 
    265304        url = self.getURL() 
    266305        if url.endswith(".html"): 
    267             url = url[:-5] + "_page.txt" 
    268         else: 
    269             url = url + "_page.txt" 
    270         self.__source = StaticPage("Page source", 
    271             crumb="Page source", 
    272             title=(self.getTitle(), " page source"), 
    273             linkinfo=("The ", abbr.xist(), " source of this page"), 
    274             url=url 
    275         ) 
    276         self.__source.setParent(self) 
    277  
    278     def getChildByIndex(self, index): 
    279         if index<0: 
    280             index = len(self)+index 
    281         if index==StaticPage.__len__(self): 
    282             return self.__source 
    283         else: 
    284             return StaticPage.getChildByIndex(self, index) 
    285  
    286     def getChildByName(self, index): 
    287         if index=="pagesource": 
    288             return self.__source 
    289         else: 
    290             return StaticPage.getChildByName(self, index) 
    291  
    292     def getChildren(self): 
    293         return StaticPage.getChildren(self) + [self.__source] 
    294  
    295     def __len__(self): 
    296         return StaticPage.__len__(self) + 1 
    297    
    298 class PythonSourcePage(XISTPage): 
    299     def __init__(self, name, *children, **attrs): 
    300         XISTPage.__init__(self, name, *children, **attrs) 
    301         url = self.getURL() 
    302         if url.endswith(".html"): 
    303             url = url[:-5] + "_module.txt" 
    304         else: 
    305             url = url + "_module.txt" 
    306         self.__source = StaticPage("Module source", 
    307             crumb="Module source", 
    308             title=(self.getTitle(), " module source"), 
    309             linkinfo="The Python source of this module", 
    310             url=url 
    311         ) 
    312         self.__source.setParent(self) 
    313  
    314     def getChildByIndex(self, index): 
    315         if index<0: 
    316             index = len(self)+index 
    317         if index==XISTPage.__len__(self): 
    318             return self.__source 
    319         else: 
    320             return XISTPage.getChildByIndex(self, index) 
    321  
    322     def getChildByName(self, index): 
    323         if index=="modulesource": 
    324             return self.__source 
    325         else: 
    326             return XISTPage.getChildByName(self, index) 
    327  
    328     def getChildren(self): 
    329         return XISTPage.getChildren(self) + [self.__source] 
    330  
    331     def __len__(self): 
    332         return XISTPage.__len__(self) + 1 
     306            url = url[:-5] + "_module.py" 
     307        else: 
     308            url = url + "_module.py" 
     309        return links + [html.link(href=url, rel="alternate", type="text/x-python", title="The Python module described in this page")] 
    333310 
    334311pages = XISTPage("Python", 
     
    502479            linkinfo="Module with classes for publishing trees", 
    503480            url="root:xist/publishers/index.html" 
     481        ), 
     482        PythonSourcePage("errors", 
     483            crumb="errors", 
     484            title=(abbr.xist(), ".errors"), 
     485            linkinfo="Module containing exception classes", 
     486            url="root:xist/errors/index.html" 
    504487        ), 
    505488        XISTPage("Download", 
     
    642625            localkeywords=["history", "changes", "version"] 
    643626        ), 
     627        XISTPage("Installation", 
     628            crumb="Installation", 
     629            title="ANSIStyle installation", 
     630            linkinfo="Requirements and installation", 
     631            url="root:ansistyle/Installation.html", 
     632            localkeywords=["installation", "distutils"] 
     633        ), 
    644634        crumb="ANSIStyle", 
    645635        linkinfo="ANSI colors for output streams and strings", 
    646636        url="root:ansistyle/index.html", 
    647637        inheritablekeywords=["packages", "ANSIStyle", abbr.ansi(), "escape", "color", "console"] 
    648     ), 
    649     PythonSourcePage("FileUtils", 
    650         XISTPage("Download", 
    651             crumb="Download", 
    652             title="FileUtils download", 
    653             linkinfo="All versions for download", 
    654             url="root:fileutils/Download.html", 
    655             localkeywords=["packages", "download", "file", "archive"] 
    656         ), 
    657         XISTPage("History", 
    658             crumb="History", 
    659             title="FileUtils history", 
    660             linkinfo="The development history", 
    661             url="root:fileutils/History.html", 
    662             localkeywords=["packages", "history", "changes", "version"] 
    663         ), 
    664         XISTPage("Installation", 
    665             crumb="Installation", 
    666             title="FileUtils installation", 
    667             linkinfo="Requirements and installation", 
    668             url="root:fileutils/Installation.html", 
    669             localkeywords=["installation", "distutils"] 
    670         ), 
    671         crumb="FileUtils", 
    672         title="FileUtils", 
    673         linkinfo="File i/o related utilities", 
    674         url="root:fileutils/index.html", 
    675         localkeywords=["packages", "file", "i/o"] 
    676638    ), 
    677639    PythonSourcePage("SQL", 
     
    705667        crumb=(abbr.cvs(), " access"), 
    706668        title=(abbr.cvs(), " access"), 
    707         linkinfo=("Access to the ", abbr.cvs(), " repository via anonymous ", abbr.cvs(), " and ViewCVS"), 
     669        linkinfo=("Access to the ", abbr.cvs(), " repository via ViewCVS"), 
     670        #linkinfo=("Access to the ", abbr.cvs(), " repository via anonymous ", abbr.cvs(), " and ViewCVS"), 
    708671        url="root:cvs.html", 
    709672        localkeywords=[abbr.cvs(), "development", "repository"] 
     
    821784 
    822785    def convert(self, converter): 
     786        target = converter.target 
    823787        context = converter[self.__class__] 
    824788        context.path = unicode(self["path"].convert(converter)) 
    825789        context.page = pages[context.path] 
    826790        # if the page does not have a "content" element, the whole page's content is considered as the page content 
    827         e_content = self.find(type=content) 
     791        e_content = self.content.find(xsc.FindType(content)) 
    828792        if not len(e_content): 
    829793            e_content = self.content 
    830         # the page has a "content" element, so we have to check the elements "trail" and "links" as well 
    831         c = htmlspecials.plaintable( 
    832             html.tr( 
    833                 html.td(htmlspecials.pixel(height=50)), # links 
    834                 html.td( # content 
    835                     html.a( 
    836                         htmlspecials.autoimg( 
    837                             src="root:images/LivingLogicKlein.gif", 
    838                             border=0, 
    839                             alt="" 
     794        if issubclass(target, text): 
     795            e = target.html( 
     796                target.head( 
     797                    meta.contenttype(), 
     798                    target.title(self["title"]), 
     799                ), 
     800                target.body( 
     801                    e_content 
     802                ) 
     803            ) 
     804        elif issubclass(target, doc): 
     805            return e_content.convert(converter) 
     806        elif not issubclass(target, html): 
     807            raise ValueError("unknown conversion target %r" % target) 
     808        else: 
     809            c = htmlspecials.plaintable( 
     810                html.tr( 
     811                    html.td(htmlspecials.pixel(height=50)), # links 
     812                    html.td( # content 
     813                        html.a( 
     814                            htmlspecials.autoimg( 
     815                                src="root:images/LivingLogicKlein.gif", 
     816                                border=0, 
     817                                alt="" 
     818                            ), 
     819                            href="http://www.livinglogic.de/", 
     820                            hreflang="de", 
     821                            title="The company homepage (in german)" 
    840822                        ), 
    841                         href="http://www.livinglogic.de/", 
    842                         hreflang="de", 
    843                         title="The company homepage (in german)" 
     823                        align="left", 
     824                        valign="middle", 
     825                        height=50 
    844826                    ), 
    845                     align="left", 
    846                     valign="middle", 
    847                     height=50 
     827                    class_="header" # this covers the background image 
    848828                ), 
    849                 class_="header" # this covers the background image 
    850             ), 
    851             html.tr( 
    852                 html.td(colspan=2, class_="linie") 
    853             ), 
    854             html.tr( 
    855                 html.td(htmlspecials.pixel()), 
    856                 html.td(html.div(self._crumbs(context), class_="crumbs")), 
    857                 valign="top" 
    858             ), 
    859             html.tr( 
    860                 html.td(self.__links(context)), 
    861                 html.td(html.div(e_content, class_="content")), 
    862                 valign="top" 
    863             ), 
    864             width="100%" 
    865         ) 
    866  
    867         keywords = context.page.getKeywords() 
    868         if len(keywords): 
    869             keywords = meta.keywords(xsc.Frag(*keywords).withsep(", ")) 
    870         else: 
    871             keywords = xsc.Null 
    872         description = context.page.getDescription() 
    873         if description is not None: 
    874             description = meta.description(description) 
    875         else: 
    876             description = xsc.Null 
    877         if self.attrs.has("refresh"): 
    878             refresh = html.meta(http_equiv="refresh", content=self["refresh"]) 
    879         else: 
    880             refresh = xsc.Null 
    881  
    882         firstsibling = context.page.getFirstSibling() 
    883         if firstsibling is not None: 
    884             if firstsibling != context.page: 
    885                 firstsibling = html.link(rel="first", title="First page in set", href=firstsibling.getURL()) 
     829                html.tr( 
     830                    html.td(colspan=2, class_="linie") 
     831                ), 
     832                html.tr( 
     833                    html.td(htmlspecials.pixel()), 
     834                    html.td(html.div(self._crumbs(context), class_="crumbs")), 
     835                    valign="top" 
     836                ), 
     837                html.tr( 
     838                    html.td(self.__links(context)), 
     839                    html.td(html.div(e_content, class_="content")), 
     840                    valign="top" 
     841                ), 
     842                width="100%" 
     843            ) 
     844 
     845            keywords = context.page.getKeywords() 
     846            if len(keywords): 
     847                keywords = meta.keywords(xsc.Frag(*keywords).withsep(", ")) 
    886848            else: 
    887                 firstsibling = None 
    888  
    889         prevsibling = context.page.getPrevSibling() 
    890         if prevsibling is not None: 
    891             if prevsibling != context.page: 
    892                 prevsibling = html.link(rel="prev", title="Previous page", href=prevsibling.getURL()) 
     849                keywords = xsc.Null 
     850            description = context.page.getDescription() 
     851            if description is not None: 
     852                description = meta.description(description) 
    893853            else: 
    894                 prevsibling = None 
    895  
    896         nextsibling = context.page.getNextSibling() 
    897         if nextsibling is not None: 
    898             if nextsibling != context.page: 
    899                 nextsibling = html.link(rel="next", title="Next page", href=nextsibling.getURL()) 
     854                description = xsc.Null 
     855            if "refresh" in self.attrs: 
     856                refresh = html.meta(http_equiv="refresh", content=self["refresh"]) 
    900857            else: 
    901                 nextsibling = None 
    902  
    903         lastsibling = context.page.getLastSibling() 
    904         if lastsibling is not None: 
    905             if lastsibling != context.page: 
    906                 lastsibling = html.link(rel="last", title="Last page in set", href=lastsibling.getURL()) 
    907             else: 
    908                 lastsibling = None 
    909  
    910         parent = context.page.getParent() 
    911         if parent is not None: 
    912             parent = html.link(rel="up", href=parent.getURL()) 
    913  
    914         top = context.page.getRoot() 
    915         if top is not None: 
    916             if top != context.page: 
    917                 top = html.link(rel="top", href=top.getURL()) 
    918             else: 
    919                 top = None 
    920  
    921         e = html.html( 
    922             html.head( 
    923                 meta.contenttype(), 
    924                 html.title(self["title"]), 
    925                 meta.stylesheet(href="root:Main.css", media="screen, projection, tv"), 
    926                 meta.stylesheet(href="root:Doc.css", media="screen, projection, tv"), 
    927                 meta.stylesheet(href="root:MainPrint.css", media="print"), 
    928                 meta.stylesheet(href="root:DocPrint.css", media="print"), 
    929                 html.script(type="text/javascript", src="root:Main.js"), 
    930                 meta.author(name=u"Walter Dörwald", email="walter.doerwald@livinglogic.de"), 
    931                 html.link(rel="icon", href="root:images/favicon.gif", type="image/gif"), 
    932                 top, 
    933                 parent, 
    934                 firstsibling, 
    935                 prevsibling, 
    936                 nextsibling, 
    937                 lastsibling, 
    938                 keywords, 
    939                 description, 
    940                 refresh 
    941             ), 
    942             html.body( 
    943                 html.div(htmlspecials.autoimg(src=("root:images/Backdrops/Nautilus-", self["class_"], ".jpg"), alt=""), class_="backdrop"), 
    944                 html.div(c, class_="page"), 
    945                 onload="wireAllRollovers()", 
    946                 class_=self["class_"] 
    947             ), 
    948             {(xml, "lang"): "en"}, 
    949             lang="en", 
    950         ) 
    951         e = xsc.Frag( 
    952             xml.XML10(), 
    953             "\n", 
    954             html.DocTypeXHTML10transitional(), 
    955             "\n", 
    956             e 
    957         ) 
     858                refresh = xsc.Null 
     859 
     860            firstsibling = context.page.getFirstSibling() 
     861            if firstsibling is not None: 
     862                if firstsibling != context.page: 
     863                    firstsibling = html.link(rel="first", title="First page in set", href=firstsibling.getURL()) 
     864                else: 
     865                    firstsibling = None 
     866 
     867            prevsibling = context.page.getPrevSibling() 
     868            if prevsibling is not None: 
     869                if prevsibling != context.page: 
     870                    prevsibling = html.link(rel="prev", title="Previous page", href=prevsibling.getURL()) 
     871                else: 
     872                    prevsibling = None 
     873 
     874            nextsibling = context.page.getNextSibling() 
     875            if nextsibling is not None: 
     876                if nextsibling != context.page: 
     877                    nextsibling = html.link(rel="next", title="Next page", href=nextsibling.getURL()) 
     878                else: 
     879                    nextsibling = None 
     880 
     881            lastsibling = context.page.getLastSibling() 
     882            if lastsibling is not None: 
     883                if lastsibling != context.page: 
     884                    lastsibling = html.link(rel="last", title="Last page in set", href=lastsibling.getURL()) 
     885                else: 
     886                    lastsibling = None 
     887 
     888            parent = context.page.getParent() 
     889            if parent is not None: 
     890                parent = html.link(rel="up", href=parent.getURL()) 
     891 
     892            top = context.page.getRoot() 
     893            if top is not None: 
     894                if top != context.page: 
     895                    top = html.link(rel="top", href=top.getURL()) 
     896                else: 
     897                    top = None 
     898 
     899            e = target.html( 
     900                target.head( 
     901                    meta.contenttype(), 
     902                    target.title(self["title"]), 
     903                    meta.stylesheet(href="root:Main.css", media="screen, projection, tv"), 
     904                    meta.stylesheet(href="root:Doc.css", media="screen, projection, tv"), 
     905                    meta.stylesheet(href="root:MainPrint.css", media="print"), 
     906                    meta.stylesheet(href="root:DocPrint.css", media="print"), 
     907                    meta.author(name=u"Walter Dörwald", email="walter.doerwald@livinglogic.de"), 
     908                    html.link(rel="icon", href="root:images/favicon.gif", type="image/gif"), 
     909                    top, 
     910                    parent, 
     911                    firstsibling, 
     912                    prevsibling, 
     913                    nextsibling, 
     914                    lastsibling, 
     915                    context.page.getLinks(), 
     916                    keywords, 
     917                    description, 
     918                    refresh 
     919                ), 
     920                target.body( 
     921                    target.div(htmlspecials.autoimg(src=("root:images/Backdrops/Nautilus-", self["class_"], ".jpg"), alt=""), class_="backdrop"), 
     922                    target.div(c, class_="page"), 
     923                    class_=self["class_"] 
     924                ), 
     925                {(xml, "lang"): "en"}, 
     926                lang="en", 
     927            ) 
     928            e = xsc.Frag( 
     929                xml.XML10(), 
     930                "\n", 
     931                target.DocTypeXHTML10transitional(), 
     932                "\n", 
     933                e 
     934            ) 
    958935        return e.convert(converter) 
    959936 
     
    969946 
    970947    def convert(self, converter): 
    971         if self.attrs.has("ref"): 
     948        if "ref" in self.attrs: 
    972949            page = pages[unicode(self["ref"].convert(converter))] 
    973950        else: 
     
    980957 
    981958    def convert(self, converter): 
    982         e = html.div( 
    983             htmlspecials.plaintable( 
    984                 self.content, 
    985                 class_="downloads" 
    986             ), 
    987             align="center" 
    988         ) 
     959        target = converter.target 
     960        if issubclass(target, doc): 
     961            e = self.content 
     962        else: 
     963            e = html.div( 
     964                htmlspecials.plaintable( 
     965                    self.content, 
     966                    class_="downloads" 
     967                ), 
     968                align="center" 
     969            ) 
    989970        return e.convert(converter) 
    990971 
     
    996977 
    997978    def convert(self, converter): 
    998         e = xsc.Frag( 
    999             html.tr( 
    1000                 html.th(self["version"], class_="version"), 
    1001                 html.th("Type", class_="type"), 
    1002                 html.th("Size", class_="size") 
    1003             ), 
    1004             self.content 
    1005         ) 
    1006         if self.attrs.has("date"): 
    1007             e[0][0].append(" ", html.span("(released ", self["date"], ")", class_="note")) 
     979        target = converter.target 
     980        if issubclass(target, doc): 
     981            e = target.section( 
     982                target.title("Version ", self["version"], " (released ", self["date"], ")"), 
     983                target.ulist(self.content) 
     984            ) 
     985        else: 
     986            e = xsc.Frag( 
     987                html.tr( 
     988                    html.th(self["version"], class_="version"), 
     989                    html.th("Type", class_="type"), 
     990                    html.th("Size", class_="size") 
     991                ), 
     992                self.content 
     993            ) 
     994            if "date" in self.attrs: 
     995                e[0][0].append(" ", html.span("(released ", self["date"], ")", class_="note")) 
    1008996        return e.convert(converter) 
    1009997 
     
    10151003 
    10161004    def convert(self, converter): 
     1005        target = converter.target 
    10171006        name = url.URL(unicode(self["href"].convert(converter))).file 
    1018         if self.attrs.has("type"): 
     1007        if "type" in self.attrs: 
    10191008            type = self["type"] 
    10201009        elif name.endswith(".tar.gz") or name.endswith(".tar.bz2") or name.endswith(".zip"): 
     
    10281017        else: 
    10291018            type = html.nbsp() 
    1030         e = html.tr( 
    1031             html.td(html.a(unicode(name), href=("http://ftp.livinglogic.de/", self["href"]), title=("Download http://ftp.livinglogic.de/", self["href"])), class_="file"), 
    1032             html.td(type, class_="type"), 
    1033             html.td(specials.filesize(href=("http://ftp.livinglogic.de/", self["href"])), class_="size"), 
    1034             class_="download" 
    1035         ) 
     1019 
     1020        if issubclass(target, doc): 
     1021            e = target.item( 
     1022                target.link(unicode(name), href=("http://ftp.livinglogic.de/", self["href"])), 
     1023                " (", 
     1024                type, 
     1025                ", ", 
     1026                specials.filesize(href=("http://ftp.livinglogic.de/", self["href"])), 
     1027                " bytes)" 
     1028            ) 
     1029        else: 
     1030            e = html.tr( 
     1031                html.td(html.a(unicode(name), href=("http://ftp.livinglogic.de/", self["href"]), title=("Download http://ftp.livinglogic.de/", self["href"])), class_="file"), 
     1032                html.td(type, class_="type"), 
     1033                html.td(specials.filesize(href=("http://ftp.livinglogic.de/", self["href"])), class_="size"), 
     1034                class_="download" 
     1035            ) 
    10361036        return e.convert(converter) 
    10371037 
     
    10431043xmlns.makemod(vars()) 
    10441044 
    1045