[K/N] Experimental Char code point constants and functions
Internalize WASM Char code point functions. As a part of efforts to stabilize Native stdlib.
This commit is contained in:
committed by
Space Team
parent
c6eaadb44f
commit
b25f3be81b
@@ -129,7 +129,9 @@ fun main(args: Array<String>) {
|
||||
addRangesGenerators(nativeGeneratedDir, KotlinTarget.Native)
|
||||
addOneToOneMappingsGenerators(nativeGeneratedDir, KotlinTarget.Native)
|
||||
addOneToManyMappingsGenerators(nativeGeneratedDir, KotlinTarget.Native)
|
||||
stringUppercaseGenerators.add(StringUppercaseGenerator(nativeGeneratedDir.resolve("_StringUppercase.kt"), unicodeDataLines))
|
||||
stringUppercaseGenerators.add(
|
||||
StringUppercaseGenerator(nativeGeneratedDir.resolve("_StringUppercase.kt"), unicodeDataLines, KotlinTarget.Native)
|
||||
)
|
||||
stringLowercaseGenerators.add(
|
||||
StringLowercaseGenerator(nativeGeneratedDir.resolve("_StringLowercase.kt"), unicodeDataLines, KotlinTarget.Native)
|
||||
)
|
||||
@@ -138,7 +140,9 @@ fun main(args: Array<String>) {
|
||||
addRangesGenerators(wasmGeneratedDir, KotlinTarget.WASM)
|
||||
addOneToOneMappingsGenerators(wasmGeneratedDir, KotlinTarget.WASM)
|
||||
addOneToManyMappingsGenerators(wasmGeneratedDir, KotlinTarget.WASM)
|
||||
stringUppercaseGenerators.add(StringUppercaseGenerator(wasmGeneratedDir.resolve("_StringUppercase.kt"), unicodeDataLines))
|
||||
stringUppercaseGenerators.add(
|
||||
StringUppercaseGenerator(wasmGeneratedDir.resolve("_StringUppercase.kt"), unicodeDataLines, KotlinTarget.WASM)
|
||||
)
|
||||
stringLowercaseGenerators.add(
|
||||
StringLowercaseGenerator(wasmGeneratedDir.resolve("_StringLowercase.kt"), unicodeDataLines, KotlinTarget.WASM)
|
||||
)
|
||||
|
||||
+1
-1
@@ -132,7 +132,7 @@ internal class StringLowercaseGenerator(
|
||||
}
|
||||
return low.code
|
||||
}
|
||||
""".trimIndent()
|
||||
""".trimIndent().prependOptInExperimentalNativeApi(target)
|
||||
|
||||
private fun isFinalSigmaAt(): String = """
|
||||
// \p{cased} (\p{case-ignorable})* Sigma !( (\p{case-ignorable})* \p{cased} )
|
||||
|
||||
+14
-4
@@ -8,12 +8,14 @@ package generators.unicode.mappings.string
|
||||
import generators.unicode.SpecialCasingLine
|
||||
import generators.unicode.UnicodeDataLine
|
||||
import generators.unicode.writeHeader
|
||||
import templates.KotlinTarget
|
||||
import java.io.File
|
||||
import java.io.FileWriter
|
||||
|
||||
internal class StringUppercaseGenerator(
|
||||
private val outputFile: File,
|
||||
unicodeDataLines: List<UnicodeDataLine>
|
||||
unicodeDataLines: List<UnicodeDataLine>,
|
||||
private val target: KotlinTarget
|
||||
) : StringCasingGenerator(unicodeDataLines) {
|
||||
|
||||
override fun SpecialCasingLine.mapping(): List<String> = uppercaseMapping
|
||||
@@ -39,7 +41,7 @@ internal class StringUppercaseGenerator(
|
||||
}
|
||||
|
||||
private fun charCount(): String = """
|
||||
internal fun Int.charCount(): Int = if (this >= Char.MIN_SUPPLEMENTARY_CODE_POINT) 2 else 1
|
||||
internal fun Int.charCount(): Int = if (this > Char.MAX_VALUE.code) 2 else 1
|
||||
""".trimIndent()
|
||||
|
||||
private fun codePointAt(): String = """
|
||||
@@ -53,11 +55,11 @@ internal class StringUppercaseGenerator(
|
||||
}
|
||||
return high.code
|
||||
}
|
||||
""".trimIndent()
|
||||
""".trimIndent().prependOptInExperimentalNativeApi(target)
|
||||
|
||||
private fun appendCodePoint(): String = """
|
||||
internal fun StringBuilder.appendCodePoint(codePoint: Int) {
|
||||
if (codePoint < Char.MIN_SUPPLEMENTARY_CODE_POINT) {
|
||||
if (codePoint <= Char.MAX_VALUE.code) {
|
||||
append(codePoint.toChar())
|
||||
} else {
|
||||
append(Char.MIN_HIGH_SURROGATE + ((codePoint - 0x10000) shr 10))
|
||||
@@ -101,4 +103,12 @@ internal class StringUppercaseGenerator(
|
||||
return sb.toString()
|
||||
}
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
internal fun String.prependOptInExperimentalNativeApi(target: KotlinTarget): String {
|
||||
return if (target == KotlinTarget.Native) {
|
||||
"@OptIn(kotlin.experimental.ExperimentalNativeApi::class)\n$this"
|
||||
} else {
|
||||
this
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user