You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.8 KiB
113 lines
3.8 KiB
4 months ago
|
Copyright (C) 2016 and later: Unicode, Inc. and others.
|
||
|
License & terms of use: http://www.unicode.org/copyright.html
|
||
|
|
||
|
Copyright (c) 2002-2010, International Business Machines Corporation and others. All Rights Reserved.
|
||
|
|
||
|
|
||
|
IMPORTANT:
|
||
|
|
||
|
This sample was originally intended as an exercise for the ICU Workshop (September 2000).
|
||
|
The code currently provided in the solution file is the answer to the exercises, each step can still be found in the 'answers' subdirectory.
|
||
|
|
||
|
|
||
|
|
||
|
http://www.icu-project.org/docs/workshop_2000/agenda.html
|
||
|
|
||
|
Day 2: September 12th 2000
|
||
|
Pre-requisite:
|
||
|
1. All the hardware and software requirements from Day 1.
|
||
|
2. Attended or fully understand Day 1 material.
|
||
|
3. Read through the ICU user's guide at
|
||
|
http://www.icu-project.org/userguide/.
|
||
|
|
||
|
#Transformation Support
|
||
|
10:45am - 12:00pm
|
||
|
Alan Liu
|
||
|
|
||
|
Topics:
|
||
|
1. What is the Unicode normalization?
|
||
|
2. What kind of case mapping support is available in ICU?
|
||
|
3. What is Transliteration and how do I use a Transliterator on a document?
|
||
|
4. How do I add my own Transliterator?
|
||
|
|
||
|
|
||
|
INSTRUCTIONS
|
||
|
------------
|
||
|
|
||
|
This exercise was developed and tested on ICU release 1.6.0, Win32,
|
||
|
Microsoft Visual C++ 6.0. It should work on other ICU releases and
|
||
|
other platforms as well.
|
||
|
|
||
|
MSVC:
|
||
|
Open the file "translit.sln" in Microsoft Visual C++.
|
||
|
|
||
|
Unix:
|
||
|
- Build and install ICU with a prefix, for example '--prefix=/home/srl/ICU'
|
||
|
- Set the variable ICU_PREFIX=/home/srl/ICU and use GNU make in
|
||
|
this directory.
|
||
|
- You may use 'make check' to invoke this sample.
|
||
|
|
||
|
|
||
|
PROBLEMS
|
||
|
--------
|
||
|
|
||
|
Problem 0:
|
||
|
|
||
|
To start with, the program prints out a series of dates formatted in
|
||
|
Greek. Set up the program, build it, and run it.
|
||
|
|
||
|
Problem 1: Basic Transliterator (Easy)
|
||
|
|
||
|
The Greek text shows up almost entirely as Unicode escapes. These
|
||
|
are unreadable on a US machine. Use an existing system
|
||
|
transliterator to transliterate the Greek text to Latin so it can be
|
||
|
phonetically read on a US machine. If you don't know the names of
|
||
|
the system transliterators, use Transliterator::getAvailableID() and
|
||
|
Transliterator::countAvailableIDs(), or look directly in the index
|
||
|
table icu/data/translit_index.txt.
|
||
|
|
||
|
Problem 2: RuleBasedTransliterator (Medium)
|
||
|
|
||
|
Some of the text is still unreadable and shows up as Unicode escape
|
||
|
sequences. Create a RuleBasedTransliterator to change the
|
||
|
unreadable characters to close ASCII equivalents. For example, the
|
||
|
rule "\u00C0 > A;" will change an 'A' with a grave accent to a plain
|
||
|
'A'.
|
||
|
|
||
|
To save typing, use UnicodeSets to handle ranges of characters.
|
||
|
|
||
|
See the included file "U0080.pdf" for a table of the U+00C0 to U+00FF
|
||
|
Unicode block.
|
||
|
|
||
|
Problem 3: Transliterator subclassing; Normalizer (Difficult)
|
||
|
|
||
|
The rule-based approach is flexible and, in most cases, the best
|
||
|
choice for creating a new transliterator. Sometimes, however, a
|
||
|
more elegant algorithmic solution is available. Instead of typing
|
||
|
in a list of rules, you can write C++ code to accomplish the desired
|
||
|
transliteration.
|
||
|
|
||
|
Use a Normalizer to remove accents from characters. You will need
|
||
|
to convert each character to a sequence of base and combining
|
||
|
characters by applying a canonical denormalization transformation.
|
||
|
Then discard the combining characters (the accents etc.) leaving the
|
||
|
base character. Wrap this all up in a subclass of the
|
||
|
Transliterator class that overrides the pure virtual
|
||
|
handleTransliterate() method.
|
||
|
|
||
|
|
||
|
ANSWERS
|
||
|
-------
|
||
|
|
||
|
The exercise includes answers. These are in the "answers" directory,
|
||
|
and are numbered 1, 2, etc. In some cases new files that the user
|
||
|
needs to create are included in the answers directory.
|
||
|
|
||
|
If you get stuck and you want to move to the next step, copy the
|
||
|
answers file into the main directory in order to proceed. E.g.,
|
||
|
"main_1.cpp" contains the original "main.cpp" file. "main_2.cpp"
|
||
|
contains the "main.cpp" file after problem 1. Etc.
|
||
|
|
||
|
|
||
|
Have fun!
|