1 /***********************************************************************
2 * © 2016 and later: Unicode, Inc. and others.
3 * License & terms of use: http://www.unicode.org/copyright.html
4 ***********************************************************************
5 ***********************************************************************
6 * COPYRIGHT:
7 * Copyright (c) 1999-2003, International Business Machines Corporation and
8 * others. All Rights Reserved.
9 ***********************************************************************/
10
11 #include "unicode/translit.h"
12 //#include "unicode/rbt.h"
13 #include "unicode/unistr.h"
14 #include "unicode/calendar.h"
15 #include "unicode/datefmt.h"
16 #include <stdio.h>
17 #include <stdlib.h>
18 #include "util.h"
19 #include "unaccent.h"
20
21 // RuleBasedTransliterator rules to remove accents from characters
22 // so they can be displayed as ASCIIx
23 UnicodeString UNACCENT_RULES(
24 "[\\u00C0-\\u00C5] > A;"
25 "[\\u00C8-\\u00CB] > E;"
26 "[\\u00CC-\\u00CF] > I;"
27 "[\\u00E0-\\u00E5] > a;"
28 "[\\u00E8-\\u00EB] > e;"
29 "[\\u00EC-\\u00EF] > i;"
30 );
31
main(int argc,char ** argv)32 int main(int argc, char **argv) {
33
34 Calendar *cal;
35 DateFormat *fmt;
36 DateFormat *defFmt;
37 Transliterator *greek_latin;
38 Transliterator *rbtUnaccent;
39 Transliterator *unaccent;
40 UParseError pError;
41 UErrorCode status = U_ZERO_ERROR;
42 Locale greece("el", "GR");
43 UnicodeString str, str2;
44
45 // Create a calendar in the Greek locale
46 cal = Calendar::createInstance(greece, status);
47 check(status, "Calendar::createInstance");
48
49 // Create a formatter
50 fmt = DateFormat::createDateInstance(DateFormat::kFull, greece);
51 fmt->setCalendar(*cal);
52
53 // Create a default formatter
54 defFmt = DateFormat::createDateInstance(DateFormat::kFull);
55 defFmt->setCalendar(*cal);
56
57 // Create a Greek-Latin Transliterator
58 greek_latin = Transliterator::createInstance("Greek-Latin", UTRANS_FORWARD, status);
59 if (greek_latin == 0) {
60 printf("ERROR: Transliterator::createInstance() failed\n");
61 exit(1);
62 }
63
64 // Create a custom Transliterator
65 rbtUnaccent = Transliterator::createFromRules("RBTUnaccent",
66 UNACCENT_RULES,
67 UTRANS_FORWARD,
68 pError,
69 status);
70 check(status, "Transliterator::createFromRules");
71
72 // Create a custom Transliterator
73 unaccent = new UnaccentTransliterator();
74
75 // Loop over various months
76 for (int32_t month = Calendar::JANUARY;
77 month <= Calendar::DECEMBER;
78 ++month) {
79
80 // Set the calendar to a date
81 cal->clear();
82 cal->set(1999, month, 4);
83
84 // Format the date in default locale
85 str.remove();
86 defFmt->format(cal->getTime(status), str, status);
87 check(status, "DateFormat::format");
88 printf("Date: ");
89 uprintf(escape(str));
90 printf("\n");
91
92 // Format the date for Greece
93 str.remove();
94 fmt->format(cal->getTime(status), str, status);
95 check(status, "DateFormat::format");
96 printf("Greek formatted date: ");
97 uprintf(escape(str));
98 printf("\n");
99
100 // Transliterate result
101 greek_latin->transliterate(str);
102 printf("Transliterated via Greek-Latin: ");
103 uprintf(escape(str));
104 printf("\n");
105
106 // Transliterate result
107 str2 = str;
108 rbtUnaccent->transliterate(str);
109 printf("Transliterated via RBT unaccent: ");
110 uprintf(escape(str));
111 printf("\n");
112
113 unaccent->transliterate(str2);
114 printf("Transliterated via normalizer unaccent: ");
115 uprintf(escape(str2));
116 printf("\n\n");
117 }
118
119 // Clean up
120 delete fmt;
121 delete cal;
122 delete greek_latin;
123 delete unaccent;
124 delete rbtUnaccent;
125
126 printf("Exiting successfully\n");
127 return 0;
128 }
129