summaryrefslogtreecommitdiff
path: root/inc/utf8.php
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/utf8.php
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/utf8.php')
-rw-r--r--inc/utf8.php55
1 files changed, 55 insertions, 0 deletions
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)