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

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

TokenWriter.h


#pragma once

#include ".\token.h"
#include ".\writer.h"

namespace SourceToHtml
{
using namespace System;
//*******************************************************************************************************
// トークンごとに 種類に応じた色指定タグで挟んで出力する
//*******************************************************************************************************
public __gc class TokenWriter
{
private:
//出力用クラス
Writer* _writer;

public:
// 初期化
TokenWriter(Writer* writer);
// 終了
~TokenWriter();
// トークンごとに 種類に応じた色指定タグで挟んで出力する
void putToken(Token* token);
};
}

TokenWriter.cpp


#include "StdAfx.h"
#include ".\TokenWriter.h"

namespace SourceToHtml
{
//*******************************************************************************************************
// トークンごとに 種類に応じた色指定タグで挟んで出力する
//*******************************************************************************************************
//-------------------------------------------------------------------------------------------------------
// 初期化
//-------------------------------------------------------------------------------------------------------
TokenWriter::TokenWriter(Writer* writer)
{
//出力用クラス
_writer = writer;
}
//-------------------------------------------------------------------------------------------------------
// 終了
//-------------------------------------------------------------------------------------------------------
TokenWriter::~TokenWriter()
{
_writer = NULL;
}
//---------------------------------------------------------------------------------------------------
// Tokenごとに 種類に応じた色指定タグで挟んで出力する
//---------------------------------------------------------------------------------------------------
void TokenWriter::putToken(Token* token)
{
if (token->tokenKind->Equals("予約語"))
{
_writer->putString(S"<SPAN CLASS=\"KEY\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else if (token->tokenKind->Equals("コメント"))
{
_writer->putString(S"<SPAN CLASS=\"COM\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else if (token->tokenKind->Equals("文字列"))
{
_writer->putString(S"<SPAN CLASS=\"STR\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else if (token->tokenKind->Equals("文字"))
{
_writer->putString(S"<SPAN CLASS=\"CHA\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else if (token->tokenKind->Equals("数字"))
{
_writer->putString(S"<SPAN CLASS=\"NUM\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else if (token->tokenKind->Equals("識別子"))
{
_writer->putString(S"<SPAN CLASS=\"IDW\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else if (token->tokenKind->Equals("演算子"))
{
_writer->putString(S"<SPAN CLASS=\"OPE\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else if (token->tokenKind->Equals("区切り記号"))
{
_writer->putString(S"<SPAN CLASS=\"DLM\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else if (token->tokenKind->Equals("ディレクティブ"))
{
_writer->putString(S"<SPAN CLASS=\"DIR\">");
_writer->putString(token->tokenHtml);
_writer->putString(S"</SPAN>");
}
else
{
_writer->putString(token->tokenHtml);
}
}
}