ICU-2867 new samples
X-SVN-Rev: 12524
This commit is contained in:
parent
49ed141687
commit
ea5428ea8e
183
icu4c/source/samples/citer/citer.cpp
Normal file
183
icu4c/source/samples/citer/citer.cpp
Normal file
@ -0,0 +1,183 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
*
|
||||
* Copyright (C) 2002-2003, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
|
||||
#include "unicode/uchriter.h"
|
||||
#include "unicode/schriter.h"
|
||||
#include "unicode/ustring.h"
|
||||
#include <stdio.h>
|
||||
#include <iostream.h>
|
||||
#include <unicode/brkiter.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void printUnicodeString(const UnicodeString &s) {
|
||||
char charBuf[1000];
|
||||
s.extract(0, s.length(), charBuf, sizeof(charBuf)-1, 0);
|
||||
charBuf[sizeof(charBuf)-1] = 0;
|
||||
cout << charBuf;
|
||||
}
|
||||
|
||||
void printUChar(UChar32 ch) {
|
||||
char charBuf[1000];
|
||||
charBuf[sizeof(charBuf)-1] = 0;
|
||||
if(ch < 127) {
|
||||
cout << (char) ch;
|
||||
} else if (ch == CharacterIterator::DONE) {
|
||||
cout << "[CharacterIterator::DONE = 0xFFFF]";
|
||||
} else {
|
||||
cout << "[" << ch << "]";
|
||||
}
|
||||
}
|
||||
|
||||
class Test
|
||||
{
|
||||
public:
|
||||
void TestUChariter();
|
||||
void TestStringiter();
|
||||
};
|
||||
|
||||
void Test::TestUChariter() {
|
||||
const char testChars[] = "Now is the time for all good men to come "
|
||||
"to the aid of their country.";
|
||||
|
||||
UnicodeString testString(testChars,"");
|
||||
const UChar *testText = testString.getTerminatedBuffer();
|
||||
|
||||
UCharCharacterIterator iter(testText, u_strlen(testText));
|
||||
UCharCharacterIterator* test2 = (UCharCharacterIterator*)iter.clone();
|
||||
|
||||
cout << "testText = " << testChars;
|
||||
|
||||
if (iter != *test2 ) {
|
||||
printf("clone() or equals() failed: Two clones tested unequal\n");
|
||||
}
|
||||
|
||||
UnicodeString result1, result2;
|
||||
// getting and comparing the text within the iterators
|
||||
iter.getText(result1);
|
||||
test2->getText(result2);
|
||||
if (result1 != result2) {
|
||||
printf("iter.getText() != clone.getText()\n");
|
||||
}
|
||||
|
||||
cout << endl;
|
||||
// Demonstrates seeking forward using the iterator.
|
||||
cout << "Forward = ";
|
||||
|
||||
UChar c = iter.first();
|
||||
printUChar(c); // The first char
|
||||
int32_t i = 0;
|
||||
|
||||
if (iter.startIndex() != 0 || iter.endIndex() != u_strlen(testText)) {
|
||||
printf("startIndex() or endIndex() failed\n");
|
||||
}
|
||||
|
||||
|
||||
// Testing forward iteration...
|
||||
do {
|
||||
if (c == CharacterIterator::DONE && i != u_strlen(testText)) {
|
||||
printf("Iterator reached end prematurely");
|
||||
}
|
||||
else if (c != testText[i]) {
|
||||
printf("Character mismatch at position %d\n" + i);
|
||||
}
|
||||
if (iter.current() != c) {
|
||||
printf("current() isn't working right");
|
||||
}
|
||||
if (iter.getIndex() != i) {
|
||||
printf("getIndex() isn't working right\n");
|
||||
}
|
||||
if (c != CharacterIterator::DONE) {
|
||||
c = iter.next();
|
||||
i++;
|
||||
}
|
||||
|
||||
cout << "|";
|
||||
printUChar(c);
|
||||
|
||||
} while (c != CharacterIterator::DONE);
|
||||
|
||||
delete test2;
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
|
||||
void Test::TestStringiter() {
|
||||
const char testChars[] = "Now is the time for all good men to come "
|
||||
"to the aid of their country.";
|
||||
|
||||
UnicodeString testString(testChars,"");
|
||||
const UChar *testText = testString.getTerminatedBuffer();
|
||||
|
||||
StringCharacterIterator iter(testText, u_strlen(testText));
|
||||
StringCharacterIterator* test2 = (StringCharacterIterator*)iter.clone();
|
||||
|
||||
if (iter != *test2 ) {
|
||||
printf("clone() or equals() failed: Two clones tested unequal\n");
|
||||
}
|
||||
|
||||
UnicodeString result1, result2;
|
||||
// getting and comparing the text within the iterators
|
||||
iter.getText(result1);
|
||||
test2->getText(result2);
|
||||
if (result1 != result2) {
|
||||
printf("getText() failed\n");
|
||||
}
|
||||
|
||||
cout << "Backwards: ";
|
||||
UChar c = iter.last();
|
||||
printUChar(c);
|
||||
int32_t i = iter.endIndex();
|
||||
i--; // already printed out the last char
|
||||
if (iter.startIndex() != 0 || iter.endIndex() != u_strlen(testText)) {
|
||||
printf("startIndex() or endIndex() failed\n");
|
||||
}
|
||||
|
||||
// Testing backward iteration over a range...
|
||||
do {
|
||||
if (c == CharacterIterator::DONE) {
|
||||
printf("Iterator reached end prematurely\n");
|
||||
}
|
||||
else if (c != testText[i]) {
|
||||
printf("Character mismatch at position %d\n" + i);
|
||||
}
|
||||
if (iter.current() != c) {
|
||||
printf("current() isn't working right\n");
|
||||
}
|
||||
if (iter.getIndex() != i) {
|
||||
printf("getIndex() isn't working right [%d should be %d]\n", iter.getIndex(), i);
|
||||
}
|
||||
if (c != CharacterIterator::DONE) {
|
||||
c = iter.previous();
|
||||
i--;
|
||||
}
|
||||
cout << "|";
|
||||
printUChar(c);
|
||||
} while (c != CharacterIterator::DONE);
|
||||
|
||||
cout << endl;
|
||||
delete test2;
|
||||
}
|
||||
|
||||
/* Creating and using text boundaries */
|
||||
int main( void )
|
||||
{
|
||||
cout << "ICU Iterator Sample Program (C++)\n\n";
|
||||
|
||||
Test t;
|
||||
|
||||
cout << endl;
|
||||
cout << "Test::TestUCharIter()" << endl;
|
||||
t.TestUChariter();
|
||||
cout << "-----" << endl;
|
||||
cout << "Test::TestStringchariter()" << endl;
|
||||
t.TestStringiter();
|
||||
cout << "-----" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
59
icu4c/source/samples/citer/readme.txt
Normal file
59
icu4c/source/samples/citer/readme.txt
Normal file
@ -0,0 +1,59 @@
|
||||
Copyright (c) 2003, International Business Machines Corporation and others. All Rights Reserved.
|
||||
citer: Character Iteration
|
||||
|
||||
This sample demonstrates
|
||||
Using ICU to determine the linguistic boundaries within text
|
||||
|
||||
|
||||
Files:
|
||||
citer.cpp Main source file in C++
|
||||
citer.dsw Windows MSVC workspace. Double-click this to get started.
|
||||
citer.dsp Windows MSVC project file
|
||||
|
||||
To Build citer on Windows
|
||||
1. Install and build ICU
|
||||
2. In MSVC, open the workspace file icu\samples\citer\citer.dsw
|
||||
3. Choose a Debug or Release build.
|
||||
4. Build.
|
||||
|
||||
To Run on Windows
|
||||
1. Start a command shell window
|
||||
2. Add ICU's bin directory to the path, e.g.
|
||||
set PATH=c:\icu\bin;%PATH%
|
||||
(Use the path to where ever ICU is on your system.)
|
||||
3. cd into the citer directory, e.g.
|
||||
cd c:\icu\source\samples\citer\debug
|
||||
4. Run it
|
||||
citer
|
||||
|
||||
To Build on Unixes
|
||||
1. Build ICU.
|
||||
Specify an ICU install directory when running configure,
|
||||
using the --prefix option. The steps to build ICU will look something
|
||||
like this:
|
||||
cd <icu directory>/source
|
||||
runConfigureICU <platform-name> --prefix <icu install directory> [other options]
|
||||
gmake all
|
||||
|
||||
2. Install ICU,
|
||||
gmake install
|
||||
|
||||
3. Compile
|
||||
cd <icu directory>/source/samples/citer
|
||||
gmake ICU_PREFIX=<icu install directory)
|
||||
|
||||
To Run on Unixes
|
||||
cd <icu directory>/source/samples/citer
|
||||
|
||||
gmake ICU_PREFIX=<icu install directory> check
|
||||
-or-
|
||||
|
||||
export LD_LIBRARY_PATH=<icu install directory>/lib:.:$LD_LIBRARY_PATH
|
||||
citer
|
||||
|
||||
|
||||
Note: The name of the LD_LIBRARY_PATH variable is different on some systems.
|
||||
If in doubt, run the sample using "gmake check", and note the name of
|
||||
the variable that is used there. LD_LIBRARY_PATH is the correct name
|
||||
for Linux and Solaris.
|
||||
|
Loading…
Reference in New Issue
Block a user