diff options
author | Daniel Neuhäuser <ich@danielneuhaeuser.de> | 2010-08-11 14:23:58 +0200 |
---|---|---|
committer | Daniel Neuhäuser <ich@danielneuhaeuser.de> | 2010-08-11 14:23:58 +0200 |
commit | 1d4c7d4fe01bc768ebb0bfc9765f58a86dcc74c6 (patch) | |
tree | 8da3846b879af3aade139942bf8183f6e9a2bb6e /sphinx/builders/websupport.py | |
parent | 4a2a6a7eab051ae5b44c15243acc4d142b984874 (diff) | |
download | sphinx-git-1d4c7d4fe01bc768ebb0bfc9765f58a86dcc74c6.tar.gz |
Added initial versioning support
Diffstat (limited to 'sphinx/builders/websupport.py')
-rw-r--r-- | sphinx/builders/websupport.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/sphinx/builders/websupport.py b/sphinx/builders/websupport.py index 8cc70ea0c..e1bd80111 100644 --- a/sphinx/builders/websupport.py +++ b/sphinx/builders/websupport.py @@ -12,14 +12,23 @@ import cPickle as pickle from os import path from cgi import escape +from glob import glob +import os import posixpath import shutil + from docutils.io import StringOutput +from docutils.utils import Reporter from sphinx.util.osutil import os_path, relative_uri, ensuredir, copyfile from sphinx.util.jsonimpl import dumps as dump_json from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.writers.websupport import WebSupportTranslator +from sphinx.environment import WarningStream +from sphinx.versioning import add_uids, merge_doctrees + +def is_paragraph(node): + return node.__class__.__name__ == 'paragraph' class WebSupportBuilder(StandaloneHTMLBuilder): """ @@ -28,13 +37,39 @@ class WebSupportBuilder(StandaloneHTMLBuilder): name = 'websupport' out_suffix = '.fpickle' + def init(self): + StandaloneHTMLBuilder.init(self) + for f in glob(path.join(self.doctreedir, '*.doctree')): + copyfile(f, f + '.old') + def init_translator_class(self): self.translator_class = WebSupportTranslator + def get_old_doctree(self, docname): + fp = self.env.doc2path(docname, self.doctreedir, '.doctree.old') + try: + f = open(fp, 'rb') + try: + doctree = pickle.load(f) + finally: + f.close() + except IOError: + return None + doctree.settings.env = self.env + doctree.reporter = Reporter(self.env.doc2path(docname), 2, 5, + stream=WarningStream(self.env._warnfunc)) + return doctree + def write_doc(self, docname, doctree): destination = StringOutput(encoding='utf-8') doctree.settings = self.docsettings + old_doctree = self.get_old_doctree(docname) + if old_doctree: + list(merge_doctrees(old_doctree, doctree, is_paragraph)) + else: + list(add_uids(doctree, is_paragraph)) + self.cur_docname = docname self.secnumbers = self.env.toc_secnumbers.get(docname, {}) self.imgpath = '/' + posixpath.join(self.app.staticdir, '_images') @@ -123,6 +158,9 @@ class WebSupportBuilder(StandaloneHTMLBuilder): shutil.move(path.join(self.outdir, '_static'), path.join(self.app.builddir, self.app.staticdir, '_static')) + for f in glob(path.join(self.doctreedir, '*.doctree.old')): + os.remove(f) + def dump_search_index(self): self.indexer.finish_indexing() |