1*5153720fSfkaag71<?php 2*5153720fSfkaag71/** 3*5153720fSfkaag71 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4*5153720fSfkaag71 * @author Brend Wanders <b.wanders@utwente.nl> 5*5153720fSfkaag71 */ 6*5153720fSfkaag71// must be run within Dokuwiki 7*5153720fSfkaag71if(!defined('DOKU_INC')) die('Meh.'); 8*5153720fSfkaag71 9*5153720fSfkaag71/** 10*5153720fSfkaag71 * The multi-purpose link type. 11*5153720fSfkaag71 */ 12*5153720fSfkaag71class plugin_strata_type_link extends plugin_strata_type { 13*5153720fSfkaag71 function render($mode, &$renderer, &$triples, $value, $hint) { 14*5153720fSfkaag71 if(preg_match('/^[a-zA-Z0-9\.]+>{1}.*$/u',$value)) { 15*5153720fSfkaag71 // Interwiki 16*5153720fSfkaag71 $interwiki = explode('>',$value,2); 17*5153720fSfkaag71 $renderer->interwikilink($value,$hint, strtolower($interwiki[0]), $interwiki[1]); 18*5153720fSfkaag71 19*5153720fSfkaag71 } elseif(preg_match('/^\\\\\\\\[^\\\\]+?\\\\/u',$value)) { 20*5153720fSfkaag71 $renderer->windowssharelink($value,$hint); 21*5153720fSfkaag71 22*5153720fSfkaag71 } elseif(preg_match('#^([a-z0-9\-\.+]+?)://#i',$value)) { 23*5153720fSfkaag71 $renderer->externallink($value,$hint); 24*5153720fSfkaag71 25*5153720fSfkaag71 } elseif(preg_match('<'.PREG_PATTERN_VALID_EMAIL.'>',$value)) { 26*5153720fSfkaag71 $renderer->emaillink($value,$hint); 27*5153720fSfkaag71 28*5153720fSfkaag71 } else { 29*5153720fSfkaag71 $renderer->internallink(':'.$value, $hint); 30*5153720fSfkaag71 } 31*5153720fSfkaag71 32*5153720fSfkaag71 return true; 33*5153720fSfkaag71 } 34*5153720fSfkaag71 35*5153720fSfkaag71 function normalize($value, $hint) { 36*5153720fSfkaag71 // strip off leading [[ and trailing ]] to offer a more 37*5153720fSfkaag71 // user-friendly syntax. 38*5153720fSfkaag71 if(substr($value,0,2) == '[[' && substr($value,-2) == ']]') { 39*5153720fSfkaag71 $value = substr($value,2,-2); 40*5153720fSfkaag71 } 41*5153720fSfkaag71 42*5153720fSfkaag71 if(!preg_match('/^[a-zA-Z0-9\.]+>{1}.*$/u',$value) 43*5153720fSfkaag71 && !preg_match('/^\\\\\\\\[^\\\\]+?\\\\/u',$value) 44*5153720fSfkaag71 && !preg_match('#^([a-z0-9\-\.+]+?)://#i',$value) 45*5153720fSfkaag71 && !preg_match('<'.PREG_PATTERN_VALID_EMAIL.'>',$value)) { 46*5153720fSfkaag71 $page = new plugin_strata_type_page(); 47*5153720fSfkaag71 return $page->normalize($value,null); 48*5153720fSfkaag71 } 49*5153720fSfkaag71 50*5153720fSfkaag71 return $value; 51*5153720fSfkaag71 } 52*5153720fSfkaag71 53*5153720fSfkaag71 function getInfo() { 54*5153720fSfkaag71 return array( 55*5153720fSfkaag71 'desc'=>'Creates a link. This type is multi-purpose: it handles external links, interwiki links, email addresses, windows shares and normal wiki links (basically any link DokuWiki knows of). The optional hint will be used as link title.', 56*5153720fSfkaag71 'hint'=>'The link title' 57*5153720fSfkaag71 ); 58*5153720fSfkaag71 } 59*5153720fSfkaag71} 60