Fix parselinenos() could not parse left half open range (cf. "-4")

This commit is contained in:
Takeshi KOMIYA 2017-02-11 23:43:28 +09:00
parent 8f4379ef91
commit 929e67ffca
3 changed files with 10 additions and 5 deletions

View File

@ -85,6 +85,7 @@ Bugs fixed
* #3295: Could not import extension sphinx.builders.linkcheck
* #3285: autosummary: asterisks are escaped twice
* LaTeX, pass dvipdfm option to geometry package for Japanese documents (ref #3363)
* Fix parselinenos() could not parse left half open range (cf. "-4")
Release 1.5.1 (released Dec 13, 2016)

View File

@ -357,14 +357,17 @@ def parselinenos(spec, total):
for part in parts:
try:
begend = part.strip().split('-')
if len(begend) > 2:
if ['', ''] == begend:
raise ValueError
if len(begend) == 1:
elif len(begend) == 1:
items.append(int(begend[0]) - 1)
elif len(begend) == 2:
start, end = begend
start = start or 1 # left half open (cf. -10)
end = end or total # right half open (cf. 10-)
items.extend(range(int(start) - 1, int(end)))
else:
start = (begend[0] == '') and 0 or int(begend[0]) - 1
end = (begend[1] == '') and total or int(begend[1])
items.extend(range(start, end))
raise ValueError
except Exception:
raise ValueError('invalid line number spec: %r' % spec)
return items

View File

@ -56,6 +56,7 @@ def test_splitdocinfo():
def test_parselinenos():
assert parselinenos('1,2,3', 10) == [0, 1, 2]
assert parselinenos('4, 5, 6', 10) == [3, 4, 5]
assert parselinenos('-4', 10) == [0, 1, 2, 3]
assert parselinenos('7-9', 10) == [6, 7, 8]
assert parselinenos('7-', 10) == [6, 7, 8, 9]
assert parselinenos('1,7-', 10) == [0, 6, 7, 8, 9]