ReactOS 0.4.15-dev-8408-g466a198
CAutoComplete.cpp File Reference
#include "precomp.h"
#include <imm.h>
#include <process.h>
Include dependency graph for CAutoComplete.cpp:

Go to the source code of this file.

Classes

struct  PREFIX_INFO
 
struct  RANGE
 

Macros

#define CX_LIST   30160
 
#define CY_LIST   288
 
#define CY_ITEM   18
 
#define MAX_ITEM_COUNT   1000
 
#define WATCH_TIMER_ID   0xFEEDBEEF
 
#define WATCH_INTERVAL   300
 

Typedefs

typedef CSimpleArray< CStringWlist_t
 

Functions

static BOOL DropPrefix (const CStringW &str, CStringW &strBody)
 
static BOOL DoesMatch (const CStringW &strTarget, const CStringW &strText)
 
static LRESULT CALLBACK MouseProc (INT nCode, WPARAM wParam, LPARAM lParam)
 
static INT compare1 (const CStringW &str1, const CStringW &str2)
 
static INT pivot (list_t &list, INT i, INT j)
 
static INT partition (list_t &list, INT i, INT j, const CStringW &x)
 
static void quicksort (list_t &list, INT i, INT j)
 
static void DoSort (list_t &list)
 
static INT DoUnique (list_t &list)
 
static void DoUniqueAndTrim (list_t &list)
 
static int RangeCompare (const void *x, const void *y)
 
static BOOL IsWordBreak (WCHAR ch)
 
static INT CALLBACK EditWordBreakProcW (LPWSTR lpch, INT index, INT count, INT code)
 
static LRESULT CALLBACK EditSubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uSubclassID, DWORD_PTR dwData)
 
static PAC_THREAD InterlockedExchangeThreadData (volatile PAC_THREAD *Target, PAC_THREAD Value)
 
static unsigned __stdcall AutoCompThreadProc (void *arg)
 

Variables

static HHOOK s_hMouseHook = NULL
 
static HWND s_hWatchWnd = NULL
 
static const PREFIX_INFO s_prefixes []
 

Macro Definition Documentation

◆ CX_LIST

#define CX_LIST   30160

Definition at line 34 of file CAutoComplete.cpp.

◆ CY_ITEM

#define CY_ITEM   18

Definition at line 36 of file CAutoComplete.cpp.

◆ CY_LIST

#define CY_LIST   288

Definition at line 35 of file CAutoComplete.cpp.

◆ MAX_ITEM_COUNT

#define MAX_ITEM_COUNT   1000

Definition at line 37 of file CAutoComplete.cpp.

◆ WATCH_INTERVAL

#define WATCH_INTERVAL   300

Definition at line 39 of file CAutoComplete.cpp.

◆ WATCH_TIMER_ID

#define WATCH_TIMER_ID   0xFEEDBEEF

Definition at line 38 of file CAutoComplete.cpp.

Typedef Documentation

◆ list_t

Definition at line 126 of file CAutoComplete.cpp.

Function Documentation

◆ AutoCompThreadProc()

static unsigned __stdcall AutoCompThreadProc ( void arg)
static

Definition at line 2007 of file CAutoComplete.cpp.

2008{
2009 CAutoComplete* pThis = reinterpret_cast<CAutoComplete*>(arg);
2010 pThis->AutoCompThreadProc();
2011 return 0;
2012}
VOID AutoCompThreadProc()
void * arg
Definition: msvc.h:10

◆ compare1()

static INT compare1 ( const CStringW str1,
const CStringW str2 
)
inlinestatic

Definition at line 128 of file CAutoComplete.cpp.

129{
130 CStringW s1, s2;
131 DropPrefix(str1, s1);
132 DropPrefix(str2, s2);
133 return s1.CompareNoCase(s2);
134}
static BOOL DropPrefix(const CStringW &str, CStringW &strBody)
struct S1 s1
struct S2 s2

Referenced by DoUnique(), partition(), and pivot().

◆ DoesMatch()

static BOOL DoesMatch ( const CStringW strTarget,
const CStringW strText 
)
static

Definition at line 73 of file CAutoComplete.cpp.

74{
75 CStringW strBody;
76 if (DropPrefix(strTarget, strBody))
77 {
78 if (::StrCmpNIW(strBody, strText, strText.GetLength()) == 0)
79 return TRUE;
80 }
81 else if (::StrCmpNIW(strTarget, strText, strText.GetLength()) == 0)
82 {
83 return TRUE;
84 }
85 return FALSE;
86}
int GetLength() const noexcept
Definition: atlsimpstr.h:362
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
INT WINAPI StrCmpNIW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:311

Referenced by CAutoComplete::ExtractInnerList().

