16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1999-2002, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/translit.h" 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/rbt.h" 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unistr.h" 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h" 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/datefmt.h" 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h> 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h> 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "util.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unaccent.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// RuleBasedTransliterator rules to remove accents from characters 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// so they can be displayed as ASCIIx 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUnicodeString UNACCENT_RULES( 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[\\u00C0-\\u00C5] > A;" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[\\u00C8-\\u00CB] > E;" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[\\u00CC-\\u00CF] > I;" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[\\u00E0-\\u00E5] > a;" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[\\u00E8-\\u00EB] > e;" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[\\u00EC-\\u00EF] > i;" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ); 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint main(int argc, char **argv) { 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Calendar *cal; 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormat *fmt; 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormat *defFmt; 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Transliterator *greek_latin; 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Transliterator *rbtUnaccent; 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale greece("el", "GR"); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str, str2; 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Create a calendar in the Greek locale 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = Calendar::createInstance(greece, status); 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(status, "Calendar::createInstance"); 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Create a formatter 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = DateFormat::createDateInstance(DateFormat::kFull, greece); 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt->setCalendar(*cal); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Create a default formatter 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org defFmt = DateFormat::createDateInstance(DateFormat::kFull); 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org defFmt->setCalendar(*cal); 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Create a Greek-Latin Transliterator 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org greek_latin = Transliterator::createInstance("Greek-Latin"); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (greek_latin == 0) { 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("ERROR: Transliterator::createInstance() failed\n"); 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org exit(1); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Create a custom Transliterator 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rbtUnaccent = new RuleBasedTransliterator("RBTUnaccent", 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNACCENT_RULES, 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UTRANS_FORWARD, 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(status, "RuleBasedTransliterator::ct"); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Loop over various months 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t month = Calendar::JANUARY; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org month <= Calendar::DECEMBER; 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ++month) { 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Set the calendar to a date 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->clear(); 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal->set(1999, month, 4); 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Format the date in default locale 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org defFmt->format(cal->getTime(status), str, status); 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(status, "DateFormat::format"); 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Date: "); 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprintf(escape(str)); 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Format the date for Greece 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt->format(cal->getTime(status), str, status); 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(status, "DateFormat::format"); 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Greek formatted date: "); 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprintf(escape(str)); 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Transliterate result 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org greek_latin->transliterate(str); 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Transliterated via Greek-Latin: "); 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprintf(escape(str)); 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n"); 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Transliterate result 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str2 = str; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rbtUnaccent->transliterate(str); 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Transliterated via RBT unaccent: "); 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprintf(escape(str)); 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n\n"); 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Clean up 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fmt; 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cal; 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete greek_latin; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete rbtUnaccent; 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Exiting successfully\n"); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 113