Commits

Georg Brandl committed 93568df Merge

merge with 0.6

Comments (0)

Files changed (5)

 Release 0.6.4 (in development)
 ==============================
 
+* #286: collect todo nodes after the whole document has been read;
+  this allows placing substitution references in todo items.
+
+* #294: do not ignore an explicit ``today`` config value in a
+  LaTeX build.
+
 * The ``alt`` text of inheritance diagrams is now much cleaner.
 
 * Ignore images in section titles when generating link captions.

sphinx/ext/todo.py

         ad = make_admonition(todo_node, self.name, [_('Todo')], self.options,
                              self.content, self.lineno, self.content_offset,
                              self.block_text, self.state, self.state_machine)
+        ad[0].line = self.lineno
+        return [targetnode] + ad
 
-        # Attach a list of all todos to the environment,
-        # the todolist works with the collected todo nodes
-        if not hasattr(env, 'todo_all_todos'):
-            env.todo_all_todos = []
+
+def process_todos(app, doctree):
+    # collect all todos in the environment
+    # this is not done in the directive itself because it some transformations
+    # must have already been run, e.g. substitutions
+    env = app.builder.env
+    if not hasattr(env, 'todo_all_todos'):
+        env.todo_all_todos = []
+    for node in doctree.traverse(todo_node):
+        try:
+            targetnode = node.parent[node.parent.index(node) - 1]
+            if not isinstance(targetnode, nodes.target):
+                raise IndexError
+        except IndexError:
+            targetnode = None
         env.todo_all_todos.append({
             'docname': env.docname,
-            'lineno': self.lineno,
-            'todo': ad[0].deepcopy(),
+            'lineno': node.line,
+            'todo': node.deepcopy(),
             'target': targetnode,
         })
 
-        return [targetnode] + ad
-
 
 class TodoList(Directive):
     """
 
     app.add_directive('todo', Todo)
     app.add_directive('todolist', TodoList)
+    app.connect('doctree-read', process_todos)
     app.connect('doctree-resolved', process_todo_nodes)
     app.connect('env-purge-doc', purge_todos)
 

sphinx/writers/latex.py

             'pointsize':    builder.config.latex_font_size,
             # if empty, the title is set to the first section title
             'title':        document.settings.title,
-            'date':         ustrftime(builder.config.today_fmt
-                                      or _('%B %d, %Y')),
             'release':      builder.config.release,
             'author':       document.settings.author,
             'releasename':  _('Release'),
         else:
             docclass = builder.config.latex_docclass.get('manual', 'report')
         self.elements['docclass'] = docclass
+        if builder.config.today:
+            self.elements['date'] = builder.config.today
+        else:
+            self.elements['date'] = ustrftime(builder.config.today_fmt
+                                              or _('%B %d, %Y'))
         if builder.config.latex_logo:
             self.elements['logo'] = '\\includegraphics{%s}\\par' % \
                                     path.basename(builder.config.latex_logo)

tests/root/contents.txt

    metadata
    extensions
    doctest
+   extensions
 
    Python <http://python.org/>
 

tests/root/extensions.txt

 
 Test diverse links: :issue:`1000` and :pyurl:`dev/`, also with
 :issue:`explicit caption <1042>`.
+
+
+todo
+----
+
+.. todo::
+
+   Test the todo extension.
+
+.. todo::
+
+   Test with |sub| (see #286).
+
+.. |sub| replace:: substitution references
+
+
+list of all todos
+^^^^^^^^^^^^^^^^^
+
+.. todolist::
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.