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