Compare commits

...

17 Commits

Author SHA1 Message Date
usbharu a58d66e02a
release 2.0.1 2024-09-08 18:33:32 +09:00
usbharu 28d3c78172
fix: 正常に絵文字が出力されない問題を修正2 2024-09-08 18:31:59 +09:00
usbharu 7d1063b0c3
fix: 正常に絵文字が出力されない問題を修正 2024-09-08 18:15:43 +09:00
usbharu 434560ecd4
chore: GitHub ActionsでのGradle Task名を変更 2024-01-05 14:53:41 +09:00
usbharu fe0dd331ba
Release 2.0 2024-01-05 14:51:32 +09:00
usbharu e9ec136a56
fix: Emojiが多すぎてAndroidでリリースできない問題を修正 2024-01-05 14:51:11 +09:00
usbharu af496662b3
feat: 全ての絵文字が収録されるように 2024-01-05 14:24:50 +09:00
usbharu 9bf3248757
chore: Giteaのリポジトリを追加 2024-01-05 13:00:16 +09:00
usbharu 1eef96964e
Update build.gradle.kts 2023-03-10 13:34:04 +09:00
usbharu 334f318596
Merge pull request #6 from multim-dev/usbharu-patch-1
fix: AndroidManifest.xml
2023-03-10 13:33:20 +09:00
usbharu 4a7f9d502b
fix: AndroidManifest.xml 2023-03-10 13:32:02 +09:00
usbharu b0c688aaea
Merge pull request #4 from multim-dev/usbharu-patch-1
Version 1.1.0
2023-03-03 08:39:23 +09:00
usbharu 49e45ecb32
Version 1.1.0 2023-03-03 08:38:47 +09:00
usbharu c3d5a61ea3
Merge pull request #3 from multim-dev/feature/emoji-list
fix: unqualified
2023-03-01 16:34:59 +09:00
usbharu a6743f45cc
fix: unqualified 2023-03-01 16:33:44 +09:00
usbharu e45e0780aa
Merge pull request #2 from multim-dev/feature/emoji-list
feat: 絵文字一覧を取得しやすく
2023-03-01 16:23:57 +09:00
usbharu 3cabf1b6ba
feat: 絵文字一覧を取得しやすく 2023-03-01 16:22:48 +09:00
5 changed files with 173 additions and 120 deletions

View File

@ -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 }}

View File

@ -6,7 +6,7 @@ plugins {
}
group = "dev.usbharu"
version = "1.0.0"
version = "2.0.1"
repositories {
google()
@ -81,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")
}
}
}
}

View File

@ -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"
}

View File

@ -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)
}
})
}
}

View File

@ -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"/>