diff --git a/doc/conf.py.in b/doc/conf.py.in index 62455e45..577fe4a5 100644 --- a/doc/conf.py.in +++ b/doc/conf.py.in @@ -3,7 +3,7 @@ # TRIQS documentation build configuration file import sys -sys.path.insert(0, "@CMAKE_CURRENT_SOURCE_DIR@/sphinxext/autorun") +sys.path.insert(0, "@CMAKE_CURRENT_SOURCE_DIR@/sphinxext") sys.path.insert(0, "@CMAKE_CURRENT_SOURCE_DIR@/sphinxext/numpydoc") extensions = ['sphinx.ext.autodoc', @@ -14,8 +14,8 @@ extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.autosummary', 'sphinx.ext.githubpages', + 'sphinx_autorun', 'matplotlib.sphinxext.plot_directive', - 'autorun', 'numpydoc'] source_suffix = '.rst' diff --git a/doc/sphinxext/autorun/autorun.py b/doc/sphinxext/autorun/autorun.py deleted file mode 100644 index cbd29742..00000000 --- a/doc/sphinxext/autorun/autorun.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -""" -sphinxcontirb.autorun -~~~~~~~~~~~~~~~~~~~~~~ - -Run the code and insert stdout after the code block. - - -""" -import os -from subprocess import Popen,PIPE - -from docutils import nodes -from docutils.parsers.rst import Directive -from docutils.parsers.rst import directives -from sphinx.errors import SphinxError -from pygments import highlight -from pygments.lexers import PythonLexer -from pygments.formatters import HtmlFormatter - -class RunBlockError(SphinxError): - category = 'runblock error' - -class AutoRun: - here = os.path.abspath(__file__) - pycon = os.path.join(os.path.dirname(here),'pycon.py') - config = dict( - pycon = 'python ' + pycon, - pycon_prefix_chars = 4, - pycon_show_source = False, - console = 'bash', - console_prefix_chars = 1 , - ) - @classmethod - def builder_init(cls,app): - cls.config.update(app.builder.config.autorun_languages) - - - -class RunBlock(Directive): - has_content = True - required_arguments = 1 - optional_arguments = 0 - final_argument_whitespace = False - option_spec = { - 'linenos': directives.flag, - } - - - def run(self): - config = AutoRun.config - language = self.arguments[0] - - if language not in config: - raise RunBlockError('Unknown language %s' % language) - - - # Get configuration values for the language - args = config[language].split() - #input_encoding = config.get(language+'_input_encoding','ascii') - input_encoding = 'utf8' - output_encoding = 'utf8' - #output_encoding = config.get(language+'_output_encoding','ascii') - prefix_chars = config.get(language+'_prefix_chars',0) - show_source = config.get(language+'_show_source',True) - - - # Build the code text - proc = Popen(args,bufsize=1,stdin=PIPE,stdout=PIPE,stderr=PIPE) - codelines = (line[prefix_chars:] for line in self.content) - code = '\n'.join(codelines).encode(input_encoding) - - # Run the code - stdout,stderr = proc.communicate(code) - - # Process output - out ='' - if stdout: - out += ''.join(stdout).decode(output_encoding) - if stderr: - out += ''.join(stderr).decode(output_encoding) - - # Get the original code with prefixes - if show_source: - code = '\n'.join(self.content) - else: - code = '' - #code_out = u'\n\n ---Output:---\n'.join((highlight(code, PythonLexer(), HtmlFormatter()),out)) - code_out = '\n\n ---Output:---\n'.join((code,out)) - - literal = nodes.literal_block(code_out,code_out) - #literal['language'] = language - literal['language'] = 'python' - literal['linenos'] = 'linenos' in self.options - return [literal] - - - -def setup(app): - app.add_directive('runblock', RunBlock) - app.connect('builder-inited',AutoRun.builder_init) - app.add_config_value('autorun_languages', AutoRun.config, 'env') - -# vim: set expandtab shiftwidth=4 softtabstop=4 : diff --git a/doc/sphinxext/sphinx_autorun/__init__.py b/doc/sphinxext/sphinx_autorun/__init__.py new file mode 100644 index 00000000..1afa0377 --- /dev/null +++ b/doc/sphinxext/sphinx_autorun/__init__.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +""" +sphinxcontirb.autorun +~~~~~~~~~~~~~~~~~~~~~~ + +Run the code and insert stdout after the code block. +""" +import os +from subprocess import PIPE, Popen + +from docutils import nodes +from docutils.parsers.rst import Directive, directives +from sphinx.errors import SphinxError + +from sphinx_autorun import version + +__version__ = version.version + + +class RunBlockError(SphinxError): + category = 'runblock error' + + +class AutoRun(object): + here = os.path.abspath(__file__) + pycon = os.path.join(os.path.dirname(here), 'pycon.py') + config = { + 'pycon': 'python ' + pycon, + 'pycon_prefix_chars': 4, + 'pycon_show_source': False, + 'console': 'bash', + 'console_prefix_chars': 1, + } + + @classmethod + def builder_init(cls, app): + cls.config.update(app.builder.config.autorun_languages) + + +class RunBlock(Directive): + has_content = True + required_arguments = 1 + optional_arguments = 0 + final_argument_whitespace = False + option_spec = { + 'linenos': directives.flag, + } + + def run(self): + config = AutoRun.config + language = self.arguments[0] + + if language not in config: + raise RunBlockError('Unknown language %s' % language) + + # Get configuration values for the language + args = config[language].split() + input_encoding = config.get(language+'_input_encoding', 'utf8') + output_encoding = config.get(language+'_output_encoding', 'utf8') + prefix_chars = config.get(language+'_prefix_chars', 0) + show_source = config.get(language+'_show_source', True) + + # Build the code text + proc = Popen(args, bufsize=1, stdin=PIPE, stdout=PIPE, stderr=PIPE) + codelines = (line[prefix_chars:] for line in self.content) + code = u'\n'.join(codelines).encode(input_encoding) + + # Run the code + stdout, stderr = proc.communicate(code) + + # Process output + if stdout: + out = stdout.decode(output_encoding) + if stderr: + out = stderr.decode(output_encoding) + + # Get the original code with prefixes + if show_source: + code = u'\n'.join(self.content) + code_out = u'\n'.join((code, out)) + else: + code_out = out + + literal = nodes.literal_block(code_out, code_out) + literal['language'] = language + literal['linenos'] = 'linenos' in self.options + return [literal] + + +def setup(app): + app.add_directive('runblock', RunBlock) + app.connect('builder-inited', AutoRun.builder_init) + app.add_config_value('autorun_languages', AutoRun.config, 'env') diff --git a/doc/sphinxext/autorun/pycon.py b/doc/sphinxext/sphinx_autorun/pycon.py similarity index 77% rename from doc/sphinxext/autorun/pycon.py rename to doc/sphinxext/sphinx_autorun/pycon.py index 22ad46c8..c0edf861 100644 --- a/doc/sphinxext/autorun/pycon.py +++ b/doc/sphinxext/sphinx_autorun/pycon.py @@ -1,7 +1,7 @@ import sys from code import InteractiveInterpreter - + def main(): """ Print lines of input along with output. @@ -12,23 +12,20 @@ def main(): try: while True: source = next(source_lines) - print('>>>', source) + # Allow the user to ignore specific lines of output. + if not source.endswith('# ignore'): + print('>>>', source) more = console.runsource(source) while more: next_line = next(source_lines) print('...', next_line) - source += '\n' + next_line + source += '\n' + next_line more = console.runsource(source) except StopIteration: if more: print('... ') more = console.runsource(source + '\n') - - + if __name__ == '__main__': main() - - -# vim: set expandtab shiftwidth=4 softtabstop=4 : - diff --git a/doc/sphinxext/sphinx_autorun/version.py b/doc/sphinxext/sphinx_autorun/version.py new file mode 100644 index 00000000..433d173a --- /dev/null +++ b/doc/sphinxext/sphinx_autorun/version.py @@ -0,0 +1,4 @@ +# coding: utf-8 +# file generated by setuptools_scm +# don't change, don't track in version control +version = '1.1.1'