亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? colorstring.cpp

?? 檢測語法的Edit類
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "stdafx.h"
#include "ColorString.h"

//  Copyright (c) 1996-1997, Keith Rule
//  You may freely use or modify this code provided this 
//  copyright is included in all derived versions.

UINT AFX_CDECL CColorStringBkgThread(LPVOID object)
{
	CColorString&	text = *((CColorString*) object);
	long			len, count = 0;
	CColorArray		renderColor;	// Hmm - This shouldn't be declared here, 
									// it causes a leak when the thread is terminated.

	// This isn't exactly efficent, but hey it's running in
	// the background
	for (;;) {
		len = text.GetLength();

		if (text.CommentPos() < len || text.KeywordPos() < len || text.QuotePos() < len) {
			renderColor.SetSize(len);
			renderColor.SetColor(text.m_defaultColor, 0, len);

			text.CommentPos(0); text.KeywordPos(0); text.QuotePos(0);
			if (text.m_color.GetSize() != len) {
				text.m_color.SetSize(len);
			}

			if (!text.ParseKeywords(renderColor)) goto restart;
			if (!text.ParseQuotes(renderColor)) goto restart;
			if (!text.ParseComments(renderColor)) goto restart;
		
			if (renderColor != text.m_color && len == text.GetLength())  
			{
				text.m_color = renderColor;
				text.DoUpdate(count > 0);
			}
		}
restart:
		::Sleep(100);
		count++;
	}

	return 0;
}


CColorString::CColorString(BOOL bUseThread) : CStringEx(), 
	m_defaultColor(RGB(0, 0, 0)), m_bkgThread(NULL),
	m_dQuoteColor(RGB(0, 0, 0)), m_sQuoteColor(RGB(0, 0, 0)), m_updateLevel(0),
	CThreadLock(), m_bUseThread(bUseThread), m_kPos(0), m_cPos(0), m_qPos(0)
{
	//TRACE("ColorString() - %x  File: %s, Line: %d\r\n", this, __FILE__, __LINE__);
}

CColorString::CColorString(const CString& stringSrc, BOOL bUseThread) : CStringEx( stringSrc ), m_bkgThread(NULL),
	m_defaultColor(RGB(0, 0, 0)), 
	m_dQuoteColor(RGB(0, 0, 0)), m_sQuoteColor(RGB(0, 0, 0)), m_updateLevel(0),
	CThreadLock(), m_bUseThread(bUseThread), m_kPos(0), m_cPos(0), m_qPos(0)
{
	//TRACE("ColorString() - %x  File: %s, Line: %d\r\n", this, __FILE__, __LINE__);
}

CColorString::CColorString(const CStringEx& stringSrc, BOOL bUseThread) : CStringEx( stringSrc ), m_bkgThread(NULL),
	m_defaultColor(RGB(0, 0, 0)), 
	m_dQuoteColor(RGB(0, 0, 0)), m_sQuoteColor(RGB(0, 0, 0)), m_updateLevel(0),
	CThreadLock(), m_bUseThread(bUseThread), m_kPos(0), m_cPos(0), m_qPos(0)
{
	//TRACE("ColorString() - %x  File: %s, Line: %d\r\n", this, __FILE__, __LINE__);
}

CColorString::CColorString(TCHAR ch, int nRepeat /*= 1*/, BOOL bUseThread) : CStringEx( ch, nRepeat ), m_bkgThread(NULL),
	m_defaultColor(RGB(0, 0, 0)),
	m_dQuoteColor(RGB(0, 0, 0)), m_sQuoteColor(RGB(0, 0, 0)), m_updateLevel(0),
	CThreadLock(), m_bUseThread(bUseThread), m_kPos(0), m_cPos(0), m_qPos(0)
{
	//TRACE("ColorString() - %x  File: %s, Line: %d\r\n", this, __FILE__, __LINE__);
}

