SF.net SVN: docutils:[10293] trunk/docutils
milde--- via Docutils-checkins <[email protected]> Wed, 21 Jan 2026 15:18:32 +0000
| Newsgroups | gmane.text.docutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision: 10293
http://sourceforge.net/p/docutils/code/10293
Author: milde
Date: 2026-01-21 15:18:32 +0000 (Wed, 21 Jan 2026)
Log Message:
-----------
Fix :number-lines: option of the "include" directive.
Fix Sphinx issue #14261: ":number-lines: 0 for includes does not work correctly".
Commit [r9909] changed the conversion function to return "None" or an integer.
The former simple test for an optional start value failed for value 0,
because bool("0") == True but bool(0) == False.
Use the conversion function `value_or((None,), int)` also in the Code directive.
Modified Paths:
--------------
trunk/docutils/HISTORY.rst
trunk/docutils/docutils/parsers/rst/directives/body.py
trunk/docutils/docutils/parsers/rst/directives/misc.py
trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py
Modified: trunk/docutils/HISTORY.rst
===================================================================
--- trunk/docutils/HISTORY.rst 2026-01-15 22:33:54 UTC (rev 10292)
+++ trunk/docutils/HISTORY.rst 2026-01-21 15:18:32 UTC (rev 10293)
@@ -25,6 +25,8 @@
- "Include" options :start-after: and :end-before: may now also
be used without value (standing for an empty line).
+ - Fix Sphinx issue #14261:
+ The "Include" option :number-lines: changed a start value 0 to 1.
- The severity of "include" problems is lowered to 3: ERROR.
* docutils/parsers/rst/directives/tables.py,
Modified: trunk/docutils/docutils/parsers/rst/directives/body.py
===================================================================
--- trunk/docutils/docutils/parsers/rst/directives/body.py 2026-01-15 22:33:54 UTC (rev 10292)
+++ trunk/docutils/docutils/parsers/rst/directives/body.py 2026-01-21 15:18:32 UTC (rev 10293)
@@ -157,7 +157,7 @@
optional_arguments = 1
option_spec = {'class': directives.class_option,
'name': directives.unchanged,
- 'number-lines': directives.unchanged # integer or None
+ 'number-lines': directives.value_or((None,), int),
}
has_content = True
@@ -186,11 +186,9 @@
raise self.warning(error)
if 'number-lines' in options:
- # optional argument `startline`, defaults to 1
- try:
- startline = int(options['number-lines'] or 1)
- except ValueError:
- raise self.error(':number-lines: with non-integer start value')
+ startline = self.options['number-lines']
+ if startline is None:
+ startline = 1
endline = startline + len(self.content)
# add linenumber filter:
tokens = NumberLines(tokens, startline, endline)
Modified: trunk/docutils/docutils/parsers/rst/directives/misc.py
===================================================================
--- trunk/docutils/docutils/parsers/rst/directives/misc.py 2026-01-15 22:33:54 UTC (rev 10292)
+++ trunk/docutils/docutils/parsers/rst/directives/misc.py 2026-01-21 15:18:32 UTC (rev 10293)
@@ -181,7 +181,9 @@
literal_block.line = self.options.get('start-line', 0) + 1
self.add_name(literal_block)
if 'number-lines' in self.options:
- firstline = self.options['number-lines'] or 1
+ firstline = self.options['number-lines']
+ if firstline is None:
+ firstline = 1
text = text.removesuffix('\n')
lastline = firstline + len(text.splitlines())
tokens = NumberLines([([], text)], firstline, lastline)
Modified: trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py
===================================================================
--- trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py 2026-01-15 22:33:54 UTC (rev 10292)
+++ trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py 2026-01-21 15:18:32 UTC (rev 10293)
@@ -210,6 +210,26 @@
This file is used by ``test_include.py``.
"""],
[f"""\
+Literal include, add line numbers
+
+.. include:: {include1}
+ :literal:
+ :start-line: 2
+ :number-lines: 0
+""",
+f"""\
+<document source="test data">
+ <paragraph>
+ Literal include, add line numbers
+ <literal_block source="{include1}" xml:space="preserve">
+ <inline classes="ln">
+ 0 \n\
+ \n\
+ <inline classes="ln">
+ 1 \n\
+ This file is used by ``test_include.py``.
+"""],
+[f"""\
Include code
.. include:: {include1}
@@ -1157,7 +1177,7 @@
.. include:: {include1}
:code: rst
- :number-lines:
+ :number-lines: 0
""",
f"""\
<document source="test data">
@@ -1165,21 +1185,21 @@
Included code
<literal_block classes="code rst" source="{include1}" xml:space="preserve">
<inline classes="ln">
- 1 \n\
+ 0 \n\
<inline classes="generic heading">
Inclusion 1
\n\
<inline classes="ln">
- 2 \n\
+ 1 \n\
<inline classes="generic heading">
-----------
\n\
<inline classes="ln">
- 3 \n\
+ 2 \n\
<inline classes="whitespace">
\n\
<inline classes="ln">
- 4 \n\
+ 3 \n\
<inline classes="whitespace">
This file is used by \n\
<inline classes="literal string">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.