Extension:MscGen
From MediaWiki.org
|
MscGen Release status: unknown |
|
|---|---|
| Implementation | Tag |
| Description | This extension allows to display Message Sequence Chart's. |
| Author(s) | Ruud Schramp |
| License | No license specified |
| Download | see below |
MscGen extension allows to display Message Sequence Chart's. It allows to display message flows. Flowchart was my first attempt to include such in MediaWiki, but recently I found the neat tool from http://www.mcternan.me.uk/mscgen/index.html which had been inspired by graphViz.
The code needs some cleaning up, but works.
This code should be installed in extensions/MSC.php and then included in LocalSettings.php.
<?php # CoffMan (http://www.wickle.com) code adapted from EasyTimeline extension. # To use, include this file from your LocalSettings.php # To configure, set members of $wgGraphVizSettings after the inclusion # July 2006, Ruud Schramp # modified GraphViz extension to use mscgen # http://www.mcternan.me.uk/mscgen/index.html $wgExtensionCredits['parserhook'][] = array( 'name' => 'MscGen', 'author' => 'Ruud Schramp', 'url' => 'http://www.mediawiki.org/wiki/Extension:MscGen', 'description' => 'Allows to display Message Sequence Chart\'s', ); class MSCSettings { var $mscgenCommand; }; $wgMSCSettings = new MSCSettings; $wgMSCSettings->mscgenCommand = "/usr/bin/mscgen"; $wgExtensionFunctions[] = "wfMSCExtension"; function wfMSCExtension() { global $wgParser; $wgParser->setHook( "mscgen", "renderMscGen" ); } function renderMscGen( $timelinesrc ) { global $wgUploadDirectory, $wgUploadPath, $IP, $wgMSCSettings, $wgArticlePath, $wgTmpDirectory; $hash = md5( $timelinesrc ); $dest = $wgUploadDirectory."/mscgen/"; if ( ! is_dir( $dest ) ) { mkdir( $dest, 0777 ); } if ( ! is_dir( $wgTmpDirectory ) ) { mkdir( $wgTmpDirectory, 0777 ); } $fname = $dest . $hash; // echo $fname; if ( ! ( file_exists( $fname.".png" ) || file_exists( $fname.".err" ) ) ) { $handle = fopen($fname, "w"); fwrite($handle, $timelinesrc); fclose($handle); $cmdline = wfEscapeShellArg( $wgMSCSettings->mscgenCommand) . " -T png -o " . wfEscapeShellArg( $fname. ".png") . " " . " -i " . wfEscapeShellArg( $fname ) . " 2>&1 >" . wfEscapeShellArg( $fname. ".err") . " && rm " . wfEscapeShellArg( $fname. ".err"); $ret = `{$cmdline}`; # echo $cmdline; # exit; # break; # echo "ADIOS"; if ($ret) unlink ( $fname. ".err"); unlink($fname); } @$err=file_get_contents( $fname.".err" ); if ( $err != "" ) { $err_esc=htmlentities($err); $txt = "<div id=\"toc\"><tt>$err_esc</tt></div>"; } else { $txt = "<img usemap=\"#{$hash}\" src=\"{$wgUploadPath}/mscgen/{$hash}.png\">"; } return $txt; }
[edit] Conversion from Flowchart to Mscgen
You can use the following perl script to convert from flowchart to mscgen
# program to convert <flowchart> </flowchart> to # <mscgen> </mscgen> # author: shishir birmiwal # ref: http://meta.wikimedia.org/wiki/MscGen # http://meta.wikimedia.org/wiki/Flowchart # method of use: # put flowchart syntax text into a file, say flowchart.txt # (don't forget to include <flowchart> </flowchart>) # call using # '''perl -w flowchart2mscgen.pl flowchart.txt > mscgen.txt''' $inside_flowchart = 0; foreach $line (<>) { if ($line=~m/\<\s*flowchart\s*\>/ig) { $line=~s/:/,/g; chomp $line; $line.=";\n"; $line=~s/\<\s*flowchart\s*\>/\<mscgen\>\nmsc\ \{\n\ \ \ /ig; $inside_flowchart = 1; print $line; $line=""; } if ($line=~m/\<\s*\/flowchart\s*\>/ig) { $line=~s/\<\s*\/flowchart\s*\>/\}\n\<\/mscgen\>/ig; $inside_flowchart = 0; } if ($inside_flowchart == 1) { if ($line=~m/^\s*(.+)\s+(.+)\s+(.+)/g) { print " $1->$2 \t[ label = \"$3\" ]; \n"; } } else { print $line; } }
[edit] See also
- Extension:GraphViz — for other drawings (graphs)

