This is an old revision of the document!
Table of Contents
processing plugin
Compatible with DokuWiki
2005-09-22 and later.
This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.
About this plugin
Processing is an environment that is widely being used for interaction design, interactive installations, graphic art, artistic programming, etc… A subset of functions of the processing environment has been ported to a single javascript file, which allows users to execute their code in a browser environment.
This plugin parses processing(java) code to the processing.js script (which for this plugin has been renamed 'script.js' to be compliant with the dokuwiki plugin format) and outputs the resulting java applet to the wiki, as well as the syntax highlighted sketch code.
Download and Installation
Download and install the plugin using the Plugin Manager using the URL given above. Refer to Plugins on how to install plugins manually.
Syntax and Usage
Using <processing>
and </processing>
a snippet of code is both highlighted and parsed trough to the Processing.js (included and renamed as script.js for plugin portability)
See http://wiki.edwindertien.nl/doku.php?id=software:dokuwiki-processing-plugin for examples.
The plugin syntax file:
- syntax.php
<?php /** * DokuWiki Plugin processing (Syntax Component) * * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html * @author Edwin Dertien <mail@edwindertien.nl> */ // must be run within Dokuwiki if (!defined('DOKU_INC')) die(); if (!defined('DOKU_LF')) define('DOKU_LF', "\n"); if (!defined('DOKU_TAB')) define('DOKU_TAB', "\t"); if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once DOKU_PLUGIN.'syntax.php'; require_once DOKU_INC.'inc/geshi.php'; require_once DOKU_INC.'inc/parser/code.php'; class syntax_plugin_processing extends DokuWiki_Syntax_Plugin { function getInfo() { return array('author' => 'Edwin Dertien', 'email' => 'mail@edwindertien.nl', 'date' => '2010-08-22', 'name' => 'Processing code Plugin', 'desc' => 'Include processing code and embedded processing.js applet', 'url' => 'http://www.dokuwiki.org/plugin:tutorial'); } function getType() { return 'substition'; } function getPType() { return 'normal'; } function getSort() { return 100; } function connectTo($mode) { $this->Lexer->addEntryPattern('<processing>',$mode,'plugin_processing'); } function postConnect() { $this->Lexer->addExitPattern('</processing>','plugin_processing'); } function handle($match, $state, $pos, &$handler){ $width = 300; $height = 300; switch ($state) { case DOKU_LEXER_ENTER : break; case DOKU_LEXER_MATCHED : break; case DOKU_LEXER_UNMATCHED : // ugly piece of string decomposition to get width and hight from the sketch $numbers = substr($match,strpos($match,"size(")+5,20); $width = trim(substr($numbers,0,strpos($numbers,","))); $height = trim(substr($numbers,strpos($numbers,",")+1,strpos($numbers,");")-strpos($numbers,",")-1)); return array($state,$match,$width,$height); break; case DOKU_LEXER_EXIT : break; case DOKU_LEXER_SPECIAL : break; } } function render($mode, &$renderer, $data) { if($mode == 'xhtml'){ list($state, $match,$width,$height) = $data; switch ($state) { case DOKU_LEXER_ENTER : break; case DOKU_LEXER_UNMATCHED : $renderer->doc .= "<script type=\"application/processing\">". $renderer->_xmlEntities($match). "</script><canvas width=\"". $width. "\" height=\"". $height. "\"></canvas>"; $renderer->code($match,'java'); $renderer->doc .= "<br>build with <a href=\"http://www.processing.org\">processing</a> and <a href=\"http://www.processingjs.org\">processing.js</a><br>"; break; case DOKU_LEXER_EXIT : break; default: break; } return true; } return false; } } ?>