Locale-agnostic case conversions by default #KT-43023
This commit is contained in:
@@ -382,6 +382,21 @@ public fun kotlin.CharSequence.lineSequence(): kotlin.sequences.Sequence<kotlin.
|
||||
|
||||
public fun kotlin.CharSequence.lines(): kotlin.collections.List<kotlin.String>
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.Char.lowercase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.String.lowercase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.Char.lowercaseChar(): kotlin.Char
|
||||
|
||||
public inline fun <R> kotlin.CharSequence.map(transform: (kotlin.Char) -> R): kotlin.collections.List<R>
|
||||
|
||||
public inline fun <R> kotlin.CharSequence.mapIndexed(transform: (index: kotlin.Int, kotlin.Char) -> R): kotlin.collections.List<R>
|
||||
@@ -659,6 +674,20 @@ public fun kotlin.String.replaceFirst(oldChar: kotlin.Char, newChar: kotlin.Char
|
||||
|
||||
public fun kotlin.String.replaceFirst(oldValue: kotlin.String, newValue: kotlin.String, ignoreCase: kotlin.Boolean = ...): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.OverloadResolutionByLambdaReturnType
|
||||
@kotlin.jvm.JvmName(name = "replaceFirstCharWithChar")
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.String.replaceFirstChar(transform: (kotlin.Char) -> kotlin.Char): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.OverloadResolutionByLambdaReturnType
|
||||
@kotlin.jvm.JvmName(name = "replaceFirstCharWithCharSequence")
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.String.replaceFirstChar(transform: (kotlin.Char) -> kotlin.CharSequence): kotlin.String
|
||||
|
||||
public fun kotlin.String.replaceIndent(newIndent: kotlin.String = ...): kotlin.String
|
||||
|
||||
public fun kotlin.String.replaceIndentByMargin(newIndent: kotlin.String = ..., marginPrefix: kotlin.String = ...): kotlin.String
|
||||
@@ -1079,6 +1108,20 @@ public inline fun kotlin.String.trimStart(predicate: (kotlin.Char) -> kotlin.Boo
|
||||
|
||||
public fun kotlin.String.trimStart(vararg chars: kotlin.Char): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.Char.uppercase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.String.uppercase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
public fun kotlin.Char.uppercaseChar(): kotlin.Char
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.2")
|
||||
public fun kotlin.CharSequence.windowed(size: kotlin.Int, step: kotlin.Int = ..., partialWindows: kotlin.Boolean = ...): kotlin.collections.List<kotlin.String>
|
||||
|
||||
|
||||
@@ -382,6 +382,21 @@ public fun kotlin.CharSequence.lineSequence(): kotlin.sequences.Sequence<kotlin.
|
||||
|
||||
public fun kotlin.CharSequence.lines(): kotlin.collections.List<kotlin.String>
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.Char.lowercase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.String.lowercase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.Char.lowercaseChar(): kotlin.Char
|
||||
|
||||
public inline fun <R> kotlin.CharSequence.map(transform: (kotlin.Char) -> R): kotlin.collections.List<R>
|
||||
|
||||
public inline fun <R> kotlin.CharSequence.mapIndexed(transform: (index: kotlin.Int, kotlin.Char) -> R): kotlin.collections.List<R>
|
||||
@@ -659,6 +674,20 @@ public fun kotlin.String.replaceFirst(oldChar: kotlin.Char, newChar: kotlin.Char
|
||||
|
||||
public fun kotlin.String.replaceFirst(oldValue: kotlin.String, newValue: kotlin.String, ignoreCase: kotlin.Boolean = ...): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.OverloadResolutionByLambdaReturnType
|
||||
@kotlin.jvm.JvmName(name = "replaceFirstCharWithChar")
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.String.replaceFirstChar(transform: (kotlin.Char) -> kotlin.Char): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.OverloadResolutionByLambdaReturnType
|
||||
@kotlin.jvm.JvmName(name = "replaceFirstCharWithCharSequence")
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.String.replaceFirstChar(transform: (kotlin.Char) -> kotlin.CharSequence): kotlin.String
|
||||
|
||||
public fun kotlin.String.replaceIndent(newIndent: kotlin.String = ...): kotlin.String
|
||||
|
||||
public fun kotlin.String.replaceIndentByMargin(newIndent: kotlin.String = ..., marginPrefix: kotlin.String = ...): kotlin.String
|
||||
@@ -1079,6 +1108,20 @@ public inline fun kotlin.String.trimStart(predicate: (kotlin.Char) -> kotlin.Boo
|
||||
|
||||
public fun kotlin.String.trimStart(vararg chars: kotlin.Char): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.Char.uppercase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun kotlin.String.uppercase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
public fun kotlin.Char.uppercaseChar(): kotlin.Char
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.2")
|
||||
public fun kotlin.CharSequence.windowed(size: kotlin.Int, step: kotlin.Int = ..., partialWindows: kotlin.Boolean = ...): kotlin.collections.List<kotlin.String>
|
||||
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
|
||||
package kotlin.text
|
||||
|
||||
import kotlin.internal.LowPriorityInOverloadResolution
|
||||
|
||||
expect class Regex {
|
||||
constructor(pattern: String)
|
||||
constructor(pattern: String, option: RegexOption)
|
||||
@@ -66,8 +64,6 @@ expect enum class RegexOption {
|
||||
// From char.kt
|
||||
|
||||
expect fun Char.isWhitespace(): Boolean
|
||||
expect fun Char.toLowerCase(): Char
|
||||
expect fun Char.toUpperCase(): Char
|
||||
expect fun Char.isHighSurrogate(): Boolean
|
||||
expect fun Char.isLowSurrogate(): Boolean
|
||||
|
||||
@@ -195,39 +191,6 @@ internal expect fun String.nativeLastIndexOf(str: String, fromIndex: Int): Int
|
||||
public expect fun String.substring(startIndex: Int): String
|
||||
public expect fun String.substring(startIndex: Int, endIndex: Int): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to upper case using the rules of the default locale.
|
||||
*
|
||||
* @sample samples.text.Strings.toUpperCase
|
||||
*/
|
||||
public expect fun String.toUpperCase(): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the default locale.
|
||||
*
|
||||
* @sample samples.text.Strings.toLowerCase
|
||||
*/
|
||||
public expect fun String.toLowerCase(): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string having its first letter titlecased using the rules of the default locale,
|
||||
* or the original string if it's empty or already starts with a title case letter.
|
||||
*
|
||||
* The title case of a character is usually the same as its upper case with several exceptions.
|
||||
* The particular list of characters with the special title case form depends on the underlying platform.
|
||||
*
|
||||
* @sample samples.text.Strings.capitalize
|
||||
*/
|
||||
public expect fun String.capitalize(): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string having its first letter lowercased using the rules of the default locale,
|
||||
* or the original string if it's empty or already starts with a lower case letter.
|
||||
*
|
||||
* @sample samples.text.Strings.decapitalize
|
||||
*/
|
||||
public expect fun String.decapitalize(): String
|
||||
|
||||
public expect fun CharSequence.repeat(n: Int): String
|
||||
|
||||
|
||||
|
||||
@@ -8,11 +8,79 @@ package kotlin.text
|
||||
// actually \s is enough to match all whitespace, but \xA0 added because of different regexp behavior of Rhino used in Selenium tests
|
||||
public actual fun Char.isWhitespace(): Boolean = toString().matches("[\\s\\xA0]")
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.toLowerCase(): Char = js("String.fromCharCode")(toInt()).toLowerCase().charCodeAt(0).unsafeCast<Int>().toChar()
|
||||
public actual inline fun Char.toLowerCase(): Char = lowercaseChar()
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [lowercase] function.
|
||||
* If this character has no mapping equivalent, the character itself is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.toUpperCase(): Char = js("String.fromCharCode")(toInt()).toUpperCase().charCodeAt(0).unsafeCast<Int>().toChar()
|
||||
public actual inline fun Char.lowercaseChar(): Char = toString().asDynamic().toLowerCase().charCodeAt(0).unsafeCast<Int>().toChar()
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\u0130'.lowercase()` returns `"\u0069\u0307"`,
|
||||
* where `'\u0130'` is the LATIN CAPITAL LETTER I WITH DOT ABOVE character (`İ`).
|
||||
* If this character has no lower case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.lowercase(): String = toString().asDynamic().toLowerCase() as String
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.toUpperCase(): Char = uppercaseChar()
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [uppercase] function.
|
||||
* If this character has no mapping equivalent, the character itself is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public actual fun Char.uppercaseChar(): Char {
|
||||
val uppercase = uppercase()
|
||||
return if (uppercase.length > 1) this else uppercase[0]
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\uFB00'.uppercase()` returns `"\u0046\u0046"`,
|
||||
* where `'\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).
|
||||
* If this character has no upper case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.uppercase(): String = toString().asDynamic().toUpperCase() as String
|
||||
|
||||
/**
|
||||
* Returns `true` if this character is a Unicode high-surrogate code unit (also known as leading-surrogate code unit).
|
||||
|
||||
@@ -17,8 +17,9 @@ public actual inline fun String.toBoolean(): Boolean = this.toBoolean()
|
||||
/**
|
||||
* Returns `true` if this string is not `null` and its content is equal to the word "true", ignoring case, and `false` otherwise.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@SinceKotlin("1.4")
|
||||
public actual fun String?.toBoolean(): Boolean = this != null && this.toLowerCase() == "true"
|
||||
public actual fun String?.toBoolean(): Boolean = this != null && this.lowercase() == "true"
|
||||
|
||||
/**
|
||||
* Parses the string as a signed [Byte] number and returns the result.
|
||||
@@ -130,7 +131,8 @@ public actual inline fun Short.toString(radix: Int): String = this.toInt().toStr
|
||||
@SinceKotlin("1.2")
|
||||
public actual fun Int.toString(radix: Int): String = asDynamic().toString(checkRadix(radix))
|
||||
|
||||
private fun String.isNaN(): Boolean = when (this.toLowerCase()) {
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
private fun String.isNaN(): Boolean = when (this.lowercase()) {
|
||||
"nan", "+nan", "-nan" -> true
|
||||
else -> false
|
||||
}
|
||||
|
||||
@@ -168,20 +168,42 @@ public actual fun String.encodeToByteArray(
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to upper case using the rules of the default locale.
|
||||
*
|
||||
* @sample samples.text.Strings.toUpperCase
|
||||
*/
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun String.toUpperCase(): String = asDynamic().toUpperCase()
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the default locale.
|
||||
* Returns a copy of this string converted to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* @sample samples.text.Strings.toLowerCase
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun String.uppercase(): String = asDynamic().toUpperCase()
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the default locale.
|
||||
*/
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun String.toLowerCase(): String = asDynamic().toLowerCase()
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun String.lowercase(): String = asDynamic().toLowerCase()
|
||||
|
||||
@kotlin.internal.InlineOnly
|
||||
internal actual inline fun String.nativeIndexOf(str: String, fromIndex: Int): Int = asDynamic().indexOf(str, fromIndex)
|
||||
|
||||
@@ -212,6 +234,7 @@ public inline fun String.match(regex: String): Array<String>? = asDynamic().matc
|
||||
@kotlin.internal.InlineOnly
|
||||
internal inline fun String.nativeReplace(pattern: RegExp, replacement: String): String = asDynamic().replace(pattern, replacement)
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@SinceKotlin("1.2")
|
||||
@Suppress("ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS")
|
||||
public actual fun String.compareTo(other: String, ignoreCase: Boolean = false): Int {
|
||||
@@ -226,11 +249,11 @@ public actual fun String.compareTo(other: String, ignoreCase: Boolean = false):
|
||||
var s1 = this.substring(start, end)
|
||||
var s2 = other.substring(start, end)
|
||||
if (s1 != s2) {
|
||||
s1 = s1.toUpperCase()
|
||||
s2 = s2.toUpperCase()
|
||||
s1 = s1.uppercase()
|
||||
s2 = s2.uppercase()
|
||||
if (s1 != s2) {
|
||||
s1 = s1.toLowerCase()
|
||||
s2 = s2.toLowerCase()
|
||||
s1 = s1.lowercase()
|
||||
s2 = s2.lowercase()
|
||||
if (s1 != s2) {
|
||||
return s1.compareTo(s2)
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ public fun String.matches(regex: String): Boolean {
|
||||
|
||||
public actual fun CharSequence.isBlank(): Boolean = length == 0 || (if (this is String) this else this.toString()).matches("^[\\s\\xA0]+$")
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@Suppress("ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS")
|
||||
public actual fun String?.equals(other: String?, ignoreCase: Boolean = false): Boolean =
|
||||
if (this == null)
|
||||
@@ -61,7 +62,7 @@ public actual fun String?.equals(other: String?, ignoreCase: Boolean = false): B
|
||||
else if (!ignoreCase)
|
||||
this == other
|
||||
else
|
||||
other != null && this.toLowerCase() == other.toLowerCase()
|
||||
other != null && this.lowercase() == other.lowercase()
|
||||
|
||||
|
||||
@Suppress("ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS")
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
|
||||
package kotlin.text
|
||||
|
||||
import java.util.Locale
|
||||
|
||||
/**
|
||||
* Returns `true` if this character (Unicode code point) is defined in Unicode.
|
||||
*/
|
||||
@@ -86,18 +88,104 @@ public inline fun Char.isUpperCase(): Boolean = Character.isUpperCase(this)
|
||||
public inline fun Char.isLowerCase(): Boolean = Character.isLowerCase(this)
|
||||
|
||||
/**
|
||||
* Converts this character to uppercase.
|
||||
* @sample samples.text.Chars.toUpperCase
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.toUpperCase(): Char = Character.toUpperCase(this)
|
||||
public actual inline fun Char.toUpperCase(): Char = uppercaseChar()
|
||||
|
||||
/**
|
||||
* Converts this character to lowercase.
|
||||
* @sample samples.text.Chars.toLowerCase
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [uppercase] function.
|
||||
* If this character has no mapping equivalent, the character itself is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.toLowerCase(): Char = Character.toLowerCase(this)
|
||||
public actual inline fun Char.uppercaseChar(): Char = Character.toUpperCase(this)
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\uFB00'.uppercase()` returns `"\u0046\u0046"`,
|
||||
* where `'\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).
|
||||
* If this character has no upper case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.uppercase(): String = toString().uppercase()
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the specified [locale].
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\uFB00'.uppercase(Locale.US)` returns `"\u0046\u0046"`,
|
||||
* where `'\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).
|
||||
* If this character has no upper case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercaseLocale
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public fun Char.uppercase(locale: Locale): String = toString().uppercase(locale)
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.toLowerCase(): Char = lowercaseChar()
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [lowercase] function.
|
||||
* If this character has no mapping equivalent, the character itself is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.lowercaseChar(): Char = Character.toLowerCase(this)
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\u0130'.lowercase()` returns `"\u0069\u0307"`,
|
||||
* where `'\u0130'` is the LATIN CAPITAL LETTER I WITH DOT ABOVE character (`İ`).
|
||||
* If this character has no lower case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.lowercase(): String = toString().lowercase()
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the specified [locale].
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\u0130'.lowercase(Locale.US)` returns `"\u0069\u0307"`,
|
||||
* where `'\u0130'` is the LATIN CAPITAL LETTER I WITH DOT ABOVE character (`İ`).
|
||||
* If this character has no lower case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercaseLocale
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public fun Char.lowercase(locale: Locale): String = toString().lowercase(locale)
|
||||
|
||||
/**
|
||||
* Returns `true` if this character is a titlecase character.
|
||||
@@ -107,13 +195,70 @@ public actual inline fun Char.toLowerCase(): Char = Character.toLowerCase(this)
|
||||
public inline fun Char.isTitleCase(): Boolean = Character.isTitleCase(this)
|
||||
|
||||
/**
|
||||
* Converts this character to titlecase.
|
||||
* Converts this character to title case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* @see Character.toTitleCase
|
||||
* @sample samples.text.Chars.toTitleCase
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun Char.toTitleCase(): Char = Character.toTitleCase(this)
|
||||
public inline fun Char.toTitleCase(): Char = titlecaseChar()
|
||||
|
||||
/**
|
||||
* Converts this character to title case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [titlecase] function.
|
||||
* If this character has no mapping equivalent, the result of calling [uppercaseChar] is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.titlecase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun Char.titlecaseChar(): Char = Character.toTitleCase(this)
|
||||
|
||||
/**
|
||||
* Converts this character to title case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\uFB00'.titlecase()` returns `"\u0046\u0066"`,
|
||||
* where `'\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).
|
||||
* If this character has no title case mapping, the result of [uppercase] is returned instead.
|
||||
*
|
||||
* @sample samples.text.Chars.titlecase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public fun Char.titlecase(): String {
|
||||
val uppercase = uppercase()
|
||||
if (uppercase.length > 1) {
|
||||
return if (this == '\u0149') uppercase else uppercase[0] + uppercase.substring(1).lowercase()
|
||||
}
|
||||
return titlecaseChar().toString()
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts this character to title case using Unicode mapping rules of the specified [locale].
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\uFB00'.titlecase(Locale.US)` returns `"\u0046\u0066"`,
|
||||
* where `'\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).
|
||||
* If this character has no title case mapping, the result of `uppercase(locale)` is returned instead.
|
||||
*
|
||||
* @sample samples.text.Chars.titlecaseLocale
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public fun Char.titlecase(locale: Locale): String {
|
||||
val localizedUppercase = uppercase(locale)
|
||||
if (localizedUppercase.length > 1) {
|
||||
return if (this == '\u0149') localizedUppercase else localizedUppercase[0] + localizedUppercase.substring(1).lowercase()
|
||||
}
|
||||
if (localizedUppercase != uppercase()) {
|
||||
return localizedUppercase
|
||||
}
|
||||
return titlecaseChar().toString()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a value indicating a character's general category.
|
||||
|
||||
@@ -120,20 +120,42 @@ public actual fun String.replaceFirst(oldValue: String, newValue: String, ignore
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to upper case using the rules of the default locale.
|
||||
*
|
||||
* @sample samples.text.Strings.toUpperCase
|
||||
*/
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun String.toUpperCase(): String = (this as java.lang.String).toUpperCase()
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the default locale.
|
||||
* Returns a copy of this string converted to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* @sample samples.text.Strings.toLowerCase
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun String.uppercase(): String = (this as java.lang.String).toUpperCase(Locale.ROOT)
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the default locale.
|
||||
*/
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun String.toLowerCase(): String = (this as java.lang.String).toLowerCase()
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun String.lowercase(): String = (this as java.lang.String).toLowerCase(Locale.ROOT)
|
||||
|
||||
/**
|
||||
* Concatenates characters in this [CharArray] into a String.
|
||||
*/
|
||||
@@ -588,14 +610,42 @@ public fun String.regionMatches(thisOffset: Int, other: String, otherOffset: Int
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the specified locale.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun String.toLowerCase(locale: java.util.Locale): String = (this as java.lang.String).toLowerCase(locale)
|
||||
public inline fun String.toLowerCase(locale: java.util.Locale): String = lowercase(locale)
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the specified [locale].
|
||||
*
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.lowercaseLocale
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun String.lowercase(locale: Locale): String = (this as java.lang.String).toLowerCase(locale)
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to upper case using the rules of the specified locale.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun String.toUpperCase(locale: java.util.Locale): String = (this as java.lang.String).toUpperCase(locale)
|
||||
public inline fun String.toUpperCase(locale: java.util.Locale): String = uppercase(locale)
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to upper case using the rules of the specified [locale].
|
||||
*
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.uppercaseLocale
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun String.uppercase(locale: Locale): String = (this as java.lang.String).toUpperCase(locale)
|
||||
|
||||
/**
|
||||
* Encodes the contents of this string using the specified character set and returns the resulting byte array.
|
||||
@@ -634,19 +684,20 @@ public actual fun String.capitalize(): String {
|
||||
* The title case of a character is usually the same as its upper case with several exceptions.
|
||||
* The particular list of characters with the special title case form depends on the underlying platform.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@SinceKotlin("1.4")
|
||||
@WasExperimental(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.LowPriorityInOverloadResolution
|
||||
@kotlin.internal.LowPriorityInOverloadResolution // To avoid conflicts in function references, as this function was introduced later than common capitalize()
|
||||
public fun String.capitalize(locale: Locale): String {
|
||||
if (isNotEmpty()) {
|
||||
val firstChar = this[0]
|
||||
if (firstChar.isLowerCase()) {
|
||||
return buildString {
|
||||
val titleChar = firstChar.toTitleCase()
|
||||
if (titleChar != firstChar.toUpperCase()) {
|
||||
val titleChar = firstChar.titlecaseChar()
|
||||
if (titleChar != firstChar.uppercaseChar()) {
|
||||
append(titleChar)
|
||||
} else {
|
||||
append(this@capitalize.substring(0, 1).toUpperCase(locale))
|
||||
append(this@capitalize.substring(0, 1).uppercase(locale))
|
||||
}
|
||||
append(this@capitalize.substring(1))
|
||||
}
|
||||
@@ -669,11 +720,12 @@ public actual fun String.decapitalize(): String {
|
||||
* Returns a copy of this string having its first letter lowercased using the rules of the specified [locale],
|
||||
* or the original string, if it's empty or already starts with a lower case letter.
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
@SinceKotlin("1.4")
|
||||
@WasExperimental(ExperimentalStdlibApi::class)
|
||||
@kotlin.internal.LowPriorityInOverloadResolution
|
||||
@kotlin.internal.LowPriorityInOverloadResolution // To avoid conflicts in function references, as this function was introduced later than common decapitalize()
|
||||
public fun String.decapitalize(locale: Locale): String {
|
||||
return if (isNotEmpty() && !this[0].isLowerCase()) substring(0, 1).toLowerCase(locale) + substring(1) else this
|
||||
return if (isNotEmpty() && !this[0].isLowerCase()) substring(0, 1).lowercase(locale) + substring(1) else this
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -75,53 +75,67 @@ class StringJVMTest {
|
||||
}
|
||||
|
||||
@Test fun capitalize() {
|
||||
fun testCapitalize(expected: String, string: String) {
|
||||
assertEquals(expected, string.capitalize())
|
||||
assertEquals(expected, string.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() })
|
||||
}
|
||||
// Case mapping that results in multiple characters (validating Character.toUpperCase was not used).
|
||||
assertEquals("SSßß", "ßßß".capitalize())
|
||||
assertEquals("Ssßß", "ßßß".replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() })
|
||||
|
||||
// Case mapping where title case is different than uppercase and so Character.toTitleCase is preferred.
|
||||
assertEquals("Dzdzdz", "dzdzdz".capitalize())
|
||||
assertEquals("DZDZDZ", "DZDZDZ".capitalize())
|
||||
testCapitalize("Dzdzdz", "dzdzdz")
|
||||
testCapitalize("DZDZDZ", "DZDZDZ")
|
||||
}
|
||||
|
||||
@Test fun decapitalize() {
|
||||
assertEquals("aBC", "ABC".decapitalize())
|
||||
assertEquals("abc", "Abc".decapitalize())
|
||||
assertEquals("abc", "abc".decapitalize())
|
||||
|
||||
fun testDecapitalize(expected: String, string: String) {
|
||||
assertEquals(expected, string.decapitalize())
|
||||
assertEquals(expected, string.replaceFirstChar { it.lowercase(Locale.getDefault()) })
|
||||
}
|
||||
// Case mapping where title case is different than uppercase.
|
||||
assertEquals("dzdzdz", "DZdzdz".decapitalize())
|
||||
assertEquals("dzdzdz", "Dzdzdz".decapitalize())
|
||||
testDecapitalize("dzdzdz", "DZdzdz")
|
||||
testDecapitalize("dzdzdz", "Dzdzdz")
|
||||
}
|
||||
|
||||
@Test fun capitalizeLocale() {
|
||||
assertEquals("ABC", "ABC".capitalize(Locale.US))
|
||||
assertEquals("Abc", "Abc".capitalize(Locale.US))
|
||||
assertEquals("Abc", "abc".capitalize(Locale.US))
|
||||
fun testCapitalizeLocale(expected: String, string: String, locale: Locale) {
|
||||
assertEquals(expected, string.capitalize(locale))
|
||||
assertEquals(expected, string.replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale) else it.toString() })
|
||||
}
|
||||
testCapitalizeLocale("ABC", "ABC", Locale.US)
|
||||
testCapitalizeLocale("Abc", "Abc", Locale.US)
|
||||
testCapitalizeLocale("Abc", "abc", Locale.US)
|
||||
|
||||
// Locale-specific case mappings.
|
||||
assertEquals("İii", "iii".capitalize(Locale("tr", "TR")))
|
||||
assertEquals("Iii", "iii".capitalize(Locale.US))
|
||||
testCapitalizeLocale("İii", "iii", Locale("tr", "TR"))
|
||||
testCapitalizeLocale("Iii", "iii", Locale.US)
|
||||
|
||||
// Case mapping that results in multiple characters (validating Character.toUpperCase was not used).
|
||||
assertEquals("SSßß", "ßßß".capitalize(Locale.US))
|
||||
assertEquals("Ssßß", "ßßß".replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.US) else it.toString() })
|
||||
|
||||
// Case mapping where title case is different than uppercase and so Character.toTitleCase is preferred.
|
||||
assertEquals("Dzdzdz", "dzdzdz".capitalize(Locale.US))
|
||||
assertEquals("DZDZDZ", "DZDZDZ".capitalize(Locale.US))
|
||||
testCapitalizeLocale("Dzdzdz", "dzdzdz", Locale.US)
|
||||
testCapitalizeLocale("DZDZDZ", "DZDZDZ", Locale.US)
|
||||
}
|
||||
|
||||
@Test fun decapitalizeLocale() {
|
||||
assertEquals("aBC", "ABC".decapitalize(Locale.US))
|
||||
assertEquals("abc", "Abc".decapitalize(Locale.US))
|
||||
assertEquals("abc", "abc".decapitalize(Locale.US))
|
||||
fun testDecapitalizeLocale(expected: String, string: String, locale: Locale) {
|
||||
assertEquals(expected, string.decapitalize(locale))
|
||||
assertEquals(expected, string.replaceFirstChar { it.lowercase(locale) })
|
||||
}
|
||||
testDecapitalizeLocale("aBC", "ABC", Locale.US)
|
||||
testDecapitalizeLocale("abc", "Abc", Locale.US)
|
||||
testDecapitalizeLocale("abc", "abc", Locale.US)
|
||||
|
||||
// Locale-specific case mappings.
|
||||
assertEquals("ıII", "III".decapitalize(Locale("tr", "TR")))
|
||||
assertEquals("iII", "III".decapitalize(Locale.US))
|
||||
testDecapitalizeLocale("ıII", "III", Locale("tr", "TR"))
|
||||
testDecapitalizeLocale("iII", "III", Locale.US)
|
||||
|
||||
// Case mapping where title case is different than uppercase.
|
||||
assertEquals("dzdzdz", "DZdzdz".decapitalize(Locale.US))
|
||||
assertEquals("dzdzdz", "Dzdzdz".decapitalize(Locale.US))
|
||||
testDecapitalizeLocale("dzdzdz", "DZdzdz", Locale.US)
|
||||
testDecapitalizeLocale("dzdzdz", "Dzdzdz", Locale.US)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package samples.text
|
||||
|
||||
import samples.*
|
||||
import kotlin.test.*
|
||||
import java.util.*
|
||||
import kotlin.test.*
|
||||
|
||||
class Chars {
|
||||
|
||||
@@ -83,17 +83,41 @@ class Chars {
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun toUpperCase() {
|
||||
val chars = listOf('a', 'ω', '1', 'A', '+')
|
||||
val upperCases = chars.map { it.toUpperCase() }
|
||||
assertPrints(upperCases, "[A, Ω, 1, A, +]")
|
||||
fun uppercase() {
|
||||
val chars = listOf('a', 'ω', '1', 'ʼn', 'A', '+', 'ß')
|
||||
val uppercaseChar = chars.map { it.uppercaseChar() }
|
||||
val uppercase = chars.map { it.uppercase() }
|
||||
assertPrints(uppercaseChar, "[A, Ω, 1, ʼn, A, +, ß]")
|
||||
assertPrints(uppercase, "[A, Ω, 1, ʼN, A, +, SS]")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun toLowerCase() {
|
||||
val chars = listOf('A', 'Ω', '1', 'a', '+')
|
||||
val lowerCases = chars.map { it.toLowerCase() }
|
||||
assertPrints(lowerCases, "[a, ω, 1, a, +]")
|
||||
fun uppercaseLocale() {
|
||||
val chars = listOf('a', '1', 'ʼn', 'A', '+', 'i')
|
||||
val uppercase = chars.map { it.uppercase() }
|
||||
val turkishLocale = Locale.forLanguageTag("tr")
|
||||
val uppercaseTurkish = chars.map { it.uppercase(turkishLocale) }
|
||||
assertPrints(uppercase, "[A, 1, ʼN, A, +, I]")
|
||||
assertPrints(uppercaseTurkish, "[A, 1, ʼN, A, +, İ]")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun lowercase() {
|
||||
val chars = listOf('A', 'Ω', '1', 'a', '+', 'İ')
|
||||
val lowercaseChar = chars.map { it.lowercaseChar() }
|
||||
val lowercase = chars.map { it.lowercase() }
|
||||
assertPrints(lowercaseChar, "[a, ω, 1, a, +, i]")
|
||||
assertPrints(lowercase, "[a, ω, 1, a, +, \u0069\u0307]")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun lowercaseLocale() {
|
||||
val chars = listOf('A', 'Ω', '1', 'a', '+', 'İ')
|
||||
val lowercase = chars.map { it.lowercase() }
|
||||
val turkishLocale = Locale.forLanguageTag("tr")
|
||||
val lowercaseTurkish = chars.map { it.lowercase(turkishLocale) }
|
||||
assertPrints(lowercase, "[a, ω, 1, a, +, \u0069\u0307]")
|
||||
assertPrints(lowercaseTurkish, "[a, ω, 1, a, +, i]")
|
||||
}
|
||||
|
||||
@Sample
|
||||
@@ -105,10 +129,22 @@ class Chars {
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun toTitleCase() {
|
||||
val chars = listOf('a', 'Dž', '1', '+')
|
||||
val titleCases = chars.map { it.toTitleCase() }
|
||||
assertPrints(titleCases, "[A, Dž, 1, +]")
|
||||
fun titlecase() {
|
||||
val chars = listOf('a', 'Dž', 'ʼn', '+', 'ß')
|
||||
val titlecaseChar = chars.map { it.titlecaseChar() }
|
||||
val titlecase = chars.map { it.titlecase() }
|
||||
assertPrints(titlecaseChar, "[A, Dž, ʼn, +, ß]")
|
||||
assertPrints(titlecase, "[A, Dž, ʼN, +, Ss]")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun titlecaseLocale() {
|
||||
val chars = listOf('a', 'Dž', 'ʼn', '+', 'ß', 'i')
|
||||
val titlecase = chars.map { it.titlecase() }
|
||||
val turkishLocale = Locale.forLanguageTag("tr")
|
||||
val titlecaseTurkish = chars.map { it.titlecase(turkishLocale) }
|
||||
assertPrints(titlecase, "[A, Dž, ʼN, +, Ss, I]")
|
||||
assertPrints(titlecaseTurkish, "[A, Dž, ʼN, +, Ss, İ]")
|
||||
}
|
||||
|
||||
@Sample
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package samples.text
|
||||
|
||||
import samples.*
|
||||
import java.util.Locale
|
||||
import kotlin.test.*
|
||||
|
||||
class Strings {
|
||||
@@ -17,6 +18,15 @@ class Strings {
|
||||
assertPrints("Abcd".decapitalize(), "abcd")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun replaceFirstChar() {
|
||||
assertPrints("kotlin".replaceFirstChar { it.uppercase() }, "Kotlin")
|
||||
|
||||
val sentence = "Welcome to Kotlin!"
|
||||
val words = sentence.split(' ');
|
||||
assertPrints(words.joinToString(separator = "_") { word -> word.replaceFirstChar { it.lowercase() } }, "welcome_to_kotlin!")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun repeat() {
|
||||
assertPrints("Word".repeat(4), "WordWordWordWord")
|
||||
@@ -205,13 +215,27 @@ class Strings {
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun toLowerCase() {
|
||||
assertPrints("Iced frappé!".toLowerCase(), "iced frappé!")
|
||||
fun lowercase() {
|
||||
assertPrints("Iced frappé!".lowercase(), "iced frappé!")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun toUpperCase() {
|
||||
assertPrints("Iced frappé!".toUpperCase(), "ICED FRAPPÉ!")
|
||||
fun lowercaseLocale() {
|
||||
assertPrints("KOTLIN".lowercase(), "kotlin")
|
||||
val turkishLocale = Locale.forLanguageTag("tr")
|
||||
assertPrints("KOTLIN".lowercase(turkishLocale), "kotlın")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun uppercase() {
|
||||
assertPrints("Iced frappé!".uppercase(), "ICED FRAPPÉ!")
|
||||
}
|
||||
|
||||
@Sample
|
||||
fun uppercaseLocale() {
|
||||
assertPrints("Kotlin".uppercase(), "KOTLIN")
|
||||
val turkishLocale = Locale.forLanguageTag("tr")
|
||||
assertPrints("Kotlin".uppercase(turkishLocale), "KOTLİN")
|
||||
}
|
||||
|
||||
@Sample
|
||||
|
||||
@@ -8,6 +8,70 @@
|
||||
|
||||
package kotlin.text
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*/
|
||||
public expect fun Char.toLowerCase(): Char
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [lowercase] function.
|
||||
* If this character has no mapping equivalent, the character itself is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public expect fun Char.lowercaseChar(): Char
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\u0130'.lowercase()` returns `"\u0069\u0307"`,
|
||||
* where `'\u0130'` is the LATIN CAPITAL LETTER I WITH DOT ABOVE character (`İ`).
|
||||
* If this character has no lower case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public expect fun Char.lowercase(): String
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*/
|
||||
public expect fun Char.toUpperCase(): Char
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [uppercase] function.
|
||||
* If this character has no mapping equivalent, the character itself is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public expect fun Char.uppercaseChar(): Char
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\uFB00'.uppercase()` returns `"\u0046\u0046"`,
|
||||
* where `'\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).
|
||||
* If this character has no upper case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public expect fun Char.uppercase(): String
|
||||
|
||||
/**
|
||||
* Concatenates this Char and a String.
|
||||
*
|
||||
@@ -23,17 +87,18 @@ public inline operator fun Char.plus(other: String): String = this.toString() +
|
||||
*
|
||||
* Two characters are considered the same ignoring case if at least one of the following is `true`:
|
||||
* - The two characters are the same (as compared by the == operator)
|
||||
* - Applying the method [toUpperCase] to each character produces the same result
|
||||
* - Applying the method [toLowerCase] to each character produces the same result
|
||||
* - Applying the method [uppercaseChar] to each character produces the same result
|
||||
* - Applying the method [lowercaseChar] to each character produces the same result
|
||||
*
|
||||
* @sample samples.text.Chars.equals
|
||||
*/
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
public fun Char.equals(other: Char, ignoreCase: Boolean = false): Boolean {
|
||||
if (this == other) return true
|
||||
if (!ignoreCase) return false
|
||||
|
||||
if (this.toUpperCase() == other.toUpperCase()) return true
|
||||
if (this.toLowerCase() == other.toLowerCase()) return true
|
||||
if (this.uppercaseChar() == other.uppercaseChar()) return true
|
||||
if (this.lowercaseChar() == other.lowercaseChar()) return true
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,60 @@
|
||||
package kotlin.text
|
||||
|
||||
import kotlin.contracts.contract
|
||||
import kotlin.jvm.JvmName
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to upper case using the rules of the default locale.
|
||||
*/
|
||||
public expect fun String.toUpperCase(): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public expect fun String.uppercase(): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the default locale.
|
||||
*/
|
||||
public expect fun String.toLowerCase(): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public expect fun String.lowercase(): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string having its first letter titlecased using the rules of the default locale,
|
||||
* or the original string if it's empty or already starts with a title case letter.
|
||||
*
|
||||
* The title case of a character is usually the same as its upper case with several exceptions.
|
||||
* The particular list of characters with the special title case form depends on the underlying platform.
|
||||
*
|
||||
* @sample samples.text.Strings.capitalize
|
||||
*/
|
||||
public expect fun String.capitalize(): String
|
||||
|
||||
/**
|
||||
* Returns a copy of this string having its first letter lowercased using the rules of the default locale,
|
||||
* or the original string if it's empty or already starts with a lower case letter.
|
||||
*
|
||||
* @sample samples.text.Strings.decapitalize
|
||||
*/
|
||||
public expect fun String.decapitalize(): String
|
||||
|
||||
/**
|
||||
* Returns a sub sequence of this char sequence having leading and trailing characters matching the [predicate] removed.
|
||||
@@ -710,6 +764,42 @@ public inline fun CharSequence.replace(regex: Regex, noinline transform: (MatchR
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun CharSequence.replaceFirst(regex: Regex, replacement: String): String = regex.replaceFirst(this, replacement)
|
||||
|
||||
/**
|
||||
* Returns a copy of this string having its first character replaced with the result of the specified [transform],
|
||||
* or the original string if it's empty.
|
||||
*
|
||||
* @param transform function that takes the first character and returns the result of the transform applied to the character.
|
||||
*
|
||||
* @sample samples.text.Strings.replaceFirstChar
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@OptIn(kotlin.experimental.ExperimentalTypeInference::class)
|
||||
@OverloadResolutionByLambdaReturnType
|
||||
@JvmName("replaceFirstCharWithChar")
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun String.replaceFirstChar(transform: (Char) -> Char): String {
|
||||
return if (isNotEmpty()) transform(this[0]) + substring(1) else this
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a copy of this string having its first character replaced with the result of the specified [transform],
|
||||
* or the original string if it's empty.
|
||||
*
|
||||
* @param transform function that takes the first character and returns the result of the transform applied to the character.
|
||||
*
|
||||
* @sample samples.text.Strings.replaceFirstChar
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
@OptIn(kotlin.experimental.ExperimentalTypeInference::class)
|
||||
@OverloadResolutionByLambdaReturnType
|
||||
@JvmName("replaceFirstCharWithCharSequence")
|
||||
@kotlin.internal.InlineOnly
|
||||
public inline fun String.replaceFirstChar(transform: (Char) -> CharSequence): String {
|
||||
return if (isNotEmpty()) transform(this[0]).toString() + substring(1) else this
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns `true` if this char sequence matches the given regular expression.
|
||||
|
||||
@@ -16,7 +16,7 @@ data class Item(val name: String, val rating: Int) : Comparable<Item> {
|
||||
|
||||
@SharedImmutable
|
||||
val STRING_CASE_INSENSITIVE_ORDER: Comparator<String> =
|
||||
compareBy { it: String -> it.toUpperCase() }.thenBy { it.toLowerCase() }.thenBy { it }
|
||||
compareBy { it: String -> it.uppercase() }.thenBy { it.lowercase() }.thenBy { it }
|
||||
|
||||
class OrderingTest {
|
||||
val v1 = Item("wine", 9)
|
||||
|
||||
@@ -1369,7 +1369,7 @@ class ArraysTest {
|
||||
assertEquals(mapOf("Alice" to 5, "Bob" to 3, "Carol" to 5), itemsWithTheirLength)
|
||||
|
||||
val updatedLength = items.copyOfRange(1, 3)
|
||||
.associateWithTo(itemsWithTheirLength.toMutableMap()) { name -> name.toLowerCase().count { it in "aeuio" } }
|
||||
.associateWithTo(itemsWithTheirLength.toMutableMap()) { name -> name.lowercase().count { it in "aeuio" } }
|
||||
|
||||
assertEquals(mapOf("Alice" to 5, "Bob" to 1, "Carol" to 2), updatedLength)
|
||||
}
|
||||
|
||||
@@ -489,7 +489,7 @@ class CollectionTest {
|
||||
assertEquals(mapOf("Alice" to 5, "Bob" to 3, "Carol" to 5), itemsWithTheirLength)
|
||||
|
||||
val updatedLength =
|
||||
items.drop(1).associateWithTo(itemsWithTheirLength.toMutableMap()) { name -> name.toLowerCase().count { it in "aeuio" }}
|
||||
items.drop(1).associateWithTo(itemsWithTheirLength.toMutableMap()) { name -> name.lowercase().count { it in "aeuio" }}
|
||||
|
||||
assertEquals(mapOf("Alice" to 5, "Bob" to 1, "Carol" to 2), updatedLength)
|
||||
}
|
||||
@@ -1099,7 +1099,7 @@ class CollectionTest {
|
||||
}
|
||||
|
||||
@Test fun sortedWith() {
|
||||
val comparator = compareBy<String> { it.toUpperCase().reversed() }
|
||||
val comparator = compareBy<String> { it.uppercase().reversed() }
|
||||
val data = listOf("cat", "dad", "BAD")
|
||||
|
||||
expect(listOf("BAD", "dad", "cat")) { data.sortedWith(comparator) }
|
||||
|
||||
@@ -485,7 +485,7 @@ abstract class IterableTests<T : Iterable<String>>(val createFrom: (Array<out St
|
||||
|
||||
@Test
|
||||
fun mapAndJoinToString() {
|
||||
val result = data.joinToString(separator = "-") { it.toUpperCase() }
|
||||
val result = data.joinToString(separator = "-") { it.uppercase() }
|
||||
assertEquals("FOO-BAR", result)
|
||||
}
|
||||
|
||||
|
||||
@@ -284,7 +284,7 @@ class MapTest {
|
||||
}
|
||||
|
||||
@Test fun createWithSelectorForKeyAndValue() {
|
||||
val map = listOf("a", "bb", "ccc").associateBy({ it.length }, { it.toUpperCase() })
|
||||
val map = listOf("a", "bb", "ccc").associateBy({ it.length }, { it.uppercase() })
|
||||
assertEquals(3, map.size)
|
||||
assertEquals("A", map[1])
|
||||
assertEquals("BB", map[2])
|
||||
@@ -292,7 +292,7 @@ class MapTest {
|
||||
}
|
||||
|
||||
@Test fun createWithPairSelector() {
|
||||
val map = listOf("a", "bb", "ccc").associate { it.length to it.toUpperCase() }
|
||||
val map = listOf("a", "bb", "ccc").associate { it.length to it.uppercase() }
|
||||
assertEquals(3, map.size)
|
||||
assertEquals("A", map[1])
|
||||
assertEquals("BB", map[2])
|
||||
|
||||
@@ -718,7 +718,7 @@ public class SequenceTest {
|
||||
assertEquals(mapOf("Alice" to 5, "Bob" to 3, "Carol" to 5), itemsWithTheirLength)
|
||||
|
||||
val updatedLength =
|
||||
items.drop(1).associateWithTo(itemsWithTheirLength.toMutableMap()) { name -> name.toLowerCase().count { it in "aeuio" }}
|
||||
items.drop(1).associateWithTo(itemsWithTheirLength.toMutableMap()) { name -> name.lowercase().count { it in "aeuio" }}
|
||||
|
||||
assertEquals(mapOf("Alice" to 5, "Bob" to 1, "Carol" to 2), updatedLength)
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ class RegexTest {
|
||||
|
||||
@Test fun matchIgnoreCase() {
|
||||
for (input in listOf("ascii", "shrödinger"))
|
||||
assertTrue(input.toUpperCase().matches(input.toLowerCase().toRegex(RegexOption.IGNORE_CASE)))
|
||||
assertTrue(input.uppercase().matches(input.lowercase().toRegex(RegexOption.IGNORE_CASE)))
|
||||
}
|
||||
|
||||
@Test fun matchSequence() {
|
||||
|
||||
@@ -289,7 +289,7 @@ class StringNumberConversionTest {
|
||||
}
|
||||
|
||||
@Test fun shortToStringWithRadix() {
|
||||
assertEquals("7FFF", 0x7FFF.toShort().toString(radix = 16).toUpperCase())
|
||||
assertEquals("7FFF", 0x7FFF.toShort().toString(radix = 16).uppercase())
|
||||
assertEquals("-8000", (-0x8000).toShort().toString(radix = 16))
|
||||
assertEquals("-sfs", (-29180).toShort().toString(radix = 32))
|
||||
|
||||
@@ -328,7 +328,7 @@ class StringNumberConversionTest {
|
||||
}
|
||||
|
||||
@Test fun ushortToStringWithRadix() {
|
||||
assertEquals("7FFF", 0x7FFF.toUShort().toString(radix = 16).toUpperCase())
|
||||
assertEquals("7FFF", 0x7FFF.toUShort().toString(radix = 16).uppercase())
|
||||
assertEquals("8000", 0x8000.toUShort().toString(radix = 16))
|
||||
assertEquals("ffff", UShort.MAX_VALUE.toString(radix = 16))
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ package test.text
|
||||
import kotlin.test.*
|
||||
import test.*
|
||||
import test.collections.behaviors.iteratorBehavior
|
||||
import test.collections.behaviors.setBehavior
|
||||
import test.collections.compare
|
||||
import kotlin.math.sign
|
||||
import kotlin.native.concurrent.SharedImmutable
|
||||
@@ -290,18 +289,26 @@ class StringTest {
|
||||
}
|
||||
|
||||
@Test fun capitalize() {
|
||||
assertEquals("A", "A".capitalize())
|
||||
assertEquals("A", "a".capitalize())
|
||||
assertEquals("Abcd", "abcd".capitalize())
|
||||
assertEquals("Abcd", "Abcd".capitalize())
|
||||
fun testCapitalize(expected: String, string: String) {
|
||||
assertEquals(expected, string.capitalize())
|
||||
assertEquals(expected, string.replaceFirstChar { it.uppercase() })
|
||||
}
|
||||
testCapitalize("A", "A")
|
||||
testCapitalize("A", "a")
|
||||
testCapitalize("Abcd", "abcd")
|
||||
testCapitalize("Abcd", "Abcd")
|
||||
}
|
||||
|
||||
@Test fun decapitalize() {
|
||||
assertEquals("a", "A".decapitalize())
|
||||
assertEquals("a", "a".decapitalize())
|
||||
assertEquals("abcd", "abcd".decapitalize())
|
||||
assertEquals("abcd", "Abcd".decapitalize())
|
||||
assertEquals("uRL", "URL".decapitalize())
|
||||
fun testDecapitalize(expected: String, string: String) {
|
||||
assertEquals(expected, string.decapitalize())
|
||||
assertEquals(expected, string.replaceFirstChar { it.lowercase() })
|
||||
}
|
||||
testDecapitalize("a", "A")
|
||||
testDecapitalize("a", "a")
|
||||
testDecapitalize("abcd", "abcd")
|
||||
testDecapitalize("abcd", "Abcd")
|
||||
testDecapitalize("uRL", "URL")
|
||||
}
|
||||
|
||||
@Test fun slice() {
|
||||
@@ -1450,7 +1457,7 @@ class StringTest {
|
||||
assertEquals("[v-e-r-y-l-o-n-g-s-t-r-oops]", result2)
|
||||
|
||||
val data3 = "a1/b".toList()
|
||||
val result3 = data3.joinToString() { it.toUpperCase().toString() }
|
||||
val result3 = data3.joinToString() { it.uppercase() }
|
||||
assertEquals("A, 1, /, B", result3)
|
||||
}
|
||||
|
||||
|
||||
@@ -64,11 +64,73 @@ actual enum class RegexOption {
|
||||
// From char.kt
|
||||
|
||||
actual fun Char.isWhitespace(): Boolean = TODO("Wasm stdlib: Text")
|
||||
actual fun Char.toLowerCase(): Char = TODO("Wasm stdlib: Text")
|
||||
actual fun Char.toUpperCase(): Char = TODO("Wasm stdlib: Text")
|
||||
actual fun Char.isHighSurrogate(): Boolean = TODO("Wasm stdlib: Text")
|
||||
actual fun Char.isLowSurrogate(): Boolean = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*/
|
||||
public actual fun Char.toLowerCase(): Char = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [lowercase] function.
|
||||
* If this character has no mapping equivalent, the character itself is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public actual fun Char.lowercaseChar(): Char = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Converts this character to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\u0130'.lowercase()` returns `"\u0069\u0307"`,
|
||||
* where `'\u0130'` is the LATIN CAPITAL LETTER I WITH DOT ABOVE character (`İ`).
|
||||
* If this character has no lower case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public actual fun Char.lowercase(): String = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*/
|
||||
public actual fun Char.toUpperCase(): Char = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function performs one-to-one character mapping.
|
||||
* To support one-to-many character mapping use the [uppercase] function.
|
||||
* If this character has no mapping equivalent, the character itself is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public actual fun Char.uppercaseChar(): Char = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Converts this character to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many character mapping, thus the length of the returned string can be greater than one.
|
||||
* For example, `'\uFB00'.uppercase()` returns `"\u0046\u0046"`,
|
||||
* where `'\uFB00'` is the LATIN SMALL LIGATURE FF character (`ff`).
|
||||
* If this character has no upper case mapping, the result of `toString()` of this char is returned.
|
||||
*
|
||||
* @sample samples.text.Chars.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public actual fun Char.uppercase(): String = TODO("Wasm stdlib: Text")
|
||||
|
||||
// From string.kt
|
||||
|
||||
|
||||
@@ -193,17 +255,38 @@ public actual fun String.substring(startIndex: Int, endIndex: Int): String = TOD
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to upper case using the rules of the default locale.
|
||||
*
|
||||
* @sample samples.text.Strings.toUpperCase
|
||||
*/
|
||||
public actual fun String.toUpperCase(): String = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the default locale.
|
||||
* Returns a copy of this string converted to upper case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* @sample samples.text.Strings.toLowerCase
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.uppercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public actual fun String.uppercase(): String = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using the rules of the default locale.
|
||||
*/
|
||||
public actual fun String.toLowerCase(): String = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* Returns a copy of this string converted to lower case using Unicode mapping rules of the invariant locale.
|
||||
*
|
||||
* This function supports one-to-many and many-to-one character mapping,
|
||||
* thus the length of the returned string can be different from the length of the original string.
|
||||
*
|
||||
* @sample samples.text.Strings.lowercase
|
||||
*/
|
||||
@SinceKotlin("1.4")
|
||||
@ExperimentalStdlibApi
|
||||
public actual fun String.lowercase(): String = TODO("Wasm stdlib: Text")
|
||||
|
||||
public actual fun String.capitalize(): String = TODO("Wasm stdlib: Text")
|
||||
public actual fun String.decapitalize(): String = TODO("Wasm stdlib: Text")
|
||||
public actual fun CharSequence.repeat(n: Int): String = TODO("Wasm stdlib: Text")
|
||||
|
||||
+4
@@ -5113,6 +5113,10 @@ public final class kotlin/text/CharsKt {
|
||||
public static final fun getDirectionality (C)Lkotlin/text/CharDirectionality;
|
||||
public static final fun isSurrogate (C)Z
|
||||
public static final fun isWhitespace (C)Z
|
||||
public static final fun lowercase (CLjava/util/Locale;)Ljava/lang/String;
|
||||
public static final fun titlecase (C)Ljava/lang/String;
|
||||
public static final fun titlecase (CLjava/util/Locale;)Ljava/lang/String;
|
||||
public static final fun uppercase (CLjava/util/Locale;)Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class kotlin/text/Charsets {
|
||||
|
||||
Reference in New Issue
Block a user