クリエイターDP日誌

印刷、webのデザイン、プログラマーまで全部やってます

azukiテキストエディタ

visual studioのtextboxでは物足りないので、azukiというテキストエディタコンポーネントを使用してみた。
Azukiテキストエディタエンジン | Simple is best.
ダウンロードはこちら
ダウンロードファイル一覧 - Azuki - OSDN

Azuki-バージョン-bin.zipをダウンロードし、Cドライブ等に置く。
フォームのツールボックスを右クリックし、アイテムの選択、または、ツールからツールボックスの選択で、.netの参照から「Azuki.dll」を参照すればコントロールが追加される。
機能としては、undoやredoやコピペ関係も実装済であるし、行数も表示されとても便利に使える。また、シンタックスハイライトに対応している。
自作のシンタックスハイライトも作成できる。

Imports Sgry.Azuki
Imports Sgry.Azuki.Highlighter

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim keys As KeywordHighlighter = New KeywordHighlighter
    Dim key1 As String() = New String() {"</a", "</br", "</div", "</font", "</head", _
        "</strong", "</table","</tbody", "</td", "</tr", _
        "<a", "<br", "<center", "<div", "<font", "<head", "<html", "<img", _
        "<strong", "<table", "<tbody", "<td", "<title", "<tr", _
        ">", "align=", "alt=", "bgColor=", "border=", "cellspacing=", "color=", _
        "face=", "height=","href=", "size=", "src=", "style=", "valign=", "width="}
    Array.Sort(key1)
    keys.AddEnclosure("""", """", CharClass.Comment, True)
    keys.AddKeywordSet(key1, CharClass.Keyword)
    keys.AddEnclosure("<!--", "-->", CharClass.Comment, True)
    AzukiControl1.Highlighter = keys
End Sub

例えばこんな感じ?HTMLがハイライトされる。
必要な命令などは大体textboxと同じなので使いやすいし、必要な物は既に入っているし、便利である。

自分で使用するだけなら、他のエディタからキーワードをゲットし導入してもよい。

    Dim kwdFile As String() = New String() {"キーワードファイルのパス"}
    Dim key2 As New ArrayList
    For i As Integer = 0 To kwdFile.Length - 1
        fName = Path.GetDirectoryName(kwdFile(i))
        Using sr As New System.IO.StreamReader(fName, System.Text.Encoding.Default)
            Do While Not sr.EndOfStream
                Dim s As String = sr.ReadLine
                If InStr(s, "//") = 0 Then    'コメントアウトは読み込まない
                    If key2.Contains(s) = 0 Then
                        key2.Add(Trim(s))
                    End If
                End If
            Loop
        End Using
    Next
    Dim key3 As String() = Nothing
    key3 = DirectCast(key2.ToArray(GetType(String)), String())    'ArrayListを配列に変換
    key2.Clear()
    Array.Sort(key3)
    keys.AddKeywordSet(key3, CharClass.Keyword)
    AzukiControl1.Highlighter = keys

キーワードはabc順でないといけないので、ソートしている。