◆ DoSort()

static void DoSort ( list_t list)
inlinestatic

Definition at line 182 of file CAutoComplete.cpp.

183{
184 if (list.GetSize() <= 1) // sanity check
185 return;
186 quicksort(list, 0, list.GetSize() - 1); // quick sort
187}
static void quicksort(list_t &list, INT i, INT j)
Definition: list.h:37

Referenced by CAutoComplete::DoThreadWork().

◆ DoUnique()

static INT DoUnique ( list_t list)
static

Definition at line 190 of file CAutoComplete.cpp.

191{
192 INT first = 0, last = list.GetSize();
193 if (first == last)
194 return last;
195 INT result = first;
196 while (++first != last)
197 {
198 if (compare1(list[result], list[first]) != 0)
199 list[++result] = list[first];
200 }
201 return ++result;
202}
static INT compare1(const CStringW &str1, const CStringW &str2)
const GLint * first
Definition: glext.h:5794
GLuint64EXT * result
Definition: glext.h:11304
static UINT UINT last
Definition: font.c:45
int32_t INT
Definition: typedefs.h:58

Referenced by DoUniqueAndTrim().

◆ DoUniqueAndTrim()

static void DoUniqueAndTrim ( list_t list)
inlinestatic

Definition at line 204 of file CAutoComplete.cpp.

205{
207 while (list.GetSize() > last)
208 {
209 list.RemoveAt(last);
210 }
211}
static INT DoUnique(list_t &list)

Referenced by CAutoComplete::DoThreadWork().

◆ DropPrefix()

static BOOL DropPrefix ( const CStringW str,
CStringW strBody 
)
static

Definition at line 57 of file CAutoComplete.cpp.

58{
59 for (size_t iPrefix = 0; iPrefix < _countof(s_prefixes); ++iPrefix)
60 {
61 LPCWSTR psz = s_prefixes[iPrefix].psz;
62 INT cch = s_prefixes[iPrefix].cch;
63 if (::StrCmpNIW(str, psz, cch) == 0)
64 {
65 strBody = str.Mid(cch);
66 return TRUE;
67 }
68 }
69 strBody = str;
70 return FALSE;
71}
static const PREFIX_INFO s_prefixes[]
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
const WCHAR * str
#define _countof(array)
Definition: sndvol32.h:70
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by compare1(), CAutoComplete::DoAutoAppend(), and DoesMatch().

◆ EditSubclassProc()

static LRESULT CALLBACK EditSubclassProc ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
UINT_PTR  uSubclassID,
DWORD_PTR  dwData 
)
static

Definition at line 293 of file CAutoComplete.cpp.

295{
296 CAutoComplete *pThis = reinterpret_cast<CAutoComplete *>(dwData);
297 return pThis->EditWndProc(hwnd, uMsg, wParam, lParam);
298}
LRESULT EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static HANDLE ULONG_PTR dwData
Definition: file.c:35
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by CAutoComplete::EditWndProc(), and CAutoComplete::Init().

◆ EditWordBreakProcW()

static INT CALLBACK EditWordBreakProcW ( LPWSTR  lpch,
INT  index,
INT  count,
INT  code 
)
static

Definition at line 266 of file CAutoComplete.cpp.

267{
268 switch (code)
269 {
270 case WB_ISDELIMITER:
271 return IsWordBreak(lpch[index]);
272 case WB_LEFT:
273 {
274 if (index)
275 --index;
276 while (index && !IsWordBreak(lpch[index]))
277 --index;
278 return index;
279 }
280 case WB_RIGHT:
281 {
282 if (!count)
283 break;
284 while (index < count && lpch[index] && !IsWordBreak(lpch[index]))
285 ++index;
286 return index;
287 }
288 }
289 return 0;
290}
static BOOL IsWordBreak(WCHAR ch)
#define index(s, c)
Definition: various.h:29
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
Definition: inflate.c:139
#define WB_ISDELIMITER
Definition: winuser.h:549
#define WB_LEFT
Definition: winuser.h:550
#define WB_RIGHT
Definition: winuser.h:551

Referenced by CAutoComplete::Init().

◆ InterlockedExchangeThreadData()

static PAC_THREAD InterlockedExchangeThreadData ( volatile PAC_THREAD Target,
PAC_THREAD  Value 
)
inlinestatic

Definition at line 2001 of file CAutoComplete.cpp.

2002{
2003 return reinterpret_cast<PAC_THREAD>(
2004 ::InterlockedExchangePointer(reinterpret_cast<volatile PVOID *>(Target), Value));
2005}
#define InterlockedExchangePointer(Target, Value)
Definition: dshow.h:45
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306

