summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2010-04-06 09:21:22 +0200
committerGeorg Brandl <georg@python.org>2010-04-06 09:21:22 +0200
commit7f269d3edc077c5e3c3448049eccd393d79a8bdf (patch)
tree14c3db227b9b2d57914772939fb0a4af8766ad9d
parente7b5cf7b3a97928b8bd877a7ca86289c0926fa05 (diff)
parented44e3220ff3dbaa8de07edc817269710fc6b7e6 (diff)
downloadsphinx-7f269d3edc077c5e3c3448049eccd393d79a8bdf.tar.gz
merge with 0.6
-rw-r--r--CHANGES14
-rw-r--r--doc/builders.rst3
-rw-r--r--doc/ext/appapi.rst2
-rw-r--r--sphinx/builders/html.py2
-rw-r--r--sphinx/environment.py19
-rw-r--r--sphinx/ext/autodoc.py1
-rw-r--r--sphinx/highlighting.py15
-rw-r--r--sphinx/themes/basic/static/searchtools.js5
-rw-r--r--sphinx/writers/text.py27
9 files changed, 62 insertions, 26 deletions
diff --git a/CHANGES b/CHANGES
index 54877899..6f63ccc2 100644
--- a/CHANGES
+++ b/CHANGES
@@ -89,6 +89,20 @@ Release 1.0 (in development)
Release 0.6.6 (in development)
==============================
+* Fix the handling of multiple toctrees when creating the global
+ TOC for the ``toctree()`` template function.
+
+* Fix the handling of hidden toctrees when creating the global TOC
+ for the ``toctree()`` template function.
+
+* Fix the handling of nested lists in the text writer.
+
+* #362: In autodoc, check for the existence of ``__self__`` on
+ function objects before accessing it.
+
+* #353: Strip leading and trailing whitespace when extracting
+ search words in the search function.
+
Release 0.6.5 (Mar 01, 2010)
============================
diff --git a/doc/builders.rst b/doc/builders.rst
index 1c207574..1fcc9da1 100644
--- a/doc/builders.rst
+++ b/doc/builders.rst
@@ -112,7 +112,8 @@ The builder's "name" must be given to the **-b** command-line option of
Note that a direct PDF builder using ReportLab is available in `rst2pdf
<http://rst2pdf.googlecode.com>`_ version 0.12 or greater. You need to add
``'rst2pdf.pdfbuilder'`` to your :confval:`extensions` to enable it, its name is
-``pdf``.
+``pdf``. Refer to the `rst2pdf manual
+<http://lateral.netmanagers.com.ar/static/manual.pdf>`_ for details.
.. module:: sphinx.builders.text
.. class:: TextBuilder
diff --git a/doc/ext/appapi.rst b/doc/ext/appapi.rst
index 7652f97c..3a8cdb9d 100644
--- a/doc/ext/appapi.rst
+++ b/doc/ext/appapi.rst
@@ -141,7 +141,7 @@ the following public API:
* If you provide *parse_node*, it must be a function that takes a string and
a docutils node, and it must populate the node with children parsed from
the string. It must then return the name of the item to be used in
- cross-referencing and index entries. See the :file:`ext.py` file in the
+ cross-referencing and index entries. See the :file:`conf.py` file in the
source for this documentation for an example.
For example, if you have this call in a custom Sphinx extension::
diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py
index ab3e5544..914d741f 100644
--- a/sphinx/builders/html.py
+++ b/sphinx/builders/html.py
@@ -196,6 +196,8 @@ class StandaloneHTMLBuilder(Builder):
def render_partial(self, node):
"""Utility: Render a lone doctree node."""
+ if node is None:
+ return {'fragment': ''}
doc = new_document('<partial node>')
doc.append(node)
diff --git a/sphinx/environment.py b/sphinx/environment.py
index 99cd47bb..86585ded 100644
--- a/sphinx/environment.py
+++ b/sphinx/environment.py
@@ -941,11 +941,18 @@ class BuildEnvironment:
def get_toctree_for(self, docname, builder, collapse):
"""Return the global TOC nodetree."""
doctree = self.get_doctree(self.config.master_doc)
+ toctrees = []
for toctreenode in doctree.traverse(addnodes.toctree):
- result = self.resolve_toctree(docname, builder, toctreenode,
- prune=True, collapse=collapse)
- if result is not None:
- return result
+ toctree = self.resolve_toctree(docname, builder, toctreenode,
+ prune=True, collapse=collapse,
+ includehidden=True)
+ toctrees.append(toctree)
+ if not toctrees:
+ return None
+ result = toctrees[0]
+ for toctree in toctrees[1:]:
+ result.extend(toctree.children)
+ return result
# -------
# these are called from docutils directives and therefore use self.docname
@@ -1016,7 +1023,7 @@ class BuildEnvironment:
return doctree
def resolve_toctree(self, docname, builder, toctree, prune=True, maxdepth=0,
- titles_only=False, collapse=False):
+ titles_only=False, collapse=False, includehidden=False):
"""
Resolve a *toctree* node into individual bullet lists with titles
as items, returning None (if no containing titles are found) or
@@ -1029,7 +1036,7 @@ class BuildEnvironment:
If *collapse* is True, all branches not containing docname will
be collapsed.
"""
- if toctree.get('hidden', False):
+ if toctree.get('hidden', False) and not includehidden:
return None
def _walk_depth(node, depth, maxdepth):
diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py
index 57cba83a..ca96195e 100644
--- a/sphinx/ext/autodoc.py
+++ b/sphinx/ext/autodoc.py
@@ -1002,6 +1002,7 @@ class MethodDocumenter(ClassLevelDocumenter):
self.member_order = self.member_order - 1
elif isinstance(self.object, FunctionType) or \
(isinstance(self.object, BuiltinFunctionType) and
+ hasattr(self.object, '__self__') and
self.object.__self__ is not None):
self.directivetype = 'staticmethod'
# document class and static members before ordinary ones
diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py
index 8300bd32..f5ea859c 100644
--- a/sphinx/highlighting.py
+++ b/sphinx/highlighting.py
@@ -34,6 +34,7 @@ try:
from pygments.styles import get_style_by_name
from pygments.styles.friendly import FriendlyStyle
from pygments.token import Generic, Comment, Number
+ from pygments.util import ClassNotFound
except ImportError:
pygments = None
lexers = None
@@ -173,7 +174,7 @@ class PygmentsBridge(object):
else:
return True
- def highlight_block(self, source, lang, linenos=False):
+ def highlight_block(self, source, lang, linenos=False, warn=None):
if isinstance(source, str):
source = source.decode()
if not pygments:
@@ -202,8 +203,16 @@ class PygmentsBridge(object):
if lang in lexers:
lexer = lexers[lang]
else:
- lexer = lexers[lang] = get_lexer_by_name(lang)
- lexer.add_filter('raiseonerror')
+ try:
+ lexer = lexers[lang] = get_lexer_by_name(lang)
+ except ClassNotFound:
+ if warn:
+ warn('Pygments lexer name %s is not known' % lang)
+ return self.unhighlighted(source)
+ else:
+ raise
+ else:
+ lexer.add_filter('raiseonerror')
# trim doctest options if wanted
if isinstance(lexer, PythonConsoleLexer) and self.trim_doctest_flags:
diff --git a/sphinx/themes/basic/static/searchtools.js b/sphinx/themes/basic/static/searchtools.js
index ba91e30c..bd916628 100644
--- a/sphinx/themes/basic/static/searchtools.js
+++ b/sphinx/themes/basic/static/searchtools.js
@@ -312,8 +312,9 @@ var Search = {
var tmp = query.split(/\s+/);
var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
for (var i = 0; i < tmp.length; i++) {
- if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/)) {
- // skip this word
+ if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
+ tmp[i] == "") {
+ // skip this "word"
continue;
}
// stem the word
diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py
index 84dc4b38..7923f68d 100644
--- a/sphinx/writers/text.py
+++ b/sphinx/writers/text.py
@@ -54,6 +54,7 @@ class TextTranslator(nodes.NodeVisitor):
self.states = [[]]
self.stateindent = [0]
+ self.list_counter = []
self.sectionlevel = 0
self.table = None
@@ -436,38 +437,38 @@ class TextTranslator(nodes.NodeVisitor):
raise nodes.SkipNode
def visit_bullet_list(self, node):
- self._list_counter = -1
+ self.list_counter.append(-1)
def depart_bullet_list(self, node):
- pass
+ self.list_counter.pop()
def visit_enumerated_list(self, node):
- self._list_counter = 0
+ self.list_counter.append(0)
def depart_enumerated_list(self, node):
- pass
+ self.list_counter.pop()
def visit_definition_list(self, node):
- self._list_counter = -2
+ self.list_counter.append(-2)
def depart_definition_list(self, node):
- pass
+ self.list_counter.pop()
def visit_list_item(self, node):
- if self._list_counter == -1:
+ if self.list_counter[-1] == -1:
# bullet list
self.new_state(2)
- elif self._list_counter == -2:
+ elif self.list_counter[-1] == -2:
# definition list
pass
else:
# enumerated list
- self._list_counter += 1
- self.new_state(len(str(self._list_counter)) + 2)
+ self.list_counter[-1] += 1
+ self.new_state(len(str(self.list_counter[-1])) + 2)
def depart_list_item(self, node):
- if self._list_counter == -1:
+ if self.list_counter[-1] == -1:
self.end_state(first='* ', end=None)
- elif self._list_counter == -2:
+ elif self.list_counter[-1] == -2:
pass
else:
- self.end_state(first='%s. ' % self._list_counter, end=None)
+ self.end_state(first='%s. ' % self.list_counter[-1], end=None)
def visit_definition_list_item(self, node):
self._li_has_classifier = len(node) >= 2 and \