Fixed bug with TOC update when it is at the end of a file.
[docutils.git] / BUGS.txt
blob35b8ab51f03376d1c31997ed285e2b4a9b147d0d
1 ================
2  Docutils_ Bugs
3 ================
5 :Author: David Goodger; open to all Docutils developers
6 :Contact: goodger@python.org
7 :Date: $Date$
8 :Revision: $Revision$
9 :Copyright: This document has been placed in the public domain.
11 .. _Docutils: http://docutils.sourceforge.net/
14 Bugs in Docutils?!?  Yes, we do have a few.  Some are old-timers that
15 tend to stay in the shadows and don't bother anybody.  Once in a while
16 new bugs are born.  From time to time some bugs (new and old) crawl
17 out into the light and must be dealt with.  Icky.
19 This document describes how to report a bug, and lists known bugs.
21 .. contents::
24 How To Report A Bug
25 ===================
27 If you think you've discovered a bug, please read through these
28 guidelines before reporting it.
30 First, make sure it's a new bug:
32 * Please check the list of `known bugs`_ below and the `SourceForge
33   Bug Tracker`_ to see if it has already been reported.
35 * Are you using the very latest version of Docutils?  The bug may have
36   already been fixed.  Please get the latest version of Docutils from
37   the repository_ or from the current snapshot_ and check again.  Even
38   if your bug has not been fixed, others probably have, and you're
39   better off with the most up-to-date code.
41   If you don't have time to check the latest snapshot, please report
42   the bug anyway.  We'd rather tell you that it's already fixed than
43   miss reports of unfixed bugs.
45 * If Docutils does not behave the way you expect, look in the
46   documentation_ (don't forget the FAQ_!) and `mailing list archives`_
47   for evidence that it should behave the way you expect.
49 If you're not sure, please ask on the Docutils-users_ mailing list
50 first.
52 If it's a new bug, the most important thing you can do is to write a
53 simple description and a recipe that reproduces the bug.  Try to
54 create a minimal document that demonstrates the bug.  The easier you
55 make it to understand and track down the bug, the more likely a fix
56 will be.
58 Now you're ready to write the bug report.  Please include:
60 * A clear description of the bug.  Describe how you expected Docutils
61   to behave, and contrast that with how it actually behaved.  While
62   the bug may seem obvious to you, it may not be so obvious to someone
63   else, so it's best to avoid a guessing game.
65 * A complete description of the environment in which you reproduced
66   the bug:
68   - Your operating system & version.
69   - The version of Python (``python -V``).
70   - The version of Docutils (use the "-V" option to most Docutils
71     front-end tools).
72   - Any private modifications you made to Docutils.
73   - Anything else that could possibly be relevant.  Err on the side
74     of too much information, rather than too little.
76 * A literal transcript of the *exact* command you ran, and the *exact*
77   output.  Use the "--traceback" option to get a complete picture.
79 * The exact input and output files.  Better to attach complete files
80   to your bug report than to include just a summary or excerpt.
82 * If you also want to include speculation as to the cause, and even a
83   patch to fix the bug, that would be great!
85 The best place to send your bug report is to the `SourceForge Bug
86 Tracker`_.  That way, it won't be misplaced or forgotten.  In fact, an
87 open bug report on SourceForge is a constant irritant that begs to be
88 squashed.
90 Thank you!
92 (This section was inspired by the `Subversion project's`__ BUGS__
93 file.)
95 __ http://subversion.tigris.org/
96 __ http://svn.collab.net/viewcvs/svn/trunk/BUGS?view=markup
98 .. _CVS: http://sourceforge.net/cvs/?group_id=38414
99 .. _repository: docs/dev/repository.html
100 .. _snapshot: http://docutils.sourceforge.net/#download
101 .. _documentation: docs/
102 .. _FAQ: FAQ.html
103 .. _mailing list archives: http://docutils.sf.net/#mailing-lists
104 .. _Docutils-users: docs/user/mailing-lists.html#docutils-users
105 .. _SourceForge Bug Tracker:
106    http://sourceforge.net/tracker/?group_id=38414&atid=422030
109 Known Bugs
110 ==========
112 Also see the `SourceForge Bug Tracker`_.
114 * _`List items with an empty first line` don't work as expected::
116       1.
117          foo
119   places "foo" inside a block quote, whereas ::
121       1.
122         foo
124   (which should normally be invalid) causes the "foo" paragraph to
125   wind up inside the list item.
127   The behavior also depends on whether there is a space after the list
128   marker::
130       1.<space>
131          foo
133   works as expected.  With multiple spaces after the marker, the list
134   item contents must be indented with mutiple spaces.
136   This is bad.  Invisible white space at the end of a line shouldn't
137   impact the parsing results.
139 * .. _non-existent working directory:
141   Running Docutils in a no-longer existent working directory causes a
142   crash::
144       $ rst2pseudoxml.py
145       Traceback (most recent call last):
146         File "/home/felix/bin/rst2pseudoxml.py", line 25, in ?
147           publish_cmdline(description=description)
148         File "/home/felix/.python/lib/docutils/core.py", line 329, in publish_cmdline
149           config_section=config_section, enable_exit_status=enable_exit_status)
150         File "/home/felix/.python/lib/docutils/core.py", line 197, in publish
151           self.process_command_line(
152         File "/home/felix/.python/lib/docutils/core.py", line 155, in process_command_line
153           self.settings = option_parser.parse_args(argv)
154         File "/usr/lib/python2.4/optparse.py", line 1280, in parse_args
155           return self.check_values(values, args)
156         File "/home/felix/.python/lib/docutils/frontend.py", line 577, in check_values
157           os.getcwd())
158       OSError: [Errno 2] No such file or directory
160   Reproduce by creating a directory, cd'ing into it, rd'ing the
161   directory in a separate shell and running "rst2pseudoxml.py" in the
162   original shell.
164   To fix this, we'd need to fix all occurences of os.getcwd().  Maybe
165   add a docutils.utils.getcwd() function which returns an empty string
166   on OSError?
168 * The "stylesheet" setting (a URL, to be used verbatim) should be
169   allowed to be combined with "embed_stylesheet".  The stylesheet data
170   should be read in using urllib.  There was an assumption that a
171   stylesheet to be embedded should exist as a file on the local
172   system, and only the "stylesheet_path" setting should be used.
174 * ``utils.relative_path()`` sometimes returns absolute _`paths on
175   Windows` (like ``C:/test/foo.css``) where it could have chosen a
176   relative path.
178   Furthermore, absolute pathnames are inserted verbatim, like
179   ``href="C:/test/foo.css"`` instead of
180   ``href="file:///C:/test/foo.css"``.
182   For details, see `this posting by Alan G. Isaac
183   <http://article.gmane.org/gmane.text.docutils.user/1569>`_.
185 * _`Line numbers` in system messages are inconsistent in the parser.
187   - In text inserted by the "include" directive, errors are often not
188     reported with the correct "source" or "line" numbers.  Perhaps all
189     Reporter calls need "source" and "line" keyword arguments.
190     Elements' .line assignments should be checked.  (Assign to .source
191     too?  Add a set_info method?  To what?)  There's a test in
192     test/test_parsers/test_rst/test_directives/test_include.py.
194   - Some line numbers in elements are not being set properly
195     (explicitly), just implicitly/automatically.  See rev. 1.74 of
196     docutils/parsers/rst/states.py for an example of how to set.
198 * .. _none source:
200   Quite a few nodes are getting a "None" source attribute as well.  In
201   particular, see the bodies of definition lists.
203 * _`Circular substitutions` cause Docutils to hang::
205       .. |sub| replace:: |sub|
207 * Footnote label "5" should be "4" when processing the following
208   input::
210       ref [#abc]_ [#]_ [1]_ [#4]_
212       .. [#abc] footnote
213       .. [#] two
214       .. [1] one
215       .. [#4] four
217   Output::
219       <document source="<stdin>">
220           <paragraph>
221               ref
222               <footnote_reference auto="1" ids="id1" refid="abc">
223                   2
225               <footnote_reference auto="1" ids="id2" refid="id5">
226                   3
228               <footnote_reference ids="id3" refid="id6">
229                   1
231               <footnote_reference auto="1" ids="id4" refid="id7">
232                   5
233           <footnote auto="1" backrefs="id1" ids="abc" names="abc">
234               <label>
235                   2
236               <paragraph>
237                   footnote
238           <footnote auto="1" backrefs="id2" ids="id5" names="3">
239               <label>
240                   3
241               <paragraph>
242                   two
243           <footnote backrefs="id3" ids="id6" names="1">
244               <label>
245                   1
246               <paragraph>
247                   one
248           <footnote auto="1" backrefs="id4" ids="id7" names="4">
249               <label>
250                   5
251               <paragraph>
252                   four
254 * IDs are based on names.  Explicit hyperlink targets have priority
255   over implicit targets.  But if an explicit target comes after an
256   implicit target with the same name, the ID of the first (implicit)
257   target remains based on the implicit name.  Since HTML fragment
258   identifiers based on the IDs, the first target keeps the name.  For
259   example::
261       .. contents::
263       Section
264       =======
266       .. _contents:
268       Subsection
269       ----------
271       text with a reference to contents_ and section_
273       .. _section:
275       This paragraph is explicitly targeted with the name "section".
277   When processed to HTML, the 2 internal hyperlinks (to "contents" &
278   "section") will work fine, but hyperlinks from outside the document
279   using ``href="...#contents"`` and ``href="...#section"`` won't work.
280   Such external links will connect to the implicit targets (table of
281   contents and "Section" title) instead of the explicit targets
282   ("Subsection" title and last paragraph).
284   Hyperlink targets with duplicate names should be assigned new IDs
285   unrelated to the target names (i.e., "id"-prefix serial IDs).
287 * The "contents" ID of the local table of contents in
288   ``test/functional/expected/standalone_rst_pseudoxml.txt`` is lost in
289   the HTML output at
290   ``test/functional/expected/standalone_rst_html4css1.html``.
292 * _`Blank first columns` in simple tables with explicit row separators
293   silently swallow their input.  They should at least produce system
294   error messages.  But, with explicit row separators, the meaning is
295   unambiguous and ought to be supported::
297       ==============  ==========
298       Table with row  separators
299       ==============  ==========
300                       and blank
301       --------------  ----------
302                       entries
303       --------------  ----------
304                       in first
305       --------------  ----------
306                       columns.
307       ==============  ==========
309   Added a commented-out test case to
310   test/test_parsers/test_rst/test_SimpleTableParser.py.
312 * _`Footnote references with hyperlink targets` cause a possibly
313   invalid node tree and make the HTML writer crash::
315       $ rst2pseudoxml.py
316       [1]_
318       .. _1: URI
319       <document source="<stdin>">
320           <paragraph>
321               <footnote_reference ids="id1" refuri="URI">
322                   1
323           <target ids="id2" names="1" refuri="URI">
327    Local Variables:
328    mode: indented-text
329    indent-tabs-mode: nil
330    sentence-end-double-space: t
331    fill-column: 70
332    End: