Compare commits
18 Commits
Author | SHA1 | Date |
---|---|---|
|
a58d66e02a | |
|
28d3c78172 | |
|
7d1063b0c3 | |
|
434560ecd4 | |
|
fe0dd331ba | |
|
e9ec136a56 | |
|
af496662b3 | |
|
9bf3248757 | |
|
1eef96964e | |
|
334f318596 | |
|
4a7f9d502b | |
|
b0c688aaea | |
|
49e45ecb32 | |
|
c3d5a61ea3 | |
|
a6743f45cc | |
|
e45e0780aa | |
|
3cabf1b6ba | |
|
646700dbf6 |
|
@ -39,7 +39,7 @@ jobs:
|
|||
- name: Publish to GitHub Packages
|
||||
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
|
||||
with:
|
||||
arguments: publish
|
||||
arguments: publishAllPublicationsToGitHubPackagesRepository
|
||||
env:
|
||||
USERNAME: ${{ github.actor }}
|
||||
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
|
|
@ -6,7 +6,7 @@ plugins {
|
|||
}
|
||||
|
||||
group = "dev.usbharu"
|
||||
version = "1.0-SNAPSHOT"
|
||||
version = "2.0.1"
|
||||
|
||||
repositories {
|
||||
google()
|
||||
|
@ -24,7 +24,9 @@ kotlin {
|
|||
browser()
|
||||
nodejs()
|
||||
}
|
||||
android()
|
||||
android{
|
||||
publishLibraryVariants("release")
|
||||
}
|
||||
sourceSets {
|
||||
val commonMain by getting {
|
||||
sourceSets["commonMain"].kotlin.srcDir("build/generated/source/emoji/main/kotlin")
|
||||
|
@ -79,4 +81,19 @@ publishing{
|
|||
}
|
||||
}
|
||||
}
|
||||
repositories {
|
||||
maven {
|
||||
name = "Gitea"
|
||||
url = uri("https://git.usbharu.dev/api/packages/usbharu/maven")
|
||||
|
||||
credentials(HttpHeaderCredentials::class.java) {
|
||||
name = "Authorization"
|
||||
value = "token "+(project.findProperty("gpr.gitea") as String? ?: System.getenv("GITEA"))
|
||||
}
|
||||
|
||||
authentication {
|
||||
create<HttpHeaderAuthentication>("header")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,12 +9,4 @@ repositories {
|
|||
|
||||
dependencies {
|
||||
compileOnly(gradleApi())
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
|
||||
implementation("io.ktor:ktor-client-core:2.2.3")
|
||||
implementation("io.ktor:ktor-client-cio:2.2.3")
|
||||
}
|
||||
|
||||
buildscript {
|
||||
|
||||
}
|
||||
ext["kotlin_version"] = "1.8.10"
|
||||
}
|
|
@ -1,138 +1,184 @@
|
|||
import io.ktor.client.*
|
||||
import io.ktor.client.engine.cio.*
|
||||
import io.ktor.client.plugins.cache.*
|
||||
import io.ktor.client.plugins.cache.storage.*
|
||||
import io.ktor.client.request.*
|
||||
import io.ktor.client.statement.*
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Paths
|
||||
import java.net.URI
|
||||
import java.net.http.HttpClient
|
||||
import java.net.http.HttpRequest
|
||||
import java.net.http.HttpResponse
|
||||
import java.time.Duration
|
||||
|
||||
class EmojiPlugin : Plugin<Project> {
|
||||
override fun apply(project: Project) {
|
||||
project.task("generateEmoji")
|
||||
.doLast(Action {
|
||||
runBlocking {
|
||||
val httpClient = HttpClient.newBuilder()
|
||||
.version(HttpClient.Version.HTTP_1_1)
|
||||
.followRedirects(HttpClient.Redirect.NORMAL)
|
||||
.connectTimeout(Duration.ofSeconds(10))
|
||||
.build()
|
||||
|
||||
val httpClient = HttpClient(CIO)
|
||||
val bodyAsText =
|
||||
httpClient.get("https://unicode.org/Public/emoji/15.0/emoji-test.txt")
|
||||
.bodyAsText()
|
||||
println(project.buildDir.path)
|
||||
val req = HttpRequest
|
||||
.newBuilder(URI.create("https://unicode.org/Public/emoji/15.1/emoji-test.txt"))
|
||||
.GET()
|
||||
.setHeader(
|
||||
"User-Agent",
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.3"
|
||||
)
|
||||
.build()
|
||||
|
||||
|
||||
val bodyAsText = httpClient.send(req, HttpResponse.BodyHandlers.ofString()).body()
|
||||
|
||||
println(project.buildDir.path)
|
||||
// println(bodyAsText)
|
||||
|
||||
val file =
|
||||
project.layout.buildDirectory.file("generated/source/emoji/main/kotlin/Emojis.kt")
|
||||
val asFile = file.get().asFile
|
||||
asFile.parentFile.mkdirs()
|
||||
val split = bodyAsText.replace("\r", "").split("\n");
|
||||
val file =
|
||||
project.layout.buildDirectory.file("generated/source/emoji/main/kotlin/Emojis.kt")
|
||||
val asFile = file.get().asFile
|
||||
asFile.parentFile.mkdirs()
|
||||
val split = bodyAsText.replace("\r", "").split("\n");
|
||||
|
||||
println(split.size)
|
||||
println(split.size)
|
||||
|
||||
var group: String = ""
|
||||
var subgroup: String = ""
|
||||
var group: String = ""
|
||||
var subgroup: String = ""
|
||||
|
||||
data class Emoji(val group: String, val value: String)
|
||||
var emojiCount = 0
|
||||
var groupCount = 0
|
||||
|
||||
val enumList = mutableMapOf<String, Emoji>()
|
||||
//TODO グループ分けしたことで重複がなくなるはずなので修正
|
||||
for (s in split) {
|
||||
when {
|
||||
s.startsWith("# group:") -> {
|
||||
group = s.substringAfter(": ")
|
||||
}
|
||||
data class Emoji(val group: String, val value: String)
|
||||
|
||||
s.startsWith("# subgroup:") -> {
|
||||
subgroup = s.substringAfter(": ")
|
||||
}
|
||||
val enumList = mutableMapOf<String, Emoji>()
|
||||
//TODO グループ分けしたことで重複がなくなるはずなので修正
|
||||
for (s in split) {
|
||||
if (emojiCount >= 99) {
|
||||
emojiCount = 0
|
||||
groupCount++
|
||||
}
|
||||
|
||||
s.isNullOrBlank() -> {}
|
||||
s.startsWith("#") -> {}
|
||||
else -> {
|
||||
val description = s.substringAfterLast("E").substringAfter(" ")
|
||||
if (!description.contains("skin tone")) {
|
||||
when {
|
||||
s.startsWith("# group:") -> {
|
||||
group = s.substringAfter(": ")
|
||||
}
|
||||
|
||||
val code =
|
||||
s.substringBefore(";").replace(Regex(" +"), " ").trim()
|
||||
val char = s.substringAfter("# ").substringBefore(" ").trim()
|
||||
val status = s.substringAfter(";").substringBefore("#").trim()
|
||||
enumList.put(
|
||||
description,
|
||||
Emoji(
|
||||
group,
|
||||
"${
|
||||
(description + "_" + status).toUpperCase()
|
||||
.replace(" ", "_")
|
||||
.replace("-", "_")
|
||||
.replace(":", "_")
|
||||
.replace(",", "_")
|
||||
.replace(".", "_")
|
||||
.replace("’", "_")
|
||||
.replace("1ST", "FIRST")
|
||||
.replace("2ND", "SECOND")
|
||||
.replace("3RD", "THIRD")
|
||||
.replace("!", "_EXCLAMATION_MARK_")
|
||||
.replace("#", "SHARP")
|
||||
.replace("*", "ASTRISC")
|
||||
.replace("0", "ZERO")
|
||||
.replace("1", "ONE")
|
||||
.replace("2", "TWO")
|
||||
.replace("3", "THREE")
|
||||
.replace("4", "FOUR")
|
||||
.replace("5", "FIVE")
|
||||
.replace("6", "SIX")
|
||||
.replace("7", "SEVEN")
|
||||
.replace("8", "EIGHT")
|
||||
.replace("9", "NINE")
|
||||
.replace("“", "_")
|
||||
.replace("”", "_")
|
||||
.replace("(", "_")
|
||||
.replace(")", "_")
|
||||
.replace("&", "_AND_")
|
||||
.replace("Ã", "A")
|
||||
.replace("É", "E")
|
||||
.replace("Í", "I")
|
||||
.replace("Ñ", "N")
|
||||
.replace("Å", "A")
|
||||
.replace("Ô", "O")
|
||||
.replace("Ç", "C")
|
||||
.replace(Regex("_+"), "_")
|
||||
}(\"$group\",\"$subgroup\",\"$code\",\"$char\",\"$description\")"
|
||||
)
|
||||
)
|
||||
s.startsWith("# subgroup:") -> {
|
||||
subgroup = s.substringAfter(": ")
|
||||
}
|
||||
|
||||
s.isNullOrBlank() -> {}
|
||||
s.startsWith("#") -> {}
|
||||
else -> {
|
||||
val description = s.substringAfterLast("E").substringAfter(" ")
|
||||
val status = s.substringAfter(";").substringBefore("#").trim()
|
||||
|
||||
val code =
|
||||
s.substringBefore(";").replace(Regex(" +"), " ").trim()
|
||||
val char = s.substringAfter("# ").substringBefore(" ").trim()
|
||||
|
||||
val statusString = when (status) {
|
||||
"fully-qualified" -> "Status.FULLY_QUALIFIED"
|
||||
"unqualified" -> "Status.UNAUALIFIED"
|
||||
"minimally-qualified" -> "Status.MINIMALLY_QUALIFIED"
|
||||
|
||||
else -> {
|
||||
println(status)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
enumList.putIfAbsent(
|
||||
(description + "_" + status),
|
||||
Emoji(
|
||||
group + groupCount,
|
||||
"${
|
||||
(description + "_" + status).toUpperCase()
|
||||
.replace(" ", "_")
|
||||
.replace("-", "_")
|
||||
.replace(":", "_")
|
||||
.replace(",", "_")
|
||||
.replace(".", "_")
|
||||
.replace("’", "_")
|
||||
.replace("1ST", "FIRST")
|
||||
.replace("2ND", "SECOND")
|
||||
.replace("3RD", "THIRD")
|
||||
.replace("!", "_EXCLAMATION_MARK_")
|
||||
.replace("#", "SHARP")
|
||||
.replace("*", "ASTRISC")
|
||||
.replace("0", "ZERO")
|
||||
.replace("1", "ONE")
|
||||
.replace("2", "TWO")
|
||||
.replace("3", "THREE")
|
||||
.replace("4", "FOUR")
|
||||
.replace("5", "FIVE")
|
||||
.replace("6", "SIX")
|
||||
.replace("7", "SEVEN")
|
||||
.replace("8", "EIGHT")
|
||||
.replace("9", "NINE")
|
||||
.replace("“", "_")
|
||||
.replace("”", "_")
|
||||
.replace("(", "_")
|
||||
.replace(")", "_")
|
||||
.replace("&", "_AND_")
|
||||
.replace("Ã", "A")
|
||||
.replace("É", "E")
|
||||
.replace("Í", "I")
|
||||
.replace("Ñ", "N")
|
||||
.replace("Å", "A")
|
||||
.replace("Ô", "O")
|
||||
.replace("Ç", "C")
|
||||
.replace(Regex("_+"), "_")
|
||||
}(\"$group\",\"$subgroup\",\"$code\",\"$char\",\"$description\",$statusString)"
|
||||
)
|
||||
)
|
||||
|
||||
emojiCount++
|
||||
}
|
||||
}
|
||||
val emojis = mutableMapOf<String, MutableList<Emoji>>()
|
||||
enumList.values.forEach {
|
||||
emojis.getOrPut(
|
||||
it.group.replace(" ", "").replace("&", "And")
|
||||
) { mutableListOf() }.add(it)
|
||||
}
|
||||
}
|
||||
val emojis = mutableMapOf<String, MutableList<Emoji>>()
|
||||
enumList.values.forEach {
|
||||
emojis.getOrPut(
|
||||
it.group.replace(" ", "").replace("&", "And")
|
||||
) { mutableListOf() }.add(it)
|
||||
}
|
||||
|
||||
val map = emojis.map {
|
||||
"enum class ${it.key}(val group:String,val subGroup:String,val code:String,val char:String,val description:String){\n" +
|
||||
"${
|
||||
it.value.map { it.value }.joinToString(
|
||||
",\n"
|
||||
)
|
||||
}}"
|
||||
}
|
||||
val map = emojis.map {
|
||||
"enum class ${it.key}(override val group:String,override val subgroup:String,override val code:String,override val char:String,override val description:String,val status:Status):UnicodeEmoji{\n" +
|
||||
"${
|
||||
it.value.map { it.value }.joinToString(
|
||||
",\n"
|
||||
)
|
||||
}}"
|
||||
}
|
||||
|
||||
val joinToString = map.joinToString("\n")
|
||||
//language=kotlin
|
||||
val trimIndent =
|
||||
"""@Suppress("unused")
|
||||
class Emojis {
|
||||
val joinToString = map.joinToString("\n")
|
||||
//language=kotlin
|
||||
val trimIndent =
|
||||
"""@Suppress("unused")
|
||||
interface UnicodeEmoji {
|
||||
val group: String
|
||||
val subgroup: String
|
||||
val code: String
|
||||
val char: String
|
||||
val description: String
|
||||
}
|
||||
|
||||
enum class Status{
|
||||
FULLY_QUALIFIED,
|
||||
UNAUALIFIED,
|
||||
MINIMALLY_QUALIFIED
|
||||
}
|
||||
|
||||
object Emojis {
|
||||
val allEmojis:MutableList<UnicodeEmoji> = mutableListOf<UnicodeEmoji>()
|
||||
init {
|
||||
${emojis.keys.map { "allEmojis.addAll($it.values())" }.joinToString("\n")}
|
||||
}
|
||||
${joinToString}
|
||||
}"""
|
||||
asFile.writeText(trimIndent)
|
||||
asFile.writeText(trimIndent)
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="dev.usbharu.library"/>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="dev.usbharu.emoji"/>
|
||||
|
|
Loading…
Reference in New Issue