{
"info": {
"author": "Georgi Valkov",
"author_email": "georgi.t.valkov@gmail.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 4 - Beta",
"License :: OSI Approved :: BSD License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6"
],
"description": "Ansimarkup\n==========\n\n.. class:: no-web no-pdf\n\n|pypi| |build| |license|\n\n\nAnsimarkup is an XML-like markup for producing colored terminal text.\n\n\n.. code-block:: python\n\n from ansimarkup import ansiprint as print\n\n print(\"bold text\"))\n print(\"red text\", \"red text on a green background\")\n print(\"orange text\")\n\n\nInstallation\n------------\n\nThe latest stable version of ansimarkup can be installed from pypi:\n\n.. code-block:: bash\n\n $ pip install ansimarkup\n\n\nUsage\n-----\n\nBasic\n~~~~~\n\n.. code-block:: python\n\n from ansimarkup import parse, ansiprint\n\n # parse() converts the tags to the corresponding ansi escape sequence.\n parse(\"bold dim\")\n\n # ansiprint() works exactly like print(), but first runs parse() on all arguments.\n ansiprint(\"bold\", \"dim\")\n ansiprint(\"bold\", \"dim\", sep=\":\", file=sys.stderr)\n\n\nColors and styles\n~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n # Colors may be specified in one of several ways.\n parse(\"red foreground\")\n parse(\"red background\")\n parse(\"red foreground\")\n parse(\"red background\")\n\n # Xterm, hex and rgb colors are accepted by the and tags.\n parse(\"aquamarine foreground\")\n parse(\"dark blue background\")\n parse(\"dark green foreground\")\n\n # Tags may be nested.\n parse(\"red text on a yellow foreground\")\n\n # The above may be more concisely written as:\n parse(\"red text on a yellow background\")\n\n # This shorthand also supports style tags.\n parse(\"bold red text on a yellow background\")\n parse(\"bold red text\")\n parse(\"bold regular text on a yellow background\")\n\n # Unrecognized tags are left as-is.\n parse(\"\")\n\nFor a list of markup tags, please refer to `tags.py`_.\n\n\nUser-defined tags\n~~~~~~~~~~~~~~~~~\n\nCustom tags or overrides for existing tags may be defined by creating a new\n``AnsiMarkup`` instance:\n\n.. code-block:: python\n\n from ansimarkup import AnsiMarkup, parse\n\n user_tags = {\n # Add a new tag (e.g. we want to expand to \"\").\n \"info\": parse(\"\")\n\n # The ansi escape sequence can be used directly.\n \"info\": \"e\\x1b[32m\\x1b[1m\",\n\n # Tag names may also be callables.\n \"err\": lambda: parse(\"\")\n\n # Colors may also be given convenient tag names.\n \"orange\": parse(\"\"),\n\n # User-defined tags always take precedence over existing tags.\n \"bold\": parse(\"\")\n }\n\n am = AnsiMarkup(tags=user_tags)\n\n am.parse(\"bold green\")\n am.ansiprint(\"red\")\n\n # Calling the instance is equivalent to calling its parse method.\n am(\"bold\") == am.parse(\"bold\")\n\n\nOther features\n~~~~~~~~~~~~~~\n\nThe default tag separators can be changed by passing the ``tag_sep`` argument to\n``AnsiMarkup``:\n\n\n.. code-block:: python\n\n from ansimarkup import AnsiMarkup\n\n am = AnsiMarkup(tag_sep=\"{}\")\n am.parse(\"{b}{r}bold red{/b}{/r}\")\n\nMarkup tags can be removed using the ``strip()`` method:\n\n.. code-block:: python\n\n from ansimarkup import AnsiMarkup\n\n am = AnsiMarkup()\n am.strip(\"bold red\")\n\nCommand-line\n~~~~~~~~~~~~\n\nAnsimarkup may also be used as a command-line script. This works as if all\narguments were passed to ``ansiprint()``::\n\n $ python -m ansimarkup \"bold\" \"red\"\n\n\nLogging formatter\n~~~~~~~~~~~~~~~~~\n\nAnsimarkup also comes with a formatter for the standard library `logging`\nmodule. It can be used as:\n\n.. code-block:: python\n\n import logging\n from ansimarkup.logformatter import AnsiMarkupFormatter\n\n log = logging.getLogger()\n hdl = logging.StreamHandler()\n fmt = AnsiMarkupFormatter()\n hdl.setFormatter(fmt)\n log.addHandler(hdl)\n\n log.info(\"bold text\")\n\n\nWindows\n~~~~~~~\n\nAnsimarkup uses the colorama_ library internally, which means that Windows\nsupport for ansi escape sequences is available by first running:\n\n.. code-block:: python\n\n import colorama\n colorama.init()\n\nFor more information on Windows support, consult the \"Usage\" section of the\ncolorama_ documentation.\n\n\nPerformance\n-----------\n\nWhile the focus of ansimarkup is convenience, it does try to keep processing to\na minimum. The `benchmark.py`_ script attempts to benchmark different ansi\nescape code libraries::\n\n Benchmark 1: red bold\n colorama 0.2998 \u03bcs\n termcolor 3.2339 \u03bcs\n colr 3.6483 \u03bcs\n ansimarkup 6.8679 \u03bcs\n pastel 28.8538 \u03bcs\n plumbum 53.5004 \u03bcs\n\n Benchmark 2: red boldredbold\n colorama 0.8269 \u03bcs\n termcolor 8.9296 \u03bcs\n ansimarkup 9.3099 \u03bcs\n colr 9.6244 \u03bcs\n pastel 62.2018 \u03bcs\n plumbum 120.8048 \u03bcs\n\n\nLimitations\n-----------\n\nAnsimarkup is a simple wrapper around colorama. It does very little in the way\nof validating that markup strings are well-formed. This is a conscious decision\nwith the goal of keeping things simple and fast.\n\nUnbalanced nesting, such as in the following example, will produce incorrect\noutput::\n\n 12\n\n\nTodo\n----\n\n- Many corner cases remain to be fixed.\n\n- More elaborate testing. The current test suite mostly covers the\n \"happy paths\".\n\n- Replace ``tag_list.index`` in ``sub_end`` with something more\n efficient (i.e. something like an ordered MultiDict).\n\n\nSimilar libraries\n-----------------\n\n- pastel_: bring colors to your terminal\n- `plumbum.colors`_: small yet feature-rich library for shell script-like programs in Python\n- colr_: easy terminal colors, with chainable methods\n\n\nLicense\n-------\n\nAnsimarkup is released under the terms of the `Revised BSD License`_.\n\n\n.. |pypi| image:: https://img.shields.io/pypi/v/ansimarkup.svg?style=flat-square&label=latest%20stable%20version\n :target: https://pypi.python.org/pypi/ansimarkup\n :alt: Latest version released on PyPi\n\n.. |license| image:: https://img.shields.io/pypi/l/ansimarkup.svg?style=flat-square&label=license\n :target: https://pypi.python.org/pypi/ansimarkup\n :alt: BSD 3-Clause\n\n.. |build| image:: https://img.shields.io/travis/gvalkov/python-ansimarkup/master.svg?style=flat-square&label=build\n :target: http://travis-ci.org/gvalkov/python-ansimarkup\n :alt: Build status\n\n\n.. _tags.py: https://github.com/gvalkov/python-ansimarkup/blob/master/ansimarkup/tags.py\n.. _benchmark.py: https://github.com/gvalkov/python-ansimarkup/blob/master/tests/benchmark.py\n\n.. _colorama: https://pypi.python.org/pypi/colorama\n.. _pastel: https://github.com/sdispater/pastel\n.. _plumbum.colors: https://plumbum.readthedocs.io/en/latest/cli.html#colors\n.. _colr: https://pypi.python.org/pypi/Colr/\n.. _`Revised BSD License`: https://raw.github.com/gvalkov/python-ansimarkup/master/LICENSE\n",
"description_content_type": null,
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/gvalkov/grblcom",
"keywords": "grbl",
"license": "Revised BSD License",
"maintainer": "",
"maintainer_email": "",
"name": "grblcom",
"package_url": "https://pypi.org/project/grblcom/",
"platform": "",
"project_url": "https://pypi.org/project/grblcom/",
"project_urls": {
"Homepage": "https://github.com/gvalkov/grblcom"
},
"release_url": "https://pypi.org/project/grblcom/0.0.0/",
"requires_dist": null,
"requires_python": "",
"summary": "Rich serial-console client for GRBL",
"version": "0.0.0"
},
"last_serial": 3163986,
"releases": {
"0.0.0": [
{
"comment_text": "",
"digests": {
"md5": "c23e462feb489bb78c3f6fc5ecd01848",
"sha256": "4404f32bbdbf94d5b31f65e3ffe862eea195923a351702d242c063e78246fb88"
},
"downloads": -1,
"filename": "grblcom-0.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c23e462feb489bb78c3f6fc5ecd01848",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 11192,
"upload_time": "2017-09-10T22:25:52",
"url": "https://files.pythonhosted.org/packages/a3/ae/c8197c48983ac9b1548954c5ed3b640ac7aeaf5d8440301ef38c15be59fb/grblcom-0.0.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "decd56536b31091cac10a5fdcadfe931",
"sha256": "c440f30777d800fed0304abebd0b29e4a0176be1cc6d5fa453706db5d744003a"
},
"downloads": -1,
"filename": "grblcom-0.0.0.tar.gz",
"has_sig": false,
"md5_digest": "decd56536b31091cac10a5fdcadfe931",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8200,
"upload_time": "2017-09-10T22:25:49",
"url": "https://files.pythonhosted.org/packages/06/9d/22e0d4245eb8117494ac63b4753e2fa3737e98c993aaed69a091793d45ef/grblcom-0.0.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "c23e462feb489bb78c3f6fc5ecd01848",
"sha256": "4404f32bbdbf94d5b31f65e3ffe862eea195923a351702d242c063e78246fb88"
},
"downloads": -1,
"filename": "grblcom-0.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c23e462feb489bb78c3f6fc5ecd01848",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 11192,
"upload_time": "2017-09-10T22:25:52",
"url": "https://files.pythonhosted.org/packages/a3/ae/c8197c48983ac9b1548954c5ed3b640ac7aeaf5d8440301ef38c15be59fb/grblcom-0.0.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "decd56536b31091cac10a5fdcadfe931",
"sha256": "c440f30777d800fed0304abebd0b29e4a0176be1cc6d5fa453706db5d744003a"
},
"downloads": -1,
"filename": "grblcom-0.0.0.tar.gz",
"has_sig": false,
"md5_digest": "decd56536b31091cac10a5fdcadfe931",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8200,
"upload_time": "2017-09-10T22:25:49",
"url": "https://files.pythonhosted.org/packages/06/9d/22e0d4245eb8117494ac63b4753e2fa3737e98c993aaed69a091793d45ef/grblcom-0.0.0.tar.gz"
}
]
}