Skip to content

A remark plugin for Markdown that replaces graphs defined in `dot` with rendered SVGs.

License

Notifications You must be signed in to change notification settings

mwlynch/remark-graphviz

 
 

Repository files navigation

remark-graphviz

NPM Travis CI MIT License

Replaces graphs defined in dot with rendered SVGs.

Installation

$ npm install remark-graphviz

Usage

Graphs defined using dot can be referenced using a dot: title which will generate an SVG image.

[Link to a Graph](test/fixtures/assets/example.dot "dot:")
![Embed image of graph](test/fixtures/assets/example.dot "dot:")

Alternatively, graphs can be generated inline, by using dot (or circo) as the language identifier for a fenced code block.

```dot
digraph graphname {
  a -> b;
  b -> c;
  a -> c;
}
```

See this project's fixtures for more examples.

Example

Given a file, example.md, which contains the following Markdown:

# dot code block

```dot
digraph graphname {
  a -> b;
  b -> c;
  a -> c;
}
```

Using remark like follows:

var vfile = require('to-vfile');
var remark = require('remark');
var graphviz = require('remark-graphviz');

var example = vfile.readSync('example.md');

remark()
  .use(graphviz)
  .process(example, function (err, file) {
    if (err) throw err;

    console.log(String(file))
  });

Will result in an SVG being written relative to example.md, and the Markdown being transformed to:

# dot code block

![](./6b03e143dc2a47a93496133d692c44d5ec012b57.svg "`dot` image")

To change where the SVG's are written, set data.destinationFilePath on the vFile or pass destinationDir as an option to the plugin. The following examples shows how you could process a file from one directory and output the transformed file to another:

var vfile = require('to-vfile');
var remark = require('remark');
var graphviz = require('remark-graphviz');

var example = vfile.readSync('example.md');
example.data = {
  destinationFilePath: 'out/example.md'
};

remark()
  .use(graphviz)
  .process(example, function (err, file) {
    if (err) throw err;

    vfile.writeSync({ path: file.data.destinationFilePath });
  });

Both example.md and the generated SVG will reside in the /out directory.

Alternatively, you can pass the destination directory as an option:

var vfile = require('to-vfile');
var remark = require('remark');
var graphviz = require('remark-graphviz');

var example = vfile.readSync('example.md');

options = { destinationDir: 'out/'};

remark()
  .use(graphviz, options)
  .process(example, function (err, file) {
    if (err) throw err;

    vfile.writeSync({ path: file.data.destinationDir });
  });

Both example.md and the generated SVG will reside in the /out directory.

About

A remark plugin for Markdown that replaces graphs defined in `dot` with rendered SVGs.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%