============================================================================= EditTitleCase()
| 1516 | // EditTitleCase() |
| 1517 | // |
| 1518 | void EditTitleCase ( HWND hwnd ) |
| 1519 | { |
| 1520 | int cchTextW; |
| 1521 | int iCurPos; |
| 1522 | int iAnchorPos; |
| 1523 | UINT cpEdit; |
| 1524 | int i; |
| 1525 | BOOL bNewWord = TRUE; |
| 1526 | BOOL bWordEnd = TRUE; |
| 1527 | BOOL bChanged = FALSE; |
| 1528 | iCurPos = ( int ) SendMessage ( hwnd, SCI_GETCURRENTPOS, 0, 0 ); |
| 1529 | iAnchorPos = ( int ) SendMessage ( hwnd, SCI_GETANCHOR, 0, 0 ); |
| 1530 | if ( iCurPos != iAnchorPos ) { |
| 1531 | if ( SC_SEL_RECTANGLE != SendMessage ( hwnd, SCI_GETSELECTIONMODE, 0, 0 ) ) { |
| 1532 | int iSelCount = ( int ) SendMessage ( hwnd, SCI_GETSELECTIONEND, 0, 0 ) - |
| 1533 | ( int ) SendMessage ( hwnd, SCI_GETSELECTIONSTART, 0, 0 ); |
| 1534 | char *pszText = GlobalAlloc ( GPTR, ( iSelCount ) + 2 ); |
| 1535 | LPWSTR pszTextW = GlobalAlloc ( GPTR, ( iSelCount * 2 ) + 2 ); |
| 1536 | if ( pszText == NULL || pszTextW == NULL ) { |
| 1537 | GlobalFree ( pszText ); |
| 1538 | GlobalFree ( pszTextW ); |
| 1539 | return; |
| 1540 | } |
| 1541 | SendMessage ( hwnd, SCI_GETSELTEXT, 0, ( LPARAM ) pszText ); |
| 1542 | cpEdit = ( UINT ) SendMessage ( hwnd, SCI_GETCODEPAGE, 0, 0 ); |
| 1543 | cchTextW = MultiByteToWideChar ( cpEdit, 0, pszText, iSelCount, pszTextW, ( int ) GlobalSize ( pszTextW ) / sizeof ( WCHAR ) ); |
| 1544 | if ( IsW7() ) { |
| 1545 | LPWSTR pszMappedW = LocalAlloc ( LPTR, LocalSize ( pszTextW ) ); |
| 1546 | if ( LCMapString ( |
| 1547 | LOCALE_SYSTEM_DEFAULT, LCMAP_LINGUISTIC_CASING |/*LCMAP_TITLECASE*/0x00000300, |
| 1548 | pszTextW, cchTextW, pszMappedW, ( int ) LocalSize ( pszMappedW ) / sizeof ( WCHAR ) ) ) { |
| 1549 | StrCpyN ( pszTextW, pszMappedW, ( int ) GlobalSize ( pszTextW ) / sizeof ( WCHAR ) ); |
| 1550 | bChanged = TRUE; |
| 1551 | } else { |
| 1552 | bChanged = FALSE; |
| 1553 | } |
| 1554 | LocalFree ( pszMappedW ); |
| 1555 | } else { |
| 1556 | for ( i = 0; i < cchTextW; i++ ) { |
| 1557 | BOOL bAlphaNumeric = IsCharAlphaNumericW ( pszTextW[i] ); |
| 1558 | if ( !bAlphaNumeric && ( !StrChr ( L"\x0027\x2019\x0060\x00B4", pszTextW[i] ) || bWordEnd ) ) { |
| 1559 | bNewWord = TRUE; |
| 1560 | } else { |
| 1561 | if ( bNewWord ) { |
| 1562 | if ( IsCharLowerW ( pszTextW[i] ) ) { |
| 1563 | pszTextW[i] = LOWORD ( CharUpperW ( ( LPWSTR ) ( LONG_PTR ) MAKELONG ( pszTextW[i], 0 ) ) ); |
| 1564 | bChanged = TRUE; |
| 1565 | } |
| 1566 | } else { |
| 1567 | if ( IsCharUpperW ( pszTextW[i] ) ) { |
| 1568 | pszTextW[i] = LOWORD ( CharLowerW ( ( LPWSTR ) ( LONG_PTR ) MAKELONG ( pszTextW[i], 0 ) ) ); |
| 1569 | bChanged = TRUE; |
| 1570 | } |
| 1571 | } |
| 1572 | bNewWord = FALSE; |
| 1573 | } |
| 1574 | bWordEnd = !bAlphaNumeric; |
| 1575 | } |