Skip to content

Commit da8b363

Browse files
Allow omitting prefix
1 parent 1dd9a6a commit da8b363

File tree

1 file changed

+45
-20
lines changed

1 file changed

+45
-20
lines changed

kobofix.py

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,13 @@ def _get_font_metadata(
210210
full_name = f"{family_name}"
211211
if style_name != "Regular":
212212
full_name += f" {style_name}"
213-
214-
ps_name = f"{self.prefix}_{family_name.replace(' ', '-')}"
213+
214+
# If prefix is empty, don't add it to the PS name
215+
if self.prefix:
216+
ps_name = f"{self.prefix}_{family_name.replace(' ', '-')}"
217+
else:
218+
ps_name = family_name.replace(' ', '-')
219+
215220
if style_name != "Regular":
216221
ps_name += f"-{style_name.replace(' ', '')}"
217222

@@ -399,34 +404,44 @@ def rename_font(self, font: TTFont, metadata: FontMetadata) -> None:
399404
if "name" not in font:
400405
logger.warning(" No 'name' table found; skipping all name changes")
401406
return
402-
else:
407+
408+
if self.prefix:
403409
logger.info(" Renaming the font to: " + f"{self.prefix} {metadata.full_name}")
404-
410+
adjusted_family_name = f"{self.prefix} {metadata.family_name}"
411+
adjusted_full_name = f"{self.prefix} {metadata.full_name}"
412+
else:
413+
logger.info(" Updating font metadata (no prefix)")
414+
adjusted_family_name = metadata.family_name
415+
adjusted_full_name = metadata.full_name
416+
405417
# Update Family Name
406-
self._set_name_records(font, 1, f"{self.prefix} {metadata.family_name}")
418+
self._set_name_records(font, 1, adjusted_family_name)
407419
# Update Subfamily
408420
self._set_name_records(font, 2, metadata.style_name)
409421
# Update Full Name
410-
self._set_name_records(font, 4, f"{self.prefix} {metadata.full_name}")
422+
self._set_name_records(font, 4, adjusted_full_name)
411423

412424
# Update Typographic Family
413-
self._set_name_records(font, 16, f"{self.prefix} {metadata.family_name}")
425+
self._set_name_records(font, 16, adjusted_family_name)
414426
# Update Preferred Subfamily
415427
self._set_name_records(font, 17, metadata.style_name)
416428
# Update Preferred Family
417-
self._set_name_records(font, 18, f"{self.prefix} {metadata.family_name}")
429+
self._set_name_records(font, 18, adjusted_family_name)
418430

419431
# Update Unique ID (ID 3)
420432
try:
421433
current_unique = font["name"].getName(3, 3, 1).toUnicode()
422434
parts = current_unique.split("Version")
423435
version_info = f"Version{parts[1]}" if len(parts) == 2 else "Version 1.000"
424-
new_unique_id = f"{self.prefix} {metadata.family_name.strip()}:{version_info}"
436+
if self.prefix:
437+
new_unique_id = f"{self.prefix} {metadata.family_name.strip()}:{version_info}"
438+
else:
439+
new_unique_id = f"{metadata.family_name.strip()}:{version_info}"
425440
if current_unique != new_unique_id:
426441
self._set_name_records(font, 3, new_unique_id)
427442
except Exception as e:
428443
logger.warning(f" Failed to update Unique ID: {e}")
429-
444+
430445
# Update PostScript Name (ID 6)
431446
new_ps_name = metadata.ps_name
432447
self._set_name_records(font, 6, new_ps_name)
@@ -435,10 +450,17 @@ def rename_font(self, font: TTFont, metadata: FontMetadata) -> None:
435450
if "CFF " in font:
436451
cff = font["CFF "].cff
437452
cff_topdict = cff.topDictIndex[0]
438-
453+
454+
if self.prefix:
455+
cff_full_name = f"{self.prefix} {metadata.full_name}"
456+
cff_family_name = f"{self.prefix} {metadata.family_name.replace(' ', '_')}"
457+
else:
458+
cff_full_name = metadata.full_name
459+
cff_family_name = metadata.family_name.replace(' ', '_')
460+
439461
name_mapping = {
440-
"FullName": f"{self.prefix} {metadata.full_name}",
441-
"FamilyName": f"{self.prefix} {metadata.family_name.replace(' ', '_')}"
462+
"FullName": cff_full_name,
463+
"FamilyName": cff_family_name
442464
}
443465

444466
for key, new_value in name_mapping.items():
@@ -675,17 +697,20 @@ def _generate_output_path(self, original_path: str, metadata: FontMetadata) -> s
675697
"""
676698
dirname = os.path.dirname(original_path)
677699
original_name, ext = os.path.splitext(os.path.basename(original_path))
678-
700+
679701
style_suffix = ""
680702
for key in STYLE_MAP:
681703
if key.lower() in original_name.lower():
682704
style_suffix = key
683705
break
684-
706+
685707
style_part = f"-{style_suffix}" if style_suffix else ""
686-
687-
base_name = f"{self.prefix}_{metadata.family_name.replace(' ', '_')}{style_part}"
688-
708+
709+
if self.prefix:
710+
base_name = f"{self.prefix}_{metadata.family_name.replace(' ', '_')}{style_part}"
711+
else:
712+
base_name = f"{metadata.family_name.replace(' ', '_')}{style_part}"
713+
689714
return os.path.join(dirname, f"{base_name}{ext.lower()}")
690715

691716

@@ -743,8 +768,8 @@ def main():
743768
help="Font files to process (*.ttf). You can use a wildcard (glob).")
744769
parser.add_argument("--name", type=str,
745770
help="Optional new family name for all fonts. Other font metadata like copyright info is unaffected.")
746-
parser.add_argument("--prefix", type=str, default=DEFAULT_PREFIX,
747-
help=f"Prefix to add to font names. Required. (Default: {DEFAULT_PREFIX})")
771+
parser.add_argument("--prefix", type=str, default=DEFAULT_PREFIX,
772+
help=f"Prefix to add to font names. Set to empty string to omit prefix. (Default: {DEFAULT_PREFIX})")
748773
parser.add_argument("--line-percent", type=int, default=DEFAULT_LINE_PERCENT,
749774
help=f"Line spacing adjustment percentage. Set to 0 to make no changes to line spacing. (Default: {DEFAULT_LINE_PERCENT})")
750775
parser.add_argument("--skip-kobo-kern", action="store_true",

0 commit comments

Comments
 (0)