{ "info": { "author": "Romain Picard", "author_email": "romain.picard@oakbits.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "======\ndooble\n======\n\n\n.. image:: https://img.shields.io/pypi/v/dooble.svg\n :target: https://pypi.python.org/pypi/dooble\n\n.. image:: https://img.shields.io/travis/MainRo/dooble.svg\n :target: https://travis-ci.org/MainRo/dooble\n\n\nDooble is a marble diagram generator from text. It eases the documentation of\nReactiveX standard and custom operators, in a consitent way.\n\nInstallation\n-------------\n\n.. code:: python\n\n pip install dooble\n\nA sphinx plugin is also available:\n\n.. code:: python\n\n pip install sphinxcontrib-dooble\n\nUsage\n------\n\nThe text grammar allows to easilly define *observables* and *operators*. The map\noperator with an input observable and an output observable is described the\nfollowing way:\n\n.. code::\n\n --1--2--3--4-->\n [ map(i: i*2) ]\n --2--4--6--8-->\n\nsave this text in a file named *map.txt* and then render it to an image:\n\n.. code:: console\n\n dooble --input map.txt --output map.png\n\nThe generated image looks like this:\n\n.. image:: examples/map.png\n\n\n*Higher order observables* can also be documented easilly:\n\n.. code::\n\n --a-b-c---d-e-f-->\n [ window ]\n --+-------+------>\n +d-e-f-|\n +a-b-c-|\n\nsave this text in a file named *window.txt* and then render it to an image:\n\n.. code:: console\n\n dooble --input window.txt --output window.png\n\nThe generated image looks like this:\n\n.. image:: examples/window.png\n\nFor operators that take several observables as input, it is possible to label\nthem:\n\n.. code::\n\n --1--2--3--*\n a-7-8-|\n [ catch(a) ]\n --1--2--3--7-8-|\n\nsave this text in a file named *catch.txt* and then render it to an image:\n\n.. code:: console\n\n dooble --input catch.txt --output catch.png\n\nThe generated image looks like this:\n\n.. image:: examples/catch.png\n\nFull grammar\n------------\n\n* Each text line represents either an observable, or an operator\n* Observables are defined with dash lines\n* If an Observable starts with a letter, this letter is considered as a label\n* Each character represent a time span\n* Character ``|`` indicates an observable completion\n* Character ``*`` indicates an observable error\n* Character ``>`` indicates an observable continutation\n* The ``+`` character is used to define anchors of higher order observables\n* operators start with a ``[`` and end with a ``]``\n\nThe full grammar is the following one (in tatsu pseudo ebnf syntax):\n\n.. code::\n\n @@grammar::dooble\n\n start = { layer } $ ;\n\n layer\n =\n | obs:observable\n | op:operator\n ;\n\n observable = {skipspan}* [prefix] {lifetime}* completion ;\n operator = '[' description ']' ;\n\n prefix = '+' | label ;\n\n label = /[a-z]/ ;\n\n lifetime\n =\n | ts:timespan\n | item:item\n ;\n\n completion = /[>|*]/ ;\n\n skipspan = ' ' ;\n timespan = '-' ;\n item = /[a-zA-Z0-9+.,]+/ ;\n\n description = /[a-zA-Z0-9,:+*() <>_]+/ ;\n\n\n\n=======\nHistory\n=======\n\n0.1.0 (2019-02-08)\n------------------\n\n* First release on PyPI.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mainro/dooble", "keywords": "dooble", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "dooble", "package_url": "https://pypi.org/project/dooble/", "platform": "", "project_url": "https://pypi.org/project/dooble/", "project_urls": { "Homepage": "https://github.com/mainro/dooble" }, "release_url": "https://pypi.org/project/dooble/0.7.0/", "requires_dist": null, "requires_python": "", "summary": "A marble diagram generator", "version": "0.7.0" }, "last_serial": 5323856, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e4b1711d08dcce70689547b431d4e9d0", "sha256": "6e60acd6135a3b1be0a85df7428709eb333340eaab0d260fcbf3c612c44d5c8a" }, "downloads": -1, "filename": "dooble-0.1.0.zip", "has_sig": false, "md5_digest": "e4b1711d08dcce70689547b431d4e9d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16236, "upload_time": "2019-02-11T22:18:24", "url": "https://files.pythonhosted.org/packages/f4/b7/ceec96381d1029ed178dbea0bdd5acd8ffaee25aabf4b9311190a53ddcd1/dooble-0.1.0.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ea8beab36f9aeaf1a29def2bdd1837db", "sha256": "3b60525067a52bb437a8fc961cd94734a696439b5f15730e06490068a113f66b" }, "downloads": -1, "filename": "dooble-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ea8beab36f9aeaf1a29def2bdd1837db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10929, "upload_time": "2019-02-14T22:35:35", "url": "https://files.pythonhosted.org/packages/56/72/9c10d534762e054d0796b7b22dbed6d393f024c219af2c8a85b59f20370a/dooble-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6d4fc2677782f693d37461f4d703f416", "sha256": "960144b625924ee479413ac3b344ae2bdbcc0f072f8ca91a9e3cbe15266038c9" }, "downloads": -1, "filename": "dooble-0.3.0.tar.gz", "has_sig": false, "md5_digest": "6d4fc2677782f693d37461f4d703f416", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11174, "upload_time": "2019-02-15T22:59:19", "url": "https://files.pythonhosted.org/packages/50/fe/5d624b87d359a33695a86dbcfc43c47879b03b1d6b299d1be48ba4b3fd16/dooble-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "f2b54b2b02ef822cb23710cb6c660aa6", "sha256": "6bbacac8994de236e41861568fb6c1cf7d25aa2b16c4f0e5b3feb53e196e5f60" }, "downloads": -1, "filename": "dooble-0.4.0.tar.gz", "has_sig": false, "md5_digest": "f2b54b2b02ef822cb23710cb6c660aa6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11210, "upload_time": "2019-02-18T22:06:49", "url": "https://files.pythonhosted.org/packages/b7/2c/512e5271fe02925c5919c76a5e2397c9d6bacd72149fd9a62bde168ceaad/dooble-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "e55e9a079c497b00aa4eeb17cce0e97f", "sha256": "8856656b209b0f1ed3b0651d6c9af552ce59b843e4cab37b344077f0ddb4a822" }, "downloads": -1, "filename": "dooble-0.5.0.tar.gz", "has_sig": false, "md5_digest": "e55e9a079c497b00aa4eeb17cce0e97f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11215, "upload_time": "2019-02-18T22:51:02", "url": "https://files.pythonhosted.org/packages/f5/6e/ef751ca8d52d628e203d62f4a80d1b26f7578c552bc25fd215f7e27ab3dc/dooble-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "5b5294ab0f3eede1c4db7aa5beb6cb2e", "sha256": "2214c9f239006a9eafdd1affab4662eeebc7953775e8685a89dade15a2843a8f" }, "downloads": -1, "filename": "dooble-0.6.0.tar.gz", "has_sig": false, "md5_digest": "5b5294ab0f3eede1c4db7aa5beb6cb2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12133, "upload_time": "2019-02-28T23:02:54", "url": "https://files.pythonhosted.org/packages/5a/17/f7e68b4fed4d6bd309d3241e3ff28f189b7439345fe1954e05d4f4d40ce1/dooble-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "ec48f2318bbd5af3c01da6b2f4b34850", "sha256": "566e56de7062afd570f066bc34cda15334bae9643cb3e0cdc1029d47dd9c7dd1" }, "downloads": -1, "filename": "dooble-0.7.0.tar.gz", "has_sig": false, "md5_digest": "ec48f2318bbd5af3c01da6b2f4b34850", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12235, "upload_time": "2019-05-27T20:53:09", "url": "https://files.pythonhosted.org/packages/0e/a7/955cef282cf20ade1784890fa399f727d2d37a27230a8245fb203ef6c176/dooble-0.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ec48f2318bbd5af3c01da6b2f4b34850", "sha256": "566e56de7062afd570f066bc34cda15334bae9643cb3e0cdc1029d47dd9c7dd1" }, "downloads": -1, "filename": "dooble-0.7.0.tar.gz", "has_sig": false, "md5_digest": "ec48f2318bbd5af3c01da6b2f4b34850", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12235, "upload_time": "2019-05-27T20:53:09", "url": "https://files.pythonhosted.org/packages/0e/a7/955cef282cf20ade1784890fa399f727d2d37a27230a8245fb203ef6c176/dooble-0.7.0.tar.gz" } ] }