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