117 lines
3.3 KiB
C++
117 lines
3.3 KiB
C++
|
#include "unicode/translit.h"
|
||
|
#include "unicode/rbt.h"
|
||
|
#include "unicode/unistr.h"
|
||
|
#include "unicode/calendar.h"
|
||
|
#include "unicode/datefmt.h"
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include "util.h"
|
||
|
#include "unaccent.h"
|
||
|
|
||
|
// RuleBasedTransliterator rules to remove accents from characters
|
||
|
// so they can be displayed as ASCIIx
|
||
|
UnicodeString UNACCENT_RULES(
|
||
|
"[\\u00C0-\\u00C5] > A;"
|
||
|
"[\\u00C8-\\u00CB] > E;"
|
||
|
"[\\u00CC-\\u00CF] > I;"
|
||
|
"[\\u00E0-\\u00E5] > a;"
|
||
|
"[\\u00E8-\\u00EB] > e;"
|
||
|
"[\\u00EC-\\u00EF] > i;"
|
||
|
);
|
||
|
|
||
|
int main(int argc, char **argv) {
|
||
|
|
||
|
Calendar *cal;
|
||
|
DateFormat *fmt;
|
||
|
DateFormat *defFmt;
|
||
|
Transliterator *greek_latin;
|
||
|
Transliterator *rbtUnaccent;
|
||
|
Transliterator *unaccent;
|
||
|
UErrorCode status = U_ZERO_ERROR;
|
||
|
Locale greece("el", "GR");
|
||
|
UnicodeString str, str2;
|
||
|
|
||
|
// Create a calendar in the Greek locale
|
||
|
cal = Calendar::createInstance(greece, status);
|
||
|
check(status, "Calendar::createInstance");
|
||
|
|
||
|
// Create a formatter
|
||
|
fmt = DateFormat::createDateInstance(DateFormat::kFull, greece);
|
||
|
fmt->setCalendar(*cal);
|
||
|
|
||
|
// Create a default formatter
|
||
|
defFmt = DateFormat::createDateInstance(DateFormat::kFull);
|
||
|
defFmt->setCalendar(*cal);
|
||
|
|
||
|
// Create a Greek-Latin Transliterator
|
||
|
greek_latin = Transliterator::createInstance("Greek-Latin");
|
||
|
if (greek_latin == 0) {
|
||
|
printf("ERROR: Transliterator::createInstance() failed\n");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
// Create a custom Transliterator
|
||
|
rbtUnaccent = new RuleBasedTransliterator("RBTUnaccent",
|
||
|
UNACCENT_RULES,
|
||
|
UTRANS_FORWARD,
|
||
|
status);
|
||
|
check(status, "RuleBasedTransliterator::ct");
|
||
|
|
||
|
// Create a custom Transliterator
|
||
|
unaccent = new UnaccentTransliterator();
|
||
|
|
||
|
// Loop over various months
|
||
|
for (int32_t month = Calendar::JANUARY;
|
||
|
month <= Calendar::DECEMBER;
|
||
|
++month) {
|
||
|
|
||
|
// Set the calendar to a date
|
||
|
cal->clear();
|
||
|
cal->set(1999, month, 4);
|
||
|
|
||
|
// Format the date in default locale
|
||
|
str.remove();
|
||
|
defFmt->format(cal->getTime(status), str, status);
|
||
|
check(status, "DateFormat::format");
|
||
|
printf("Date: ");
|
||
|
uprintf(escape(str));
|
||
|
printf("\n");
|
||
|
|
||
|
// Format the date for Greece
|
||
|
str.remove();
|
||
|
fmt->format(cal->getTime(status), str, status);
|
||
|
check(status, "DateFormat::format");
|
||
|
printf("Greek formatted date: ");
|
||
|
uprintf(escape(str));
|
||
|
printf("\n");
|
||
|
|
||
|
// Transliterate result
|
||
|
greek_latin->transliterate(str);
|
||
|
printf("Transliterated via Greek-Latin: ");
|
||
|
uprintf(escape(str));
|
||
|
printf("\n");
|
||
|
|
||
|
// Transliterate result
|
||
|
str2 = str;
|
||
|
rbtUnaccent->transliterate(str);
|
||
|
printf("Transliterated via RBT unaccent: ");
|
||
|
uprintf(escape(str));
|
||
|
printf("\n");
|
||
|
|
||
|
unaccent->transliterate(str2);
|
||
|
printf("Transliterated via normalizer unaccent: ");
|
||
|
uprintf(escape(str2));
|
||
|
printf("\n\n");
|
||
|
}
|
||
|
|
||
|
// Clean up
|
||
|
delete fmt;
|
||
|
delete cal;
|
||
|
delete greek_latin;
|
||
|
delete unaccent;
|
||
|
delete rbtUnaccent;
|
||
|
|
||
|
printf("Exiting successfully\n");
|
||
|
return 0;
|
||
|
}
|