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