3
0
mirror of https://github.com/triqs/dft_tools synced 2024-08-06 20:40:00 +02:00

[doc] Update autorun to latest version, default to utf8 encoding

This commit is contained in:
Nils Wentzell 2020-06-08 14:49:06 -04:00
parent 746710ea48
commit c98b36140a
5 changed files with 105 additions and 115 deletions

View File

@ -3,7 +3,7 @@
# TRIQS documentation build configuration file # TRIQS documentation build configuration file
import sys 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") sys.path.insert(0, "@CMAKE_CURRENT_SOURCE_DIR@/sphinxext/numpydoc")
extensions = ['sphinx.ext.autodoc', extensions = ['sphinx.ext.autodoc',
@ -14,8 +14,8 @@ extensions = ['sphinx.ext.autodoc',
'sphinx.ext.viewcode', 'sphinx.ext.viewcode',
'sphinx.ext.autosummary', 'sphinx.ext.autosummary',
'sphinx.ext.githubpages', 'sphinx.ext.githubpages',
'sphinx_autorun',
'matplotlib.sphinxext.plot_directive', 'matplotlib.sphinxext.plot_directive',
'autorun',
'numpydoc'] 'numpydoc']
source_suffix = '.rst' source_suffix = '.rst'

View File

@ -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 :

View File

@ -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')

View File

@ -12,7 +12,9 @@ def main():
try: try:
while True: while True:
source = next(source_lines) 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) more = console.runsource(source)
while more: while more:
next_line = next(source_lines) next_line = next(source_lines)
@ -25,10 +27,5 @@ def main():
more = console.runsource(source + '\n') more = console.runsource(source + '\n')
if __name__ == '__main__': if __name__ == '__main__':
main() main()
# vim: set expandtab shiftwidth=4 softtabstop=4 :

View File

@ -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'