From a636e61acc76410a21a168ef2be7c9a25edacf6d Mon Sep 17 00:00:00 2001 From: Geoffrey Poore Date: Thu, 29 Jun 2017 10:04:47 -0500 Subject: [PATCH 01/61] working on #98 (added syntax highlighting, removed invalid error message) --- pythontex/pythontex.dtx | 19 ++++++++++++++++--- pythontex/pythontex.sty | 19 ++++++++++++++++--- pythontex/pythontex2.py | 28 +++++++++++++++++++++++----- pythontex/pythontex3.py | 28 +++++++++++++++++++++++----- 4 files changed, 78 insertions(+), 16 deletions(-) diff --git a/pythontex/pythontex.dtx b/pythontex/pythontex.dtx index 2c71c2b..7e0e557 100644 --- a/pythontex/pythontex.dtx +++ b/pythontex/pythontex.dtx @@ -4077,11 +4077,24 @@ \ifstrequal{#1}{ruby}{\makepythontexfamily[pyglexer=ruby]{ruby}}{}% \ifstrequal{#1}{rb}{\makepythontexfamily[pyglexer=ruby]{rb}}{}% \ifstrequal{#1}{julia}{\makepythontexfamily[pyglexer=julia]{julia}}{}% - \ifstrequal{#1}{juliacon}{\pytx@MakeCodeFV{juliacon}% + \ifstrequal{#1}{juliacon}{\pgfkeys{/PYTX/family, name=juliacon, default, pyglexer=jlcon}% + \expandafter\xdef\csname pytx@macroformatter@juliacon\endcsname{\pytx@tmp@pprinter}% + \expandafter\gdef\csname pytx@fvsettings@juliacon\endcsname{}% + \expandafter\xdef\csname pytx@pyglexer@juliacon\endcsname{\pytx@tmp@pyglexer}% + \expandafter\xdef\csname pytx@pygopt@juliacon\endcsname{\pytx@tmp@pygopt}% + \expandafter\xdef\csname pytx@console@juliacon\endcsname{\pytx@tmp@console}% + \AtEndDocument{\immediate\write\pytx@codefile{pygfamily=juliacon|% + \csname pytx@pyglexer@juliacon\endcsname|% + \csname pytx@pygopt@juliacon\endcsname}% + }% + \pytx@MakeCodeFV{juliacon}% \newenvironment{juliaconsole}% - {\VerbatimEnvironment\begin{juliaconcode}}% + {\VerbatimEnvironment + \def\pytx@type{juliacon}% + \pytx@ConfigPygments + \begin{juliaconcode}}% {\end{juliaconcode}% - \ifbool{pytx@opt@autoprint}{}{\printpythontex{}}}}{}% + \ifbool{pytx@opt@autoprint}{}{\printpythontex{}}}}{}% \ifstrequal{#1}{jl}{\makepythontexfamily[pyglexer=julia]{jl}}{}% \ifstrequal{#1}{matlab}{\makepythontexfamily[pyglexer=matlab]{matlab}}{}% \ifstrequal{#1}{octave}{\makepythontexfamily[pyglexer=octave]{octave}}{}% diff --git a/pythontex/pythontex.sty b/pythontex/pythontex.sty index 990c2c0..3b4a269 100644 --- a/pythontex/pythontex.sty +++ b/pythontex/pythontex.sty @@ -1318,11 +1318,24 @@ \ifstrequal{#1}{ruby}{\makepythontexfamily[pyglexer=ruby]{ruby}}{}% \ifstrequal{#1}{rb}{\makepythontexfamily[pyglexer=ruby]{rb}}{}% \ifstrequal{#1}{julia}{\makepythontexfamily[pyglexer=julia]{julia}}{}% - \ifstrequal{#1}{juliacon}{\pytx@MakeCodeFV{juliacon}% + \ifstrequal{#1}{juliacon}{\pgfkeys{/PYTX/family, name=juliacon, default, pyglexer=jlcon}% + \expandafter\xdef\csname pytx@macroformatter@juliacon\endcsname{\pytx@tmp@pprinter}% + \expandafter\gdef\csname pytx@fvsettings@juliacon\endcsname{}% + \expandafter\xdef\csname pytx@pyglexer@juliacon\endcsname{\pytx@tmp@pyglexer}% + \expandafter\xdef\csname pytx@pygopt@juliacon\endcsname{\pytx@tmp@pygopt}% + \expandafter\xdef\csname pytx@console@juliacon\endcsname{\pytx@tmp@console}% + \AtEndDocument{\immediate\write\pytx@codefile{pygfamily=juliacon|% + \csname pytx@pyglexer@juliacon\endcsname|% + \csname pytx@pygopt@juliacon\endcsname}% + }% + \pytx@MakeCodeFV{juliacon}% \newenvironment{juliaconsole}% - {\VerbatimEnvironment\begin{juliaconcode}}% + {\VerbatimEnvironment + \def\pytx@type{juliacon}% + \pytx@ConfigPygments + \begin{juliaconcode}}% {\end{juliaconcode}% - \ifbool{pytx@opt@autoprint}{}{\printpythontex{}}}}{}% + \ifbool{pytx@opt@autoprint}{}{\printpythontex{}}}}{}% \ifstrequal{#1}{jl}{\makepythontexfamily[pyglexer=julia]{jl}}{}% \ifstrequal{#1}{matlab}{\makepythontexfamily[pyglexer=matlab]{matlab}}{}% \ifstrequal{#1}{octave}{\makepythontexfamily[pyglexer=octave]{octave}}{}% diff --git a/pythontex/pythontex2.py b/pythontex/pythontex2.py index 38b5c85..830eeaf 100644 --- a/pythontex/pythontex2.py +++ b/pythontex/pythontex2.py @@ -1286,7 +1286,8 @@ def do_multiprocessing(data, temp_data, old_data, engine_dict): engine_dict[family].warnings, engine_dict[family].linenumbers, engine_dict[family].lookbehind, - keeptemps, hashdependencies)''' + keeptemps, hashdependencies, + pygments_settings)''' tasks.append(pool.apply_async(run_code, [encoding, outputdir, workingdir, code_dict[key], engine_dict[family].language, @@ -1299,7 +1300,8 @@ def do_multiprocessing(data, temp_data, old_data, engine_dict): engine_dict[family].warnings, engine_dict[family].linenumbers, engine_dict[family].lookbehind, - keeptemps, hashdependencies])) + keeptemps, hashdependencies, + pygments_settings])) if verbose: print(' - Code process ' + key.replace('#', ':')) @@ -1475,7 +1477,7 @@ def do_multiprocessing(data, temp_data, old_data, engine_dict): def run_code(encoding, outputdir, workingdir, code_list, language, commands, command_created, extension, makestderr, stderrfilename, code_index, errorsig, warningsig, linesig, stderrlookbehind, - keeptemps, hashdependencies): + keeptemps, hashdependencies, pygments_settings): ''' Function for multiprocessing code files ''' @@ -1572,12 +1574,12 @@ def run_code(encoding, outputdir, workingdir, code_list, language, commands, inst = 0 for n, line in enumerate(tex_data_lines): if line.rstrip() == '\\begin{juliaterm}': - tex_data_lines[n] = '=>PYTHONTEX:STDOUT#{0}#code#\n'.format(inst) + '\\begin{Verbatim}\n' + tex_data_lines[n] = '=>PYTHONTEX:STDOUT#{0}#code#\n'.format(inst) inst += 1 if n != 0: tex_data_lines[n-1] = '' if line.rstrip() == '\\end{juliaterm}': - tex_data_lines[n] = '\\end{Verbatim}' + tex_data_lines[n] = '' tex_data_lines.append('=>PYTHONTEX:DEPENDENCIES#\n=>PYTHONTEX:CREATED#\n') with open(out_file_name, 'w', encoding=encoding) as f: f.write(''.join(tex_data_lines)) @@ -1638,6 +1640,18 @@ def run_code(encoding, outputdir, workingdir, code_list, language, commands, else: dependencies[dep] = (os.path.getmtime(dep_file), '') + if family == 'juliacon': + from pygments import highlight + from pygments.lexers import get_lexer_by_name + from pygments.formatters import LatexFormatter + formatter = dict() + lexer = dict() + for codetype in pygments_settings: + if codetype != ':GLOBAL': + p = pygments_settings[codetype]['formatter_options'].copy() + p['commandprefix'] = 'PYG' + formatter[codetype] = LatexFormatter(**p) + lexer[codetype] = get_lexer_by_name(pygments_settings[codetype]['lexer'], **p) for block in out.split('=>PYTHONTEX:STDOUT#')[1:]: if block: delims, content = block.split('#\n', 1) @@ -1668,6 +1682,8 @@ def run_code(encoding, outputdir, workingdir, code_list, language, commands, # Remove newline added by printing, prevent # LaTeX from adding a space after content content = content.rsplit('\n', 1)[0] + '\\endinput\n' + if family == 'juliacon': + content = highlight(content, lexer[family], formatter[family]) f.write(content) f.close() files.append(fname) @@ -1677,6 +1693,8 @@ def run_code(encoding, outputdir, workingdir, code_list, language, commands, messages.append('* PythonTeX error') messages.append(' Missing stderr file for ' + key_run.replace('#', ':')) errors += 1 + elif family == 'juliacon': + pass else: # Open error and code files. f = open(err_file_name, encoding=encoding) diff --git a/pythontex/pythontex3.py b/pythontex/pythontex3.py index 95186ec..fe56a8e 100644 --- a/pythontex/pythontex3.py +++ b/pythontex/pythontex3.py @@ -1286,7 +1286,8 @@ def do_multiprocessing(data, temp_data, old_data, engine_dict): engine_dict[family].warnings, engine_dict[family].linenumbers, engine_dict[family].lookbehind, - keeptemps, hashdependencies)''' + keeptemps, hashdependencies, + pygments_settings)''' tasks.append(pool.apply_async(run_code, [encoding, outputdir, workingdir, code_dict[key], engine_dict[family].language, @@ -1299,7 +1300,8 @@ def do_multiprocessing(data, temp_data, old_data, engine_dict): engine_dict[family].warnings, engine_dict[family].linenumbers, engine_dict[family].lookbehind, - keeptemps, hashdependencies])) + keeptemps, hashdependencies, + pygments_settings])) if verbose: print(' - Code process ' + key.replace('#', ':')) @@ -1475,7 +1477,7 @@ def do_multiprocessing(data, temp_data, old_data, engine_dict): def run_code(encoding, outputdir, workingdir, code_list, language, commands, command_created, extension, makestderr, stderrfilename, code_index, errorsig, warningsig, linesig, stderrlookbehind, - keeptemps, hashdependencies): + keeptemps, hashdependencies, pygments_settings): ''' Function for multiprocessing code files ''' @@ -1572,12 +1574,12 @@ def run_code(encoding, outputdir, workingdir, code_list, language, commands, inst = 0 for n, line in enumerate(tex_data_lines): if line.rstrip() == '\\begin{juliaterm}': - tex_data_lines[n] = '=>PYTHONTEX:STDOUT#{0}#code#\n'.format(inst) + '\\begin{Verbatim}\n' + tex_data_lines[n] = '=>PYTHONTEX:STDOUT#{0}#code#\n'.format(inst) inst += 1 if n != 0: tex_data_lines[n-1] = '' if line.rstrip() == '\\end{juliaterm}': - tex_data_lines[n] = '\\end{Verbatim}' + tex_data_lines[n] = '' tex_data_lines.append('=>PYTHONTEX:DEPENDENCIES#\n=>PYTHONTEX:CREATED#\n') with open(out_file_name, 'w', encoding=encoding) as f: f.write(''.join(tex_data_lines)) @@ -1638,6 +1640,18 @@ def run_code(encoding, outputdir, workingdir, code_list, language, commands, else: dependencies[dep] = (os.path.getmtime(dep_file), '') + if family == 'juliacon': + from pygments import highlight + from pygments.lexers import get_lexer_by_name + from pygments.formatters import LatexFormatter + formatter = dict() + lexer = dict() + for codetype in pygments_settings: + if codetype != ':GLOBAL': + p = pygments_settings[codetype]['formatter_options'].copy() + p['commandprefix'] = 'PYG' + formatter[codetype] = LatexFormatter(**p) + lexer[codetype] = get_lexer_by_name(pygments_settings[codetype]['lexer'], **p) for block in out.split('=>PYTHONTEX:STDOUT#')[1:]: if block: delims, content = block.split('#\n', 1) @@ -1668,6 +1682,8 @@ def run_code(encoding, outputdir, workingdir, code_list, language, commands, # Remove newline added by printing, prevent # LaTeX from adding a space after content content = content.rsplit('\n', 1)[0] + '\\endinput\n' + if family == 'juliacon': + content = highlight(content, lexer[family], formatter[family]) f.write(content) f.close() files.append(fname) @@ -1677,6 +1693,8 @@ def run_code(encoding, outputdir, workingdir, code_list, language, commands, messages.append('* PythonTeX error') messages.append(' Missing stderr file for ' + key_run.replace('#', ':')) errors += 1 + elif family == 'juliacon': + pass else: # Open error and code files. f = open(err_file_name, encoding=encoding) From 0fb173154177035403d1aefa7f0105347317bbc3 Mon Sep 17 00:00:00 2001 From: Geoffrey Poore Date: Thu, 20 Jul 2017 19:36:41 -0500 Subject: [PATCH 02/61] v0.16 --- NEWS.rst | 14 +++++++ README.rst | 2 +- pythontex/README | 2 +- pythontex/depythontex.py | 2 +- pythontex/depythontex2.py | 4 +- pythontex/depythontex3.py | 4 +- pythontex/pythontex.dtx | 14 ++++--- pythontex/pythontex.pdf | Bin 951758 -> 969134 bytes pythontex/pythontex.py | 2 +- pythontex/pythontex.sty | 4 +- pythontex/pythontex2.py | 4 +- pythontex/pythontex3.py | 4 +- pythontex/pythontex_2to3.py | 38 +++++++++--------- pythontex/pythontex_engines.py | 2 +- .../make_pythontex_gallery_html2.py | 16 ++++---- .../make_pythontex_gallery_html3.py | 16 ++++---- pythontex_gallery/myplot.png | Bin 13427 -> 14652 bytes pythontex_gallery/pythontex_gallery.html | 12 +++--- pythontex_gallery/pythontex_gallery.pdf | Bin 373106 -> 373207 bytes 19 files changed, 79 insertions(+), 61 deletions(-) diff --git a/NEWS.rst b/NEWS.rst index 58fa279..016a740 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -7,6 +7,20 @@ Version History =============== + +v0.16 (2017/07/20) +------------------ + +* Added preliminary console support for Julia (#98). + +* Fixed Python console compatibility with Python 3.6 by setting the ``code`` + module's new ``exitmsg`` argument to suppress the exit message (#100). + +* Improved Rust support, including tracking of created files and + dependencies (#91). + + + v0.15 (2016/07/21) ------------------ diff --git a/README.rst b/README.rst index d129756..2e2859f 100644 --- a/README.rst +++ b/README.rst @@ -11,7 +11,7 @@ :Author: Geoffrey Poore -:Version: 0.15 +:Version: 0.16 :License: LPPL_ (LaTeX code) and `BSD 3-Clause`_ (Python code) diff --git a/pythontex/README b/pythontex/README index 84ae1cf..5625993 100644 --- a/pythontex/README +++ b/pythontex/README @@ -3,7 +3,7 @@ =================================================================== :Author: Geoffrey Poore -:Version: 0.15 (2016/07/21) +:Version: 0.16 (2017/07/20) :License: LPPL v1.3 or later (LaTeX code) and BSD 3-Clause (Python code) :Development: https://github.com/gpoore/pythontex :Requirements: Python 2.7 or 3.2+; Pygments diff --git a/pythontex/depythontex.py b/pythontex/depythontex.py index 30256c6..3d48e3b 100644 --- a/pythontex/depythontex.py +++ b/pythontex/depythontex.py @@ -9,7 +9,7 @@ launch depythontex2.py or depythontex3.py directly. The version of Python does not matter for depythontex, since no code is executed. -Copyright (c) 2013-2016, Geoffrey M. Poore +Copyright (c) 2013-2017, Geoffrey M. Poore All rights reserved. Licensed under the BSD 3-Clause License: http://www.opensource.org/licenses/BSD-3-Clause diff --git a/pythontex/depythontex2.py b/pythontex/depythontex2.py index 0600fb4..7687e0e 100644 --- a/pythontex/depythontex2.py +++ b/pythontex/depythontex2.py @@ -47,7 +47,7 @@ typeset with a different package. -Copyright (c) 2013-2016, Geoffrey M. Poore +Copyright (c) 2013-2017, Geoffrey M. Poore All rights reserved. Licensed under the BSD 3-Clause License: http://www.opensource.org/licenses/BSD-3-Clause @@ -86,7 +86,7 @@ # Script parameters # Version -__version__ = '0.16dev' +__version__ = '0.16' # Functions and parameters for customizing the script output diff --git a/pythontex/depythontex3.py b/pythontex/depythontex3.py index b80699b..bdcea21 100644 --- a/pythontex/depythontex3.py +++ b/pythontex/depythontex3.py @@ -47,7 +47,7 @@ typeset with a different package. -Copyright (c) 2013-2016, Geoffrey M. Poore +Copyright (c) 2013-2017, Geoffrey M. Poore All rights reserved. Licensed under the BSD 3-Clause License: http://www.opensource.org/licenses/BSD-3-Clause @@ -86,7 +86,7 @@ # Script parameters # Version -__version__ = '0.16dev' +__version__ = '0.16' # Functions and parameters for customizing the script output diff --git a/pythontex/pythontex.dtx b/pythontex/pythontex.dtx index 7e0e557..d91e6e1 100644 --- a/pythontex/pythontex.dtx +++ b/pythontex/pythontex.dtx @@ -26,7 +26,7 @@ %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{pythontex} %<*package> - [2017/05/25 v0.16dev execute and typeset Python code and other languages] + [2017/07/20 v0.16 execute and typeset Python code and other languages] % % %<*driver> @@ -134,7 +134,7 @@ % % \fi % -% \CheckSum{3182} +% \CheckSum{3218} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -154,10 +154,10 @@ % % -% \begin{changelog}{v0.16}{2017/06/??} +% \begin{changelog}{v0.16}{2017/07/20} % \begin{itemize} % \item Added preliminary console support for Julia (\#98). -% \item Fixed Python console compatibility with Python 3.6 by setting the \texttt{code} module's new \texttt{exitmsg} argument to suppress the exit message (\#100). +% \item Fixed Python console compatibility with Python 3.6 by setting the \texttt{code} module's new \texttt{exitmsg} argument to suppress the exit message (\#100). % \item Improved Rust support, including tracking of created files and dependencies (\#91). % \end{itemize} % \end{changelog} @@ -1547,6 +1547,10 @@ % % Julia exceptions are synchronized with the document, but the line numbering does not always correspond to the Python equivalent. This is because Julia allows expressions to be continued on subsequent lines in ways that Python does not. % +% \subsubsection*{Console} +% +% Preliminary Julia console support was added in v0.16, under the base name |juliacon|. Unlike the Python console environments that allow invalid input, currently everything entered in a |juliaconsole| environment must be valid. The Julia console uses \href{https://github.com/mpastell/Weave.jl}{\textsf{Weave.jl}} internally to evaluate code, and it currently does not support invalid input. +% % % \subsection{Octave} % @@ -1809,7 +1813,7 @@ % We store the name of the package in a macro for later use in warnings and error messages. % \begin{macrocode} \newcommand{\pytx@packagename}{PythonTeX} -\newcommand{\pytx@packageversion}{0.16dev} +\newcommand{\pytx@packageversion}{0.16} % \end{macrocode} % % \subsection{Required packages} diff --git a/pythontex/pythontex.pdf b/pythontex/pythontex.pdf index 2531310f30e1d577fdc30f3b735fb77008046635..bd919b5a556584c95c7beb25b89b37320bf209dd 100644 GIT binary patch delta 451469 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