29 #include "../../idlib/precompiled.h"
34 #ifdef ID_DEBUG_MEMORY
55 #define IDC_LISTBOX_AUTOCOMPLETE 700
56 #define IDC_EDITBOX_FUNCPARMS 701
59 {
NULL, SRE_COLOR_BLACK,
"" }
63 ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
64 ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)
73 ON_NOTIFY_REFLECT(EN_PROTECTED, OnProtected)
74 ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
76 ON_LBN_SELCHANGE(IDC_LISTBOX_AUTOCOMPLETE, OnAutoCompleteListBoxChange)
77 ON_LBN_DBLCLK(IDC_LISTBOX_AUTOCOMPLETE, OnAutoCompleteListBoxDblClk)
88 keyWords = defaultKeyWords;
90 keyWordLengths =
NULL;
91 caseSensitive =
false;
92 allowPathNames =
true;
93 keyWordAutoCompletion =
true;
94 updateRange.cpMin = 0;
95 updateRange.cpMax = 0;
96 updateSyntaxHighlighting =
true;
99 autoCompleteStart = -1;
100 funcParmToolTipStart = -1;
101 bracedSection[0] = -1;
102 bracedSection[1] = -1;
103 GetObjectMembers =
NULL;
108 keyWordToolTip =
NULL;
137 memset( &lf, 0,
sizeof( lf ) );
138 lf.lfHeight = FONT_HEIGHT * 10;
139 lf.lfWidth = FONT_WIDTH * 10;
140 lf.lfCharSet = ANSI_CHARSET;
141 lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
142 strcpy( lf.lfFaceName, FONT_NAME );
143 font.CreatePointFontIndirect( &lf );
148 logx = ::GetDeviceCaps( GetDC()->GetSafeHdc(), LOGPIXELSX );
149 tabSize = TAB_SIZE * FONT_WIDTH * 1440 / logx;
152 memset( &pf, 0,
sizeof( PARAFORMAT ) );
153 pf.cbSize =
sizeof( PARAFORMAT );
154 pf.dwMask = PFM_TABSTOPS;
155 for ( pf.cTabCount = 0; pf.cTabCount < MAX_TAB_STOPS; pf.cTabCount++ ) {
156 pf.rgxTabs[pf.cTabCount] = pf.cTabCount * tabSize;
162 defaultCharFormat.dwMask = CFM_CHARSET | CFM_FACE | CFM_SIZE | CFM_BOLD | CFM_COLOR | CFM_PROTECTED | CFM_BACKCOLOR;
182 tom::ITextRange *irange;
183 tom::ITextFont *ifont;
186 irange->get_Font( &ifont );
200 for (
int i = first;
i <= last;
i++ ) {
231 IRichEditOle *ire = GetIRichEditOle();
232 IUnknown *iu = (IUnknown *)ire;
233 if ( iu ==
NULL || iu->QueryInterface( tom::IID_ITextDocument, (
void**) &
m_TextDoc ) != S_OK ) {
241 SetEventMask( GetEventMask() | ENM_CHANGE | ENM_KEYEVENTS | ENM_MOUSEEVENTS | ENM_PROTECTED );
243 EnableToolTips(
TRUE );
294 int i, numKeyWords, hash;
298 for ( numKeyWords = 0;
keyWords[numKeyWords].
keyWord; numKeyWords++ ) {
304 for ( i = 0; i < numKeyWords; i++ ) {
311 for ( i = 0; i < numKeyWords; i++ ) {
316 for ( i = 0; i < numKeyWords; i++ ) {
344 if ( token.
Icmp(
"keywords" ) == 0 ) {
347 if ( token ==
"}" ) {
350 if ( token ==
"{" ) {
374 keyword.
color = RGB( red, green, blue );
386 keyword.
color = RGB( 255, 255, 255 );
434 if ( altColor == -1 ) {
511 int firstLine, lastLine;
514 firstLine = GetFirstVisibleLine();
515 GetClientRect( &rectArea );
518 if ( lastLine >= GetLineCount() ) {
519 lastLine = GetLineCount() - 1;
521 range.cpMin = LineIndex( firstLine );
522 if ( range.cpMin < 0 ) {
525 range.cpMax = LineIndex( lastLine );
526 if ( range.cpMax == -1 ) {
527 range.cpMax = range.cpMin + LineLength( range.cpMin );
529 range.cpMax += LineLength( range.cpMax );
531 if ( range.cpMax >= GetTextLength() ) {
532 range.cpMax = GetTextLength() - 1;
543 tom::ITextRange *
range;
547 m_TextDoc->Range( startCharIndex, endCharIndex, &range );
564 tom::ITextRange *
range;
565 tom::ITextFont *font;
570 m_TextDoc->Range( startCharIndex, endCharIndex, &range );
571 range->get_Font( &font );
573 m_TextDoc->Undo( tom::tomSuspend, &prop );
574 font->put_ForeColor( foreColor );
575 m_TextDoc->Undo( tom::tomResume, &prop );
577 m_TextDoc->Undo( tom::tomSuspend, &prop );
578 font->put_BackColor( backColor );
579 m_TextDoc->Undo( tom::tomResume, &prop );
581 m_TextDoc->Undo( tom::tomSuspend, &prop );
582 font->put_Bold( bold ? tom::tomTrue : tom::tomFalse );
583 m_TextDoc->Undo( tom::tomResume, &prop );
597 tom::ITextRange *
range;
598 tom::ITextFont *font;
601 m_TextDoc->Range( charIndex, charIndex, &range );
602 range->get_Font( &font );
604 font->get_BackColor( &foreColor );
618 tom::ITextRange *
range;
619 tom::ITextFont *font;
622 m_TextDoc->Range( charIndex, charIndex, &range );
623 range->get_Font( &font );
625 font->get_BackColor( &backColor );
641 int c,
t, line, charIndex, textLength, syntaxStart, keyWordLength, keyWordIndex;
647 GetTextRange( 0, GetTextLength(), text );
648 textLength = text.GetLength();
651 if ( startCharIndex < 0 ) {
654 if ( endCharIndex < 0 ) {
655 endCharIndex = textLength - 1;
656 }
else if ( endCharIndex >= textLength ) {
657 endCharIndex = textLength - 1;
661 for ( ; startCharIndex > 0; startCharIndex-- ) {
668 for ( ; endCharIndex < textLength - 1; endCharIndex++ ) {
678 if ( startCharIndex < visRange.cpMin ) {
680 startCharIndex = visRange.cpMin;
682 if ( visRange.cpMax < endCharIndex ) {
684 endCharIndex = visRange.cpMax;
685 if ( endCharIndex >= textLength ) {
686 endCharIndex = textLength - 1;
691 if ( startCharIndex > 0 ) {
694 for( ; startCharIndex > 0; startCharIndex-- ) {
695 if ( text[startCharIndex] ==
'/' && text[startCharIndex+1] ==
'*' ) {
703 if ( endCharIndex < textLength - 1 ) {
706 for( endCharIndex++; endCharIndex < textLength - 1; endCharIndex++ ) {
707 if ( text[endCharIndex-1] ==
'*' && text[endCharIndex] ==
'/' ) {
722 for( charIndex = startCharIndex; charIndex <= endCharIndex; charIndex++ ) {
733 c = text[charIndex+1];
736 syntaxStart = charIndex;
737 for ( charIndex += 2; charIndex < textLength; charIndex++ ) {
743 }
else if ( c ==
'*' ) {
745 syntaxStart = charIndex;
746 for ( charIndex += 2; charIndex < textLength; charIndex++ ) {
747 if ( text[charIndex] ==
'*' && text[charIndex+1] ==
'/' ) {
761 syntaxStart = charIndex;
762 for ( charIndex++; charIndex < textLength; charIndex++ ) {
773 stringColorIndex ^= 1;
777 syntaxStart = charIndex;
778 for ( charIndex++; charIndex < textLength; charIndex++ ) {
795 syntaxStart = charIndex;
796 keyWord = ((
const char *)text) + charIndex;
797 for ( charIndex++; charIndex < textLength; charIndex++ ) {
807 keyWordLength = charIndex - syntaxStart;
808 keyWordIndex =
FindKeyWord( keyWord, keyWordLength );
809 if ( keyWordIndex != -1 ) {
833 tom::ITextRange *
range;
834 tom::ITextFont *font;
844 m_TextDoc->Range( visRange.cpMin, visRange.cpMax, &range );
845 range->get_End( &visRange.cpMax );
847 range->get_Font( &font );
849 range->SetRange( visRange.cpMin, visRange.cpMin );
851 range->get_Start( &visRange.cpMin );
852 if ( visRange.cpMin >= visRange.cpMax ) {
855 font->get_BackColor( &backColor );
860 if ( range->Move( tom::tomCharFormat, 1,
NULL ) != S_OK ) {
882 GetSel( start, end );
883 line = LineFromChar( start );
884 start -= LineIndex( line );
885 GetLine( line, buffer,
sizeof( buffer ) );
886 for ( column = 1, character = 0; character <
start; character++ ) {
889 column -= column % TAB_SIZE;
903 GetText( text, 0, GetTextLength() );
912 tom::ITextRange *
range;
916 m_TextDoc->Range( startCharIndex, endCharIndex, &range );
917 range->get_Text( &bstr );
930 ReplaceSel( text,
FALSE );
940 long selStart, selEnd, flags, search,
length,
start;
941 tom::ITextRange *
range;
943 if ( find[0] ==
'\0' ) {
947 GetSel( selStart, selEnd );
950 flags |= matchCase ? tom::tomMatchCase : 0;
951 flags |= matchWholeWords ? tom::tomMatchWord : 0;
953 if ( searchForward ) {
954 m_TextDoc->Range( selEnd, GetTextLength(), &range );
955 search = GetTextLength() - selEnd;
961 if ( range->FindShit( A2BSTR(find), search, flags, &length ) == S_OK ) {
965 range->get_Start( &start );
968 SetSel( start, start + length );
970 int line =
Max( (
int) LineFromChar( start ) - 5, 0 );
971 LineScroll( line - GetFirstVisibleLine(), 0 );
989 long selStart, selEnd, flags, search,
length,
start;
991 tom::ITextRange *
range;
992 CComBSTR bstr( find );
994 if ( find[0] ==
'\0' ) {
1000 GetSel( selStart, selEnd );
1003 flags |= matchCase ? tom::tomMatchCase : 0;
1004 flags |= matchWholeWords ? tom::tomMatchWord : 0;
1006 m_TextDoc->Range( 0, GetTextLength(), &range );
1007 search = GetTextLength();
1010 while( range->FindShit( bstr, search, flags, &length ) == S_OK ) {
1011 range->get_Start( &start );
1029 tom::ITextRange *
range;
1030 CComBSTR bstr( replace );
1032 m_TextDoc->Range( startCharIndex, endCharIndex, &range );
1033 range->put_Text( bstr );
1043 long selStart, selEnd;
1050 GetSel( selStart, selEnd );
1052 SetSel( selStart, selEnd );
1053 ReplaceSel( text,
TRUE );
1063 long selStart, selEnd;
1067 GetSel( selStart, selEnd );
1085 point = PosFromChar( charIndex );
1086 GetClientRect( rect );
1092 rect.bottom = point.y;
1094 rect.left = point.x;
1117 CPoint point, p1, p2;
1124 point = PosFromChar( charIndex );
1125 GetClientRect( rect );
1131 rect.bottom = point.y;
1133 rect.left = point.x;
1155 long selStart, selEnd;
1159 GetSel( selStart, selEnd );
1160 GetText( text, 0, GetTextLength() );
1162 for ( brace = 1, i = selStart; i < text.
Length(); i++ ) {
1163 if ( text[i] == braceStartChar ) {
1165 }
else if ( text[i] == braceEndChar ) {
1178 return ( brace == 0 );
1187 long selStart, selEnd;
1191 GetSel( selStart, selEnd );
1192 GetText( text, 0, GetTextLength() );
1194 for ( brace = 1, i =
Min( selStart-2, (
long)text.
Length()-1 ); i >= 0; i-- ) {
1195 if ( text[i] == braceStartChar ) {
1200 }
else if ( text[i] == braceEndChar ) {
1212 return ( brace == 0 );
1226 length = GetLine( line, buffer,
sizeof( buffer ) );
1227 for ( numTabs = 0; numTabs <
length; numTabs++ ) {
1235 lineIndex = LineIndex( line );
1236 length = GetLine( line, buffer,
sizeof( buffer ) );
1238 for ( i = 0; i <
column; i++ ) {
1244 ReplaceText( lineIndex, lineIndex + column, text );
1256 for (
int i = 0;
i < 2;
i++ ) {
1269 for (
int i = 0;
i < 2;
i++ ) {
1283 long selStart, selEnd;
1287 GetSel( selStart, selEnd );
1288 charIndex = selStart;
1289 line = LineFromChar( selStart );
1290 length = GetLine( line, buffer,
sizeof( buffer ) );
1291 column = selStart - LineIndex( line ) - 1;
1293 buffer[column--] =
'\0';
1295 for ( length = 0; length <
column; length++ ) {
1301 name = buffer + column -
length;
1313 int charIndex, startCharIndex, endCharIndex,
type;
1318 for ( startCharIndex = charIndex; startCharIndex > 0; startCharIndex-- ) {
1319 GetText( text, startCharIndex - 1, startCharIndex );
1326 for ( endCharIndex = charIndex; endCharIndex < GetTextLength(); endCharIndex++ ) {
1327 GetText( text, endCharIndex, endCharIndex + 1 );
1334 GetText( name, startCharIndex, endCharIndex );
1336 return ( endCharIndex > startCharIndex );
1346 int index = LineIndex( line );
1350 SetSel( index, index );
1365 CRichEditCtrl::OnToolHitTest( point, pTI );
1367 pTI->hwnd = GetSafeHwnd();
1368 pTI->uId = (UINT_PTR)GetSafeHwnd();
1369 pTI->uFlags |= TTF_IDISHWND;
1370 pTI->lpszText = LPSTR_TEXTCALLBACK;
1371 pTI->rect = CRect( point, point );
1372 pTI->rect.right += 100;
1373 pTI->rect.bottom += 20;
1383 TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
1384 TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
1397 if ( keyWordIndex != -1 &&
keyWords[keyWordIndex].description[0] !=
'\0' ) {
1400 toolTip = name.
c_str();
1404 AFX_MODULE_THREAD_STATE *state = AfxGetModuleThreadState();
1407 state->m_pToolTip->SetMaxTipWidth( 500 );
1410 state->m_pToolTip->SetDelayTime( TTDT_AUTOPOP, 5000 + toolTip.GetLength() * 50 );
1413 if( pNMHDR->code == TTN_NEEDTEXTA ) {
1415 m_pchTip =
new TCHAR[toolTip.GetLength() + 2];
1416 lstrcpyn(
m_pchTip, toolTip, toolTip.GetLength() + 1 );
1417 pTTTW->lpszText = (WCHAR*)
m_pchTip;
1420 m_pwchTip =
new WCHAR[toolTip.GetLength() + 2];
1421 _mbstowcsz(
m_pwchTip, toolTip, toolTip.GetLength() + 1 );
1425 if( pNMHDR->code == TTN_NEEDTEXTA ) {
1427 m_pchTip =
new TCHAR[toolTip.GetLength() + 2];
1428 _wcstombsz(
m_pchTip, toolTip, toolTip.GetLength() + 1 );
1429 pTTTA->lpszText = (LPTSTR)
m_pchTip;
1432 m_pwchTip =
new WCHAR[toolTip.GetLength() + 2];
1433 lstrcpyn(
m_pwchTip, toolTip, toolTip.GetLength() + 1 );
1450 return DLGC_WANTALLKEYS | DLGC_WANTARROWS | DLGC_WANTCHARS | DLGC_WANTMESSAGE | DLGC_WANTTAB;
1515 long selStart, selEnd;
1517 GetSel( selStart, selEnd );
1520 if ( selEnd > selStart ) {
1523 text = GetSelText();
1525 if ( GetAsyncKeyState( VK_SHIFT ) & 0x8000 ) {
1527 text.Delete( 0, 1 );
1529 for (
int i = 0;
i < text.GetLength() - 2;
i++ ) {
1535 text.Delete( i, 1 );
1540 text.Insert( 0,
'\t' );
1541 for (
int i = 0;
i < text.GetLength() - 1;
i++ ) {
1546 text.Insert( i,
'\t' );
1551 ReplaceSel( text,
TRUE );
1552 SetSel( selStart, selStart + text.GetLength() );
1554 ReplaceSel(
"\t",
TRUE );
1559 long selStart, selEnd;
1564 GetSel( selStart, selEnd );
1565 line = LineFromChar( selStart );
1566 length = GetLine( line, buffer,
sizeof( buffer ) );
1567 for ( numTabs = 0; numTabs <
length; numTabs++ ) {
1573 for ( i = numTabs; i <
length; i++ ) {
1574 if ( buffer[i] ==
'{' ) {
1577 }
else if ( buffer[i] ==
'}' && !first ) {
1582 for ( i = 0; i < numTabs; i++ ) {
1585 ReplaceSel( text,
TRUE );
1592 CRichEditCtrl::OnKeyDown( nKey, nRepCnt, nFlags );
1606 if ( nChar == VK_TAB ) {
1610 CRichEditCtrl::OnChar( nChar, nRepCnt, nFlags );
1614 long selStart, selEnd;
1619 }
else if ( nChar == VK_BACK ) {
1620 GetSel( selStart, selEnd );
1634 long selStart, selEnd;
1636 if ( nChar ==
')' || nChar == VK_ESCAPE ) {
1638 }
else if ( nChar == VK_BACK ) {
1639 GetSel( selStart, selEnd );
1648 long selStart, selEnd;
1652 GetSel( selStart, selEnd );
1653 line = LineFromChar( selStart );
1654 length = GetLine( line, buffer,
sizeof( buffer ) );
1655 column = selStart - LineIndex( line );
1670 if ( nChar ==
'{' ) {
1672 }
else if ( nChar ==
'}' ) {
1674 }
else if ( nChar ==
'(' ) {
1676 }
else if ( nChar ==
')' ) {
1678 }
else if ( nChar ==
'[' ) {
1680 }
else if ( nChar ==
']' ) {
1682 }
else if ( nChar ==
'<' ) {
1684 }
else if ( nChar ==
'>' ) {
1730 CRichEditCtrl::OnLButtonDown( nFlags, point );
1753 LineScroll( -3 * ( (
int) zDelta ) / WHEEL_DELTA, 0 );
1768 CRichEditCtrl::OnMouseMove( nFlags, point );
1775 AFX_MODULE_THREAD_STATE *state = AfxGetModuleThreadState();
1776 state->m_pToolTip->Pop();
1777 state->m_pToolTip->Activate(
TRUE );
1789 CRichEditCtrl::OnSize( nType, cx, cy );
1804 CRichEditCtrl::OnVScroll( nSBCode, nPos, pScrollBar );
1819 ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;
1825 switch( pEP->msg ) {
1826 case WM_MOUSEMOVE: {
1831 updateRange.cpMax = pEP->chrg.cpMin + strlen( (LPCTSTR) pEP->lParam );
1861 long selStart, selEnd;
1867 GetSel( selStart, selEnd );
1875 pNMHDR.hwndFrom = GetSafeHwnd();
1876 pNMHDR.idFrom = GetDlgCtrlID();
1877 pNMHDR.code = EN_CHANGE;
1878 GetParent()->SendMessage( WM_NOTIFY, ( EN_CHANGE << 16 ) | GetDlgCtrlID(), (
LPARAM)&pNMHDR );
objectMemberCallback_t GetObjectMembers
void AutoCompleteHide(void)
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
CHARFORMAT2 defaultCharFormat
void AutoCompleteUpdate(void)
bool GetFunctionParms(const char *funcName, CString &parmString)
COLORREF multiLineCommentColor
const int AUTOCOMPLETE_OFFSET
afx_msg void OnAutoCompleteListBoxChange()
bool GetNameForMousePosition(idStr &name) const
const int FUNCPARMTOOLTIP_WIDTH
int Next(const int index) const
#define IDC_EDITBOX_FUNCPARMS
CONST PIXELFORMATDESCRIPTOR UINT
void GetText(idStr &text) const
const int FUNCPARMTOOLTIP_HEIGHT
const int FUNCPARMTOOLTIP_OFFSET
void SetFunctionParmCallback(toolTipCallback_t callback)
ID_INLINE T Max(T x, T y)
void SetStringColor(const COLORREF color, const COLORREF altColor=-1)
bool keyWordAutoCompletion
bool StripTrailingOnce(const char *string)
const int AUTOCOMPLETE_WIDTH
bool FindNext(const char *find, bool matchCase, bool matchWholeWords, bool searchForward)
COLORREF singleLineCommentColor
COLORREF GetForeColor(int charIndex) const
void ReplaceText(int startCharIndex, int endCharIndex, const char *replace)
afx_msg void OnProtected(NMHDR *pNMHDR, LRESULT *pResult)
GLuint GLuint GLsizei GLenum type
int ExpectTokenString(const char *string)
const COLORREF INVALID_BACK_COLOR
CListBox autoCompleteListBox
bool GetToolTip(const char *name, CString &string)
int Cmpn(const char *text, int n) const
void SetObjectMemberCallback(objectMemberCallback_t callback)
int Icmp(const char *text) const
void BracedSectionShow(void)
void SetLiteralColor(const COLORREF color)
int First(const int key) const
void SetToolTipCallback(toolTipCallback_t callback)
void SetText(const char *text)
int Icmpn(const char *text, int n) const
int ReadToken(idToken *token)
void AllowPathNames(bool allow)
CHARRANGE GetVisibleRange(void) const
void HighlightSyntax(int startCharIndex, int endCharIndex)
void BracedSectionHide(void)
afx_msg void OnSize(UINT nType, int cx, int cy)
bool BracedSectionStart(char braceStartChar, char braceEndChar)
void GetCursorPos(int &line, int &column, int &character) const
afx_msg void OnMouseMove(UINT nFlags, CPoint point)
void InitSyntaxHighlighting(void)
void SetKeyWords(const keyWord_t kws[])
toolTipCallback_t GetFunctionParms
static bool CharIsNewLine(char c)
void SetCharType(int first, int last, int type)
const COLORREF MULTILINE_COMMENT_BACK_COLOR
int FindKeyWord(const char *keyWord, int length) const
const int AUTOCOMPLETE_HEIGHT
COLORREF GetBackColor(int charIndex) const
static int Hash(const char *string)
void AutoCompleteInsertText(void)
virtual int OnToolHitTest(CPoint point, TOOLINFO *pTI) const
void UpdateVisibleRange(void)
afx_msg UINT OnGetDlgCode()
static int IHash(const char *string)
bool GetNameBeforeCurrentSelection(CString &name, int &charIndex) const
bool(* objectMemberCallback_t)(const char *objectName, CListBox &listBox)
void SetColor(int startCharIndex, int endCharIndex, COLORREF foreColor, COLORREF backColor, bool bold)
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)
void FreeKeyWordsFromFile(void)
const keyWord_t * keyWords
int Append(const type &obj)
void BracedSectionAdjustEndTabs(void)
void SetDefaultFont(int startCharIndex, int endCharIndex)
tom::ITextFont * m_DefaultFont
void SetCommentColor(const COLORREF color)
void Append(const char a)
int LoadFile(const char *filename, bool OSPath=false)
MFnDagNode * GetParent(MFnDagNode *joint)
afx_msg BOOL OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
bool BracedSectionEnd(char braceStartChar, char braceEndChar)
afx_msg void OnAutoCompleteListBoxDblClk()
GLsizei const GLcharARB const GLint * length
int SkipBracedSection(bool parseFirstBrace=true)
const char * c_str(void) const
idList< keyWord_t > keyWordsFromFile
void SetDefaultColor(const COLORREF color)
const COLORREF DEFAULT_BACK_COLOR
void Add(const int key, const int index)
afx_msg void OnKeyDown(UINT nKey, UINT nRepCnt, UINT nFlags)
tom::ITextDocument * m_TextDoc
void SetCaseSensitive(bool caseSensitive)
char * Mem_CopyString(const char *in)
void EnableKeyWordAutoCompletion(bool enable)
void AutoCompleteShow(int charIndex)
static bool CharIsTab(char c)
GLenum GLenum GLvoid GLvoid * column
bool updateSyntaxHighlighting
void ToolTipShow(int charIndex, const char *string)
ID_INLINE T Min(T x, T y)
toolTipCallback_t GetToolTip
bool LoadKeyWordsFromFile(const char *fileName)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
COLORREF braceHighlightColor
bool(* toolTipCallback_t)(const char *name, CString &string)
int ReplaceAll(const char *find, const char *replace, bool matchCase, bool matchWholeWords)
int ExpectTokenType(int type, int subtype, idToken *token)
~CSyntaxRichEditCtrl(void)
#define IDC_LISTBOX_AUTOCOMPLETE