Skip to content

Instantly share code, notes, and snippets.

@davelab6
Created October 3, 2025 22:56
Show Gist options
  • Select an option

  • Save davelab6/957b96dab79007a15d5d99d5ecb33e12 to your computer and use it in GitHub Desktop.

Select an option

Save davelab6/957b96dab79007a15d5d99d5ecb33e12 to your computer and use it in GitHub Desktop.

Revisions

  1. davelab6 created this gist Oct 3, 2025.
    140 changes: 140 additions & 0 deletions check_font_names.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,140 @@
    import os
    import argparse
    from fontTools.ttLib import TTFont, TTLibError

    # --- Configuration ---
    # The character limit imposed by Microsoft Office's LogFontA struct.
    CHAR_LIMIT = 32
    # The root directory to start searching from. Assumes a structure like ./license/familyname/
    ROOT_DIRECTORY = '.'

    def get_name_by_id(font, name_id):
    """
    Retrieves a name string from the font's 'name' table by its ID.
    It prioritizes Windows platform, English language names.
    """
    for record in font['name'].names:
    if record.nameID == name_id and record.platformID == 3 and record.langID == 1033:
    return record.toUnicode()
    # Fallback to any other platform/language if the preferred one isn't found
    for record in font['name'].names:
    if record.nameID == name_id:
    return record.toUnicode()
    return None

    def check_font_family(family_path, family_name):
    """
    Analyzes all TTF files within a specific family directory to check for name length violations.
    """
    violations = []
    try:
    font_files = [f for f in os.listdir(family_path) if f.lower().endswith('.ttf')]
    if not font_files:
    return []

    # We only need to check one font file for the family-wide names and fvar table.
    # Assuming all fonts in the family folder are part of the same variable font or static family.
    font_path = os.path.join(family_path, font_files[0])

    with TTFont(font_path) as font:
    # Check if it's a variable font by looking for the 'fvar' table
    if 'fvar' in font:
    # For variable fonts, the name is Typographic Family + fvar instance name
    base_family_name = get_name_by_id(font, 16) or get_name_by_id(font, 1)

    if not base_family_name:
    print(f" [WARNING] Could not find NameID 16 or 1 for variable font in '{family_name}'. Skipping.")
    return []

    for instance in font['fvar'].instances:
    subfamily_name = get_name_by_id(font, instance.subfamilyNameID)
    if not subfamily_name:
    continue

    # MS Office combines the names with a space
    full_name = f"{base_family_name} {subfamily_name}"
    if len(full_name) >= CHAR_LIMIT:
    violations.append((full_name, len(full_name)))

    # It's a static font (or multiple static fonts)
    else:
    for font_file in font_files:
    static_font_path = os.path.join(family_path, font_file)
    with TTFont(static_font_path) as static_font:
    # Prefer Typographic Family (NameID 16 + 17)
    family = get_name_by_id(static_font, 16)
    subfamily = get_name_by_id(static_font, 17)

    # Fallback to Font Family (NameID 1 + 2)
    if not family or not subfamily:
    family = get_name_by_id(static_font, 1)
    subfamily = get_name_by_id(static_font, 2)

    if not family or not subfamily:
    print(f" [WARNING] Could not determine name for static font '{font_file}'. Skipping.")
    continue

    full_name = f"{family} {subfamily}"
    if len(full_name) >= CHAR_LIMIT:
    violations.append((full_name, len(full_name)))

    except TTLibError:
    print(f" [ERROR] Could not process a font file in '{family_name}'. It might be corrupted.")
    except Exception as e:
    print(f" [ERROR] An unexpected error occurred while processing '{family_name}': {e}")

    return list(set(violations)) # Return unique violations

    def main():
    """
    Main function to scan directories and report font name length issues.
    """
    parser = argparse.ArgumentParser(
    description="Check font family names against Microsoft Office's 32-character limit."
    )
    parser.add_argument(
    "license_dir",
    nargs='?', # Makes the argument optional
    default=os.path.join(ROOT_DIRECTORY, 'license'),
    help="Path to the directory containing font family subdirectories. Defaults to './license'."
    )
    args = parser.parse_args()
    license_dir = args.license_dir

    print("--- Font Name Length Checker for Microsoft Office ---")
    print(f"Scanning for font families that exceed the {CHAR_LIMIT}-character limit...")

    violating_families = {}

    if not os.path.isdir(license_dir):
    print(f"\n[ERROR] The specified directory was not found: '{os.path.abspath(license_dir)}'")
    print("Please provide a valid path to the directory containing font families.")
    return

    family_names = [d for d in os.listdir(license_dir) if os.path.isdir(os.path.join(license_dir, d))]

    if not family_names:
    print(f"\nNo font family subdirectories found in '{license_dir}'.")
    return

    print(f"Found {len(family_names)} families to check in '{os.path.abspath(license_dir)}'.\n")

    for family_name in family_names:
    family_path = os.path.join(license_dir, family_name)
    violations = check_font_family(family_path, family_name)
    if violations:
    violating_families[family_name] = violations

    print("--- Scan Complete ---")
    if not violating_families:
    print("Success! No families were found with names exceeding the limit.")
    else:
    print(f"\nFound {len(violating_families)} families with name length issues:\n")
    for family, violations in violating_families.items():
    print(f"Family: {family}")
    for name, length in sorted(violations):
    print(f" - \"{name}\" ({length} chars)")
    print("")

    if __name__ == "__main__":
    main()
    1,161 changes: 1,161 additions & 0 deletions output.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,1161 @@
    $ python check_font_names.py ufl
    --- Font Name Length Checker for Microsoft Office ---
    Scanning for font families that exceed the 32-character limit...
    Found 5 families to check in '/Users/dcrossland/fonts/ufl'.

    --- Scan Complete ---

    Found 1 families with name length issues:

    Family: ubuntusans
    - "Ubuntu Sans Condensed Bold Italic" (33 chars)
    - "Ubuntu Sans Condensed ExtraBold Italic" (38 chars)
    - "Ubuntu Sans Condensed ExtraLight Italic" (39 chars)
    - "Ubuntu Sans Condensed Light Italic" (34 chars)
    - "Ubuntu Sans Condensed Medium Italic" (35 chars)
    - "Ubuntu Sans Condensed SemiBold Italic" (37 chars)
    - "Ubuntu Sans Condensed Thin Italic" (33 chars)




    $ python check_font_names.py ofl
    --- Font Name Length Checker for Microsoft Office ---
    Scanning for font families that exceed the 32-character limit...
    Found 1944 families to check in '/Users/dcrossland/fonts/ofl'.

    --- Scan Complete ---

    Found 143 families with name length issues:

    Family: bitcountpropdoubleink
    - "Bitcount Prop Double Ink Black Italic" (37 chars)
    - "Bitcount Prop Double Ink Bold Italic" (36 chars)
    - "Bitcount Prop Double Ink ExtraBold" (34 chars)
    - "Bitcount Prop Double Ink ExtraBold Italic" (41 chars)
    - "Bitcount Prop Double Ink ExtraLight" (35 chars)
    - "Bitcount Prop Double Ink ExtraLight Italic" (42 chars)
    - "Bitcount Prop Double Ink Light Italic" (37 chars)
    - "Bitcount Prop Double Ink Medium Italic" (38 chars)
    - "Bitcount Prop Double Ink Regular" (32 chars)
    - "Bitcount Prop Double Ink SemiBold" (33 chars)
    - "Bitcount Prop Double Ink SemiBold Italic" (40 chars)
    - "Bitcount Prop Double Ink Thin Italic" (36 chars)

    Family: googlesanscode
    - "Google Sans Code ExtraBold Italic" (33 chars)
    - "Google Sans Code SemiBold Italic" (32 chars)

    Family: playwritehrlijevaguides
    - "Playwrite HR Lijeva Guides Regular" (34 chars)

    Family: playwritefrtradguides
    - "Playwrite FR Trad Guides Regular" (32 chars)

    Family: barlowsemicondensed
    - "Barlow Semi Condensed Black Italic" (34 chars)
    - "Barlow Semi Condensed Bold Italic" (33 chars)
    - "Barlow Semi Condensed ExtraBold Italic" (38 chars)
    - "Barlow Semi Condensed ExtraLight" (32 chars)
    - "Barlow Semi Condensed ExtraLight Italic" (39 chars)
    - "Barlow Semi Condensed Light Italic" (34 chars)
    - "Barlow Semi Condensed Medium Italic" (35 chars)
    - "Barlow Semi Condensed SemiBold Italic" (37 chars)
    - "Barlow Semi Condensed Thin Italic" (33 chars)

    Family: bigshoulderstextsc
    - "Big Shoulders Text SC ExtraLight" (32 chars)

    Family: notosansthaiui
    - "Noto Sans Thai UI Condensed Black" (33 chars)
    - "Noto Sans Thai UI Condensed Bold" (32 chars)
    - "Noto Sans Thai UI Condensed ExtraBold" (37 chars)
    - "Noto Sans Thai UI Condensed ExtraLight" (38 chars)
    - "Noto Sans Thai UI Condensed Light" (33 chars)
    - "Noto Sans Thai UI Condensed Medium" (34 chars)
    - "Noto Sans Thai UI Condensed SemiBold " (37 chars)
    - "Noto Sans Thai UI Condensed Thin" (32 chars)
    - "Noto Sans Thai UI ExtraCondensed" (32 chars)
    - "Noto Sans Thai UI ExtraCondensed Black" (38 chars)
    - "Noto Sans Thai UI ExtraCondensed Bold" (37 chars)
    - "Noto Sans Thai UI ExtraCondensed ExtraBold" (42 chars)
    - "Noto Sans Thai UI ExtraCondensed ExtraLight" (43 chars)
    - "Noto Sans Thai UI ExtraCondensed Light" (38 chars)
    - "Noto Sans Thai UI ExtraCondensed Medium" (39 chars)
    - "Noto Sans Thai UI ExtraCondensed SemiBold" (41 chars)
    - "Noto Sans Thai UI ExtraCondensed Thin" (37 chars)
    - "Noto Sans Thai UI SemiCondensed Black" (37 chars)
    - "Noto Sans Thai UI SemiCondensed Bold" (36 chars)
    - "Noto Sans Thai UI SemiCondensed ExtraBold" (41 chars)
    - "Noto Sans Thai UI SemiCondensed ExtraLight" (42 chars)
    - "Noto Sans Thai UI SemiCondensed Light" (37 chars)
    - "Noto Sans Thai UI SemiCondensed Medium" (38 chars)
    - "Noto Sans Thai UI SemiCondensed SemiBold" (40 chars)
    - "Noto Sans Thai UI SemiCondensed Thin" (36 chars)

    Family: sairasemicondensed
    - "Saira SemiCondensed SemiCond Bold" (33 chars)

    Family: notosanstamilsupplement
    - "Noto Sans Tamil Supplement Regular" (34 chars)

    Family: playfairdisplay
    - "Playfair Display ExtraBold Italic" (33 chars)
    - "Playfair Display SemiBold Italic" (32 chars)

    Family: bigshouldersinlinedisplaysc
    - "Big Shoulders Inline Display SC Black" (37 chars)
    - "Big Shoulders Inline Display SC Bold" (36 chars)
    - "Big Shoulders Inline Display SC ExtraBold" (41 chars)
    - "Big Shoulders Inline Display SC ExtraLight" (42 chars)
    - "Big Shoulders Inline Display SC Light" (37 chars)
    - "Big Shoulders Inline Display SC Medium" (38 chars)
    - "Big Shoulders Inline Display SC Regular" (39 chars)
    - "Big Shoulders Inline Display SC SemiBold" (40 chars)
    - "Big Shoulders Inline Display SC Thin" (36 chars)

    Family: notosansdisplay
    - "Noto Sans Display Condensed Black Italic" (40 chars)
    - "Noto Sans Display Condensed Bold Italic" (39 chars)
    - "Noto Sans Display Condensed ExtraBold Italic" (44 chars)
    - "Noto Sans Display Condensed ExtraLight Italic" (45 chars)
    - "Noto Sans Display Condensed Italic" (34 chars)
    - "Noto Sans Display Condensed Light Italic" (40 chars)
    - "Noto Sans Display Condensed Medium Italic" (41 chars)
    - "Noto Sans Display Condensed SemiBold Italic" (43 chars)
    - "Noto Sans Display Condensed Thin Italic" (39 chars)
    - "Noto Sans Display ExtraBold Italic" (34 chars)
    - "Noto Sans Display ExtraCondensed Black Italic" (45 chars)
    - "Noto Sans Display ExtraCondensed Bold Italic" (44 chars)
    - "Noto Sans Display ExtraCondensed ExtraBold Italic" (49 chars)
    - "Noto Sans Display ExtraCondensed ExtraLight Italic" (50 chars)
    - "Noto Sans Display ExtraCondensed Italic" (39 chars)
    - "Noto Sans Display ExtraCondensed Light Italic" (45 chars)
    - "Noto Sans Display ExtraCondensed Medium Italic" (46 chars)
    - "Noto Sans Display ExtraCondensed SemiBold Italic" (48 chars)
    - "Noto Sans Display ExtraCondensed Thin Italic" (44 chars)
    - "Noto Sans Display ExtraLight Italic" (35 chars)
    - "Noto Sans Display SemiBold Italic" (33 chars)
    - "Noto Sans Display SemiCondensed Black Italic" (44 chars)
    - "Noto Sans Display SemiCondensed Bold Italic" (43 chars)
    - "Noto Sans Display SemiCondensed ExtraBold Italic" (48 chars)
    - "Noto Sans Display SemiCondensed ExtraLight Italic" (49 chars)
    - "Noto Sans Display SemiCondensed Italic" (38 chars)
    - "Noto Sans Display SemiCondensed Light Italic" (44 chars)
    - "Noto Sans Display SemiCondensed Medium Italic" (45 chars)
    - "Noto Sans Display SemiCondensed SemiBold Italic" (47 chars)
    - "Noto Sans Display SemiCondensed Thin Italic" (43 chars)

    Family: barlowcondensed
    - "Barlow Condensed ExtraBold Italic" (33 chars)
    - "Barlow Condensed ExtraLight Italic" (34 chars)
    - "Barlow Condensed SemiBold Italic" (32 chars)

    Family: splinesansmono
    - "Spline Sans Mono SemiBold Italic" (32 chars)

    Family: jacquardabastarda9charted
    - "Jacquarda Bastarda 9 Charted Regular" (36 chars)

    Family: sofiasanssemicondensed
    - "Sofia Sans Semi Condensed ExtraBold" (35 chars)
    - "Sofia Sans Semi Condensed ExtraLight" (36 chars)
    - "Sofia Sans Semi Condensed Medium" (32 chars)
    - "Sofia Sans Semi Condensed Regular" (33 chars)
    - "Sofia Sans Semi Condensed SemiBold" (34 chars)

    Family: notoserifdisplay
    - "Noto Serif Display Condensed Black" (34 chars)
    - "Noto Serif Display Condensed Bold" (33 chars)
    - "Noto Serif Display Condensed ExtraBold" (38 chars)
    - "Noto Serif Display Condensed ExtraLight" (39 chars)
    - "Noto Serif Display Condensed Light" (34 chars)
    - "Noto Serif Display Condensed Medium" (35 chars)
    - "Noto Serif Display Condensed SemiBold" (37 chars)
    - "Noto Serif Display Condensed Thin" (33 chars)
    - "Noto Serif Display ExtraCondensed" (33 chars)
    - "Noto Serif Display ExtraCondensed Black" (39 chars)
    - "Noto Serif Display ExtraCondensed Bold" (38 chars)
    - "Noto Serif Display ExtraCondensed ExtraBold" (43 chars)
    - "Noto Serif Display ExtraCondensed ExtraLight" (44 chars)
    - "Noto Serif Display ExtraCondensed Light" (39 chars)
    - "Noto Serif Display ExtraCondensed Medium" (40 chars)
    - "Noto Serif Display ExtraCondensed SemiBold" (42 chars)
    - "Noto Serif Display ExtraCondensed Thin" (38 chars)
    - "Noto Serif Display SemiCondensed" (32 chars)
    - "Noto Serif Display SemiCondensed Black" (38 chars)
    - "Noto Serif Display SemiCondensed Bold" (37 chars)
    - "Noto Serif Display SemiCondensed ExtraBold" (42 chars)
    - "Noto Serif Display SemiCondensed ExtraLight" (43 chars)
    - "Noto Serif Display SemiCondensed Light" (38 chars)
    - "Noto Serif Display SemiCondensed Medium" (39 chars)
    - "Noto Serif Display SemiCondensed SemiBold" (41 chars)
    - "Noto Serif Display SemiCondensed Thin" (37 chars)

    Family: bigshouldersstencildisplay
    - "Big Shoulders Stencil Display Black" (35 chars)
    - "Big Shoulders Stencil Display Bold" (34 chars)
    - "Big Shoulders Stencil Display ExtraBold" (39 chars)
    - "Big Shoulders Stencil Display ExtraLight" (40 chars)
    - "Big Shoulders Stencil Display Light" (35 chars)
    - "Big Shoulders Stencil Display Medium" (36 chars)
    - "Big Shoulders Stencil Display Regular" (37 chars)
    - "Big Shoulders Stencil Display SemiBold" (38 chars)
    - "Big Shoulders Stencil Display Thin" (34 chars)

    Family: notosanscanadianaboriginal
    - "Noto Sans Canadian Aboriginal Black" (35 chars)
    - "Noto Sans Canadian Aboriginal Bold" (34 chars)
    - "Noto Sans Canadian Aboriginal ExtraBold" (39 chars)
    - "Noto Sans Canadian Aboriginal ExtraLight" (40 chars)
    - "Noto Sans Canadian Aboriginal Light" (35 chars)
    - "Noto Sans Canadian Aboriginal Medium" (36 chars)
    - "Noto Sans Canadian Aboriginal Regular" (37 chars)
    - "Noto Sans Canadian Aboriginal SemiBold" (38 chars)
    - "Noto Sans Canadian Aboriginal Thin" (34 chars)

    Family: notosansthailooped
    - "Noto Sans Thai Looped ExtraLight" (32 chars)

    Family: zalandosanssemiexpanded
    - "Zalando Sans SemiExpanded ExtraBold" (35 chars)
    - "Zalando Sans SemiExpanded ExtraLight" (36 chars)
    - "Zalando Sans SemiExpanded Medium" (32 chars)
    - "Zalando Sans SemiExpanded Regular" (33 chars)
    - "Zalando Sans SemiExpanded SemiBold" (34 chars)

    Family: encodesans
    - "Encode Sans Condensed ExtraLight" (32 chars)
    - "Encode Sans SemiCondensed ExtraBold" (35 chars)
    - "Encode Sans SemiCondensed ExtraLight" (36 chars)
    - "Encode Sans SemiCondensed Medium" (32 chars)
    - "Encode Sans SemiCondensed Regular" (33 chars)
    - "Encode Sans SemiCondensed SemiBold" (34 chars)
    - "Encode Sans SemiExpanded ExtraBold" (34 chars)
    - "Encode Sans SemiExpanded ExtraLight" (35 chars)
    - "Encode Sans SemiExpanded Regular" (32 chars)
    - "Encode Sans SemiExpanded SemiBold" (33 chars)

    Family: alumnisanscollegiateone
    - "Alumni Sans Collegiate One Italic" (33 chars)
    - "Alumni Sans Collegiate One Regular" (34 chars)

    Family: notoserifnyiakengpuachuehmong
    - "Noto Serif Nyiakeng Puachue Hmong Bold" (38 chars)
    - "Noto Serif Nyiakeng Puachue Hmong Medium" (40 chars)
    - "Noto Serif Nyiakeng Puachue Hmong Regular" (41 chars)
    - "Noto Serif Nyiakeng Puachue Hmong SemiBold" (42 chars)

    Family: playwritefrmoderneguides
    - "Playwrite FR Moderne Guides Regular" (35 chars)

    Family: encodesanssc
    - "Encode Sans SC Condensed ExtraBold" (34 chars)
    - "Encode Sans SC Condensed ExtraLight" (35 chars)
    - "Encode Sans SC Condensed Regular" (32 chars)
    - "Encode Sans SC Condensed SemiBold" (33 chars)
    - "Encode Sans SC Expanded ExtraBold" (33 chars)
    - "Encode Sans SC Expanded ExtraLight" (34 chars)
    - "Encode Sans SC Expanded SemiBold" (32 chars)
    - "Encode Sans SC SemiCondensed Black" (34 chars)
    - "Encode Sans SC SemiCondensed Bold" (33 chars)
    - "Encode Sans SC SemiCondensed ExtraBold" (38 chars)
    - "Encode Sans SC SemiCondensed ExtraLight" (39 chars)
    - "Encode Sans SC SemiCondensed Light" (34 chars)
    - "Encode Sans SC SemiCondensed Medium" (35 chars)
    - "Encode Sans SC SemiCondensed Regular" (36 chars)
    - "Encode Sans SC SemiCondensed SemiBold" (37 chars)
    - "Encode Sans SC SemiCondensed Thin" (33 chars)
    - "Encode Sans SC SemiExpanded Black" (33 chars)
    - "Encode Sans SC SemiExpanded Bold" (32 chars)
    - "Encode Sans SC SemiExpanded ExtraBold" (37 chars)
    - "Encode Sans SC SemiExpanded ExtraLight" (38 chars)
    - "Encode Sans SC SemiExpanded Light" (33 chars)
    - "Encode Sans SC SemiExpanded Medium" (34 chars)
    - "Encode Sans SC SemiExpanded Regular" (35 chars)
    - "Encode Sans SC SemiExpanded SemiBold" (36 chars)
    - "Encode Sans SC SemiExpanded Thin" (32 chars)

    Family: annieuseyourtelescope
    - "Annie Use Your Telescope Regular" (32 chars)

    Family: bigshouldersinlinetextsc
    - "Big Shoulders Inline Text SC Black" (34 chars)
    - "Big Shoulders Inline Text SC Bold" (33 chars)
    - "Big Shoulders Inline Text SC ExtraBold" (38 chars)
    - "Big Shoulders Inline Text SC ExtraLight" (39 chars)
    - "Big Shoulders Inline Text SC Light" (34 chars)
    - "Big Shoulders Inline Text SC Medium" (35 chars)
    - "Big Shoulders Inline Text SC Regular" (36 chars)
    - "Big Shoulders Inline Text SC SemiBold" (37 chars)
    - "Big Shoulders Inline Text SC Thin" (33 chars)

    Family: playwritegbs
    - "Playwrite GB S ExtraLight Italic" (32 chars)

    Family: sairaextracondensed
    - "Saira ExtraCondensed ExCond Bold" (32 chars)

    Family: sourcecodepro
    - "Source Code Pro ExtraBold Italic" (32 chars)
    - "Source Code Pro ExtraLight Italic" (33 chars)

    Family: yaldevicolombo
    - "Yaldevi Colombo ExtraLight Regular" (34 chars)
    - "Yaldevi Colombo SemiBold Regular" (32 chars)

    Family: notosansanatolianhieroglyphs
    - "Noto Sans Anatolian Hieroglyphs Regular" (39 chars)

    Family: alumnisanscollegiateonesc
    - "Alumni Sans Collegiate One SC Italic" (36 chars)
    - "Alumni Sans Collegiate One SC Regular" (37 chars)

    Family: notosansadlamunjoined
    - "Noto Sans Adlam Unjoined Regular" (32 chars)
    - "Noto Sans Adlam Unjoined SemiBold" (33 chars)

    Family: bitcountgriddouble
    - "Bitcount Grid Double Black Italic" (33 chars)
    - "Bitcount Grid Double Bold Italic" (32 chars)
    - "Bitcount Grid Double ExtraBold Italic" (37 chars)
    - "Bitcount Grid Double ExtraLight Italic" (38 chars)
    - "Bitcount Grid Double Light Italic" (33 chars)
    - "Bitcount Grid Double Medium Italic" (34 chars)
    - "Bitcount Grid Double SemiBold Italic" (36 chars)
    - "Bitcount Grid Double Thin Italic" (32 chars)

    Family: bitcountgridsingleink
    - "Bitcount Grid Single Ink Black Italic" (37 chars)
    - "Bitcount Grid Single Ink Bold Italic" (36 chars)
    - "Bitcount Grid Single Ink ExtraBold" (34 chars)
    - "Bitcount Grid Single Ink ExtraBold Italic" (41 chars)
    - "Bitcount Grid Single Ink ExtraLight" (35 chars)
    - "Bitcount Grid Single Ink ExtraLight Italic" (42 chars)
    - "Bitcount Grid Single Ink Light Italic" (37 chars)
    - "Bitcount Grid Single Ink Medium Italic" (38 chars)
    - "Bitcount Grid Single Ink Regular" (32 chars)
    - "Bitcount Grid Single Ink SemiBold" (33 chars)
    - "Bitcount Grid Single Ink SemiBold Italic" (40 chars)
    - "Bitcount Grid Single Ink Thin Italic" (36 chars)

    Family: notoserifhentaigana
    - "Noto Serif Hentaigana ExtraLight" (32 chars)

    Family: librebarcodeean13text
    - "Libre Barcode EAN13 Text Regular" (32 chars)

    Family: ibmplexsansthailooped
    - "IBM Plex Sans Thai Looped ExtraLight" (36 chars)
    - "IBM Plex Sans Thai Looped Medium" (32 chars)
    - "IBM Plex Sans Thai Looped Regular" (33 chars)
    - "IBM Plex Sans Thai Looped SemiBold" (34 chars)

    Family: ibmplexsanscondensed
    - "IBM Plex Sans Condensed Bold Italic" (35 chars)
    - "IBM Plex Sans Condensed ExtraLight" (34 chars)
    - "IBM Plex Sans Condensed ExtraLight Italic" (41 chars)
    - "IBM Plex Sans Condensed Light Italic" (36 chars)
    - "IBM Plex Sans Condensed Medium Italic" (37 chars)
    - "IBM Plex Sans Condensed SemiBold" (32 chars)
    - "IBM Plex Sans Condensed SemiBold Italic" (39 chars)
    - "IBM Plex Sans Condensed Thin Italic" (35 chars)

    Family: bitcountpropdouble
    - "Bitcount Prop Double Black Italic" (33 chars)
    - "Bitcount Prop Double Bold Italic" (32 chars)
    - "Bitcount Prop Double ExtraBold Italic" (37 chars)
    - "Bitcount Prop Double ExtraLight Italic" (38 chars)
    - "Bitcount Prop Double Light Italic" (33 chars)
    - "Bitcount Prop Double Medium Italic" (34 chars)
    - "Bitcount Prop Double SemiBold Italic" (36 chars)
    - "Bitcount Prop Double Thin Italic" (32 chars)

    Family: specialgothicexpandedone
    - "Special Gothic Expanded One Regular" (35 chars)

    Family: familjengrotesk
    - "Familjen Grotesk SemiBold Italic" (32 chars)

    Family: librebarcode39extendedtext
    - "Libre Barcode 39 Extended Text Regular" (38 chars)

    Family: playwriteustradguides
    - "Playwrite US Trad Guides Regular" (32 chars)

    Family: libertinusserifdisplay
    - "Libertinus Serif Display Regular" (32 chars)

    Family: notosanshanifirohingya
    - "Noto Sans Hanifi Rohingya Medium" (32 chars)
    - "Noto Sans Hanifi Rohingya Regular" (33 chars)
    - "Noto Sans Hanifi Rohingya SemiBold" (34 chars)

    Family: bigshouldersstencil
    - "Big Shoulders Stencil ExtraLight" (32 chars)

    Family: recursive
    - "Recursive Mono Casual Black Italic" (34 chars)
    - "Recursive Mono Casual Bold Italic" (33 chars)
    - "Recursive Mono Casual ExtraBlack" (32 chars)
    - "Recursive Mono Casual ExtraBlack Italic" (39 chars)
    - "Recursive Mono Casual ExtraBold Italic" (38 chars)
    - "Recursive Mono Casual Light Italic" (34 chars)
    - "Recursive Mono Casual Medium Italic" (35 chars)
    - "Recursive Mono Casual SemiBold Italic" (37 chars)
    - "Recursive Mono Linear Black Italic" (34 chars)
    - "Recursive Mono Linear Bold Italic" (33 chars)
    - "Recursive Mono Linear ExtraBlack" (32 chars)
    - "Recursive Mono Linear ExtraBlack Italic" (39 chars)
    - "Recursive Mono Linear ExtraBold Italic" (38 chars)
    - "Recursive Mono Linear Light Italic" (34 chars)
    - "Recursive Mono Linear Medium Italic" (35 chars)
    - "Recursive Mono Linear SemiBold Italic" (37 chars)
    - "Recursive Sans Casual Black Italic" (34 chars)
    - "Recursive Sans Casual Bold Italic" (33 chars)
    - "Recursive Sans Casual ExtraBlack" (32 chars)
    - "Recursive Sans Casual ExtraBlack Italic" (39 chars)
    - "Recursive Sans Casual ExtraBold Italic" (38 chars)
    - "Recursive Sans Casual Light Italic" (34 chars)
    - "Recursive Sans Casual Medium Italic" (35 chars)
    - "Recursive Sans Casual SemiBold Italic" (37 chars)
    - "Recursive Sans Linear Black Italic" (34 chars)
    - "Recursive Sans Linear Bold Italic" (33 chars)
    - "Recursive Sans Linear ExtraBlack" (32 chars)
    - "Recursive Sans Linear ExtraBlack Italic" (39 chars)
    - "Recursive Sans Linear ExtraBold Italic" (38 chars)
    - "Recursive Sans Linear Light Italic" (34 chars)
    - "Recursive Sans Linear Medium Italic" (35 chars)
    - "Recursive Sans Linear SemiBold Italic" (37 chars)

    Family: hankengrotesk
    - "Hanken Grotesk ExtraLight Italic" (32 chars)

    Family: montserratunderline
    - "Montserrat Underline Black Italic" (33 chars)
    - "Montserrat Underline Bold Italic" (32 chars)
    - "Montserrat Underline ExtraBold Italic" (37 chars)
    - "Montserrat Underline ExtraLight Italic" (38 chars)
    - "Montserrat Underline Light Italic" (33 chars)
    - "Montserrat Underline Medium Italic" (34 chars)
    - "Montserrat Underline SemiBold Italic" (36 chars)
    - "Montserrat Underline Thin Italic" (32 chars)

    Family: notosanskhmerui
    - "Noto Sans Khmer UI Condensed Black" (34 chars)
    - "Noto Sans Khmer UI Condensed Bold" (33 chars)
    - "Noto Sans Khmer UI Condensed ExtraBold" (38 chars)
    - "Noto Sans Khmer UI Condensed ExtraLight" (39 chars)
    - "Noto Sans Khmer UI Condensed Light" (34 chars)
    - "Noto Sans Khmer UI Condensed Medium" (35 chars)
    - "Noto Sans Khmer UI Condensed SemiBold" (37 chars)
    - "Noto Sans Khmer UI Condensed Thin" (33 chars)
    - "Noto Sans Khmer UI ExtraCondensed" (33 chars)
    - "Noto Sans Khmer UI ExtraCondensed Black" (39 chars)
    - "Noto Sans Khmer UI ExtraCondensed Bold" (38 chars)
    - "Noto Sans Khmer UI ExtraCondensed ExtraBold" (43 chars)
    - "Noto Sans Khmer UI ExtraCondensed ExtraLight" (44 chars)
    - "Noto Sans Khmer UI ExtraCondensed Light" (39 chars)
    - "Noto Sans Khmer UI ExtraCondensed Medium" (40 chars)
    - "Noto Sans Khmer UI ExtraCondensed SemiBold" (42 chars)
    - "Noto Sans Khmer UI ExtraCondensed Thin" (38 chars)
    - "Noto Sans Khmer UI SemiCondensed" (32 chars)
    - "Noto Sans Khmer UI SemiCondensed Black" (38 chars)
    - "Noto Sans Khmer UI SemiCondensed Bold" (37 chars)
    - "Noto Sans Khmer UI SemiCondensed ExtraBold" (42 chars)
    - "Noto Sans Khmer UI SemiCondensed ExtraLight" (43 chars)
    - "Noto Sans Khmer UI SemiCondensed Light" (38 chars)
    - "Noto Sans Khmer UI SemiCondensed Medium" (39 chars)
    - "Noto Sans Khmer UI SemiCondensed SemiBold" (41 chars)
    - "Noto Sans Khmer UI SemiCondensed Thin" (37 chars)

    Family: notosanslaoui
    - "Noto Sans Lao UI Condensed Black" (32 chars)
    - "Noto Sans Lao UI Condensed ExtraBold" (36 chars)
    - "Noto Sans Lao UI Condensed ExtraLight" (37 chars)
    - "Noto Sans Lao UI Condensed Light" (32 chars)
    - "Noto Sans Lao UI Condensed Medium" (33 chars)
    - "Noto Sans Lao UI Condensed SemiBold" (35 chars)
    - "Noto Sans Lao UI ExtraCondensed Black" (37 chars)
    - "Noto Sans Lao UI ExtraCondensed Bold" (36 chars)
    - "Noto Sans Lao UI ExtraCondensed ExtraBold" (41 chars)
    - "Noto Sans Lao UI ExtraCondensed ExtraLight" (42 chars)
    - "Noto Sans Lao UI ExtraCondensed Light" (37 chars)
    - "Noto Sans Lao UI ExtraCondensed Medium" (38 chars)
    - "Noto Sans Lao UI ExtraCondensed SemiBold" (40 chars)
    - "Noto Sans Lao UI ExtraCondensed Thin" (36 chars)
    - "Noto Sans Lao UI SemiCondensed Black" (36 chars)
    - "Noto Sans Lao UI SemiCondensed Bold" (35 chars)
    - "Noto Sans Lao UI SemiCondensed ExtraBold" (40 chars)
    - "Noto Sans Lao UI SemiCondensed ExtraLight" (41 chars)
    - "Noto Sans Lao UI SemiCondensed Light" (36 chars)
    - "Noto Sans Lao UI SemiCondensed Medium" (37 chars)
    - "Noto Sans Lao UI SemiCondensed SemiBold" (39 chars)
    - "Noto Sans Lao UI SemiCondensed Thin" (35 chars)

    Family: sofiasansextracondensed
    - "Sofia Sans Extra Condensed Black" (32 chars)
    - "Sofia Sans Extra Condensed ExtraBold" (36 chars)
    - "Sofia Sans Extra Condensed ExtraLight" (37 chars)
    - "Sofia Sans Extra Condensed Light" (32 chars)
    - "Sofia Sans Extra Condensed Medium" (33 chars)
    - "Sofia Sans Extra Condensed Regular" (34 chars)
    - "Sofia Sans Extra Condensed SemiBold" (35 chars)

    Family: alumnisanssc
    - "Alumni Sans SC ExtraLight Italic" (32 chars)

    Family: notosansbengaliui
    - "Noto Sans Bengali UI ExtraCondensed" (35 chars)
    - "Noto Sans Bengali UI SemiCondensed" (34 chars)

    Family: atkinsonhyperlegiblemono
    - "Atkinson Hyperlegible Mono ExtraBold" (36 chars)
    - "Atkinson Hyperlegible Mono ExtraLight" (37 chars)
    - "Atkinson Hyperlegible Mono Light" (32 chars)
    - "Atkinson Hyperlegible Mono Medium" (33 chars)
    - "Atkinson Hyperlegible Mono Regular" (34 chars)
    - "Atkinson Hyperlegible Mono SemiBold" (35 chars)

    Family: encodesanssemicondensed
    - "Encode Sans Semi Condensed Black" (32 chars)
    - "Encode Sans Semi Condensed ExtraBold" (36 chars)
    - "Encode Sans Semi Condensed ExtraLight" (37 chars)
    - "Encode Sans Semi Condensed Light" (32 chars)
    - "Encode Sans Semi Condensed Medium" (33 chars)
    - "Encode Sans Semi Condensed Regular" (34 chars)
    - "Encode Sans Semi Condensed SemiBold" (35 chars)

    Family: robotocondensed
    - "Roboto Condensed ExtraBold Italic" (33 chars)
    - "Roboto Condensed ExtraLight Italic" (34 chars)
    - "Roboto Condensed SemiBold Italic" (32 chars)

    Family: notosansinscriptionalparthian
    - "Noto Sans Inscriptional Parthian Regular" (40 chars)

    Family: notosansoldnortharabian
    - "Noto Sans Old North Arabian Regular" (35 chars)

    Family: bigshouldersdisplaysc
    - "Big Shoulders Display SC ExtraBold" (34 chars)
    - "Big Shoulders Display SC ExtraLight" (35 chars)
    - "Big Shoulders Display SC Regular" (32 chars)
    - "Big Shoulders Display SC SemiBold" (33 chars)

    Family: notosansimperialaramaic
    - "Noto Sans Imperial Aramaic Regular" (34 chars)

    Family: playwriteittradguides
    - "Playwrite IT Trad Guides Regular" (32 chars)

    Family: firasansextracondensed
    - "Fira Sans Extra Condensed Black Italic" (38 chars)
    - "Fira Sans Extra Condensed Bold Italic" (37 chars)
    - "Fira Sans Extra Condensed ExtraBold" (35 chars)
    - "Fira Sans Extra Condensed ExtraBold Italic" (42 chars)
    - "Fira Sans Extra Condensed ExtraLight" (36 chars)
    - "Fira Sans Extra Condensed ExtraLight Italic" (43 chars)
    - "Fira Sans Extra Condensed Italic" (32 chars)
    - "Fira Sans Extra Condensed Light Italic" (38 chars)
    - "Fira Sans Extra Condensed Medium" (32 chars)
    - "Fira Sans Extra Condensed Medium Italic" (39 chars)
    - "Fira Sans Extra Condensed Regular" (33 chars)
    - "Fira Sans Extra Condensed SemiBold" (34 chars)
    - "Fira Sans Extra Condensed SemiBold Italic" (41 chars)
    - "Fira Sans Extra Condensed Thin Italic" (37 chars)

    Family: playwritedegrundguides
    - "Playwrite DE Grund Guides Regular" (33 chars)

    Family: notosanszanabazarsquare
    - "Noto Sans Zanabazar Square Regular" (34 chars)

    Family: notoznamennymusicalnotation
    - "Noto Znamenny Musical Notation Regular" (38 chars)

    Family: firasanscondensed
    - "Fira Sans Condensed Black Italic" (32 chars)
    - "Fira Sans Condensed ExtraBold Italic" (36 chars)
    - "Fira Sans Condensed ExtraLight Italic" (37 chars)
    - "Fira Sans Condensed Light Italic" (32 chars)
    - "Fira Sans Condensed Medium Italic" (33 chars)
    - "Fira Sans Condensed SemiBold Italic" (35 chars)

    Family: librebarcode39extended
    - "Libre Barcode 39 Extended Regular" (33 chars)

    Family: asapcondensed
    - "Asap Condensed Condensed Regular Italic" (39 chars)
    - "Asap Condensed ExtraLight Italic" (32 chars)

    Family: inconsolata
    - "Inconsolata Condensed ExtraLight" (32 chars)
    - "Inconsolata ExtraCondensed Black" (32 chars)
    - "Inconsolata ExtraCondensed ExtraBold" (36 chars)
    - "Inconsolata ExtraCondensed ExtraLight" (37 chars)
    - "Inconsolata ExtraCondensed Light" (32 chars)
    - "Inconsolata ExtraCondensed Medium" (33 chars)
    - "Inconsolata ExtraCondensed Regular" (34 chars)
    - "Inconsolata ExtraCondensed SemiBold" (35 chars)
    - "Inconsolata ExtraExpanded ExtraBold" (35 chars)
    - "Inconsolata ExtraExpanded ExtraLight" (36 chars)
    - "Inconsolata ExtraExpanded Medium" (32 chars)
    - "Inconsolata ExtraExpanded Regular" (33 chars)
    - "Inconsolata ExtraExpanded SemiBold" (34 chars)
    - "Inconsolata SemiCondensed ExtraBold" (35 chars)
    - "Inconsolata SemiCondensed ExtraLight" (36 chars)
    - "Inconsolata SemiCondensed Medium" (32 chars)
    - "Inconsolata SemiCondensed Regular" (33 chars)
    - "Inconsolata SemiCondensed SemiBold" (34 chars)
    - "Inconsolata SemiExpanded ExtraBold" (34 chars)
    - "Inconsolata SemiExpanded ExtraLight" (35 chars)
    - "Inconsolata SemiExpanded Regular" (32 chars)
    - "Inconsolata SemiExpanded SemiBold" (33 chars)
    - "Inconsolata UltraCondensed Black" (32 chars)
    - "Inconsolata UltraCondensed ExtraBold" (36 chars)
    - "Inconsolata UltraCondensed ExtraLight" (37 chars)
    - "Inconsolata UltraCondensed Light" (32 chars)
    - "Inconsolata UltraCondensed Medium" (33 chars)
    - "Inconsolata UltraCondensed Regular" (34 chars)
    - "Inconsolata UltraCondensed SemiBold" (35 chars)
    - "Inconsolata UltraExpanded ExtraBold" (35 chars)
    - "Inconsolata UltraExpanded ExtraLight" (36 chars)
    - "Inconsolata UltraExpanded Medium" (32 chars)
    - "Inconsolata UltraExpanded Regular" (33 chars)
    - "Inconsolata UltraExpanded SemiBold" (34 chars)

    Family: playwritedkuloopetguides
    - "Playwrite DK Uloopet Guides Regular" (35 chars)

    Family: playwriteesdecoguides
    - "Playwrite ES Deco Guides Regular" (32 chars)

    Family: encodesanssemiexpanded
    - "Encode Sans Semi Expanded ExtraBold" (35 chars)
    - "Encode Sans Semi Expanded ExtraLight" (36 chars)
    - "Encode Sans Semi Expanded Medium" (32 chars)
    - "Encode Sans Semi Expanded Regular" (33 chars)
    - "Encode Sans Semi Expanded SemiBold" (34 chars)

    Family: ibmplexserif
    - "IBM Plex Serif ExtraLight Italic" (32 chars)

    Family: eduauvicwantguides
    - "Edu AU VIC WA NT Guides SemiBold" (32 chars)

    Family: notosansarabicui
    - "Noto Sans Arabic UI Condensed Black" (35 chars)
    - "Noto Sans Arabic UI Condensed Bold" (34 chars)
    - "Noto Sans Arabic UI Condensed ExtraBold" (39 chars)
    - "Noto Sans Arabic UI Condensed ExtraLight" (40 chars)
    - "Noto Sans Arabic UI Condensed Light" (35 chars)
    - "Noto Sans Arabic UI Condensed Medium" (36 chars)
    - "Noto Sans Arabic UI Condensed SemiBold" (38 chars)
    - "Noto Sans Arabic UI Condensed Thin" (34 chars)
    - "Noto Sans Arabic UI ExtraCondensed" (34 chars)
    - "Noto Sans Arabic UI ExtraCondensed Black" (40 chars)
    - "Noto Sans Arabic UI ExtraCondensed Bold" (39 chars)
    - "Noto Sans Arabic UI ExtraCondensed ExtraBold" (44 chars)
    - "Noto Sans Arabic UI ExtraCondensed ExtraLight" (45 chars)
    - "Noto Sans Arabic UI ExtraCondensed Light" (40 chars)
    - "Noto Sans Arabic UI ExtraCondensed Medium" (41 chars)
    - "Noto Sans Arabic UI ExtraCondensed SemiBold" (43 chars)
    - "Noto Sans Arabic UI ExtraCondensed Thin" (39 chars)
    - "Noto Sans Arabic UI SemiCondensed" (33 chars)
    - "Noto Sans Arabic UI SemiCondensed Black" (39 chars)
    - "Noto Sans Arabic UI SemiCondensed Bold" (38 chars)
    - "Noto Sans Arabic UI SemiCondensed ExtraBold" (43 chars)
    - "Noto Sans Arabic UI SemiCondensed ExtraLight" (44 chars)
    - "Noto Sans Arabic UI SemiCondensed Light" (39 chars)
    - "Noto Sans Arabic UI SemiCondensed Medium" (40 chars)
    - "Noto Sans Arabic UI SemiCondensed SemiBold" (42 chars)
    - "Noto Sans Arabic UI SemiCondensed Thin" (38 chars)

    Family: notosanspsalterpahlavi
    - "Noto Sans Psalter Pahlavi Regular" (33 chars)

    Family: bigshouldersinlinetext
    - "Big Shoulders Inline Text ExtraBold" (35 chars)
    - "Big Shoulders Inline Text ExtraLight" (36 chars)
    - "Big Shoulders Inline Text Medium" (32 chars)
    - "Big Shoulders Inline Text Regular" (33 chars)
    - "Big Shoulders Inline Text SemiBold" (34 chars)

    Family: tirodevanagarisanskrit
    - "Tiro Devanagari Sanskrit Regular" (32 chars)

    Family: bitcountpropsingle
    - "Bitcount Prop Single Black Italic" (33 chars)
    - "Bitcount Prop Single Bold Italic" (32 chars)
    - "Bitcount Prop Single ExtraBold Italic" (37 chars)
    - "Bitcount Prop Single ExtraLight Italic" (38 chars)
    - "Bitcount Prop Single Light Italic" (33 chars)
    - "Bitcount Prop Single Medium Italic" (34 chars)
    - "Bitcount Prop Single SemiBold Italic" (36 chars)
    - "Bitcount Prop Single Thin Italic" (32 chars)

    Family: bitcountpropsingleink
    - "Bitcount Prop Single Ink Black Italic" (37 chars)
    - "Bitcount Prop Single Ink Bold Italic" (36 chars)
    - "Bitcount Prop Single Ink ExtraBold" (34 chars)
    - "Bitcount Prop Single Ink ExtraBold Italic" (41 chars)
    - "Bitcount Prop Single Ink ExtraLight" (35 chars)
    - "Bitcount Prop Single Ink ExtraLight Italic" (42 chars)
    - "Bitcount Prop Single Ink Light Italic" (37 chars)
    - "Bitcount Prop Single Ink Medium Italic" (38 chars)
    - "Bitcount Prop Single Ink Regular" (32 chars)
    - "Bitcount Prop Single Ink SemiBold" (33 chars)
    - "Bitcount Prop Single Ink SemiBold Italic" (40 chars)
    - "Bitcount Prop Single Ink Thin Italic" (36 chars)

    Family: atkinsonhyperlegible
    - "Atkinson Hyperlegible Bold Italic" (33 chars)

    Family: chocolateclassicalsans
    - "Chocolate Classical Sans Regular" (32 chars)

    Family: playwriteitmodernaguides
    - "Playwrite IT Moderna Guides Regular" (35 chars)

    Family: bitcountgriddoubleink
    - "Bitcount Grid Double Ink Black Italic" (37 chars)
    - "Bitcount Grid Double Ink Bold Italic" (36 chars)
    - "Bitcount Grid Double Ink ExtraBold" (34 chars)
    - "Bitcount Grid Double Ink ExtraBold Italic" (41 chars)
    - "Bitcount Grid Double Ink ExtraLight" (35 chars)
    - "Bitcount Grid Double Ink ExtraLight Italic" (42 chars)
    - "Bitcount Grid Double Ink Light Italic" (37 chars)
    - "Bitcount Grid Double Ink Medium Italic" (38 chars)
    - "Bitcount Grid Double Ink Regular" (32 chars)
    - "Bitcount Grid Double Ink SemiBold" (33 chars)
    - "Bitcount Grid Double Ink SemiBold Italic" (40 chars)
    - "Bitcount Grid Double Ink Thin Italic" (36 chars)

    Family: wixmadefortext
    - "Wix Madefor Text ExtraBold Italic" (33 chars)
    - "Wix Madefor Text SemiBold Italic" (32 chars)

    Family: playfairdisplaysc
    - "Playfair Display SC Black Italic" (32 chars)

    Family: zalandosansexpanded
    - "Zalando Sans Expanded Black Italic" (34 chars)
    - "Zalando Sans Expanded Bold Italic" (33 chars)
    - "Zalando Sans Expanded ExtraBold Italic" (38 chars)
    - "Zalando Sans Expanded ExtraLight Italic" (39 chars)
    - "Zalando Sans Expanded Light Italic" (34 chars)
    - "Zalando Sans Expanded Medium Italic" (35 chars)
    - "Zalando Sans Expanded SemiBold Italic" (37 chars)

    Family: bigshouldersinlinedisplay
    - "Big Shoulders Inline Display Black" (34 chars)
    - "Big Shoulders Inline Display Bold" (33 chars)
    - "Big Shoulders Inline Display ExtraBold" (38 chars)
    - "Big Shoulders Inline Display ExtraLight" (39 chars)
    - "Big Shoulders Inline Display Light" (34 chars)
    - "Big Shoulders Inline Display Medium" (35 chars)
    - "Big Shoulders Inline Display Regular" (36 chars)
    - "Big Shoulders Inline Display SemiBold" (37 chars)
    - "Big Shoulders Inline Display Thin" (33 chars)

    Family: notoserifdevanagari
    - "Noto Serif Devanagari ExtraLight" (32 chars)

    Family: thabit
    - "Thabit-Bold-Oblique Bold Oblique" (32 chars)

    Family: specialgothiccondensedone
    - "Special Gothic Condensed One Regular" (36 chars)

    Family: cormorantinfant
    - "Cormorant Infant SemiBold Italic" (32 chars)

    Family: sofiasanscondensed
    - "Sofia Sans Condensed Black Italic" (33 chars)
    - "Sofia Sans Condensed Bold Italic" (32 chars)
    - "Sofia Sans Condensed ExtraBold Italic" (37 chars)
    - "Sofia Sans Condensed ExtraLight Italic" (38 chars)
    - "Sofia Sans Condensed Light Italic" (33 chars)
    - "Sofia Sans Condensed Medium Italic" (34 chars)
    - "Sofia Sans Condensed SemiBold Italic" (36 chars)
    - "Sofia Sans Condensed Thin Italic" (32 chars)

    Family: notocoloremojicompattest
    - "Noto Color Emoji Compat Test Regular" (36 chars)

    Family: notosansmalayalamui
    - "Noto Sans Malayalam UI Condensed" (32 chars)
    - "Noto Sans Malayalam UI Condensed Black" (38 chars)
    - "Noto Sans Malayalam UI Condensed Bold" (37 chars)
    - "Noto Sans Malayalam UI Condensed ExtraBold" (42 chars)
    - "Noto Sans Malayalam UI Condensed ExtraLight" (43 chars)
    - "Noto Sans Malayalam UI Condensed Light" (38 chars)
    - "Noto Sans Malayalam UI Condensed Medium" (39 chars)
    - "Noto Sans Malayalam UI Condensed SemiBold" (41 chars)
    - "Noto Sans Malayalam UI Condensed Thin" (37 chars)
    - "Noto Sans Malayalam UI ExtraBold" (32 chars)
    - "Noto Sans Malayalam UI ExtraCondensed" (37 chars)
    - "Noto Sans Malayalam UI ExtraCondensed Black" (43 chars)
    - "Noto Sans Malayalam UI ExtraCondensed Bold" (42 chars)
    - "Noto Sans Malayalam UI ExtraCondensed ExtraBold" (47 chars)
    - "Noto Sans Malayalam UI ExtraCondensed ExtraLight" (48 chars)
    - "Noto Sans Malayalam UI ExtraCondensed Light" (43 chars)
    - "Noto Sans Malayalam UI ExtraCondensed Medium" (44 chars)
    - "Noto Sans Malayalam UI ExtraCondensed SemiBold" (46 chars)
    - "Noto Sans Malayalam UI ExtraCondensed Thin" (42 chars)
    - "Noto Sans Malayalam UI ExtraLight" (33 chars)
    - "Noto Sans Malayalam UI SemiCondensed" (36 chars)
    - "Noto Sans Malayalam UI SemiCondensed Black" (42 chars)
    - "Noto Sans Malayalam UI SemiCondensed Bold" (41 chars)
    - "Noto Sans Malayalam UI SemiCondensed ExtraBold" (46 chars)
    - "Noto Sans Malayalam UI SemiCondensed ExtraLight" (47 chars)
    - "Noto Sans Malayalam UI SemiCondensed Light" (42 chars)
    - "Noto Sans Malayalam UI SemiCondensed Medium" (43 chars)
    - "Noto Sans Malayalam UI SemiCondensed SemiBold" (45 chars)
    - "Noto Sans Malayalam UI SemiCondensed Thin" (41 chars)

    Family: notosansteluguui
    - "Noto Sans Telugu UI Condensed Black" (35 chars)
    - "Noto Sans Telugu UI Condensed Bold" (34 chars)
    - "Noto Sans Telugu UI Condensed ExtraBold" (39 chars)
    - "Noto Sans Telugu UI Condensed ExtraLight" (40 chars)
    - "Noto Sans Telugu UI Condensed Light" (35 chars)
    - "Noto Sans Telugu UI Condensed Medium" (36 chars)
    - "Noto Sans Telugu UI Condensed SemiBold" (38 chars)
    - "Noto Sans Telugu UI Condensed Thin" (34 chars)
    - "Noto Sans Telugu UI ExtraCondensed" (34 chars)
    - "Noto Sans Telugu UI ExtraCondensed Black" (40 chars)
    - "Noto Sans Telugu UI ExtraCondensed Bold" (39 chars)
    - "Noto Sans Telugu UI ExtraCondensed ExtraBold" (44 chars)
    - "Noto Sans Telugu UI ExtraCondensed ExtraLight" (45 chars)
    - "Noto Sans Telugu UI ExtraCondensed Light" (40 chars)
    - "Noto Sans Telugu UI ExtraCondensed Medium" (41 chars)
    - "Noto Sans Telugu UI ExtraCondensed SemiBold" (43 chars)
    - "Noto Sans Telugu UI ExtraCondensed Thin" (39 chars)
    - "Noto Sans Telugu UI SemiCondensed" (33 chars)
    - "Noto Sans Telugu UI SemiCondensed Black" (39 chars)
    - "Noto Sans Telugu UI SemiCondensed Bold" (38 chars)
    - "Noto Sans Telugu UI SemiCondensed ExtraBold" (43 chars)
    - "Noto Sans Telugu UI SemiCondensed ExtraLight" (44 chars)
    - "Noto Sans Telugu UI SemiCondensed Light" (39 chars)
    - "Noto Sans Telugu UI SemiCondensed Medium" (40 chars)
    - "Noto Sans Telugu UI SemiCondensed SemiBold" (42 chars)
    - "Noto Sans Telugu UI SemiCondensed Thin" (38 chars)

    Family: bigshouldersstencildisplaysc
    - "Big Shoulders Stencil Display SC Black" (38 chars)
    - "Big Shoulders Stencil Display SC Bold" (37 chars)
    - "Big Shoulders Stencil Display SC ExtraBold" (42 chars)
    - "Big Shoulders Stencil Display SC ExtraLight" (43 chars)
    - "Big Shoulders Stencil Display SC Light" (38 chars)
    - "Big Shoulders Stencil Display SC Medium" (39 chars)
    - "Big Shoulders Stencil Display SC Regular" (40 chars)
    - "Big Shoulders Stencil Display SC SemiBold" (41 chars)
    - "Big Shoulders Stencil Display SC Thin" (37 chars)

    Family: notosansinscriptionalpahlavi
    - "Noto Sans Inscriptional Pahlavi Regular" (39 chars)

    Family: notosansegyptianhieroglyphs
    - "Noto Sans Egyptian Hieroglyphs Regular" (38 chars)

    Family: sixtyfourconvergence
    - "Sixtyfour Convergence Overexposed" (33 chars)
    - "Sixtyfour Convergence Overlapping" (33 chars)

    Family: notosansgujaratiui
    - "Noto Sans Gujarati UI ExtraLight" (32 chars)

    Family: notosanskannadaui
    - "Noto Sans Kannada UI Condensed Black" (36 chars)
    - "Noto Sans Kannada UI Condensed Bold" (35 chars)
    - "Noto Sans Kannada UI Condensed ExtraBold" (40 chars)
    - "Noto Sans Kannada UI Condensed ExtraLight" (41 chars)
    - "Noto Sans Kannada UI Condensed Light" (36 chars)
    - "Noto Sans Kannada UI Condensed Medium" (37 chars)
    - "Noto Sans Kannada UI Condensed SemiBold" (39 chars)
    - "Noto Sans Kannada UI Condensed Thin" (35 chars)
    - "Noto Sans Kannada UI ExtraCondensed" (35 chars)
    - "Noto Sans Kannada UI ExtraCondensed Black" (41 chars)
    - "Noto Sans Kannada UI ExtraCondensed Bold" (40 chars)
    - "Noto Sans Kannada UI ExtraCondensed ExtraBold" (45 chars)
    - "Noto Sans Kannada UI ExtraCondensed ExtraLight" (46 chars)
    - "Noto Sans Kannada UI ExtraCondensed Light" (41 chars)
    - "Noto Sans Kannada UI ExtraCondensed Medium" (42 chars)
    - "Noto Sans Kannada UI ExtraCondensed SemiBold" (44 chars)
    - "Noto Sans Kannada UI ExtraCondensed Thin" (40 chars)
    - "Noto Sans Kannada UI SemiCondensed" (34 chars)
    - "Noto Sans Kannada UI SemiCondensed Black" (40 chars)
    - "Noto Sans Kannada UI SemiCondensed Bold" (39 chars)
    - "Noto Sans Kannada UI SemiCondensed ExtraBold" (44 chars)
    - "Noto Sans Kannada UI SemiCondensed ExtraLight" (45 chars)
    - "Noto Sans Kannada UI SemiCondensed Light" (40 chars)
    - "Noto Sans Kannada UI SemiCondensed Medium" (41 chars)
    - "Noto Sans Kannada UI SemiCondensed SemiBold" (43 chars)
    - "Noto Sans Kannada UI SemiCondensed Thin" (39 chars)

    Family: bigshouldersstenciltext
    - "Big Shoulders Stencil Text Black" (32 chars)
    - "Big Shoulders Stencil Text ExtraBold" (36 chars)
    - "Big Shoulders Stencil Text ExtraLight" (37 chars)
    - "Big Shoulders Stencil Text Light" (32 chars)
    - "Big Shoulders Stencil Text Medium" (33 chars)
    - "Big Shoulders Stencil Text Regular" (34 chars)
    - "Big Shoulders Stencil Text SemiBold" (35 chars)

    Family: libertinusserif
    - "Libertinus Serif SemiBold Italic" (32 chars)

    Family: playwritedkloopetguides
    - "Playwrite DK Loopet Guides Regular" (34 chars)

    Family: roboto
    - "Roboto Condensed ExtraBold Italic" (33 chars)
    - "Roboto Condensed ExtraLight Italic" (34 chars)
    - "Roboto Condensed SemiBold Italic" (32 chars)

    Family: alegreyasanssc
    - "Alegreya Sans SC ExtraBold Italic" (33 chars)

    Family: notosanscaucasianalbanian
    - "Noto Sans Caucasian Albanian Regular" (36 chars)

    Family: notoserifkhitansmallscript
    - "Noto Serif Khitan Small Script Regular" (38 chars)

    Family: atkinsonhyperlegiblenext
    - "Atkinson Hyperlegible Next Bold Italic" (38 chars)
    - "Atkinson Hyperlegible Next ExtraBold Italic" (43 chars)
    - "Atkinson Hyperlegible Next ExtraLight Italic" (44 chars)
    - "Atkinson Hyperlegible Next Italic" (33 chars)
    - "Atkinson Hyperlegible Next Light Italic" (39 chars)
    - "Atkinson Hyperlegible Next Medium Italic" (40 chars)
    - "Atkinson Hyperlegible Next SemiBold Italic" (42 chars)

    Family: notosanssinhalaui
    - "Noto Sans Sinhala UI Condensed Black" (36 chars)
    - "Noto Sans Sinhala UI Condensed Bold" (35 chars)
    - "Noto Sans Sinhala UI Condensed ExtraBold" (40 chars)
    - "Noto Sans Sinhala UI Condensed ExtraLight" (41 chars)
    - "Noto Sans Sinhala UI Condensed Light" (36 chars)
    - "Noto Sans Sinhala UI Condensed Medium" (37 chars)
    - "Noto Sans Sinhala UI Condensed SemiBold" (39 chars)
    - "Noto Sans Sinhala UI Condensed Thin" (35 chars)
    - "Noto Sans Sinhala UI ExtraCondensed" (35 chars)
    - "Noto Sans Sinhala UI ExtraCondensed Black" (41 chars)
    - "Noto Sans Sinhala UI ExtraCondensed Bold" (40 chars)
    - "Noto Sans Sinhala UI ExtraCondensed ExtraBold" (45 chars)
    - "Noto Sans Sinhala UI ExtraCondensed ExtraLight" (46 chars)
    - "Noto Sans Sinhala UI ExtraCondensed Light" (41 chars)
    - "Noto Sans Sinhala UI ExtraCondensed Medium" (42 chars)
    - "Noto Sans Sinhala UI ExtraCondensed SemiBold" (44 chars)
    - "Noto Sans Sinhala UI ExtraCondensed Thin" (40 chars)
    - "Noto Sans Sinhala UI SemiCondensed" (34 chars)
    - "Noto Sans Sinhala UI SemiCondensed Black" (40 chars)
    - "Noto Sans Sinhala UI SemiCondensed Bold" (39 chars)
    - "Noto Sans Sinhala UI SemiCondensed ExtraBold" (44 chars)
    - "Noto Sans Sinhala UI SemiCondensed ExtraLight" (45 chars)
    - "Noto Sans Sinhala UI SemiCondensed Light" (40 chars)
    - "Noto Sans Sinhala UI SemiCondensed Medium" (41 chars)
    - "Noto Sans Sinhala UI SemiCondensed SemiBold" (43 chars)
    - "Noto Sans Sinhala UI SemiCondensed Thin" (39 chars)

    Family: bitcountsingle
    - "Bitcount Single ExtraBold Italic" (32 chars)
    - "Bitcount Single ExtraLight Italic" (33 chars)

    Family: bigshouldersstenciltextsc
    - "Big Shoulders Stencil Text SC Black" (35 chars)
    - "Big Shoulders Stencil Text SC Bold" (34 chars)
    - "Big Shoulders Stencil Text SC ExtraBold" (39 chars)
    - "Big Shoulders Stencil Text SC ExtraLight" (40 chars)
    - "Big Shoulders Stencil Text SC Light" (35 chars)
    - "Big Shoulders Stencil Text SC Medium" (36 chars)
    - "Big Shoulders Stencil Text SC Regular" (37 chars)
    - "Big Shoulders Stencil Text SC SemiBold" (38 chars)
    - "Big Shoulders Stencil Text SC Thin" (34 chars)

    Family: notosanstamilui
    - "Noto Sans Tamil UI Condensed Black" (34 chars)
    - "Noto Sans Tamil UI Condensed Bold" (33 chars)
    - "Noto Sans Tamil UI Condensed ExtraBold" (38 chars)
    - "Noto Sans Tamil UI Condensed ExtraLight" (39 chars)
    - "Noto Sans Tamil UI Condensed Light" (34 chars)
    - "Noto Sans Tamil UI Condensed Medium" (35 chars)
    - "Noto Sans Tamil UI Condensed SemiBold" (37 chars)
    - "Noto Sans Tamil UI Condensed Thin" (33 chars)
    - "Noto Sans Tamil UI ExtraCondensed" (33 chars)
    - "Noto Sans Tamil UI ExtraCondensed Black" (39 chars)
    - "Noto Sans Tamil UI ExtraCondensed Bold" (38 chars)
    - "Noto Sans Tamil UI ExtraCondensed ExtraBold" (43 chars)
    - "Noto Sans Tamil UI ExtraCondensed ExtraLight" (44 chars)
    - "Noto Sans Tamil UI ExtraCondensed Light" (39 chars)
    - "Noto Sans Tamil UI ExtraCondensed Medium" (40 chars)
    - "Noto Sans Tamil UI ExtraCondensed SemiBold" (42 chars)
    - "Noto Sans Tamil UI ExtraCondensed Thin" (38 chars)
    - "Noto Sans Tamil UI SemiCondensed" (32 chars)
    - "Noto Sans Tamil UI SemiCondensed Black" (38 chars)
    - "Noto Sans Tamil UI SemiCondensed Bold" (37 chars)
    - "Noto Sans Tamil UI SemiCondensed ExtraBold" (42 chars)
    - "Noto Sans Tamil UI SemiCondensed ExtraLight" (43 chars)
    - "Noto Sans Tamil UI SemiCondensed Light" (38 chars)
    - "Noto Sans Tamil UI SemiCondensed Medium" (39 chars)
    - "Noto Sans Tamil UI SemiCondensed SemiBold" (41 chars)
    - "Noto Sans Tamil UI SemiCondensed Thin" (37 chars)

    Family: notosansmayannumerals
    - "Noto Sans Mayan Numerals Regular" (32 chars)

    Family: montserratalternates
    - "Montserrat Alternates Black Italic" (34 chars)
    - "Montserrat Alternates Bold Italic" (33 chars)
    - "Montserrat Alternates ExtraBold Italic" (38 chars)
    - "Montserrat Alternates ExtraLight" (32 chars)
    - "Montserrat Alternates ExtraLight Italic" (39 chars)
    - "Montserrat Alternates Light Italic" (34 chars)
    - "Montserrat Alternates Medium Italic" (35 chars)
    - "Montserrat Alternates SemiBold Italic" (37 chars)
    - "Montserrat Alternates Thin Italic" (33 chars)

    Family: notoserifottomansiyaq
    - "Noto Serif Ottoman Siyaq Regular" (32 chars)

    Family: playwritengmodernguides
    - "Playwrite NG Modern Guides Regular" (34 chars)

    Family: bigshouldersdisplay
    - "Big Shoulders Display ExtraLight" (32 chars)

    Family: playwriteusmodernguides
    - "Playwrite US Modern Guides Regular" (34 chars)

    Family: schibstedgrotesk
    - "Schibsted Grotesk ExtraBold Italic" (34 chars)
    - "Schibsted Grotesk SemiBold Italic" (33 chars)

    Family: notosansgunjalagondi
    - "Noto Sans Gunjala Gondi SemiBold" (32 chars)

    Family: librefranklin
    - "Libre Franklin ExtraLight Italic" (32 chars)

    Family: ibmplexsansdevanagari
    - "IBM Plex Sans Devanagari ExtraLight" (35 chars)
    - "IBM Plex Sans Devanagari Regular" (32 chars)
    - "IBM Plex Sans Devanagari SemiBold" (33 chars)

    Family: encodesanscondensed
    - "Encode Sans Condensed ExtraLight" (32 chars)

    Family: sourceserif4
    - "Source Serif 4 ExtraLight Italic" (32 chars)

    Family: bitcountgridsingle
    - "Bitcount Grid Single Black Italic" (33 chars)
    - "Bitcount Grid Single Bold Italic" (32 chars)
    - "Bitcount Grid Single ExtraBold Italic" (37 chars)
    - "Bitcount Grid Single ExtraLight Italic" (38 chars)
    - "Bitcount Grid Single Light Italic" (33 chars)
    - "Bitcount Grid Single Medium Italic" (34 chars)
    - "Bitcount Grid Single SemiBold Italic" (36 chars)
    - "Bitcount Grid Single Thin Italic" (32 chars)

    Family: notosansdevanagariui
    - "Noto Sans Devanagari UI ExtraBold" (33 chars)
    - "Noto Sans Devanagari UI ExtraLight" (34 chars)
    - "Noto Sans Devanagari UI SemiBold" (32 chars)

    Family: notosansoldsoutharabian
    - "Noto Sans Old South Arabian Regular" (35 chars)

    Family: notosansgurmukhiui
    - "Noto Sans Gurmukhi UI Condensed Black" (37 chars)
    - "Noto Sans Gurmukhi UI Condensed Bold" (36 chars)
    - "Noto Sans Gurmukhi UI Condensed ExtraBold" (41 chars)
    - "Noto Sans Gurmukhi UI Condensed ExtraLight" (42 chars)
    - "Noto Sans Gurmukhi UI Condensed Light" (37 chars)
    - "Noto Sans Gurmukhi UI Condensed Medium" (38 chars)
    - "Noto Sans Gurmukhi UI Condensed SemiBold" (40 chars)
    - "Noto Sans Gurmukhi UI Condensed Thin" (36 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed" (36 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed Black" (42 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed Bold" (41 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed ExtraBold" (46 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed ExtraLight" (47 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed Light" (42 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed Medium" (43 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed SemiBold" (45 chars)
    - "Noto Sans Gurmukhi UI ExtraCondensed Thin" (41 chars)
    - "Noto Sans Gurmukhi UI ExtraLight" (32 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed" (35 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed Black" (41 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed Bold" (40 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed ExtraBold" (45 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed ExtraLight" (46 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed Light" (41 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed Medium" (42 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed SemiBold" (44 chars)
    - "Noto Sans Gurmukhi UI SemiCondensed Thin" (40 chars)

    Family: bevietnampro
    - "Be Vietnam Pro ExtraLight Italic" (32 chars)

    Family: notosansmeeteimayek
    - "Noto Sans Meetei Mayek ExtraBold" (32 chars)
    - "Noto Sans Meetei Mayek ExtraLight" (33 chars)

    Family: radiocanadabig
    - "Radio Canada Big SemiBold Italic" (32 chars)

    Family: plusjakartasans
    - "Plus Jakarta Sans ExtraBold Italic" (34 chars)
    - "Plus Jakarta Sans ExtraLight Italic" (35 chars)
    - "Plus Jakarta Sans SemiBold Italic" (33 chars)

    Family: notosanssyriacwestern
    - "Noto Sans Syriac Western ExtraBold" (34 chars)
    - "Noto Sans Syriac Western ExtraLight" (35 chars)
    - "Noto Sans Syriac Western Regular" (32 chars)
    - "Noto Sans Syriac Western SemiBold" (33 chars)

    Family: notosansindicsiyaqnumbers
    - "Noto Sans Indic Siyaq Numbers Regular" (37 chars)

    Family: notosanssyriaceastern
    - "Noto Sans Syriac Eastern ExtraBold" (34 chars)
    - "Noto Sans Syriac Eastern ExtraLight" (35 chars)
    - "Noto Sans Syriac Eastern Regular" (32 chars)
    - "Noto Sans Syriac Eastern SemiBold" (33 chars)

    Family: eduauvicwantarrows
    - "Edu AU VIC WA NT Arrows SemiBold" (32 chars)

    Family: bitcountsingleink
    - "Bitcount Single Ink Black Italic" (32 chars)
    - "Bitcount Single Ink ExtraBold Italic" (36 chars)
    - "Bitcount Single Ink ExtraLight Italic" (37 chars)
    - "Bitcount Single Ink Light Italic" (32 chars)
    - "Bitcount Single Ink Medium Italic" (33 chars)
    - "Bitcount Single Ink SemiBold Italic" (35 chars)

    $ python check_font_names.py apache
    --- Font Name Length Checker for Microsoft Office ---
    Scanning for font families that exceed the 32-character limit...
    Found 47 families to check in '/Users/dcrossland/fonts/apache'.

    --- Scan Complete ---

    Found 2 families with name length issues:

    Family: opensanshebrewcondensed
    - "Open Sans Hebrew Condensed Bold Italic" (38 chars)
    - "Open Sans Hebrew Condensed Extra Bold" (37 chars)
    - "Open Sans Hebrew Condensed Extra Bold Italic" (44 chars)
    - "Open Sans Hebrew Condensed Italic" (33 chars)
    - "Open Sans Hebrew Condensed Light" (32 chars)
    - "Open Sans Hebrew Condensed Light Italic" (39 chars)
    - "Open Sans Hebrew Condensed Regular" (34 chars)

    Family: opensanshebrew
    - "Open Sans Hebrew Extra Bold Italic" (34 chars)