CColorString::CColorString(LPCTSTR lpch, int nLength, BOOL bUseThread) : CStringEx( lpch, nLength ), m_bkgThread(NULL),
	m_defaultColor(RGB(0, 0, 0)), 
	m_dQuoteColor(RGB(0, 0, 0)), m_sQuoteColor(RGB(0, 0, 0)), m_updateLevel(0),
	CThreadLock(), m_bUseThread(bUseThread), m_kPos(0), m_cPos(0), m_qPos(0)
{
	//TRACE("ColorString() - %x  File: %s, Line: %d\r\n", this, __FILE__, __LINE__);
}

CColorString::CColorString(const unsigned char* psz, BOOL bUseThread) : CStringEx( psz ), m_bkgThread(NULL),
	m_defaultColor(RGB(0, 0, 0)), 
	m_dQuoteColor(RGB(0, 0, 0)), m_sQuoteColor(RGB(0, 0, 0)),
	CThreadLock(), m_bUseThread(bUseThread), m_kPos(0), m_cPos(0), m_qPos(0)
{
	//TRACE("ColorString() - %x  File: %s, Line: %d\r\n", this, __FILE__, __LINE__);
}

CColorString::CColorString(LPCWSTR lpsz, BOOL bUseThread) : CStringEx( lpsz ), m_bkgThread(NULL),
	m_defaultColor(RGB(0, 0, 0)), 
	m_dQuoteColor(RGB(0, 0, 0)), m_sQuoteColor(RGB(0, 0, 0)), m_updateLevel(0),
	CThreadLock(), m_bUseThread(bUseThread), m_kPos(0), m_cPos(0), m_qPos(0)
{
	//TRACE("ColorString() - %x  File: %s, Line: %d\r\n", this, __FILE__, __LINE__);
}

CColorString::CColorString(LPCSTR lpsz, BOOL bUseThread) : CStringEx( lpsz ), m_bkgThread(NULL),
	m_defaultColor(RGB(0, 0, 0)),
	m_dQuoteColor(RGB(0, 0, 0)), m_sQuoteColor(RGB(0, 0, 0)), m_updateLevel(0),
	CThreadLock(), m_bUseThread(bUseThread), m_kPos(0), m_cPos(0), m_qPos(0)
{
	//TRACE("ColorString() - %x  File: %s, Line: %d\r\n", this, __FILE__, __LINE__);
}

CColorString::~CColorString()
{
	if (m_bkgThread != NULL) {
		m_bkgThread->SuspendThread();
		delete m_bkgThread;
	}

	for (int i = 0; i < KeywordHashSize; i++) {
		for (int j = 0; j < m_keywordTable[i].GetSize(); j++) {
			if (m_keywordTable[i][j] != NULL) delete m_keywordTable[i][j];
		}
	}

	for (i = 0; i < m_comment.GetSize(); i++) {
		if (m_comment[i] != NULL) delete m_comment[i];
	}

	for (i = 0; i < m_quote.GetSize(); i++) {
		if (m_quote[i] != NULL) delete m_quote[i];
	}
}

void CColorString::AddUpdateTarget(CColorStringUpdate* update)
{
	for (int i = 0; i < m_update.GetSize(); i++) {
		if (m_update[i] == update) return;
	}
	m_update.Add(update);
}

BOOL CColorString::AddKeyword(const CString& keyword, COLORREF color /*= RGB(0, 0, 200)*/) 
{
	CKeywordInfo* pKey = new CKeywordInfo(keyword, color);
	if (pKey != NULL) {
		m_keywordTable[Hash(keyword)].Add(pKey);
	}
	return pKey != NULL;
}

BOOL CColorString::AddComment(const CString& begin /*= _T("//")*/, const CString& end /*= _T("\n")*/, COLORREF color /*= RGB(0, 200, 0)*/)			
{
	CCommentInfo* pComment = new CCommentInfo(begin, end, color);
	if (pComment != NULL) {
		m_comment.Add(pComment);
	}
	return pComment != NULL;
}

BOOL CColorString::AddQuote(const CString & begin, const CString & end, COLORREF color)
{
	CQuoteInfo* pQuote = new CQuoteInfo(begin, end, color);
	if (pQuote != NULL) {
		m_quote.Add(pQuote);
	}
	return pQuote != NULL;
}

