X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/74935b3e875bbefcff20f326e1978274e3d6edcb..37bf6114d5aa19180001aedd78fef84e2fd6c103:/doc/plugins/contrib/mscgen.mdwn?ds=sidebyside diff --git a/doc/plugins/contrib/mscgen.mdwn b/doc/plugins/contrib/mscgen.mdwn index 2985339d1..792aaa4e3 100644 --- a/doc/plugins/contrib/mscgen.mdwn +++ b/doc/plugins/contrib/mscgen.mdwn @@ -1,10 +1,24 @@ +[[!template id=plugin name=mscgen author="[[users/Tjgolubi]]"]] [[!tag type/widget]] -This plugin provides the mscgen [[ikiwiki/directive]]. +## NAME + +IkiWiki::Plugin::mscgen - embed message sequence chart + +## SYNOPSIS + +In the ikiwiki setup file, enable this plugin by adding it to the list of active plugins. + + add_plugins: + - mscgen + +## DESCRIPTION + +This plugin provides the msc [[ikiwiki/directive]]. This directive allows embedding [mscgen](http://www.mcternan.me.uk/mscgen/) -message sequence chart graphs in a page. +message sequence chart graphs in an ikiwiki page. -Here's an mscgen source example. +Here's an example that shows how an mscgen message sequence chart is embedded into an ikiwiki page. \[[!msc src=""" arcgradient = 8; @@ -21,116 +35,18 @@ Here's an mscgen source example. |||; """]] -And here's the resulting graph. +Security implications: to be determined. -[[!msc src=<<""" - arcgradient = 8; +This plugin borrows heavily from the [[graphviz|plugins/graphviz]] plugin written by [[JoshTriplett]]. - a [label="Client"],b [label="Server"]; +## PREREQUISITES + IkiWiki + mscgen + Digest::SHA - a=>b [label="data1"]; - a-xb [label="data2"]; - a=>b [label="data3"]; - a<=b [label="ack1, nack2"]; - a=>b [label="data2", arcskip="1"]; - |||; - a<=b [label="ack3"]; - |||; -"""]] +## DOWNLOAD -Security implications: to be determined. +* browse at GitHub: +* repo at git://github.com/tjgolubi/ikiwiki.mscgen.git -This plugin uses the [[!cpan Digest::SHA]] perl module. - -This plugin borrows heavily from the [[graphviz|plugins/graphviz]] plugin written by [[JoshTriplett]]. -I couldn't upload an attachment, so here's the plugin source. - -[[!format perl """ -#!/usr/bin/perl -# mscgen plugin for ikiwiki: render mscgen source as an image. -# Terry Golubiewski -# Derived from graphviz plugin by Josh Triplett. -package IkiWiki::Plugin::mscgen; - -use warnings; -use strict; -use IkiWiki 3.00; -use IPC::Open2; - -sub import { - hook(type => "getsetup", id => "mscgen", call => \&getsetup); - hook(type => "preprocess", id => "msc", call => \&graph); -} - -sub getsetup () { - return - plugin => { - safe => 1, - rebuild => undef, - section => "widget", - }, -} - -sub render_graph (\%) { - my %params = %{(shift)}; - - my $src = "msc {\n"; - $src .= $params{src}; - $src .= "\n}\n"; - - # Use the sha1 of the mscgen code as part of its filename. - eval q{use Digest::SHA}; - error($@) if $@; - my $dest=$params{page}."/msc-". - IkiWiki::possibly_foolish_untaint(Digest::SHA::sha1_hex($src)). - ".png"; - will_render($params{page}, $dest); - - if (! -e "$config{destdir}/$dest") { - my $pid; - my $sigpipe=0; - $SIG{PIPE}=sub { $sigpipe=1 }; - $pid=open2(*IN, *OUT, 'mscgen', '-Tpng', '-i-', '-o-'); - - # open2 doesn't respect "use open ':utf8'" - binmode (OUT, ':utf8'); - - print OUT $src; - close OUT; - - my $png; - { - local $/ = undef; - $png = ; - } - close IN; - - waitpid $pid, 0; - $SIG{PIPE}="DEFAULT"; - error gettext("failed to run mscgen") if $sigpipe; - - if (! $params{preview}) { - writefile($dest, $config{destdir}, $png, 1); - } - else { - # in preview mode, embed the image in a data uri - # to avoid temp file clutter - eval q{use MIME::Base64}; - error($@) if $@; - return ""; - } - } - - return "\n"; -} - -sub graph (@) { - my %params=@_; - $params{src} = "" unless defined $params{src}; - return render_graph(%params); -} - -1 -"""]]