MCPcopy Create free account
hub / github.com/ProgerXP/Notepad2e / EditGetClipboardText

Function EditGetClipboardText

src/Edit.c:409–465  ·  view source on GitHub ↗

============================================================================= EditGetClipboardText()

Source from the content-addressed store, hash-verified

407// EditGetClipboardText()
408//
409char *EditGetClipboardText ( HWND hwnd )
410{
411 HANDLE hmem;
412 WCHAR *pwch;
413 char *pmch;
414 char *ptmp;
415 int wlen, mlen, mlen2;
416 UINT codepage;
417 int eolmode;
418 if ( !IsClipboardFormatAvailable ( CF_UNICODETEXT ) || !OpenClipboard ( GetParent ( hwnd ) ) ) {
419 return ( NULL );
420 }
421 hmem = GetClipboardData ( CF_UNICODETEXT );
422 pwch = GlobalLock ( hmem );
423 wlen = lstrlenW ( pwch );
424 codepage = ( UINT ) SendMessage ( hwnd, SCI_GETCODEPAGE, 0, 0 );
425 eolmode = ( int ) SendMessage ( hwnd, SCI_GETEOLMODE, 0, 0 );
426 mlen = WideCharToMultiByte ( codepage, 0, pwch, wlen + 1, NULL, 0, 0, 0 ) - 1;
427 pmch = LocalAlloc ( LPTR, mlen + 1 );
428 if ( pmch ) {
429 WideCharToMultiByte ( codepage, 0, pwch, wlen + 1, pmch, mlen + 1, NULL, NULL );
430 }
431 ptmp = LocalAlloc ( LPTR, mlen * 2 + 1 );
432 if ( ptmp ) {
433 char *s = pmch;
434 char *d = ptmp;
435 int i;
436 for ( i = 0; ( i < mlen ) && ( *s != 0 ); i++ ) {
437 if ( *s == '\n' || *s == '\r' ) {
438 if ( eolmode == SC_EOL_CR ) {
439 *d++ = '\r';
440 } else if ( eolmode == SC_EOL_LF ) {
441 *d++ = '\n';
442 } else { // eolmode == SC_EOL_CRLF
443 *d++ = '\r';
444 *d++ = '\n';
445 }
446 if ( ( *s == '\r' ) && ( i + 1 < mlen ) && ( * ( s + 1 ) == '\n' ) ) {
447 i++;
448 s++;
449 }
450 s++;
451 } else {
452 *d++ = *s++;
453 }
454 }
455 *d++ = 0;
456 mlen2 = ( int ) ( d - ptmp ) - 1;
457 LocalFree ( pmch );
458 pmch = LocalAlloc ( LPTR, mlen2 + 1 );
459 lstrcpyA ( pmch, ptmp );
460 LocalFree ( ptmp );
461 }
462 GlobalUnlock ( hmem );
463 CloseClipboard();
464 return ( pmch );
465}
466

Callers 4

EditReplaceFunction · 0.85
EditReplaceAllFunction · 0.85
MsgCommandFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected