refactor svgtemplate into seperate file
This commit is contained in:
parent
d6f1f14207
commit
b6e3ef39e8
2 changed files with 52 additions and 50 deletions
59
renderlib.py
59
renderlib.py
|
@ -1,4 +1,3 @@
|
||||||
#!/usr/bin/python3
|
|
||||||
# vim: tabstop=4 shiftwidth=4 expandtab
|
# vim: tabstop=4 shiftwidth=4 expandtab
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
@ -7,11 +6,10 @@ import re
|
||||||
import glob
|
import glob
|
||||||
import shutil
|
import shutil
|
||||||
import errno
|
import errno
|
||||||
from lxml import etree
|
|
||||||
from xml.sax.saxutils import escape as xmlescape
|
|
||||||
import cssutils
|
|
||||||
import logging
|
import logging
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import svgtemplate
|
||||||
|
from lxml import etree
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
from wand.image import Image
|
from wand.image import Image
|
||||||
|
|
||||||
|
@ -88,45 +86,6 @@ def ensureFilesRemoved(pattern):
|
||||||
for f in glob.glob(pattern):
|
for f in glob.glob(pattern):
|
||||||
os.unlink(f)
|
os.unlink(f)
|
||||||
|
|
||||||
|
|
||||||
def svgTemplate_open(task):
|
|
||||||
with open(os.path.join(task.workdir, task.infile), 'r') as fp:
|
|
||||||
return fp.read()
|
|
||||||
|
|
||||||
|
|
||||||
def svgTemplate_replacetext(svgstr, task):
|
|
||||||
for key in task.parameters.keys():
|
|
||||||
svgstr = svgstr.replace(key, xmlescape(str(task.parameters[key])))
|
|
||||||
return svgstr
|
|
||||||
|
|
||||||
def svgTemplate_transform(svgstr, frame, task):
|
|
||||||
parser = etree.XMLParser(huge_tree=True)
|
|
||||||
svg = etree.fromstring(svgstr.encode('utf-8'), parser)
|
|
||||||
# apply the replace-pairs to the input text, by finding the specified xml-elements by their id and modify their css-parameter the correct value
|
|
||||||
for replaceinfo in frame:
|
|
||||||
(id, type, key, value) = replaceinfo
|
|
||||||
for el in svg.findall(".//*[@id='" + id.replace("'", "\\'") + "']"):
|
|
||||||
if type == 'style':
|
|
||||||
style = cssutils.parseStyle(el.attrib['style'] if 'style' in el.attrib else '')
|
|
||||||
style[key] = str(value)
|
|
||||||
el.attrib['style'] = style.cssText
|
|
||||||
elif type == 'attr':
|
|
||||||
el.attrib[key] = str(value)
|
|
||||||
elif type == 'text':
|
|
||||||
el.text = str(value)
|
|
||||||
# if '$subtitle' in task.parameters and task.parameters['$subtitle'] == '':
|
|
||||||
# child = svg.findall(".//*[@id='subtitle']")[0]
|
|
||||||
# child.getparent().remove(child)
|
|
||||||
return etree.tostring(svg, encoding='unicode')
|
|
||||||
|
|
||||||
def svgTemplate_write(svgstr, task):
|
|
||||||
# open the output-file (named ".gen.svg" in the workdir)
|
|
||||||
outfile = os.path.join(task.workdir, '.gen.svg')
|
|
||||||
with open(outfile, 'w') as fp:
|
|
||||||
# write the generated svg-text into the output-file
|
|
||||||
fp.write(svgstr)
|
|
||||||
return outfile
|
|
||||||
|
|
||||||
def renderFrame(infile, task, outfile):
|
def renderFrame(infile, task, outfile):
|
||||||
width = 1920
|
width = 1920
|
||||||
height = 1080
|
height = 1080
|
||||||
|
@ -172,10 +131,10 @@ def cachedRenderFrame(frame, frameNr, task, cache):
|
||||||
elif not skip_rendering:
|
elif not skip_rendering:
|
||||||
cache[frame] = frameNr
|
cache[frame] = frameNr
|
||||||
|
|
||||||
svgstr = svgTemplate_open(task)
|
svgstr = svgtemplate.open(task)
|
||||||
svgstr = svgTemplate_replacetext(svgstr, task)
|
svgstr = svgtemplate.replacetext(svgstr, task)
|
||||||
svgstr = svgTemplate_transform(svgstr, frame, task)
|
svgstr = svgtemplate.transform(svgstr, frame, task)
|
||||||
svgfile = svgTemplate_write(svgstr, task)
|
svgfile = svgtemplate.write(svgstr, task)
|
||||||
|
|
||||||
outfile = '{0}/.frames/{1:04d}.png'.format(task.workdir, frameNr)
|
outfile = '{0}/.frames/{1:04d}.png'.format(task.workdir, frameNr)
|
||||||
renderFrame(svgfile, task, outfile)
|
renderFrame(svgfile, task, outfile)
|
||||||
|
@ -185,9 +144,9 @@ def cachedRenderFrame(frame, frameNr, task, cache):
|
||||||
|
|
||||||
|
|
||||||
def rendertask_image(task):
|
def rendertask_image(task):
|
||||||
svgstr = svgTemplate_open(task)
|
svgstr = svgtemplate.open(task)
|
||||||
svgstr = svgTemplate_replacetext(svgstr, task)
|
svgstr = svgtemplate.replacetext(svgstr, task)
|
||||||
svgfile = svgTemplate_write(svgstr, task)
|
svgfile = svgtemplate.write(svgstr, task)
|
||||||
renderFrame(svgfile, task, task.outfile)
|
renderFrame(svgfile, task, task.outfile)
|
||||||
|
|
||||||
def rendertask_video(task):
|
def rendertask_video(task):
|
||||||
|
|
43
svgtemplate.py
Normal file
43
svgtemplate.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# vim: tabstop=4 shiftwidth=4 expandtab
|
||||||
|
import builtins
|
||||||
|
import cssutils
|
||||||
|
import os
|
||||||
|
from lxml import etree
|
||||||
|
from xml.sax.saxutils import escape as xmlescape
|
||||||
|
|
||||||
|
def open(task):
|
||||||
|
with builtins.open(os.path.join(task.workdir, task.infile), 'r') as fp:
|
||||||
|
return fp.read()
|
||||||
|
|
||||||
|
def replacetext(svgstr, task):
|
||||||
|
for key in task.parameters.keys():
|
||||||
|
svgstr = svgstr.replace(key, xmlescape(str(task.parameters[key])))
|
||||||
|
return svgstr
|
||||||
|
|
||||||
|
def transform(svgstr, frame, task):
|
||||||
|
parser = etree.XMLParser(huge_tree=True)
|
||||||
|
svg = etree.fromstring(svgstr.encode('utf-8'), parser)
|
||||||
|
# apply the replace-pairs to the input text, by finding the specified xml-elements by their id and modify their css-parameter the correct value
|
||||||
|
for replaceinfo in frame:
|
||||||
|
(id, type, key, value) = replaceinfo
|
||||||
|
for el in svg.findall(".//*[@id='" + id.replace("'", "\\'") + "']"):
|
||||||
|
if type == 'style':
|
||||||
|
style = cssutils.parseStyle(el.attrib['style'] if 'style' in el.attrib else '')
|
||||||
|
style[key] = str(value)
|
||||||
|
el.attrib['style'] = style.cssText
|
||||||
|
elif type == 'attr':
|
||||||
|
el.attrib[key] = str(value)
|
||||||
|
elif type == 'text':
|
||||||
|
el.text = str(value)
|
||||||
|
# if '$subtitle' in task.parameters and task.parameters['$subtitle'] == '':
|
||||||
|
# child = svg.findall(".//*[@id='subtitle']")[0]
|
||||||
|
# child.getparent().remove(child)
|
||||||
|
return etree.tostring(svg, encoding='unicode')
|
||||||
|
|
||||||
|
def write(svgstr, task):
|
||||||
|
# open the output-file (named ".gen.svg" in the workdir)
|
||||||
|
outfile = os.path.join(task.workdir, '.gen.svg')
|
||||||
|
with builtins.open(outfile, 'w') as fp:
|
||||||
|
# write the generated svg-text into the output-file
|
||||||
|
fp.write(svgstr)
|
||||||
|
return outfile
|
Loading…
Add table
Reference in a new issue