// ローマ字→ひらがな一括変換スクリプト for Cadencii 3.0.4
// using Boare.Cadencii.KanaDeRomanization; // publicじゃないから利用できない(;-;)
using boolean = System.Boolean;
public static class Roman2Hiragana {
public static bool Edit( Boare.Lib.Vsq.VsqFile Vsq ) {
for ( int i = 1; i < Vsq.Track.size(); i++ ) {
for ( int j = 0; j < Vsq.Track.get( i ).getEventCount(); j++ ) {
Boare.Lib.Vsq.VsqEvent item = Vsq.Track.get( i ).getEvent( j );
if ( item.ID.type == Boare.Lib.Vsq.VsqIDType.Anote ) {
item.ID.LyricHandle.L0.Phrase = Attach( item.ID.LyricHandle.L0.Phrase );
}
}
}
return true;
}
// Boare.Cadencii.KanaDeRomanization のコードをそのまま利用
public static String Attach( String roman ) {
char[] arr = roman.ToCharArray();
String ret = "";
int index = 0;
const int _MAX_MATCH = 4;
while ( index < arr.Length ) {
// _MAX_MATCH~2文字のマッチ
boolean processed = false;
for ( int i = _MAX_MATCH; i >= 2; i-- ) {
if ( index + (i - 1) < arr.Length ) {
String s = "";
for ( int j = 0; j < i; j++ ) {
s += "" + arr[index + j];
}
boolean trailing;
String res = AttachCor( s, out trailing );
if ( res != s ) {
if ( !trailing ) {
index = index + i;
} else {
index = index + i - 1;
}
ret += res;
processed = true;
break;
}
}
}
if ( processed ) {
continue;
}
// 1文字のマッチ
boolean trailing1;
ret += AttachCor( arr[index] + "", out trailing1 );
index++;
}
return ret;
}
private static String AttachCor( String roman, out boolean trailing ) {
String s = roman.ToLower();
trailing = false;
switch ( s ) {
case "a":
return "あ";
case "i":
case "yi":
return "い";
case "u":
case "wu":
return "う";
case "e":
return "え";
case "o":
return "お";
case "ka":
case "ca":
return "か";
case "ki":
return "き";
case "ku":
case "cu":
case "qu":
return "く";
case "ke":
return "け";
case "ko":
case "co":
return "こ";
case "sa":
return "さ";
case "si":
case "shi":
case "ci":
return "し";
case "su":
return "す";
case "se":
case "ce":
return "せ";
case "so":
return "そ";
case "ta":
return "た";
case "chi":
case "ti":
return "ち";
case "tu":
case "tsu":
return "つ";
case "te":
return "て";
case "to":
return "と";
case "na":
return "な";
case "ni":
return "に";
case "nu":
return "ぬ";
case "ne":
return "ね";
case "no":
return "の";
case "ha":
return "は";
case "hi":
return "ひ";
case "hu":
case "fu":
return "ふ";
case "he":
return "へ";
case "ho":
return "ほ";
case "ma":
return "ま";
case "mi":
return "み";
case "mu":
return "む";
case "me":
return "め";
case "mo":
return "も";
case "ya":
return "や";
case "yu":
return "ゆ";
case "ye":
return "いぇ";
case "yo":
return "よ";
case "ra":
return "ら";
case "ri":
return "り";
case "ru":
return "る";
case "re":
return "れ";
case "ro":
return "ろ";
case "wa":
return "わ";
case "wi":
return "うぃ";
case "wyi":
return "ゐ";
case "we":
return "うぇ";
case "wye":
return "ゑ";
case "wo":
return "を";
case "nn":
case "n":
return "ん";
case "ga":
return "が";
case "gi":
return "ぎ";
case "gu":
return "ぐ";
case "ge":
return "げ";
case "go":
return "ご";
case "za":
return "ざ";
case "zi":
case "ji":
return "じ";
case "zu":
return "ず";
case "ze":
return "ぜ";
case "zo":
return "ぞ";
case "da":
return "だ";
case "di":
return "ぢ";
case "du":
return "づ";
case "de":
return "で";
case "do":
return "ど";
case "ba":
return "ば";
case "bi":
return "び";
case "bu":
return "ぶ";
case "be":
return "べ";
case "bo":
return "ぼ";
case "pa":
return "ぱ";
case "pi":
return "ぴ";
case "pu":
return "ぷ";
case "pe":
return "ぺ";
case "po":
return "ぽ";
case "sha":
return "しゃ";
case "shu":
return "しゅ";
case "sho":
return "しょ";
case "cha":
case "tya":
return "ちゃ";
case "chu":
case "tyu":
return "ちゅ";
case "cho":
case "tyo":
return "ちょ";
case "dya":
return "ぢゃ";
case "dyu":
return "ぢゅ";
case "dyo":
return "ぢょ";
case "kwa":
return "くゎ";
case "kwi":
return "くぃ";
case "kwu":
return "くぅ";
case "kwe":
return "くぇ";
case "kwo":
return "くぉ";
case "gwa":
return "ぐゎ";
case "kya":
return "きゃ";
case "kyu":
return "きゅ";
case "kyo":
return "きょ";
case "sya":
return "しゃ";
case "syu":
return "しゅ";
case "syo":
return "しょ";
case "nya":
return "にゃ";
case "nyu":
return "にゅ";
case "nyo":
return "にょ";
case "mya":
return "みゃ";
case "myu":
return "みゅ";
case "myo":
return "みょ";
case "rya":
return "りゃ";
case "ryu":
return "りゅ";
case "ryo":
return "りょ";
case "gya":
return "ぎゃ";
case "gyu":
return "ぎゅ";
case "gyo":
return "ぎょ";
case "zya":
case "ja":
return "じゃ";
case "zyu":
case "ju":
return "じゅ";
case "zyo":
case "jo":
return "じょ";
case "bya":
return "びゃ";
case "byu":
return "びゅ";
case "byo":
return "びょ";
case "pya":
return "ぴゃ";
case "pyu":
return "ぴゅ";
case "pyo":
return "ぴょ";
case "la":
case "xa":
return "ぁ";
case "li":
case "xi":
case "lyi":
case "xyi":
return "ぃ";
case "lu":
case "xu":
return "ぅ";
case "le":
case "xe":
case "lye":
case "xye":
return "ぇ";
case "lo":
case "xo":
return "ぉ";
case "lya":
case "xya":
return "ゃ";
case "lyu":
case "xyu":
return "ゅ";
case "lyo":
case "xyo":
return "ょ";
case "lwa":
case "xwa":
return "ゎ";
case "ltu":
case "xtu":
case "xtsu":
case "ltsu":
return "っ";
case "va":
return "ヴぁ";
case "vi":
return "ヴぃ";
case "vu":
return "ヴ";
case "ve":
return "ヴぇ";
case "vo":
return "ヴぉ";
case "fa":
return "ふぁ";
case "fi":
return "ふぃ";
case "fe":
return "ふぇ";
case "fo":
return "ふぉ";
case "qa":
return "くぁ";
case "qi":
return "くぃ";
case "qe":
return "くぇ";
case "qo":
return "くぉ";
case "vyu":
return "ヴゅ";
case "qq":
case "ww":
case "rr":
case "tt":
case "yy":
case "pp":
case "ss":
case "dd":
case "ff":
case "gg":
case "hh":
case "jj":
case "kk":
case "ll":
case "zz":
case "xx":
case "cc":
case "vv":
case "bb":
case "mm":
trailing = true;
return "っ";
case "-":
return "ー";
case "tha":
return "てゃ";
case "thi":
return "てぃ";
case "thu":
return "てゅ";
case "the":
return "てぇ";
case "tho":
return "てょ";
case "twa":
return "とぁ";
case "twi":
return "とぃ";
case "twu":
return "とぅ";
case "twe":
return "とぇ";
case "two":
return "とぉ";
case "dha":
return "でゃ";
case "dhi":
return "でぃ";
case "dhu":
return "でゅ";
case "dhe":
return "でぇ";
case "dho":
return "でょ";
case "wha":
return "うぁ";
case "whi":
return "うぃ";
case "whu":
return "う";
case "whe":
return "うぇ";
case "who":
return "うぉ";
case "lka":
case "xka":
return "ヵ";
case "lke":
case "xke":
return "ヶ";
case "tsa":
return "つぁ";
case "tsi":
return "つぃ";
case "tse":
return "つぇ";
case "tso":
return "つぉ";
case "jya":
return "じゃ";
case "jyu":
return "じゅ";
case "jyo":
return "じょ";
case "cya":
return "ちゃ";
case "cyi":
return "ちぃ";
case "cyu":
return "ちゅ";
case "cye":
return "ちぇ";
case "cyo":
return "ちょ";
case "dwa":
return "どぁ";
case "dwi":
return "どぃ";
case "dwu":
return "どぅ";
case "dwe":
return "どぇ";
case "dwo":
return "どぉ";
case "hwa":
return "ふぁ";
case "hwi":
return "ふぃ";
case "hwu":
return "ふぇ";
case "hwo":
return "ふぉ";
case "fyu":
case "hwyu":
return "ふゅ";
}
return roman;
}
}