Add metadata to the SVG files right away
This commit is contained in:
parent
0594ee703d
commit
fddf78fcc3
|
@ -607,9 +607,10 @@ class Boxes:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.ctx.stroke()
|
self.ctx.stroke()
|
||||||
|
|
||||||
self.ctx = None
|
self.ctx = None
|
||||||
|
|
||||||
|
self.surface.set_metadata(self.metadata)
|
||||||
|
|
||||||
self.surface.flush()
|
self.surface.flush()
|
||||||
self.surface.finish()
|
self.surface.finish()
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import math
|
import math
|
||||||
|
import datetime
|
||||||
from affine import Affine
|
from affine import Affine
|
||||||
from boxes.extents import Extents
|
from boxes.extents import Extents
|
||||||
|
|
||||||
|
@ -29,6 +30,9 @@ class Surface:
|
||||||
self.parts = []
|
self.parts = []
|
||||||
self._p = self.new_part("default")
|
self._p = self.new_part("default")
|
||||||
|
|
||||||
|
def set_metadata(self, metadata):
|
||||||
|
self.metadata = metadata
|
||||||
|
|
||||||
def flush(self):
|
def flush(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -332,8 +336,80 @@ class Context:
|
||||||
|
|
||||||
|
|
||||||
class SVGSurface(Surface):
|
class SVGSurface(Surface):
|
||||||
def finish(self):
|
|
||||||
|
|
||||||
|
def _addTag(self, parent, tag, text, first=False):
|
||||||
|
if first:
|
||||||
|
t = ET.Element(tag)
|
||||||
|
else:
|
||||||
|
t = ET.SubElement(parent, tag)
|
||||||
|
t.text = text
|
||||||
|
t.tail = '\n'
|
||||||
|
if first:
|
||||||
|
parent.insert(0, t)
|
||||||
|
return t
|
||||||
|
|
||||||
|
def _add_metadata(self, root):
|
||||||
|
md = self.metadata
|
||||||
|
|
||||||
|
# Add Inkscape style rdf meta data
|
||||||
|
root.set("xmlns:dc", "http://purl.org/dc/elements/1.1/")
|
||||||
|
root.set("xmlns:cc", "http://creativecommons.org/ns#")
|
||||||
|
root.set("xmlns:rdf","http://www.w3.org/1999/02/22-rdf-syntax-ns#")
|
||||||
|
|
||||||
|
title = "{group} - {name}".format(**md)
|
||||||
|
date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
|
m = self._addTag(root, "metadata", '\n', True)
|
||||||
|
r = ET.SubElement(m, 'rdf:RDF')
|
||||||
|
w = ET.SubElement(r, 'cc:Work')
|
||||||
|
w.text = '\n'
|
||||||
|
|
||||||
|
self._addTag(w, 'dc:title', title)
|
||||||
|
self._addTag(w, 'dc:date', date)
|
||||||
|
|
||||||
|
if "url" in md and md["url"]:
|
||||||
|
self._addTag(w, 'dc:source', md["url"])
|
||||||
|
else:
|
||||||
|
self._addTag(w, 'dc:source', md["cli"])
|
||||||
|
|
||||||
|
desc = md["short_description"] or ""
|
||||||
|
if "description" in md and md["description"]:
|
||||||
|
desc += "\n\n" + md["description"]
|
||||||
|
desc += "\n\nCreated with Boxes.py (https://festi.info/boxes.py)\n"
|
||||||
|
desc += "Command line: %s\n" % md["cli"]
|
||||||
|
if md["url"]:
|
||||||
|
desc += "Url: %s\n" % md["url"]
|
||||||
|
desc += "SettingsUrl: %s\n" % md["url"].replace("&render=1", "")
|
||||||
|
self._addTag(w, 'dc:description', desc)
|
||||||
|
|
||||||
|
# title
|
||||||
|
self._addTag(root, "title", md["name"], True)
|
||||||
|
|
||||||
|
# Add XML comment
|
||||||
|
txt = """
|
||||||
|
{name} - {short_description}
|
||||||
|
""".format(**md)
|
||||||
|
if md["description"]:
|
||||||
|
txt += """
|
||||||
|
|
||||||
|
{description}
|
||||||
|
|
||||||
|
""".format(**md)
|
||||||
|
txt += """
|
||||||
|
Created with Boxes.py (https://festi.info/boxes.py)
|
||||||
|
Creation date: {date}
|
||||||
|
""".format(date=date, **md)
|
||||||
|
|
||||||
|
txt += "Command line (remove spaces between dashes): %s\n" % md["cli"].replace("--", "- -")
|
||||||
|
|
||||||
|
if md["url"]:
|
||||||
|
txt += "Url: %s\n" % md["url"]
|
||||||
|
txt += "SettingsUrl: %s\n" % md["url"].replace("&render=1", "")
|
||||||
|
m = ET.Comment(txt)
|
||||||
|
m.tail = '\n'
|
||||||
|
root.insert(0, m)
|
||||||
|
|
||||||
|
def finish(self):
|
||||||
extents = self.extents()
|
extents = self.extents()
|
||||||
|
|
||||||
self.move_offset(-extents.xmin + PADDING,
|
self.move_offset(-extents.xmin + PADDING,
|
||||||
|
@ -360,6 +436,8 @@ class SVGSurface(Surface):
|
||||||
svg.text = "\n"
|
svg.text = "\n"
|
||||||
tree = ET.ElementTree(svg)
|
tree = ET.ElementTree(svg)
|
||||||
|
|
||||||
|
self._add_metadata(svg)
|
||||||
|
|
||||||
for i, part in enumerate(self.parts):
|
for i, part in enumerate(self.parts):
|
||||||
if not part.pathes:
|
if not part.pathes:
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -213,67 +213,6 @@ class SVGFile(object):
|
||||||
return t
|
return t
|
||||||
|
|
||||||
|
|
||||||
def addMetadata(self, md):
|
|
||||||
root = self.tree.getroot()
|
|
||||||
|
|
||||||
# Add Inkscape style rdf meta data
|
|
||||||
root.set("xmlns:dc", "http://purl.org/dc/elements/1.1/")
|
|
||||||
root.set("xmlns:cc", "http://creativecommons.org/ns#")
|
|
||||||
root.set("xmlns:rdf","http://www.w3.org/1999/02/22-rdf-syntax-ns#")
|
|
||||||
|
|
||||||
title = "{group} - {name}".format(**md)
|
|
||||||
date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
|
|
||||||
m = self._addTag(root, "metadata", '\n', True)
|
|
||||||
r = ElementTree.SubElement(m, 'rdf:RDF')
|
|
||||||
w = ElementTree.SubElement(r, 'cc:Work')
|
|
||||||
w.text = '\n'
|
|
||||||
|
|
||||||
self._addTag(w, 'dc:title', title)
|
|
||||||
self._addTag(w, 'dc:date', date)
|
|
||||||
|
|
||||||
if "url" in md and md["url"]:
|
|
||||||
self._addTag(w, 'dc:source', md["url"])
|
|
||||||
else:
|
|
||||||
self._addTag(w, 'dc:source', md["cli"])
|
|
||||||
|
|
||||||
desc = md["short_description"]
|
|
||||||
if "description" in md and md["description"]:
|
|
||||||
desc += "\n\n" + md["description"]
|
|
||||||
desc += "\n\nCreated with Boxes.py (https://festi.info/boxes.py)\n"
|
|
||||||
desc += "Command line: %s\n" % md["cli"]
|
|
||||||
if md["url"]:
|
|
||||||
desc += "Url: %s\n" % md["url"]
|
|
||||||
desc += "SettingsUrl: %s\n" % re.sub(r"&render=[01]", "", md["url"])
|
|
||||||
self._addTag(w, 'dc:description', desc)
|
|
||||||
|
|
||||||
# title
|
|
||||||
self._addTag(root, "title", md["name"], True)
|
|
||||||
|
|
||||||
# Add XML comment
|
|
||||||
txt = """
|
|
||||||
{name} - {short_description}
|
|
||||||
""".format(**md)
|
|
||||||
if md["description"]:
|
|
||||||
txt += """
|
|
||||||
|
|
||||||
{description}
|
|
||||||
|
|
||||||
""".format(**md)
|
|
||||||
txt += """
|
|
||||||
Created with Boxes.py (https://festi.info/boxes.py)
|
|
||||||
Creation date: {date}
|
|
||||||
""".format(date=date, **md)
|
|
||||||
|
|
||||||
txt += "Command line (remove spaces beteen dashes): %s\n" % md["cli"].replace("--", "- -")
|
|
||||||
|
|
||||||
if md["url"]:
|
|
||||||
txt += "Url: %s\n" % md["url"]
|
|
||||||
txt += "SettingsUrl: %s\n" % re.sub(r"&render=[01]", "", md["url"])
|
|
||||||
m = ElementTree.Comment(txt)
|
|
||||||
m.tail = '\n'
|
|
||||||
root.insert(0, m)
|
|
||||||
|
|
||||||
unit2mm = {"mm" : 1.0,
|
unit2mm = {"mm" : 1.0,
|
||||||
"cm" : 10.0,
|
"cm" : 10.0,
|
||||||
"in" : 25.4,
|
"in" : 25.4,
|
||||||
|
|
Loading…
Reference in New Issue