From 971c921708eb17442caca6e6df5e047bab41f4ee Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Sun, 19 Feb 2023 10:38:25 +0100 Subject: [PATCH] split font files (#1929) --- lib/lettering/font.py | 3 +++ lib/lettering/font_variant.py | 35 +++++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/lib/lettering/font.py b/lib/lettering/font.py index 6960105fc..03df4dc57 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 ecdba137e..75be95e72 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) + 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 + 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