{ "info": { "author": "Erik van Blokland", "author_email": "erik@letterror.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Environment :: Other Environment", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Multimedia :: Graphics", "Topic :: Multimedia :: Graphics :: Editors :: Vector-Based", "Topic :: Multimedia :: Graphics :: Graphics Conversion", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![Travis](https://travis-ci.org/LettError/ufoProcessor.svg?branch=master)](https://travis-ci.org/LettError/ufoProcessor)\n[![PyPI](https://img.shields.io/pypi/v/ufoprocessor.svg)](https://pypi.org/project/ufoprocessor)\n\n# ufoProcessor\nPython package based on the **designSpaceDocument** from [fontTools.designspaceLib](https://github.com/fonttools/fonttools/tree/master/Lib/fontTools/designspaceLib)) specifically to _process_ and _generate_ instances for UFO files, glyphs and other data.\n\n* Collect source materials\n* Provide mutators for specific glyphs, font info, kerning so that other tools can generate partial instances. Either from `MutatorMath` or `fonttools varlib.model`.\n* Support designspace format 4 with layers.\n* Apply avar-like designspace bending\n* Apply rules\n* Generate actual UFO instances in formats 2 and 3.\n* Round geometry as requested\n* Try to stay up to date with fontTools\n* Baseclass for tools that need access to designspace data.\n\n## Usage\nThe easiest way to use ufoProcessor is to call `build(designspacePath)`\n\n* **documentPath**: path to the designspace file.\n* **outputUFOFormatVersion**: integer, 2, 3. Format for generated UFOs. Note: can be different from source UFO format.\n* **roundGeometry**: bool, if the geometry needs to be rounded to whole integers. This affects glyphs, metrics, kerning, select font info.\n* **processRules**: bool, when generating UFOs, execute designspace rules as swaps.\n* **logger**: optional logger object.\n\n* **documentPath**: filepath to the .designspace document\n* **outputUFOFormatVersion**: ufo format for output, default is the current, so 3.\n* **useVarlib**: True if you want the geometry to be generated with `varLib.model` instead of `mutatorMath`.\n\n## Convert Superpolator to designspace\n\nThe ufoProcessor.sp3 module has some tools for interpreting Superpolator .sp3 documents. Not all data is migrated. But the important geometry is there. Given that Superpolator can read designspace files, there is hopefully no real need for a writer. Note that this conversion is lossy. \n\n* Axis\n\t* dimensions\n\t* name\n\t* tag\n* Source\n\t* ufo path\n\t* familyname, stylename\n\t* mute state (stored in lib)\n\t* location\n* Instance\n\t* ufo path\n\t* familyname, stylename\n\t* stylemap names\n\t* location\n* Rules\n\t* *Simple Rules* are wrapped in a conditionset.\n\t* most of the really old Superpolator rules can't be converted. Only rules with `<` or `>` operators are used.\n* Some Superpolator user prefs\n\t* Preview text\n\t* Which axes used vertically and horizontally\n\n\n## Usage \n```python\n# convert sp3 file to designspace\n# first make a new designspace doc object\ndoc = DesignSpaceDocument()\n# feed it to the reader\nreader = SuperpolatorReader(sp3path, doc)\nreader.read()\n# now you can work with it, even save it\ndoc.write(designspacePath)\n```\nIndeed that last example comes from this convenience function: \n```sp3_to_designspace(sp3path, designspacePath=None)```\nIf designspacePath = None, sp3_to_designspace will use the same path for the output, but replace the `.sp3` with `.designspace` extension. If the file exists it will overwrite.\n\n## Notes\n* Glyph-specific masters in instances are ignored. \n* Instance notes are ignored. \n* Designspace geometry requires the default master to be on the default value of each axis. Superpolator handled that differently, it would find the default dynamically. So it is possible that converted designspaces need some work in terms of the basic structure. That can't be handled automatically.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/LettError/ufoProcessor", "keywords": "font development tools", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ufoProcessor", "package_url": "https://pypi.org/project/ufoProcessor/", "platform": "", "project_url": "https://pypi.org/project/ufoProcessor/", "project_urls": { "Homepage": "https://github.com/LettError/ufoProcessor" }, "release_url": "https://pypi.org/project/ufoProcessor/1.7/", "requires_dist": [ "defcon[lxml] (>=0.6.0)", "fontMath (>=0.4.9)", "fontParts (>=0.8.2)", "fontTools[lxml,ufo] (>=3.32.0)", "mutatorMath (>=2.1.2)" ], "requires_python": ">=2.7", "summary": "Read, write and generate UFOs with designspace data.", "version": "1.7" }, "last_serial": 5760334, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "0960c501e22c15f07ccc07189b12b342", "sha256": "12d11f4f892d3024349e0719a7318105f3b79c7c1dec3ce10c240c7dd5b2c364" }, "downloads": -1, "filename": "ufoProcessor-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0960c501e22c15f07ccc07189b12b342", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 15433, "upload_time": "2018-10-12T23:52:07", "url": "https://files.pythonhosted.org/packages/c2/fa/d64ce46d806730595cc9f3d8cbb34484a11195f31e4a8cbff05699462ffb/ufoProcessor-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6b9aef6075aa27a1110db900c71b3bbb", "sha256": "2e78d6987f7605093798714f81cae8d274a5195b86b3005425d7c3490fbf8e74" }, "downloads": -1, "filename": "ufoProcessor-1.0.1.zip", "has_sig": false, "md5_digest": "6b9aef6075aa27a1110db900c71b3bbb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 27229, "upload_time": "2018-10-12T23:52:09", "url": "https://files.pythonhosted.org/packages/07/6f/0c6fb942e5b041cdaadcd86e4437aec357a963dc6f36a32421676b52af56/ufoProcessor-1.0.1.zip" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "c1b5bf910a388186c73d17a8b2522b59", "sha256": "a58df2a2ac301218d2ce905ff949a145f1f6803795f8292ad1e3cecadd1156bb" }, "downloads": -1, "filename": "ufoProcessor-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c1b5bf910a388186c73d17a8b2522b59", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 15534, "upload_time": "2018-11-03T00:04:59", "url": "https://files.pythonhosted.org/packages/4b/0a/34ec136f6951f46896cca12eea5a57e827ec5dfd95fb67473ef718564367/ufoProcessor-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8efa7692928c15aa088dfd0ce922fc3f", "sha256": "b45d42114bb738fb478f026b1e34e76136c23cf7f1d1afd1d210ee2ef0940298" }, "downloads": -1, "filename": "ufoProcessor-1.0.2.zip", "has_sig": false, "md5_digest": "8efa7692928c15aa088dfd0ce922fc3f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 28511, "upload_time": "2018-11-03T00:05:00", "url": "https://files.pythonhosted.org/packages/65/b9/d2ca060b59c777792425c9bb6346a7ed06dc92efac23a92fbf120b740174/ufoProcessor-1.0.2.zip" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "02234ad5e7de9f893c714bf8b01ea15e", "sha256": "f699b180f5ed9b1a95582191476abb0f3c89297e8de284f4d955f03227364520" }, "downloads": -1, "filename": "ufoProcessor-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "02234ad5e7de9f893c714bf8b01ea15e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 15551, "upload_time": "2018-11-29T18:31:49", "url": "https://files.pythonhosted.org/packages/e8/8d/767daa7abdef53ee14c4c0bb3e9d8d10d73ca3de79b8a322fac0553b7b70/ufoProcessor-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f073f1872683cea38b8e035a29c9024", "sha256": "4741fb0ad869498702984f0f12d3445652f6e5be783dbf815715d175a6a5c9f4" }, "downloads": -1, "filename": "ufoProcessor-1.0.3.zip", "has_sig": false, "md5_digest": "6f073f1872683cea38b8e035a29c9024", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 28747, "upload_time": "2018-11-29T18:31:51", "url": "https://files.pythonhosted.org/packages/a8/5e/fed5d6142a255535e122b17db3c959aabec33a99ae01144a97f10b78639a/ufoProcessor-1.0.3.zip" } ], "1.0.3a0": [ { "comment_text": "", "digests": { "md5": "91115d474a219d665948c62579750e9d", "sha256": "c7fc9088aa53296118b8816a59540fc2b45f94d77e0390416a2eb50b1ca414ae" }, "downloads": -1, "filename": "ufoProcessor-1.0.3a0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "91115d474a219d665948c62579750e9d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 15564, "upload_time": "2018-11-04T12:07:08", "url": "https://files.pythonhosted.org/packages/69/78/658ecf3c5d6f3f470bd14afed8c782cfa834bcd558a18c221ab6b0d56e45/ufoProcessor-1.0.3a0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e51123b03adfbc5918e2cc20021712b", "sha256": "5f85de1bab06044626058c3a43bb55ec079594622aeb9e3e891631221040cabc" }, "downloads": -1, "filename": "ufoProcessor-1.0.3a0.zip", "has_sig": false, "md5_digest": "5e51123b03adfbc5918e2cc20021712b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 28611, "upload_time": "2018-11-04T12:07:09", "url": "https://files.pythonhosted.org/packages/74/88/5a194640672c90665911f6411c844280dbf3e351b2ebcd0e49a8818da1e5/ufoProcessor-1.0.3a0.zip" } ], "1.0.3a1": [ { "comment_text": "", "digests": { "md5": "52c743c0f28cfac3e1328e771625d5ce", "sha256": "743abf603ac62ca79554209ad1457722303a506d810a6370c9b11d0e98937534" }, "downloads": -1, "filename": "ufoProcessor-1.0.3a1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52c743c0f28cfac3e1328e771625d5ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 15536, "upload_time": "2018-11-05T09:39:30", "url": "https://files.pythonhosted.org/packages/01/fc/087448b7c967cf4f399c8e45948afe1dff039e22e2b29f44829217b21ba6/ufoProcessor-1.0.3a1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "331f28fb043e13700721470a8c1ef3bf", "sha256": "05e09d940e82f3c44bc7347da3da64b935c0cd5a0fc1da44a135d0806e554f17" }, "downloads": -1, "filename": "ufoProcessor-1.0.3a1.zip", "has_sig": false, "md5_digest": "331f28fb043e13700721470a8c1ef3bf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 28583, "upload_time": "2018-11-05T09:39:31", "url": "https://files.pythonhosted.org/packages/29/05/2f6eb967735cef8b74d7c48be0fbdf6f867fd8836aa534c1aabfa4b112be/ufoProcessor-1.0.3a1.zip" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "08e055387dd5403cfdc72602740110d4", "sha256": "71022265836c9780201e8cde5d91258b76ce5ac6a6daedc21926b1c0f5bc8dfe" }, "downloads": -1, "filename": "ufoProcessor-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "08e055387dd5403cfdc72602740110d4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 21610, "upload_time": "2019-03-07T08:59:56", "url": "https://files.pythonhosted.org/packages/70/48/30ec02fcd52473813ee7221ab46e7a12eba47c24357bdd840f4e43f5be0c/ufoProcessor-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b0a110b2e3601801714dbb5538546d1e", "sha256": "ecfe4bcb6d1bfd85a895109e28878deea2c165faa9e19caa2b8e189a538fee08" }, "downloads": -1, "filename": "ufoProcessor-1.0.4.zip", "has_sig": false, "md5_digest": "b0a110b2e3601801714dbb5538546d1e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 41462, "upload_time": "2019-03-07T08:59:57", "url": "https://files.pythonhosted.org/packages/64/4c/9bda7a11b63a40e2a34d1ff30bbb7ee8597fb5269806d3189d14657ac40f/ufoProcessor-1.0.4.zip" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "d8dfc11c3c1253d27a35601421cf3b52", "sha256": "6b95b054af8b51ca8205175d8bbe3b205b2dd0bafaed99b6846a5efdc29e7854" }, "downloads": -1, "filename": "ufoProcessor-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d8dfc11c3c1253d27a35601421cf3b52", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 21638, "upload_time": "2019-04-17T19:10:52", "url": "https://files.pythonhosted.org/packages/3d/ee/1340e16b8898ab69a7e2750b19781c3c5f00fe70daad0c59f53ede5daf42/ufoProcessor-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ad501e289b79f9644ced245ab04b2e0", "sha256": "cd2854a8d21250f52161a6c09f5c55ca0dff3eac602173438816ce60dd563576" }, "downloads": -1, "filename": "ufoProcessor-1.0.5.zip", "has_sig": false, "md5_digest": "0ad501e289b79f9644ced245ab04b2e0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 41517, "upload_time": "2019-04-17T19:10:53", "url": "https://files.pythonhosted.org/packages/4a/02/2942a85a693d0bbfac78d6af671cdb26d6cdd9d0eb54c948db9c2bf6928e/ufoProcessor-1.0.5.zip" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "d242ff77d90800d70148354e8740761f", "sha256": "85d359c8b6b91dea7247cf54a14e20c0bf56b537367f283886f0fa2f5fd39104" }, "downloads": -1, "filename": "ufoProcessor-1.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d242ff77d90800d70148354e8740761f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 21642, "upload_time": "2019-04-17T21:42:47", "url": "https://files.pythonhosted.org/packages/c4/82/d489a23a4081cf05685276f1fca5115d8103fe5af7558b005943bfc47931/ufoProcessor-1.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "862dd60849bdfde92a0c4a483034252f", "sha256": "ce8a47ce93dbf8ffaa4e7b115ea16a683c3cc79b44841769a5cac484bc901dd3" }, "downloads": -1, "filename": "ufoProcessor-1.0.6.zip", "has_sig": false, "md5_digest": "862dd60849bdfde92a0c4a483034252f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 41522, "upload_time": "2019-04-17T21:42:48", "url": "https://files.pythonhosted.org/packages/1f/9c/2a89d29255a66f0e59a69114fb5536cce0ca0097a05510f82d3035cae446/ufoProcessor-1.0.6.zip" } ], "1.7": [ { "comment_text": "", "digests": { "md5": "8e8fbf1e1c1a40a0ca4ac1a927ee358c", "sha256": "24b42974bdf7b454d11bef91996652e3f31b17ecd4e987628f4de0aa3b95ae12" }, "downloads": -1, "filename": "ufoProcessor-1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8e8fbf1e1c1a40a0ca4ac1a927ee358c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 22387, "upload_time": "2019-08-30T13:32:59", "url": "https://files.pythonhosted.org/packages/9d/3d/3e749f0b7bf5dd9fc7f1dd450c79ca2643089f6353448ad8fabb746e4535/ufoProcessor-1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aafe03f13ecb9c50c79383a89001253d", "sha256": "cc4243aec5dc493edfb2e4143f90fc8006f72b20d7c94757166604c47c64c5a9" }, "downloads": -1, "filename": "ufoProcessor-1.7.zip", "has_sig": false, "md5_digest": "aafe03f13ecb9c50c79383a89001253d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 42350, "upload_time": "2019-08-30T13:33:01", "url": "https://files.pythonhosted.org/packages/90/da/ea1812b202be22887c6f80ce3708ceadc7670869abf5f384754b0e2ddd24/ufoProcessor-1.7.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8e8fbf1e1c1a40a0ca4ac1a927ee358c", "sha256": "24b42974bdf7b454d11bef91996652e3f31b17ecd4e987628f4de0aa3b95ae12" }, "downloads": -1, "filename": "ufoProcessor-1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8e8fbf1e1c1a40a0ca4ac1a927ee358c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 22387, "upload_time": "2019-08-30T13:32:59", "url": "https://files.pythonhosted.org/packages/9d/3d/3e749f0b7bf5dd9fc7f1dd450c79ca2643089f6353448ad8fabb746e4535/ufoProcessor-1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aafe03f13ecb9c50c79383a89001253d", "sha256": "cc4243aec5dc493edfb2e4143f90fc8006f72b20d7c94757166604c47c64c5a9" }, "downloads": -1, "filename": "ufoProcessor-1.7.zip", "has_sig": false, "md5_digest": "aafe03f13ecb9c50c79383a89001253d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 42350, "upload_time": "2019-08-30T13:33:01", "url": "https://files.pythonhosted.org/packages/90/da/ea1812b202be22887c6f80ce3708ceadc7670869abf5f384754b0e2ddd24/ufoProcessor-1.7.zip" } ] }