[WASM] Add std text implementations

This commit is contained in:
Igor Yakovlev
2021-11-08 18:43:18 +01:00
committed by TeamCityServer
parent 1b4f519701
commit 9408499da9
27 changed files with 1714 additions and 169 deletions
@@ -100,10 +100,10 @@ fun main(args: Array<String>) {
oneToManyMappingsGenerators.add(lowercase)
}
val categoryTestGenerator: CharCategoryTestGenerator
val stringUppercaseGenerators = mutableListOf<StringUppercaseGenerator>()
val stringLowercaseGenerators = mutableListOf<StringLowercaseGenerator>()
val stringUppercaseGenerator: StringUppercaseGenerator
val stringLowercaseGenerator: StringLowercaseGenerator
val categoryTestGenerator: CharCategoryTestGenerator
val stringCasingTestGenerator: StringCasingTestGenerator
@@ -115,7 +115,9 @@ fun main(args: Array<String>) {
categoryTestGenerator = CharCategoryTestGenerator(categoryTestFile)
val commonGeneratedDir = baseDir.resolve("libraries/stdlib/common/src/generated")
oneToManyMappingsGenerators.add(OneToManyMappingsGenerator.forTitlecase(commonGeneratedDir.resolve("_OneToManyTitlecaseMappings.kt"), bmpUnicodeDataLines))
oneToManyMappingsGenerators.add(
OneToManyMappingsGenerator.forTitlecase(commonGeneratedDir.resolve("_OneToManyTitlecaseMappings.kt"), bmpUnicodeDataLines)
)
val jsGeneratedDir = baseDir.resolve("libraries/stdlib/js/src/generated/")
addRangesGenerators(jsGeneratedDir, KotlinTarget.JS)
@@ -129,8 +131,19 @@ fun main(args: Array<String>) {
addRangesGenerators(nativeGeneratedDir, KotlinTarget.Native)
addOneToOneMappingsGenerators(nativeGeneratedDir, KotlinTarget.Native)
addOneToManyMappingsGenerators(nativeGeneratedDir, KotlinTarget.Native)
stringUppercaseGenerator = StringUppercaseGenerator(nativeGeneratedDir.resolve("_StringUppercase.kt"), unicodeDataLines)
stringLowercaseGenerator = StringLowercaseGenerator(nativeGeneratedDir.resolve("_StringLowercase.kt"), unicodeDataLines)
stringUppercaseGenerators.add(StringUppercaseGenerator(nativeGeneratedDir.resolve("_StringUppercase.kt"), unicodeDataLines))
stringLowercaseGenerators.add(
StringLowercaseGenerator(nativeGeneratedDir.resolve("_StringLowercase.kt"), unicodeDataLines, KotlinTarget.Native)
)
val wasmGeneratedDir = baseDir.resolve("libraries/stdlib/wasm/src/generated/")
addRangesGenerators(wasmGeneratedDir, KotlinTarget.WASM)
addOneToOneMappingsGenerators(wasmGeneratedDir, KotlinTarget.WASM)
addOneToManyMappingsGenerators(wasmGeneratedDir, KotlinTarget.WASM)
stringUppercaseGenerators.add(StringUppercaseGenerator(wasmGeneratedDir.resolve("_StringUppercase.kt"), unicodeDataLines))
stringLowercaseGenerators.add(
StringLowercaseGenerator(wasmGeneratedDir.resolve("_StringLowercase.kt"), unicodeDataLines, KotlinTarget.WASM)
)
val nativeTestDir = baseDir.resolve("kotlin-native/backend.native/tests/stdlib_external/text")
stringCasingTestGenerator = StringCasingTestGenerator(nativeTestDir)
@@ -186,15 +199,17 @@ fun main(args: Array<String>) {
it.generate()
}
stringUppercaseGenerator.let {
stringUppercaseGenerators.forEach {
specialCasingLines.forEach { line -> it.appendSpecialCasingLine(line) }
it.generate()
}
stringLowercaseGenerator.let {
stringLowercaseGenerators.forEach {
specialCasingLines.forEach { line -> it.appendSpecialCasingLine(line) }
wordBreakPropertyLines.forEach { line -> it.appendWordBreakPropertyLine(line) }
it.generate()
}
stringCasingTestGenerator.let {
derivedCorePropertiesLines.forEach { line -> it.appendDerivedCorePropertiesLine(line) }
it.generate()
@@ -18,6 +18,7 @@ import java.io.FileWriter
internal class StringLowercaseGenerator(
private val outputFile: File,
unicodeDataLines: List<UnicodeDataLine>,
private val target: KotlinTarget,
) : StringCasingGenerator(unicodeDataLines) {
private val casedRanges = mutableListOf<IntRange>()
@@ -60,7 +61,7 @@ internal class StringLowercaseGenerator(
casedRanges.sortBy { it.first }
caseIgnorableRanges.sortBy { it.first }
val strategy = RangesWritingStrategy.of(KotlinTarget.Native)
val strategy = RangesWritingStrategy.of(target)
FileWriter(outputFile).use { writer ->
writer.writeHeader(outputFile, "kotlin.text")
@@ -5,6 +5,7 @@
package generators.unicode.ranges
import templates.Backend
import templates.KotlinTarget
import templates.Platform
import java.io.FileWriter
@@ -21,15 +22,15 @@ internal sealed class RangesWritingStrategy {
fun of(target: KotlinTarget, wrapperName: String? = null): RangesWritingStrategy {
return when (target.platform) {
Platform.JS -> JsRangesWritingStrategy(wrapperName!!)
else -> NativeRangesWritingStrategy
else -> NativeRangesWritingStrategy(useNativeRangesAnnotation = target.backend != Backend.Wasm)
}
}
}
}
internal object NativeRangesWritingStrategy : RangesWritingStrategy() {
internal class NativeRangesWritingStrategy(private val useNativeRangesAnnotation: Boolean) : RangesWritingStrategy() {
override val indentation: String get() = ""
override val rangesAnnotation: String get() = "@SharedImmutable\n"
override val rangesAnnotation: String get() = if (useNativeRangesAnnotation) "@SharedImmutable\n" else ""
override val rangesVisibilityModifier: String get() = "private"
override fun beforeWritingRanges(writer: FileWriter) {}
override fun afterWritingRanges(writer: FileWriter) {}