/*-----------------------------------------------------------------------------
[名称]	CustomSettingPerl.cpp
[概要]	Perl用設定情報の実装
[備考]	システム標準で用意するPerl用設定情報クラス。
		キーワード定義はサクラエディタのソースからのパクリ。
[履歴]	2003-06-15	NC		新規作成(moralog)
-----------------------------------------------------------------------------*/

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

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

static const char*	f_ppszKeyWords1[] = {
	"break",
	"continue",
	"do",
	"elsif",
	"else",
	"for",
	"foreach",
	"goto",
	"if",
	"last",
	"next",
	"return",
	"sub",
	"undef",
	"unless",
	"until",
	"while",
	"abs",
	"accept",
	"alarm",
	"atan2",
	"bind",
	"binmode",
	"bless",
	"caller",
	"chdir",
	"chmod",
	"chomp",
	"chop",
	"chown",
	"chr",
	"chroot",
	"close",
	"closedir",
	"connect",
	"continue",
	"cos",
	"crypt",
	"dbmclose",
	"dbmopen",
	"defined",
	"delete",
	"die",
	"do",
	"dump",
	"each",
	"eof",
	"eval",
	"exec",
	"exists",
	"exit",
	"exp",
	"fcntl",
	"fileno",
	"flock",
	"fork",
	"format",
	"formline",
	"getc",
	"getlogin",
	"getpeername",
	"getpgrp",
	"getppid",
	"getpriority",
	"getpwnam",
	"getgrnam",
	"gethostbyname",
	"getnetbyname",
	"getprotobyname",
	"getpwuid",
	"getgrgid",
	"getservbyname",
	"gethostbyaddr",
	"getnetbyaddr",
	"getprotobynumber",
	"getservbyport",
	"getpwent",
	"getgrent",
	"gethostent",
	"getnetent",
	"getprotoent",
	"getservent",
	"setpwent",
	"setgrent",
	"sethostent",
	"setnetent",
	"setprotoent",
	"setservent",
	"endpwent",
	"endgrent",
	"endhostent",
	"endnetent",
	"endprotoent",
	"endservent",
	"getsockname",
	"getsockopt",
	"glob",
	"gmtime",
	"goto",
	"grep",
	"hex",
	"import",
	"index",
	"int",
	"ioctl",
	"join",
	"keys",
	"kill",
	"last",
	"lc",
	"lcfirst",
	"length",
	"link",
	"listen",
	"local",
	"localtime",
	"log",
	"lstat",
//			"//m",
	"map",
	"mkdir",
	"msgctl",
	"msgget",
	"msgsnd",
	"msgrcv",
	"my",
	"next",
	"no",
	"oct",
	"open",
	"opendir",
	"ord",
	"pack",
	"package",
	"pipe",
	"pop",
	"pos",
	"print",
	"printf",
	"prototype",
	"push",
//			"//q",
	"qq",
	"qr",
	"qx",
	"qw",
	"quotemeta",
	"rand",
	"read",
	"readdir",
	"readline",
	"readlink",
	"readpipe",
	"recv",
	"redo",
	"ref",
	"rename",
	"require",
	"reset",
	"return",
	"reverse",
	"rewinddir",
	"rindex",
	"rmdir",
//			"//s",
	"scalar",
	"seek",
	"seekdir",
	"select",
	"semctl",
	"semget",
	"semop",
	"send",
	"setpgrp",
	"setpriority",
	"setsockopt",
	"shift",
	"shmctl",
	"shmget",
	"shmread",
	"shmwrite",
	"shutdown",
	"sin",
	"sleep",
	"socket",
	"socketpair",
	"sort",
	"splice",
	"split",
	"sprintf",
	"sqrt",
	"srand",
	"stat",
	"study",
	"sub",
	"substr",
	"symlink",
	"syscall",
	"sysopen",
	"sysread",
	"sysseek",
	"system",
	"syswrite",
	"tell",
	"telldir",
	"tie",
	"tied",
	"time",
	"times",
	"tr",
	"truncate",
	"uc",
	"ucfirst",
	"umask",
	"undef",
	"unlink",
	"unpack",
	"untie",
	"unshift",
	"use",
	"utime",
	"values",
	"vec",
	"wait",
	"waitpid",
	"wantarray",
	"warn",
	"write"
};

