diff options
author | Andreas Gohr <andi@splitbrain.org> | 2008-10-26 09:42:39 +0100 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2008-10-26 09:42:39 +0100 |
commit | 26ece5a719ce2b1307a6af5bcdef8b9177e0dff7 (patch) | |
tree | a7507db364ed87b3143932eaeb3ecdd2924ce125 /inc/utf8.php | |
parent | 00a1ee4dd58a8a1e996bb7d778262041401646c8 (diff) | |
download | rpg-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.php | 55 |
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) |