summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2008-10-26 09:42:39 +0100
committerAndreas Gohr <andi@splitbrain.org>2008-10-26 09:42:39 +0100
commit26ece5a719ce2b1307a6af5bcdef8b9177e0dff7 (patch)
treea7507db364ed87b3143932eaeb3ecdd2924ce125 /inc
parent00a1ee4dd58a8a1e996bb7d778262041401646c8 (diff)
downloadrpg-26ece5a719ce2b1307a6af5bcdef8b9177e0dff7.tar.gz
rpg-26ece5a719ce2b1307a6af5bcdef8b9177e0dff7.tar.bz2
more placeholders for namespace templates
This patch adds a @FILE@ placeholder for namespace templates which is similar to the @PAGE@ placeholder but keeps underscores intact. It also adds placeholder to insert the page name with a first uppercase character, all words uppercased or the whole string uppercased. The utf8 library was enhanced with utf8_ucfirst and utf8_ucwords functions darcs-hash:20081026084239-7ad00-1a4be6bb85280df025ca308d4ed2e50da1cbc9cf.gz
Diffstat (limited to 'inc')
-rw-r--r--inc/common.php41
-rw-r--r--inc/utf8.php55
2 files changed, 89 insertions, 7 deletions
diff --git a/inc/common.php b/inc/common.php
index d58eacb7a..9b284617b 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 d49b1413c..b0ffdb001 100644
--- a/inc/utf8.php
+++ b/inc/utf8.php
@@ -318,6 +318,61 @@ function utf8_strtoupper($string){
}
/**
+ * 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
*
* Use the optional parameter to just deaccent lower ($case = -1) or upper ($case = 1)