void CColorString::SetDefaults(COLORREF color /*= RGB(0, 0, 0)*/, COLORREF sQuoteColor /*= RGB(0, 0,0)*/, COLORREF dQuoteColor /*= RGB(0, 0, 0)*/)					
{
	m_defaultColor = color; 
	m_sQuoteColor = sQuoteColor;
	m_dQuoteColor = dQuoteColor;
}

COLORREF CColorString::GetColor(long index)							
{
	COLORREF retval = m_defaultColor;
	if (index >= 0 && index < m_color.GetSize()) {
		retval = m_color[index];
	}
	return retval;
}

void CColorString::BeginUpdate(long pos, long len)
{
	if (m_updateLevel <= 0) m_updatePos = GetLength();
	m_updateLevel++;
}

void CColorString::EndUpdate(long pos, long len)	{
	m_updateLevel--;
	if (pos < m_updatePos) m_updatePos = pos;
	if (m_updateLevel == 0) Process(m_updatePos);
	return;
}

BOOL IsToken(TCHAR c, BOOL bCharOnly)
{
	return !((!bCharOnly && IsWhite(c)) || (bCharOnly && !(IsAlphaNum(c) || c == '#')));
}

long CColorString::GetToken(CString& token, long pos, BOOL bCharOnly)
{
	long	retval = -1;
	TCHAR	c;

	// Skip whitespace
	while (pos < GetLength() && !IsToken(GetAt(pos), bCharOnly)) {
		pos++;
	}

	// Save start position
	retval = pos;

	// Fill in token
	token = _T("");
	if (pos < GetLength()) {
		for (c = GetAt(pos); IsToken(c, bCharOnly); c = GetAt(++pos)) {
			token += c;
			if (pos+1 >= GetLength()) break;
		}
	}
	
	// return start position
	return retval;
}

long CColorString::GetComment(const CString& beginToken, const CString& endToken, long& commentLen, long pos)
{
	long len = GetLength();
	long beginTokenLen = beginToken.GetLength();
	long endTokenLen = endToken.GetLength();

	commentLen = 0;
	if (!beginToken.IsEmpty() && !endToken.IsEmpty()) {
		// Skip Whitespace
		for (int i = pos; i < len && IsWhite(GetAt(i)); i++) 
			;

		// Find Comment
		if (i/*+beginTokenLen*/ < len && Mid(i, beginTokenLen) == beginToken) {
			// Find close of comment
			for (int j = i+beginTokenLen; j+endTokenLen < len; j++) {
				if (Mid(j, endTokenLen) == endToken) {
					commentLen = (j+endTokenLen)-i; 
					return i;
				}
			}

			// Handle case where single line comments goes to EOF
			if (j+endTokenLen >= len && endToken == _T("\n")) {
				commentLen = len - i;
				return i;
			}
		}
	}

	return -1;
}

long CColorString::GetQuote(const CString & beginToken, const CString & endToken, long & commentLen, long pos)
{
	long len = GetLength();
	long beginTokenLen = beginToken.GetLength();
	long endTokenLen = endToken.GetLength();
	long i = pos;

	commentLen = 0;
	if (!beginToken.IsEmpty() && !endToken.IsEmpty()) {
		// Find Quote
start:
		// Skip Whitespace
		for (; i < len && IsWhite(GetAt(i)); i++) 
			;

		if (i < len && Mid(i, beginTokenLen) == beginToken) {
			// Find close of comment
			for (int j = i+beginTokenLen; j+endTokenLen < len; j++) {
				if (GetAt(j) == '\n') {
					i++;
					goto start;
				}
				if (Mid(j, endTokenLen) == endToken) {
					commentLen = (j+endTokenLen)-i; 
					return i;
				}
			}

			// Handle case where single line comments goes to EOF
			if (j+endTokenLen >= len && endToken == _T("\n")) {
				commentLen = len - i;
				return i;
			}
		}
	}

	return -1;
}

