annotate foosdk/sdk/libPPUI/wtl-pp.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "stdafx.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "wtl-pp.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 void CEditPPHooks::DeleteLastWord( CEdit wnd, bool bForward ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 if ( wnd.GetWindowLong(GWL_STYLE) & ES_READONLY ) return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 CString buffer;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 if ( wnd.GetWindowText(buffer) <= 0 ) return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 const int len = buffer.GetLength();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 int selStart = len, selEnd = len;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 wnd.GetSel(selStart, selEnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 if ( selStart < 0 || selStart > len ) selStart = len; // sanity
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 if ( selEnd < selStart ) selEnd = selStart; // sanity
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 int work = selStart;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 if ( work == selEnd ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 // Only do our stuff if there is nothing yet selected. Otherwise first delete selection.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 if (bForward) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 // go forward (ctrl+del)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 if (work < len && isSpecial(buffer[work])) { // linebreaks etc?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 do ++ work; while( work < len && isSpecial(buffer[work]));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 // delete apparent spacing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 while ( work < len && isWordDelimiter(buffer[work])) ++ work;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 // delete apparent word
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 while ( work < len && (!isWordDelimiter(buffer[work]) && !isSpecial(buffer[work]))) ++ work;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 if ( selEnd < work ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 wnd.SetSel(selEnd, work, TRUE );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 wnd.ReplaceSel( TEXT(""), TRUE );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 // go backward (ctrl+backspace)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 if ( work > 0 && isSpecial(buffer[work-1])) { // linebreaks etc?
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 do --work; while( work > 0 && isSpecial(buffer[work-1]));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 // delete apparent spacing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 while( work > 0 && isWordDelimiter(buffer[work-1]) ) --work;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 // delete apparent word
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 while( work > 0 && (!isWordDelimiter(buffer[work-1]) && !isSpecial(buffer[work-1]))) --work;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 if ( selEnd > work ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 wnd.SetSel(work, selEnd, TRUE );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 wnd.ReplaceSel( TEXT(""), TRUE );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 }