diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/tcharexample_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/tcharexample_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,441 +0,0 @@ - -
-00001 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -00002 // All rights reserved. -00003 // This component and the accompanying materials are made available -00004 // under the terms of "Eclipse Public License v1.0" -00005 // which accompanies this distribution, and is available -00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". -00007 // -00008 // Initial Contributors: -00009 // Nokia Corporation - initial contribution. -00010 // -00011 // Contributors: -00012 // -00013 // Description: -00014 // This example program demonstrates the TChar, TCharF, TCharLC and TCharUC character classes. -00015 // -00016 -00017 -00018 -00023 #include "tcharexample.h" -00024 -00025 static CConsoleBase* console; -00026 -00030 CTCharExample::CTCharExample() -00031 { -00032 } -00033 -00034 void CTCharExample::ConstructL() -00035 { -00036 _LIT(KTitle, "\r\nTChar Example" ); -00037 console = Console::NewL(KTitle, TSize(KConsFullScreen, KConsFullScreen)); -00038 -00039 _LIT(KWelcome, "\r\nWelcome to the TChar example application"); -00040 console->Printf(KWelcome); -00041 } -00042 -00046 CTCharExample::~CTCharExample() -00047 { -00048 delete console; -00049 } -00050 -00055 CTCharExample* CTCharExample::NewL() -00056 { -00057 CTCharExample* self = new(ELeave)CTCharExample(); -00058 CleanupStack::PushL(self); -00059 self->ConstructL(); -00060 CleanupStack::Pop(self); -00061 return self; -00062 } -00063 -00068 void PrintIsXXXFunction(TChar aCharValue) -00069 { -00070 if(aCharValue.IsLower()) -00071 { -00072 _LIT(KLower," The character is lowercase\r\n"); -00073 console->Printf(KLower); -00074 } -00075 if(aCharValue.IsUpper()) -00076 { -00077 _LIT(KUpper," The character is uppercase\r\n"); -00078 console->Printf(KUpper); -00079 } -00080 if(aCharValue.IsAlpha()) -00081 { -00082 _LIT(KAlpha," The character is alphabetic\r\n"); -00083 console->Printf(KAlpha); -00084 } -00085 if(aCharValue.IsDigit()) -00086 { -00087 _LIT(KDigit," The character is a digit\r\n"); -00088 console->Printf(KDigit); -00089 } -00090 if(aCharValue.IsHexDigit()) -00091 { -00092 _LIT(KHexDigit," The character is a hexadecimal digit\r\n"); -00093 console->Printf(KHexDigit); -00094 } -00095 if(aCharValue.IsSpace()) -00096 { -00097 _LIT(KSpace," The character is a space\r\n"); -00098 console->Printf(KSpace); -00099 } -00100 if(aCharValue.IsPunctuation()) -00101 { -00102 _LIT(KPunctuation," The character is punctuation\r\n"); -00103 console->Printf(KPunctuation); -00104 } -00105 else if(aCharValue.IsPrint()) -00106 { -00107 _LIT(KPrint," The character is printable\r\n"); -00108 console->Printf(KPrint); -00109 } -00110 } -00111 -00115 void TCharIsXXXFunctions() -00116 { -00117 _LIT(KEnterAKey,"\r\nEnter a character to process with the TChar::IsXXX() functions: "); -00118 console->Printf(KEnterAKey); -00119 -00120 TChar charValue = console->Getch(); -00121 _LIT(KPrintChar,"%C\r\n"); -00122 console->Printf(KPrintChar, (TUint)charValue); -00123 -00124 // Get and print the character type using the IsXXX() functions. -00125 PrintIsXXXFunction(charValue); -00126 } -00127 -00131 void TCharGetXXXFunctions() -00132 { -00133 _LIT(KEnterAKey,"\r\nEnter a character to process with the TChar:GetXXX() functions: "); -00134 console->Printf(KEnterAKey); -00135 _LIT(KPrintChar,"%C\r\n"); -00136 TChar charValue = console->Getch(); -00137 -00138 console->Printf(KPrintChar, (TUint)charValue); -00139 -00140 // Gets the combining class of the character. -00141 TInt getCombiningClass = charValue.GetCombiningClass(); -00142 _LIT(KCharCombNotClassMsg," The character does not have a combining class\r\n"); -00143 _LIT(KCharCombClassMsg," The character has %d combining classes\r\n"); -00144 if(getCombiningClass == 0) -00145 console->Printf(KCharCombNotClassMsg); -00146 else -00147 console->Printf(KCharCombClassMsg, getCombiningClass); -00148 -00149 _LIT(KENeutalWidthMsg," ENeutralWidth: This character type includes 'ambiguous width' as defined in Unicode Technical Report 11: East Asian Width\r\n"); -00150 _LIT(KEHaldWidthMsg," EHalfWidth: This character occupies a single cell\r\n"); -00151 _LIT(KEFullWidthMsg," EFullWidth: This character occupies 2 cells\r\n"); -00152 _LIT(KENarrowMsg," ENarrow: This character is narrow and has explicit full-width counterparts\r\n"); -00153 _LIT(KEWideMsg," EWide: This character is wide\r\n"); -00154 _LIT(KNoWidthMsg," This character has no width defined\r\n"); -00155 // Gets and prints the Chinese, Japanese, Korean (CJK) notional width of the character. -00156 TChar::TCjkWidth cjkWidth = charValue.GetCjkWidth(); -00157 switch(cjkWidth) -00158 { -00159 case TChar::ENeutralWidth: -00160 console->Printf(KENeutalWidthMsg); -00161 break; -00162 case TChar::EHalfWidth: -00163 console->Printf(KEHaldWidthMsg); -00164 break; -00165 case TChar::EFullWidth: -00166 console->Printf(KEFullWidthMsg); -00167 break; -00168 case TChar::ENarrow: -00169 console->Printf(KENarrowMsg); -00170 break; -00171 case TChar::EWide: -00172 console->Printf(KEWideMsg); -00173 break; -00174 default: -00175 console->Printf(KNoWidthMsg); -00176 } -00177 -00178 // Prints the different cases if the character is alphabetic. -00179 if(charValue.IsAlpha()) -00180 { -00181 // Gets the character after conversion to uppercase (or returns the character itself if no uppercase form exists). -00182 TUint getCaseValue = charValue.GetUpperCase(); -00183 _LIT(KAferConv2UpMsg," The character after conversion to upper case is %C:\r\n"); -00184 console->Printf(KAferConv2UpMsg, getCaseValue); -00185 -00186 // Gets the character after conversion to lowercase (or the character itself if no lowercase form exists). -00187 getCaseValue = charValue.GetLowerCase(); -00188 _LIT(KAferConv2LowerMsg," The character after conversion to lower case is %C:\r\n"); -00189 console->Printf(KAferConv2LowerMsg, getCaseValue); -00190 -00191 // Gets the character after conversion to title-case (or the character itself if no title-case form exists). -00192 getCaseValue = charValue.GetTitleCase(); -00193 _LIT(KAferConv2TitleMsg," The character after conversion to title case is %C:\r\n"); -00194 console->Printf(KAferConv2TitleMsg, getCaseValue); -00195 } -00196 } -00197 -00198 -00202 void TCharInfoFunctions() -00203 { -00204 _LIT(KEnterAKey,"\r\nTCharInfo holds all character information\r\nEnter a character to process with TCharInfo: "); -00205 console->Printf(KEnterAKey); -00206 -00207 TChar enteredCharacter = console->Getch(); -00208 _LIT(KPrintChar,"%C\r\n"); -00209 console->Printf(KPrintChar, (TUint)enteredCharacter); -00210 -00211 // A structure to hold information about the character. -00212 TChar::TCharInfo charInfo; -00213 -00214 enteredCharacter.GetInfo(charInfo); -00215 -00216 // Gets the combining class of the entered character. -00217 // This determines the relationship between characters in a string -00218 TInt numberOfCombiningClass = charInfo.iCombiningClass; -00219 _LIT(KCharCombNotClassMsg," The character does not have a combining class\r\n"); -00220 _LIT(KCharCombClassMsg," The character has %d combining classes\r\n"); -00221 if(numberOfCombiningClass <= 0) -00222 console->Printf(KCharCombNotClassMsg); -00223 else -00224 console->Printf(KCharCombClassMsg, numberOfCombiningClass); -00225 -00226 // Returns True if the character is mirrored. -00227 // Mirrored characters can change direction according to the directionality of the surrounding characters -00228 TBool booleanValue = charInfo.iMirrored; -00229 _LIT(KCharMirroredMsg," The character is mirrored\r\n"); -00230 _LIT(KCharNotMirroredMsg," The character is not mirrored\r\n"); -00231 if(booleanValue) -00232 console->Printf(KCharMirroredMsg); -00233 else -00234 console->Printf(KCharNotMirroredMsg); -00235 -00236 // Gets the numeric value of the character (-1 if none, -2 if a fraction). -00237 TInt getNumericValue = charInfo.iNumericValue; -00238 _LIT(KCharNoNumericMsg," The character has no numeric value\r\n"); -00239 _LIT(KCharNumericFractionMsg, " The character is a fraction\r\n"); -00240 if(getNumericValue == -1) -00241 console->Printf(KCharNoNumericMsg); -00242 else if(getNumericValue == -2) -00243 console->Printf(KCharNumericFractionMsg); -00244 -00245 // Print the different cases if the character is alphabetic. -00246 if(enteredCharacter.IsAlpha()) -00247 { -00248 // Gets and prints the title-case form of the character. -00249 TUint caseValue = charInfo.iTitleCase; -00250 _LIT(KAferConv2TitleMsg," The character after conversion to title case is %C\r\n"); -00251 console->Printf(KAferConv2TitleMsg, caseValue); -00252 -00253 // Gets and prints the upper case form of the character. -00254 caseValue = charInfo.iUpperCase; -00255 _LIT(KAferConv2UpMsg," The character after conversion to upper case is %C\r\n"); -00256 console->Printf(KAferConv2UpMsg, caseValue); -00257 -00258 // Gets and prints the lower case form of the character. -00259 caseValue = charInfo.iLowerCase; -00260 _LIT(KAferConv2LowerMsg," The character after conversion to lower case is %C\r\n"); -00261 console->Printf(KAferConv2LowerMsg, caseValue); -00262 } -00263 } -00264 -00265 -00269 void CTCharExample::UseTCharFunctions() -00270 { -00271 //Split the TChar functions into logical groups. -00272 TInt userChoice = 0; -00273 do -00274 { -00275 _LIT(KLoopMessage, "\r\nTChar function menu.\r\n 1 to use the IsXXX() functions,\r\n 2 to use the Getxxx() functions,\r\n 3 to use the TCharInfo class,\r\n or 0 to return to the main menu.\r\n"); -00276 console->Printf(KLoopMessage); -00277 -00278 userChoice = console->Getch(); -00279 -00280 switch(userChoice) -00281 { -00282 case '1': -00283 // Use the TChar::IsXXX() functions -00284 TCharIsXXXFunctions(); -00285 break; -00286 -00287 case '2': -00288 // Use the TChar::GetXXX(); functions -00289 TCharGetXXXFunctions(); -00290 break; -00291 -00292 case '3': -00293 // Use TCharInfo functions -00294 TCharInfoFunctions(); -00295 break; -00296 -00297 case '0': -00298 // Exit -00299 break; -00300 -00301 default: -00302 { -00303 _LIT(KEnterValidMsg, "\r\nEnter a valid character.\r\n"); -00304 console->Printf(KEnterValidMsg); -00305 } -00306 -00307 } -00308 -00309 } while (userChoice != '0'); -00310 } -00311 -00315 void CTCharExample::UseTCharFFunctions() -00316 { -00317 _LIT(KEnterALowerCaseChar,"\r\nTCharF ignores character differences like case and accent.\r\n Enter a character: "); -00318 console->Printf(KEnterALowerCaseChar); -00319 -00320 // Gets a character from the console. -00321 TChar enteredLowerChar = console->Getch(); -00322 _LIT(KPrintChar,"%C\r\n"); -00323 console->Printf(KPrintChar, (TUint)enteredLowerChar); -00324 -00325 _LIT(KEnterAnUpperCaseChar," Enter the same character but with a different case or accent.\r\n (use the 'Alt Gr' key to produce an accent): "); -00326 console->Printf(KEnterAnUpperCaseChar); -00327 -00328 // Gets a character from the console. -00329 TChar enteredUpperChar = console->Getch(); -00330 console->Printf(KPrintChar, (TUint)enteredUpperChar); -00331 -00332 // TCharF folds a specified character so that character differences like case and accents are ignored. -00333 TCharF lowerCaseValue(enteredLowerChar); -00334 TCharF upperCaseValue(enteredUpperChar); -00335 -00336 // Test both lower and upper case value using TCharF. -00337 if (lowerCaseValue == upperCaseValue) -00338 { -00339 _LIT(KCharEquiMsg," The characters are equivalent\r\n"); -00340 console->Printf(KCharEquiMsg); -00341 } -00342 else -00343 { -00344 _LIT(KCharNotEquiMsg, " The characters are not equivalent\r\n"); -00345 console->Printf(KCharNotEquiMsg); -00346 } -00347 } -00348 -00352 void CTCharExample::UseTCharLCFunctions() -00353 { -00354 -00355 _LIT(KEnterACharForTCharLC,"\r\nTCharLC converts a character to lower case\r\n Enter an upper case character to process with TCharLC: "); -00356 console->Printf(KEnterACharForTCharLC); -00357 -00358 // Gets a character from the console. -00359 TChar charValue = console->Getch(); -00360 _LIT(KPrintChar,"%C\r\n"); -00361 console->Printf(KPrintChar, (TUint)charValue); -00362 -00363 // Convert and print the character. -00364 TCharLC convertedCharToLowerCase(charValue); -00365 -00366 _LIT(KConvertedTCharLC, "\r\n After conversion the character is: "); -00367 console->Printf(KConvertedTCharLC); -00368 console->Printf(KPrintChar,(TUint)convertedCharToLowerCase); -00369 } -00370 -00374 void CTCharExample::UseTCharUCFunctions() -00375 { -00376 _LIT(KEnterACharForTCharUC,"\r\nTCharUC converts a character to upper case\r\n Enter a lower case character to process with TCharLC: "); -00377 console->Printf(KEnterACharForTCharUC); -00378 _LIT(KPrintChar,"%C\r\n"); -00379 // Gets a character from the console. -00380 TChar charValue = console->Getch(); -00381 console->Printf(KPrintChar, (TUint)charValue); -00382 -00383 // Convert and print the character. -00384 TCharUC convertedCharUC(charValue); -00385 -00386 _LIT(KConvertedTCharUC, "\r\n After conversion the character is: "); -00387 console->Printf(KConvertedTCharUC); -00388 console->Printf(KPrintChar,(TUint)convertedCharUC); -00389 } -00390 -00391 -00392 void MainL() -00393 { -00394 CTCharExample* app = CTCharExample::NewL(); -00395 CleanupStack::PushL(app); -00396 -00397 TInt userChoice = 0; -00398 -00399 do -00400 { -00401 _LIT(KLoopMessage, "\r\nPress 1 to use the TChar functions,\r\n 2 to use the TCharF function,\r\n 3 to use the TCharLC function,\r\n 4 to use the TCharUC function,\r\n or 0 to exit the application.\r\n"); -00402 console->Printf(KLoopMessage); -00403 -00404 userChoice = console->Getch(); -00405 -00406 switch(userChoice) -00407 { -00408 case '1': -00409 // Use functions belonging to the TChar character class. -00410 app->UseTCharFunctions(); -00411 break; -00412 -00413 case '2': -00414 // Use functions belonging to the TCharF character class. -00415 app->UseTCharFFunctions(); -00416 break; -00417 -00418 case '3': -00419 // Use functions belonging to the TCharLC character class. -00420 app->UseTCharLCFunctions(); -00421 break; -00422 -00423 case '4': -00424 // Use functions belonging to the TCharUC character class. -00425 app->UseTCharUCFunctions(); -00426 break; -00427 -00428 case '0': -00429 // Exit -00430 break; -00431 -00432 default: -00433 _LIT(KEnterValidMsg, "\r\nEnter a valid character.\r\n"); -00434 console->Printf(KEnterValidMsg); -00435 } -00436 -00437 } while (userChoice != '0'); -00438 -00439 CleanupStack::PopAndDestroy(app); -00440 } -00441 -00442 extern TInt E32Main() -00443 { -00444 __UHEAP_MARK; -00445 -00446 CTrapCleanup* cleanup = CTrapCleanup::New(); -00447 if(cleanup == NULL) -00448 { -00449 return KErrNoMemory; -00450 } -00451 TRAPD(err, MainL()); -00452 if(err !=KErrNone) -00453 { -00454 _LIT(KFailed, "\nFailed to complete"); -00455 User::Panic(KFailed, err); -00456 } -00457 delete cleanup; -00458 -00459 __UHEAP_MARKEND; -00460 return KErrNone; -00461 } -00462 -00463 -00464 -00465 -00466 -00467 -00468 -