Skip to content

Commit

Permalink
feat: colorCodeAware kana converter
Browse files Browse the repository at this point in the history
  • Loading branch information
acrylic-style committed Jan 9, 2023
1 parent a541319 commit 62d8c2a
Show file tree
Hide file tree
Showing 4 changed files with 394 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ private void chatGlobal(AsyncPlayerChatEvent event) {
String taskFormat = Utility.replaceColorCode(config.getJapanizeLine1Format());

String japanized = api.japanize(
kanaTemp, config.getJapanizeType());
message, config.getJapanizeType());
if ( japanized != null ) {
String temp = taskFormat.replace("%msg", message);
message = temp.replace("%japanize", japanized);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import com.github.ucchyocean.lc3.event.EventResult;
import com.github.ucchyocean.lc3.japanize.IMEConverter;
import com.github.ucchyocean.lc3.japanize.JapanizeType;
import com.github.ucchyocean.lc3.japanize.YukiKanaConverter;
import com.github.ucchyocean.lc3.japanize.RomajiTextReader;
import com.github.ucchyocean.lc3.member.ChannelMember;
import com.github.ucchyocean.lc3.util.Utility;

Expand Down Expand Up @@ -71,7 +71,7 @@ public boolean runSync() {
LunaChat.getAPI().getAllDictionary();

// カラーコード削除、URL削除
String deletedURL = Utility.stripColorCode(org.replaceAll(REGEX_URL, " "));
String deletedURL = org.replaceAll(REGEX_URL, " ");

// キーワードをロック
int index = 0;
Expand All @@ -94,11 +94,25 @@ public boolean runSync() {
}

// カナ変換
String japanized = YukiKanaConverter.conv(keywordLocked);
String japanized = RomajiTextReader.parse(keywordLocked);

// IME変換
if ( type == JapanizeType.GOOGLE_IME ) {
japanized = japanized.replaceAll("§([0-9a-fklmnor])", \\\\$1");
japanized = IMEConverter.convByGoogleIME(japanized);
japanized = japanized.replace("§¥", "§");
japanized = japanized.replace("§0", "§0");
japanized = japanized.replace("§1", "§1");
japanized = japanized.replace("§2", "§2");
japanized = japanized.replace("§3", "§3");
japanized = japanized.replace("§4", "§4");
japanized = japanized.replace("§5", "§5");
japanized = japanized.replace("§6", "§6");
japanized = japanized.replace("§7", "§7");
japanized = japanized.replace("§8", "§8");
japanized = japanized.replace("§9", "§9");
japanized = japanized.replace("§あ", "§a");
japanized = japanized.replace("§え", "§e");
}

// キーワードのアンロック
Expand Down
334 changes: 334 additions & 0 deletions src/main/java/com/github/ucchyocean/lc3/japanize/RomajiTextReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,334 @@
package com.github.ucchyocean.lc3.japanize;

import org.jetbrains.annotations.NotNull;

import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class RomajiTextReader {
private static final List<Map.Entry<String, String>> LIST = new ArrayList<>();

private static void add(String key, String value) {
LIST.add(new AbstractMap.SimpleImmutableEntry<>(key, value));
}

public static @NotNull String parse(@NotNull String text) {
return parse(text, true);
}

public static @NotNull String parse(@NotNull String text, boolean colorCodeAware) {
StringReader reader = new StringReader(text);
StringBuilder builder = new StringBuilder();
boolean skip = false;
do {
if (colorCodeAware && (reader.peek() == '&' || reader.peek() == 0x00a7)) {
skip = !skip;
builder.append(reader.read(1));
continue;
}
if (skip) {
builder.append(reader.read(1));
skip = false;
continue;
}
boolean found = false;
for (Map.Entry<String, String> data : LIST) {
if (!found && reader.startsWith(data.getKey())) {
builder.append(data.getValue());
reader.skip(data.getKey().length());
found = true;
}
}
if (!found) {
builder.append(reader.read(1));
}
} while (!reader.isEOF());
if (skip) {
builder.append('&');
}
return builder.toString();
}

static {
add("a", "あ");
add("i", "い");
add("u", "う");
add("e", "え");
add("o", "お");
add("ka", "か");
add("ki", "き");
add("ku", "く");
add("ke", "け");
add("ko", "こ");
add("sa", "さ");
add("si", "し");
add("su", "す");
add("se", "せ");
add("so", "そ");
add("ta", "た");
add("ti", "ち");
add("tu", "つ");
add("te", "て");
add("to", "と");
add("na", "な");
add("ni", "に");
add("nu", "ぬ");
add("ne", "ね");
add("no", "の");
add("ha", "は");
add("hi", "ひ");
add("hu", "ふ");
add("he", "へ");
add("ho", "ほ");
add("ma", "ま");
add("mi", "み");
add("mu", "む");
add("me", "め");
add("mo", "も");
add("ya", "や");
add("yi", "い");
add("yu", "ゆ");
add("ye", "いぇ");
add("yo", "よ");
add("ra", "ら");
add("ri", "り");
add("ru", "る");
add("re", "れ");
add("ro", "ろ");
add("wa", "わ");
add("wi", "うぃ");
add("wu", "う");
add("we", "うぇ");
add("wo", "を");
add("nn", "ん");
add("ga", "が");
add("gi", "ぎ");
add("gu", "ぐ");
add("ge", "げ");
add("go", "ご");
add("za", "ざ");
add("zi", "じ");
add("zu", "ず");
add("ze", "ぜ");
add("zo", "ぞ");
add("da", "だ");
add("di", "ぢ");
add("du", "づ");
add("de", "で");
add("do", "ど");
add("ja", "じゃ");
add("ji", "じ");
add("ju", "じゅ");
add("je", "じぇ");
add("jo", "じょ");
add("ba", "ば");
add("bi", "び");
add("bu", "ぶ");
add("be", "べ");
add("bo", "ぼ");
add("pa", "ぱ");
add("pi", "ぴ");
add("pu", "ぷ");
add("pe", "ぺ");
add("po", "ぽ");
add("kya", "きゃ");
add("kyi", "きぃ");
add("kyu", "きゅ");
add("kye", "きぇ");
add("kyo", "きょ");
add("sha", "しゃ");
add("shi", "し");
add("shu", "しゅ");
add("she", "しぇ");
add("sho", "しょ");
add("cha", "ちゃ");
add("chi", "ち");
add("chu", "ちゅ");
add("che", "ちぇ");
add("cho", "ちょ");
add("tya", "ちゃ");
add("tyi", "ちぃ");
add("tyu", "ちゅ");
add("tye", "ちぇ");
add("tyo", "ちょ");
add("gya", "ぎゃ");
add("gyi", "ぎぃ");
add("gyu", "ぎゅ");
add("gye", "ぎぇ");
add("gyo", "ぎょ");
add("bya", "びゃ");
add("byi", "びぃ");
add("byu", "びゅ");
add("bye", "びぇ");
add("byo", "びょ");
add("nya", "にゃ");
add("nyi", "にぃ");
add("nyu", "にゅ");
add("nye", "にぇ");
add("nyo", "にょ");
add("hya", "ひゃ");
add("hyi", "ひぃ");
add("hyu", "ひゅ");
add("hye", "ひぇ");
add("hyo", "ひょ");
add("mya", "みゃ");
add("myi", "みぃ");
add("myu", "みゅ");
add("mye", "みぇ");
add("myo", "みょ");
add("pya", "ぴゃ");
add("pyi", "ぴぃ");
add("pyu", "ぴゅ");
add("pye", "ぴぇ");
add("pyo", "ぴょ");
add("rya", "りゃ");
add("ryi", "りぃ");
add("ryu", "りゅ");
add("rye", "りぇ");
add("ryo", "りょ");
add("fa", "ふぁ");
add("fi", "ふぃ");
add("fu", "ふ");
add("fe", "ふぇ");
add("fo", "ふぉ");
add("va", "ヴぁ");
add("vi", "ヴぃ");
add("vu", "ヴ");
add("ve", "ヴぇ");
add("vo", "ヴぉ");
add("tsa", "つぁ");
add("tsi", "つぃ");
add("tsu", "つ");
add("tse", "つぇ");
add("tso", "つぉ");
add("jya", "じゃ");
add("jyi", "じぃ");
add("jyu", "じゅ");
add("jye", "じぇ");
add("jyo", "じょ");
add("xtu", "っ");
add("ltu", "っ");
add("xa", "ぁ");
add("xi", "ぃ");
add("xu", "ぅ");
add("xe", "ぇ");
add("xo", "ぉ");
add("la", "ぁ");
add("li", "ぃ");
add("lu", "ぅ");
add("le", "ぇ");
add("lo", "ぉ");
add("xka", "ヵ");
add("xke", "ヶ");
add("lka", "ヵ");
add("lke", "ヶ");
add("sya", "しゃ");
add("syi", "しぃ");
add("syu", "しゅ");
add("sye", "しぇ");
add("syo", "しょ");
add("zya", "じゃ");
add("zyi", "じぃ");
add("zyu", "じゅ");
add("zye", "じぇ");
add("zyo", "じょ");
add("dda", "っだ");
add("ddi", "っぢ");
add("ddu", "っづ");
add("dde", "っで");
add("ddo", "っど");
add("tta", "った");
add("tti", "っち");
add("ttu", "っつ");
add("tte", "って");
add("tto", "っと");
add("kka", "っか");
add("kki", "っき");
add("kku", "っく");
add("kke", "っけ");
add("kko", "っこ");
add("ssa", "っさ");
add("ssi", "っし");
add("ssu", "っす");
add("sse", "っせ");
add("sso", "っそ");
add("mma", "っま");
add("mmi", "っみ");
add("mmu", "っむ");
add("mme", "っめ");
add("mmo", "っも");
add("lya", "ゃ");
add("lyi", "ぃ");
add("lyu", "ゅ");
add("lye", "ぇ");
add("lyo", "ょ");
add("xya", "ゃ");
add("xyi", "ぃ");
add("xyu", "ゅ");
add("xye", "ぇ");
add("xyo", "ょ");
add("tha", "てゃ");
add("thi", "てぃ");
add("thu", "てゅ");
add("the", "てぇ");
add("tho", "てょ");
add("ttya", "っちゃ");
add("ttyi", "っちぃ");
add("ttyu", "っちゅ");
add("ttye", "っちぇ");
add("ttyo", "っちょ");
add("ccha", "っちゃ");
add("cchi", "っちぃ");
add("cchu", "っちゅ");
add("cche", "っちぇ");
add("ccho", "っちょ");
add("ssha", "っしゃ");
add("sshi", "っし");
add("sshu", "っしゅ");
add("sshe", "っしぇ");
add("ssho", "っしょ");
add("cya", "ちゃ");
add("cyi", "ちぃ");
add("cyu", "ちゅ");
add("cye", "ちぇ");
add("cyo", "ちょ");
add("gga", "っが");
add("ggi", "っぎ");
add("ggu", "っぐ");
add("gge", "っげ");
add("ggo", "っご");
add("ppa", "っぱ");
add("ppi", "っぴ");
add("ppu", "っぷ");
add("ppe", "っぺ");
add("ppo", "っぽ");
add("kkya", "っきゃ");
add("kkyi", "っきぃ");
add("kkyu", "っきゅ");
add("kkye", "っきぇ");
add("kkyo", "っきょ");
add("ggya", "っぎゃ");
add("ggyi", "っぎぃ");
add("ggyu", "っぎゅ");
add("ggye", "っぎぇ");
add("ggyo", "っぎょ");
add("ssya", "っしゃ");
add("ssyi", "っしぃ");
add("ssyu", "っしゅ");
add("ssye", "っしぇ");
add("ssyo", "っしょ");
add("ccya", "っちゃ");
add("ccyi", "っちぃ");
add("ccyu", "っちゅ");
add("ccye", "っちぇ");
add("ccyo", "っちょ");
add("-", "ー");
add(",", "、");
add(".", "。");
add("^", "^");
add("~", "~");
add("n", "ん"); // fallback
}
}
Loading

0 comments on commit 62d8c2a

Please sign in to comment.