asciidiagram alternatives and similar packages
Based on the "Text" category.
Alternatively, view asciidiagram alternatives based on common mentions on social networks and blogs.
-
pandoc-citeproc
Library and executable for using citeproc with pandoc -
scholdoc
Fork of Pandoc for the implementation of a ScholarlyMarkdown parser -
prettyprinter
A modern, extensible and well-documented prettyprinter. -
skylighting
A Haskell syntax highlighting library with tokenizers derived from KDE syntax highlighting descriptions -
blaze-from-html
A blazingly fast HTML combinator library for Haskell. -
commonmark
Pure Haskell commonmark parsing library, designed to be flexible and extensible -
regex-genex
Given a list of regexes, generate all possible strings that matches all of them. -
regex-applicative
Regex-based parsing with an applicative interface -
pandoc-csv2table
A Pandoc filter that renders CSV as Pandoc Markdown Tables. -
servant-checked-exceptions
type-level errors for Servant APIs. -
pretty-show
Tools for working with derived Show instances in Haskell. -
double-conversion
A fast Haskell library for converting between double precision floating point numbers and text strings. It is implemented as a binding to the V8-derived C++ double-conversion library. -
text-format
A Haskell text formatting library optimized for ease of use and high performance. -
diagrams-pandoc
A pandoc filter to express diagrams inline using the haskell EDSL diagrams. -
boxes
A pretty-printing library for laying out text in two dimensions, using a simple box model. -
hyphenation
Knuth-Liang Hyphenation for Haskell based on TeX hyphenation files
Clean code begins in your IDE with SonarLint
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of asciidiagram or a related project?
README
Asciidiagram
A freeform ASCII diagram parser for Haskell (inspired by Ditaa)
Without introduction, Asciidiagram transform this:
/---------+
+---------+ | |
| ASCII +---->| Diagram |
+---------+ | |
| {flat} | +--+------/
\---*-----/<=======/
::: .flat .filled_shape { fill: #DDD; }
into that: [Simili logo](../master/docimages/baseExample.png?raw=true "docimages/baseExample.svg")
Lines and arrows
The basic syntax of asciidiagrams is made of lines made outnof '-' and '|' characters. They can be connected with anchorsnlike '+' (direct connection) or '\' and '/' (smooth connections)n
-----
-------
| |
| |
| \----
|
+-----
[Simple lines](../master/docimages/simple_lines.png?raw=true "docimages/simple_lines.svg")
You can use dashed lines by using :
{.haskell .identifier} for vertical
lines or =
{.haskell .identifier} fornhorizontal lines.
-----
-=-----
| :
| |
| \----
|
+--=--
[Dashed lines](../master/docimages/dashed_lines.png?raw=true "docimages/dashed_lines.svg")
Arrows are made out of the '<', '>', '^' and 'v'ncharacters.nIf the arrows are not connected to any lines, the text is left as is.n
^
|
|
<----+---->
| < > v ^
|
v
[Arrows](../master/docimages/arrows.png?raw=true "docimages/arrows.svg")
Shapes
If the lines are closed, then it is detected as such and rendered differently
+------+
| |
| +--+
| | |
+---+--+ |
| |
+-----+
[Complex closed](../master/docimages/complexClosed.png?raw=true "docimages/complexClosed.svg")
If any of the segment posess one of the dashing markers (':' or '=') Then the full shape will be dashed.
+--+ +--+ +=-+ +=-+
| | : | | | | :
+--+ +--+ +--+ +-=+
[dashing closed](../master/docimages/dashingClosed.png?raw=true "docimages/dashingClosed.svg")
Any of the angle of a shape can curved one of the smooth corner anchor ('\' or '/')
/--+ +--\ +--+ /--+
| | | | | | | |
+--+ +--+ \--+ +--+
/--+ /--\ /--+ /--\ .
| | | | | | | |
+--/ +--+ \--/ +--/
/--\ .
| |
\--/
.
[Curved corner](../master/docimages/curvedCorner.png?raw=true "docimages/curvedCorner.svg")
bulletdoc Adding a '*' on a line or on a shape add a little circle on it. If the bullet is not attached to any shape or lines, then it will be render like any other text.
*-*-*
| | *----*
+---/ |
* * *
[Bullets](../master/docimages/bulletTest.png?raw=true "docimages/bulletTest.svg")
When used at connection points, it behaves like the '+' anchor.
Styles
The shapes can ba annotated with a tag like `{tagname}`. Tags will be inserted in the class attribute of the shape and can then be stylized with a CSS.
+--------+ +--------+
| Source +-------->| op1 |
| {src} | \---+----/
+--------+ |
+-------*<--/
+------+<--| op2 |
| Dest | +-------+
|{dst} |
+------+
::: .src .filled_shape { fill: #AAF; }
::: .dst .filled_shape { stroke: #FAA; stroke-width: 3px; }
[Styles](../master/docimages/styleExample.png?raw=true "docimages/styleExample.svg")
Inline css styles are introduced with the ":::" prefix at the beginning of the line. They are introduced in the style section of the generated CSS file
The generated geometry also possess some predefined class which are overidable:
dashed_elem
is applyied on every dashed element.filled_shape
is applyied on every closed shape.arrow_head
is applied on arrow head.bullet
on every bullet placed on a shape or line.line_element
on every line element, this include the arrow head.
You can then customize the appearance of the diagram as you want.
Hierarchical styles
Starting with version 1.3, all shapes, text and lines are hierachised, a shape within a shape will be integrated within the same group. This allows more complex styling:
/------------------------------------------------------\ .
|s100 |
| /----------------------------\ |
| |s1 /--------\ | e1 /--------\ |
| | *--->| s2 | +------->| s10 | |
| +----+ \---+----/ | \--------/ |
| | i4 | | | ^ |
| |{ii}+---------\| e1 {lo} | | |
| +----+ vv | ealarm | | e0 /-------------\ .
| | /--------\ +-----------/ +---------->| s50 |
| +----\ | s3 {lu}| | | \-------------/
| | o5 | e2 \--+-----/ | |
| |{oo}|<---------/ |<-\ |
| \-+--+--------------------+--/ | |
| | | | eReset |
| | \-----/ |
| v |
| /--------\ |
| | s20 | {li} |
| \--------/ |
\------------------------------------------------------/
::: .li .line_element { stroke: purple; }
::: .li .arrow_head, .li text { fill: gray; }
::: .lo .line_element { stroke: blue; }
::: .lo .arrow_head, .lo text { fill: green; }
::: .lu .line_element { stroke: red; }
::: .lu .arrow_head, .lu text { fill: orange; }
::: .ii .filled_shape { fill: #DDF; }
::: .ii text { fill: blue; }
::: .oo .filled_shape { fill: #DFD; }
::: .oo text { fill: pink; }
[DeepStyles](../master/docimages/deepStyleExample.png?raw=true "docimages/deepStyleExample.svg")
In the previous example, we can see that the lines color are 'shape scoped' and the tag applied to the shape above them applies to them
Shapes
From version 1.3, you can substitute the shape of your element with one from a shape library. Right now the shape library is relatively small:
+---------+ +----------+
| | | |
| circle | | |
| | | io |
|{circle} | | {io} |
+---------+ +----------+
+----------+ +----------+
|document | | |
| | | |
| | | storage |
|{document}| | {storage}|
+----------+ +----------+
::: .circle .filled_shape { shape: circle; }
::: .document .filled_shape { shape: document; }
::: .storage .filled_shape { shape: storage; }
::: .io .filled_shape { shape: io; }
[Shape exaple](../master/docimages/shapeExample.png?raw=true "docimages/shapeExample.svg")
The mechanism use CSS styling to change the shape, if a CSS rule possess a
shape
pseudo attribute, then the generated shape is replaced with a SVG use
tag with the value of the shape attribute as href
But, you can create your own style library and change the default stylesheet.
You can retrieve the default one with the shell command asciidiagram
--dump-library default-lib.svg
You can then add your own symbols tag in it and use it by calling asciidiagram
--with-library your-lib.svg
.