1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*******************************************************************************
3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   Copyright (C) 2003-2004, International Business Machines
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru****
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   Case folding examples, in C
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*******************************************************************************
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/uchar.h"
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h"
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h"
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustdio.h"
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Note: don't use 'k' or 'K' because we might be on EBCDIC */
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint c_main(UFILE *out)
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  UChar32 ch;
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  UErrorCode errorCode = U_ZERO_ERROR;
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  static const UChar upper[] = {0x61, 0x42, 0x49, 0}; /* upper = "aBI" */
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  static const UChar lower[] = {0x61, 0x42, 0x69, 0}; /* lower = "abi" */
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* unfold = "aB LATIN SMALL LETTER DOTLESS I" */
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  static const UChar unfold[] = {0x61, 0x42, 0x131, 0} ;
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  UChar buffer[32];
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  const UChar char_k = 0x006b; /* 'k' */
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  const UChar char_K = 0x004b; /* 'K' */
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  int length;
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  printf("** C Case Mapping Sample\n");
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* uchar.h APIs, single character case mapping */
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  ch = u_toupper(char_k); /* ch = 'K' */
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  u_fprintf(out, "toupper(%C) = %C\n", char_k, ch);
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  ch = u_tolower(ch); /* ch = 'k' */
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  u_fprintf(out, "tolower() = %C\n", ch);
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  ch = u_totitle(char_k); /* ch = 'K' */
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  u_fprintf(out, "totitle(%C) = %C\n", char_k, ch);
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  ch = u_foldCase(char_K, U_FOLD_CASE_DEFAULT); /* ch = 'k' */
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  u_fprintf(out, "u_foldCase(%C, U_FOLD_CASE_DEFAULT) = %C\n", char_K, (UChar) ch);
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* ustring.h APIs, UChar * string case mapping with a Turkish locale */
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* result buffer = "ab?" latin small letter a, latin small letter b, latin
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     small letter dotless i */
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  length = u_strToLower(buffer, sizeof(buffer)/sizeof(buffer[0]), upper,
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        sizeof(upper)/sizeof(upper[0]), "tr", &errorCode);
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  if(U_FAILURE(errorCode) || buffer[length]!=0) {
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    u_fprintf(out, "error in u_strToLower(Turkish locale)=%ld error=%s\n", length,
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru           u_errorName(errorCode));
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  u_fprintf(out, "u_strToLower(%S, turkish) -> %S\n", upper, buffer);
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* ustring.h APIs, UChar * string case mapping with a Engish locale */
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* result buffer = "ABI" latin CAPITAL letter A, latin capital letter B,
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     latin capital letter I */
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  length = u_strToUpper(buffer, sizeof(buffer)/sizeof(buffer[0]), upper,
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        sizeof(upper)/sizeof(upper[0]), "en", &errorCode);
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  if(U_FAILURE(errorCode) || buffer[length]!=0) {
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    u_fprintf(out, "error in u_strToLower(English locale)=%ld error=%s\n", length,
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru              u_errorName(errorCode));
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  u_fprintf(out, "u_strToUpper(%S, english) -> %S\n", lower, buffer);
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* ustring.h APIs, UChar * string case folding */
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* result buffer = "abi" */
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  length = u_strFoldCase(buffer, sizeof(buffer)/sizeof(buffer[0]), unfold,
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                         sizeof(unfold)/sizeof(unfold[0]), U_FOLD_CASE_DEFAULT,
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                         &errorCode);
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  if(U_FAILURE(errorCode) || buffer[length]!=0) {
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    u_fprintf(out, "error in u_strFoldCase()=%ld error=%s\n", length,
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru           u_errorName(errorCode));
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  u_fprintf(out, "u_strFoldCase(%S, U_FOLD_CASE_DEFAULT) -> %S\n", unfold, buffer);
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  u_fprintf(out, "\n** end of C sample\n");
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return 0;
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
86