SSブログ

[.NET]プログラムコードの変換(C#、VB.NET→HTML)[Page2] [Programming .NET Tips]

[はじめに]
[.NET]プログラムコードの変換(C#、VB.NET→HTML)[Page1]」からの続きです。

[プログラムソース]
ブログの容量制限の為、下記に分けて記述しています。
[.NET]プログラムコードの変換(C#、VB.NET→HTML)[Page1]
[.NET]プログラムコードの変換(C#、VB.NET→HTML)[Page2]
[.NET]プログラムコードの変換(C#、VB.NET→HTML)[Page3]
Imports System.Text.RegularExpressions

''' <summary>
''' 変換(C#ソースコード→HTML)
''' </summary>
''' <remarks></remarks>
Public Class CSharpCodeConverterToHtml
    Inherits CodeConverterToHtml

#Region "定数定義"
    ''' <summary>
    ''' 背景色
    ''' </summary>
    ''' <remarks></remarks>
    Private Const BACK_COLOR As String = "#FFFFE0"

    ''' <summary>
    ''' 背景色(タイトル)
    ''' </summary>
    ''' <remarks></remarks>
    Private Const BACK_COLOR_TITLE As String = "#66CCCC"

    ''' <summary>
    ''' 前景色
    ''' </summary>
    ''' <remarks></remarks>
    Private Const FORE_COLOR As String = "#000000"

    ''' <summary>
    ''' 前景色(コメント)
    ''' </summary>
    ''' <remarks></remarks>
    Private Const FORE_COLOR_COMMENT As String = "#008040"

    ''' <summary>
    ''' 前景色(文字列)
    ''' </summary>
    ''' <remarks></remarks>
    Private Const FORE_COLOR_STRING As String = "#FF0000"

    ''' <summary>
    ''' 前景色(予約語)
    ''' </summary>
    ''' <remarks></remarks>
    Private Const FORE_COLOR_RESERVED_WORD As String = "#0000FF"
#End Region

#Region "変数定義"
    ''' <summary>
    ''' 正規表現
    ''' </summary>
    ''' <remarks></remarks>
    Private m_RegEx As Regex = Nothing

    ''' <summary>
    ''' 予約語一覧
    ''' </summary>
    ''' <remarks></remarks>
    Private m_ReservedWords As New List(Of String)
#End Region

#Region "コンストラクタ"
    ''' <summary>
    ''' コンストラクタ
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()

    End Sub
#End Region

#Region "変換対象の文字列を検索する正規表現を取得する。"
    ''' <summary>
    ''' 変換対象の文字列を検索する正規表現を取得する。
    ''' </summary>
    ''' <returns>正規表現</returns>
    ''' <remarks></remarks>
    Protected Overrides Function GetRegEx() As Regex
        If Not (Me.m_RegEx Is NothingThen
            Return Me.m_RegEx
        End If

        Dim strPatternAll As String = Nothing
        '正規表現パターン
        '※コメント判別
        '(先頭開始、0個以上の「&nbsp;」、1個以上の「//」、0個以上の任意文字)
        Dim strPattern1 As String = "^(&nbsp;)*(//)+.*"
        '※コメント判別
        '(先頭開始、0個以上の空白、1個以上の「//」、0個以上の任意文字)
        Dim strPattern2 As String = "^\s*(//)+.*"
        '※文字列判別
        '(「"」開始、0個以上の任意文字、最も手前の「"」終了)
        Dim strPattern3 As String = """.*?"""
        '※文字列判別
        '(「&quot;」開始、0個以上の任意文字、最も手前の「&quot;」終了)
        Dim strPattern4 As String = "&quot;.*?&quot;"
        '※予約語判別
        '(単語単位で予約語の何れかと同じ)
        Dim wkStr As String = String.Join("|"Me.GetReservedWords())
        Dim strPattern5 As String = "\b(" & wkStr & ")\b"

        strPatternAll = _
                    strPattern1 & "|" & strPattern2 & "|" & _
                    strPattern3 & "|" & strPattern4 & "|" & _
                    strPattern5

        Me.m_RegEx = New Regex(strPatternAll)

        Return Me.m_RegEx
    End Function
#End Region

#Region "正規表現の検索結果を編集する。"
    ''' <summary>
    ''' 正規表現の検索結果を編集する。
    ''' </summary>
    ''' <param name="match">検索結果</param>
    ''' <returns>編集結果</returns>
    ''' <remarks></remarks>
    Protected Overrides Function MatchEvaluator(ByVal match As Match) As String
        If match.Value.Replace("&nbsp;""").StartsWith("//"OrElse _
            match.Value.Trim().StartsWith("//"Then
            'コメントの場合            
            Dim wk1 As Integer = match.Value.IndexOf("//")
            If wk1 = 0 Then
                Return String.Format( _
                    "<font color='{0}'>{1}</font>", _
                    FORE_COLOR_COMMENT, _
                    match.Value.Substring(wk1))
            End If
            Return match.Value.Substring(0, wk1) & _
                    String.Format( _
                    "<font color='{0}'>{1}</font>", _
                    FORE_COLOR_COMMENT, _
                    match.Value.Substring(wk1))
        End If

        If (match.Value.StartsWith("&quot;"AndAlso _
            match.Value.EndsWith("&quot;")) OrElse _
           (match.Value.StartsWith(""""AndAlso _
            match.Value.EndsWith("""")) Then
            '文字列の場合            
            Return String.Format( _
                "<font color='{0}'>{1}</font>", _
                FORE_COLOR_STRING, _
                match.Value)
        End If

        '予約語の場合
        Return String.Format( _
            "<font color='{0}'>{1}</font>", _
            FORE_COLOR_RESERVED_WORD, _
            match.Value)
    End Function
#End Region

#Region "予約語一覧を取得する。"
    ''' <summary>
    ''' 予約語一覧を取得する。
    ''' </summary>
    ''' <returns>予約語一覧</returns>
    ''' <remarks></remarks>
    Public Overrides Function GetReservedWords() As String()
        If Me.m_ReservedWords.Count > 0 Then
            Return Me.m_ReservedWords.ToArray()
        End If

        With Me.m_ReservedWords

            .AddRange(New String() {"abstract""as""base""bool""break"})
            .AddRange(New String() {"byte""case""catch""char""checked"})
            .AddRange(New String() {"class""const""continue""decimal""decimal"})
            .AddRange(New String() {"default""delegate""do""double""else"})
            .AddRange(New String() {"enum""event""explicit""extern""false"})
            .AddRange(New String() {"finally""fixed""float""for""foreach"})
            .AddRange(New String() {"from""get""goto""group""if"})
            .AddRange(New String() {"implicit""in""int""interface""internal"})
            .AddRange(New String() {"into""is""join""let""lock"})
            .AddRange(New String() {"long""namespace""new""null""object"})
            .AddRange(New String() {"operator""orderby""out""override""params"})
            .AddRange(New String() {"partial""private""protected""public""readonly"})
            .AddRange(New String() {"ref""return""sbyte""sealed""select"})
            .AddRange(New String() {"set""short""sizeof""stackalloc""static"})
            .AddRange(New String() {"string""struct""switch""this""throw"})
            .AddRange(New String() {"true""try""typeof""uint""ulong"})
            .AddRange(New String() {"unchecked""unsafe""ushort""using""value"})
            .AddRange(New String() {"virtual""void""volatile""where""while"})
            .AddRange(New String() {"yield"})

        End With

        Return Me.m_ReservedWords.ToArray()

    End Function
#End Region

#Region "タイトルを取得"
    ''' <summary>
    ''' タイトルを取得
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function GetDefaultTitle() As String
        Return "C#"
    End Function
#End Region

#Region "背景色(タイトル)を取得"
    ''' <summary>
    ''' 背景色(タイトル)を取得
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function GetTitleBackColor() As String
        Return BACK_COLOR_TITLE
    End Function
#End Region

#Region "背景色を取得"
    ''' <summary>
    ''' 背景色を取得
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function GetBackColor() As String
        Return BACK_COLOR
    End Function
#End Region

#Region "前景色を取得"
    ''' <summary>
    ''' 前景色を取得
    ''' </summary>
    ''' <returns>前景色</returns>
    ''' <remarks></remarks>
    Public Overrides Function GetForeColor() As String
        Return FORE_COLOR
    End Function
#End Region

End Class

[VB.NET]CSharpCodeConverterToHtml.vb

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。