トークン読み込み用クラス (T-SQL用)

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

TokenReaderTsql.pas


//*******************************************************************************************************
// トークンごとに 文字列と その種類を返す (T-SQL 用)
//*******************************************************************************************************
unit TokenReaderTsql;

interface
uses
TokenReaderNoCase, TextReader;

type
TTokenReaderTsql = class(TTokenReaderNoCase)

protected
function IsComSingle():Boolean;override;
function IsEscape():Boolean;override;

procedure getNextStateIdwEsc();override;

public
constructor Create(reader:TTextReader; langType:string);override;
end;

implementation
//---------------------------------------------------------------------------------------------------
// 初期化
//---------------------------------------------------------------------------------------------------
constructor TTokenReaderTsql.Create(reader:TTextReader; langType:string);
begin
inherited Create(reader, langType);
end;
//---------------------------------------------------------------------------------------------------
// 単一行コメントか?
//---------------------------------------------------------------------------------------------------
function TTokenReaderTsql.IsComSingle():Boolean;
begin
result := ((_context.currChar = '-') and (_context.nextChar = '-'));
end;
//---------------------------------------------------------------------------------------------------
// エスケープされた識別子か?
//---------------------------------------------------------------------------------------------------
function TTokenReaderTsql.IsEscape():Boolean;
begin
result := ((_context.currChar = '"') or (_context.currChar = '['));
end;
//---------------------------------------------------------------------------------------------------
// 状態を更新 (エスケープされた識別子)
//---------------------------------------------------------------------------------------------------
procedure TTokenReaderTsql.getNextStateIdwEsc();
begin
inherited getNextStateIdwEsc();

if (Length(_context.currToken.tokenString) > 1) then
begin
if ((_context.currToken.tokenString[1] = '"') and (_context.currChar = '"')) then
_context.State := 'その他'

else if ((_context.currToken.tokenString[1] = '[') and (_context.currChar = ']')) then
_context.State := 'その他';
end;
end;

end.