Home | History | Annotate | Download | only in translit
      1 /***********************************************************************
      2  *  2016 and later: Unicode, Inc. and others.
      3  * License & terms of use: http://www.unicode.org/copyright.html#License
      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 
     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