Home | History | Annotate | Download | only in break
      1 /*
      2 *******************************************************************************
      3 *
      4 *   Copyright (C) 2002, International Business Machines
      5 *   Corporation and others.  All Rights Reserved.
      6 *
      7 *******************************************************************************
      8 */
      9 
     10 #include <stdio.h>
     11 #include <stdlib.h>
     12 #include <unicode/ustring.h>
     13 #include <unicode/ubrk.h>
     14 
     15 U_CFUNC int c_main(void);
     16 
     17 void printTextRange(UChar* str, int32_t start, int32_t end)
     18 {
     19   char    charBuf[1000];
     20   UChar   savedEndChar;
     21 
     22   savedEndChar = str[end];
     23   str[end] = 0;
     24   u_austrncpy(charBuf, str+start, sizeof(charBuf)-1);
     25   charBuf[sizeof(charBuf)-1]=0;
     26   printf("string[%2d..%2d] \"%s\"\n", start, end-1, charBuf);
     27   str[end] = savedEndChar;
     28 }
     29 
     30 
     31 
     32 /* Print each element in order: */
     33 void printEachForward( UBreakIterator* boundary, UChar* str) {
     34   int32_t end;
     35   int32_t start = ubrk_first(boundary);
     36   for (end = ubrk_next(boundary); end != UBRK_DONE; start = end, end =
     37 	 ubrk_next(boundary)) {
     38     printTextRange(str, start, end );
     39   }
     40 }
     41 
     42 
     43 /* Print each element in reverse order: */
     44 void printEachBackward( UBreakIterator* boundary, UChar* str) {
     45   int32_t start;
     46   int32_t end = ubrk_last(boundary);
     47   for (start = ubrk_previous(boundary); start != UBRK_DONE;  end = start,
     48 	 start =ubrk_previous(boundary)) {
     49     printTextRange( str, start, end );
     50   }
     51 }
     52 
     53 /* Print first element */
     54 void printFirst(UBreakIterator* boundary, UChar* str) {
     55   int32_t end;
     56   int32_t start = ubrk_first(boundary);
     57   end = ubrk_next(boundary);
     58   printTextRange( str, start, end );
     59 }
     60 
     61 /* Print last element */
     62 void printLast(UBreakIterator* boundary, UChar* str) {
     63   int32_t start;
     64   int32_t end = ubrk_last(boundary);
     65   start = ubrk_previous(boundary);
     66   printTextRange(str, start, end );
     67 }
     68 
     69 /* Print the element at a specified position */
     70 
     71 void printAt(UBreakIterator* boundary, int32_t pos , UChar* str) {
     72   int32_t start;
     73   int32_t end = ubrk_following(boundary, pos);
     74   start = ubrk_previous(boundary);
     75   printTextRange(str, start, end );
     76 }
     77 
     78 /* Creating and using text boundaries*/
     79 
     80 int c_main( void ) {
     81   UBreakIterator *boundary;
     82   char           cStringToExamine[] = "Aaa bbb ccc. Ddd eee fff.";
     83   UChar          stringToExamine[sizeof(cStringToExamine)+1];
     84   UErrorCode     status = U_ZERO_ERROR;
     85 
     86   printf("\n\n"
     87 	 "C Boundary Analysis\n"
     88 	 "-------------------\n\n");
     89 
     90   printf("Examining: %s\n", cStringToExamine);
     91   u_uastrcpy(stringToExamine, cStringToExamine);
     92 
     93   /*print each sentence in forward and reverse order*/
     94   boundary = ubrk_open(UBRK_SENTENCE, "en_us", stringToExamine,
     95 		       -1, &status);
     96   if (U_FAILURE(status)) {
     97     printf("ubrk_open error: %s\n", u_errorName(status));
     98     exit(1);
     99   }
    100 
    101   printf("\n----- Sentence Boundaries, forward: -----------\n");
    102   printEachForward(boundary, stringToExamine);
    103   printf("\n----- Sentence Boundaries, backward: ----------\n");
    104   printEachBackward(boundary, stringToExamine);
    105   ubrk_close(boundary);
    106 
    107   /*print each word in order*/
    108   boundary = ubrk_open(UBRK_WORD, "en_us", stringToExamine,
    109 		       u_strlen(stringToExamine), &status);
    110   printf("\n----- Word Boundaries, forward: -----------\n");
    111   printEachForward(boundary, stringToExamine);
    112   printf("\n----- Word Boundaries, backward: ----------\n");
    113   printEachBackward(boundary, stringToExamine);
    114   /*print first element*/
    115   printf("\n----- first: -------------\n");
    116   printFirst(boundary, stringToExamine);
    117   /*print last element*/
    118   printf("\n----- last: --------------\n");
    119   printLast(boundary, stringToExamine);
    120   /*print word at charpos 10 */
    121   printf("\n----- at pos 10: ---------\n");
    122   printAt(boundary, 10 , stringToExamine);
    123 
    124   ubrk_close(boundary);
    125 
    126   printf("\nEnd of C boundary analysis\n");
    127   return 0;
    128 }
    129