diff --git a/dist/beamer-slider-0.0.1.tar.gz b/dist/beamer-slider-0.0.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a26945b2d39023b8d9ed19da09975b97ca46c2ef Binary files /dev/null and b/dist/beamer-slider-0.0.1.tar.gz differ diff --git a/dist/beamer-slider-0.0.2.tar.gz b/dist/beamer-slider-0.0.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9d9de025e1ace90f2311c9c8c61c470313bf07ff Binary files /dev/null and b/dist/beamer-slider-0.0.2.tar.gz differ diff --git a/dist/beamer-slider-0.1.0.tar.gz b/dist/beamer-slider-0.1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..40da5b47506b6307af6bbf651e13de2b60f20102 Binary files /dev/null and b/dist/beamer-slider-0.1.0.tar.gz differ diff --git a/dist/beamer_slider-0.0.1-py3-none-any.whl b/dist/beamer_slider-0.0.1-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ef122db6efc3aac165213fb06b33f4bb086f2e45 Binary files /dev/null and b/dist/beamer_slider-0.0.1-py3-none-any.whl differ diff --git a/dist/beamer_slider-0.0.2-py3-none-any.whl b/dist/beamer_slider-0.0.2-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..0604d04045a24f8f47236a17f450547931a20d48 Binary files /dev/null and b/dist/beamer_slider-0.0.2-py3-none-any.whl differ diff --git a/dist/beamer_slider-0.1.0-py3-none-any.whl b/dist/beamer_slider-0.1.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a532586d2e0aadeb4a1b0ff37c5ea53e7cbf2a0e Binary files /dev/null and b/dist/beamer_slider-0.1.0-py3-none-any.whl differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e386127967d6f5ae0c9be2e433e6b542061de6b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +Jinja2 +numpy +chardet +scipy +seaborn +lxml +matplotlib +pylatexenc +beautifulsoup4 +PyPDF2 diff --git a/setup.py b/setup.py index 0076be64071cdafef02c2781ce15af8de75b86af..b8c5aadc798e7f904f8e1f592f06dd58ff4d2ff3 100644 --- a/setup.py +++ b/setup.py @@ -1,14 +1,17 @@ # Use this guide: +# Use: pipreqs.exe slider --no-pin --force for requirements.txt # https://packaging.python.org/tutorials/packaging-projects/ +# py -m build && twine upload dist/* import setuptools - +import pkg_resources with open("README.md", "r", encoding="utf-8") as fh: long_description = fh.read() + setuptools.setup( name="beamer-slider", - version="0.0.1", + version="0.1.0", author="Tue Herlau", author_email="tuhe@dtu.dk", description="Software to create inkscape overlays in Beamer", @@ -27,5 +30,5 @@ setuptools.setup( package_dir={"": "src"}, packages=setuptools.find_packages(where="src"), python_requires=">=3.8", - install_requires=['jinja2', 'numpy', 'scipy', 'bs4', 'lxml', 'codecs', 'optparse', 'PyPDF2', 'pickle'], + install_requires=[str(r) for r in pkg_resources.parse_requirements('requirements.txt')], ) diff --git a/src/beamer_slider.egg-info/PKG-INFO b/src/beamer_slider.egg-info/PKG-INFO new file mode 100644 index 0000000000000000000000000000000000000000..9d993a88b002af0f99d156a00d9b19811547b432 --- /dev/null +++ b/src/beamer_slider.egg-info/PKG-INFO @@ -0,0 +1,22 @@ +Metadata-Version: 2.1 +Name: beamer-slider +Version: 0.1.0 +Summary: Software to create inkscape overlays in Beamer +Home-page: https://lab.compute.dtu.dk/tuhe/slider +Author: Tue Herlau +Author-email: tuhe@dtu.dk +License: MIT +Project-URL: Bug Tracker, https://lab.compute.dtu.dk/tuhe/slider/issues +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +License-File: LICENSE + +# Slider + +Slide overlay software based on beamer and inkscape. This project is currently used in coursebox. +The software also offers a package for jinja2 (jinjafy) which offers a handful of convenient extensions. + diff --git a/src/beamer_slider.egg-info/SOURCES.txt b/src/beamer_slider.egg-info/SOURCES.txt new file mode 100644 index 0000000000000000000000000000000000000000..d98979d74d33838738f8a66fa9cbed4b6060c1e4 --- /dev/null +++ b/src/beamer_slider.egg-info/SOURCES.txt @@ -0,0 +1,27 @@ +LICENSE +README.md +pyproject.toml +setup.py +src/beamer_slider.egg-info/PKG-INFO +src/beamer_slider.egg-info/SOURCES.txt +src/beamer_slider.egg-info/dependency_links.txt +src/beamer_slider.egg-info/requires.txt +src/beamer_slider.egg-info/top_level.txt +src/jinjafy/__init__.py +src/jinjafy/jinja_env.py +src/jinjafy/jinja_matlab_load.py +src/jinjafy/jinjafy.py +src/jinjafy/snipper.py +src/jinjafy/textools.py +src/jinjafy/cache/__init__.py +src/jinjafy/cache/simplecache.py +src/jinjafy/plot/__init__.py +src/jinjafy/plot/plot_helpers.py +src/slider/__init__.py +src/slider/convert.py +src/slider/inkscape2scenes.py +src/slider/latexutils.py +src/slider/legacy_importer.py +src/slider/slide_fixer.py +src/slider/slider.py +src/slider/svg2latex.py \ No newline at end of file diff --git a/src/beamer_slider.egg-info/dependency_links.txt b/src/beamer_slider.egg-info/dependency_links.txt new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/src/beamer_slider.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/beamer_slider.egg-info/requires.txt b/src/beamer_slider.egg-info/requires.txt new file mode 100644 index 0000000000000000000000000000000000000000..4414fc1e28fae46b363ba747b7a921479d85ab62 --- /dev/null +++ b/src/beamer_slider.egg-info/requires.txt @@ -0,0 +1 @@ +requirements.txt diff --git a/src/beamer_slider.egg-info/top_level.txt b/src/beamer_slider.egg-info/top_level.txt new file mode 100644 index 0000000000000000000000000000000000000000..273f1c300b0dce2499a9fa2d865445e81c0c4fa2 --- /dev/null +++ b/src/beamer_slider.egg-info/top_level.txt @@ -0,0 +1,2 @@ +jinjafy +slider diff --git a/src/jinjafy/__init__.py b/src/jinjafy/__init__.py index 8a00d8cd422222546dfd99ba2f052660bc562784..0bebe70d96db3874f2f97a22a611728675673f86 100644 --- a/src/jinjafy/__init__.py +++ b/src/jinjafy/__init__.py @@ -1,10 +1,27 @@ from jinjafy.jinjafy import jinjafy_comment from jinjafy.jinjafy import jinjafy_template from jinjafy.jinja_matlab_load import matlab_load +# from slider import latexmk from jinjafy.textools import mat2table import subprocess +# import os +import platform # from subprocess import subprocess + +def execute_command(command, shell=True): + if not isinstance(command, list): + command = [command] + if not platform.uname()[0] == "Linux": + result = subprocess.run(command, stdout=subprocess.PIPE, shell=shell) + out = result.stdout + else: + out = subprocess.check_output(command, shell=shell) + s = out.decode("utf-8") + OK = True + return s, OK + + # def get_system_name(): # if is_win(): # return "Win" @@ -13,14 +30,14 @@ import subprocess # if is_cogsys_cluster(): # return "cogys cluster" -def execute_command(command, shell=True): - if not isinstance(command, list): - command = [command] - # if not is_compute(): - # result = subprocess.run(command, stdout=subprocess.PIPE, shell=shell) - # out = result.stdout - # else: - out = subprocess.check_output(command, shell=shell) - s = out.decode("utf-8") - OK = True - return s, OK \ No newline at end of file +# def execute_command(command, shell=True): +# if not isinstance(command, list): +# command = [command] +# # if not is_compute(): +# # result = subprocess.run(command, stdout=subprocess.PIPE, shell=shell) +# # out = result.stdout +# # else: +# out = subprocess.check_output(command, shell=shell) +# s = out.decode("utf-8") +# OK = True +# return s, OK \ No newline at end of file diff --git a/src/jinjafy/__pycache__/__init__.cpython-38.pyc b/src/jinjafy/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aa62904b022a971a4e69a831ea2f483d3806192 Binary files /dev/null and b/src/jinjafy/__pycache__/__init__.cpython-38.pyc differ diff --git a/src/jinjafy/__pycache__/jinja_env.cpython-38.pyc b/src/jinjafy/__pycache__/jinja_env.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..abf04b662946eb74d0837b4824f18ea4275dfd62 Binary files /dev/null and b/src/jinjafy/__pycache__/jinja_env.cpython-38.pyc differ diff --git a/src/jinjafy/__pycache__/jinja_matlab_load.cpython-38.pyc b/src/jinjafy/__pycache__/jinja_matlab_load.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..157360969681cc1d500f4aa235a1f5254de5c558 Binary files /dev/null and b/src/jinjafy/__pycache__/jinja_matlab_load.cpython-38.pyc differ diff --git a/src/jinjafy/__pycache__/jinjafy.cpython-38.pyc b/src/jinjafy/__pycache__/jinjafy.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69ae6f69b71541c147ea92712ef1db62f57045d5 Binary files /dev/null and b/src/jinjafy/__pycache__/jinjafy.cpython-38.pyc differ diff --git a/src/jinjafy/__pycache__/snipper.cpython-38.pyc b/src/jinjafy/__pycache__/snipper.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff0f2bbe8e5ba452727dc54fbaad57942fa0ffe2 Binary files /dev/null and b/src/jinjafy/__pycache__/snipper.cpython-38.pyc differ diff --git a/src/jinjafy/__pycache__/textools.cpython-38.pyc b/src/jinjafy/__pycache__/textools.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c949cc592b364bf5fb79452fba9ba7d07aa0b78 Binary files /dev/null and b/src/jinjafy/__pycache__/textools.cpython-38.pyc differ diff --git a/src/jinjafy/cache/__init__.py b/src/jinjafy/cache/__init__.py index a2e522c2f3baf4762462cd8dac312e446a3e4323..a46ef35f71399ee0932c8d376af74af0682a8e6c 100644 --- a/src/jinjafy/cache/__init__.py +++ b/src/jinjafy/cache/__init__.py @@ -1,8 +1,8 @@ -from thtools.cache.simplecache import cache_update_str as cache_update_str -from thtools.cache.simplecache import cache_contains_str as cache_contains_str +from jinjafy.cache.simplecache import cache_update_str as cache_update_str +from jinjafy.cache.simplecache import cache_contains_str as cache_contains_str -from thtools.cache.simplecache import cache_update_file as cache_update_file -from thtools.cache.simplecache import cache_contains_file as cache_contains_file +from jinjafy.cache.simplecache import cache_update_file as cache_update_file +from jinjafy.cache.simplecache import cache_contains_file as cache_contains_file -from thtools.cache.simplecache import cache_update_dir as cache_update_dir -from thtools.cache.simplecache import cache_contains_dir as cache_contains_dir \ No newline at end of file +from jinjafy.cache.simplecache import cache_update_dir as cache_update_dir +from jinjafy.cache.simplecache import cache_contains_dir as cache_contains_dir \ No newline at end of file diff --git a/src/jinjafy/cache/__pycache__/__init__.cpython-38.pyc b/src/jinjafy/cache/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..73befe4e95c0381fe5c48253a0b38fb976319457 Binary files /dev/null and b/src/jinjafy/cache/__pycache__/__init__.cpython-38.pyc differ diff --git a/src/jinjafy/cache/__pycache__/simplecache.cpython-38.pyc b/src/jinjafy/cache/__pycache__/simplecache.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ada4ff733185c3c008d0174a69e0a240c9114445 Binary files /dev/null and b/src/jinjafy/cache/__pycache__/simplecache.cpython-38.pyc differ diff --git a/src/jinjafy/jinjafy.py b/src/jinjafy/jinjafy.py index 4eee3d35cfeeb307daf3016d8dc24fbe5dcbf391..43da4a7568b76ee8e1d479026bb4f2b032cf5e3f 100644 --- a/src/jinjafy/jinjafy.py +++ b/src/jinjafy/jinjafy.py @@ -42,7 +42,7 @@ def jinjafy_comment(data,file_in=None,file_out=None,jinja_tag="jinja",jinja_code jinja_code = '\n'.join(ss) - from thtools.jinjafy.snipper import SnipperExtension + from jinjafy.snipper import SnipperExtension extensions = [SnipperExtension] if template_searchpath: if not isinstance(template_searchpath, list): @@ -70,10 +70,9 @@ def jinjafy_comment(data,file_in=None,file_out=None,jinja_tag="jinja",jinja_code env.globals['ceil'] = math.ceil env.globals['floor'] = math.floor - import thtools - if not thtools.is_cluster(): - from pylatexenc import latexencode - env.globals['utf8tolatex'] = latexencode.utf8tolatex + + from pylatexenc import latexencode + env.globals['utf8tolatex'] = latexencode.utf8tolatex env.globals['as_set'] = jinja_env.as_set env.globals['as_set_list'] = jinja_env.as_set_list env.globals['len'] = jinja_env.mylen diff --git a/src/jinjafy/plot/__init__.py b/src/jinjafy/plot/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d2254a59f55bb578875e2f0e81c6aa4264e14025 --- /dev/null +++ b/src/jinjafy/plot/__init__.py @@ -0,0 +1 @@ +# from thtools.plot.plot_helpers import * diff --git a/src/jinjafy/plot/plot_helpers.py b/src/jinjafy/plot/plot_helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..594e7182f50c536f1b6c5b7d8542f631325b1425 --- /dev/null +++ b/src/jinjafy/plot/plot_helpers.py @@ -0,0 +1,48 @@ +import matplotlib.pyplot as plt +import numpy as np +import seaborn as sns +import inspect +import os +from datetime import datetime + +def subplots(nrows=2, ncols=2, size_inches=(10,12), *args): + fig,axx = plt.subplots(nrows, ncols, *args) + fig.set_size_inches(size_inches[0], size_inches[1]) + if not isinstance(axx, list): + axx = np.asarray(axx, dtype=np.object).reshape((nrows, ncols)) + return fig, axx + +def get_colors(palette="dark",max_colors=5): + return sns.color_palette(palette, max_colors) + + +def watermark_plot(extra="", nback=2, fz_y=10): + # from slider.thtools_base import watermark_string + s = watermark_string(nback=nback) + plt.figtext(0.05, 0.95, s) + + + +def watermark_string(nback=2): + + + tm = datetime.now().strftime('%b-%d-%I:%M%p') + # for line in traceback.format_stack(): + # # print(line.strip()) + v = inspect.stack() + ss = [] + j = 0 + for i in range(len(v)): + if "plot_helpers.py" in v[i].filename: continue + ss.append( os.path.basename( v[i].filename) ) + j = j + 1 + if j > nback: break + # from thtools import execute_command + from jinjafy import execute_command + v, _ = execute_command("git rev-parse --short HEAD".split()) + + ss.append(tm) + return ('/'.join(ss) + f" @{v}").strip() + + + diff --git a/src/jinjafy/snipper.py b/src/jinjafy/snipper.py index a0f8fd02f8517cb2f204446426914a6778f38d40..ad55d29ae0dcc9746768c017852d129e98ed5d3c 100644 --- a/src/jinjafy/snipper.py +++ b/src/jinjafy/snipper.py @@ -1,7 +1,6 @@ from jinja2 import nodes from jinja2.ext import Extension import os -import thtools class SnipperExtension(Extension): @@ -29,7 +28,8 @@ class SnipperExtension(Extension): args = [parser.parse_expression()] ofile = os.path.join(os.path.dirname(parser.filename), args[0].value) args[0].value = ofile - thtools.ensure_dir_exists(os.path.dirname(ofile)) + if not os.path.isdir(os.path.dirname(ofile)): + os.makedirs(os.path.dirname(ofile)) self.ofile = ofile print("Snipper args", args, "ofile", ofile) @@ -50,7 +50,6 @@ class SnipperExtension(Extension): [], [], body).set_lineno(lineno) # parser.environment.loader.searchpath - # parser.parse_statements(body) return body diff --git a/src/jinjafy/textools.py b/src/jinjafy/textools.py index 662f393640a5140d3c6c2837ce0773a45f528e31..511932d118708e006a70e908b681fd50643a8647 100644 --- a/src/jinjafy/textools.py +++ b/src/jinjafy/textools.py @@ -97,7 +97,7 @@ def mat2table(X,vlabels=None,hlabels=None,file_out = None, bookstabs=True, vvlab data = {'X' : Xdl, 'hlabels': hlabels, 'vlabels': vlabels, 'cc': cc, 'H':H, 'W': W, 'bookstabs': bookstabs, 'vvlabels': vvlabels} - from thtools.jinjafy.jinjafy import jinjafy_comment + from jinjafy.jinjafy import jinjafy_comment s = jinjafy_comment(data,jinja_tag="jinja1") if file_out: print("Writing to: " + file_out) @@ -108,9 +108,9 @@ def mat2table(X,vlabels=None,hlabels=None,file_out = None, bookstabs=True, vvlab with open(file_out, 'w') as f: f.write(s) if standalone: - from thtools import latexmk - latexmk(file_out) + from slider import latexmk + latexmk(file_out) return s diff --git a/src/slider/__init__.py b/src/slider/__init__.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..582dc9b79c90f89e8951081d141e0b9a06ac6a03 100644 --- a/src/slider/__init__.py +++ b/src/slider/__init__.py @@ -0,0 +1,2 @@ +from jinjafy import execute_command +from slider.latexutils import latexmk \ No newline at end of file diff --git a/src/slider/__pycache__/__init__.cpython-38.pyc b/src/slider/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef231a76c8e59798ab8a631008afd57c6bcc4fb6 Binary files /dev/null and b/src/slider/__pycache__/__init__.cpython-38.pyc differ diff --git a/src/slider/__pycache__/convert.cpython-38.pyc b/src/slider/__pycache__/convert.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45d23d8da3bfcaa6d9b30ca2ab0bab2ed1071101 Binary files /dev/null and b/src/slider/__pycache__/convert.cpython-38.pyc differ diff --git a/src/slider/__pycache__/latexutils.cpython-38.pyc b/src/slider/__pycache__/latexutils.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a5dd789246d93e5df66674bfc1fc77f67d267ee Binary files /dev/null and b/src/slider/__pycache__/latexutils.cpython-38.pyc differ diff --git a/src/slider/__pycache__/legacy_importer.cpython-38.pyc b/src/slider/__pycache__/legacy_importer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c9228bc8a3b9e6c388337b7fc8f467bf280708f Binary files /dev/null and b/src/slider/__pycache__/legacy_importer.cpython-38.pyc differ diff --git a/src/slider/__pycache__/slide_fixer.cpython-38.pyc b/src/slider/__pycache__/slide_fixer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..031a0af180836a3d1c58377ffe25d34357aea653 Binary files /dev/null and b/src/slider/__pycache__/slide_fixer.cpython-38.pyc differ diff --git a/src/slider/__pycache__/slider.cpython-38.pyc b/src/slider/__pycache__/slider.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c8fa597a455a2d4d0bc1ac9cdf0ac34509d8380 Binary files /dev/null and b/src/slider/__pycache__/slider.cpython-38.pyc differ diff --git a/src/slider/convert.py b/src/slider/convert.py index f4b00969f75d835da5715ac9487e5b1bc7a33d74..3c2518c8e1e7e93ed753df77d0632c121d1abca6 100644 --- a/src/slider/convert.py +++ b/src/slider/convert.py @@ -1,7 +1,6 @@ from jinjafy import execute_command import os from bs4 import BeautifulSoup -# import thtools def svg2pdf(fin, fout=None, crop=True, text_to_path=False, export_area_page=True): """ diff --git a/src/slider/latexutils.py b/src/slider/latexutils.py new file mode 100644 index 0000000000000000000000000000000000000000..2e50e0978da7c792fd2d44a35209b4afdc3e7d71 --- /dev/null +++ b/src/slider/latexutils.py @@ -0,0 +1,36 @@ +from jinjafy import execute_command +import os +import shutil + +def latexmk(texfile,pdf_out=None,shell=True,cleanup=False, Linux=False): + cdir = os.getcwd() + dname = os.path.dirname(texfile) + os.chdir(dname) + texfile = os.path.basename(texfile) + if Linux: + CMD = "latexmk -f -g -pdf -interaction=nonstopmode " + texfile + print("Running LaTeX command>> " + CMD) + s = execute_command(CMD.split(" "), shell=shell) + else: + CMD = "latexmk -f -g -pdf -shell-escape -interaction=nonstopmode " + texfile + print("Running LaTeX command>> " + CMD) + s = execute_command(CMD.split(" "),shell=shell) + + if pdf_out: + shutil.copyfile(texfile[:-4]+".pdf", pdf_out) + else: + pdf_out = os.path.join(os.path.dirname(texfile), texfile[:-4]+".pdf") + + if cleanup and os.path.exists(pdf_out): + bft = ['bbl', 'blg', 'fdb_latexmk', 'fls', 'aux', 'synctex.gz', 'log'] + for ex in bft: + import glob + fl = glob.glob(dname + "/*."+ex) + for f in fl: + os.remove(f) + + os.chdir(cdir) + return pdf_out + + + diff --git a/src/slider/legacy_importer.py b/src/slider/legacy_importer.py index 983f3fce5b47114c78af0fe2304d4b5bd735c199..a20a87e4d9dd429dfd8e4f2d518ce8914f84df40 100644 --- a/src/slider/legacy_importer.py +++ b/src/slider/legacy_importer.py @@ -3,7 +3,6 @@ # https://github.com/eea/odfpy import os import shutil -# import thtools from jinjafy import jinjafy_comment from bs4 import BeautifulSoup import glob @@ -253,10 +252,9 @@ def svg_edit_to_importable(svg_edit_file,verbose=False): with open(svg_fonts_layers[-1], 'bw') as f2: f2.write(s2.encode("UTF-8")) - from thtools.slider.convert import svg2pdf + from slider.convert import svg2pdf svg2pdf(svg_fonts_layers[-1], fout=pdf_nofonts_layers[-1], crop=False, text_to_path=True, export_area_page=True) # cmd = ['inkscape', '-C', '-T', '--without-gui', '--file=%s'%svg_fonts_layers[-1], '--export-pdf=%s' % pdf_nofonts_layers[-1]] - # thtools.execute_command(cmd) if verbose: print("svg_edit_to_importable called. converted svg file\n > %s\nto files:"%svg_edit_file) @@ -322,14 +320,15 @@ def slidedeck_to_images(slide_deck_pdf, base_out_pattern, num_to_take=None): opat.replace("%i", '%d') cmd = f"pdftk {slide_deck_pdf} burst output {opat} compress" print("pdftk splitting into ", num_pages) - thtools.execute_command(cmd.split()) + + execute_command(cmd.split()) outfiles = [] slide_deck_split_pdf = [base_out_pattern[:-4] % (i + 1) + "_tmp.pdf" for i in range(num_pages)] for i, opdf in enumerate(slide_deck_split_pdf): print("convertion", i, opdf) ofile = base_out_pattern %(i+1) cmd = f"pdf2svg {opdf} {ofile}" - thtools.execute_command(cmd.split()) + execute_command(cmd.split()) b = os.path.getsize(ofile) # print(b) if b == 0: @@ -357,7 +356,7 @@ def slidedeck_to_images_DEFUNCT(slide_deck_pdf, base_out_pattern, num_to_take=No def num_pages_in_pdf(pdf_file): cmd = ['pdftk', '%s' % pdf_file, 'dump_data'] - ss = thtools.execute_command(cmd)[0].splitlines() + ss = execute_command(cmd)[0].splitlines() s = int([s for s in ss if 'NumberOfPages' in s].pop().split()[-1]) return s @@ -368,11 +367,11 @@ def slide_to_image(slide_deck_pdf, output, page_to_take=1, use_inkscape=True): slide_deck_split_pdf = output[:-4] + "_tmp.pdf" ext = output[-3:] if ext == "svg": - from thtools.slider.convert import pdf2svg + from slider.convert import pdf2svg pdf2svg(slide_deck_pdf, fout=output, page_no=page_to_take) # cmd = ['pdftk', '%s' % slide_deck_pdf, 'cat', '%i' % page_to_take, 'output', '%s' % slide_deck_split_pdf] # # page_to_take = 1 - # thtools.execute_command(cmd) + # if use_inkscape: # cmd = ['inkscape', '-C', '--without-gui', '--file=%s' % slide_deck_split_pdf, '-l', '%s' % output] # else: @@ -381,7 +380,7 @@ def slide_to_image(slide_deck_pdf, output, page_to_take=1, use_inkscape=True): if os.path.exists(output): os.remove(output) cmd = ("pdftocairo -png -f %i -l %i"% (page_to_take, page_to_take)).split(" ") + [slide_deck_pdf, output] - thtools.execute_command(cmd) + execute_command(cmd) if ext == "png": png_with_postfix = glob.glob(output + "-*.png") if not png_with_postfix: diff --git a/src/slider/slider.py b/src/slider/slider.py index bbf3721a68a1e4f75a3b2cad005cfc413587cdea..fbb6f5439987b2c1b92851596d9a440a145aae89 100644 --- a/src/slider/slider.py +++ b/src/slider/slider.py @@ -1,11 +1,14 @@ from slider import legacy_importer import PyPDF2 import os -# import thtools +from jinjafy import execute_command from slider.legacy_importer import SVG_EDIT_RELPATH, SVG_TMP_RELPATH, move_template_files, DTU_beamer_base from jinjafy.cache import cache_update_str, cache_contains_str, cache_contains_file, cache_update_file import shutil from slider.slide_fixer import check_svg_file_and_fix_if_broken +from slider import latexmk +import glob + dc = "\\documentclass" def fix_handout(s): @@ -107,7 +110,7 @@ def set_svg_background_images(lecture_tex, verbose=False, else: cdir = os.getcwd() os.chdir(os.path.dirname(lecture_tex_nosvg)) - thtools.execute_command(("latexmk -shell-escape -f -pdf -interaction=nonstopmode " + os.path.basename(lecture_tex_nosvg)).split(" ")) + execute_command(("latexmk -shell-escape -f -pdf -interaction=nonstopmode " + os.path.basename(lecture_tex_nosvg)).split(" ")) os.chdir(cdir) cache_update_file(MAIN_TEX_DIR, lecture_tex_nosvg) ANY_CHANGES = True @@ -159,8 +162,9 @@ def set_svg_background_images(lecture_tex, verbose=False, ANY_CHANGES = True if ANY_CHANGES and recompile_on_change: - thtools.latexmk(lecture_tex) - import glob + + latexmk(lecture_tex) + if clean_temporary_files: if verbose: print("> SlideConverter: Removing temporary dirs...")