このプログラムは、サイト note でルビを振った文を入力するために、サイト「文章にルビを振る」での変換結果
プログラミング講座(こうざ)
のようなテキストを
プログラミング|講座《こうざ》
に変換します。
上のマルチライン テキストボックス tboxFrom に「文章にルビを振る」の変換結果を入力すると、下のマルチライン テキストボックス tboxTo に note の表記が出力されます。
Ruby Aid は以下のようなプログラムになりました。p を textFrom へのポインタとし、1 から順に p 文字目をそのまま textTo へコピーするか、変換してコピーします。
' Ruby Aid ' Version 0.1.0 ' Copyright © 2022 Nonki Takahashi. The MIT License. tboxFrom = Controls.AddMultiLineTextBox(10, 20) fs = GraphicsWindow.FontSize Controls.SetSize(tboxFrom, 1000, fs * 6) tboxTo = Controls.AddMultiLineTextBox(10, 40 + fs * 6) Controls.SetSize(tboxTo, 1000, fs * 6) Controls.TextTyped = OnTextTyped Sub OnTextTyped textFrom = Controls.GetTextBoxText(tboxFrom) ConvertText() Controls.SetTextBoxText(tboxTo, textTo) EndSub Sub ConvertText ' param textFrom - text from ' return textTo - text to textTo = "" len = Text.GetLength(textFrom) p = 1 While p <= len SkipKana() If p <= len Then ConvertKanji() EndIf EndWhile EndSub Sub SkipKana ' param textFrom - text from ' param p - pointer to textFrom ' return p - updated p _p = p While _p <= len k = Text.GetSubText(textFrom, _p, 1) c = Text.GetCharacterCode(k) TestKanji() If isKanji Then _p = len ' exit While Else textTo = Text.Append(textTo, k) p = p + 1 EndIf _p = _p + 1 EndWhile EndSub Sub SkipKanji ' param textFrom - text from ' param p - pointer to textFrom ' return p - updated p _p = p While _p <= len k = Text.GetSubText(textFrom, _p, 1) c = Text.GetCharacterCode(k) TestKanji() If isKanji Then textTo = Text.Append(textTo, k) p = p + 1 Else _p = len ' exit While EndIf _p = _p + 1 EndWhile EndSub Sub TestKanji ' param c - character code ' return isKanji - "True" if c is Kanji If (19968 <= c) And (c < 40960) Then ' CJK unified ideographs (Kanji) isKanji = "True" Else isKanji = "False" EndIf EndSub Sub ConvertKanji ' param textFrom - text from ' return textTo - text to ' return p - updated p ' return textTo - text to textTo = Text.Append(textTo, "|") SkipKanji() k = Text.GetSubText(textFrom, p, 1) If k = "(" Then textTo = Text.Append(textTo, "《") p = p + 1 k = Text.GetSubText(textFrom, p, 1) While (p <= len) And (k <> ")") textTo = Text.Append(textTo, k) p = p + 1 k = Text.GetSubText(textFrom, p, 1) EndWhile If k = ")" Then textTo = Text.Append(textTo, "》") p = p + 1 EndIf EndIf EndSub