DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:regexreplacer

regExReplacer Plugin

Compatible with DokuWiki

Rincewind, maybe more

plugin Replaces text by regular expressions.

Last updated on
2012-01-26
Provides
Syntax

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

Similar to replace

Tagged with macro, plugins, regex, replace

The Code was adapted from replace.

This Plugin creates a syntax-plugin for each row in your config-file.

Installation

  1. Install the plugin using the Plugin Manager and the download URL above, which points to latest version of the plugin. Refer to Plugins on how to install plugins manually.
  2. create the config file in the default conf-path

Configuring the Plugin

The Plugin uses the config-file to create syntax_plugins dynamically. The File consists of three columns:

  1. parserPattern
  2. preg_replace search-string
    :!: followed by a tab
  3. preg_replace replacement-string

example config

replaceMLU.conf
# inhaltsverzeichnisse
\@toc\:[^\r\n!]*[!|\r?\n]	\@toc\:([^\r\n!]*)!?	{{topic>${1}}}
# tagcloud
\@cloud[^\r\n]*[\r\n?|\n]	\@cloud([^\r\n]*)	~~TAGCLOUD${1}~~
# no-cache-feature
\@nocache[\r\n?|\n]	\@nocache	~~NOCACHE~~
# set tags
\@tags\:[^\r\n]*[\r\n?|\n]	\@tags\:([^\r\n]*)	{{tag>${1}}}
# include template
\@tpl\:[^\r\n]*[\r\n?|\n] \@tpl\:([^\r\n]*)	{{template>${1}}}@info: Eingebettet aus //[[${1}]]//*
# newpage-helper
\@newpage[\r\n?|\n]	    \@newpage	{{NEWPAGE>}}
\@newpage\:[^\r\n]*[\r\n?|\n]	\@newpage\:([^\r\n]*)	{{NEWPAGE>${1}}}
# workflow easing
\@fixme\:[^\r\n]*[\r\n?|\n]	\@fixme\:([^\r\n]*)	<wrap>FIXME ${1}{{tag>todo fixme}}</wrap>
# simple info-frame
\@info\:[^\r\n]*[\r\n?|\n]	\@info\:([^\r\n]*)	<wrap info>${1}</wrap>

plugin-script

syntax.php
<?php
/**
 * Plugin modMLU: regular expressions to generate a standarized wiki-syntax.
 */
 
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'syntax.php');
 
class Syntax_Plugin_modMLU extends DokuWiki_Syntax_Plugin {
    public static $subs=0;
    protected static $modMLUconf;
    public static $classDir;
    protected $realClassName = 'wiki mods @ mlu';
    function getInfo() {
        return array(
            'author' => 'Robert Jäckel',
            'email'  => 'robert.jaeckel@verwaltung.uni-halle.de',
            'date'   => '2012-01-12',
            'name'   =>  $this->realClassName,
            'desc'   => 'Anpassungen des Wikis an der MLU Halle-Wittenberg',
            'url'    => 'http://verwaltung.uni-halle.de',
        );
    }
    function getType() { return 'substition'; }
    function getAllowedTypes() { return array('container','substition','protected','disabled','formatting','paragraphs'); }
    function render($mode, &$renderer, $data) { return true; }
    function getSort() { return 999; }
    function generateReplaceClass($setup/*=array($pattern,$search,$replace)*/) {
        $dir = self::$classDir.'modMLU_'.($idx=static::$subs++);
        @mkdir($dir);
	$file = $dir.'\\syntax.php';
	$fHandle = fopen($file,'w+');
	$generateStr = "<?php \r\n";
	$generateStr .="// file: $file\r\n\r\n";
	$generateStr .="// this file was generated automatically by modMLU-Syntax-Plugin\r\n\r\n";
	$generateStr .='if(!defined(\'DOKU_INC\')) define(\'DOKU_INC\',realpath(dirname(__FILE__).\'/../../\').\'/\');if(!defined(\'DOKU_PLUGIN\')) define(\'DOKU_PLUGIN\',DOKU_INC.\'lib/plugins/\');';
	$generateStr .='require_once(\''.__FILE__."');\r\n\r\n";
	$generateStr .= 'class Syntax_Plugin_modMLU_'.$idx.' extends '.get_class($this)."{\r\n";
	foreach($setup as $k=>$v) $generateStr.='protected $'.$k.' = \''.str_replace('\'','\\\'',$v)."';\r\n";
	$generateStr .= 'protected $subIDX='.$idx.";\r\n}\r\n\r\n";
	fwrite($fHandle,$generateStr);
	fclose($fHandle);
	return $idx;
        // generate subclass
    }
    function Syntax_Plugin_modMLU() {
        //read cfg-file and create subclasses
	if(isset(self::$modMLUconf)) return true;
	self::$classDir = dirname(__FILE__).'\\..\\';
	$cfg = self::$modMLUconf = confToHash(DOKU_CONF . 'replaceMLU.conf');
	$requires = '';
	foreach($cfg as $pMatch=>$sAction) {
            $aAction = explode("\t",$sAction,2);
	    $idx=$this->generateReplaceClass(array('pattern'=>$pMatch,'search'=>$aAction[0],'replace'=>$aAction[1],'realClassName'=>$this->realClassName.'_'.self::$subs));
	}
 
    }
    function connectTo($mode) {
	if(!$this->pattern) return;
	$this->Lexer->addSpecialPattern($this->pattern,$mode, 'plugin_modMLU_'.$this->subIDX);
        //check for search string else return
    }
    function handle($match, $state, $pos, &$handler) {
	if ($this->nesting) {
	    $handler->_addCall('cdata', array($match), $pos);
        }
        else {
            $this->nesting = true;
            $nestedWriter = & new Doku_Handler_Nest($handler->CallWriter);
            $handler->CallWriter = & $nestedWriter;
	    /* add magic here */
	    $this->Lexer->parse(preg_replace('/'.$this->search.'/',$this->replace,$match)." \\\\ ");
 
            $nestedWriter->process();
            $handler->CallWriter = & $nestedWriter->CallWriter;
            $handler->calls[count($handler->calls) - 1][2] = $pos;
            $this->nesting = false;
        }
        return false;
    }
}

Problem

  • How can I use this plugin? The download link is somewhat yield, so cannot install it.
  • However I've mkdir regexreplacer in the plugin directory and mv modMLU.php syntax.php and insert it into the new directory. Finally the plugin manager can recognize it but it doesn't work with its config file yet. (i.e. replaceMLU.conf file in the dokuwiki conf directory). Actually the conf directory of my server is not in the default location because I'd moved it for security. What is the problem? Why it doesn't work?
plugin/regexreplacer.txt · Last modified: 2015-04-04 06:23 by PatrickBrown