split font files (#1929)

pull/2081/head
Kaalleen 2023-02-19 10:38:25 +01:00 zatwierdzone przez GitHub
rodzic 7aee0979be
commit 971c921708
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 26 dodań i 12 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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