====== relativelinks plugin ======
---- plugin ----
description: Replaces standard wiki-base-centric links with relative ones (anything which doesn't start with . or : is assumed to be relative to the current namespace
author : Andy Turner
email : public [at] ssbd [dot] net
type : Syntax
lastupdate : 2008-03-07
compatible :
depends :
conflicts :
similar :
tags : links namespace
----
====== Description ======
Whether it is of general interest to the wider community or not, I would prefer it if DokuWiki's links were relative to the current document's namespace. As such, I created this incredibly simple plugin (based upon the first syntax plugin example) which rewrites the links that don't start with ".", ".." or ":".
====== Discussion ======
"Works for me, does what I want" ;-)
Hmm, doesn't work for me. I noticed that it messes up external links... oops.
$event->data = preg_replace( "/\[\[([^:.][^\/]*?(?:\|.*?))\]\]/", '[[.:${1}]]', $event->data );
Updated the regexp so that it doesn't match links with slashes in the address. :-\
====== Code ======
*/
if(!defined('DOKU_INC')) die();
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'action.php');
class action_plugin_relativelinks extends DokuWiki_Action_Plugin {
/**
* return some info
*/
function getInfo(){
return array(
'author' => 'Andy Turner',
'email' => 'public [at] ssbd [dot] net',
'date' => '2008-03-07',
'name' => 'Relative Links',
'desc' => 'Replaces standard wiki-base-centric links with relative ones (anything which doesn\'t start with . or : is assumed to be relative to the current namespace)',
);
}
/**
* Register its handlers with the DokuWiki's event controller
*/
function register(Doku_Event_Handler $controller) {
$controller->register_hook('PARSER_WIKITEXT_PREPROCESS', 'BEFORE', $this, '_hookrellink');
}
/**
* Stick a colon in front of links... that's all :D
*
* @author Andy Turner
*/
function _hookrellink(&$event, $param) {
$event->data = preg_replace( "/\[\[([^:.][^\/]*?(?:\|.*?))\]\]/", '[[.:${1}]]', $event->data );
}
}