mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
svn+ssh://pythondev@svn.python.org/doctools/branches/0.4.x ........ r65283 | georg.brandl | 2008-07-29 10:07:26 +0000 (Tue, 29 Jul 2008) | 2 lines Update ez_setup.py. ........ r65303 | benjamin.peterson | 2008-07-30 12:35:34 +0000 (Wed, 30 Jul 2008) | 1 line add a with_testapp decorator for test functions that passes the TestApp instance in a cleans up after it ........ r65316 | benjamin.peterson | 2008-07-30 23:12:07 +0000 (Wed, 30 Jul 2008) | 1 line make the app for test_markup global to the module ........ r65317 | benjamin.peterson | 2008-07-30 23:31:29 +0000 (Wed, 30 Jul 2008) | 1 line make TestApp.cleanup more aggressive ........ r65372 | georg.brandl | 2008-08-01 19:11:22 +0000 (Fri, 01 Aug 2008) | 2 lines Add more tests, fix a few bugs in image handling. ........ r65373 | georg.brandl | 2008-08-01 19:28:33 +0000 (Fri, 01 Aug 2008) | 2 lines Fix oversight. ........ r65374 | benjamin.peterson | 2008-08-01 19:36:32 +0000 (Fri, 01 Aug 2008) | 1 line fix one broken test ........ r65375 | georg.brandl | 2008-08-01 19:41:11 +0000 (Fri, 01 Aug 2008) | 2 lines Fix the handling of non-ASCII input in quickstart. ........ r65377 | georg.brandl | 2008-08-01 19:48:24 +0000 (Fri, 01 Aug 2008) | 2 lines Allow REs in markup checks. ........ r65380 | georg.brandl | 2008-08-01 20:31:18 +0000 (Fri, 01 Aug 2008) | 2 lines Don't rely on mtimes being different for changed files. ........ r65483 | georg.brandl | 2008-08-04 09:01:40 +0000 (Mon, 04 Aug 2008) | 4 lines Add an "encoding" option to literalinclude. Add tests for include directives. ........ r65484 | georg.brandl | 2008-08-04 09:11:17 +0000 (Mon, 04 Aug 2008) | 2 lines Add changelog entry. ........ r65485 | georg.brandl | 2008-08-04 09:21:58 +0000 (Mon, 04 Aug 2008) | 2 lines Fix markup. ........ r65494 | georg.brandl | 2008-08-04 16:34:59 +0000 (Mon, 04 Aug 2008) | 2 lines Correctly use HTML file suffix in templates. ........
100 lines
3.8 KiB
Python
100 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
sphinx.directives.code
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
:copyright: 2007-2008 by Georg Brandl.
|
|
:license: BSD.
|
|
"""
|
|
|
|
import sys
|
|
import codecs
|
|
from os import path
|
|
|
|
from docutils import nodes
|
|
from docutils.parsers.rst import directives
|
|
|
|
from sphinx import addnodes
|
|
|
|
|
|
# ------ highlight directive --------------------------------------------------------
|
|
|
|
def highlightlang_directive(name, arguments, options, content, lineno,
|
|
content_offset, block_text, state, state_machine):
|
|
if 'linenothreshold' in options:
|
|
try:
|
|
linenothreshold = int(options['linenothreshold'])
|
|
except Exception:
|
|
linenothreshold = 10
|
|
else:
|
|
linenothreshold = sys.maxint
|
|
return [addnodes.highlightlang(lang=arguments[0].strip(),
|
|
linenothreshold=linenothreshold)]
|
|
|
|
highlightlang_directive.content = 0
|
|
highlightlang_directive.arguments = (1, 0, 0)
|
|
highlightlang_directive.options = {'linenothreshold': directives.unchanged}
|
|
directives.register_directive('highlight', highlightlang_directive)
|
|
directives.register_directive('highlightlang', highlightlang_directive) # old name
|
|
|
|
|
|
# ------ code-block directive -------------------------------------------------------
|
|
|
|
def codeblock_directive(name, arguments, options, content, lineno,
|
|
content_offset, block_text, state, state_machine):
|
|
code = u'\n'.join(content)
|
|
literal = nodes.literal_block(code, code)
|
|
literal['language'] = arguments[0]
|
|
literal['linenos'] = 'linenos' in options
|
|
return [literal]
|
|
|
|
codeblock_directive.content = 1
|
|
codeblock_directive.arguments = (1, 0, 0)
|
|
codeblock_directive.options = {'linenos': directives.flag}
|
|
directives.register_directive('code-block', codeblock_directive)
|
|
directives.register_directive('sourcecode', codeblock_directive)
|
|
|
|
|
|
# ------ literalinclude directive ---------------------------------------------------
|
|
|
|
def literalinclude_directive(name, arguments, options, content, lineno,
|
|
content_offset, block_text, state, state_machine):
|
|
"""Like .. include:: :literal:, but only warns if the include file is not found."""
|
|
if not state.document.settings.file_insertion_enabled:
|
|
return [state.document.reporter.warning('File insertion disabled', line=lineno)]
|
|
env = state.document.settings.env
|
|
rel_fn = arguments[0]
|
|
source_dir = path.dirname(path.abspath(state_machine.input_lines.source(
|
|
lineno - state_machine.input_offset - 1)))
|
|
fn = path.normpath(path.join(source_dir, rel_fn))
|
|
|
|
encoding = options.get('encoding', 'utf-8')
|
|
try:
|
|
f = codecs.open(fn, 'r', encoding)
|
|
text = f.read()
|
|
f.close()
|
|
except (IOError, OSError):
|
|
retnode = state.document.reporter.warning(
|
|
'Include file %r not found or reading it failed' % arguments[0], line=lineno)
|
|
except UnicodeError:
|
|
retnode = state.document.reporter.warning(
|
|
'Encoding %r used for reading included file %r seems to '
|
|
'be wrong, try giving an :encoding: option' %
|
|
(encoding, arguments[0]))
|
|
else:
|
|
retnode = nodes.literal_block(text, text, source=fn)
|
|
retnode.line = 1
|
|
if options.get('language', ''):
|
|
retnode['language'] = options['language']
|
|
if 'linenos' in options:
|
|
retnode['linenos'] = True
|
|
state.document.settings.env.note_dependency(rel_fn)
|
|
return [retnode]
|
|
|
|
literalinclude_directive.options = {'linenos': directives.flag,
|
|
'language': directives.unchanged,
|
|
'encoding': directives.encoding}
|
|
literalinclude_directive.content = 0
|
|
literalinclude_directive.arguments = (1, 0, 0)
|
|
directives.register_directive('literalinclude', literalinclude_directive)
|