summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaalleen <36401965+kaalleen@users.noreply.github.com>2023-02-19 10:38:25 +0100
committerGitHub <noreply@github.com>2023-02-19 10:38:25 +0100
commit971c921708eb17442caca6e6df5e047bab41f4ee (patch)
treeb99c21cd1c1f0aac2d5eae767f821f39a855e4d3
parent7aee0979be4f39cde7a6396cdc0d1d2cc4222d90 (diff)
split font files (#1929)
-rw-r--r--lib/lettering/font.py3
-rw-r--r--lib/lettering/font_variant.py37
2 files changed, 27 insertions, 13 deletions
diff --git a/lib/lettering/font.py b/lib/lettering/font.py
index 6960105f..03df4dc5 100644
--- a/lib/lettering/font.py
+++ b/lib/lettering/font.py
@@ -160,6 +160,9 @@ class Font(object):
for variant in FontVariant.VARIANT_TYPES:
if os.path.isfile(os.path.join(self.path, "%s.svg" % variant)):
font_variants.append(variant)
+ elif (os.path.isdir(os.path.join(self.path, "%s" % variant)) and
+ [svg for svg in os.listdir(os.path.join(self.path, "%s" % variant)) if svg.endswith('.svg')]):
+ font_variants.append(variant)
if not font_variants:
raise FontError(_("The font '%s' has no variants.") % self.name)
return font_variants
diff --git a/lib/lettering/font_variant.py b/lib/lettering/font_variant.py
index ecdba137..75be95e7 100644
--- a/lib/lettering/font_variant.py
+++ b/lib/lettering/font_variant.py
@@ -60,19 +60,30 @@ class FontVariant(object):
self._load_glyphs()
def _load_glyphs(self):
- svg_path = os.path.join(self.path, "%s.svg" % self.variant)
- svg = inkex.load_svg(svg_path).getroot()
- svg = self._apply_transforms(svg)
-
- glyph_layers = svg.xpath(".//svg:g[starts-with(@inkscape:label, 'GlyphLayer-')]", namespaces=inkex.NSS)
- for layer in glyph_layers:
- self._clean_group(layer)
- layer.attrib[INKSCAPE_LABEL] = layer.attrib[INKSCAPE_LABEL].replace("GlyphLayer-", "", 1)
- glyph_name = layer.attrib[INKSCAPE_LABEL]
- try:
- self.glyphs[glyph_name] = Glyph(layer)
- except AttributeError:
- pass
+ variant_file_paths = self._get_variant_file_paths()
+ for svg_path in variant_file_paths:
+ svg = inkex.load_svg(svg_path).getroot()
+ svg = self._apply_transforms(svg)
+
+ glyph_layers = svg.xpath(".//svg:g[starts-with(@inkscape:label, 'GlyphLayer-')]", namespaces=inkex.NSS)
+ for layer in glyph_layers:
+ self._clean_group(layer)
+ layer.attrib[INKSCAPE_LABEL] = layer.attrib[INKSCAPE_LABEL].replace("GlyphLayer-", "", 1)
+ glyph_name = layer.attrib[INKSCAPE_LABEL]
+ try:
+ self.glyphs[glyph_name] = Glyph(layer)
+ except AttributeError:
+ pass
+
+ def _get_variant_file_paths(self):
+ file_paths = []
+ direct_path = os.path.join(self.path, "%s.svg" % self.variant)
+ if os.path.isfile(direct_path):
+ file_paths.append(direct_path)
+ elif os.path.isdir(os.path.join(self.path, "%s" % self.variant)):
+ path = os.path.join(self.path, "%s" % self.variant)
+ file_paths.extend([os.path.join(path, svg) for svg in os.listdir(path) if svg.endswith('.svg')])
+ return file_paths
def _clean_group(self, group):
# We'll repurpose the layer as a container group labelled with the