[Python-checkins] r65275 - in doctools/trunk: Makefile sphinx/__init__.py sphinx/builder.py sphinx/directives/other.py sphinx/environment.py sphinx/htmlwriter.py sphinx/latexwriter.py sphinx/texinputs/sphinx.sty tests/test_config.py tests/test_markup.py tests/util.py
georg.brandl
python-checkins at python.org
Tue Jul 29 11:07:38 CEST 2008
Author: georg.brandl
Date: Tue Jul 29 11:07:37 2008
New Revision: 65275
Log:
Merged revisions 65138,65145-65146,65268-65273 via svnmerge from
svn+ssh://pythondev@svn.python.org/doctools/branches/0.4.x
........
r65138 | georg.brandl | 2008年07月19日 15:42:35 +0200 (2008年7月19日) | 2 lines
#3416: fix missing parameter.
........
r65145 | georg.brandl | 2008年07月19日 20:01:25 +0200 (2008年7月19日) | 2 lines
Now that we don't ship Jinja anymore by default the comment can go.
........
r65146 | georg.brandl | 2008年07月19日 20:01:51 +0200 (2008年7月19日) | 2 lines
Reread documents with globbed toctrees when files are removed/added.
........
r65268 | georg.brandl | 2008年07月29日 10:21:33 +0200 (2008年7月29日) | 2 lines
Fix by Markus Gritsch to place correct links to headings.
........
r65269 | georg.brandl | 2008年07月29日 10:21:59 +0200 (2008年7月29日) | 2 lines
Make the writer's settings public.
........
r65270 | georg.brandl | 2008年07月29日 10:22:28 +0200 (2008年7月29日) | 2 lines
Export test_root.
........
r65271 | georg.brandl | 2008年07月29日 10:22:47 +0200 (2008年7月29日) | 2 lines
Add a markup test.
........
r65272 | georg.brandl | 2008年07月29日 10:27:19 +0200 (2008年7月29日) | 2 lines
Bump version number.
........
r65273 | georg.brandl | 2008年07月29日 11:05:37 +0200 (2008年7月29日) | 2 lines
Correct rendering of ``samp``.
........
Added:
doctools/trunk/tests/test_markup.py
- copied unchanged from r65273, /doctools/branches/0.4.x/tests/test_markup.py
Modified:
doctools/trunk/ (props changed)
doctools/trunk/Makefile
doctools/trunk/sphinx/__init__.py
doctools/trunk/sphinx/builder.py
doctools/trunk/sphinx/directives/other.py
doctools/trunk/sphinx/environment.py
doctools/trunk/sphinx/htmlwriter.py
doctools/trunk/sphinx/latexwriter.py
doctools/trunk/sphinx/texinputs/sphinx.sty
doctools/trunk/tests/test_config.py
doctools/trunk/tests/util.py
Modified: doctools/trunk/Makefile
==============================================================================
--- doctools/trunk/Makefile (original)
+++ doctools/trunk/Makefile Tue Jul 29 11:07:37 2008
@@ -27,4 +27,4 @@
@$(PYTHON) utils/reindent.py -r -B .
test:
- @cd tests; $(PYTHON) run.py
+ @cd tests; $(PYTHON) run.py -d
Modified: doctools/trunk/sphinx/__init__.py
==============================================================================
--- doctools/trunk/sphinx/__init__.py (original)
+++ doctools/trunk/sphinx/__init__.py Tue Jul 29 11:07:37 2008
@@ -20,7 +20,7 @@
from sphinx.util.console import darkred, nocolor
__revision__ = '$Revision$'
-__version__ = '0.4'
+__version__ = '0.5'
def usage(argv, msg=None):
Modified: doctools/trunk/sphinx/builder.py
==============================================================================
--- doctools/trunk/sphinx/builder.py (original)
+++ doctools/trunk/sphinx/builder.py Tue Jul 29 11:07:37 2008
@@ -737,6 +737,7 @@
sidebarfile = self.config.html_sidebars.get(pagename)
if sidebarfile:
ctx['customsidebar'] = sidebarfile
+
if not outfilename:
outfilename = path.join(self.outdir, os_path(pagename) + self.out_suffix)
Modified: doctools/trunk/sphinx/directives/other.py
==============================================================================
--- doctools/trunk/sphinx/directives/other.py (original)
+++ doctools/trunk/sphinx/directives/other.py Tue Jul 29 11:07:37 2008
@@ -69,6 +69,7 @@
subnode['includefiles'] = includefiles
subnode['includetitles'] = includetitles
subnode['maxdepth'] = options.get('maxdepth', -1)
+ subnode['glob'] = glob
ret.append(subnode)
return ret
Modified: doctools/trunk/sphinx/environment.py
==============================================================================
--- doctools/trunk/sphinx/environment.py (original)
+++ doctools/trunk/sphinx/environment.py Tue Jul 29 11:07:37 2008
@@ -63,7 +63,7 @@
# This is increased every time an environment attribute is added
# or changed to properly invalidate pickle files.
-ENV_VERSION = 24
+ENV_VERSION = 25
default_substitutions = set([
@@ -242,6 +242,7 @@
self.toctree_includes = {} # docname -> list of toctree includefiles
self.files_to_rebuild = {} # docname -> set of files (containing its TOCs)
# to rebuild too
+ self.glob_toctrees = set() # docnames that have :glob: toctrees
# X-ref target inventory
self.descrefs = {} # fullname -> docname, desctype
@@ -296,6 +297,7 @@
self.toctree_includes.pop(docname, None)
self.filemodules.pop(docname, None)
self.indexentries.pop(docname, None)
+ self.glob_toctrees.discard(docname)
for subfn, fnset in self.files_to_rebuild.items():
fnset.discard(docname)
@@ -420,7 +422,14 @@
self.srcdir = srcdir
self.doctreedir = doctreedir
self.find_files(config)
+
added, changed, removed = self.get_outdated_files(config_changed)
+
+ # if files were added or removed, all documents with globbed toctrees
+ # must be reread
+ if added or removed:
+ changed.update(self.glob_toctrees)
+
msg += '%s added, %s changed, %s removed' % (len(added), len(changed),
len(removed))
yield msg
@@ -641,6 +650,8 @@
def note_toctree(self, docname, toctreenode):
"""Note a TOC tree directive in a document and gather information about
file relations from it."""
+ if toctreenode['glob']:
+ self.glob_toctrees.add(docname)
includefiles = toctreenode['includefiles']
for includefile in includefiles:
# note that if the included file is rebuilt, this one must be
Modified: doctools/trunk/sphinx/htmlwriter.py
==============================================================================
--- doctools/trunk/sphinx/htmlwriter.py (original)
+++ doctools/trunk/sphinx/htmlwriter.py Tue Jul 29 11:07:37 2008
@@ -56,6 +56,7 @@
self.builder = builder
self.highlightlang = 'python'
self.highlightlinenothreshold = sys.maxint
+ self.protect_literal_text = 0
def visit_desc(self, node):
self.body.append(self.starttag(node, 'dl', CLASS=node['desctype']))
@@ -206,7 +207,11 @@
if len(node.children) == 1 and \
node.children[0] in ('None', 'True', 'False'):
node['classes'].append('xref')
- BaseTranslator.visit_literal(self, node)
+ self.body.append(self.starttag(node, 'tt', '', CLASS='docutils literal'))
+ self.protect_literal_text += 1
+ def depart_literal(self, node):
+ self.protect_literal_text -= 1
+ self.body.append('</tt>')
def visit_productionlist(self, node):
self.body.append(self.starttag(node, 'pre'))
@@ -285,6 +290,33 @@
def depart_module(self, node):
pass
+ def bulk_text_processor(self, text):
+ return text
+
+ # overwritten
+ def visit_Text(self, node):
+ text = node.astext()
+ encoded = self.encode(text)
+ if self.protect_literal_text:
+ # moved here from base class's visit_literal to support
+ # more formatting in literal nodes
+ for token in self.words_and_spaces.findall(encoded):
+ if token.strip():
+ # protect literal text from line wrapping
+ self.body.append('<span class="pre">%s</span>' % token)
+ elif token in ' \n':
+ # allow breaks at whitespace
+ self.body.append(token)
+ else:
+ # protect runs of multiple spaces; the last one can wrap
+ self.body.append(' ' * (len(token)-1) + ' ')
+ else:
+ if self.in_mailto and self.settings.cloak_email_addresses:
+ encoded = self.cloak_email(encoded)
+ else:
+ encoded = self.bulk_text_processor(encoded)
+ self.body.append(encoded)
+
# these are all for docutils 0.5 compatibility
def visit_note(self, node):
@@ -333,7 +365,6 @@
def depart_tip(self, node):
self.depart_admonition()
-
# these are only handled specially in the SmartyPantsHTMLTranslator
def visit_literal_emphasis(self, node):
return self.visit_emphasis(node)
@@ -397,11 +428,7 @@
finally:
self.no_smarty -= 1
- def visit_Text(self, node):
- text = node.astext()
- encoded = self.encode(text)
- if self.in_mailto and self.settings.cloak_email_addresses:
- encoded = self.cloak_email(encoded)
- elif self.no_smarty <= 0:
- encoded = sphinx_smarty_pants(encoded)
- self.body.append(encoded)
+ def bulk_text_processor(self, text):
+ if self.no_smarty <= 0:
+ return sphinx_smarty_pants(text)
+ return text
Modified: doctools/trunk/sphinx/latexwriter.py
==============================================================================
--- doctools/trunk/sphinx/latexwriter.py (original)
+++ doctools/trunk/sphinx/latexwriter.py Tue Jul 29 11:07:37 2008
@@ -23,7 +23,6 @@
from sphinx import highlighting
from sphinx.util.smartypants import educateQuotesLatex
-# XXX: Move to a template?
HEADER = r'''%% Generated by Sphinx.
\documentclass[%(papersize)s,%(pointsize)s]{%(docclass)s}
\usepackage[utf8]{inputenc}
@@ -56,7 +55,11 @@
supported = ('sphinxlatex',)
- settings_spec = ('No options here.', '', ())
+ settings_spec = ('LaTeX writer options', '', (
+ ('Document name', ['--docname'], {'default': ''}),
+ ('Document class', ['--docclass'], {'default': 'manual'}),
+ ('Author', ['--author'], {'default': ''}),
+ ))
settings_defaults = {}
output = None
Modified: doctools/trunk/sphinx/texinputs/sphinx.sty
==============================================================================
--- doctools/trunk/sphinx/texinputs/sphinx.sty (original)
+++ doctools/trunk/sphinx/texinputs/sphinx.sty Tue Jul 29 11:07:37 2008
@@ -336,14 +336,14 @@
% Augment the sectioning commands used to get our own font family in place,
% and reset some internal data items:
-\titleformat{\section}{\Large\py at HeaderFamily\py at TitleColor}%
-{\thesection}{0.5em}{}{\py at NormalColor}
-\titleformat{\subsection}{\large\py at HeaderFamily\py at TitleColor}%
-{\thesubsection}{0.5em}{}{\py at NormalColor}
-\titleformat{\subsubsection}{\py at HeaderFamily\py at TitleColor}%
-{\thesubsubsection}{0.5em}{}{\py at NormalColor}
-\titleformat{\paragraph}{\large\py at HeaderFamily\py at TitleColor}%
-{}{0em}{}{\py at NormalColor}
+\titleformat{\section}{\Large\py at HeaderFamily}%
+ {\py at TitleColor\thesection}{0.5em}{\py at TitleColor}{\py at NormalColor}
+\titleformat{\subsection}{\large\py at HeaderFamily}%
+ {\py at TitleColor\thesubsection}{0.5em}{\py at TitleColor}{\py at NormalColor}
+\titleformat{\subsubsection}{\py at HeaderFamily}%
+ {\py at TitleColor\thesubsubsection}{0.5em}{\py at TitleColor}{\py at NormalColor}
+\titleformat{\paragraph}{\large\py at HeaderFamily}%
+ {\py at TitleColor}{0em}{\py at TitleColor}{\py at NormalColor}
% Now for a lot of semantically-loaded environments that do a ton of magical
Modified: doctools/trunk/tests/test_config.py
==============================================================================
--- doctools/trunk/tests/test_config.py (original)
+++ doctools/trunk/tests/test_config.py Tue Jul 29 11:07:37 2008
@@ -43,6 +43,7 @@
# "contains" gives True both for set and unset values
assert 'project' in cfg
assert 'html_title' in cfg
+ assert 'nonexisting_value' not in cfg
# invalid values
raises(AttributeError, getattr, cfg, '_value')
Modified: doctools/trunk/tests/util.py
==============================================================================
--- doctools/trunk/tests/util.py (original)
+++ doctools/trunk/tests/util.py Tue Jul 29 11:07:37 2008
@@ -17,12 +17,16 @@
__all__ = [
+ 'test_root',
'raises', 'raises_msg',
'ErrorOutput', 'TestApp',
'path', 'with_tempdir', 'write_file',
]
+test_root = path(__file__).parent.joinpath('root').abspath()
+
+
def _excstr(exc):
if type(exc) is tuple:
return str(tuple(map(_excstr, exc)))
@@ -79,7 +83,7 @@
application.CONFIG_FILENAME = confname
if srcdir is None:
- srcdir = path(__file__).parent.joinpath('root').abspath()
+ srcdir = test_root
else:
srcdir = path(srcdir)
if confdir is None:
More information about the Python-checkins
mailing list