some fixes

This commit is contained in:
InsanusMokrassar committed 2024-08-07 16:46:49 +06:00
1 parent 0dd8f41eb0
commit d94cd7ea94
7 files changed
+4303 -2736

No files matched your search

+1
View File
@@ -0,0 +1 @@
[{"alpha3-b":"aar","alpha3-t":null,"alpha2":"aa","English":"Afar","French":"afar"},{"alpha3-b":"abk","alpha3-t":null,"alpha2":"ab","English":"Abkhazian","French":"abkhaze"},{"alpha3-b":"ace","alpha3-t":null,"alpha2":null,"English":"Achinese","French":"aceh"},{"alpha3-b":"ach","alpha3-t":null,"alpha2":null,"English":"Acoli","French":"acoli"},{"alpha3-b":"ada","alpha3-t":null,"alpha2":null,"English":"Adangme","French":"adangme"},{"alpha3-b":"ady","alpha3-t":null,"alpha2":null,"English":"Adyghe; Adygei","French":"adyghé"},{"alpha3-b":"afa","alpha3-t":null,"alpha2":null,"English":"Afro-Asiatic languages","French":"afro-asiatiques, langues"},{"alpha3-b":"afh","alpha3-t":null,"alpha2":null,"English":"Afrihili","French":"afrihili"},{"alpha3-b":"afr","alpha3-t":null,"alpha2":"af","English":"Afrikaans","French":"afrikaans"},{"alpha3-b":"ain","alpha3-t":null,"alpha2":null,"English":"Ainu","French":"aïnou"},{"alpha3-b":"aka","alpha3-t":null,"alpha2":"ak","English":"Akan","French":"akan"},{"alpha3-b":"akk","alpha3-t":null,"alpha2":null,"English":"Akkadian","French":"akkadien"},{"alpha3-b":"alb","alpha3-t":"sqi","alpha2":"sq","English":"Albanian","French":"albanais"},{"alpha3-b":"ale","alpha3-t":null,"alpha2":null,"English":"Aleut","French":"aléoute"},{"alpha3-b":"alg","alpha3-t":null,"alpha2":null,"English":"Algonquian languages","French":"algonquines, langues"},{"alpha3-b":"alt","alpha3-t":null,"alpha2":null,"English":"Southern Altai","French":"altai du Sud"},{"alpha3-b":"amh","alpha3-t":null,"alpha2":"am","English":"Amharic","French":"amharique"},{"alpha3-b":"ang","alpha3-t":null,"alpha2":null,"English":"English, Old (ca.450-1100)","French":"anglo-saxon (ca.450-1100)"},{"alpha3-b":"anp","alpha3-t":null,"alpha2":null,"English":"Angika","French":"angika"},{"alpha3-b":"apa","alpha3-t":null,"alpha2":null,"English":"Apache languages","French":"apaches, langues"},{"alpha3-b":"ara","alpha3-t":null,"alpha2":"ar","English":"Arabic","French":"arabe"},{"alpha3-b":"arc","alpha3-t":null,"alpha2":null,"English":"Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)","French":"araméen d'empire (700-300 BCE)"},{"alpha3-b":"arg","alpha3-t":null,"alpha2":"an","English":"Aragonese","French":"aragonais"},{"alpha3-b":"arm","alpha3-t":"hye","alpha2":"hy","English":"Armenian","French":"arménien"},{"alpha3-b":"arn","alpha3-t":null,"alpha2":null,"English":"Mapudungun; Mapuche","French":"mapudungun; mapuche; mapuce"},{"alpha3-b":"arp","alpha3-t":null,"alpha2":null,"English":"Arapaho","French":"arapaho"},{"alpha3-b":"art","alpha3-t":null,"alpha2":null,"English":"Artificial languages","French":"artificielles, langues"},{"alpha3-b":"arw","alpha3-t":null,"alpha2":null,"English":"Arawak","French":"arawak"},{"alpha3-b":"asm","alpha3-t":null,"alpha2":"as","English":"Assamese","French":"assamais"},{"alpha3-b":"ast","alpha3-t":null,"alpha2":null,"English":"Asturian; Bable; Leonese; Asturleonese","French":"asturien; bable; léonais; asturoléonais"},{"alpha3-b":"ath","alpha3-t":null,"alpha2":null,"English":"Athapascan languages","French":"athapascanes, langues"},{"alpha3-b":"aus","alpha3-t":null,"alpha2":null,"English":"Australian languages","French":"australiennes, langues"},{"alpha3-b":"ava","alpha3-t":null,"alpha2":"av","English":"Avaric","French":"avar"},{"alpha3-b":"ave","alpha3-t":null,"alpha2":"ae","English":"Avestan","French":"avestique"},{"alpha3-b":"awa","alpha3-t":null,"alpha2":null,"English":"Awadhi","French":"awadhi"},{"alpha3-b":"aym","alpha3-t":null,"alpha2":"ay","English":"Aymara","French":"aymara"},{"alpha3-b":"aze","alpha3-t":null,"alpha2":"az","English":"Azerbaijani","French":"azéri"},{"alpha3-b":"bad","alpha3-t":null,"alpha2":null,"English":"Banda languages","French":"banda, langues"},{"alpha3-b":"bai","alpha3-t":null,"alpha2":null,"English":"Bamileke languages","French":"bamiléké, langues"},{"alpha3-b":"bak","alpha3-t":null,"alpha2":"ba","English":"Bashkir","French":"bachkir"},{"alpha3-b":"bal","alpha3-t":null,"alpha2":null,"English":"Baluchi","French":"baloutchi"},{"alpha3-b":"bam","alpha3-t":null,"alpha2":"bm","English":"Bambara","French":"bambara"},{"alpha3-b":"ban","alpha3-t":null,"alpha2":null,"English":"Balinese","French":"balinais"},{"alpha3-b":"baq","alpha3-t":"eus","alpha2":"eu","English":"Basque","French":"basque"},{"alpha3-b":"bas","alpha3-t":null,"alpha2":null,"English":"Basa","French":"basa"},{"alpha3-b":"bat","alpha3-t":null,"alpha2":null,"English":"Baltic languages","French":"baltes, langues"},{"alpha3-b":"bej","alpha3-t":null,"alpha2":null,"English":"Beja; Bedawiyet","French":"bedja"},{"alpha3-b":"bel","alpha3-t":null,"alpha2":"be","English":"Belarusian","French":"biélorusse"},{"alpha3-b":"bem","alpha3-t":null,"alpha2":null,"English":"Bemba","French":"bemba"},{"alpha3-b":"ben","alpha3-t":null,"alpha2":"bn","English":"Bengali","French":"bengali"},{"alpha3-b":"ber","alpha3-t":null,"alpha2":null,"English":"Berber languages","French":"berbères, langues"},{"alpha3-b":"bho","alpha3-t":null,"alpha2":nulLine truncated
@@ -22,17 +22,24 @@ private const val baseClassSerializerAnnotationName = "@Serializable(${baseClass
@Serializable
private data class LanguageCode(
@SerialName("alpha2")
val tag: String,
@SerialName("English")
val title: String
)
val title: String,
@SerialName("alpha2")
val alpha: String? = null,
@SerialName("alpha3-b")
val alpha2: String? = null,
@SerialName("alpha3-t")
val alpha3: String? = null,
) {
val tag: String
get() = alpha ?: alpha2 ?: alpha3!!
}
fun String.adaptAsTitle() = if (first().isDigit()) {
fun String.adaptAsTitle() = (if (first().isDigit()) {
"L$this"
} else {
this
}
}).replace(".", "_").replace("'", "_")
fun String.normalized() = Normalizer.normalize(this, Normalizer.Form.NFD).replace(Regex("[^\\p{ASCII}]"), "")
@@ -73,7 +80,10 @@ data class Tag(
val title: String,
val tag: String,
val subtags: List<Tag>
)
) {
val adaptedTitle
get() = title.adaptAsTitle()
}
private fun printLanguageCodeAndTags(
tag: Tag,
@@ -81,17 +91,19 @@ private fun printLanguageCodeAndTags(
indents: String = " "
): String = if (tag.subtags.isEmpty()) {
"""${indents}${baseClassSerializerAnnotationName}
${indents}object ${tag.title} : ${parent ?.title ?: baseClassName}() { override val code: String = "${tag.tag}"${parent ?.let { parent -> "; override val parentLang: ${parent.title} get() = ${parent.title};" } ?: ""} }"""
${indents}object ${tag.adaptedTitle} : ${parent ?.adaptedTitle ?: baseClassName} { override val code: String = "${tag.tag}"${parent ?.let { parent -> "; override val parentLang: ${parent.adaptedTitle} get() = ${parent.adaptedTitle}" } ?: ""}; override fun toString() = code }"""
} else {
"""
${indents}${baseClassSerializerAnnotationName}
${indents}sealed class ${tag.title} : ${parent ?.title ?: baseClassName}() {
${indents} override val code: String = "${tag.tag}"${parent ?.let { parent -> "\n${indents} override val parentLang: ${parent.title} get() = ${parent.title};" } ?: ""}
${indents}sealed interface ${tag.adaptedTitle} : ${parent ?.adaptedTitle ?: baseClassName} {
${tag.subtags.joinToString("\n") { printLanguageCodeAndTags(it, tag, "${indents} ") }}
${indents} ${baseClassSerializerAnnotationName}
${indents} companion object : ${tag.title}()
${indents} companion object : ${tag.adaptedTitle} {
${indents} override val code: String = "${tag.tag}"${parent ?.let { parent -> "\n${indents} override val parentLang: ${parent.adaptedTitle} get() = ${parent.adaptedTitle};" } ?: ""}
${indents} override fun toString() = code
${indents} }
${indents}}
"""
}
@@ -105,23 +117,22 @@ import kotlinx.serialization.Serializable
* https://datahub.io/core/language-codes/ files (base and tags) and create the whole hierarchy using it.
*/
${baseClassSerializerAnnotationName}
sealed class $baseClassName {
abstract val code: String
open val parentLang: $baseClassName?
get() = null
open val withoutDialect: String
sealed interface $baseClassName {
val code: String
val parentLang: $baseClassName?
get() = code.split("-").takeIf { it.size > 1 } ?.first() ?.let(::$unknownBaseClassName)
val withoutDialect: String
get() = parentLang ?.code ?: code
${tags.joinToString("\n") { printLanguageCodeAndTags(it, indents = " ") } }
$baseClassSerializerAnnotationName
data class $unknownBaseClassName (override val code: String) : $baseClassName() {
data class $unknownBaseClassName (override val code: String) : $baseClassName {
override val parentLang = code.dropLastWhile { it != '-' }.removeSuffix("-").takeIf { it.length > 0 } ?.let(::$unknownBaseClassName)
}
@Deprecated("Renamed", ReplaceWith("$baseClassName.$unknownBaseClassName", "${if (prePackage.isNotEmpty()) "$prePackage." else ""}$baseClassName.$unknownBaseClassName"))
val $oldUnknownBaseClassName = $unknownBaseClassName
override fun toString() = code
val $oldUnknownBaseClassName
get() = $unknownBaseClassName
}
@Deprecated("Renamed", ReplaceWith("$baseClassName", "${if (prePackage.isNotEmpty()) "$prePackage." else ""}$baseClassName"))
typealias $oldBaseClassName = $baseClassName
@@ -133,7 +144,7 @@ fun createStringConverterCode(tags: List<Tag>, prePackage: String): String {
pretitle: String = baseClassName,
indents: String = " "
): String {
val currentTitle = "$pretitle.${tag.title}"
val currentTitle = "$pretitle.${tag.adaptedTitle}"
return """${indents}$currentTitle.code -> $currentTitle${if (tag.subtags.isNotEmpty()) tag.subtags.joinToString("\n", "\n") { createDeserializeVariantForTag(it, currentTitle, indents) } else ""}"""
}
fun createInheritorVariantForTag(
@@ -141,7 +152,7 @@ fun createStringConverterCode(tags: List<Tag>, prePackage: String): String {
pretitle: String = baseClassName,
indents: String = " "
): String {
val currentTitle = "$pretitle.${tag.title}"
val currentTitle = "$pretitle.${tag.adaptedTitle}"
val subtags = if (tag.subtags.isNotEmpty()) {
tag.subtags.joinToString(",\n", ",\n") { createInheritorVariantForTag(it, currentTitle, "$indents ") }
} else {
@@ -155,7 +166,7 @@ fun createStringConverterCode(tags: List<Tag>, prePackage: String): String {
indents: String = " ",
codeSuffix: String = ""
): String {
val currentTitle = "$pretitle.${tag.title}"
val currentTitle = "$pretitle.${tag.adaptedTitle}"
val subtags = if (tag.subtags.isNotEmpty()) {
tag.subtags.joinToString(",\n", ",\n") { createInheritorVariantForMapForTag(it, currentTitle, "$indents ", codeSuffix) }
} else {
@@ -266,7 +277,7 @@ suspend fun main(vararg args: String) {
File(outputFolder, "LanguageCodes.kt").apply {
delete()
createNewFile()
writeText(targetPackagePrefix + buildKtFileContent(tags, targetPackage ?: ""))
writeText("@file:Suppress(\"SERIALIZER_TYPE_INCOMPATIBLE\")\n\n" + targetPackagePrefix + buildKtFileContent(tags, targetPackage ?: ""))
}
File(outputFolder, "StringToLanguageCodes.kt").apply {
+1
View File
@@ -0,0 +1 @@
[{"lang":"af","langType":"af","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"af.xml"},{"lang":"af-NA","langType":"af","territory":"NA","revGenDate":null,"defs":2,"dftLang":0,"file":"af_NA.xml"},{"lang":"af-ZA","langType":"af","territory":"ZA","revGenDate":null,"defs":0,"dftLang":0,"file":"af_ZA.xml"},{"lang":"agq","langType":"agq","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"agq.xml"},{"lang":"agq-CM","langType":"agq","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"agq_CM.xml"},{"lang":"ak","langType":"ak","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ak.xml"},{"lang":"ak-GH","langType":"ak","territory":"GH","revGenDate":null,"defs":0,"dftLang":0,"file":"ak_GH.xml"},{"lang":"am","langType":"am","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"am.xml"},{"lang":"am-ET","langType":"am","territory":"ET","revGenDate":null,"defs":0,"dftLang":0,"file":"am_ET.xml"},{"lang":"ar","langType":"ar","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"ar.xml"},{"lang":"ar-001","langType":"ar","territory":1,"revGenDate":null,"defs":0,"dftLang":0,"file":"ar_001.xml"},{"lang":"ar-AE","langType":"ar","territory":"AE","revGenDate":null,"defs":3,"dftLang":0,"file":"ar_AE.xml"},{"lang":"ar-BH","langType":"ar","territory":"BH","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_BH.xml"},{"lang":"ar-DJ","langType":"ar","territory":"DJ","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_DJ.xml"},{"lang":"ar-DZ","langType":"ar","territory":"DZ","revGenDate":null,"defs":2,"dftLang":0,"file":"ar_DZ.xml"},{"lang":"ar-EG","langType":"ar","territory":"EG","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_EG.xml"},{"lang":"ar-EH","langType":"ar","territory":"EH","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_EH.xml"},{"lang":"ar-ER","langType":"ar","territory":"ER","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_ER.xml"},{"lang":"ar-IL","langType":"ar","territory":"IL","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_IL.xml"},{"lang":"ar-IQ","langType":"ar","territory":"IQ","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_IQ.xml"},{"lang":"ar-JO","langType":"ar","territory":"JO","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_JO.xml"},{"lang":"ar-KM","langType":"ar","territory":"KM","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_KM.xml"},{"lang":"ar-KW","langType":"ar","territory":"KW","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_KW.xml"},{"lang":"ar-LB","langType":"ar","territory":"LB","revGenDate":null,"defs":2,"dftLang":0,"file":"ar_LB.xml"},{"lang":"ar-LY","langType":"ar","territory":"LY","revGenDate":null,"defs":3,"dftLang":0,"file":"ar_LY.xml"},{"lang":"ar-MA","langType":"ar","territory":"MA","revGenDate":null,"defs":3,"dftLang":0,"file":"ar_MA.xml"},{"lang":"ar-MR","langType":"ar","territory":"MR","revGenDate":null,"defs":2,"dftLang":0,"file":"ar_MR.xml"},{"lang":"ar-OM","langType":"ar","territory":"OM","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_OM.xml"},{"lang":"ar-PS","langType":"ar","territory":"PS","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_PS.xml"},{"lang":"ar-QA","langType":"ar","territory":"QA","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_QA.xml"},{"lang":"ar-SA","langType":"ar","territory":"SA","revGenDate":null,"defs":3,"dftLang":0,"file":"ar_SA.xml"},{"lang":"ar-SD","langType":"ar","territory":"SD","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_SD.xml"},{"lang":"ar-SO","langType":"ar","territory":"SO","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_SO.xml"},{"lang":"ar-SS","langType":"ar","territory":"SS","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_SS.xml"},{"lang":"ar-SY","langType":"ar","territory":"SY","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_SY.xml"},{"lang":"ar-TD","langType":"ar","territory":"TD","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_TD.xml"},{"lang":"ar-TN","langType":"ar","territory":"TN","revGenDate":null,"defs":2,"dftLang":0,"file":"ar_TN.xml"},{"lang":"ar-YE","langType":"ar","territory":"YE","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_YE.xml"},{"lang":"as","langType":"as","territory":null,"revGenDate":null,"defs":4,"dftLang":0,"file":"as.xml"},{"lang":"as-IN","langType":"as","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"as_IN.xml"},{"lang":"asa","langType":"asa","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"asa.xml"},{"lang":"asa-TZ","langType":"asa","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"asa_TZ.xml"},{"lang":"ast","langType":"ast","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ast.xml"},{"lang":"ast-ES","langType":"ast","territory":"ES","revGenDate":null,"defs":0,"dftLang":0,"file":"ast_ES.xml"},{"lang":"az","langType":"az","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"az.xml"},{"lang":"az-Cyrl","langType":"az","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"az_Cyrl.xml"},{"lang":"az-Cyrl-AZ","langType":"az","territory":"AZ","revGenDLine truncated