CKeywordInfo* CColorString::KeywordLookup(const CString& token)
{
	CArray<CKeywordInfo*, CKeywordInfo*>& keywordTable = m_keywordTable[Hash(token)];
	long size = keywordTable.GetSize();

	for (int i = 0; i < size; i++) {
		if (token == keywordTable[i]->Keyword()) {
			return keywordTable[i];
		}
	}
	return NULL;
}

long CColorString::Offset2Line(long pos)
{
	long prev, cur, i = 1, len = m_lineOffset.GetSize();

	if (pos <= 0) return 0;

	if (m_lineOffset.GetSize() > 0) {
		prev = m_lineOffset[0];
		for (i = 1; i < len; i++) {
			cur = m_lineOffset[i];
			if (pos >= prev && pos < cur) {
				return i-1;
			}
			prev = cur;
		}
	}

	return len-1;
}

void CColorString::Reset(long pos /*= 0*/)
{
	ThreadLock();
	m_lineOffset.SetSize(0);
	m_lineOffset.Add(0);
	for (int i = 0; i < GetLength(); i++) {
		if (GetAt(i) == '\n') m_lineOffset.Add(i+1);
	}
	ThreadUnlock();

	KeywordPos(0); CommentPos(0); QuotePos(0);

	m_color.SetColor(m_defaultColor, pos, GetLength()-pos);

	if (!m_bUseThread) 
	{
		ParseKeywords(m_color);
		ParseQuotes(m_color);
		ParseComments(m_color);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频在线一区| 欧美日韩三级一区| 色猫猫国产区一区二在线视频| 久久久久亚洲综合| 日本中文字幕一区| 欧美精品粉嫩高潮一区二区| 亚洲成人资源网| 99精品视频在线播放观看| 中文字幕乱码亚洲精品一区| 成人禁用看黄a在线| 久久久久久久性| 国产成人亚洲综合a∨婷婷| 国产欧美日韩中文久久| youjizz久久| 一区二区三区不卡视频| 欧洲一区在线观看| 日韩和欧美一区二区三区| 欧美挠脚心视频网站| 一区二区成人在线视频| 777xxx欧美| 国产精品正在播放| 国产精品不卡在线观看| 色播五月激情综合网| 香蕉久久夜色精品国产使用方法| 欧美日韩国产影片| 日本中文字幕一区| 国产亚洲欧洲997久久综合| 风间由美一区二区av101| 亚洲一区视频在线观看视频| 精品国产青草久久久久福利| 91在线视频18| 久久国产精品露脸对白| 国产精品传媒在线| 精品国产一区二区精华| 欧美综合一区二区三区| 国产一区二区三区四 | 在线观看日韩av先锋影音电影院| 蜜臀久久99精品久久久久久9| 中文字幕欧美日本乱码一线二线| 欧美人牲a欧美精品| 不卡的av电影在线观看| 日韩国产在线观看| 一区二区三区四区在线免费观看| 久久综合丝袜日本网| 欧美伦理视频网站| 91视频免费播放| 国产成人一区在线| 久久国产精品无码网站| 日本午夜一本久久久综合| 国产精品免费网站在线观看| 欧美精品一区二区精品网| 欧美男男青年gay1069videost| 成人a级免费电影| 国产综合久久久久久鬼色| 视频一区二区三区中文字幕| 一区二区三区精品久久久| 国产精品久久99| 久久夜色精品国产欧美乱极品| 777久久久精品| 欧美三级中文字| 在线中文字幕一区| 91麻豆国产自产在线观看| 床上的激情91.| 国产精品1区二区.| 国产成人亚洲精品狼色在线| 国产精品亚洲а∨天堂免在线| 精品无码三级在线观看视频| 奇米精品一区二区三区四区 | 久久99蜜桃精品| 午夜精品久久久久久久99水蜜桃| 亚洲男同1069视频| 亚洲精品免费看| 亚洲色欲色欲www| 中文字幕在线不卡视频| 国产精品久久久久久久浪潮网站 | 最新热久久免费视频| 中文字幕第一区综合| 国产女同性恋一区二区| 欧美国产1区2区| 国产精品欧美极品| 亚洲婷婷综合色高清在线| 国产精品福利影院| 亚洲精品高清视频在线观看| 亚洲人成网站精品片在线观看| 亚洲视频一区二区在线| 亚洲无人区一区| 免费一级欧美片在线观看| 久久se这里有精品| 国产99久久久国产精品免费看 | 精品sm捆绑视频| 久久久噜噜噜久噜久久综合| 中文字幕不卡在线播放| 国产精品不卡在线| 亚洲第一电影网| 极品少妇一区二区三区精品视频| 国产成人高清视频| 色噜噜狠狠一区二区三区果冻| 欧美乱妇15p| 精品对白一区国产伦| 国产精品美日韩| 亚洲线精品一区二区三区八戒| 麻豆精品在线播放| 成人白浆超碰人人人人| 欧美日韩国产中文| 国产午夜精品福利| 亚洲国产精品影院| 国产精品资源站在线| 欧美性大战久久| 久久网站热最新地址| 亚洲精品国产一区二区三区四区在线| 亚洲国产cao| 成人一区二区三区视频在线观看 | 青青草91视频| 不卡的av网站| 日韩女优视频免费观看| 日韩久久一区二区| 男女性色大片免费观看一区二区| 国产成人小视频| 欧美精三区欧美精三区| 欧美激情一二三区| 亚洲一区二区三区四区五区中文 | 亚洲国产精品久久久久秋霞影院| 国产综合一区二区| 91国在线观看| 日本一区二区三区在线观看| 亚洲成在线观看| 99精品黄色片免费大全| 精品久久久久久久久久久久久久久 | 精品久久国产字幕高潮| 国产精品福利一区| 久热成人在线视频| 欧美艳星brazzers| 国产精品久久久一本精品 | 中文字幕在线不卡一区| 美女在线一区二区| 91成人国产精品| 国产精品久久久久久久第一福利 | 亚洲一区在线视频观看| 成人精品视频一区二区三区尤物| 欧美一卡二卡在线| 亚洲一区二区欧美| 色综合久久99| 亚洲三级视频在线观看| 国产午夜精品久久久久久久| 亚洲国产视频在线| 波多野结衣一区二区三区| 久久午夜羞羞影院免费观看| 亚洲精品自拍动漫在线| 国产一区二区三区最好精华液| 欧美剧情电影在线观看完整版免费励志电影| 久久综合狠狠综合久久综合88 | 色视频一区二区| 亚洲国产精品成人综合色在线婷婷| 秋霞午夜av一区二区三区| 欧美精品少妇一区二区三区 | 国产精品九色蝌蚪自拍| 国产电影精品久久禁18| 亚洲精品一区二区三区影院 | 成人免费视频caoporn| 日韩一二在线观看| 午夜精品免费在线| 欧美日韩一级大片网址| 亚洲最新在线观看| 欧美性极品少妇| 亚洲成人激情av| 欧美日韩亚洲综合在线| 午夜影院在线观看欧美| 在线欧美日韩精品| 亚洲高清视频中文字幕| 欧美日本一区二区三区| 蜜臀av国产精品久久久久| 欧美大度的电影原声| 激情国产一区二区| wwwwxxxxx欧美| 成人高清视频在线观看| 亚洲另类春色校园小说| 欧美三级中文字幕在线观看| 香蕉成人啪国产精品视频综合网| 欧美一区二区精品在线| 蜜桃视频一区二区| 久久九九久精品国产免费直播| 粉嫩av一区二区三区| 亚洲欧美日韩国产另类专区| 色综合天天综合网天天狠天天| 亚洲精品成人天堂一二三| 欧美精品乱码久久久久久按摩| 奇米影视一区二区三区小说| 久久久久九九视频| 99热精品一区二区| 亚洲第一电影网| 久久综合九色综合欧美就去吻| 福利一区二区在线| 亚洲国产精品自拍| 久久久美女毛片| 在线免费不卡电影| 久久精品国产在热久久| 中文字幕中文字幕一区| 欧美美女黄视频| 成人性视频免费网站| 亚洲线精品一区二区三区|