From e9e82b651263bd3501af75ac4638a5ae36761173 Mon Sep 17 00:00:00 2001 From: L3D Date: Fri, 10 Mar 2023 04:19:29 +0100 Subject: [PATCH] Adding Scour to optimize svg --- lektor_render_template.py | 70 ++++++++++++++++++++++----------------- setup.py | 5 +-- 2 files changed, 43 insertions(+), 32 deletions(-) diff --git a/lektor_render_template.py b/lektor_render_template.py index 0483b54..05ccad9 100644 --- a/lektor_render_template.py +++ b/lektor_render_template.py @@ -4,44 +4,54 @@ from lektor.pluginsystem import Plugin from lektor.project import Project from lektor.context import get_ctx +from scour.scour import scourString +from scour.scour import sanitizeOptions as sanitizeScourOptions +from scour.scour import parse_args as parseScourArgs + +def optimize_svg(sourcesvg): + """ using scour to optimize and minify svg """ + scouroptions = parseScourArgs([ + "--enable-id-stripping", + "--enable-comment-stripping", + "--shorten-ids", + "--indent=none", + "--no-line-breaks"]) + scouroptions = sanitizeScourOptions(scouroptions) + optimizedsvg = scourString(sourcesvg, scouroptions) + return optimizedsvg + + # pylint: disable=too-many-arguments -def render_template(env, pad, filepath, inputname, inputvalue, color, tiny): +def render_template(env, pad, filepath, inputname, inputvalue, color): """ Render my custom Jinja2 Template """ # Prepare Variables + font_spacing = int(7) rendered_title = f"{inputvalue}: {inputname}" - if not tiny: - rendered_sizes = f"width=\"{int(132.5+(int(len(inputname)/2)*10))}\" height=\"20\"" - orange_box_width = str(int(5+len(inputname)*5)) - orange_position = str(int(50+(len(inputname)*5))) - latest_element_x = str(int(1+(int(len(inputname)/2)*10)-1)-0.007) - accent_02_multiplier = str(1+int(len(inputname)/2)) - name_position = str(105) - else: - rendered_sizes = f"width=\"{int(102.5+(int(len(inputname)/2)*10))}\" height=\"20\"" - orange_box_width = str(int(5+len(inputname)*5)+25) - orange_position = str(int(50+(len(inputname)*5))) - latest_element_x = str(int(1+(int(len(inputname)/2)*10)-1)-30.007) - accent_02_multiplier = str(1+int(len(inputname)/2)-3) - name_position = str(75) + center_position = int(len(inputvalue))*font_spacing+15 + right_width = int(len(inputname))*font_spacing + overal_width = int((len(inputvalue)+len(inputname))*font_spacing)+int(31) + rendered_sizes = f"width=\"{overal_width}\" height=\"20\" viewBox=\"0 0 {overal_width} 20\"" + accent_multiplier = int((overal_width - 121)/font_spacing) + right_box_position = float(int(overal_width - 132)-0.007) - - # Create File + # Create an optimized SVG File with open(f"assets/{filepath}", 'w', encoding='UTF-8') as outputfile: - outputfile.write(env.render_template( - 'galaxy.svg', pad=pad, this={ + outputfile.write( + optimize_svg(env.render_template( + 'galaxy.svg', pad=pad, this={ 'title': str(rendered_title), + 'font_spacing': str(font_spacing), + 'center_position': str(center_position), + 'right_width': str(right_width), + 'right_box_position': str(right_box_position), + 'latest_accent': str(right_box_position), 'name': str(inputname), - 'name_position': str(name_position), + 'accent_multiplier': str(accent_multiplier), "sizes": str(rendered_sizes), - "orange_box_width": str(orange_box_width), - "orange_position": str(orange_position), - "accent03_x": str(latest_element_x), - "bg_orange_x": str(latest_element_x), - "accent_02_multiplier": str(accent_02_multiplier), "inputvalue": str(inputvalue), - "color_orange": str(color) - })) + "color_higlight": str(color) + }))) # pylint: disable=unused-argument def generate_galaxy_svg(inputname, **options): @@ -60,7 +70,7 @@ def generate_galaxy_svg(inputname, **options): # Create File filepath = f"/svg/{inputname}.svg" color = '#FF6600' - render_template(env, pad, filepath, inputname, 'ansible-galaxy', color, False) + render_template(env, pad, filepath, inputname, 'ansible-galaxy', color) return filepath # pylint: disable=unused-argument @@ -94,7 +104,7 @@ def generate_maintainance_svg(inputdict, **options): color = '#220029' case _: color = '#000000' - render_template(env, pad, filepath, inputstate, 'maintainance', color, False) + render_template(env, pad, filepath, inputstate, 'maintainance', color) return filepath # pylint: disable=unused-argument @@ -118,7 +128,7 @@ def generate_license_svg(inputdict, **options): # Create File filepath = f"/svg/{inputname}_license.svg" color = '#064ccf' - render_template(env, pad, filepath, inputstate, 'license', color, True) + render_template(env, pad, filepath, inputstate, 'license', color) return filepath diff --git a/setup.py b/setup.py index e36707f..c66f31a 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ setup( packages=find_packages(), py_modules=['lektor_render_template'], # url='https://backwesen.de/l3d/lektor-render-template.git', - version='0.2', + version='0.3', classifiers=[ 'Framework :: Lektor', 'Environment :: Plugins', @@ -36,5 +36,6 @@ setup( 'lektor.plugins': [ 'render-template = lektor_render_template:RenderTemplatePlugin', ] - } + }, + install_requires=['scour'] )