summaryrefslogtreecommitdiff
path: root/sphinx/directives/code.py
diff options
context:
space:
mode:
authorTakayuki Shimizukawa <shimizukawa@gmail.com>2014-08-10 23:03:02 +0900
committerTakayuki Shimizukawa <shimizukawa@gmail.com>2014-08-10 23:03:02 +0900
commitd39327d5398a4fe55bb72c9b4dc13dad544cf9d0 (patch)
tree661708835e2d98ee78cd12b22c70858728e26732 /sphinx/directives/code.py
parent4f357d9edd759eca96cee7e7cccbace1479ff834 (diff)
downloadsphinx-git-d39327d5398a4fe55bb72c9b4dc13dad544cf9d0.tar.gz
* for pull request #258: update CHANGES, add tests, add a document and refactoring.
Diffstat (limited to 'sphinx/directives/code.py')
-rw-r--r--sphinx/directives/code.py34
1 files changed, 20 insertions, 14 deletions
diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py
index a3e32be12..7f08b8142 100644
--- a/sphinx/directives/code.py
+++ b/sphinx/directives/code.py
@@ -44,6 +44,21 @@ class Highlight(Directive):
linenothreshold=linenothreshold)]
+
+def dedent_lines(lines, dedent):
+ if not dedent:
+ return lines
+
+ new_lines = []
+ for line in lines:
+ new_line = line[dedent:]
+ if line.endswith('\n') and not new_line:
+ new_line = '\n' # keep CRLF
+ new_lines.append(new_line)
+
+ return new_lines
+
+
class CodeBlock(Directive):
"""
Directive for a code block with special highlighting or line numbering
@@ -77,13 +92,9 @@ class CodeBlock(Directive):
hl_lines = None
if 'dedent' in self.options:
- linesArray = code.split('\n')
- for i in range(0, len(linesArray)):
- if len(linesArray[i]) <= self.options['dedent']:
- linesArray[i] = linesArray[i][len(linesArray[i]) - 1:]
- else:
- linesArray[i] = linesArray[i][self.options['dedent']:]
- code = '\n'.join(linesArray)
+ lines = code.split('\n')
+ lines = dedent_lines(lines, self.options['dedent'])
+ code = '\n'.join(lines)
literal = nodes.literal_block(code, code)
literal['language'] = self.arguments[0]
@@ -113,7 +124,7 @@ class LiteralInclude(Directive):
optional_arguments = 0
final_argument_whitespace = True
option_spec = {
- 'dedent': int,
+ 'dedent': int,
'linenos': directives.flag,
'lineno-start': int,
'tab-width': int,
@@ -149,12 +160,7 @@ class LiteralInclude(Directive):
f = codecs.StreamReaderWriter(open(filename, 'rb'),
codec_info[2], codec_info[3], 'strict')
lines = f.readlines()
- if 'dedent' in self.options:
- for i in range(0, len(lines)):
- if len(lines[i]) <= self.options['dedent']:
- lines[i] = lines[i][len(lines[i]) - 1:]
- else:
- lines[i] = lines[i][self.options['dedent']:]
+ lines = dedent_lines(lines, self.options.get('dedent'))
except (IOError, OSError):
return [document.reporter.warning(
'Include file %r not found or reading it failed' % filename,