package io.gitlab.jfronny.chattransform; import io.gitlab.jfronny.commons.serialize.gson.api.v1.Ignore; import io.gitlab.jfronny.libjf.config.api.v1.*; import java.util.LinkedHashMap; import java.util.Map; @JfConfig public class Cfg { @Entry public static Map substitutions = new LinkedHashMap<>(); @Entry public static Mode mode = Mode.Live; public enum Mode { Live, OnSend } @Preset public static void owo() { substitutions.clear(); substitutions.put("r", "w"); substitutions.put("l", "w"); substitutions.put("R", "W"); substitutions.put("L", "W"); substitutions.put("no", "nu"); substitutions.put("has", "haz"); substitutions.put("have", "haz"); substitutions.put("you", "uu"); substitutions.put("the ", "da "); substitutions.put("The ", "Da "); } @Ignore private static final String katakanaTable = """ a i u e o n ア イ ウ エ オ ン x ァ ィ ゥ ェ ォ k カ キ ク ケ コ ky キャ キュ キョ s サ ス セ ソ sh シャ シ シュ シェ ショ t タ ティ ツ テ ト ts ツ ch チャ チ チュ チェ チョ n ナ ニ ヌ ネ ノ ny ニャ ニュ ニョ h ハ ヒ フ ヘ ホ hy ヒャ ヒュ ヒョ f ファ フィ フ フェ フォ m マ ミ ム メ モ my ミャ ミュ ミョ y ヤ ユ ヨ r ラ リ ル レ ロ ry リャ リィ リュ リェ リョ w ワ ウィ ウェ ヲ g ガ ギ グ ゲ ゴ gy ギャ ギュ ギョ z ザ ズ ゼ ゾ/ヂョ j ジャ/ヂャ ジ/ヂ ジュ/ヂュ ジェ ジョ d ダ ヅ デ ド b バ ビ ブ ベ ボ by ビャ ビュ ビョ p パ ピ プ ペ ポ py ピャ ピュ ピョ v ゔ"""; @Ignore private static final String hiraganaTable = """ a i u e o n あ い う え お ん x ぁ ぃ ぅ ぇ ぉ k か き く け こ ky きゃ きゅ きょ s さ す せ そ sh しゃ し しゅ しょ t た つ て と ts つ ch ちゃ ち ちゅ ちぇ ちょ n な に ぬ ね の ny にゃ にゅ にょ h は ひ ふ へ ほ hy ひゃ ひゅ ひょ f ふ m ま み む め も my みゃ みゅ みょ y や ゆ よ r ら り る れ ろ ry りゃ りぃ りゅ りぇ りょ w わ ゐ ゑ を g が ぎ ぐ げ ご gy ぎゃ ぎゅ ぎょ z ざ ず ぜ ぞ/ぢょ j じゃ/ぢゃ じ/ぢ じゅ/ぢゅ じょ d だ づ で ど b ば び ぶ べ ぼ by びゃ びゅ びょ p ぱ ぴ ぷ ぺ ぽ py ぴゃ ぴゅ ぴょ v ゔ"""; @Ignore private static final char[] consonants = "bcdfghjklmprstwz".toCharArray(); private static void fromTable(String table) { String[] rows = table.split("\n"); String[] colNames = rows[0].split("\t"); for (int i = 1; i < rows.length; i++) { String row = rows[i]; String[] cols = row.split("\t"); String rowName = cols[0]; for (int j = 1; j < cols.length; j++) { String kana = cols[j]; String value = rowName + colNames[j]; String[] kanas = kana.split("/"); for (String singleKana : kanas) { if (!singleKana.isEmpty()) { substitutions.put(value, singleKana); } } } } } @Preset public static void katakana() { substitutions.clear(); substitutions.put("-", "ー"); for (char c : consonants) { substitutions.put("" + c + c, "ッ" + c); } substitutions.put("nn", "ン"); fromTable(katakanaTable); } @Preset public static void hiragana() { substitutions.clear(); substitutions.put("-", "ー"); for (char c : consonants) { substitutions.put("" + c + c, "っ" + c); } substitutions.put("nn", "ん"); fromTable(hiraganaTable); } }