⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 docbookdocument.py

📁 The ZZIPlib provides read access on ZIP-archives. The library uses only the patent-free compression-
💻 PY
字号:
#! /usr/bin/env python# -*- coding: UTF-8 -*-from match import Matchclass DocbookDocument:    """ binds some xml content page with additional markup - in this    variant we set the rootnode container to 'reference' and the DTD    to the Docbook 4.1.2 version. Modify as you like."""    has_title_child = [ "book", "chapter", "section", "reference" ]    docbook_dtd = (        ' PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"'+"\n"+        '       "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"')    def __init__(self, o, filename = None):        self.o = o        self.rootnode = "reference"        self.filename = filename        self.title = ""        self.text = []    def add(self, text):        """ add some content """        self.text += [ text ]        return self    def get_title(self):        if self.title: return title        try:   return self.text[0].get_title()        except Exception, e: pass        return self.title    def _xml_doctype(self, rootnode):        return "<!DOCTYPE "+rootnode+self.docbook_dtd+">"    def _xml_text(self, xml):        """ accepts adapter objects with .xml_text() """        try:   return xml.xml_text()        except Exception, e: print "DocbookDocument/text", e; pass        return str(xml)    def _fetch_rootnode(self, text):        fetch = Match(r"^[^<>]*<(\w+)\b")        if text & fetch: return fetch[1]        return self.rootnode    def _filename(self, filename):        if filename is not None:            self.filename = filename        filename = self.filename        if not filename & Match(r"\.\w+$"):            ext = self.o.docbook            if not ext: ext = "docbook"            filename += "."+ext        return filename    def save(self, filename = None):        filename = self._filename(filename)        print "writing '"+filename+"'"        if len(self.text) > 1:            self.save_all(filename)        else:            self.save_text(filename, self.text[0])    def save_text(self, filename, text):        try:            fd = open(filename, "w")            xml_text = self._xml_text(text)            rootnode = self._fetch_rootnode(xml_text)            doctype = self._xml_doctype(rootnode)            print >>fd, doctype            print >>fd, xml_text            fd.close()            return True        except IOError, e:            print "could not open '"+filename+"'file", e            return False    def save_all(self, filename):        assert len(self.text) > 1        try:            fd = open(filename, "w")            xml_text = self._xml_text(self.text[0])            rootnode = self._fetch_rootnode(xml_text)            if rootnode == self.rootnode:                rootnode = "book"            else:                rootnode = self.rootnode            doctype = self._xml_doctype(rootnode)            print >>fd, doctype            title = self.get_title()            if title and self.rootnode in self.has_title_child:                print >>fd, "<"+self.rootnode+'><title>'+title+'</title>'            elif title:                print >>fd, "<"+self.rootnode+' id="'+title+'">'            else:                print >>fd, "<"+self.rootnode+'>'            for text in self.text:                text = self._xml_text(text)                print >>fd, text            print >>fd, "</"+self.rootnode+">"            fd.close()            return True        except IOError, e:            print "could not open '"+filename+"'file", e            return False

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -