====== asciisvg plugin ====== ---- plugin ---- description: Plugin for displaying good looking diagrams on wiki pages author : Mohammad Rahmani email : m.rahmani@aut.ac.ir type : Syntax lastupdate : 2011-06-25 compatible : Lemming, Anteater, Rincewind depends : conflicts : similar : tags : media, images, diagram, svg ---- ===== Description ===== [[http://www1.chapman.edu/~jipsen/svg/asciisvgcommands.html | ASCIIsvg]] is a layer of JavaScript functions that can be used in any HTML document to produce inline Scalable Vector Graphics viewable with both [[http://www.microsoft.com/windows/products/winfamily/ie/default.mspx | Internet Explorer]]+[[http://www.adobe.com/svg | Adobe SVGviewer]] and [[http://www.mozilla.com/en-US/firefox/ | Firefox 1.5 and later]]. [[http://www1.chapman.edu/~jipsen/svg/asciisvgcommands.html | ASCIIsvg]] has been developed by Prof. [[http://www1.chapman.edu/%7Ejipsen | Peter Jipsen]] at the university of Chapman. This plugin integrates [[http://www1.chapman.edu/~jipsen/svg/asciisvgcommands.html | ASCIIsvg]] into DokuWiki. ===== Installation ===== - Download the source archive (~11k)from [[http://littlewikiplugins.codeplex.com/releases/view/68871|asciisvg]] - Unpack it in your Doku­Wiki plugins directory ''{dokuwiki}/lib/plugins'' (make sure, in­clu­ded sub­di­rec­to­ries are un­packed cor­rect­ly); this will create the following following folder: - ''{dokuwiki}/lib/plugins/asciisvg''. with the following files - ASCIIsvg127.js - d.svg - script.js - syntax.php Thats it! ===== Usage/Syntax ===== ASCIIsvg notation goes here **Example** initPicture(0,1,0) a=[0,0]; b=[1,1] rect(a,b) stroke='red' ellipse([.5,.5],.5,.25) stroke='blue' ellipse([.5,.5],.25,.5) * For details syntax of ASCIIsvg see [[http://www1.chapman.edu/~jipsen/svg/asciisvgcommands.html|ASCIIsvg command page]] * Also http://www1.chapman.edu/~jipsen/svg/asciisvg.html ===== plugin codes ===== ** syntax.php** * Rev. 0.20: Some bugs fixed, support for DokuWiki 2011-05-25a * Date: Thursday, June 23, 2011 */ // must be run within DokuWiki if(!defined('DOKU_INC')) die(); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_asciisvg extends DokuWiki_Syntax_Plugin { /** * return some info */ function getInfo(){ return array( 'author' => 'Mohammad Rahmani', 'email' => 'm.rahmani@aut.ac.ir', 'date' => '2008-08-03', 'name' => 'ASCIIsvg Plugin', 'desc' => 'Translating ASCII math notation to SVG graphics', 'url' => 'http://wiki.splitbrain.org/plugin:asciisvg', ); } function getType(){ return 'formatting'; } function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } function getSort(){ return 158; } function connectTo($mode) { $this->Lexer->addEntryPattern('(?=.*?)',$mode,'plugin_asciisvg'); } function postConnect() { $this->Lexer->addExitPattern('','plugin_asciisvg'); } /** * Handle the match */ public function handle($match, $state, $pos, &$handler){ switch ($state) { case DOKU_LEXER_ENTER : list($width, $height) = preg_split("/\//u", substr($match, 6, -1), 2); // if ($width="") $width="200"; // if ($height="") $height="200"; break; case DOKU_LEXER_UNMATCHED : return array($state, $match); break; case DOKU_LEXER_EXIT : return array($state, ''); break; } return array($state, array($width, $height)); } /** * Create output */ public function render($mode, &$renderer, $data) { if($mode != 'xhtml') return false; list($state, $match) = $data; switch ($state) { case DOKU_LEXER_ENTER : list($width, $height) = $match; $renderer->doc .= ""; break; case DOKU_LEXER_SPECIAL : break; } } } ?> **script.js** /* This script installs the ASCIIsvg JavaScript to be used through "asciisvg" plugin in Dokuwiki @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html @author Mohammad Rahmani Date: Sunday, 03 Aug. 2008 14:46:45 Rev. 0: exprimental Rev. 0.2: Some bugs fixed Date: Thursday, June 23, 2011 - all function in the previos script.js was deleted! - support for the latest version of Dokuwiki (2011-5-25a) */ // full address to ASCIIsvg main script document.write(''); ===== Samples ===== Here are some examples tested under DokuWiki. Simply copy paste them into a wiki page with installed asciisvg plugin. == Example 1 == initPicture(-2.2,2.2,-2.2) line([-2,-2],[2,2]) marker = 'arrowdot' line([-2,2],[2,-2]) == Example 2 == initPicture(-1,6,-1,6) axes() a = [0,0] b = [5,5] marker = 'dot' line(a,b) text(a,'a',belowright) text(b,'g',above) text(b,'b',right) text(b,'b',left) text(b,'b',below) text(b,'b',aboveleft) text(b,'b',aboveright) text(b,'b',belowleft) text(b,'b',belowright) stroke = 'red' path([a,[0,5],b,[5,0]]) stroke = 'green' marker = 'none' curve([a,[.25,0],[.5,.5],[1,1],[1.5,1.5]]) stroke = 'blue' circle([5,0],1) ellipse([0,5],1,2) stroke = 'purple' rect([0,0],[2,2],null,.5,1) marker = 'arrowdot' line(a,[5,0]) * More examples in [[http://math.chapman.edu/cgi-bin/math.pl?ASCIIsvg_Sandbox | ASCIIsvg sandbox]] * Asciisvg in use, see this image: [[http://littlewikiplugins.codeplex.com/documentation|asciisvg in use]] ===== ToDo ===== * Interested developers are invited to correct/modify the code to obey the DokuWiki rules. FIXME * This plugin supports ASCIIsvg 1.2.7. The newer version is included in [[http://www1.chapman.edu/~jipsen/mathml/asciimath.html | ASCIIMatML]] and does not supported by this plugin :!:. ===== Issues ===== - There is a conflict with [[plugin:jsmath]]. When [[plugin:asciisvg]] is installed jsMath does not work anymore. ===== Discussion =====