![Test and Build](https://github.com/adobe-type-tools/psautohint/workflows/Test%20and%20Build/badge.svg)
[![Codecov](https://codecov.io/gh/adobe-type-tools/psautohint/branch/master/graph/badge.svg)](https://codecov.io/gh/adobe-type-tools/psautohint)
[![PyPI](https://img.shields.io/pypi/v/psautohint.svg)](https://pypi.org/project/psautohint)
[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/adobe-type-tools/psautohint.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/adobe-type-tools/psautohint/context:cpp)
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/adobe-type-tools/psautohint.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/adobe-type-tools/psautohint/context:python)
[![Total alerts](https://img.shields.io/lgtm/alerts/g/adobe-type-tools/psautohint.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/adobe-type-tools/psautohint/alerts/)
PSAutoHint
==========
A standalone version of [AFDKO](https://github.com/adobe-type-tools/afdko)’s
autohinter.
Building and running
--------------------
This repository currently consists of a core autohinter written in C, a
Python C extension providing an interface to it, and helper Python code.
To build the C extension:
python setup.py build
To install the C extension and the helper scripts globally:
pip install -r requirements.txt .
Alternatively to install them for the current user:
pip install -r requirements.txt --user .
The autohinter can be used by running:
psautohint
To build just the `autohintexe` binary:
python setup.py build_exe
Testing
-------
We have a test suite that can be run with:
pytest
Debugging
---------
For standard debugging, build with:
python setup.py build --debug
It is also possible to build a debug version with [AddressSanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer) ("ASan") support (currently _for Mac OS X only_) with:
python setup.py build --asan
pip install .
Once it is installed, you can use the `util/launch-asan.sh` shell script to launch a Python process that invokes the ASan libraries needed for debugging. Attach Xcode the launched process, then execute code in the process that triggers memory usage problems and wait for ASan to do its magic.
NOTE: be sure to build and install `psautohint` as described above; using other techniques such as `python setup.py install` will cause a re-build _without_ ASan and debug support, which won't work.
Raw data
{
"_id": null,
"home_page": "https://github.com/adobe-type-tools/psautohint",
"name": "psautohint",
"maintainer": "",
"docs_url": null,
"requires_python": ">3.7",
"maintainer_email": "",
"keywords": "",
"author": "Adobe Type team & friends",
"author_email": "afdko@adobe.com",
"download_url": "https://files.pythonhosted.org/packages/91/74/014da6e9280844cec6a73a04e069d95740e5520fd9477afbf31208d0e2f4/psautohint-2.4.0.tar.gz",
"platform": "",
"description": "![Test and Build](https://github.com/adobe-type-tools/psautohint/workflows/Test%20and%20Build/badge.svg)\n[![Codecov](https://codecov.io/gh/adobe-type-tools/psautohint/branch/master/graph/badge.svg)](https://codecov.io/gh/adobe-type-tools/psautohint)\n[![PyPI](https://img.shields.io/pypi/v/psautohint.svg)](https://pypi.org/project/psautohint)\n[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/adobe-type-tools/psautohint.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/adobe-type-tools/psautohint/context:cpp)\n[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/adobe-type-tools/psautohint.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/adobe-type-tools/psautohint/context:python)\n[![Total alerts](https://img.shields.io/lgtm/alerts/g/adobe-type-tools/psautohint.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/adobe-type-tools/psautohint/alerts/)\n\nPSAutoHint\n==========\n\nA standalone version of [AFDKO](https://github.com/adobe-type-tools/afdko)\u2019s\nautohinter.\n\nBuilding and running\n--------------------\n\nThis repository currently consists of a core autohinter written in C, a\nPython C extension providing an interface to it, and helper Python code.\n\nTo build the C extension:\n\n python setup.py build\n\nTo install the C extension and the helper scripts globally:\n\n pip install -r requirements.txt .\n\nAlternatively to install them for the current user:\n\n pip install -r requirements.txt --user .\n\nThe autohinter can be used by running:\n\n psautohint\n\nTo build just the `autohintexe` binary:\n\n python setup.py build_exe\n\nTesting\n-------\n\nWe have a test suite that can be run with:\n\n pytest\n\nDebugging\n---------\n\nFor standard debugging, build with:\n\n python setup.py build --debug\n\nIt is also possible to build a debug version with [AddressSanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer) (\"ASan\") support (currently _for Mac OS X only_) with:\n\n python setup.py build --asan\n pip install .\n\nOnce it is installed, you can use the `util/launch-asan.sh` shell script to launch a Python process that invokes the ASan libraries needed for debugging. Attach Xcode the launched process, then execute code in the process that triggers memory usage problems and wait for ASan to do its magic.\n\nNOTE: be sure to build and install `psautohint` as described above; using other techniques such as `python setup.py install` will cause a re-build _without_ ASan and debug support, which won't work.\n\n\n",
"bugtrack_url": null,
"license": "Apache License, Version 2.0",
"summary": "Python wrapper for Adobe's PostScript autohinter",
"version": "2.4.0",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5bcad8a1fb0b57a4e00cc8e6d09700b2248b3c4fbf08aa9b2771f3f78abecb3c",
"md5": "d47f5eb0616354b449de3c7d3d70debc",
"sha256": "c6a8dafcc16e606108536072c08e4223d564147aca1778457d312a4723584fd4"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp310-cp310-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "d47f5eb0616354b449de3c7d3d70debc",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">3.7",
"size": 201914,
"upload_time": "2022-02-02T21:34:50",
"upload_time_iso_8601": "2022-02-02T21:34:50.742716Z",
"url": "https://files.pythonhosted.org/packages/5b/ca/d8a1fb0b57a4e00cc8e6d09700b2248b3c4fbf08aa9b2771f3f78abecb3c/psautohint-2.4.0-cp310-cp310-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c67bc6f0a355e2e7f932941b7ad1f24cba7714ff575094d1f8ee1d3af6605f19",
"md5": "d3adea4a58787affe28e2a22ad63c3f5",
"sha256": "12c1cd0a2b45310233dd5342f9029cbfbdd6f0f1cf532af15ff70e0b4340607c"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "d3adea4a58787affe28e2a22ad63c3f5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">3.7",
"size": 132375,
"upload_time": "2022-02-02T21:34:52",
"upload_time_iso_8601": "2022-02-02T21:34:52.504982Z",
"url": "https://files.pythonhosted.org/packages/c6/7b/c6f0a355e2e7f932941b7ad1f24cba7714ff575094d1f8ee1d3af6605f19/psautohint-2.4.0-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4d5382ab305991e800b51884987803240b7e0dc25515acad20bb6894eea8fa72",
"md5": "6fe449f9629a87927081abe4167b3bb0",
"sha256": "cc2307eb73916d384ada74364d2e1d644129dc567b6dc593ad6249615221b9fd"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"has_sig": false,
"md5_digest": "6fe449f9629a87927081abe4167b3bb0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">3.7",
"size": 144222,
"upload_time": "2022-02-02T21:34:54",
"upload_time_iso_8601": "2022-02-02T21:34:54.014418Z",
"url": "https://files.pythonhosted.org/packages/4d/53/82ab305991e800b51884987803240b7e0dc25515acad20bb6894eea8fa72/psautohint-2.4.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "225158032adc464d717b36db45d84ecdd99e11bda7ff53bcf6cc21519ee0b4cd",
"md5": "ff5fbda433781d469731435688f1a427",
"sha256": "abc605db7e01ff9cf135eadaeb7c971613e55d7e984235bea8c10d85ce2afab8"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "ff5fbda433781d469731435688f1a427",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">3.7",
"size": 135932,
"upload_time": "2022-02-02T21:34:55",
"upload_time_iso_8601": "2022-02-02T21:34:55.288750Z",
"url": "https://files.pythonhosted.org/packages/22/51/58032adc464d717b36db45d84ecdd99e11bda7ff53bcf6cc21519ee0b4cd/psautohint-2.4.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dd7f8ebce23dbf45db182f6452357b135739e98a67321a8fa4d2f5dc655055a2",
"md5": "8b44e119035fed426fe204d346997a98",
"sha256": "00dbee2a9b685424327d8687687ac9e52c0125e1cd3ef17264d979e232682a56"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp37-cp37m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "8b44e119035fed426fe204d346997a98",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">3.7",
"size": 132349,
"upload_time": "2022-02-02T21:34:56",
"upload_time_iso_8601": "2022-02-02T21:34:56.509187Z",
"url": "https://files.pythonhosted.org/packages/dd/7f/8ebce23dbf45db182f6452357b135739e98a67321a8fa4d2f5dc655055a2/psautohint-2.4.0-cp37-cp37m-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "62adbb0092c767796a31323823486a5645b88a4e49362f0d1b5144c0b8bb976e",
"md5": "cc6598e9096a6fbab226295580e6b4a0",
"sha256": "9d3da45677a848cdf496318b749fc89def6f886e3d2c7b17025555edf4670289"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "cc6598e9096a6fbab226295580e6b4a0",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">3.7",
"size": 144618,
"upload_time": "2022-02-02T21:34:57",
"upload_time_iso_8601": "2022-02-02T21:34:57.751840Z",
"url": "https://files.pythonhosted.org/packages/62/ad/bb0092c767796a31323823486a5645b88a4e49362f0d1b5144c0b8bb976e/psautohint-2.4.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ac75d1294c0075b96f5fd9ea41c1f6c5f1c973fca0cbdcd0fb7fa77d0dacf7a9",
"md5": "35d2a133176e7b91c42cef4d6988cd67",
"sha256": "82d83c3a47ad10e9f9ac8d192625fcbfebad233d4420341d08ac5905f3c584c7"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "35d2a133176e7b91c42cef4d6988cd67",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">3.7",
"size": 135906,
"upload_time": "2022-02-02T21:34:58",
"upload_time_iso_8601": "2022-02-02T21:34:58.900775Z",
"url": "https://files.pythonhosted.org/packages/ac/75/d1294c0075b96f5fd9ea41c1f6c5f1c973fca0cbdcd0fb7fa77d0dacf7a9/psautohint-2.4.0-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e00944a7a128e3f54bbd776d5c320dd5a7c5a4dd1ac515fe08c347718017636f",
"md5": "f8492c59e6a89ea0e1599de34fa2762f",
"sha256": "a8654252be853dba6253fef94ccaf6e57920c2cd0123efb68f7087f3d574ec4c"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp38-cp38-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "f8492c59e6a89ea0e1599de34fa2762f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">3.7",
"size": 201911,
"upload_time": "2022-02-02T21:35:00",
"upload_time_iso_8601": "2022-02-02T21:35:00.304895Z",
"url": "https://files.pythonhosted.org/packages/e0/09/44a7a128e3f54bbd776d5c320dd5a7c5a4dd1ac515fe08c347718017636f/psautohint-2.4.0-cp38-cp38-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "564a05b415aa11f747bc9d752827c13b02f3ac94d9ccc4663c54bc7ce42eb173",
"md5": "59159e1e99fcc86e9aa7ed8f18d92aae",
"sha256": "f158b524d18355077cc21d8e74599d964db607cf81f987ac543ced94e0fcaede"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp38-cp38-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "59159e1e99fcc86e9aa7ed8f18d92aae",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">3.7",
"size": 132372,
"upload_time": "2022-02-02T21:35:01",
"upload_time_iso_8601": "2022-02-02T21:35:01.965617Z",
"url": "https://files.pythonhosted.org/packages/56/4a/05b415aa11f747bc9d752827c13b02f3ac94d9ccc4663c54bc7ce42eb173/psautohint-2.4.0-cp38-cp38-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "aa4331eb16f5fe9bc4a6e78ff69ec798b0811ffa8ec742d7a488e909035b1f5f",
"md5": "4ce45f04ee0feae14d3eed1016033cba",
"sha256": "525e2a4fd513d979624424ffef5b864eb0018dddd9bf882bbc15e1e718b8e3b9"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "4ce45f04ee0feae14d3eed1016033cba",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">3.7",
"size": 144627,
"upload_time": "2022-02-02T21:35:03",
"upload_time_iso_8601": "2022-02-02T21:35:03.616315Z",
"url": "https://files.pythonhosted.org/packages/aa/43/31eb16f5fe9bc4a6e78ff69ec798b0811ffa8ec742d7a488e909035b1f5f/psautohint-2.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6f07b4b9f814319dde58fbf211303b943a5b6148717065abeb334019aabc837c",
"md5": "e692a5e34c97c97891b0bc236abf1b65",
"sha256": "e7f82992252120e5bd58f2981b247beb13318d3588c861525707512b66d7b0a6"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "e692a5e34c97c97891b0bc236abf1b65",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">3.7",
"size": 135923,
"upload_time": "2022-02-02T21:35:05",
"upload_time_iso_8601": "2022-02-02T21:35:05.056808Z",
"url": "https://files.pythonhosted.org/packages/6f/07/b4b9f814319dde58fbf211303b943a5b6148717065abeb334019aabc837c/psautohint-2.4.0-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9744bd0d6b5c778683116319bf6c5436eecd856accdbe22e82423b37237e1145",
"md5": "adbc8e0b59ec45977e5e0a5d99be6d3d",
"sha256": "0c78aafe6af2ddf29de0a1bec9c6bb27d586c1fbe5e7ae0072740af44e9c0935"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp39-cp39-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "adbc8e0b59ec45977e5e0a5d99be6d3d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">3.7",
"size": 201911,
"upload_time": "2022-02-02T21:35:06",
"upload_time_iso_8601": "2022-02-02T21:35:06.740543Z",
"url": "https://files.pythonhosted.org/packages/97/44/bd0d6b5c778683116319bf6c5436eecd856accdbe22e82423b37237e1145/psautohint-2.4.0-cp39-cp39-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2508f3cb857acd641606eb3b96f3c1064e0f43f0bcfbd20bdc680781e7c335e9",
"md5": "26b50f6601fcd7d16580a713d9da2c8a",
"sha256": "7676f7f9d859ed0782040e943440e3407cbdb65d412438dc3c17c6a69a4a8aea"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "26b50f6601fcd7d16580a713d9da2c8a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">3.7",
"size": 132371,
"upload_time": "2022-02-02T21:35:08",
"upload_time_iso_8601": "2022-02-02T21:35:08.362460Z",
"url": "https://files.pythonhosted.org/packages/25/08/f3cb857acd641606eb3b96f3c1064e0f43f0bcfbd20bdc680781e7c335e9/psautohint-2.4.0-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "95578493a38eb38205e4854e09dfc88d79bc95f91b8d72c20021da05edb73e82",
"md5": "33efe4d89156088ee367a29a9437ddf4",
"sha256": "da73fc11648ddf92f9e51a150073613d706e16267f1af4a4c4cb35c18b3dd5da"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "33efe4d89156088ee367a29a9437ddf4",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">3.7",
"size": 144625,
"upload_time": "2022-02-02T21:35:09",
"upload_time_iso_8601": "2022-02-02T21:35:09.656741Z",
"url": "https://files.pythonhosted.org/packages/95/57/8493a38eb38205e4854e09dfc88d79bc95f91b8d72c20021da05edb73e82/psautohint-2.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "060d76ab2bb0813cb98b5d3411a6d5392aa013c6120c2469531fc29127bc43df",
"md5": "4f47da5fbd69305931b0f905245ad449",
"sha256": "ec1f387c8b923d5680f07b7c3aedf328dd020bb2403298fdd04cad73b3684e62"
},
"downloads": -1,
"filename": "psautohint-2.4.0-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "4f47da5fbd69305931b0f905245ad449",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">3.7",
"size": 135924,
"upload_time": "2022-02-02T21:35:11",
"upload_time_iso_8601": "2022-02-02T21:35:11.202658Z",
"url": "https://files.pythonhosted.org/packages/06/0d/76ab2bb0813cb98b5d3411a6d5392aa013c6120c2469531fc29127bc43df/psautohint-2.4.0-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9174014da6e9280844cec6a73a04e069d95740e5520fd9477afbf31208d0e2f4",
"md5": "f626eb26eb635903b1f32f6c1dcf77e5",
"sha256": "d50edea8f6121c3383f0d82f881bf7a18bdd476cc2d354737672ce193c3cff7f"
},
"downloads": -1,
"filename": "psautohint-2.4.0.tar.gz",
"has_sig": false,
"md5_digest": "f626eb26eb635903b1f32f6c1dcf77e5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">3.7",
"size": 185568,
"upload_time": "2022-02-02T21:35:12",
"upload_time_iso_8601": "2022-02-02T21:35:12.879670Z",
"url": "https://files.pythonhosted.org/packages/91/74/014da6e9280844cec6a73a04e069d95740e5520fd9477afbf31208d0e2f4/psautohint-2.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-02-02 21:35:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "adobe-type-tools",
"github_project": "psautohint",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "lxml",
"specs": [
[
"==",
"4.9.1"
]
]
},
{
"name": "fonttools",
"specs": [
[
"==",
"4.37.4"
]
]
}
],
"lcname": "psautohint"
}