summaryrefslogtreecommitdiff
path: root/sphinx/writers
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2014-01-13 00:14:00 +0100
committerGeorg Brandl <georg@python.org>2014-01-13 00:14:00 +0100
commit8aec27617e3ba2bf13ba9f96bb6fa57602f13b91 (patch)
treeb5a8bfe70f7ecd52ba3d64a19c375a5b8ac6288d /sphinx/writers
parent0ce3e1b81e8105ccf99e497b6c82c1ef8d9201ba (diff)
parentdd1c23518d9f91edeb5a19e796a5be2700c93f34 (diff)
downloadsphinx-8aec27617e3ba2bf13ba9f96bb6fa57602f13b91.tar.gz
merge with stable
Diffstat (limited to 'sphinx/writers')
-rw-r--r--sphinx/writers/html.py22
1 files changed, 19 insertions, 3 deletions
diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py
index 612496e5..308e1f5b 100644
--- a/sphinx/writers/html.py
+++ b/sphinx/writers/html.py
@@ -131,24 +131,40 @@ class HTMLTranslator(BaseTranslator):
def visit_desc_parameterlist(self, node):
self.body.append('<big>(</big>')
self.first_param = 1
+ self.optional_param_level = 0
+ # How many required parameters are left.
+ self.required_params_left = sum([isinstance(c, addnodes.desc_parameter)
+ for c in node.children])
self.param_separator = node.child_text_separator
def depart_desc_parameterlist(self, node):
self.body.append('<big>)</big>')
+ # If required parameters are still to come, then put the comma after
+ # the parameter. Otherwise, put the comma before. This ensures that
+ # signatures like the following render correctly (see issue #1001):
+ #
+ # foo([a, ]b, c[, d])
+ #
def visit_desc_parameter(self, node):
- if not self.first_param:
- self.body.append(self.param_separator)
- else:
+ if self.first_param:
self.first_param = 0
+ elif not self.required_params_left:
+ self.body.append(self.param_separator)
+ if self.optional_param_level == 0:
+ self.required_params_left -= 1
if not node.hasattr('noemph'):
self.body.append('<em>')
def depart_desc_parameter(self, node):
if not node.hasattr('noemph'):
self.body.append('</em>')
+ if self.required_params_left:
+ self.body.append(self.param_separator)
def visit_desc_optional(self, node):
+ self.optional_param_level += 1
self.body.append('<span class="optional">[</span>')
def depart_desc_optional(self, node):
+ self.optional_param_level -= 1
self.body.append('<span class="optional">]</span>')
def visit_desc_annotation(self, node):