Referenced by CAutoComplete::AutoCompThreadProc(), and CAutoComplete::OnAutoCompStart().

◆ IsWordBreak()

static BOOL IsWordBreak ( WCHAR  ch)
inlinestatic

Definition at line 234 of file CAutoComplete.cpp.

235{
236 // the ranges of word break characters
237 static const RANGE s_ranges[] =
238 {
239 { 0x0009, 0x0009 }, { 0x0020, 0x002f }, { 0x003a, 0x0040 }, { 0x005b, 0x0060 },
240 { 0x007b, 0x007e }, { 0x00ab, 0x00ab }, { 0x00ad, 0x00ad }, { 0x00bb, 0x00bb },
241 { 0x02c7, 0x02c7 }, { 0x02c9, 0x02c9 }, { 0x055d, 0x055d }, { 0x060c, 0x060c },
242 { 0x2002, 0x200b }, { 0x2013, 0x2014 }, { 0x2016, 0x2016 }, { 0x2018, 0x2018 },
243 { 0x201c, 0x201d }, { 0x2022, 0x2022 }, { 0x2025, 0x2027 }, { 0x2039, 0x203a },
244 { 0x2045, 0x2046 }, { 0x207d, 0x207e }, { 0x208d, 0x208e }, { 0x226a, 0x226b },
245 { 0x2574, 0x2574 }, { 0x3001, 0x3003 }, { 0x3005, 0x3005 }, { 0x3008, 0x3011 },
246 { 0x3014, 0x301b }, { 0x301d, 0x301e }, { 0x3041, 0x3041 }, { 0x3043, 0x3043 },
247 { 0x3045, 0x3045 }, { 0x3047, 0x3047 }, { 0x3049, 0x3049 }, { 0x3063, 0x3063 },
248 { 0x3083, 0x3083 }, { 0x3085, 0x3085 }, { 0x3087, 0x3087 }, { 0x308e, 0x308e },
249 { 0x309b, 0x309e }, { 0x30a1, 0x30a1 }, { 0x30a3, 0x30a3 }, { 0x30a5, 0x30a5 },
250 { 0x30a7, 0x30a7 }, { 0x30a9, 0x30a9 }, { 0x30c3, 0x30c3 }, { 0x30e3, 0x30e3 },
251 { 0x30e5, 0x30e5 }, { 0x30e7, 0x30e7 }, { 0x30ee, 0x30ee }, { 0x30f5, 0x30f6 },
252 { 0x30fc, 0x30fe }, { 0xfd3e, 0xfd3f }, { 0xfe30, 0xfe31 }, { 0xfe33, 0xfe44 },
253 { 0xfe4f, 0xfe51 }, { 0xfe59, 0xfe5e }, { 0xff08, 0xff09 }, { 0xff0c, 0xff0c },
254 { 0xff0e, 0xff0e }, { 0xff1c, 0xff1c }, { 0xff1e, 0xff1e }, { 0xff3b, 0xff3b },
255 { 0xff3d, 0xff3d }, { 0xff40, 0xff40 }, { 0xff5b, 0xff5e }, { 0xff61, 0xff64 },
256 { 0xff67, 0xff70 }, { 0xff9e, 0xff9f }, { 0xffe9, 0xffe9 }, { 0xffeb, 0xffeb },
257 };
258 // binary search
259 RANGE range = { ch, ch };
260 return !!bsearch(&range, s_ranges, _countof(s_ranges), sizeof(RANGE), RangeCompare);
261}
static int RangeCompare(const void *x, const void *y)
GLenum GLint * range
Definition: glext.h:7539
#define bsearch

Referenced by CAutoComplete::DoBackWord(), and EditWordBreakProcW().

◆ MouseProc()

