このプログラムは、サイト 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