Metric Keys - renaming glyphs, missing key and finding error - again

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?

Sorry to respond this late and now out of context. What was the other topic about? There is probably a way to solve this with a script.

The original post is here: Metric Keys - renaming glyphs, missing key and finding error - #3

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.