Ruby Aid 0.1.0

このプログラムは、サイト note でルビを振った文を入力するために、サイト「文章にルビを振る」での変換結果

プログラミング講座(こうざ)

のようなテキストを

プログラミング|講座《こうざ》

に変換します。

実行結果

上のマルチライン テキストボックス tboxFrom に「文章にルビを振る」の変換結果を入力すると、下のマルチライン テキストボックス tboxTo に note の表記が出力されます。

ソース

RubyAid.txt

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

Copyright © 2022 たかはしのんき. All rights reserved.