DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:processing

processing Plugin

Compatible with DokuWiki

2005-09-22 and later.

plugin FIXME

Last updated on
2010-08-25
Provides
Syntax
Repository
Source
Conflicts with
s5

This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.

Tagged with highlight, javascript, processing, syntax

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 called processing.js, 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.

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

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:processing');
	}
    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;
    }
}
?>

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?
plugin/processing.txt · Last modified: 2016-01-26 17:30 by Aleksandr