sorry for the late response and the new post. (The other one was closed)
You’re right, I had already suggested it before. I had completely forgotten. Maybe I’m getting old.
Anyway, the problem remains: How can I find these errors?
Maybe with a custom parameter in the search filter. Or is there a hidden option in glyph’s python vocabulary? Any Ideas?
The metric key error does not find a broken (due to renaming) value. I tried with a script, but since there doesn’t seem to be a direct parameter for that either, you have to consider a lot of options (like calculations). Unfortunately quite time consuming.
Or am I on the wrong track?
# Importiere die notwendigen Module
from GlyphsApp import *
def check_metrics():
# Hole die aktuelle Schriftart
font = Glyphs.font
# Hole die aktuell ausgewählten Glyphen
selected_glyphs = font.selectedLayers
# Überprüfe jeden ausgewählten Glyphe
# for layer in selected_glyphs:
# glyph = layer.parent
for glyph in font.glyphs:
Au=0
for l in glyph.layers:
if l.isMasterLayer == True:
for c in l.components:
if c.automaticAlignment == True:
Au=1
else:
break
# glyph = layer.parent
if Au==0:
# Überprüfe das linke Sidebearing
left_metric_key = glyph.leftMetricsKey
if not is_valid_metric_key(left_metric_key, font):
print(f"Fehler: {glyph.name} hat einen ungültigen linken Metric Key: {left_metric_key}")
# Überprüfe das rechte Sidebearing
right_metric_key = glyph.rightMetricsKey
if not is_valid_metric_key(right_metric_key, font):
print(f"Fehler: {glyph.name} hat einen ungültigen rechten Metric Key: {right_metric_key}")
def is_valid_metric_key(metric_key, font):
"""Überprüft, ob der gegebene Metric Key auf einen vorhandenen Glyphe verweist."""
if not metric_key:
return True
else:
if metric_key=="=|" or metric_key=="=0" or metric_key[:2]=="=|":
return True
elif metric_key[:1]=="=" and metric_key[1:] in font.glyphs:
return True
elif metric_key in font.glyphs:
return True
#return metric_key #and metric_key in font.glyphs
# Führe die Funktion aus
check_metrics()
Output:
Fehler: G.slab hat einen ungültigen rechten Metric Key: =10@100
Fehler: Q.009 hat einen ungültigen rechten Metric Key: =O@348
Fehler: Q.010 hat einen ungültigen rechten Metric Key: =O@500
Fehler: B.sose.001 hat einen ungültigen linken Metric Key: =H.sose.001@500
Fehler: E.slab.long hat einen ungültigen linken Metric Key: =H.slab*2
Fehler: G.003 hat einen ungültigen rechten Metric Key: =90@100
Fehler: G.004 hat einen ungültigen rechten Metric Key: =90@100
Fehler: G.gro hat einen ungültigen rechten Metric Key: =90@100
Fehler: H.slab.long hat einen ungültigen linken Metric Key: =H.slab*2
Fehler: H.slab.long hat einen ungültigen rechten Metric Key: =H.slab*2
Fehler: M.sose.002 hat einen ungültigen linken Metric Key: =H@265
Fehler: P.fu hat einen ungültigen rechten Metric Key: =46
Fehler: Q.sose hat einen ungültigen rechten Metric Key: =O@352
Fehler: Q.sose.001 hat einen ungültigen rechten Metric Key: =O@352
Fehler: f.s hat einen ungültigen rechten Metric Key: =f@485
Fehler: k.003 hat einen ungültigen rechten Metric Key: k.r
Fehler: m.001 hat einen ungültigen linken Metric Key: n.001
Fehler: m.001 hat einen ungültigen rechten Metric Key: n.001
Fehler: m.002 hat einen ungültigen linken Metric Key: n.001
Fehler: m.002 hat einen ungültigen rechten Metric Key: n.001
Fehler: r.001 hat einen ungültigen linken Metric Key: n.001
Fehler: germandbls.sose.curl hat einen ungültigen rechten Metric Key: z.sose.curl
Fehler: x.004 hat einen ungültigen rechten Metric Key: x.002
Fehler: y.001a.003 hat einen ungültigen rechten Metric Key: v.1
Fehler: y.001a.004 hat einen ungültigen rechten Metric Key: v.1
Fehler: y.001a.005 hat einen ungültigen rechten Metric Key: v.1
Fehler: y.001a.006 hat einen ungültigen rechten Metric Key: v.1
Fehler: b.sose hat einen ungültigen linken Metric Key: =h@200
Fehler: b.sose.001 hat einen ungültigen linken Metric Key: =h@200
Fehler: f.edge hat einen ungültigen rechten Metric Key: =f@485
Fehler: f.edge.001 hat einen ungültigen rechten Metric Key: =f@485
Fehler: f.sose.curl hat einen ungültigen rechten Metric Key: =f@485
Fehler: i.sose hat einen ungültigen rechten Metric Key: =iota@480
Fehler: l.sose.tops hat einen ungültigen linken Metric Key: =l.1@500
Fehler: f_f.002 hat einen ungültigen rechten Metric Key: =f@490
Fehler: _f.lowly.002 hat einen ungültigen rechten Metric Key: =f@493
Fehler: f_f.001 hat einen ungültigen rechten Metric Key: =f@490
Fehler: Q.sc.sose hat einen ungültigen rechten Metric Key: =O.sc@291
Fehler: uni0436.sose hat einen ungültigen rechten Metric Key: k.semi
Fehler: uni043C.002 hat einen ungültigen linken Metric Key: =n@226
Fehler: uni043C.002 hat einen ungültigen rechten Metric Key: =u@226
Fehler: uni0446.sose.003 hat einen ungültigen rechten Metric Key: =uni0434@12
Fehler: uni0446.sose.004 hat einen ungültigen rechten Metric Key: =uni0434@12
Fehler: uni0446.sose.006 hat einen ungültigen rechten Metric Key: =uni0434@12
Fehler: uni0446.sose.009 hat einen ungültigen rechten Metric Key: =uni0434@12
Fehler: kappa.sose hat einen ungültigen rechten Metric Key: k.semi
Fehler: alefMaksura-ar.liga.part.low.001 hat einen ungültigen linken Metric Key: _ar_bow
Fehler: _part.uniFEDC.part.reservemitliga hat einen ungültigen linken Metric Key: =0@6
Fehler: qof-hb.004 hat einen ungültigen rechten Metric Key: hibo
Fehler: _part.uniFEDC.part hat einen ungültigen linken Metric Key: =0@6
Fehler: _part.uniFEDC.part.001 hat einen ungültigen linken Metric Key: =0@6
Fehler: _uniFEF0.exit hat einen ungültigen rechten Metric Key: =50
Fehler: _uniFEF0.exit.forDot hat einen ungültigen rechten Metric Key: =50
Fehler: _f_fj_j hat einen ungültigen linken Metric Key: =n@400
( there are no more errors of the type you are looking for, as I have already eliminated all of them. The ones still listed are actually none. )
I see, when also considering calculations this gets complicated. You would need to implement a parser to reliably substitute glyph names and find invalid references.
This is functionality that we are planning to provide, but it’s not ready just yet.