本ページには広告が含まれています。
入力した文字列をバビ語に符号化・復号します。入力された文字列のひらがな・カタカナの部分をバビ語に変換し、それ以外の文字・記号などは変換しません。
- 構文
- UString = Babigo.encode( str )
- UString = Babigo.decode( str )
- UString = Babigo.encode( str )
- 引数
- str 必須
- encode
- バビ語に符号化する文字列
- decode
- バビ語から復号する文字列
- 戻り値
- 符号化・復号した文字列
プログラム
//////////////////////////////////////////////////
// 【引数】
// str : (encode : バビ語に符号化する文字列、decode : バビ語から復号する文字列)
// 【戻り値】
//
//////////////////////////////////////////////////
MODULE BABIGO
HASHTBL babigo
PROCEDURE BABIGO()
DIM array[][1] = "あ,か,さ,た,な,は,ま,や,ら,わ,が,ざ,だ,ば,ぱ,ゃ,ぁ", "ば", _
"い,き,し,ち,に,ひ,み,り,ぎ,じ,ぢ,び,ぴ,ぃ", "び", _
"う,く,す,つ,ぬ,ふ,む,ゆ,る,ん,ぐ,ず,づ,ぶ,ぷ,ゅ,ぅ", "ぶ", _
"え,け,せ,て,ね,へ,め,れ,げ,ぜ,で,べ,ぺ,ぇ", "べ", _
"お,こ,そ,と,の,ほ,も,よ,ろ,ご,ぞ,ど,ぼ,ぽ,ょ,ぉ", "ぼ", _
"ア,カ,サ,タ,ナ,ハ,マ,ヤ,ラ,ワ,ガ,ザ,ダ,バ,パ,ャ,ァ", "バ", _
"イ,キ,シ,チ,ニ,ヒ,ミ,リ,ギ,ジ,ヂ,ビ,ピ,ィ", "ビ", _
"ウ,ク,ス,ツ,ヌ,フ,ム,ユ,ル,ン,グ,ズ,ヅ,ブ,プ,ュ,ゥ", "ブ", _
"エ,ケ,セ,テ,ネ,ヘ,メ,レ,ゲ,ゼ,デ,ベ,ペ,ェ", "ベ", _
"オ,コ,ソ,ト,ノ,ホ,モ,ヨ,ロ,ゴ,ゾ,ド,ボ,ポ,ョ,ォ", "ボ"
FOR i = 0 TO RESIZE(array)
FOR item IN SPLIT(array[i][0], ",")
babigo[item] = item + array[i][1]
NEXT
NEXT
FEND
FUNCTION encode(str)
DIM boin[] = "ぁ", "ぃ", "ぅ", "ぇ", "ぉ", "ァ", "ィ", "ゥ", "ェ", "ォ"
DIM yoon[] = "ゃ", "ゅ", "ょ", "ャ", "ュ", "ョ"
DIM sokuon[] = "っ", "ッ"
DIM b[] = "ば", "び", "ぶ", "べ", "ぼ", "バ", "ビ", "ブ", "ベ", "ボ"
DIM res = ""
DIM tmp = ""
WHILE str <> ""
s = COPY(str, 2, 1)
len = IIF(inArray(s, boin) OR inArray(s, yoon), 2, 1)
tmp = COPY(str, 1, len)
IFB LENGTH(tmp) = 1 THEN
res = res + IIF(babigo[tmp, HASH_EXISTS], babigo[tmp], tmp)
ELSE
res = res + COPY(tmp, 1, 1) + babigo[COPY(tmp, 2, 1)]
ENDIF
IF COPY(res, LENGTH(res)) = "ー" THEN res = res + COPY(res, LENGTH(res)-1, 1)
str = COPY(str, len + 1)
WEND
RESULT = res
FEND
FUNCTION decode(str)
DIM boin[] = "ぁ", "ぃ", "ぅ", "ぇ", "ぉ", "ァ", "ィ", "ゥ", "ェ", "ォ"
DIM yoon[] = "ゃ", "ゅ", "ょ", "ャ", "ュ", "ョ"
DIM sokuon[] = "っ", "ッ"
DIM b[] = "ば", "び", "ぶ", "べ", "ぼ", "バ", "ビ", "ブ", "ベ", "ボ"
DIM res = ""
WHILE str <> ""
DIM tmp = COPY(str, 1, 1)
DIM s = COPY(str, 2, 1)
IFB inArray(s, b) THEN
start = 3
ELSEIF inArray(s, boin) OR inArray(s, yoon) THEN
start = 4
ELSEIF inArray(tmp, sokuon) THEN
start = 2
ELSE
start = 2
ENDIF
res = res + tmp + IIF(inArray(s, boin) OR inArray(s, yoon), s, "")
str = COPY(str, start)
WEND
RESULT = res
FEND
ENDMODULE
//////////////////////////////////////////////////
// 【引数】
// expr : 評価する式
// truepart : 評価した式がTrueのときに返す値
// falsepart : 評価した式がFalseのときに返す値
// 【戻り値】
//
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
IFB EVAL(expr) THEN
RESULT = truepart
ELSE
RESULT = falsepart
ENDIF
FEND
//////////////////////////////////////////////////
// 【引数】
// needle : 探す値
// haystack : 配列
// strict : 型も同じかチェックします
// 【戻り値】
//
//////////////////////////////////////////////////
FUNCTION inArray( needle, haystack[], strict = FALSE)
DIM res = FALSE
FOR item IN haystack
IFB needle = item THEN
IFB strict THEN
IFB VARTYPE(needle) = VARTYPE(item) THEN
res = TRUE
BREAK
ENDIF
ELSE
res = TRUE
BREAK
ENDIF
ENDIF
NEXT
RESULT = res
FEND
解説
- 2行目
- 日本語とバビ語を変換させるための連想配列。キーに文字を指定すると対応するバビ語に変換された文字列を返します。
HASHTBL babigo
- 3-19行目
- コンストラクタ。ひらがな・カタカナの文字とバビ語に対応した連想配列を作成します。arrayの二次元目が0の要素をカンマで分割しそれをキー、キーと二次元目が1の文字を結合した文字列を値として格納します。
PROCEDURE BABIGO() DIM array[][1] = "あ,か,さ,た,な,は,ま,や,ら,わ,が,ざ,だ,ば,ぱ,ゃ,ぁ", "ば", _ "い,き,し,ち,に,ひ,み,り,ぎ,じ,ぢ,び,ぴ,ぃ", "び", _ "う,く,す,つ,ぬ,ふ,む,ゆ,る,ん,ぐ,ず,づ,ぶ,ぷ,ゅ,ぅ", "ぶ", _ "え,け,せ,て,ね,へ,め,れ,げ,ぜ,で,べ,ぺ,ぇ", "べ", _ "お,こ,そ,と,の,ほ,も,よ,ろ,ご,ぞ,ど,ぼ,ぽ,ょ,ぉ", "ぼ", _ "ア,カ,サ,タ,ナ,ハ,マ,ヤ,ラ,ワ,ガ,ザ,ダ,バ,パ,ャ,ァ", "バ", _ "イ,キ,シ,チ,ニ,ヒ,ミ,リ,ギ,ジ,ヂ,ビ,ピ,ィ", "ビ", _ "ウ,ク,ス,ツ,ヌ,フ,ム,ユ,ル,ン,グ,ズ,ヅ,ブ,プ,ュ,ゥ", "ブ", _ "エ,ケ,セ,テ,ネ,ヘ,メ,レ,ゲ,ゼ,デ,ベ,ペ,ェ", "ベ", _ "オ,コ,ソ,ト,ノ,ホ,モ,ヨ,ロ,ゴ,ゾ,ド,ボ,ポ,ョ,ォ", "ボ" FOR i = 0 TO RESIZE(array) FOR item IN SPLIT(array[i][0], ",") babigo[item] = item + array[i][1] NEXT NEXT FEND
PRINT babigo["あ"] // あば
PRINT babigo["ゃ"] // ゃば
PRINT babigo["ぉ"] // ぉぼ
- 20,40行目
- 符号化処理を行います。
FUNCTION encode(str) … FEND
- 25行目
- 符号化した結果を代入しておく変数resを宣言。
DIM res = ""
- 26行目
DIM tmp = ""
- 27,38行目
- 先頭の文字から順番にバビ語の符号化処理を行う。
WHILE str <> "" … WEND
- 28行目
- strの2文字目をsに代入。
s = COPY(str, 2, 1)
- 29行目
- sがboinかyoonの配列のいずれかの文字に一致したら2,一致しなければ1をlenに代入。
len = IIF(inArray(s, boin) OR inArray(s, yoon), 2, 1)
- 30行目
- strの先頭からlen文字だけtmpに代入。
tmp = COPY(str, 1, len)
- 32行目
- tmpの文字が連想配列に存在すればその値を取得、存在しなければtmpをそのままresに結合。
res = res + IIF(babigo[tmp, HASH_EXISTS], babigo[tmp], tmp)
- 34行目
- tmpの1文字目はそのまま、tmpの2文字目をバビ語に変換する。例えばtmpが「きゃ」ならば「き」はそのまま「ゃ」にバビ語で「ゃば」に変換し「きゃば」として返す。
res = res + COPY(tmp, 1, 1) + babigo[COPY(tmp, 2, 1)]
- 41,63行目
- 復号処理を行います。
FUNCTION decode(str) … FEND
- 46行目
- 復号した結果を代入しておく変数resを宣言。
DIM res = ""
- 47,61行目
- 先頭の文字から順番にバビ語の復号処理を行う。
WHILE str <> "" … WEND
- 48行目
- strの先頭から1文字をtmpに代入する。
DIM tmp = COPY(str, 1, 1)
- 49行目
- strの2文字目をsに代入する。
DIM s = COPY(str, 2, 1)
- 50-58行目
- sがbに含まれていたら、startに3、sがboinまたはyoonに含まれていたらstartに4、tmpがsokuonに含まれているもしくはいずれの条件にも一致しなければ、startに2を代入する。
IFB inArray(s, b) THEN start = 3 ELSEIF inArray(s, boin) OR inArray(s, yoon) THEN start = 4 ELSEIF inArray(tmp, sokuon) THEN start = 2 ELSE start = 2 ENDIF
- 59行目
- バビ語からば行を除いた文字列を取得、結合する。
res = res + tmp + IIF(inArray(s, boin) OR inArray(s, yoon), s, "")
- 60行目
- 処理が終了した文字列を削除する。
str = COPY(str, start)
バビ語とは
バビ語とは入れ詞の一種です。ルールは簡単で各文字の間に「ばびぶべぼ」を入れ、付け足す音は直前の母音と揃えるだけです。
- 「ありがとう」→「あばりびがばとぼうぶ」
- 「おはよう」→「おぼはばよぼうぶ」
より詳しく説明すると以下のような条件があります。
- 撥音(ん)の後は「ぶ」を付ける。
- 促音(っ)の後は何も付けない。
- 拗音(きゃ、きゅ、きょ等)は直前の言葉とセットにして、拗音の母音に対応するば行の文字を付ける。
- 長音(ー)の後は直前の言葉の母音。
- 「こんにちは」→「こぼんぶにびちびはば」
- 「きって」→「きびってべ」
- 「きょう」→「きょぼうぶ」
- 「らーめん」→「らばーばめべんぶ」
一覧表
上段のバビ語変換前の文字、下段がバビ語変換後の文字列です。バビ語で追加された"ば行"の文字を色付けしています。
あ段 | い段 | う段 | え段 | お段 | |
---|---|---|---|---|---|
あ行 | あ | い | う | え | お |
あば | いび | うぶ | えべ | おぼ | |
か行 | か | き | く | け | こ |
かば | きび | くぶ | けべ | こぼ | |
さ行 | さ | し | す | せ | そ |
さば | しび | すぶ | せべ | そぼ | |
た行 | た | ち | つ | て | と |
たば | ちび | つぶ | てべ | とぼ | |
な行 | な | に | ぬ | ね | の |
なば | にび | ぬぶ | ねべ | のぼ | |
は行 | は | ひ | ふ | へ | ほ |
はば | ひび | ふぶ | へべ | ほぼ | |
ま行 | ま | み | む | め | も |
まば | みび | むぶ | めべ | もぼ | |
や行 | や | ゆ | よ | ||
やば | ゆぶ | よぼ | |||
ら行 | ら | り | る | れ | ろ |
らば | りび | るぶ | れべ | ろぼ | |
わ行 | わ | を | |||
わば | をぼ | ||||
が行 | が | ぎ | ぐ | げ | ご |
がば | ぎび | ぐぶ | げべ | ごぼ | |
ざ行 | ざ | じ | ず | ぜ | ぞ |
ざば | じび | ずぶ | ぜべ | ぞぼ | |
だ行 | だ | ぢ | づ | で | ど |
だば | ぢび | づぶ | でべ | どぼ | |
ば行 | ば | び | ぶ | べ | ぼ |
ばば | びび | ぶぶ | べべ | ぼぼ | |
ぱ行 | ぱ | ぴ | ぷ | ぺ | ぽ |
ぱば | ぴび | ぷぶ | ぺべ | ぽぼ | |
○ぁ行 | ○ぁ | ○ぃ | ○ぅ | ○ぇ | ○ぉ |
○ぁば | ○ぃび | ○ぅぶ | ○ぇべ | ○ぉぼ | |
○ゃ行 | ○ゃ | ○ゅ | ○ょ | ||
○ゃば | ○ゅぶ | ○ょぼ |
使い方
ひらがな・カタカナ以外の文字はそのまま出力されます。
以下はhttps://www.hinatazaka46.com/s/official/diary/detail/27193?ima=0000&cd=memberより引用させて頂きました。
PRINT BABIGO.decode("はばちびまばいびめべのぼきょぼんぶこぼまばるぶまばるぶかばんぶがばえべまばしびたば♡")
- 結果
はちまいめのきょんこまるまるかんがえました♡
参考文献
- https://youtu.be/6heq-Aaft6s
- https://www.hinatazaka46.com/s/official/diary/detail/27193?ima=0000&cd=member