Consider this test:
====== TEST ====== First case: This will output:: b'1 ' Second case: This will output:: b'1 '
Then:
$ rst2html.py test.rst test.html test.rst:10: (WARNING/2) Literal block ends without a blank line; unexpected unindent. test.rst:17: (WARNING/2) Block quote ends without a blank line; unexpected unindent.
In second case, it may divert user from root cause. Real life example comes from unescaped backslashes in a docstring, https://github.com/sphinx-doc/sphinx/issues/4479
Because the docstrings has the spaces naturally, the "Block quote ends without a blank line" warning was emitted. This led to further confusion with quotes as in typographical quotes, (of course that's not due to Docutils ;-)
), and I guess perhaps user could have found the explanation easier if message had been of type "Literal block ends without...".
This is expected behaviour: The indentation of the next paragraph determines whether it ends the outer block element or a nested block element. The following example should make this clear:
The non-nested paragraph ends the block-quote while the nested paragraph just ends the list (at least this is what they will do if properly separated.
I agree that the original issue is unfortunately hard to detect. Backslashes in docstrings are a trap. However, the remedy here is IMO proper documentation of the Python string handling and an advise to print docstrings out via Python in case of problems -- to see how they reach Sphinx/Docutils.