diff options
author | jfbu <jfbu@free.fr> | 2017-02-10 14:35:58 +0100 |
---|---|---|
committer | jfbu <jfbu@free.fr> | 2017-02-10 16:55:28 +0100 |
commit | a2338e4838223ed9c65397eba57f6fd14e1a062f (patch) | |
tree | dc8a426a48bbfa30b61ea8123d3974bead3024bb /sphinx/directives/code.py | |
parent | 839e924808ad5c8cad8bed567e86eb7cd6970d7c (diff) | |
download | sphinx-git-a2338e4838223ed9c65397eba57f6fd14e1a062f.tar.gz |
If ``:start-after:`` is used, make ``:lines:`` relative (close: #3412)
Diffstat (limited to 'sphinx/directives/code.py')
-rw-r--r-- | sphinx/directives/code.py | 56 |
1 files changed, 29 insertions, 27 deletions
diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py index 3aeb98640..c9d073abd 100644 --- a/sphinx/directives/code.py +++ b/sphinx/directives/code.py @@ -270,31 +270,6 @@ class LiteralInclude(Directive): if 'lineno-match' in self.options: linenostart = tags[objectname][1] - linespec = self.options.get('lines') - if linespec: - try: - linelist = parselinenos(linespec, len(lines)) - except ValueError as err: - return [document.reporter.warning(str(err), line=self.lineno)] - - if 'lineno-match' in self.options: - # make sure the line list is not "disjoint". - previous = linelist[0] - for line_number in linelist[1:]: - if line_number == previous + 1: - previous = line_number - continue - return [document.reporter.warning( - 'Cannot use "lineno-match" with a disjoint set of ' - '"lines"', line=self.lineno)] - linenostart = linelist[0] + 1 - # just ignore non-existing lines - lines = [lines[i] for i in linelist if i < len(lines)] - if not lines: - return [document.reporter.warning( - 'Line spec %r: no lines pulled from include file %r' % - (linespec, filename), line=self.lineno)] - linespec = self.options.get('emphasize-lines') if linespec: try: @@ -320,10 +295,12 @@ class LiteralInclude(Directive): for line_number, line in enumerate(lines): if not use and start_str and start_str in line: if 'lineno-match' in self.options: - linenostart += line_number + 1 - use = True + linenostart = line_number + 1 if start_inclusive: res.append(line) + else: + linenostart +=1 + use = True elif use and end_str and end_str in line: if end_inclusive: res.append(line) @@ -332,6 +309,31 @@ class LiteralInclude(Directive): res.append(line) lines = res + linespec = self.options.get('lines') + if linespec: + try: + linelist = parselinenos(linespec, len(lines)) + except ValueError as err: + return [document.reporter.warning(str(err), line=self.lineno)] + + if 'lineno-match' in self.options: + # make sure the line list is not "disjoint". + previous = linelist[0] + for line_number in linelist[1:]: + if line_number == previous + 1: + previous = line_number + continue + return [document.reporter.warning( + 'Cannot use "lineno-match" with a disjoint set of ' + '"lines"', line=self.lineno)] + linenostart += linelist[0] + # just ignore non-existing lines + lines = [lines[i] for i in linelist if i < len(lines)] + if not lines: + return [document.reporter.warning( + 'Line spec %r: no lines pulled from include file %r' % + (linespec, filename), line=self.lineno)] + prepend = self.options.get('prepend') if prepend: lines.insert(0, prepend + '\n') |