diff options
author | Mark Lodato <lodatom@gmail.com> | 2011-07-06 22:58:19 -0400 |
---|---|---|
committer | Mark Lodato <lodatom@gmail.com> | 2011-07-06 22:58:19 -0400 |
commit | 2c0f936e6ba6cf4996175106a289b04f0856cd9a (patch) | |
tree | 6ee732a6d23a456b408278b88cc07c34e126ae13 /sphinx/directives/code.py | |
parent | b9279ca1e30c420c786e83fd6ef6342a0d549f46 (diff) | |
download | sphinx-git-2c0f936e6ba6cf4996175106a289b04f0856cd9a.tar.gz |
add :emphasize-lines: option to source-code and literal-include
Add a new option, :emphasize-lines:, to the source-code and
literal-include directives. The format is the same as the :lines:
option for literal-include. The resulting list of lines is passed to
the Pygments formatter as 'hl_lines', which is only honored by the HTML
formatter.
Diffstat (limited to 'sphinx/directives/code.py')
-rw-r--r-- | sphinx/directives/code.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py index 8cedab190..f41ca3a69 100644 --- a/sphinx/directives/code.py +++ b/sphinx/directives/code.py @@ -55,13 +55,28 @@ class CodeBlock(Directive): final_argument_whitespace = False option_spec = { 'linenos': directives.flag, + 'emphasize-lines': directives.unchanged_required, } def run(self): code = u'\n'.join(self.content) + + linespec = self.options.get('emphasize-lines') + if linespec: + try: + nlines = len(self.content) + hl_lines = [x+1 for x in parselinenos(linespec, nlines)] + except ValueError, err: + document = self.state.document + return [document.reporter.warning(str(err), line=self.lineno)] + else: + hl_lines = None + literal = nodes.literal_block(code, code) literal['language'] = self.arguments[0] literal['linenos'] = 'linenos' in self.options + if hl_lines is not None: + literal['highlight_args'] = {'hl_lines': hl_lines} literal.line = self.lineno return [literal] @@ -88,6 +103,7 @@ class LiteralInclude(Directive): 'end-before': directives.unchanged_required, 'prepend': directives.unchanged_required, 'append': directives.unchanged_required, + 'emphasize-lines': directives.unchanged_required, } def run(self): @@ -146,6 +162,15 @@ class LiteralInclude(Directive): 'Line spec %r: no lines pulled from include file %r' % (linespec, filename), line=self.lineno)] + linespec = self.options.get('emphasize-lines') + if linespec: + try: + hl_lines = [x+1 for x in parselinenos(linespec, len(lines))] + except ValueError, err: + return [document.reporter.warning(str(err), line=self.lineno)] + else: + hl_lines = None + startafter = self.options.get('start-after') endbefore = self.options.get('end-before') prepend = self.options.get('prepend') @@ -178,6 +203,8 @@ class LiteralInclude(Directive): retnode['language'] = self.options['language'] if 'linenos' in self.options: retnode['linenos'] = True + if hl_lines is not None: + retnode['highlight_args'] = {'hl_lines': hl_lines} env.note_dependency(rel_filename) return [retnode] |