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

Function EditTitleCase

src/Edit.c:1518–1591  ·  view source on GitHub ↗

============================================================================= EditTitleCase()

Source from the content-addressed store, hash-verified

1516// EditTitleCase()
1517//
1518void 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 }

Callers 1

MsgCommandFunction · 0.85

Calls 1

MsgBoxFunction · 0.85

Tested by

no test coverage detected