foundrytools-cli 1.1.16__tar.gz → 1.1.18__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. {foundrytools_cli-1.1.16/foundrytools_cli.egg-info → foundrytools_cli-1.1.18}/PKG-INFO +4 -4
  2. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_utils.py +80 -2
  3. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/Font.py +16 -0
  4. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/VFont.py +1 -4
  5. foundrytools_cli-1.1.18/foundryToolsCLI/__init__.py +3 -0
  6. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18/foundrytools_cli.egg-info}/PKG-INFO +4 -4
  7. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundrytools_cli.egg-info/requires.txt +3 -3
  8. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/requirements.txt +3 -3
  9. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/setup.py +1 -1
  10. foundrytools_cli-1.1.16/foundryToolsCLI/__init__.py +0 -3
  11. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/LICENSE +0 -0
  12. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/MANIFEST.in +0 -0
  13. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/README.md +0 -0
  14. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/__init__.py +0 -0
  15. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_assistant.py +0 -0
  16. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_cff.py +0 -0
  17. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_converter.py +0 -0
  18. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_fix.py +0 -0
  19. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_hhea.py +0 -0
  20. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_metrics.py +0 -0
  21. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_name.py +0 -0
  22. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_os2.py +0 -0
  23. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_otf.py +0 -0
  24. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_post.py +0 -0
  25. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_print.py +0 -0
  26. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/CLI/ftcli_ttf.py +0 -0
  27. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/__init__.py +0 -0
  28. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/assistant/UI.py +0 -0
  29. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/assistant/__init__.py +0 -0
  30. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/assistant/fonts_data.py +0 -0
  31. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/assistant/styles_mapping.py +0 -0
  32. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/constants.py +0 -0
  33. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/converters/__init__.py +0 -0
  34. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/converters/options.py +0 -0
  35. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/converters/otf_to_ttf.py +0 -0
  36. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/converters/sfnt_to_web.py +0 -0
  37. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/converters/ttc_to_sfnt.py +0 -0
  38. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/converters/ttf_to_otf.py +0 -0
  39. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/converters/variable_to_static.py +0 -0
  40. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/converters/web_to_sfnt.py +0 -0
  41. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/printer/UI.py +0 -0
  42. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/printer/__init__.py +0 -0
  43. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/tables/CFF_.py +0 -0
  44. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/tables/OS_2.py +0 -0
  45. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/tables/__init__.py +0 -0
  46. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/tables/head.py +0 -0
  47. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/tables/hhea.py +0 -0
  48. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/tables/name.py +0 -0
  49. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/tables/post.py +0 -0
  50. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/__init__.py +0 -0
  51. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/bits_tools.py +0 -0
  52. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/cli_tools.py +0 -0
  53. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/click_tools.py +0 -0
  54. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/logger.py +0 -0
  55. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/otf_tools.py +0 -0
  56. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/ps_recalc_stems.py +0 -0
  57. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/ps_recalc_zones.py +0 -0
  58. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/skia_tools.py +0 -0
  59. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/text_tools.py +0 -0
  60. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/timer.py +0 -0
  61. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/Lib/utils/ttf_tools.py +0 -0
  62. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundryToolsCLI/__main__.py +0 -0
  63. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundrytools_cli.egg-info/SOURCES.txt +0 -0
  64. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundrytools_cli.egg-info/dependency_links.txt +0 -0
  65. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundrytools_cli.egg-info/entry_points.txt +0 -0
  66. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundrytools_cli.egg-info/not-zip-safe +0 -0
  67. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/foundrytools_cli.egg-info/top_level.txt +0 -0
  68. {foundrytools_cli-1.1.16 → foundrytools_cli-1.1.18}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foundrytools-cli
3
- Version: 1.1.16
3
+ Version: 1.1.18
4
4
  Summary: A set of command line tools to inspect, manipulate and convert font files
5
5
  Home-page: https://github.com/ftCLI/FoundryTools-CLI
6
6
  Author: ftCLI
@@ -11,14 +11,14 @@ Requires-Python: >=3.9
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
13
  Requires-Dist: afdko>=4.0.1
14
- Requires-Dist: fonttools>=4.53.1
14
+ Requires-Dist: fonttools>=4.54.0
15
15
  Requires-Dist: brotli>=1.1.0
16
16
  Requires-Dist: click>=8.1.7
17
17
  Requires-Dist: cffsubr>=0.3.0
18
18
  Requires-Dist: dehinter>=4.0.0
19
19
  Requires-Dist: loguru>=0.7.2
20
- Requires-Dist: pathvalidate>=3.2.0
21
- Requires-Dist: rich>=13.7.1
20
+ Requires-Dist: pathvalidate>=3.2.1
21
+ Requires-Dist: rich>=13.8.1
22
22
  Requires-Dist: skia-pathops>=0.8.0.post1
23
23
  Requires-Dist: ttfautohint-py>=0.5.1
24
24
  Requires-Dist: zopfli>=0.2.3
