トークン書き込み用クラス

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

TokenWriter.pas


//*******************************************************************************************************
// トークンごとに 種類に応じた色指定タグで挟んで出力する
//*******************************************************************************************************
unit TokenWriter;

interface
uses
TextWriter, Token;

type
TTokenWriter = class
private
//出力用クラス
_writer: TTextWriter ;

public
constructor Create(writer:TTextWriter);
procedure putToken(token:TToken);
end;

implementation
//---------------------------------------------------------------------------------------------------
// 初期化
//---------------------------------------------------------------------------------------------------
constructor TTokenWriter.Create(writer:TTextWriter);
begin
//出力用クラス
_writer := writer;
end;
//---------------------------------------------------------------------------------------------------
// Tokenごとに 種類に応じた色指定タグで挟んで出力する
//---------------------------------------------------------------------------------------------------
procedure TTokenWriter.putToken(token:TToken);
begin
if (token.tokenKind = '予約語') then
begin
_writer.putString('<SPAN CLASS="KEY">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else if (token.tokenKind = 'コメント') then
begin
_writer.putString('<SPAN CLASS="COM">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else if (token.tokenKind = '文字列') then
begin
_writer.putString('<SPAN CLASS="STR">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else if (token.tokenKind = '文字') then
begin
_writer.putString('<SPAN CLASS="CHA">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else if (token.tokenKind = '数字') then
begin
_writer.putString('<SPAN CLASS="NUM">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else if (token.tokenKind = '識別子') then
begin
_writer.putString('<SPAN CLASS="IDW">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else if (token.tokenKind = '演算子') then
begin
_writer.putString('<SPAN CLASS="OPE">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else if (token.tokenKind = '区切り記号') then
begin
_writer.putString('<SPAN CLASS="DLM">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else if (token.tokenKind = 'ディレクティブ') then
begin
_writer.putString('<SPAN CLASS="DIR">');
_writer.putString(token.tokenHtml);
_writer.putString('</SPAN>');
end
else
begin
_writer.putString(token.tokenHtml);
end
end;

end.