static const char*	f_ppszKeyWords2[] = {
	"$ARGV",
	"$_",
	"$1",
	"$2",
	"$3",
	"$4",
	"$5",
	"$6",
	"$7",
	"$8",
	"$9",
	"$0",
	"$MATCH",
	"$&",
	"$PREMATCH",
	"$`",
	"$POSTMATCH",
	"$'",
	"$LAST_PAREN_MATCH",
	"$+",
	"$MULTILINE_MATCHING",
	"$*",
	"$INPUT_LINE_NUMBER",
	"$NR",
	"$.",
	"$INPUT_RECORD_SEPARATOR",
	"$RS",
	"$/",
	"$OUTPUT_AUTOFLUSH",
	"$|",
	"$OUTPUT_FIELD_SEPARATOR",
	"$OFS",
	"$,",
	"$OUTPUT_RECORD_SEPARATOR",
	"$ORS",
	"$\\",
	"$LIST_SEPARATOR",
	"$\"",
	"$SUBSCRIPT_SEPARATOR",
	"$SUBSEP",
	"$;",
	"$OFMT",
	"$#",
	"$FORMAT_PAGE_NUMBER",
	"$%",
	"$FORMAT_LINES_PER_PAGE",
	"$=",
	"$FORMAT_LINES_LEFT",
	"$-",
	"$FORMAT_NAME",
	"$~",
	"$FORMAT_TOP_NAME",
	"$^",
	"$FORMAT_LINE_BREAK_CHARACTERS",
	"$:",
	"$FORMAT_FORMFEED",
	"$^L",
	"$ACCUMULATOR",
	"$^A",
	"$CHILD_ERROR",
	"$?",
	"$OS_ERROR",
	"$ERRNO",
	"$!",
	"$EVAL_ERROR",
	"$@",
	"$PROCESS_ID",
	"$PID",
	"$$",
	"$REAL_USER_ID",
	"$UID",
	"$<",
	"$EFFECTIVE_USER_ID",
	"$EUID",
	"$>",
	"$REAL_GROUP_ID",
	"$GID",
	"$(",
	"$EFFECTIVE_GROUP_ID",
	"$EGID",
	"$)",
	"$PROGRAM_NAME",
	"$0",
	"$[",
	"$PERL_VERSION",
	"$]",
	"$DEBUGGING",
	"$^D",
	"$SYSTEM_FD_MAX",
	"$^F",
	"$INPLACE_EDIT",
	"$^I",
	"$PERLDB",
	"$^P",
	"$BASETIME",
	"$^T",
	"$WARNING",
	"$^W",
	"$EXECUTABLE_NAME",
	"$^X",
	"$ARGV",
	"$ENV",
	"$SIG"
};

/*-----------------------------------------------------------------------------
[名称]	コンストラクタ
[機能]	インスタンスの生成。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CCustomSettingPerl::CCustomSettingPerl()
{
	m_strSettingName = "Perlソース";
	m_strExt = "cgi,pl,pm";

	// 色設定
	{
		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 );

		// キーワード１
		CString	strKeyWordz1;
		StrArrayToKeyWordzString( (char**)f_ppszKeyWords1, sizeof(f_ppszKeyWords1)/sizeof(char*), &strKeyWordz1 );
		Item.SetPattern( strKeyWordz1 );
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(128,128,255) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// キーワード２
		CString	strKeyWordz2;
		StrArrayToKeyWordzString( (char**)f_ppszKeyWords2, sizeof(f_ppszKeyWords2)/sizeof(char*), &strKeyWordz2 );
		Item.SetPattern( strKeyWordz2 );
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(128,128,128) );
		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)"\\#.*\?\\s");
		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)"\\b(http|ftp|mailto)\\:[^\\s\\\"]*");
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(0,0,255) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		Item.SetUnderLine( TRUE );
		pEmphasis->GetItemz().Add( Item );

		// ハイパーリンク２
		Item.SetPattern((CString)"www\\.[^\\s\\\"]*");
		Item.SetTerminator((CString)"");
		Item.SetForeColor( RGB(0,0,255) );
		Item.SetBackColor( RGB(255,255,255) );
		Item.SetEnableToggle( TRUE );
		Item.SetUnderLine( TRUE );
		pEmphasis->GetItemz().Add( Item );
	}
}


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

}
