Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
dee813b5
Commit
dee813b5
authored
Mar 01, 2006
by
Brandon Woodmansee
Committed by
Alexandre Julliard
Mar 01, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
riched20: Implement EM_AUTOURLDETECT & EM_GETAUTOURLDETECT.
parent
efccbbfb
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
185 additions
and
6 deletions
+185
-6
editor.c
dlls/riched20/editor.c
+109
-4
editor.h
dlls/riched20/editor.h
+1
-1
editstr.h
dlls/riched20/editstr.h
+1
-0
editor.c
dlls/riched20/tests/editor.c
+74
-1
No files found.
dlls/riched20/editor.c
View file @
dee813b5
...
...
@@ -24,7 +24,7 @@
API implementation status:
Messages (ANSI versions not done yet)
-
EM_AUTOURLDETECT 2.0
+
EM_AUTOURLDETECT 2.0
+ EM_CANPASTE
+ EM_CANREDO 2.0
+ EM_CANUNDO
...
...
@@ -40,7 +40,7 @@
- EM_FINDWORDBREAK
- EM_FMTLINES
- EM_FORMATRANGE
-
EM_GETAUTOURLDETECT 2.0
+
EM_GETAUTOURLDETECT 2.0
- EM_GETBIDIOPTIONS 3.0
- EM_GETCHARFORMAT (partly done)
- EM_GETEDITSTYLE
...
...
@@ -1290,13 +1290,11 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
switch
(
msg
)
{
UNSUPPORTED_MSG
(
EM_AUTOURLDETECT
)
UNSUPPORTED_MSG
(
EM_DISPLAYBAND
)
UNSUPPORTED_MSG
(
EM_EXLIMITTEXT
)
UNSUPPORTED_MSG
(
EM_FINDWORDBREAK
)
UNSUPPORTED_MSG
(
EM_FMTLINES
)
UNSUPPORTED_MSG
(
EM_FORMATRANGE
)
UNSUPPORTED_MSG
(
EM_GETAUTOURLDETECT
)
UNSUPPORTED_MSG
(
EM_GETBIDIOPTIONS
)
UNSUPPORTED_MSG
(
EM_GETEDITSTYLE
)
UNSUPPORTED_MSG
(
EM_GETIMECOMPMODE
)
...
...
@@ -1447,6 +1445,19 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
ME_SendSelChange
(
editor
);
return
0
;
}
case
EM_AUTOURLDETECT
:
{
if
(
wParam
==
1
||
wParam
==
0
)
{
editor
->
AutoURLDetect_bEnable
=
(
BOOL
)
wParam
;
return
0
;
}
return
E_INVALIDARG
;
}
case
EM_GETAUTOURLDETECT
:
{
return
editor
->
AutoURLDetect_bEnable
;
}
case
EM_EXSETSEL
:
{
CHARRANGE
*
pRange
=
(
CHARRANGE
*
)
lParam
;
...
...
@@ -2089,6 +2100,8 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
case
WM_CHAR
:
{
WCHAR
wstr
=
LOWORD
(
wParam
);
if
(
editor
->
AutoURLDetect_bEnable
)
ME_AutoURLDetect
(
editor
,
wstr
);
switch
(
wstr
)
{
...
...
@@ -2513,3 +2526,95 @@ LRESULT WINAPI REExtendedRegisterClass(void)
return
result
;
}
int
ME_AutoURLDetect
(
ME_TextEditor
*
editor
,
WCHAR
curChar
)
{
struct
prefix_s
{
char
*
text
;
int
length
;
}
prefixes
[
12
]
=
{
{
"http:"
,
5
},
{
"file:"
,
6
},
{
"mailto:"
,
8
},
{
"ftp:"
,
5
},
{
"https:"
,
7
},
{
"gopher:"
,
8
},
{
"nntp:"
,
6
},
{
"prospero:"
,
10
},
{
"telnet:"
,
8
},
{
"news:"
,
6
},
{
"wais:"
,
6
},
{
"www."
,
5
}
};
CHARRANGE
ins_pt
;
int
curf_ef
,
link_ef
,
def_ef
;
int
cur_prefx
,
prefx_cnt
;
int
sel_min
,
sel_max
;
int
car_pos
=
0
;
int
text_pos
=-
1
;
int
URLmin
,
URLmax
;
CHARRANGE
url
;
FINDTEXTA
ft
;
CHARFORMAT2W
cur_format
;
CHARFORMAT2W
default_format
;
CHARFORMAT2W
link
;
RichEditANSIWndProc
(
editor
->
hWnd
,
EM_EXGETSEL
,
(
WPARAM
)
0
,
(
LPARAM
)
&
ins_pt
);
sel_min
=
ins_pt
.
cpMin
;
sel_max
=
ins_pt
.
cpMax
;
if
(
sel_min
==
sel_max
)
car_pos
=
sel_min
;
if
(
sel_min
!=
sel_max
)
car_pos
=
ME_GetTextLength
(
editor
)
+
1
;
cur_format
.
cbSize
=
sizeof
(
cur_format
);
default_format
.
cbSize
=
sizeof
(
default_format
);
RichEditANSIWndProc
(
editor
->
hWnd
,
EM_GETCHARFORMAT
,
SCF_SELECTION
,
(
LPARAM
)
&
cur_format
);
RichEditANSIWndProc
(
editor
->
hWnd
,
EM_GETCHARFORMAT
,
SCF_DEFAULT
,
(
LPARAM
)
&
default_format
);
link
.
cbSize
=
sizeof
(
link
);
link
.
dwMask
=
CFM_LINK
|
CFM_COLOR
|
CFM_UNDERLINE
;
link
.
dwEffects
=
CFE_LINK
|
CFE_UNDERLINE
;
link
.
crTextColor
=
RGB
(
0
,
0
,
255
);
curf_ef
=
cur_format
.
dwEffects
&
link
.
dwEffects
;
def_ef
=
default_format
.
dwEffects
&
link
.
dwEffects
;
link_ef
=
link
.
dwEffects
&
link
.
dwEffects
;
if
(
curf_ef
==
link_ef
)
{
if
(
curChar
==
'\n'
||
curChar
==
'\r'
||
curChar
==
' '
)
{
ME_SetSelection
(
editor
,
car_pos
,
car_pos
);
RichEditANSIWndProc
(
editor
->
hWnd
,
EM_SETCHARFORMAT
,
SCF_SELECTION
,
(
LPARAM
)
&
default_format
);
text_pos
=-
1
;
return
0
;
}
}
if
(
curf_ef
==
def_ef
)
{
cur_prefx
=
0
;
prefx_cnt
=
(
sizeof
(
prefixes
)
/
sizeof
(
struct
prefix_s
))
-
1
;
while
(
cur_prefx
<=
prefx_cnt
)
{
if
(
text_pos
==
-
1
)
{
ft
.
lpstrText
=
prefixes
[
cur_prefx
].
text
;
URLmin
=
max
(
0
,(
car_pos
-
prefixes
[
cur_prefx
].
length
));
URLmax
=
max
(
0
,
car_pos
);
if
((
car_pos
==
0
)
&&
(
ME_GetTextLength
(
editor
)
!=
0
))
{
URLmax
=
ME_GetTextLength
(
editor
)
+
1
;
}
ft
.
chrg
.
cpMin
=
URLmin
;
ft
.
chrg
.
cpMax
=
URLmax
;
text_pos
=
RichEditANSIWndProc
(
editor
->
hWnd
,
EM_FINDTEXT
,
FR_DOWN
,
(
LPARAM
)
&
ft
);
cur_prefx
++
;
}
if
(
text_pos
!=
-
1
)
{
url
.
cpMin
=
text_pos
;
url
.
cpMax
=
car_pos
-
1
;
ME_SetCharFormat
(
editor
,
text_pos
,
(
URLmax
-
text_pos
),
&
link
);
ME_Repaint
(
editor
);
break
;
}
}
}
return
0
;
}
dlls/riched20/editor.h
View file @
dee813b5
...
...
@@ -250,7 +250,7 @@ void ME_EmptyUndoStack(ME_TextEditor *editor);
int
ME_GetTextW
(
ME_TextEditor
*
editor
,
WCHAR
*
buffer
,
int
nStart
,
int
nChars
,
BOOL
bCRLF
);
ME_DisplayItem
*
ME_FindItemAtOffset
(
ME_TextEditor
*
editor
,
ME_DIType
nItemType
,
int
nOffset
,
int
*
nItemOffset
);
void
ME_StreamInFill
(
ME_InStream
*
stream
);
int
ME_AutoURLDetect
(
ME_TextEditor
*
editor
,
WCHAR
curChar
);
extern
int
me_debug
;
extern
HANDLE
me_heap
;
extern
void
DoWrap
(
ME_TextEditor
*
editor
);
...
...
dlls/riched20/editstr.h
View file @
dee813b5
...
...
@@ -317,6 +317,7 @@ typedef struct tagME_TextEditor
*TM_SINGLECODEPAGE or TM_MULTICODEPAGE*/
int
mode
;
BOOL
bHideSelection
;
BOOL
AutoURLDetect_bEnable
;
}
ME_TextEditor
;
typedef
struct
tagME_Context
...
...
dlls/riched20/tests/editor.c
View file @
dee813b5
...
...
@@ -536,6 +536,79 @@ static void test_EM_SETOPTIONS()
DestroyWindow
(
hwndRichEdit
);
}
static
void
check_CFE_LINK_rcvd
(
HWND
hwnd
,
int
is_url
)
{
CHARFORMAT2W
text_format
;
int
link_present
=
0
;
text_format
.
cbSize
=
sizeof
(
text_format
);
SendMessage
(
hwnd
,
EM_SETSEL
,
0
,
0
);
SendMessage
(
hwnd
,
EM_GETCHARFORMAT
,
SCF_SELECTION
,
(
LPARAM
)
&
text_format
);
link_present
=
text_format
.
dwEffects
&
CFE_LINK
;
if
(
is_url
)
{
/* control text is url; should get CFE_LINK */
ok
(
0
!=
link_present
,
"URL Case: CFE_LINK not set.
\n
"
);
}
else
{
ok
(
0
==
link_present
,
"Non-URL Case: CFE_LINK set.
\n
"
);
}
}
static
HWND
new_static_wnd
(
HWND
parent
)
{
return
new_window
(
"Static"
,
0
,
parent
);
}
static
void
test_EM_AUTOURLDETECT
(
void
)
{
struct
urls_s
{
char
*
text
;
int
is_url
;
}
urls
[
12
]
=
{
{
"winehq.org"
,
0
},
{
"http://www.winehq.org"
,
1
},
{
"http//winehq.org"
,
0
},
{
"ww.winehq.org"
,
0
},
{
"www.winehq.org"
,
1
},
{
"ftp://192.168.1.1"
,
1
},
{
"ftp//192.168.1.1"
,
0
},
{
"mailto:your@email.com"
,
1
},
{
"prospero:prosperoserver"
,
1
},
{
"telnet:test"
,
1
},
{
"news:newserver"
,
1
},
{
"wais:waisserver"
,
1
}
};
int
i
;
int
urlRet
=-
1
;
HWND
hwndRichEdit
,
parent
;
parent
=
new_static_wnd
(
NULL
);
hwndRichEdit
=
new_richedit
(
parent
);
/* Try and pass EM_AUTOURLDETECT some test wParam values */
urlRet
=
SendMessage
(
hwndRichEdit
,
EM_AUTOURLDETECT
,
FALSE
,
0
);
ok
(
urlRet
==
0
,
"Good wParam: urlRet is: %d
\n
"
,
urlRet
);
urlRet
=
SendMessage
(
hwndRichEdit
,
EM_AUTOURLDETECT
,
1
,
0
);
ok
(
urlRet
==
0
,
"Good wParam2: urlRet is: %d
\n
"
,
urlRet
);
/* Windows returns -2147024809 (0x80070057) on bad wParam values */
urlRet
=
SendMessage
(
hwndRichEdit
,
EM_AUTOURLDETECT
,
8
,
0
);
ok
(
urlRet
==
E_INVALIDARG
,
"Bad wParam: urlRet is: %d
\n
"
,
urlRet
);
urlRet
=
SendMessage
(
hwndRichEdit
,
EM_AUTOURLDETECT
,
(
WPARAM
)
"h"
,
(
LPARAM
)
"h"
);
ok
(
urlRet
==
E_INVALIDARG
,
"Bad wParam2: urlRet is: %d
\n
"
,
urlRet
);
/* for each url, check the text to see if CFE_LINK effect is present */
for
(
i
=
0
;
i
<
sizeof
(
urls
)
/
sizeof
(
struct
urls_s
);
i
++
)
{
SendMessage
(
hwndRichEdit
,
EM_AUTOURLDETECT
,
FALSE
,
0
);
SendMessage
(
hwndRichEdit
,
WM_SETTEXT
,
0
,
(
LPARAM
)
urls
[
i
].
text
);
SendMessage
(
hwndRichEdit
,
WM_CHAR
,
0
,
0
);
check_CFE_LINK_rcvd
(
hwndRichEdit
,
0
);
SendMessage
(
hwndRichEdit
,
EM_AUTOURLDETECT
,
TRUE
,
0
);
SendMessage
(
hwndRichEdit
,
WM_SETTEXT
,
0
,
(
LPARAM
)
urls
[
i
].
text
);
SendMessage
(
hwndRichEdit
,
WM_CHAR
,
0
,
0
);
check_CFE_LINK_rcvd
(
hwndRichEdit
,
urls
[
i
].
is_url
);
}
DestroyWindow
(
hwndRichEdit
);
DestroyWindow
(
parent
);
}
static
void
test_EM_SCROLL
()
{
int
i
,
j
;
...
...
@@ -686,7 +759,6 @@ START_TEST( editor )
* RICHED20.DLL, so the linker doesn't actually link to it. */
hmoduleRichEdit
=
LoadLibrary
(
"RICHED20.DLL"
);
ok
(
hmoduleRichEdit
!=
NULL
,
"error: %d
\n
"
,
(
int
)
GetLastError
());
test_EM_FINDTEXT
();
test_EM_SCROLLCARET
();
test_EM_SCROLL
();
...
...
@@ -694,6 +766,7 @@ START_TEST( editor )
test_TM_PLAINTEXT
();
test_EM_SETOPTIONS
();
test_WM_GETTEXT
();
test_EM_AUTOURLDETECT
();
/* Set the environment variable WINETEST_RICHED20 to keep windows
* responsive and open for 30 seconds. This is useful for debugging.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment