{ "info": { "author": "orsinium", "author_email": "master_fess@mail.ru", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "\nHomoglyphs\n==========\n\n\n.. image:: logo.png\n :target: logo.png\n :alt: Homoglyphs logo\n\n\n.. image:: https://travis-ci.org/orsinium/homoglyphs.svg?branch=master\n :target: https://travis-ci.org/orsinium/homoglyphs\n :alt: Build Status\n \n.. image:: https://img.shields.io/pypi/v/homoglyphs.svg\n :target: https://pypi.python.org/pypi/homoglyphs\n :alt: PyPI version\n \n.. image:: https://img.shields.io/pypi/status/homoglyphs.svg\n :target: https://pypi.python.org/pypi/homoglyphs\n :alt: Status\n \n.. image:: https://img.shields.io/github/languages/code-size/orsinium/homoglyphs.svg\n :target: https://github.com/orsinium/homoglyphs\n :alt: Code size\n \n.. image:: https://img.shields.io/pypi/l/homoglyphs.svg\n :target: LICENSE\n :alt: License\n\n\nHomoglyphs -- python library for getting `homoglyphs `_ and converting to ASCII.\n\nFeatures\n--------\n\nIt's smarter version of `confusable_homoglyphs `_\\ :\n\n\n* Autodect or manual choosing category (\\ `aliases from ISO 15924 `_\\ ).\n* Auto or manual load only needed alphabets in memory.\n* Converting to ASCII.\n* More configurable.\n* More stable.\n\nInstallation\n------------\n\n.. code-block:: bash\n\n sudo pip install homoglyphs\n\nUsage\n-----\n\nBest way to explain something is show how it works. So, let's have a look on the real usage.\n\nImporting:\n\n.. code-block:: python\n\n import homoglyphs as hg\n\nLanguages\n^^^^^^^^^\n\n.. code-block:: python\n\n #detect\n hg.Languages.detect('w')\n # {'pl', 'da', 'nl', 'fi', 'cz', 'sr', 'pt', 'it', 'en', 'es', 'sk', 'de', 'fr', 'ro'}\n hg.Languages.detect('\u0442')\n # {'mk', 'ru', 'be', 'bg', 'sr'}\n hg.Languages.detect('.')\n # set()\n\n # get alphabet for languages\n hg.Languages.get_alphabet(['ru'])\n # {'\u0432', '\u0401', '\u041a', '\u0422', ..., '\u0420', '\u0417', '\u042d'}\n\n # get all languages\n hg.Languages.get_all()\n # {'nl', 'lt', ..., 'de', 'mk'}\n\nCategories\n^^^^^^^^^^\n\nCategories -- (\\ `aliases from ISO 15924 `_\\ ).\n\n.. code-block:: python\n\n #detect\n hg.Categories.detect('w')\n # 'LATIN'\n hg.Categories.detect('\u0442')\n # 'CYRILLIC'\n hg.Categories.detect('.')\n # 'COMMON'\n\n # get alphabet for categories\n hg.Categories.get_alphabet(['CYRILLIC'])\n # {'\u04d7', '\u050c', '\u0490', '\u042f', ..., '\u042d', '\u0515', '\u04fb'}\n\n # get all categories\n hg.Categories.get_all()\n # {'RUNIC', 'DESERET', ..., 'SOGDIAN', 'TAI_LE'}\n\nHomoglyphs\n^^^^^^^^^^\n\nGet homoglyphs:\n\n.. code-block:: python\n\n # get homoglyphs (latin alphabet initialized by default)\n hg.Homoglyphs().get_combinations('q')\n # ['q', '\ud835\udc2a', '\ud835\udc5e', '\ud835\udc92', '\ud835\udcc6', '\ud835\udcfa', '\ud835\udd2e', '\ud835\udd62', '\ud835\udd96', '\ud835\uddca', '\ud835\uddfe', '\ud835\ude32', '\ud835\ude66', '\ud835\ude9a']\n\nAlphabet loading:\n\n.. code-block:: python\n\n # load alphabet on init by categories\n homoglyphs = hg.Homoglyphs(categories=('LATIN', 'COMMON', 'CYRILLIC')) # alphabet loaded here\n homoglyphs.get_combinations('\u0433\u044b')\n # ['r\u044b', '\u0433\u044b', '\uab47\u044b', '\uab48\u044b', '\ud835\udc2b\u044b', '\ud835\udc5f\u044b', '\ud835\udc93\u044b', '\ud835\udcc7\u044b', '\ud835\udcfb\u044b', '\ud835\udd2f\u044b', '\ud835\udd63\u044b', '\ud835\udd97\u044b', '\ud835\uddcb\u044b', '\ud835\uddff\u044b', '\ud835\ude33\u044b', '\ud835\ude67\u044b', '\ud835\ude9b\u044b']\n\n # load alphabet on init by languages\n homoglyphs = hg.Homoglyphs(languages={'ru', 'en'}) # alphabet will be loaded here\n homoglyphs.get_combinations('\u0433\u044b')\n # ['r\u044b', '\u0433\u044b']\n\n # manual set alphabet on init # eng rus\n homoglyphs = hg.Homoglyphs(alphabet='abc \u0430\u0431\u0441')\n homoglyphs.get_combinations('\u0441')\n # ['c', '\u0441']\n\n # load alphabet on demand\n homoglyphs = hg.Homoglyphs(languages={'en'}, strategy=hg.STRATEGY_LOAD)\n # ^ alphabet will be loaded here for \"en\" language\n homoglyphs.get_combinations('\u0433\u044b')\n # ^ alphabet will be loaded here for \"ru\" language\n # ['r\u044b', '\u0433\u044b']\n\nYou can combine ``categories``\\ , ``languages``\\ , ``alphabet`` and any strategies as you want. The strategies specify how to handle any characters not already loaded:\n\n\n* ``STRATEGY_LOAD``\\ : load category for this character\n* ``STRATEGY_IGNORE``\\ : add character to result\n* ``STRATEGY_REMOVE``\\ : remove character from result\n\nConverting glyphs to ASCII chars\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n homoglyphs = hg.Homoglyphs(languages={'en'}, strategy=hg.STRATEGY_LOAD)\n\n # convert\n homoglyphs.to_ascii('\u0442\u0435\u0441\u0442')\n # ['tect']\n homoglyphs.to_ascii('\u0425\u0420123.') # this is cyrillic \"\u0445\" and \"\u0440\"\n # ['XP123.', 'XPI23.', 'XPl23.']\n\n # string with chars which can't be converted by default will be ignored\n homoglyphs.to_ascii('\u043b\u043e\u043b')\n # []\n\n # you can set strategy for removing not converted non-ASCII chars from result\n homoglyphs = hg.Homoglyphs(\n languages={'en'},\n strategy=hg.STRATEGY_LOAD,\n ascii_strategy=hg.STRATEGY_REMOVE,\n )\n homoglyphs.to_ascii('\u043b\u043e\u043b')\n # ['o']\n\n # also you can set up range of allowed char codes for ascii (0-128 by default):\n homoglyphs = hg.Homoglyphs(\n languages={'en'},\n strategy=hg.STRATEGY_LOAD,\n ascii_strategy=hg.STRATEGY_REMOVE,\n ascii_range=range(ord('a'), ord('z')),\n )\n homoglyphs.to_ascii('\u0425\u0420123.')\n # ['l']\n homoglyphs.to_ascii('\u0445\u0440123.')\n # ['xpl']\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/life4/homoglyphs", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "homoglyphs", "package_url": "https://pypi.org/project/homoglyphs/", "platform": "", "project_url": "https://pypi.org/project/homoglyphs/", "project_urls": { "Homepage": "https://github.com/life4/homoglyphs" }, "release_url": "https://pypi.org/project/homoglyphs/1.3.5/", "requires_dist": null, "requires_python": ">=2.7", "summary": "Homoglyphs", "version": "1.3.5" }, "last_serial": 5640300, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "c686ca9a451af7a756e8cf29817ef58e", "sha256": "85c48d6752f339a63eac378cf5a001f3407e663086c2670ddef06dd368504a48" }, "downloads": -1, "filename": "homoglyphs-1.0.0.tar.gz", "has_sig": false, "md5_digest": "c686ca9a451af7a756e8cf29817ef58e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6964, "upload_time": "2018-03-09T13:51:42", "url": "https://files.pythonhosted.org/packages/f3/ee/a942500eaa20405e3007d8308c10ea14a33d852978bb5abcd17e89e23efc/homoglyphs-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "d86bc8e5f54dd5600fec31e45a9d3b51", "sha256": "8183950023565addadddf147d27b85f05b9fc922fdef66abe5c2c263890d850b" }, "downloads": -1, "filename": "homoglyphs-1.0.1.tar.gz", "has_sig": false, "md5_digest": "d86bc8e5f54dd5600fec31e45a9d3b51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6989, "upload_time": "2018-03-09T13:52:17", "url": "https://files.pythonhosted.org/packages/68/ce/f78414809c97cef853e510eefeb377e242c315c9d1659c06707b75276029/homoglyphs-1.0.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "098fee12f112ff625b443fd8b0184c4e", "sha256": "0479871e6b040e500c5afd705175cd7f7d785a903a7b94daf3fbe4dbf7b78c52" }, "downloads": -1, "filename": "homoglyphs-1.2.0.tar.gz", "has_sig": false, "md5_digest": "098fee12f112ff625b443fd8b0184c4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8371, "upload_time": "2018-03-10T15:12:36", "url": "https://files.pythonhosted.org/packages/0c/c1/247b175a8d5e743ce01014e4e428a7cb5de49049ddf4800ba6a3bbb681b0/homoglyphs-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "6fe3322094344438dbd718423008eaac", "sha256": "a76367809f665d6537628360990c0d5581a75a05f134a92bf79a4c42e5eecc15" }, "downloads": -1, "filename": "homoglyphs-1.2.1.tar.gz", "has_sig": false, "md5_digest": "6fe3322094344438dbd718423008eaac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8591, "upload_time": "2018-03-12T08:42:03", "url": "https://files.pythonhosted.org/packages/d8/f7/684069897b9b224c4ec4491caee08800150def70a19fb24007259341cc0b/homoglyphs-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "e81834d54f987368b8d5ad3b0f2d0711", "sha256": "ef74626256307e419b67b00b6796311de9c7cd9380396b541c52889564e4a659" }, "downloads": -1, "filename": "homoglyphs-1.2.2.tar.gz", "has_sig": false, "md5_digest": "e81834d54f987368b8d5ad3b0f2d0711", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 165922, "upload_time": "2018-03-13T06:24:24", "url": "https://files.pythonhosted.org/packages/5f/ab/1e500ce94be2d454a0a1a18032e9da311f10c35c511ca7fdbb76515df314/homoglyphs-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "faaa6236d9ea2088a6b967556d539094", "sha256": "3b8fd5eac419ad6bf9e58310d1cb2234777dd2d56c1f1a6e23d39a29d7d7ac5c" }, "downloads": -1, "filename": "homoglyphs-1.2.3.tar.gz", "has_sig": false, "md5_digest": "faaa6236d9ea2088a6b967556d539094", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 166514, "upload_time": "2018-04-02T11:42:25", "url": "https://files.pythonhosted.org/packages/26/ac/38dc94a13cbeae12b6aec080536e9c6d60e364a023aa8ca90e6da26d162f/homoglyphs-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "7cc5b5fbf1358dc6f9df6dbfa3d8ffb7", "sha256": "4d6eeacd3ceb3f281f115b4cfdcea5d28879200c0948ca8e7ba803fa13ef8e2b" }, "downloads": -1, "filename": "homoglyphs-1.2.4.tar.gz", "has_sig": false, "md5_digest": "7cc5b5fbf1358dc6f9df6dbfa3d8ffb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 166435, "upload_time": "2018-04-06T09:02:22", "url": "https://files.pythonhosted.org/packages/2e/1c/665bf3b6f013c8c32b3c02b005a3dbc16b4b2d8c0b46a0a0483a23f99ec1/homoglyphs-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "831ab20e7612e0f9ac66478eaa5dab72", "sha256": "6fc1664e87bd8a8c89115bea14d6a2e3708837d10e3bcbdfba10f03932bc42dc" }, "downloads": -1, "filename": "homoglyphs-1.2.5.tar.gz", "has_sig": false, "md5_digest": "831ab20e7612e0f9ac66478eaa5dab72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 166432, "upload_time": "2018-05-17T05:16:55", "url": "https://files.pythonhosted.org/packages/74/cd/5e8ab7e91e08f208ed68d22619cdf1540165c2eebd4e449c1547683142b4/homoglyphs-1.2.5.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "ba6832ec16b2a80f3b0ac718e9626ca7", "sha256": "6ea1523277ebbf18aed6fd884d40f0b464ff8faa7be191d79d1ec30b91c1c822" }, "downloads": -1, "filename": "homoglyphs-1.3.0.tar.gz", "has_sig": false, "md5_digest": "ba6832ec16b2a80f3b0ac718e9626ca7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 186263, "upload_time": "2018-08-27T16:24:20", "url": "https://files.pythonhosted.org/packages/88/a6/bb648a9894df7f1265da761e5cf2568d34cfa089bd7dfc1dfd08e79e1d0e/homoglyphs-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "957cd0c7ae4f1ad6cc65cac395c4a0cd", "sha256": "b14a0d98eb2e050b2ad18b07a13ff01ba5773373913978152316a05a52e98277" }, "downloads": -1, "filename": "homoglyphs-1.3.1.tar.gz", "has_sig": false, "md5_digest": "957cd0c7ae4f1ad6cc65cac395c4a0cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 186303, "upload_time": "2018-09-21T14:49:14", "url": "https://files.pythonhosted.org/packages/0c/84/db578ac381fd59126d068d388e6a1c47d350d8f9822a9e58558a43def62f/homoglyphs-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "255bd0c7412f525d35ebbcfe41bd8fe8", "sha256": "cdb61c1ed4d23a1ec297e3c9a483dba2de171164b98afc3ed43862a91605f2fc" }, "downloads": -1, "filename": "homoglyphs-1.3.2.tar.gz", "has_sig": false, "md5_digest": "255bd0c7412f525d35ebbcfe41bd8fe8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 91001, "upload_time": "2019-01-29T17:51:48", "url": "https://files.pythonhosted.org/packages/26/ba/3744c57befd5d2b23858c6cf0c420ef3f4294d5243509fa35966e08ad3f1/homoglyphs-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "01ab186ebeb3c1a471d9105bcf138832", "sha256": "9bc543b66d4343b2c93d264e3d70decb0bb1db087e55e7d1e5c5673d8c3cad72" }, "downloads": -1, "filename": "homoglyphs-1.3.3.tar.gz", "has_sig": false, "md5_digest": "01ab186ebeb3c1a471d9105bcf138832", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 91876, "upload_time": "2019-02-05T12:36:04", "url": "https://files.pythonhosted.org/packages/52/bc/018ccbd6407a35ae22d0bb5e18443f08857716084c6eff4530401ea5a08d/homoglyphs-1.3.3.tar.gz" } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "1ebc018f8c32b16201c0edcd46e5abc6", "sha256": "fda477b917ad4a844e0b91b8811ca5cd60a42aff01c5ae46d7668c0d0f73b3a4" }, "downloads": -1, "filename": "homoglyphs-1.3.4.tar.gz", "has_sig": false, "md5_digest": "1ebc018f8c32b16201c0edcd46e5abc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92183, "upload_time": "2019-02-05T12:37:02", "url": "https://files.pythonhosted.org/packages/b3/c9/22c9141de0fa6490da70f1ffce619dbb944ba8e7a34e95f16ce8a99a5071/homoglyphs-1.3.4.tar.gz" } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "51315c1878ee0db15e12d26fad71aaff", "sha256": "a1d116b87ca98bf75ed1f51eed9f286f9aa13dc822fa4f1c850a2084857ba9ff" }, "downloads": -1, "filename": "homoglyphs-1.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "51315c1878ee0db15e12d26fad71aaff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 88123, "upload_time": "2019-08-06T15:08:43", "url": "https://files.pythonhosted.org/packages/3a/2f/4ada6263d469a44f9eabcd0aafef93ae4a8612e5bbd1e913a006c27d83bf/homoglyphs-1.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "520b96ba51a643e1296119e75f638e8a", "sha256": "258ab2cd46b93a8bd07210d6eee32bea5515687642304e652734dc6f1523d2ef" }, "downloads": -1, "filename": "homoglyphs-1.3.5.tar.gz", "has_sig": false, "md5_digest": "520b96ba51a643e1296119e75f638e8a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 88092, "upload_time": "2019-08-06T15:08:45", "url": "https://files.pythonhosted.org/packages/53/7b/425d51f5470c15b20d4e30e36e324ef57e7b9056faded0b2d8fa62ef1296/homoglyphs-1.3.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "51315c1878ee0db15e12d26fad71aaff", "sha256": "a1d116b87ca98bf75ed1f51eed9f286f9aa13dc822fa4f1c850a2084857ba9ff" }, "downloads": -1, "filename": "homoglyphs-1.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "51315c1878ee0db15e12d26fad71aaff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 88123, "upload_time": "2019-08-06T15:08:43", "url": "https://files.pythonhosted.org/packages/3a/2f/4ada6263d469a44f9eabcd0aafef93ae4a8612e5bbd1e913a006c27d83bf/homoglyphs-1.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "520b96ba51a643e1296119e75f638e8a", "sha256": "258ab2cd46b93a8bd07210d6eee32bea5515687642304e652734dc6f1523d2ef" }, "downloads": -1, "filename": "homoglyphs-1.3.5.tar.gz", "has_sig": false, "md5_digest": "520b96ba51a643e1296119e75f638e8a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 88092, "upload_time": "2019-08-06T15:08:45", "url": "https://files.pythonhosted.org/packages/53/7b/425d51f5470c15b20d4e30e36e324ef57e7b9056faded0b2d8fa62ef1296/homoglyphs-1.3.5.tar.gz" } ] }