• 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-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