Commonize Char.titlecaseChar() and Char.titlecase() #KT-44369
This commit is contained in:
@@ -912,6 +912,14 @@ public inline fun kotlin.CharSequence.takeWhile(predicate: (kotlin.Char) -> kotl
|
||||
|
||||
public inline fun kotlin.String.takeWhile(predicate: (kotlin.Char) -> kotlin.Boolean): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
public fun kotlin.Char.titlecase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
public fun kotlin.Char.titlecaseChar(): kotlin.Char
|
||||
|
||||
@kotlin.Deprecated(message = "Use Kotlin compiler 1.4 to avoid deprecation warning.")
|
||||
@kotlin.DeprecatedSinceKotlin(hiddenSince = "1.4")
|
||||
@kotlin.internal.InlineOnly
|
||||
|
||||
@@ -912,6 +912,14 @@ public inline fun kotlin.CharSequence.takeWhile(predicate: (kotlin.Char) -> kotl
|
||||
|
||||
public inline fun kotlin.String.takeWhile(predicate: (kotlin.Char) -> kotlin.Boolean): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
public fun kotlin.Char.titlecase(): kotlin.String
|
||||
|
||||
@kotlin.SinceKotlin(version = "1.4")
|
||||
@kotlin.ExperimentalStdlibApi
|
||||
public fun kotlin.Char.titlecaseChar(): kotlin.Char
|
||||
|
||||
@kotlin.Deprecated(message = "Use Kotlin compiler 1.4 to avoid deprecation warning.")
|
||||
@kotlin.DeprecatedSinceKotlin(hiddenSince = "1.4")
|
||||
@kotlin.internal.InlineOnly
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package kotlin.text
|
||||
|
||||
//
|
||||
// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateUnicodeData.kt
|
||||
// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib
|
||||
//
|
||||
|
||||
// 10 mappings totally
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
internal fun Char.titlecaseImpl(): String {
|
||||
val uppercase = uppercase()
|
||||
if (uppercase.length > 1) {
|
||||
return if (this == '\u0149') uppercase else uppercase[0] + uppercase.substring(1).lowercase()
|
||||
}
|
||||
return titlecaseChar().toString()
|
||||
}
|
||||
@@ -27,6 +27,7 @@ val commonMainSources by task<Sync> {
|
||||
"libraries/stdlib/common/src/generated/_Collections.kt",
|
||||
"libraries/stdlib/common/src/generated/_Comparisons.kt",
|
||||
"libraries/stdlib/common/src/generated/_Maps.kt",
|
||||
"libraries/stdlib/common/src/generated/_OneToManyTitlecaseMappings.kt",
|
||||
"libraries/stdlib/common/src/generated/_Sequences.kt",
|
||||
"libraries/stdlib/common/src/generated/_Sets.kt",
|
||||
"libraries/stdlib/common/src/generated/_Strings.kt",
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package kotlin.text
|
||||
|
||||
//
|
||||
// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateUnicodeData.kt
|
||||
// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib
|
||||
//
|
||||
|
||||
// 4 ranges totally
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
internal fun Char.titlecaseCharImpl(): Char {
|
||||
val code = this.toInt()
|
||||
// Letters repeating <Lu, Lt, Ll> sequence and code of the Lt is a multiple of 3, e.g. <DŽ, Dž, dž>
|
||||
if (code in 0x01c4..0x01cc || code in 0x01f1..0x01f3) {
|
||||
return (3 * ((code + 1) / 3)).toChar()
|
||||
}
|
||||
// Lower case letters whose title case mapping equivalent is equal to the original letter
|
||||
if (code in 0x10d0..0x10fa || code in 0x10fd..0x10ff) {
|
||||
return this
|
||||
}
|
||||
return uppercaseChar()
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package kotlin.text
|
||||
|
||||
//
|
||||
// NOTE: THIS FILE IS AUTO-GENERATED by the GenerateUnicodeData.kt
|
||||
// See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib
|
||||
//
|
||||
|
||||
// 4 ranges totally
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
internal fun Char.titlecaseCharImpl(): Char {
|
||||
val code = this.toInt()
|
||||
// Letters repeating <Lu, Lt, Ll> sequence and code of the Lt is a multiple of 3, e.g. <DŽ, Dž, dž>
|
||||
if (code in 0x01c4..0x01cc || code in 0x01f1..0x01f3) {
|
||||
return (3 * ((code + 1) / 3)).toChar()
|
||||
}
|
||||
// Lower case letters whose title case mapping equivalent is equal to the original letter
|
||||
if (code in 0x10d0..0x10fa || code in 0x10fd..0x10ff) {
|
||||
return this
|
||||
}
|
||||
return uppercaseChar()
|
||||
}
|
||||
@@ -79,6 +79,19 @@ public actual fun Char.uppercaseChar(): Char {
|
||||
@kotlin.internal.InlineOnly
|
||||
public actual inline fun Char.uppercase(): String = toString().asDynamic().toUpperCase() as String
|
||||
|
||||
/**
|
||||
* 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
|
||||
public actual fun Char.titlecaseChar(): Char = titlecaseCharImpl()
|
||||
|
||||
/**
|
||||
* Returns `true` if this character is a Unicode high-surrogate code unit (also known as leading-surrogate code unit).
|
||||
*/
|
||||
|
||||
@@ -238,27 +238,7 @@ public inline fun Char.toTitleCase(): Char = titlecaseChar()
|
||||
@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()
|
||||
}
|
||||
public actual inline fun Char.titlecaseChar(): Char = Character.toTitleCase(this)
|
||||
|
||||
/**
|
||||
* Converts this character to title case using Unicode mapping rules of the specified [locale].
|
||||
|
||||
@@ -193,6 +193,33 @@ public expect fun Char.uppercaseChar(): Char
|
||||
@ExperimentalStdlibApi
|
||||
public expect fun Char.uppercase(): String
|
||||
|
||||
/**
|
||||
* 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
|
||||
public expect fun Char.titlecaseChar(): Char
|
||||
|
||||
/**
|
||||
* 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 = titlecaseImpl()
|
||||
|
||||
/**
|
||||
* Concatenates this Char and a String.
|
||||
*
|
||||
|
||||
@@ -130,6 +130,19 @@ public actual fun Char.uppercaseChar(): Char = TODO("Wasm stdlib: Text")
|
||||
@ExperimentalStdlibApi
|
||||
public actual fun Char.uppercase(): String = TODO("Wasm stdlib: Text")
|
||||
|
||||
/**
|
||||
* 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
|
||||
public actual fun Char.titlecaseChar(): Char = TODO("Wasm stdlib: Text")
|
||||
|
||||
|
||||
/**
|
||||
* Returns the Unicode general category of this character.
|
||||
|
||||
Reference in New Issue
Block a user