Help language development. Donate to The Perl Foundation

WWW::MermaidInk zef:antononcube last updated on 2023-04-18

9ed3ad940c4111f3fc02b6ccc6fa1fb447e6b692/

WWW::MermaidInk Raku package

The function mermaid-ink of the Raku package "WWW::MermaidInk" gets images corresponding to Mermaid-js specifications via the web Mermaid-ink interface of Mermaid-js.

For a "full set" of examples see the file MermaidInk_woven.html.


Usage

use WWW::MermaidInk
loads the package.

mermaid-ink($spec)
retrieves an image defined by the spec $spec from Mermaid's Ink Web interface.

mermaid-ink($spec format => 'md-image')
returns a string that is a Markdown image specification in Base64 format.

mermaid-ink($spec file => fileName)
exports the retrieved image into a specified PNG file.

mermaid-ink($spec file => Whatever)
exports the retrieved image into the file $*CMD ~ /out.png.

Details & Options


Examples

Basic Examples

Generate a flowchart from a Mermaid specification:

```raku, results=asis use WWW::MermaidInk;

'graph TD WL --> |ZMQ|Python --> |ZMQ|WL' ==> mermaid-ink(format=>'md-image')

![](data:image/png;base64,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)


Create a Markdown image expression from a class diagram:

```raku, results=asis
my $spec = q:to/END/;
classDiagram
    Animal <|-- Duck
    Animal <|-- Fish
    Animal <|-- Zebra
    Animal : +int age
    Animal : +String gender
    Animal: +isMammal()
    Animal: +mate()
    class Duck{
        +String beakColor
        +swim()
        +quack()
    }
    class Fish{
        -int sizeInFeet
        -canEat()
    }
    class Zebra{
        +bool is_wild
        +run()
    }
END

mermaid-ink($spec, format=>'md-image')    

Scope

The first argument can be a list of pairs -- the corresponding Mermaid-js graph is produced. Here are the edges of directed graph:

```raku, results=asis my @edges = '1' => '3', '3' => '1', '1' => '4', '2' => '3', '2' => '4', '3' => '4';

[1 => 3 3 => 1 1 => 4 2 => 3 2 => 4 3 => 4]


Here is the corresponding mermaid-js image:

```raku, results=asis
mermaid-ink(@edges, format=>'md-image')


Command Line Interface (CLI)

The package provides the CLI script mermaid-ink. Here is its help message:

mermaid-ink --help
# Usage:
#   mermaid-ink <spec> [-o|--file=<Str>] [--format=<Str>] -- Diagram image for Mermaid-JS spec (via mermaid.ink).
#   mermaid-ink [<words> ...] [-o|--file=<Str>] [--format=<Str>] -- Command given as a sequence of words.
#   
#     <spec>             Mermaid-JS spec.
#     -o|--file=<Str>    File to export the image to. [default: '']
#     --format=<Str>     Format of the result; one of "asis", "base64", "md-image", or "none". [default: 'md-image']

Flowchart

This flowchart summarizes the execution path of obtaining Mermaid images in a Markdown document:

graph TD
    UI[/User input/]
    MS{{Mermaid-ink server}}
    Raku{{Raku}}
    MDnb>Markdown document]
    MDIC[[Input cell]]
    MDOC[[Output cell]]
    MI[mermaid-ink]
    TCP[[Text::CodeProcessing]]
    UI --> MDIC -.- MDnb
    MDIC --> MI -.- TCP
    MI --> |spec|MS
    MS --> |image|MI
    MI --> MDOC -.- MDnb
    MDnb -.- TCP -.- Raku

References

Articles

[AA1] Anton Antonov, "Interactive Mermaid diagrams generation via Markdown evaluation", (2022), RakuForPrediction at WordPress.

Functions and packages

[AAf1] Anton Antonov, MermaidInk Mathematica resource function, (2022-2023), Wolfram Function Repository.

Mermaid resources