From 97250f54463a3402e11c305042ba093c84fd6293 Mon Sep 17 00:00:00 2001 From: Florian Rhiem Date: Mon, 1 Jul 2019 14:23:01 +0200 Subject: [PATCH 1/3] Add Sphinx extension and limited Python 3 compatibility --- .../directives/embedded_image_directive.py | 7 +++++-- docutils_extended/directives/tikz_directive.py | 2 +- docutils_extended/sphinx_extension.py | 11 +++++++++++ setup.py | 4 ++-- 4 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 docutils_extended/sphinx_extension.py diff --git a/docutils_extended/directives/embedded_image_directive.py b/docutils_extended/directives/embedded_image_directive.py index bf1e567..cbcebe9 100644 --- a/docutils_extended/directives/embedded_image_directive.py +++ b/docutils_extended/directives/embedded_image_directive.py @@ -6,7 +6,10 @@ import os import shutil import subprocess import tempfile -import urlparse +try: + from urllib.parse import urlparse +except ImportError: + from urlparse import urlparse import sys from io import BytesIO from PIL import Image @@ -25,7 +28,7 @@ OUT_PNG_FILENAME = "_converted_image{i:04d}.png" def is_url(url): - return urlparse.urlparse(url).scheme not in ("", "file") + return urlparse(url).scheme not in ("", "file") def load_and_convert_image( diff --git a/docutils_extended/directives/tikz_directive.py b/docutils_extended/directives/tikz_directive.py index 4cb88dd..fb4f271 100644 --- a/docutils_extended/directives/tikz_directive.py +++ b/docutils_extended/directives/tikz_directive.py @@ -142,7 +142,7 @@ def convert_image_to_html_base64(image_filepath): if filetype == "svg": filetype = "svg+xml" with open(image_filepath.encode(sys.getfilesystemencoding()), "rb") as image_file: - encoded_string = base64.b64encode(image_file.read()) + encoded_string = base64.b64encode(image_file.read()).decode('utf-8') return "data:image/{format};base64,".format(format=filetype) + encoded_string diff --git a/docutils_extended/sphinx_extension.py b/docutils_extended/sphinx_extension.py new file mode 100644 index 0000000..bcf5a04 --- /dev/null +++ b/docutils_extended/sphinx_extension.py @@ -0,0 +1,11 @@ +from . import directives + + +def setup(app): + app.add_directive("embedded-image", directives.EmbeddedImage) + app.add_directive("embedded-figure", directives.EmbeddedFigure) + app.add_directive("jupyter-outbox", directives.ParsedLiteral) + app.add_directive('tikz', directives.Tikz) + app.add_directive("tikz-figure", directives.TikzFigure) + app.connect('builder-inited', lambda app: directives.set_output_mode(app.builder.format)) + return {'version': '0.1'} diff --git a/setup.py b/setup.py index f360c15..195dfc1 100644 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ setup( name="docutils-extended", version=version, packages=find_packages(), - python_requires=">=2.7, <3", + python_requires=">=2.7", install_requires=install_requires, entry_points={ "console_scripts": [ @@ -80,7 +80,7 @@ setup( "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2 :: Only", + "Programming Language :: Python :: 3", "Topic :: Documentation", "Topic :: Software Development :: Documentation", ], -- GitLab From ca21e472b6144fca2cff18e948ea96fc92262abb Mon Sep 17 00:00:00 2001 From: Florian Rhiem Date: Mon, 1 Jul 2019 15:35:04 +0200 Subject: [PATCH 2/3] Allow tikz_directive to write into different build_directory for PDF output --- docutils_extended/directives/tikz_directive.py | 2 ++ docutils_extended/sphinx_extension.py | 6 ++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docutils_extended/directives/tikz_directive.py b/docutils_extended/directives/tikz_directive.py index fb4f271..98ab339 100644 --- a/docutils_extended/directives/tikz_directive.py +++ b/docutils_extended/directives/tikz_directive.py @@ -49,6 +49,7 @@ TMP_PNG_FILENAME = "tikz_picture.png" OUT_PNG_FILENAME = "_tikz_rendered{:04d}.png" TMP_SVG_FILENAME = "tikz_picture.svg" OUT_SVG_FILENAME = "_tikz_rendered{:04d}.svg" +BUILD_DIRECTORY = '.' class TemporaryDirectory(object): @@ -194,6 +195,7 @@ class Tikz(Directive): if is_output_mode_html: reference = directives.uri(convert_image_to_html_base64(rendered_tikz_filename)) else: + shutil.copy(rendered_tikz_filename, os.path.join(BUILD_DIRECTORY, os.path.basename(rendered_tikz_filename))) reference = directives.uri(rendered_tikz_filename) self.options["uri"] = reference if is_output_mode_html and not any(attr in self.options for attr in ("height", "width", "scale")): diff --git a/docutils_extended/sphinx_extension.py b/docutils_extended/sphinx_extension.py index bcf5a04..1dbd67e 100644 --- a/docutils_extended/sphinx_extension.py +++ b/docutils_extended/sphinx_extension.py @@ -1,11 +1,9 @@ from . import directives +from .directives import tikz_directive def setup(app): - app.add_directive("embedded-image", directives.EmbeddedImage) - app.add_directive("embedded-figure", directives.EmbeddedFigure) - app.add_directive("jupyter-outbox", directives.ParsedLiteral) + tikz_directive.BUILD_DIRECTORY = app.outdir app.add_directive('tikz', directives.Tikz) - app.add_directive("tikz-figure", directives.TikzFigure) app.connect('builder-inited', lambda app: directives.set_output_mode(app.builder.format)) return {'version': '0.1'} -- GitLab From a03aea29b0dbfb14fdf29f979130be384ce0c925 Mon Sep 17 00:00:00 2001 From: Florian Rhiem Date: Tue, 2 Jul 2019 08:37:26 +0200 Subject: [PATCH 3/3] Improve file handling in Tikz directive --- docutils_extended/directives/tikz_directive.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docutils_extended/directives/tikz_directive.py b/docutils_extended/directives/tikz_directive.py index 98ab339..961d68f 100644 --- a/docutils_extended/directives/tikz_directive.py +++ b/docutils_extended/directives/tikz_directive.py @@ -194,8 +194,9 @@ class Tikz(Directive): rendered_tikz_filename = render_tikz("\n".join(content), self.options, output_svg=is_output_mode_html) if is_output_mode_html: reference = directives.uri(convert_image_to_html_base64(rendered_tikz_filename)) + os.remove(rendered_tikz_filename) else: - shutil.copy(rendered_tikz_filename, os.path.join(BUILD_DIRECTORY, os.path.basename(rendered_tikz_filename))) + shutil.move(rendered_tikz_filename, os.path.join(BUILD_DIRECTORY, os.path.basename(rendered_tikz_filename))) reference = directives.uri(rendered_tikz_filename) self.options["uri"] = reference if is_output_mode_html and not any(attr in self.options for attr in ("height", "width", "scale")): -- GitLab