static LRESULT CALLBACK MouseProc ( INT  nCode,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 90 of file CAutoComplete.cpp.

91{
92 if (s_hMouseHook == NULL)
93 return 0; // do default
94 // if the user clicked the outside of s_hWatchWnd, then hide the drop-down window
95 if (nCode == HC_ACTION && // an action?
96 s_hWatchWnd && ::IsWindow(s_hWatchWnd) && // s_hWatchWnd is valid?
97 ::GetCapture() == NULL) // no capture? (dragging something?)
98 {
99 RECT rc;
100 MOUSEHOOKSTRUCT *pMouseHook = reinterpret_cast<MOUSEHOOKSTRUCT *>(lParam);
101 switch (wParam)
102 {
103 case WM_LBUTTONDOWN: case WM_LBUTTONUP:
104 case WM_RBUTTONDOWN: case WM_RBUTTONUP:
105 case WM_MBUTTONDOWN: case WM_MBUTTONUP:
109 {
111 if (!::PtInRect(&rc, pMouseHook->pt)) // outside of s_hWatchWnd?
112 {
114 }
115 break;
116 }
117 }
118 }
119 return ::CallNextHookEx(s_hMouseHook, nCode, wParam, lParam); // go next hook
120}
static HWND s_hWatchWnd
static HHOOK s_hMouseHook
#define NULL
Definition: types.h:112
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define SW_HIDE
Definition: winuser.h:768
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define HC_ACTION
Definition: winuser.h:48
#define WM_RBUTTONUP
Definition: winuser.h:1780
#define WM_NCMBUTTONUP
Definition: winuser.h:1699
HWND WINAPI GetCapture(void)
Definition: message.c:2881
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
#define WM_RBUTTONDOWN
Definition: winuser.h:1779
BOOL WINAPI ShowWindowAsync(_In_ HWND, _In_ int)
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
#define WM_NCMBUTTONDOWN
Definition: winuser.h:1698
#define WM_LBUTTONUP
Definition: winuser.h:1777
#define WM_NCLBUTTONUP
Definition: winuser.h:1693
#define WM_NCRBUTTONUP
Definition: winuser.h:1696
#define WM_MBUTTONUP
Definition: winuser.h:1783
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1692
#define WM_MBUTTONDOWN
Definition: winuser.h:1782
#define WM_NCRBUTTONDOWN
Definition: winuser.h:1695

Referenced by CAutoComplete::OnShowWindow().

◆ partition()

static INT partition ( list_t list,
INT  i,
INT  j,
const CStringW x 
)
inlinestatic

Definition at line 148 of file CAutoComplete.cpp.

149{
150 INT left = i, right = j;
151 while (left <= right)
152 {
153 while (left <= j && compare1(list[left], x) < 0)
154 left++;
155 while (right >= i && compare1(list[right], x) >= 0)
156 right--;
157 if (left > right)
158 break;
159
160 CStringW tmp = list[left];
161 list[left] = list[right];
162 list[right] = tmp;
163
164 left++;
165 right--;
166 }
167 return left;
168}
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLdouble GLdouble right
Definition: glext.h:10859
GLint left
Definition: glext.h:7726
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250

Referenced by PartitionTest::ptition0(), PartitionTest::ptition1(), and quicksort().

◆ pivot()

static INT pivot ( list_t list,
INT  i,
INT  j 
)
inlinestatic

Definition at line 136 of file CAutoComplete.cpp.

137{
138 INT k = i + 1;
139 while (k <= j && compare1(list[i], list[k]) == 0)
140 k++;
141 if (k > j)
142 return -1;
143 if (compare1(list[i], list[k]) >= 0)
144 return i;
145 return k;
146}
int k
Definition: mpi.c:3369

Referenced by get_body(), and quicksort().

◆ quicksort()

static void quicksort ( list_t list,
INT  i,
INT  j 
)
static

Definition at line 170 of file CAutoComplete.cpp.

171{
172 if (i == j)
173 return;
174 INT p = pivot(list, i, j);
175 if (p == -1)
176 return;
177 INT k = partition(list, i, j, list[p]);
178 quicksort(list, i, k - 1);
179 quicksort(list, k, j);
180}
static INT partition(list_t &list, INT i, INT j, const CStringW &x)
static INT pivot(list_t &list, INT i, INT j)
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by DoSort(), and quicksort().

◆ RangeCompare()

static int RangeCompare ( const void x,
const void y 
)
inlinestatic

Definition at line 222 of file CAutoComplete.cpp.

223{
224 const RANGE *a = reinterpret_cast<const RANGE *>(x);
225 const RANGE *b = reinterpret_cast<const RANGE *>(y);
226 if (a->to < b->from)
227 return -1;
228 if (b->to < a->from)
229 return 1;
230 return 0;
231}
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204

Referenced by IsWordBreak().

Variable Documentation

◆ s_hMouseHook

HHOOK s_hMouseHook = NULL
static

Definition at line 41 of file CAutoComplete.cpp.

Referenced by MouseProc(), and CAutoComplete::OnShowWindow().

◆ s_hWatchWnd

HWND s_hWatchWnd = NULL
static

Definition at line 42 of file CAutoComplete.cpp.

Referenced by MouseProc(), and CAutoComplete::OnShowWindow().

◆ s_prefixes

const PREFIX_INFO s_prefixes[]
static
Initial value:
=
{
{ L"https://", 8 },
{ L"http://www.", 11 },
{ L"http://", 7 },
{ L"www.", 4 },
}
#define L(x)
Definition: ntvdm.h:50

Definition at line 49 of file CAutoComplete.cpp.

Referenced by DropPrefix().