From 26ece5a719ce2b1307a6af5bcdef8b9177e0dff7 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 26 Oct 2008 09:42:39 +0100 Subject: 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 --- inc/utf8.php | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'inc/utf8.php') diff --git a/inc/utf8.php b/inc/utf8.php index d49b1413c..b0ffdb001 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 * -- cgit v1.2.3