diff --git a/inc/common.php b/inc/common.php index d58eacb7acb67ba8bf60fffcf4098a33a4e08e8d..9b284617b67eb0da8724ab07cb60050658fdb1b7 100644 --- a/inc/common.php +++ b/inc/common.php @@ -824,13 +824,40 @@ function pageTemplate($data){ if(!$tpl) return ''; // replace placeholders - $tpl = str_replace('@ID@',$id,$tpl); - $tpl = str_replace('@NS@',getNS($id),$tpl); - $tpl = str_replace('@PAGE@',strtr(noNS($id),'_',' '),$tpl); - $tpl = str_replace('@USER@',$_SERVER['REMOTE_USER'],$tpl); - $tpl = str_replace('@NAME@',$INFO['userinfo']['name'],$tpl); - $tpl = str_replace('@MAIL@',$INFO['userinfo']['mail'],$tpl); - $tpl = str_replace('@DATE@',$conf['dformat'],$tpl); + $file = noNS($id); + $page = strtr($file,'_',' '); + + $tpl = str_replace(array( + '@ID@', + '@NS@', + '@FILE@', + '@!FILE@', + '@!FILE!@', + '@PAGE@', + '@!PAGE@', + '@!!PAGE@', + '@!PAGE!@', + '@USER@', + '@NAME@', + '@MAIL@', + '@DATE@', + ), + array( + $id, + getNS($id), + $file, + utf8_ucfirst($file), + utf8_strtoupper($file), + $page, + utf8_ucfirst($page), + utf8_ucwords($page), + utf8_strtoupper($page), + $_SERVER['REMOTE_USER'], + $INFO['userinfo']['name'], + $INFO['userinfo']['mail'], + $conf['dformat'], + ), $tpl); + // we need the callback to work around strftime's char limit $tpl = preg_replace_callback('/%./',create_function('$m','return strftime($m[0]);'),$tpl); diff --git a/inc/utf8.php b/inc/utf8.php index d49b1413ca43f498dd827e4e388b0f18f1ade9d2..b0ffdb001223f45d76358ca3e2a1c8ee3901e509 100644 --- a/inc/utf8.php +++ b/inc/utf8.php @@ -317,6 +317,61 @@ function utf8_strtoupper($string){ return strtr($string,$UTF8_LOWER_TO_UPPER); } +/** + * UTF-8 aware alternative to ucfirst + * Make a string's first character uppercase + * + * @author Harry Fuecks + * @param string + * @return string with first character as upper case (if applicable) + */ +function utf8_ucfirst($str){ + switch ( utf8_strlen($str) ) { + case 0: + return ''; + case 1: + return utf8_strtoupper($str); + default: + preg_match('/^(.{1})(.*)$/us', $str, $matches); + return utf8_strtoupper($matches[1]).$matches[2]; + } +} + +/** + * UTF-8 aware alternative to ucwords + * Uppercase the first character of each word in a string + * + * @author Harry Fuecks + * @param string + * @return string with first char of each word uppercase + * @see http://www.php.net/ucwords + */ +function utf8_ucwords($str) { + // Note: [\x0c\x09\x0b\x0a\x0d\x20] matches; + // form feeds, horizontal tabs, vertical tabs, linefeeds and carriage returns + // This corresponds to the definition of a "word" defined at http://www.php.net/ucwords + $pattern = '/(^|([\x0c\x09\x0b\x0a\x0d\x20]+))([^\x0c\x09\x0b\x0a\x0d\x20]{1})[^\x0c\x09\x0b\x0a\x0d\x20]*/u'; + + return preg_replace_callback($pattern, 'utf8_ucwords_callback',$str); +} + +/** + * Callback function for preg_replace_callback call in utf8_ucwords + * You don't need to call this yourself + * + * @author Harry Fuecks + * @param array of matches corresponding to a single word + * @return string with first char of the word in uppercase + * @see utf8_ucwords + * @see utf8_strtoupper + */ +function utf8_ucwords_callback($matches) { + $leadingws = $matches[2]; + $ucfirst = utf8_strtoupper($matches[3]); + $ucword = utf8_substr_replace(ltrim($matches[0]),$ucfirst,0,1); + return $leadingws . $ucword; +} + /** * Replace accented UTF-8 characters by unaccented ASCII-7 equivalents *