@@ -5,6 +5,7 @@ from copy import deepcopy
5
5
  from pathlib import Path
6
6
 
7
7
  import click
8
+ from afdko.fdkutils import run_shell_command
8
9
  from fontTools.misc.cliTools import makeOutputFileName
9
10
  from fontTools.ttLib import TTFont
10
11
  from pathvalidate import sanitize_filename, sanitize_filepath
@@ -254,8 +255,18 @@ def font_organizer(
254
255
  """,
255
256
  )
256
257
  @add_recursive_option()
258
+ @click.option(
259
+ "-o",
260
+ "--overwrite",
261
+ "overwrite",
262
+ is_flag=True,
263
+ help="""
264
+ Allow overwriting output files. THIS MIGHT POTENTIALLY RESULT IN LOSS OF FILES.
265
+ USE WITH CARE. This might result in a loss of files.
266
+ """,
267
+ )
257
268
  @Timer(logger=logger.info)
258
- def font_renamer(input_path: Path, source: str, recursive: bool = False):
269
+ def font_renamer(input_path: Path, source: str, recursive: bool = False, overwrite: bool = False):
259
270
  """
260
271
  Rename font files according to the provided source string.
261
272
  """
@@ -283,7 +294,7 @@ def font_renamer(input_path: Path, source: str, recursive: bool = False):
283
294
  new_file_name,
284
295
  extension=new_file_extension,
285
296
  outputDir=file.parent,
286
- overWrite=False,
297
+ overWrite=overwrite,
287
298
  )
288
299
  )
289
300
  file.rename(output_file)
@@ -347,6 +358,73 @@ def rebuild(
347
358
  font.close()
348
359
 
349
360
 
361
+ @utils.command()
362
+ @add_file_or_path_argument()
363
+ @add_recursive_option()
364
+ @add_common_options()
365
+ @Timer(logger=logger.info)
366
+ def remove_unreachable_glyphs(
367
+ input_path: Path,
368
+ recursive: bool = False,
369
+ output_dir: t.Optional[Path] = None,
370
+ recalc_timestamp: bool = False,
371
+ overwrite: bool = True,
372
+ ):
373
+ """
374
+ Subsets a font file by removing unreachable glyphs.
375
+ """
376
+
377
+ fonts = get_fonts_in_path(
378
+ input_path=input_path, recursive=recursive, recalc_timestamp=recalc_timestamp
379
+ )
380
+ if not initial_check_pass(fonts=fonts, output_dir=output_dir):
381
+ return
382
+
383
+ for font in fonts:
384
+ try:
385
+ in_file = Path(font.reader.file.name)
386
+ out_file = Path(makeOutputFileName(in_file, outputDir=output_dir, overWrite=overwrite))
387
+ logger.opt(colors=True).info(Logs.current_file, file=in_file)
388
+
389
+ command = [
390
+ "fonttools",
391
+ "subset",
392
+ in_file,
393
+ f"--output-file={out_file}",
394
+ "--unicodes=*",
395
+ "--notdef-glyph",
396
+ "--notdef-outline",
397
+ "--layout-features=*",
398
+ "--layout-scripts=*",
399
+ "--drop-tables=",
400
+ "--passthrough-tables",
401
+ "--legacy-kern",
402
+ "--name-IDs=*",
403
+ "--name-legacy",
404
+ "--name-languages=*",
405
+ "--glyph-names",
406
+ "--legacy-cmap",
407
+ "--symbol-cmap",
408
+ "--recalc-bounds",
409
+ "--recalc-average-width",
410
+ "--recalc-max-context",
411
+ ]
412
+
413
+ if recalc_timestamp:
414
+ command.append("--recalc-timestamp")
415
+ else:
416
+ command.append("--no-recalc-timestamp")
417
+
418
+ run_shell_command(command)
419
+
420
+ logger.success(Logs.file_saved, file=out_file)
421
+
422
+ except Exception as e:
423
+ logger.exception(e)
424
+ finally:
425
+ font.close()
426
+
427
+
350
428
  @utils.command()
351
429
  @add_file_or_path_argument()
352
430
  @click.option("-major", type=click.IntRange(0, 999), help="Major version")
@@ -9,6 +9,7 @@ from cffsubr import subroutinize, desubroutinize
9
9
  from fontTools.misc.psCharStrings import T2CharString
10
10
  from fontTools.misc.timeTools import timestampToString
11
11
  from fontTools.pens.statisticsPen import StatisticsPen
12
+ from fontTools.ttLib.tables._f_v_a_r import Axis
12
13
  from fontTools.ttLib.ttFont import TTFont
13
14
 
14
15
  from foundryToolsCLI.Lib.tables.OS_2 import TableOS2
@@ -623,6 +624,13 @@ class Font(TTFont):
623
624
  name.
624
625
  :return: A string representing the file name of the font.
625
626
  """
627
+ if self.is_variable:
628
+ family_name = self.guess_family_name().replace(" ", "").strip()
629
+ if self.is_italic:
630
+ family_name += "-Italic"
631
+ axes = self.get_axes()
632
+ file_name = f"{family_name}[{','.join([axis.axisTag for axis in axes])}]"
633
+ return file_name
626
634
 
627
635
  if self.is_ttf:
628
636
  if source in (4, 5):
@@ -644,6 +652,14 @@ class Font(TTFont):
644
652
  else:
645
653
  return Path(self.reader.file.name).stem
646
654
 
655
+ def get_axes(self) -> list[Axis]:
656
+ """
657
+ This function returns a list of axes in a variable font.
658
+ """
659
+ if not self.is_variable:
660
+ return []
661
+ return [axis for axis in self["fvar"].axes if axis.flags == 0]
662
+
647
663
  def fix_cff_top_dict_version(self) -> None:
648
664
  if not self.is_otf:
649
665
  return
@@ -1,6 +1,6 @@
1
1
  from pathlib import Path
2
2
 
3
- from fontTools.ttLib.tables._f_v_a_r import NamedInstance, Axis
3
+ from fontTools.ttLib.tables._f_v_a_r import NamedInstance
4
4
 
5
5
  from foundryToolsCLI.Lib.Font import Font
6
6
 
@@ -10,9 +10,6 @@ class VariableFont(Font):
10
10
  super().__init__(file=file, recalcTimestamp=recalcTimestamp)
11
11
  assert "fvar" in self
12
12
 
13
- def get_axes(self) -> list[Axis]:
14
- return [axis for axis in self["fvar"].axes if axis.flags == 0]
15
-
16
13
  def get_instances(self) -> list[NamedInstance]:
17
14
  return [instance for instance in self["fvar"].instances]
18
15
 
@@ -0,0 +1,3 @@
1
+ VERSION = __version__ = "1.1.18"
2
+
3
+ __all__ = ["VERSION"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foundrytools-cli
3
- Version: 1.1.16
3
+ Version: 1.1.18
4
4
  Summary: A set of command line tools to inspect, manipulate and convert font files
5
5
  Home-page: https://github.com/ftCLI/FoundryTools-CLI
6
6
  Author: ftCLI
@@ -11,14 +11,14 @@ Requires-Python: >=3.9
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
13
  Requires-Dist: afdko>=4.0.1
14
- Requires-Dist: fonttools>=4.53.1
14
+ Requires-Dist: fonttools>=4.54.0
15
15
  Requires-Dist: brotli>=1.1.0
16
16
  Requires-Dist: click>=8.1.7
17
17
  Requires-Dist: cffsubr>=0.3.0
18
18
  Requires-Dist: dehinter>=4.0.0
19
19
  Requires-Dist: loguru>=0.7.2
20
- Requires-Dist: pathvalidate>=3.2.0
21
- Requires-Dist: rich>=13.7.1
20
+ Requires-Dist: pathvalidate>=3.2.1
21
+ Requires-Dist: rich>=13.8.1
22
22
  Requires-Dist: skia-pathops>=0.8.0.post1
23
23
  Requires-Dist: ttfautohint-py>=0.5.1
24
24
  Requires-Dist: zopfli>=0.2.3
@@ -1,12 +1,12 @@
1
1
  afdko>=4.0.1
2
- fonttools>=4.53.1
2
+ fonttools>=4.54.0
3
3
  brotli>=1.1.0
4
4
  click>=8.1.7
5
5
  cffsubr>=0.3.0
6
6
  dehinter>=4.0.0
7
7
  loguru>=0.7.2
8
- pathvalidate>=3.2.0
9
- rich>=13.7.1
8
+ pathvalidate>=3.2.1
9
+ rich>=13.8.1
10
10
  skia-pathops>=0.8.0.post1
11
11
  ttfautohint-py>=0.5.1
12
12
  zopfli>=0.2.3
@@ -1,13 +1,13 @@
1
1
  # Hard pinning here gets relaxed to ">=" in setup.py
2
2
  afdko==4.0.1
3
- fonttools==4.53.1
3
+ fonttools==4.54.0
4
4
  brotli==1.1.0
5
5
  click==8.1.7
6
6
  cffsubr==0.3.0
7
7
  dehinter==4.0.0
8
8
  loguru==0.7.2
9
- pathvalidate==3.2.0
10
- rich==13.7.1
9
+ pathvalidate==3.2.1
10
+ rich==13.8.1
11
11
  skia-pathops==0.8.0.post1
12
12
  ttfautohint-py==0.5.1
13
13
  zopfli==0.2.3
@@ -18,7 +18,7 @@ def _get_requirements():
18
18
 
19
19
  setuptools.setup(
20
20
  name="foundrytools-cli",
21
- version="1.1.16",
21
+ version="1.1.18",
22
22
  description="A set of command line tools to inspect, manipulate and convert font files",
23
23
  long_description=long_description,
24
24
  long_description_content_type="text/markdown",
@@ -1,3 +0,0 @@
1
- VERSION = __version__ = "1.1.16"
2
-
3
- __all__ = ["VERSION"]