[sword-cvs] icu-sword/source/samples/citer citer.cpp,NONE,1.1 readme.txt,NONE,1.1

sword@www.crosswire.org sword@www.crosswire.org
Tue, 6 Apr 2004 03:09:12 -0700


Update of /cvs/core/icu-sword/source/samples/citer
In directory www:/tmp/cvs-serv8911/source/samples/citer

Added Files:
	citer.cpp readme.txt 
Log Message:
ICU 2.8 sync

--- NEW FILE: citer.cpp ---
/*
*******************************************************************************
*
*   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;
}

--- NEW FILE: readme.txt ---
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.