====== processing Plugin ====== ---- plugin ---- description: FIXME author : Edwin Dertien email : mail@edwindertien.nl type : syntax lastupdate : 2010-08-25 compatible : 2005-09-22+ depends : conflicts : S5 similar : tags : !obsolete, javascript, processing, syntax highlight downloadurl: https://github.com/downloads/edwindertien/dokuwiki-plugin-processing/processing.zip bugtracker : https://github.com/edwindertien/dokuwiki-plugin-processing/issues sourcerepo : https://github.com/edwindertien/dokuwiki-plugin-processing donationurl: ---- Processing module used by this plugin is discontinued and deprecated. ===== About this plugin ===== [[http://processing.org/|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 called [[http://processingjs.org|processing.js]], which allows users to execute their code in a browser environment. This plugin parses processing(java) code to the [[http://processingjs.org|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. The plugin is pretty much a 0.0001 release. Some example sketches work, but by far not all of them. Also a number of extra features would increase usability tremendously. Any help or contribution is highly appreciated ==== Safety ==== This plugin allows users to execute their own javascript within the wiki. Although the processing.js function set is pretty harmless (screen output, mouse capture, etc) executing user scripts can be vulnerable. ===== Download and Installation ===== Search and install the plugin using the [[plugin:extension|Extension Manager]]. Refer to [[:Plugins]] on how to install plugins manually. ===== Syntax and Usage ===== Using '''' and '''' 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: */ // 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:processing'); } function getType() { return 'substition'; } function getPType() { return 'normal'; } function getSort() { return 100; } function connectTo($mode) { $this->Lexer->addEntryPattern('',$mode,'plugin_processing'); } function postConnect() { $this->Lexer->addExitPattern('','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 .= ""; $renderer->code($match,'java'); $renderer->doc .= "
build with processing and processing.js
"; break; case DOKU_LEXER_EXIT : break; default: break; } return true; } return false; } } ?>
===== Bugs, feature requests ===== * The java-applet is not parsed into a slideshow (s5). Anyone hints in a direction how to start solving this? * giving the download-link at the top of the highlighted code using ''$renderer->code($match,"java","filename.txt"'' gives a 404 link. Anyone hints how to fix this? * make source collapsible * not every processing sketch can be executed. Is there a way to include the *.js sources on top of the page? * check vulnerability?