switch( $collationName ) {
case 'uppercase':
return new UppercaseCollation;
+ case 'uppercase-sv':
+ return new UppercaseSvCollation;
case 'identity':
return new IdentityCollation;
case 'uca-default':
}
}
+/**
+ * Like UppercaseCollation but swaps Ä and Æ.
+ *
+ * This provides an ordering suitable for Swedish.
+ * @author Lejonel
+ */
+class UppercaseSvCollation extends UppercaseCollation {
+
+ /* Unicode code point order is ÄÅÆÖ, Swedish order is ÅÄÖ and Æ is often sorted as Ä.
+ * Replacing Ä for Æ should give a better collation. */
+ function getSortKey( $string ) {
+ $uppercase = $this->lang->uc( $string );
+ return strtr( $uppercase, array( 'Ä' => 'Æ', 'Æ' => 'Ä' ) );
+ }
+}
+
/**
* Collation class that's essentially a no-op.
*
}
return false;
}
+
+ /**
+ * Return the version of ICU library used by PHP's intl extension,
+ * or false when the extension is not installed of the version
+ * can't be determined.
+ *
+ * The constant INTL_ICU_VERSION this function refers to isn't really
+ * documented. It is available since PHP 5.3.7 (see PHP bug 54561).
+ * This function will return false on older PHPs.
+ *
+ * @since 1.21
+ * @return string|false
+ */
+ static function getICUVersion() {
+ return defined( 'INTL_ICU_VERSION' ) ? INTL_ICU_VERSION : false;
+ }
+
+ /**
+ * Return the version of Unicode appropriate for the version of ICU library
+ * currently in use, or false when it can't be determined.
+ *
+ * @since 1.21
+ * @return string|false
+ */
+ static function getUnicodeVersionForICU() {
+ $icuVersion = IcuCollation::getICUVersion();
+ if ( !$icuVersion ) {
+ return false;
+ }
+
+ $versionPrefix = substr( $icuVersion, 0, 3 );
+ // Source: http://site.icu-project.org/download
+ $map = array(
+ '50.' => '6.2',
+ '49.' => '6.1',
+ '4.8' => '6.0',
+ '4.6' => '6.0',
+ '4.4' => '5.2',
+ '4.2' => '5.1',
+ '4.0' => '5.1',
+ '3.8' => '5.0',
+ '3.6' => '5.0',
+ '3.4' => '4.1',
+ );
+
+ if ( isset( $map[$versionPrefix] ) ) {
+ return $map[$versionPrefix];
+ } else {
+ return false;
+ }
+ }
}