• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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