# Liquid Diagrams
[![Gem](https://img.shields.io/gem/v/liquid-diagrams.svg?label=Gem&style=flat-square)](https://rubygems.org/gems/liquid-diagrams)
[![Test](https://img.shields.io/github/workflow/status/zhustec/liquid-diagrams/Test?label=Test&style=flat-square)](https://github.com/zhustec/liquid-diagrams/actions?query=workflow%3ATest)
[![Feature](https://img.shields.io/travis/com/zhustec/liquid-diagrams.svg?label=Feature&style=flat-square)](https://travis-ci.com/zhustec/liquid-diagrams)
[![Lint](https://img.shields.io/github/workflow/status/zhustec/liquid-diagrams/Lint?label=Style&style=flat-square)](https://github.com/zhustec/liquid-diagrams/actions?query=workflow%3ALint)
[![Coverage](https://img.shields.io/coveralls/github/zhustec/liquid-diagrams?label=Coverage&style=flat-square)](https://coveralls.io/github/zhustec/liquid-diagrams)
[![License](https://img.shields.io/github/license/zhustec/liquid-diagrams.svg?label=License&style=flat-square)](https://github.com/zhustec/liquid-diagrams/blob/master/LICENSE)
Liquid Diagrams is a liquid plugins for creating diagrams, it is inspired by [asciidoctor-diagram](https://github.com/asciidoctor/asciidoctor-diagram). Currently support:
- [**Blockdiag**](http://blockdiag.com/en/)
- [**Bitfield**](https://github.com/wavedrom/bitfield)
- [**Erd**](https://github.com/BurntSushi/erd)
- [**GraphViz**](http://graphviz.org/)
- [**Mermaid**](https://mermaid-js.github.io/mermaid/)
- [**Nomnoml**](http://nomnoml.com/)
- [**PlantUML**](https://plantuml.com/)
- [**Svgbob**](https://ivanceras.github.io/svgbob-editor/)
- [**Syntrax**](https://kevinpt.github.io/syntrax/)
- [**Vega**](https://vega.github.io/vega/)
- [**Vegalite**](https://vega.github.io/vega-lite/)
- [**Wavedrom**](https://wavedrom.com/).
**NOTE:** This project is under development currently.
- [Installation](#installation)
- [Usage](#usage)
- [Supported diagrams](#supported-diagrams)
- [Register diagrams](#register-diagrams)
- [Use diagrams tag](#use-diagrams-tag)
- [Parse Configurations](#parse-configurations)
- [Prerequisites](#prerequisites)
- [Configurations](#configurations)
- [Blockdiag](#blockdiag)
- [Bitfield](#bitfield)
- [Erd](#erd)
- [Graphviz](#graphviz)
- [Mermaid](#mermaid)
- [Nomnoml](#nomnoml)
- [PlantUML](#plantuml)
- [State Machine Cat](#state-machine-cat)
- [Svgbob](#svgbob)
- [Syntrax](#syntrax)
- [Vega](#vega)
- [Wavedrom](#wavedrom)
- [Contributing](#contributing)
- [License](#license)
- [Code of Conduct](#code-of-conduct)
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'liquid-diagrams'
```
And then execute:
```bash
bundle install
```
Or install it yourself as:
```bash
gem install liquid-diagrams
```
## Usage
```ruby
# Require `liquid_diagrams` or `liquid-diagrams`
require 'liquid_diagrams'
```
### Supported diagrams
```ruby
# All supported diagrams
LiquidDiagrams.diagrams
#=> [:actdiag, :blockdiag, :graphviz, :mermaid, ...]
```
### Register diagrams
Diagrams must be registered before use, no diagrams is registered by default.
```ruby
# Registered diagrams
LiquidDiagrams.registered_diagrams
# => {}
# Register one by one
LiquidDiagrams.register_diagram :graphviz
# Register in batch
LiquidDiagrams.register_diagrams :blockdiag, :mermaid
# Registered diagrams
LiquidDiagrams.registered_diagrams
# => {:graphviz => LiquidDiagrams::Blocks::GraphvizBlock, ...}
```
You can register all diagrams with:
```ruby
LiquidDiagrams.register_diagrams(LiquidDiagrams.diagrams)
```
### Use diagrams tag
Now you can use diagrams tag in liquid template:
```ruby
content = <<~CONTENT
{% blockdiag %}
blockdiag {
A -> B -> C -> D;
A -> E -> F -> G;
}
{% endblockdiag %}
CONTENT
template = Liquid::Template.parse(content)
template.render
# => ""
```
### Parse Configurations
Configurations can be set for each diagrams when parse content:
```ruby
content = <<~CONTENT
{% blockdiag %}
blockdiag {
A -> B -> C -> D;
A -> E -> F -> G;
}
{% endblockdiag %}
CONTENT
options = {
blockdiag: {
'scale' => 3
}
# options for other diagrams
}
template = Liquid::Template.parse(content, liquid_diagrams: options)
template.render
# => ""
```
## Prerequisites
You still need to install some dependencies, please refer to [Prerequisites](Prerequisites.md).
## Configurations
### Blockdiag
| Config | Type | Default | Description |
| ----------- | ------------- | ----------- | --------------------------------------- |
| `antialias` | `boolean` | unspecified | Pass diagram image to anti-alias filter |
| `font` | `string` | unspecified | use FONT to draw diagram |
| `fontmap` | `string` | unspecified | use FONTMAP file to draw diagram |
| `size` | `int` x `int` | unspecified | Size of diagram (ex. 320x240) |
### Bitfield
| Config | Type | Default | Description |
| ------------ | -------- | ------------ | ---------------- |
| `fontfamily` | `string` | "sans-serif" | font family |
| `fontweight` | `string` | "normal" | font weight |
| `fontsize` | `number` | 14 | font size |
| `lanes` | `number` | 2 | rectangle lanes |
| `vspace` | `number` | 80 | vertical space |
| `hspace` | `number` | 640 | horizontal space |
| `bits` | `number` | 32 | overall bitwidth |
### Erd
| Config | Type | Default | Description |
| ------------ | --------- | ----------- | ------------------------------------- |
| `config` | `string` | unspecified | Configuration file |
| `edge` | `string` | unspecified | Select one type of edge |
| `dot-entity` | `boolean` | unspecified | Use dot tables instead of HTML tables |
Available values:
- `edge`: `compound`, `noedge`, `ortho`, `poly`, `spline`
### Graphviz
| Config | Type | Default | Description |
| ------------------ | --------- | ----------- | ---------------------------- |
| `layout` | `string` | `dot` | Set layout engine |
| `graph_attributes` | see below | unspecified | Set default graph attributes |
| `node_attributes` | see below | unspecified | Set default node attributes |
| `edge_attributes` | see below | unspecified | Set default edge attributes |
**NOTICE:** attributes can be:
- `String`: eg. `color=red`
- `Array`: eg. `['color=blue', 'fontsize=14]` or `[['color', 'blue'], ['fontsize', '14']]`
- `Hash`: eg. `{ color: 'green', fontsize: '14' }`
### Mermaid
| Config | Type | Default | Description |
| ----------------- | -------- | ------- | ------------------ |
| `width` | `int` | 800 | Width of the page |
| `height` | `int` | 600 | Height of the page |
| `backgroundColor` | `string` | white | Background color |
| `theme` | `string` | default | Theme of the chart |
### Nomnoml
Currently no configurations
### PlantUML
Currently no configurations
### State Machine Cat
| Config | Type | Default | Description |
| ------------ | -------- | ---------- | ------------------------ |
| `input-type` | `string` | `smcat` | Input type |
| `engine` | `string` | `dot` | Layout engine to use |
| `direction` | `string` | `top-down` | Direction of the diagram |
Available values:
- `input-type`: `smcat`, `scxml`, `json`
- `egine`: `dot`, `circo`, `fdp`, `neato`, `osage`, `twopi`
- `direction`: `top-down`, `bottom-top`, `left-right`, `right-left`
### Svgbob
| Config | Type | Default | Description |
| -------------- | -------- | ------- | -------------------------- |
| `font-family` | `string` | arial | Font |
| `font-size` | `int` | 12 | Font size |
| `scale` | `int` | 1 | Scale the entire svg |
| `stroke-width` | `int` | 2 | stroke width for all lines |
### Syntrax
| Config | Type | Default | Description |
| ------------- | --------- | ----------- | ---------------------- |
| `scale` | `int` | 1 | Scale image |
| `style` | `string` | unspecified | Style config file |
| `transparent` | `boolean` | unspecified | Transparent background |
### Vega
| Config | Type | Default | Description |
| ------- | ----- | ------- | ----------- |
| `scale` | `int` | 1 | Scale image |
### Wavedrom
Currently no configurations
## Contributing
Bug reports and pull requests are welcome on GitHub at This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/zhustec/liquid-diagrams/blob/master/CODE_OF_CONDUCT.md).
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
## Code of Conduct
Everyone interacting in the `liquid-diagrams` project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](CODE_OF_CONDUCT.md).