diff --git a/inc/common.php b/inc/common.php index 7f71696cdf3ffe9a1dc050b92811d84aa0968bee..ff32fe17a7c3df4a817091fcba619ec04525234a 100644 --- a/inc/common.php +++ b/inc/common.php @@ -834,6 +834,17 @@ function clientismobile() { return false; } +/** + * check if a given link is interwiki link + * + * @param string $link the link, e.g. "wiki>page" + * @return bool + */ +function link_isinterwiki($link){ + if (preg_match('/^[a-zA-Z0-9\.]+>/u',$link)) return true; + return false; +} + /** * Convert one or more comma separated IPs to hostnames * diff --git a/inc/parser/handler.php b/inc/parser/handler.php index f477d36f86a0398ec4d00012ce1e1fa6a777bba9..a5e7f39cd0fec923b984141b0ed7e12c511579fb 100644 --- a/inc/parser/handler.php +++ b/inc/parser/handler.php @@ -446,7 +446,7 @@ class Doku_Handler { //decide which kind of link it is - if ( preg_match('/^[a-zA-Z0-9\.]+>{1}.*$/u',$link[0]) ) { + if ( link_isinterwiki($link[0]) ) { // Interwiki $interwiki = explode('>',$link[0],2); $this->_addCall( @@ -693,8 +693,8 @@ function Doku_Handler_Parse_Media($match) { $cache = 'cache'; } - // Check whether this is a local or remote image - if ( media_isexternal($src) ) { + // Check whether this is a local or remote image or interwiki + if (media_isexternal($src) || link_isinterwiki($src)){ $call = 'externalmedia'; } else { $call = 'internalmedia'; diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php index 2efb1d831a7587f580e52c3846dd96b12182a8d1..72498182040f807495b83135b2783fd4b61eec82 100644 --- a/inc/parser/xhtml.php +++ b/inc/parser/xhtml.php @@ -1186,6 +1186,11 @@ class Doku_Renderer_xhtml extends Doku_Renderer { */ function externalmedia($src, $title = null, $align = null, $width = null, $height = null, $cache = null, $linking = null, $return = false) { + if(link_isinterwiki($src)){ + list($shortcut, $reference) = explode('>', $src, 2); + $exists = null; + $src = $this->_resolveInterWiki($shortcut, $reference, $exists); + } list($src, $hash) = explode('#', $src, 2); $noLink = false; $render = ($linking == 'linkonly') ? false : true;