Skip to content
Snippets Groups Projects
Commit 5aa9b7cc authored by andi's avatar andi
Browse files

removed bakfiles

darcs-hash:20050517204540-9977f-ad23f3daa6503158c1068c3e28808a7cd2147e11.gz
parent 32c04430
No related branches found
No related tags found
No related merge requests found
<?php
/**
* link format functions
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <andi@splitbrain.org>
* @deprecated part of the XHTML renderer
*/
trigger_error('deprecated parser.php included');
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
require_once(DOKU_INC.'conf/dokuwiki.php');
require_once(DOKU_INC.'inc/common.php');
/**
* Assembles all parts defined by the link formater below
* Returns HTML for the link
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function format_link_build($link){
//make sure the url is XHTML compliant (skip mailto)
if(substr($link['url'],0,7) != 'mailto:'){
$link['url'] = str_replace('&','&amp;',$link['url']);
$link['url'] = str_replace('&amp;amp;','&amp;',$link['url']);
}
//remove double encodings in titles
$link['title'] = str_replace('&amp;amp;','&amp;',$link['title']);
$ret = '';
$ret .= $link['pre'];
$ret .= '<a href="'.$link['url'].'"';
if($link['class']) $ret .= ' class="'.$link['class'].'"';
if($link['target']) $ret .= ' target="'.$link['target'].'"';
if($link['title']) $ret .= ' title="'.$link['title'].'"';
if($link['style']) $ret .= ' style="'.$link['style'].'"';
if($link['more']) $ret .= ' '.$link['more'];
$ret .= '>';
$ret .= $link['name'];
$ret .= '</a>';
$ret .= $link['suf'];
return $ret;
}
/**
* Link Formaters
*
* Each of these functions need to set
*
* $link['url'] URL to use in href=""
* $link['name'] HTML to enclose in <a> with proper special char encoding
* $link['class'] CSS class to set on link
* $link['target'] which target to use (blank) for current window
* $link['style'] Additonal style attribute set with style=""
* $link['title'] Title to set with title=""
* $link['pre'] HTML to prepend to link
* $link['suf'] HTML to append to link
* $link['more'] Additonal HTML to include into the anchortag
*
*/
/**
* format wiki links
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function format_link_wiki($link){
global $conf;
global $ID; //we use this to get the current namespace
//obvious setup
$link['target'] = $conf['target']['wiki'];
$link['style'] = '';
$link['pre'] = '';
$link['suf'] = '';
$link['more'] = 'onclick="return svchk()" onkeypress="return svchk()"';
$ns = getNS($ID);
//if links starts with . add current namespace
if(strpos($link['url'],'.')===0){
$link['url'] = $ns.':'.substr($link['url'],1);
}
//if link contains no namespace. add current namespace (if any)
if($ns !== false && strpos($link['url'],':') === false){
$link['url'] = $ns.':'.$link['url'];
}
//keep hashlink if exists
list($link['url'],$hash) = split('#',$link['url'],2);
$hash = cleanID($hash);
$file = wikiFN($link['url']);
$url = cleanID($link['url']);
//check alternative plural/nonplural form
if(!@file_exists($file) && $conf['autoplural']){
if(substr($url,-1) == 's'){
$try = substr($url,0,-1);
}else{
$try = $url.'s';
}
$tryfile = wikiFN($try);
if(@file_exists($tryfile)){
$file = $tryfile;
$url = $try;
}
}
//set class and name depending on file existence and content
if(@file_exists($file)){
$link['class']="wikilink1";
if ($conf['useheading'] && empty($link['name'])) {
$hl = getFirstHeading(io_readFile($file));
if ($hl) $link['name'] = $hl;
}
}else{
$link['class']="wikilink2";
}
//if no name set yet, use (unclean) link without namespace
if(empty($link['name'])){
if($conf['useslash']){
$nssep = '[:;/]';
}else{
$nssep = '[:;]';
}
$link['name'] = preg_replace('!.*'.$nssep.'!','',$link['url']);
}
$link['name'] = htmlspecialchars($link['name']);
//set title
$link['title'] = $url;
//construct the full link
$link['url'] = wl($url);
//add hash if exists
if($hash) $link['url'] .= '#'.$hash;
return $link;
}
/**
* format external URLs
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function format_link_externalurl($link){
global $conf;
//simple setup
$link['class'] = 'urlextern';
$link['target'] = $conf['target']['extern'];
$link['pre'] = '';
$link['suf'] = '';
$link['style'] = '';
$link['more'] = 'onclick="return svchk()" onkeypress="return svchk()"';
$link['url'] = $link['url']; //keep it
$link['title'] = htmlspecialchars($link['url']);
if(!$link['name']) $link['name'] = htmlspecialchars($link['url']);
if($conf['relnofollow']) $link['more'] .= ' rel="nofollow"';
//thats it :-)
return $link;
}
/**
* format windows share links
*
* this only works in IE :-(
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function format_link_windows($link){
global $conf;
global $lang;
//simple setup
$link['class'] = 'windows';
$link['target'] = $conf['target']['windows'];
$link['pre'] = '';
$link['suf'] = '';
$link['style'] = '';
//Display error on browsers other than IE
$link['more'] = 'onclick="if(document.all == null){alert(\''.htmlspecialchars($lang['nosmblinks'],ENT_QUOTES).'\');}" onkeypress="if(document.all == null){alert(\''.htmlspecialchars($lang['nosmblinks'],ENT_QUOTES).'\');}"';
if(!$link['name']) $link['name'] = htmlspecialchars($link['url']);
$link['title'] = htmlspecialchars($link['url']);
$link['url'] = str_replace('\\','/',$link['url']);
$link['url'] = 'file:///'.$link['url'];
return $link;
}
/**
* format email addresses
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function format_link_email($link){
global $conf;
//simple setup
$link['class'] = 'mail';
$link['target'] = '';
$link['pre'] = '';
$link['suf'] = '';
$link['style'] = '';
$link['more'] = '';
$link['name'] = htmlspecialchars($link['name']);
//shields up
if($conf['mailguard']=='visible'){
//the mail name gets some visible encoding
$link['url'] = str_replace('@',' [at] ',$link['url']);
$link['url'] = str_replace('.',' [dot] ',$link['url']);
$link['url'] = str_replace('-',' [dash] ',$link['url']);
}elseif($conf['mailguard']=='hex'){
for ($x=0; $x < strlen($link['url']); $x++) {
$encode .= '&#x' . bin2hex($link['url'][$x]).';';
}
$link['url'] = $encode;
}
$link['title'] = $link['url'];
if(!$link['name']) $link['name'] = $link['url'];
$link['url'] = 'mailto:'.$link['url'];
return $link;
}
/**
* format interwiki links
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function format_link_interwiki($link){
global $conf;
//obvious ones
$link['class'] = 'interwiki';
$link['target'] = $conf['target']['interwiki'];
$link['pre'] = '';
$link['suf'] = '';
$link['more'] = 'onclick="return svchk()" onkeypress="return svchk()"';
//get interwiki short name
list($wiki,$link['url']) = split('>',$link['url'],2);
$wiki = strtolower(trim($wiki)); //always use lowercase
$link['url'] = trim($link['url']);
if(!$link['name']) $link['name'] = $link['url'];
//encode special chars
$link['name'] = htmlspecialchars($link['name']);
//set default to google
$url = 'http://www.google.com/search?q=';
$ico = 'google';
// Initialize as NULL - for the first fn call
static $iwlinks = NULL;
// load interwikilinks if needed
if (!$iwlinks) $iwlinks = file('conf/interwiki.conf');
//add special case 'this'
$iwlinks[] = 'this '.DOKU_URL.'{NAME}';
//go through iwlinks and find URL for wiki
foreach ($iwlinks as $line){
$line = preg_replace('/#.*/','',$line); //skip comments
$line = trim($line);
list($iw,$iwurl) = preg_split('/\s+/',$line);
if(!$iw or !$iwurl) continue; //skip broken or empty lines
//check for match
if(strtolower($iw) == $wiki){
$ico = $wiki;
$url = $iwurl;
break;
}
}
//if ico exists set additonal style
if(@file_exists('interwiki/'.$ico.'.png')){
$link['style']='background: transparent url('.DOKU_BASE.'interwiki/'.$ico.'.png) 0px 1px no-repeat;';
}elseif(@file_exists('interwiki/'.$ico.'.gif')){
$link['style']='background: transparent url('.DOKU_BASE.'interwiki/'.$ico.'.gif) 0px 1px no-repeat;';
}
//do we stay at the same server? Use local target
if( strpos($url,DOKU_URL) === 0 ){
$link['target'] = $conf['target']['wiki'];
}
//replace placeholder
if(preg_match('#\{(URL|NAME|SCHEME|HOST|PORT|PATH|QUERY)\}#',$url)){
//use placeholders
$url = str_replace('{URL}',urlencode($link['url']),$url);
$url = str_replace('{NAME}',$link['url'],$url);
$parsed = parse_url($link['url']);
if(!$parsed['port']) $parsed['port'] = 80;
$url = str_replace('{SCHEME}',$parsed['scheme'],$url);
$url = str_replace('{HOST}',$parsed['host'],$url);
$url = str_replace('{PORT}',$parsed['port'],$url);
$url = str_replace('{PATH}',$parsed['path'],$url);
$url = str_replace('{QUERY}',$parsed['query'],$url);
$link['url'] = $url;
}else{
//default
$link['url'] = $url.urlencode($link['url']);
}
$link['title'] = htmlspecialchars($link['url']);
//done :-)
return $link;
}
/**
* format embedded media
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function format_link_media($link){
global $conf;
global $ID;
$link['class'] = 'media';
$link['style'] = '';
$link['pre'] = '';
$link['suf'] = '';
$link['more'] = 'onclick="return svchk()" onkeypress="return svchk()"';
$class = 'media';
list($link['name'],$title) = split('\|',$link['name'],2);
$t = htmlspecialchars($title);
//set alignment from spaces
if(substr($link['name'],0,1)==' ' && substr($link['name'],-1,1)==' '){
$link['pre'] = "</p>\n<div align=\"center\">";
$link['suf'] = "</div>\n<p>";
}elseif(substr($link['name'],0,1)==' '){
#$a = ' align="right"';
$class = 'mediaright';
}elseif(substr($link['name'],-1,1)==' '){
#$a = ' align="left"';
$class = 'medialeft';
}else{
$a = ' align="middle"';
}
$link['name'] = trim($link['name']);
//split into src and parameters (using the very last questionmark)
$pos = strrpos($link['name'], '?');
if($pos !== false){
$src = substr($link['name'],0,$pos);
$param = substr($link['name'],$pos+1);
}else{
$src = $link['name'];
$param = '';
}
//parse width and height
if(preg_match('#(\d+)(x(\d+))?#i',$param,$size)){
if($size[1]) $w = $size[1];
if($size[3]) $h = $size[3];
}
//namespace mangling for internal images
if(!preg_match('#^https?://#i',$src)){
$ns = getNS($ID);
//if src starts with . add current namespace
if(strpos($src,'.') === 0){
$src = $ns.':'.substr($src,1);
}
//if src contains no namespace add current namespace if any
if($ns !== false && strpos($src,':') === false ){
$src = $ns.':'.$src;
}
}
//check for nocache/recache param
preg_match('/(nocache|recache)/i',$param,$cachemode);
//do image caching, resizing and src rewriting
$cache = $src;
$isimg = img_cache($cache,$src,$w,$h,$cachemode[1]);
//set link to src if none given
if(!$link['url']){
$link['url'] = $src;
$link['target'] = $conf['target']['media'];
}
//prepare name
if($isimg){
$link['name'] = '<img src="'.$cache.'"';
if($w) $link['name'] .= ' width="'.$w.'"';
if($h) $link['name'] .= ' height="'.$h.'"';
if($t) $link['name'] .= ' title="'.$t.'"';
if($a) $link['name'] .= $a;
$link['name'] .= ' class="'.$class.'" border="0" alt="'.$t.'" />';
}else{
if($t){
$link['name'] = $t;
}else{
$link['name'] = basename($src);
}
}
return $link;
}
/**
* Build an URL list from a RSS feed
*
* Uses magpie
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function format_rss($url){
global $lang;
define('MAGPIE_CACHE_ON', false); //we do our own caching
define('MAGPIE_DIR', 'inc/magpie/');
define('MAGPIE_OUTPUT_ENCODING','UTF-8'); //return all feeds as UTF-8
require_once(MAGPIE_DIR.'/rss_fetch.inc');
//disable warning while fetching
$elvl = error_reporting(E_ERROR);
$rss = fetch_rss($url);
error_reporting($elvl);
$ret = '<ul class="rss">';
if($rss){
foreach ($rss->items as $item ) {
$link = array();
$link['url'] = $item['link'];
$link['name'] = $item['title'];
$link = format_link_externalurl($link);
$ret .= '<li>'.format_link_build($link).'</li>';
}
}else{
$link['url'] = $url;
$link = format_link_externalurl($link);
$ret .= '<li>';
$ret .= '<em>'.$lang['rssfailed'].'</em>';
$ret .= format_link_build($link);
$ret .= '</li>';
}
$ret .= '</ul>';
return $ret;
}
/**
* Create cache images
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function img_cache(&$csrc,&$src,&$w,&$h,$cachemode){
global $conf;
//container for various paths
$f['full']['web'] = $src;
$f['resz']['web'] = $src;
$f['full']['fs'] = $src;
$f['resz']['fs'] = $src;
//generate cachename
$md5 = md5($src);
//check if it is an image
if(preg_match('#\.(jpe?g|gif|png)$#i',$src,$match)){
$ext = strtolower($match[1]);
$isimg = true;
}
//check if it is external or a local mediafile
if(preg_match('#^([a-z0-9]+?)://#i',$src)){
$isurl = true;
}else{
$src = str_replace(':','/',$src);
$src = utf8_encodeFN($src);
$f['full']['web'] = $conf['mediaweb'].'/'.$src;
$f['resz']['web'] = $conf['mediaweb'].'/'.$src;
$f['full']['fs'] = $conf['mediadir'].'/'.$src;
$f['resz']['fs'] = $conf['mediadir'].'/'.$src;
}
//download external images if allowed
if($isurl && $isimg && $cachemode != 'nocache'){
$cache = $conf['mediadir']."/_cache/$md5.$ext";
if ( ($cachemode == 'recache' && io_download($src,$cache)) ||
@file_exists($cache) || io_download($src,$cache)){
$f['full']['web'] = $conf['mediaweb']."/_cache/$md5.$ext";
$f['resz']['web'] = $conf['mediaweb']."/_cache/$md5.$ext";
$f['full']['fs'] = $conf['mediadir']."/_cache/$md5.$ext";
$f['resz']['fs'] = $conf['mediadir']."/_cache/$md5.$ext";
$isurl = false;
}
}
//for local images (cached or media) do resizing
if($isimg && (!$isurl)){
if($w){
$info = getImageSize($f['full']['fs']);
//if $h not given calcualte it with correct aspect ratio
if(!$h){
$h = round(($w * $info[1]) / $info[0]);
}
$cache = $conf['mediadir'].'/_cache/'.$md5.'.'.$w.'x'.$h.'.'.$ext;
//delete outdated cachefile
if(@file_exists($cache) && (filemtime($cache)<filemtime($f['full']['fs']))){
unlink($cache);
}
//check if a resized cachecopy exists else create one
if(@file_exists($cache) || img_resize($ext,$f['full']['fs'],$info[0],$info[1],$cache,$w,$h)){
$f['resz']['web'] = $conf['mediaweb'].'/_cache/'.$md5.'.'.$w.'x'.$h.'.'.$ext;
$f['resz']['fs'] = $conf['mediadir'].'/_cache/'.$md5.'.'.$w.'x'.$h.'.'.$ext;
}
}else{
//if no new size was given just return the img size
$info = getImageSize($f['full']['fs']);
$w = $info[0];
$h = $info[1];
}
//urlencode (yes! secondtime! with force!)
$f['full']['web'] = utf8_encodeFN($f['full']['web'],false);
$f['resz']['web'] = utf8_encodeFN($f['resz']['web'],false);
}
//set srcs
$src = $f['full']['web'];
$csrc = $f['resz']['web'];
return $isimg;
}
/**
* resize images
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
function img_resize($ext,$from,$from_w,$from_h,$to,$to_w,$to_h){
global $conf;
if($conf['gdlib'] < 1) return false; //no GDlib available or wanted
// create an image of the given filetype
if ($ext == 'jpg' || $ext == 'jpeg'){
if(!function_exists("imagecreatefromjpeg")) return false;
$image = @imagecreateFromjpeg($from);
}elseif($ext == 'png') {
if(!function_exists("imagecreatefrompng")) return false;
$image = @imagecreatefrompng($from);
}elseif($ext == 'gif') {
if(!function_exists("imagecreatefromgif")) return false;
$image = @imagecreatefromgif($from);
}
if(!$image) return false;
if(($conf['gdlib']>1) && function_exists("imagecreatetruecolor")){
$newimg = @imagecreatetruecolor ($to_w, $to_h);
}
if(!$newimg) $newimg = @imagecreate($to_w, $to_h);
if(!$newimg) return false;
// create cachedir
io_makeFileDir($to);
//try resampling first
if(function_exists("imagecopyresampled")){
if(!@imagecopyresampled($newimg, $image, 0, 0, 0, 0, $to_w, $to_h, $from_w, $from_h)) {
imagecopyresized($newimg, $image, 0, 0, 0, 0, $to_w, $to_h, $from_w, $from_h);
}
}else{
imagecopyresized($newimg, $image, 0, 0, 0, 0, $to_w, $to_h, $from_w, $from_h);
}
if ($ext == 'jpg' || $ext == 'jpeg'){
if(!function_exists("imagejpeg")) return false;
return imagejpeg($newimg, $to, 70);
}elseif($ext == 'png') {
if(!function_exists("imagepng")) return false;
return imagepng($newimg, $to);
}elseif($ext == 'gif') {
if(!function_exists("imagegif")) return false;
return imagegif($newimg, $to);
}
return false;
}
//Setup VIM: ex: et ts=2 enc=utf-8 :
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment