/*-----------------------------------------------------------------------------
[名称]	CustomSettingCSource.cpp
[概要]	C／C++ソース用設定情報の実装
[備考]	システム標準で用意するC／C++ソース用設定情報クラス。
[履歴]	2003-02-25	NC		コメント付加(moralog)
		2003-12-22	b031228 (moralog) 等幅フォントの時はルーラを文字数に
		2003-12-27	b031228 (moralog) フォント大きさをサクラエディタと同じにした。
-----------------------------------------------------------------------------*/

//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "shitarabian.h"
#include "CustomSettingCSource.h"
#include "EmphasisDefine.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


/*-----------------------------------------------------------------------------
[名称]	コンストラクタ
[機能]	インスタンスの生成。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CCustomSettingCSource::CCustomSettingCSource()
{
	m_strSettingName = "Ｃ／Ｃ＋＋ソース";
	m_strExt = "c,cpp,cxx,cc,cp,c++,h,hpp,hxx,hh,hp,h++,rc,dsw,dsp,dep,mak,hm";

	// 色設定
	{
		CEmphasisDefine*	pEmphasis = GetEmphasisDefine();
		CEmphasisItem		Item;

		// 複数行コメント
		Item.SetPattern((CString)"\\/\\*");
		Item.SetTerminator((CString)"\\*\\/");
		Item.SetForeColor( RGB(0,128,0) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// １行コメント
		Item.SetPattern((CString)"\\/\\/.*");
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(0,128,0) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// ブロックコメント（プリコンパイル）
		Item.SetPattern((CString)"\\#if\\s(FALSE|false|0)");
		Item.SetTerminator((CString)"\\#endif");
		Item.SetForeColor( RGB(0,128,0) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// Ｃプリコンパイルマクロキーワード
		Item.SetPattern((CString)
			"\\#("\
			"(define)|(elif)|(else)|(if)|(endif)|(error)|(if)|(ifdef)|(ifndef)|"\
			"(import)|(include)|(line)|(pragma)|(undef)"\
			")\\b");
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(0,0,255) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// Ｃ++キーワード
		Item.SetPattern((CString)
			"\\b((asm1)|(auto)|(bad_cast)|(bad_typeid)|(bool)|(break)|"\
			"(case)|(catch)|(char)|(class)|(const)|(const_cast)|(continue)|"\
			"(default)|(delete)|(do)|(double)|(dynamic_cast)|(else)|(enum)|"\
			"(except)|(explicit)|(extern)|(false)|(finally)|(float)|(for)|"\
			"(friend)|(goto)|(if)|(inline)|(int)|(long)|(mutable)|(namespace)|"\
			"(new)|(operator)|(private)|(protected)|(public)|(register)|"\
			"(reinterpret_cast)|(return)|(short)|(signed)|(sizeof)|(static)|"\
			"(static_cast)|(struct)|(switch)|(template)|(this)|(throw)|(true)|"\
			"(try)|(type_info)|(typedef)|(typeid)|(typename)|(union)|(unsigned)|"\
			"(using)|(virtual)|(void)|(volatile)|(while))\\b"
		);
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(0,0,255) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// VC++キーワード
		Item.SetPattern((CString)
			"\\b("\
			"(allocate)|(__inline)|(property)|(__asm1)|(__int8)|(selectany)|"\
			"(__based)|(__int16)|(__single_inheritance)|(__cdecl)|(__int32)|(__stdcall)|"\
			"(__declspec)|(__int64)|(thread)|(dllexport)|(__leave)|(__try)|(dllimport3)|"\
			"(__multiple_inheritance)|(uuid)|(__except)|(naked)|(__uuidof)|(__fastcall)|"\
			"(nothrow)|(__virtual_inheritance)|(__finally)"\
			")\\b"
		);
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(0,0,255) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// リテラル
		Item.SetPattern((CString)
			"(\\\".*?\\\")|"\
			"(\\b[0-9].*?\\b)");
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(255,0,0) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// 全角空白文字
		Item.SetPattern((CString)"　");
		Item.SetForeColor( RGB(200,200,200) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// タブ文字
		Item.SetPattern((CString)"\\t");
		Item.SetForeColor( RGB(200,200,255) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );
	}

	// フォント
	{
// ▼ (3181) BGN 2003.12.27 (moralog) 等幅フォントの時はルーラを文字数に
		GetLogFont()->m_iPointSize = 11;
// ▲ (3181) END
		GetLogFont()->m_strFontName = "ＭＳ ゴシック";
	}

// ▼ (3181) BGN 2003.12.22 (moralog) 等幅フォントの時はルーラを文字数に
	// ルーラ
	{
		// カラム単位で表示
		SetRulerUnitPixel( FALSE );
	}
// ▲ (3181) END

	// 印刷幅指示線
	{
		GetPrintDefine()->m_bPrintWidthLine = TRUE;
		GetPrintDefine()->m_bMarge = TRUE;
		GetPrintDefine()->m_uiMargeCount = 2;
	}

	// BOX表示指定
	{
		m_BoxCharDefine.GetItemz().RemoveAll();
		TBoxChar	Item;
		
		// 全角空白
		Item.strChar = "　";
		Item.bEnable = TRUE;
		m_BoxCharDefine.GetItemz().Add( Item );

		// 半角空白
		Item.strChar = " ";
		Item.bEnable = FALSE;
		m_BoxCharDefine.GetItemz().Add( Item );

		// タブ
		Item.strChar = "\t";
		Item.bEnable = FALSE;
		m_BoxCharDefine.GetItemz().Add( Item );
	}
}


/*-----------------------------------------------------------------------------
[名称]	デストラクタ
[機能]	インスタンスの破棄。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CCustomSettingCSource::~CCustomSettingCSource()
{

}
