============================================================================= EditGetClipboardText()
| 407 | // EditGetClipboardText() |
| 408 | // |
| 409 | char *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 |
no outgoing calls
no test coverage detected