{"id":13557556,"url":"https://github.com/Frimkron/Ascidia","last_synced_at":"2025-04-03T11:32:29.547Z","repository":{"id":5496188,"uuid":"6694856","full_name":"Frimkron/Ascidia","owner":"Frimkron","description":"A command-line utility for rendering technical diagrams from ASCII art","archived":false,"fork":false,"pushed_at":"2024-09-28T15:15:25.000Z","size":492,"stargazers_count":110,"open_issues_count":0,"forks_count":15,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-03T08:09:38.094Z","etag":null,"topics":["ascii-diagram","diagrams","documentation-tool","markdown","python"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Frimkron.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-11-14T21:02:18.000Z","updated_at":"2025-02-04T15:09:28.000Z","dependencies_parsed_at":"2022-07-07T19:08:39.290Z","dependency_job_id":null,"html_url":"https://github.com/Frimkron/Ascidia","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frimkron%2FAscidia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frimkron%2FAscidia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frimkron%2FAscidia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Frimkron%2FAscidia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Frimkron","download_url":"https://codeload.github.com/Frimkron/Ascidia/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246993252,"owners_count":20865971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ascii-diagram","diagrams","documentation-tool","markdown","python"],"created_at":"2024-08-01T12:04:25.106Z","updated_at":"2025-04-03T11:32:24.533Z","avatar_url":"https://github.com/Frimkron.png","language":"Python","funding_links":[],"categories":["Python","markdown"],"sub_categories":[],"readme":"Ascidia\n=======\n\nA command-line utility for rendering technical diagrams from ASCII art.\n\nThis:\n\n```\t\n               O     \n              -|-  -.\n              / \\   | \n              User  | Request\n                    V\n Foobar         +--------+       .------.\n  Layer         |  Acme  |       '------'\n- - - - - - +   | Widget |\u003c-----\u003e|      |\n   .----.   ;   +--------+       |      |\n  | doo- |  ;       |            '------'\n  |  dad |--^--\u003c|---+            Database\n   '----'   ;\n            ;\n```\n\nBecomes this:\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/example.png)\n\n\n* [About Ascidia](#about-ascidia)\n* [Requirements](#requirements)\n* [Usage](#usage)\n* [Diagram Format](#diagram-format)\n* [Feedback](#feedback)\n* [Credits and Licence](#credits-and-licence)\n* [Related Projects](#related-projects)\n\n\nAbout Ascidia\n-------------\n\nAscidia converts ASCII-art technical diagrams, created using particular \nsymbols, into prettier raster and vector graphic formats. Technical diagrams\ncan be created and embedded within plain text documentation (source code \ncomments, for example) so that they can be maintained in the same place. Later,\nthe diagrams can be rendered as images ready for publishing.\n\nAscidia was inspired by similar applications of this type, namely [Ditaa] \nand [ASCIItoSVG]. It also takes inspiration from the philosophy of John \nGruber's [Markdown], which aims to define a rich text format using intuitive \nformatting rules in place of the syntactic clutter of a markup language.\nAscidia attempts to do the same for ASCII diagrams, by defining a set of \npatterns which are as recognisable in raw text as they are in their rendered \nform.\n\nAscidia is, apparently, another name for the [Sea Squirt].\n\n[Ditaa]: http://ditaa.sourceforge.net/\n[ASCIItoSVG]: http://9vx.org/~dho/a2s/\n[Markdown]: http://daringfireball.net/projects/markdown/\n[Sea Squirt]: http://en.wikipedia.org/wiki/Sea_squirt\n\n\nRequirements\n------------\n\nAscidia requires the following:\n\n* [Python 3.10 or higher](http://python.org)\n* [PyCairo](http://www.cairographics.org/pycairo/)\n\n\nInstallation\n------------\n\nInstallation via [pipx](https://pipx.pypa.io) is recommended to avoid potential\nconflicts with other system-managed Python modules. Regular \n[pip](https://packaging.python.org/en/latest/tutorials/installing-packages/)\nwill work too, though.\n\nTo install the latest stable release from the\n[Python Package Index](https://pypi.org):\n\n    pipx install ascidia\n\nOr to install from Github:\n\n    pipx install git+https://github.com/Frimkron/Ascidia.git\n\nOr to install from the downloaded source code:\n\n1. Change into code directory\n2. `pipx install .`\n\nFinally, check the install by running:\n\n    ascidia --help\n\n\nUsage\n-----\n\n`ascidia [options] [file]`\n\n\n### Positional Arguments ###\n\n`file`\n\nPath to the input file to read. Use `-` to read from standard input. This is \nthe default.\n\n\n### Options ###\n\n`-h, --help`\n\nShow brief help text\n\n`-o, --outfile`\n\nPath to the output file to write. Use `-` to write to standard output. This is \nthe default if reading from standard input, otherwise defaults to \n`\u003cinput-file-name\u003e.\u003coutput-extension\u003e`.\n\n`-f, --foreground`\n\nThe foreground colour, as comma-separated RGB values between 0 and 1. Some \nbasic predefined colour names are also supported (\"black\", \"red\", \"blue\", etc).\nDefaults to black.\n\n`-b --background`\n\nThe background colour, as comma-separated RGB values between 0 and 1. Some\nbasic predefined colour names are also supported (\"black\", \"red\", \"blue\", etc).\n\"none\" can also be used to use a transparent background. Defaults to white.\n\n`-c, --charheight`\n\nThe height to render each character as, in pixels. This will affect the overall\nwidth and height of the output. Defaults to 24.\n\n`-t --type`\n\nThe output format. Options are as follows:\n\n* `svg` - Scalable Vector Graphics format. An XML document describing the \n  diagram as a set of shape-drawing instructions.\n* `png` - PNG format. A losslessly-compressed raster image format.\n\nDefaults to `png`.\n\n`-q, --quiet`\n\nIf specified, causes informational output to be suppressed. Note that such \noutput is omitted anyway when writing the diagram to standard output.\n\n\n### Examples ###\n\nConvert the ASCII diagram `diagram.txt` to a PNG image:\n\n\t$ ascidia diagram.txt\n\t\n\nConvert diagram `foobar.txt` to the SVG file `result.svg`:\n\n\t$ ascidia -o result.svg foobar.txt\n\t\n\nConvert the output of `mycommand` to an SVG file called `output`:\n\n\t$ mycommand | ascidia -o output -t svg -\n\n\n### Invoking from Python Code ###\n\nAscidia can be invoked as a Python library, as per the following example:\n\n``` python\n\nimport ascidia as asc\n\n# create diagram object from string\ndiagram = asc.process_diagram(\"\"\"\\\n.---.    +-------+    +-----+\n| ? |---\u003e|  abc  |\u003c--\u003e|     |\n'---'    +-------+    '._.-.|\n\"\"\")\n\n# configure output preferences\nprefs = asc.OutputPrefs(fgcolour=asc.NAMED_COLOURS[\"blue\"])\n\n# write to a png file. SvgOutput takes the same arguments but the stream \n# passed to it should be in text mode instead\nwith open('example.png', 'wb') as stream:\n    asc.PngOutput.output(diagram, stream, prefs)\n    \n```\n\n\nDiagram Format\n--------------\n\nAscidia reads ASCII character data with Unix line endings and converts it to an\nimage, recognising particular character patterns as diagram elements. The \nfollowing subsections describe the patterns that Ascidia understands.\n\n* [Lines](#lines)\n\t* [Horizontal Lines](#horizontal-lines)\n\t* [Vertical Lines](#vertical-lines)\n\t* [Diagonal Lines](#diagonal-lines)\n\t* [Square Corners](#square-corners)\n\t* [Rounded Corners](#rounded-corners)\n\t* [Hops](#hops)\n* [Boxes](#boxes)\n\t* [Rectangular Boxes](#rectangular-boxes)\n\t* [Rounded Boxes](#rounded-boxes)\n\t* [Rhombus Boxes](#rhombus-boxes)\n\t* [Elliptical Boxes](#elliptical-boxes)\n\t* [Diamond Boxes](#diamond-boxes)\n* [Connectors](#connectors)\n\t* [Arrows](#arrows)\n\t* [Enclosed Arrows](#enclosed-arrows)\n\t* [Crow's Feet](#crows-feet)\n\t* [Diamond Connectors](#diamond-connectors)\n* [Symbols](#symbols)\n\t* [Stick Figures](#stick-figures)\n\t* [Storage Symbols](#storage-symbols)\n\t* [Document Symbols](#document-symbols)\n* [Misc](#misc)\n\t* [Text](#text)\n\n\n### Lines ###\n\nAscidia recognises horizontal, vertical and diagonal lines of any length. Lines\ncan be on their own, or attached to [Boxes](#boxes) or \n[Connectors](#connectors). They may have [square](#square-corners) or \n[rounded](#rounded-corners) corners.\n\n\n#### Horizontal Lines\n\nExample Input\n\n```\t\n----------\t\n- - - - - \n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/horiz-lines.png)\n\nSolid horizontal lines consist of one or more dash or hyphen `-` characters.\n\nDashed horizontal lines consist of alternating dash or hyphen `-` characters, \nand space characters. Note, a dashed horizontal line must begin with a \nhyphen and end with a space. Dashed horizontal lines have a minimum length of\n4:\n\n```\t\n- - \n```\n\nNote that single line characters with text beside them are not recognised as\nlines:\n\n```\t\n---test\n\n-test\n```\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/hline-text.png)\n\n\n#### Vertical Lines\n\nExample Input\n\n```\t\n| ;\n| ;\n| ;\n| ;\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/vert-lines.png)\n\nSolid vertical lines consist of one or more vertical-bar or pipe `|` characters.\n\nDashed vertical lines consist of one or more semi-colon `;` characters.\n\nNote that single line characters with text beside them are not recognised as \nlines:\n\n```\t\n|\t\n|test   |test\n|\n```\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/vline-text.png)\n\n\n#### Diagonal Lines\n\nExample Input\n\n```\t\n  /  ,  \\  `\n /  ,    \\  `\n/  ,      \\  `\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/diag-lines.png)\n\nSolid, right-leaning diagonal lines consist of one or more forwardslash `/` \ncharacters. \n\nDashed, right-leaning diagonal lines consist of one or more comma `,` \ncharacters.\n\nSolid, left-leaning diagonal lines consist of one or more backslash `\\` \ncharacters.\n\nAnd dashed, left-leaning diagonal lines consist of one or more grave-accent or \nbacktick ` characters.\n\nNote, the line characters should line up diagonally. Also, single line \ncharacters with text beside them are not recognised as lines:\n\n```\t\n\\     \n \\test  \\test\n  \\\n```\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/dline-text.png)\n\n\n#### Square Corners\n\nExample Input\n\n```\t\n    +---+\n|   |   |\n|   |   +\n+---+    \\ \n       ---+---\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/sq-corners.png)\n\nSquare line corners are constructed using plus `+` characters. \n\nCorners may be placed at the intersection of one or more \n[horizontal](#horizontal-lines), [vertical](#vertical-lines) or \n[diagonal](#diagonal-lines) lines.\n\n\n#### Rounded Corners\n\nExample Input\n\n```\t\n    .---. \n|   |   |\n|   |   :\n'---'    \\\n       ---'---\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/rnd-corners.png)\n\nRounded line corners that curve upwards are constructed using apostrophe or \nsingle-quote `'` characters.\n\nFor corners that curve downwards, full-stop or period characters `.` are used.\n\nCorners that join lines above to lines below are constructed using colon `:` \ncharacters.\n\nCorners may be placed at the intersection of one or more \n[horizontal](#horizontal-lines), [vertical](#vertical-lines) or \n[diagonal](#diagonal-lines) lines.\n\n\n#### Hops\n\nExample Input\n\n```\t\n   |        |        |\n---)---  ---(---  ---^---\n   |        |        |\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/hops.png)\n\nHops are often used to indicate that two crossing lines are not connected to \neach other.\n\nA hop may be placed at the intersection of any [horizontal](#horizontal-lines) \nline with any [vertical](#vertical-lines) line.\n\nA left-parenthesis or left-round-bracket `(` character, right-parenthesis `)` \ncharacter, or caret `^` character may be used.\n\n\n### Boxes ###\n\nBoxes enclose other content and may have [lines](#lines) or \n[connectors](#connectors) attached to their outer edges.\n\n\n#### Rectangular Boxes\n\nExample Input\n\n```\t\n+-------+\n|   A   |\n|  Box  |\n+-------+\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/rect-box.png)\n\nRectangular boxes are used to represent many things including class, processes \nand database tables.\n\nRectangular boxes use pipe `|` characters for the sides, hyphen `-` characters \nfor the top and bottom, and plus `+` characters for the corners. They may have \na minimum size of 1 x 1:\n\n```\t\n+-+\n| |\n+-+\n```\n\nDashed lines may be used for the sides instead of solid lines. Here, the sides \nare semi-colon `;` characters and the top an bottom are constructed with \nalternating hyphen `-` and space characters. Note, dashed lines must start \nwith a hyphen and end with a space:\n\n```\t\n+- - - - +\n;   A    ;\n;  Box   ;\n+- - - - +\n```\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/dash-rect-box.png)\n\nRectangular boxes may have separator lines to partition their content, allowing\nfor the creation of tables or UML class boxes. Hyphen `-` characters are used\nfor horizontal separators and pipe `|` characters for vertical separators. At\nthe intersection of two separator lines, either pipe or hyphen may be used. \nNote, each partitioned section inside the box must be at least 1 x 1 in size:\n\n```\t\n+-----------+\n| A | B | C |\n|-----------|\n| 1 | 50|   |\n| 24|   | 7 |\n+-----------+\n```\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/sep-rect-box.png)\n\n\n#### Rounded Boxes\n\nExample Input\n\n```\t\n.-------.\n|   A   |\n|  Box  |\n'-------'\t\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/round-box.png)\n\nRounded boxes use pipe `|` characters for the sides and hyphen `-` characters \nfor the top and bottom. The top left and top right corners are full-stop or \nperiod `.` characters. The bottom left and right corners are apostrophe or\nsingle-quote characters `'`. Rounded boxes have a minimum size of 1 x 1:\n\n```\t\n.-.\n| |\n'-'\n```\n\nAlternatively, forwardslash `/` and backslash `\\` characters may be used for\nthe corners:\n\n```\t\n/-------\\\n|   A   |\n|  Box  |\n\\-------/\n```\n\nDashed lines may be used for the sides instead of solid lines. Here, the sides \nare semi-colon `;` characters and the top an bottom are constructed with \nalternating hyphen `-` and space characters. Note, dashed lines must start \nwith a hyphen and end with a space:\n\n```\t\n.- - - - .\n;   A    ;\n;  Box   ;\n'- - - - '\n```\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/dash-round-box.png)\n\n\n#### Rhombus Boxes\n\nExample Input\n\n```\t\n   +------+\n  /  A   /\n /  Box /\n+------+\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/rhom-box.png)\n\nRight-leaning rhombus or parallelogram boxes are sometimes used to represent\nI/O in data flow diagrams.\n\nRhombus boxes consist of hyphen or dash `-` characters for the top and bottom, \nforwardslash `/` characters for the sides, and plus `+` characters for the \ncorners. Rhombus boxes have a minimum size of 1 x 1:\n\n```\t\n  +-+\n / /\t\n+-+\n```\n\n\n#### Elliptical Boxes\n\nExample Input\n\n```\t\n .-----.\n|   A   |\n|  Box  |\n '-----'\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/ell-box.png)\n\nElliptical or circular boxes are used to represent many things including\nstates and data flow starts and ends.\n\nElliptical boxes consist of hyphen or dash `-` characters for the top and \nbottom and pipe or vertical-bar `|` characters for the sides. The top\nleft and top right corners are full-stop or period `.` characters, and the \nbottom left and bottom right corners are apostrophe or single-quote `'` \ncharacters. Note, ellipses differ subtly from [rounded boxes](#rounded-boxes)\nin that the sides are offset from the corners by one character.\n\nEllipses have a minimum size as follows:\n\n```\t\n .-.\n|   |\n '-'\n```\n\nElliptical boxes may use slashes in conjunction with the period-apostrophe \ncorners to make large ellipses a bit more rounded. Here, the top left and \nbottom right corners use forwardslash `/` characters, and the top right and \nbottom left corners use backslash `\\` characters. Multiple slashes may be used \nfor long diagonal corners. The periods and apostrophes must be on the top and \nbottom rows, respectively:\n\n```\t\n   .----.\t\n  /      \\\n /        \\\n|          |\n|          |\n \\        /\n  \\      /\n   '----'\n\n```\n\n\n#### Diamond Boxes\n\nExample Input\n\n```\t\n     .'.\n   .' A '.\n  \u003c  Box  \u003e\n   '.   .'\n     '.'\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/diam-box.png)\n\nDiamond-shaped boxes are used to represent a decision point in data flow \ndiagrams.\n\nDiamond boxes use a left chevron or angle-bracket `\u003c` character for the \nleft side and a right chevron or angle-bracket `\u003e` character for the right \nside. The diagonal lines use alternating full-stop or period `.` characters and\napostrophe or single-quote characters `'`. Note, the top and bottom peaks may \nbe periods or apostrophes. Diamonds have a minimum size of 1 x 1:\n\n```\t\n . \n\u003c \u003e\n '\n```\n\n\n### Connectors ###\n\nConnectors can be attached to [lines](#lines) and/or [boxes](#boxes).\n\n\n#### Arrows\n\nExample Input\n\n```\t\n      ^        |\n\u003c---  |  ---\u003e  |\n      |        v\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/arrows.png)\n\nArrowheads may be attached to the end of any [horizontal](#horizontal-lines) \nor [vertical](#vertical-lines) line.\n\nLeft-pointing arrowheads use the left chevron or left angle-bracket `\u003c` \ncharacter.\n\nUp-pointing arrowheads use the hat or caret `^` character.\n\nRight-pointing arrowheads use the right chevron or right angle-bracket `\u003e`\ncharacter.\n\nDown-pointing arrowheads use the letter vee `v` character, either uppercase or \nlowercase.\n\nAn arrowhead pointing at a [box](#boxes) will be rendered flush against it:\n\n```\t\n+---+\n|   |\u003c----\n+---+\n```\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/arrow-box.png)\n\n\n#### Enclosed Arrows\n\nExample Input\n\n```\t\n       /_\\          |\n\u003c|---   |   ---|\u003e  _|_\n        |          \\ /\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/enc-arrows.png)\n\nEnclosed, empty arrowheads are used in UML class diagrams to represent \ninheritance.\n\nEnclosed arrowheads may be attached to the end of almost any \n[horizontal](#horizontal-lines) or [vertical](#vertical-lines) line. Note, \nhowever, that *the line must be 2 or more characters long*.\n\nLeft-pointing arrowheads consist of a left chevron or angle-bracket character \n`\u003c`, followed by a vertical-bar or pipe `|` character.\n\nUp-pointing arrowheads consist of a forwardslash `/` character, followed by an \nunderscore `_` character, and finally a backslash `\\` character.\n\nRight-pointing arrowheads consist of a vertical-bar or pipe `|` character, \nfollowed by a right chevron or angle-bracket character `\u003e`.\n\nDown-pointing arrowheads are constructed by placing an underscore `_` character\non either side of the vertical line, then on the next row, backslash `\\` \nfollowed by space, followed by forwardslash `/`.\n\nAn arrowhead pointing at a [box](#boxes) will be rendered flush against it:\n\n```\t\n+---+\n|   |\u003c|---\n+---+\n```\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/enc-arrow-box.png)\n\n\n#### Crow's Feet\n\nExample Input\n\n```\t          \n                             \n          +---+              |\n+---+     |   |     +---+    ^\n|   |\u003e--  +---+  --\u003c|   |  +---+\n+---+       v       +---+  |   |\n            |              +---+            \n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/crowsfeet.png)\n\nCrow's feet are often used in entity-relationship diagrams to indicate a \none-to-many relationship.\n\nCrow's feet connectors can be used to join any [horizontal](#horizontal-lines)\nor [vertical](#vertical-lines) line to any [box](#boxes).\n\nOn the right side of a box, the right chevron or angle-bracket `\u003e` character is\nused.\n\nOn the bottom side of a box, the letter vee `v` character is used, uppercase or\nlowercase.\n\nOn the left side of a box, the left chevron or angle-bracket `\u003c` character is \nused.\n\nOn the top side of a box, the hat or caret `^` character is used.\n\n\n#### Diamond Connectors\n\nExample Input\n\n```\t\n            +---+               | |\n            |   |               | ^\n+---+       +---+       +---+   ^ #\n|   |\u003c\u003e---   ^ ^   ---\u003c\u003e|   |   v v\n|   |\u003c#\u003e--   v #   --\u003c#\u003e|   |  +---+\n+---+        | v        +---+  |   |\n             | |               +---+\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/dmd-connectors.png)\n\nDiamond-shaped connectors are used in UML class diagrams to represent \ncomposition or \"has-a\" relationships.\n\nDiamond connectors can be used to join any [horizontal](#horizontal-lines)\nor [vertical](#vertical-lines) line to any [box](#boxes). They come in empty\nand filled varieties.\n\nEmpty, horizontal diamond connectors consist of a left chevron or angle-bracket\n`\u003c` character, followed by a right chevron or angle-bracket `\u003e` character. \n\nFilled horizontal diamond connectors are similar, but with a hash or pound `#`\ncharacter in the middle.\n\nEmpty, vertical diamond connectors consist of a hat or caret `^` character with\na letter vee `v` character below it, uppercase or lowercase.\n\nFilled vertical diamond connector are similar, but with a hash or pound `#`\ncharacter in the middle.\n\n\n### Symbols ###\n\nAscidia supports a number of commonly-used symbols, converted to ASCII \nrepresentations.\n\n\n#### Stick Figures\n\nExample Input\n\n```\t\n O\n-|-\n/ \\\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/stick-figure.png)\n\nStick figures are often used to represent the point at which a human being \ninteracts with a system.\n\nThe stick figure's head is either a letter oh `O` character (uppercase or \nlowercase) or a zero `0` character. The midsection on the middle row consists\nof a dash or hyphen `-` character, followed by a vertical-bar or pipe `|`\ncharacter, followed by another dash `-` character. The legs on the final row\nconsist of a forwardslash `/` character, followed by a space, followed by a \nbackslash `\\` character.\n\n\n#### Storage Symbols\n\nExample Input\n\n```\t\n.----.\n'----'\n| DB |\n'----'\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/storage.png)\n\nStorage cylinder symbols are often used in system architecture diagrams to \nrepresent some kind of storage device such as a database or hard disk.\n\nThe storage symbol uses dash or hyphen `-` characters for the horizontal lines\nand vertical-bar or pipe `|` characters for the vertical lines. The \ndownward-curving corners are full-stop or period `.` characters, and the \nupward-curving corners are apostrophe or single-quote `'` characters.\n\nThe symbol may vary in width or height, but has a minimum size as follows:\n\n```\t\n           .----.\n.-------.  '----'  .-.\n'-------'  |    |  '-'\n| Wide  |  |tall|  | |\n'-------'  |    |  '-'\n           '----'  min\n```\n\n#### Document Symbols\n\nExample Input\n\n``` \n+-------+  +----.\n| File  |  |   |_\\\n|       |  | File |\n|       |  |      |  \n'.__.--.|  +------+\n\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/document.png)\n\nDocument symbols are often used to represent a computer file or physical\ndocument.\n\nThe document symbol is constructed like a regular [box](#rectangular-boxes), but\nwith either a folded corner or a wavy bottom line, or both.\n\nThe folded corner consists of a period `.`, then pipe `|` underscore `_` \nbackslash `\\` on the line below so that the period is above the underscore.\n\nThe wavy line consists of apostraphe `'`, period `.`, one or more underscores \n`_`, period `.`, one or more hyphens `-`, period `.` and `pipe`. There may be \nmultiple waves, and each peak and trough can use multiple hypens or underscores\nrespectively:\n\n``` \n+-----------+  +-------------+\n|           |  |             |\n'.____.----.|  '._.-._.-._.-.|\n\n```\n\nDocument boxes have a minimum size as follows:\n\n``` \n+-----+  +-.\n|     |  ||_\\\n'._.-.|  |   |\n         +---+\n```\n\n### Misc ###\n\n#### Text\n\nExample Input\n\n```\t\n  The quick brown fox\njumps over the lazy dog\n```\n\nExample Output\n\n![](https://raw.github.com/Frimkron/Ascidia/master/rm-images/text.png)\n\nCharacter data which is not recognised as a diagram element is written to\nthe output as plain text. The position of each character is preserved.\n\n\nFeedback\n--------\n\nAny and all feedback is much appreciated. Please submit suggestions and bug \nreports to the [Github project page][], or otherwise send me an [email][].\n\n[Github project page]: https://github.com/Frimkron/Ascidia\n[email]: mailto:mfrimston@gmail.com\n\n\nCredits and Licence\n-------------------\n\nWritten by Mark Frimston\n\nProject page: \u003chttps://github.com/Frimkron/Ascidia\u003e  \nHomepage: \u003chttp://markfrimston.co.uk\u003e  \nEmail: \u003cmfrimston@gmail.com\u003e  \n\nReleased under the MIT License. See LICENSE.txt for the full text of this \nlicense.\n\n\nRelated Projects\n----------------\n\nSome other related projects that you might find interesting:\n\n* [Ditaa](http://ditaa.sourceforge.net/) - A similar, more popular ASCII\n  diagram converter written in Java\n* [Asciidia](https://github.com/aurora/asciidia) - A similar project with a\n  very similar name (it has an extra 'i'), in PHP. Creates ditaa-like\n  diagrams, directory trees, syntax-diagrams and identicons.\n* [ASCIItoSVG](http://9vx.org/~dho/a2s/) - Another ASCII diagram converter,\n  influenced by Markdown and written in PHP\n* [Asciio](http://search.cpan.org/dist/App-Asciio/lib/App/Asciio.pm) - A Perl\n  application for drawing ASCII diagrams using a graphical user interface\n* [AsciiFlow](http://www.asciiflow.com) - An online editor for drawing ASCII\n  diagrams\n* [Fossil Draw](http://www.fossildraw.com/) - Another online ASCII diagram\n  editor\n* [Text Bunny](http://www2.b3ta.com/_bunny/texbunny.gif) - an ASCII bunny\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFrimkron%2FAscidia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FFrimkron%2FAscidia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFrimkron%2FAscidia/lists"}