From 6efc45a25e0ef5d61585c38faaeebb6cf265281f Mon Sep 17 00:00:00 2001 From: Dmitry Katsubo <dmitry.katsubo@gmail.com> Date: Thu, 20 Oct 2016 00:47:36 +0200 Subject: [PATCH] Implemented interwiki substitution for external images (issue #1614). --- inc/common.php | 11 +++++++++++ inc/parser/handler.php | 6 +++--- inc/parser/xhtml.php | 5 +++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/inc/common.php b/inc/common.php index 7f71696cd..ff32fe17a 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 f477d36f8..a5e7f39cd 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 2efb1d831..724981820 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; -- GitLab