diff options
Diffstat (limited to 'Build/source/libs/icu-xetex/samples/break/break.cpp')
-rw-r--r-- | Build/source/libs/icu-xetex/samples/break/break.cpp | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/Build/source/libs/icu-xetex/samples/break/break.cpp b/Build/source/libs/icu-xetex/samples/break/break.cpp new file mode 100644 index 00000000000..90d77efad42 --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/break/break.cpp @@ -0,0 +1,143 @@ +/* +******************************************************************************* +* +* Copyright (C) 2002-2003, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +*/ + +#include <stdio.h> +#include <unicode/brkiter.h> +#include <stdlib.h> + +U_CFUNC int c_main(void); + + +void printUnicodeString(const UnicodeString &s) { + char charBuf[1000]; + s.extract(0, s.length(), charBuf, sizeof(charBuf)-1, 0); + charBuf[sizeof(charBuf)-1] = 0; + printf("%s", charBuf); +} + + +void printTextRange( BreakIterator& iterator, + int32_t start, int32_t end ) +{ + CharacterIterator *strIter = iterator.getText().clone(); + UnicodeString s; + strIter->getText(s); + + printf(" %ld %ld\t", (long)start, (long)end); + printUnicodeString(UnicodeString(s, 0, start)); + printf("|"); + printUnicodeString(UnicodeString(s, start, end-start)); + printf("|"); + printUnicodeString(UnicodeString(s, end)); + puts(""); + delete strIter; +} + + +/* Print each element in order: */ +void printEachForward( BreakIterator& boundary) +{ + int32_t start = boundary.first(); + for (int32_t end = boundary.next(); + end != BreakIterator::DONE; + start = end, end = boundary.next()) + { + printTextRange( boundary, start, end ); + } +} + +/* Print each element in reverse order: */ +void printEachBackward( BreakIterator& boundary) +{ + int32_t end = boundary.last(); + for (int32_t start = boundary.previous(); + start != BreakIterator::DONE; + end = start, start = boundary.previous()) + { + printTextRange( boundary, start, end ); + } +} + +/* Print the first element */ +void printFirst(BreakIterator& boundary) +{ + int32_t start = boundary.first(); + int32_t end = boundary.next(); + printTextRange( boundary, start, end ); +} + +/* Print the last element */ +void printLast(BreakIterator& boundary) +{ + int32_t end = boundary.last(); + int32_t start = boundary.previous(); + printTextRange( boundary, start, end ); +} + +/* Print the element at a specified position */ +void printAt(BreakIterator &boundary, int32_t pos ) +{ + int32_t end = boundary.following(pos); + int32_t start = boundary.previous(); + printTextRange( boundary, start, end ); +} + +/* Creating and using text boundaries */ +int main( void ) +{ + puts("ICU Break Iterator Sample Program\n"); + puts("C++ Break Iteration\n"); + BreakIterator* boundary; + UnicodeString stringToExamine("Aaa bbb ccc. Ddd eee fff."); + printf("Examining: "); + printUnicodeString(stringToExamine); + puts(""); + + //print each sentence in forward and reverse order + UErrorCode status = U_ZERO_ERROR; + boundary = BreakIterator::createSentenceInstance( + Locale::getUS(), status ); + if (U_FAILURE(status)) { + printf("failed to create sentence break iterator. status = %s", + u_errorName(status)); + exit(1); + } + + boundary->setText(stringToExamine); + puts("\n Sentence Boundaries... "); + puts("----- forward: -----------"); + printEachForward(*boundary); + puts("----- backward: ----------"); + printEachBackward(*boundary); + delete boundary; + + //print each word in order + printf("\n Word Boundaries... \n"); + boundary = BreakIterator::createWordInstance( + Locale::getUS(), status); + boundary->setText(stringToExamine); + puts("----- forward: -----------"); + printEachForward(*boundary); + //print first element + puts("----- first: -------------"); + printFirst(*boundary); + //print last element + puts("----- last: --------------"); + printLast(*boundary); + //print word at charpos 10 + puts("----- at pos 10: ---------"); + printAt(*boundary, 10 ); + + delete boundary; + + puts("\nEnd C++ Break Iteration"); + + // Call the C version + return c_main(); +} |