====== 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 ); } }