====== 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 DokuWiki plugins directory ''{dokuwiki}/lib/plugins'' (make sure, included subdirectories are unpacked correctly); 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 .= "
**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 =====