トークン読み込み用クラス (VisualBasic用)

これまでC# で作成してきた「SourceToHTML」を、VB.NET に焼きなおしてみます。

TokenReaderVB.vb


'*******************************************************************************************************
' トークンごとに 文字列と その種類を返す (VisualBasic 用)
'*******************************************************************************************************
Public Class TokenReaderVB
Inherits TokenReaderNoCase
'---------------------------------------------------------------------------------------------------
' 初期化
'---------------------------------------------------------------------------------------------------
Friend Sub New(ByVal aReader As Reader, ByVal langType As String)
MyBase.New(aReader, langType)
End Sub
'---------------------------------------------------------------------------------------------------
' 終了
'---------------------------------------------------------------------------------------------------
Protected Overrides Sub Finalize()
End Sub
'---------------------------------------------------------------------------------------------------
' 単一行コメントか?
'---------------------------------------------------------------------------------------------------
Protected Overrides Function IsComSingle() As Boolean
Return (_context.currChar = "'"c)
End Function
'---------------------------------------------------------------------------------------------------
' 複数行コメントか?
'---------------------------------------------------------------------------------------------------
Protected Overrides Function IsComMulti() As Boolean
Return False
End Function
'---------------------------------------------------------------------------------------------------
' 逐語的文字列か?
'---------------------------------------------------------------------------------------------------
Protected Overrides Function IsLiteral() As Boolean
Return (_context.currChar = """"c)
End Function
'---------------------------------------------------------------------------------------------------
' 日付か?
'---------------------------------------------------------------------------------------------------
Protected Overrides Function IsDate() As Boolean
If (_context.currChar = "#"c) Then
If (Not(_context.prevToken Is Nothing) AndAlso (_context.prevToken.tokenKind = "演算子")) Then
Return True
End If
End If

Return False
End Function
'---------------------------------------------------------------------------------------------------
' エスケープされた識別子か?
'---------------------------------------------------------------------------------------------------
Protected Overrides Function IsEscape() As Boolean
Return (_context.currChar = "["c)
End Function
'---------------------------------------------------------------------------------------------------
' 数字か?
'---------------------------------------------------------------------------------------------------
Protected Overrides Function IsNumber() As Boolean
If (_context.currChar = "&"c) Then
If (_context.State <> "不明") Then
If ((Char.ToLower(_context.nextChar) = "o"c) OrElse (Char.ToLower(_context.nextChar) = "h"c)) Then
Return True
End If
End If
End If

If (Char.IsDigit(_context.currChar)) Then Return True

Return False
End Function
'---------------------------------------------------------------------------------------------------
' 状態を更新 (逐語的文字列)
'---------------------------------------------------------------------------------------------------
Protected Overrides Sub getNextStateStrLit()
_context.State = "逐語的文字列"
_context.nextToken.tokenKind = "文字列"

If (_context.currChar = """"c) Then
_context.State = "その他"
End If
End Sub
'---------------------------------------------------------------------------------------------------
' 16進表記か?
'---------------------------------------------------------------------------------------------------
Protected Overrides Function IsNotHex() As Boolean
' &h で始まっていたら、16進
If (_context.currToken.tokenString.Length > 1) Then
If (_context.currToken.tokenString.Chars(0) = "&"c) Then
If ((_context.currToken.tokenString.Chars(1) = "h"c) OrElse (_context.currToken.tokenString.Chars(1) = "H"c)) Then
Return False
End If
End If
End If

Return True
End Function
'---------------------------------------------------------------------------------------------------
' 状態を更新 (エスケープされた識別子)
'---------------------------------------------------------------------------------------------------
Protected Overrides Sub getNextStateIdwEsc()
MyBase.getNextStateIdwEsc()

If (_context.currToken.tokenString.Length > 1) Then
If ((_context.currToken.tokenString.Chars(0) = "["c) AndAlso (_context.currChar = "]"c)) Then
_context.State = "その他"
End If
End If
End Sub
'---------------------------------------------------------------------------------------------------
' 状態を更新 (日付)
'---------------------------------------------------------------------------------------------------
Protected Overrides Sub getNextStateDtm()
MyBase.getNextStateDtm()

If (_context.currChar = "#"c) Then
_context.State = "その他"
End If
End Sub
End Class