(linenum→info "unix/slp.c:2238")

glibc/2.7/manual/ctype.texi

    1: @node Character Handling, String and Array Utilities, Memory, Top
    2: @c %MENU% Character testing and conversion functions
    3: @chapter Character Handling
    4: 
    5: Programs that work with characters and strings often need to classify a
    6: character---is it alphabetic, is it a digit, is it whitespace, and so
    7: on---and perform case conversion operations on characters.  The
    8: functions in the header file @file{ctype.h} are provided for this
    9: purpose.
   10: @pindex ctype.h
   11: 
   12: Since the choice of locale and character set can alter the
   13: classifications of particular character codes, all of these functions
   14: are affected by the current locale.  (More precisely, they are affected
   15: by the locale currently selected for character classification---the
   16: @code{LC_CTYPE} category; see @ref{Locale Categories}.)
   17: 
   18: The @w{ISO C} standard specifies two different sets of functions.  The
   19: one set works on @code{char} type characters, the other one on
   20: @code{wchar_t} wide characters (@pxref{Extended Char Intro}).
   21: 
   22: @menu
   23: * Classification of Characters::       Testing whether characters are
   24:                                         letters, digits, punctuation, etc.
   25: 
   26: * Case Conversion::                    Case mapping, and the like.
   27: * Classification of Wide Characters::  Character class determination for
   28:                                         wide characters.
   29: * Using Wide Char Classes::            Notes on using the wide character
   30:                                         classes.
   31: * Wide Character Case Conversion::     Mapping of wide characters.
   32: @end menu
   33: 
   34: @node Classification of Characters, Case Conversion,  , Character Handling
   35: @section Classification of Characters
   36: @cindex character testing
   37: @cindex classification of characters
   38: @cindex predicates on characters
   39: @cindex character predicates
   40: 
   41: This section explains the library functions for classifying characters.
   42: For example, @code{isalpha} is the function to test for an alphabetic
   43: character.  It takes one argument, the character to test, and returns a
   44: nonzero integer if the character is alphabetic, and zero otherwise.  You
   45: would use it like this:
   46: 
   47: @smallexample
   48: if (isalpha (c))
   49:   printf ("The character `%c' is alphabetic.\n", c);
   50: @end smallexample
   51: 
   52: Each of the functions in this section tests for membership in a
   53: particular class of characters; each has a name starting with @samp{is}.
   54: Each of them takes one argument, which is a character to test, and
   55: returns an @code{int} which is treated as a boolean value.  The
   56: character argument is passed as an @code{int}, and it may be the
   57: constant value @code{EOF} instead of a real character.
   58: 
   59: The attributes of any given character can vary between locales.
   60: @xref{Locales}, for more information on locales.@refill
   61: 
   62: These functions are declared in the header file @file{ctype.h}.
   63: @pindex ctype.h
   64: 
   65: @cindex lower-case character
   66: @comment ctype.h
   67: @comment ISO
   68: @deftypefun int islower (int @var{c})
   69: Returns true if @var{c} is a lower-case letter.  The letter need not be
   70: from the Latin alphabet, any alphabet representable is valid.
   71: @end deftypefun
   72: 
   73: @cindex upper-case character
   74: @comment ctype.h
   75: @comment ISO
   76: @deftypefun int isupper (int @var{c})
   77: Returns true if @var{c} is an upper-case letter.  The letter need not be
   78: from the Latin alphabet, any alphabet representable is valid.
   79: @end deftypefun
   80: 
   81: @cindex alphabetic character
   82: @comment ctype.h
   83: @comment ISO
   84: @deftypefun int isalpha (int @var{c})
   85: Returns true if @var{c} is an alphabetic character (a letter).  If
   86: @code{islower} or @code{isupper} is true of a character, then
   87: @code{isalpha} is also true.
   88: 
   89: In some locales, there may be additional characters for which
   90: @code{isalpha} is true---letters which are neither upper case nor lower
   91: case.  But in the standard @code{"C"} locale, there are no such
   92: additional characters.
   93: @end deftypefun
   94: 
   95: @cindex digit character
   96: @cindex decimal digit character
   97: @comment ctype.h
   98: @comment ISO
   99: @deftypefun int isdigit (int @var{c})
  100: Returns true if @var{c} is a decimal digit (@samp{0} through @samp{9}).
  101: @end deftypefun
  102: 
  103: @cindex alphanumeric character
  104: @comment ctype.h
  105: @comment ISO
  106: @deftypefun int isalnum (int @var{c})
  107: Returns true if @var{c} is an alphanumeric character (a letter or
  108: number); in other words, if either @code{isalpha} or @code{isdigit} is
  109: true of a character, then @code{isalnum} is also true.
  110: @end deftypefun
  111: 
  112: @cindex hexadecimal digit character
  113: @comment ctype.h
  114: @comment ISO
  115: @deftypefun int isxdigit (int @var{c})
  116: Returns true if @var{c} is a hexadecimal digit.
  117: Hexadecimal digits include the normal decimal digits @samp{0} through
  118: @samp{9} and the letters @samp{A} through @samp{F} and
  119: @samp{a} through @samp{f}.
  120: @end deftypefun
  121: 
  122: @cindex punctuation character
  123: @comment ctype.h
  124: @comment ISO
  125: @deftypefun int ispunct (int @var{c})
  126: Returns true if @var{c} is a punctuation character.
  127: This means any printing character that is not alphanumeric or a space
  128: character.
  129: @end deftypefun
  130: 
  131: @cindex whitespace character
  132: @comment ctype.h
  133: @comment ISO
  134: @deftypefun int isspace (int @var{c})
  135: Returns true if @var{c} is a @dfn{whitespace} character.  In the standard
  136: @code{"C"} locale, @code{isspace} returns true for only the standard
  137: whitespace characters:
  138: 
  139: @table @code
  140: @item ' '
  141: space
  142: 
  143: @item '\f'
  144: formfeed
  145: 
  146: @item '\n'
  147: newline
  148: 
  149: @item '\r'
  150: carriage return
  151: 
  152: @item '\t'
  153: horizontal tab
  154: 
  155: @item '\v'
  156: vertical tab
  157: @end table
  158: @end deftypefun
  159: 
  160: @cindex blank character
  161: @comment ctype.h
  162: @comment ISO
  163: @deftypefun int isblank (int @var{c})
  164: Returns true if @var{c} is a blank character; that is, a space or a tab.
  165: This function was originally a GNU extension, but was added in @w{ISO C99}.
  166: @end deftypefun
  167: 
  168: @cindex graphic character
  169: @comment ctype.h
  170: @comment ISO
  171: @deftypefun int isgraph (int @var{c})
  172: Returns true if @var{c} is a graphic character; that is, a character
  173: that has a glyph associated with it.  The whitespace characters are not
  174: considered graphic.
  175: @end deftypefun
  176: 
  177: @cindex printing character
  178: @comment ctype.h
  179: @comment ISO
  180: @deftypefun int isprint (int @var{c})
  181: Returns true if @var{c} is a printing character.  Printing characters
  182: include all the graphic characters, plus the space (@samp{ }) character.
  183: @end deftypefun
  184: 
  185: @cindex control character
  186: @comment ctype.h
  187: @comment ISO
  188: @deftypefun int iscntrl (int @var{c})
  189: Returns true if @var{c} is a control character (that is, a character that
  190: is not a printing character).
  191: @end deftypefun
  192: 
  193: @cindex ASCII character
  194: @comment ctype.h
  195: @comment SVID, BSD
  196: @deftypefun int isascii (int @var{c})
  197: Returns true if @var{c} is a 7-bit @code{unsigned char} value that fits
  198: into the US/UK ASCII character set.  This function is a BSD extension
  199: and is also an SVID extension.
  200: @end deftypefun
  201: 
  202: @node Case Conversion, Classification of Wide Characters, Classification of Characters, Character Handling
  203: @section Case Conversion
  204: @cindex character case conversion
  205: @cindex case conversion of characters
  206: @cindex converting case of characters
  207: 
  208: This section explains the library functions for performing conversions
  209: such as case mappings on characters.  For example, @code{toupper}
  210: converts any character to upper case if possible.  If the character
  211: can't be converted, @code{toupper} returns it unchanged.
  212: 
  213: These functions take one argument of type @code{int}, which is the
  214: character to convert, and return the converted character as an
  215: @code{int}.  If the conversion is not applicable to the argument given,
  216: the argument is returned unchanged.
  217: 
  218: @strong{Compatibility Note:} In pre-@w{ISO C} dialects, instead of
  219: returning the argument unchanged, these functions may fail when the
  220: argument is not suitable for the conversion.  Thus for portability, you
  221: may need to write @code{islower(c) ? toupper(c) : c} rather than just
  222: @code{toupper(c)}.
  223: 
  224: These functions are declared in the header file @file{ctype.h}.
  225: @pindex ctype.h
  226: 
  227: @comment ctype.h
  228: @comment ISO
  229: @deftypefun int tolower (int @var{c})
  230: If @var{c} is an upper-case letter, @code{tolower} returns the corresponding
  231: lower-case letter.  If @var{c} is not an upper-case letter,
  232: @var{c} is returned unchanged.
  233: @end deftypefun
  234: 
  235: @comment ctype.h
  236: @comment ISO
  237: @deftypefun int toupper (int @var{c})
  238: If @var{c} is a lower-case letter, @code{toupper} returns the corresponding
  239: upper-case letter.  Otherwise @var{c} is returned unchanged.
  240: @end deftypefun
  241: 
  242: @comment ctype.h
  243: @comment SVID, BSD
  244: @deftypefun int toascii (int @var{c})
  245: This function converts @var{c} to a 7-bit @code{unsigned char} value
  246: that fits into the US/UK ASCII character set, by clearing the high-order
  247: bits.  This function is a BSD extension and is also an SVID extension.
  248: @end deftypefun
  249: 
  250: @comment ctype.h
  251: @comment SVID
  252: @deftypefun int _tolower (int @var{c})
  253: This is identical to @code{tolower}, and is provided for compatibility
  254: with the SVID.  @xref{SVID}.@refill
  255: @end deftypefun
  256: 
  257: @comment ctype.h
  258: @comment SVID
  259: @deftypefun int _toupper (int @var{c})
  260: This is identical to @code{toupper}, and is provided for compatibility
  261: with the SVID.
  262: @end deftypefun
  263: 
  264: 
  265: @node Classification of Wide Characters, Using Wide Char Classes, Case Conversion, Character Handling
  266: @section Character class determination for wide characters
  267: 
  268: @w{Amendment 1} to @w{ISO C90} defines functions to classify wide
  269: characters.  Although the original @w{ISO C90} standard already defined
  270: the type @code{wchar_t}, no functions operating on them were defined.
  271: 
  272: The general design of the classification functions for wide characters
  273: is more general.  It allows extensions to the set of available
  274: classifications, beyond those which are always available.  The POSIX
  275: standard specifies how extensions can be made, and this is already
  276: implemented in the GNU C library implementation of the @code{localedef}
  277: program.
  278: 
  279: The character class functions are normally implemented with bitsets,
  280: with a bitset per character.  For a given character, the appropriate
  281: bitset is read from a table and a test is performed as to whether a
  282: certain bit is set.  Which bit is tested for is determined by the
  283: class.
  284: 
  285: For the wide character classification functions this is made visible.
  286: There is a type classification type defined, a function to retrieve this
  287: value for a given class, and a function to test whether a given
  288: character is in this class, using the classification value.  On top of
  289: this the normal character classification functions as used for
  290: @code{char} objects can be defined.
  291: 
  292: @comment wctype.h
  293: @comment ISO
  294: @deftp {Data type} wctype_t
  295: The @code{wctype_t} can hold a value which represents a character class.
  296: The only defined way to generate such a value is by using the
  297: @code{wctype} function.
  298: 
  299: @pindex wctype.h
  300: This type is defined in @file{wctype.h}.
  301: @end deftp
  302: 
  303: @comment wctype.h
  304: @comment ISO
  305: @deftypefun wctype_t wctype (const char *@var{property})
  306: The @code{wctype} returns a value representing a class of wide
  307: characters which is identified by the string @var{property}.  Beside
  308: some standard properties each locale can define its own ones.  In case
  309: no property with the given name is known for the current locale
  310: selected for the @code{LC_CTYPE} category, the function returns zero.
  311: 
  312: @noindent
  313: The properties known in every locale are:
  314: 
  315: @multitable @columnfractions .25 .25 .25 .25
  316: @item
  317: @code{"alnum"} @tab @code{"alpha"} @tab @code{"cntrl"} @tab @code{"digit"}
  318: @item
  319: @code{"graph"} @tab @code{"lower"} @tab @code{"print"} @tab @code{"punct"}
  320: @item
  321: @code{"space"} @tab @code{"upper"} @tab @code{"xdigit"}
  322: @end multitable
  323: 
  324: @pindex wctype.h
  325: This function is declared in @file{wctype.h}.
  326: @end deftypefun
  327: 
  328: To test the membership of a character to one of the non-standard classes
  329: the @w{ISO C} standard defines a completely new function.
  330: 
  331: @comment wctype.h
  332: @comment ISO
  333: @deftypefun int iswctype (wint_t @var{wc}, wctype_t @var{desc})
  334: This function returns a nonzero value if @var{wc} is in the character
  335: class specified by @var{desc}.  @var{desc} must previously be returned
  336: by a successful call to @code{wctype}.
  337: 
  338: @pindex wctype.h
  339: This function is declared in @file{wctype.h}.
  340: @end deftypefun
  341: 
  342: To make it easier to use the commonly-used classification functions,
  343: they are defined in the C library.  There is no need to use
  344: @code{wctype} if the property string is one of the known character
  345: classes.  In some situations it is desirable to construct the property
  346: strings, and then it is important that @code{wctype} can also handle the
  347: standard classes.
  348: 
  349: @cindex alphanumeric character
  350: @comment wctype.h
  351: @comment ISO
  352: @deftypefun int iswalnum (wint_t @var{wc})
  353: This function returns a nonzero value if @var{wc} is an alphanumeric
  354: character (a letter or number); in other words, if either @code{iswalpha}
  355: or @code{iswdigit} is true of a character, then @code{iswalnum} is also
  356: true.
  357: 
  358: @noindent
  359: This function can be implemented using
  360: 
  361: @smallexample
  362: iswctype (wc, wctype ("alnum"))
  363: @end smallexample
  364: 
  365: @pindex wctype.h
  366: It is declared in @file{wctype.h}.
  367: @end deftypefun
  368: 
  369: @cindex alphabetic character
  370: @comment wctype.h
  371: @comment ISO
  372: @deftypefun int iswalpha (wint_t @var{wc})
  373: Returns true if @var{wc} is an alphabetic character (a letter).  If
  374: @code{iswlower} or @code{iswupper} is true of a character, then
  375: @code{iswalpha} is also true.
  376: 
  377: In some locales, there may be additional characters for which
  378: @code{iswalpha} is true---letters which are neither upper case nor lower
  379: case.  But in the standard @code{"C"} locale, there are no such
  380: additional characters.
  381: 
  382: @noindent
  383: This function can be implemented using
  384: 
  385: @smallexample
  386: iswctype (wc, wctype ("alpha"))
  387: @end smallexample
  388: 
  389: @pindex wctype.h
  390: It is declared in @file{wctype.h}.
  391: @end deftypefun
  392: 
  393: @cindex control character
  394: @comment wctype.h
  395: @comment ISO
  396: @deftypefun int iswcntrl (wint_t @var{wc})
  397: Returns true if @var{wc} is a control character (that is, a character that
  398: is not a printing character).
  399: 
  400: @noindent
  401: This function can be implemented using
  402: 
  403: @smallexample
  404: iswctype (wc, wctype ("cntrl"))
  405: @end smallexample
  406: 
  407: @pindex wctype.h
  408: It is declared in @file{wctype.h}.
  409: @end deftypefun
  410: 
  411: @cindex digit character
  412: @comment wctype.h
  413: @comment ISO
  414: @deftypefun int iswdigit (wint_t @var{wc})
  415: Returns true if @var{wc} is a digit (e.g., @samp{0} through @samp{9}).
  416: Please note that this function does not only return a nonzero value for
  417: @emph{decimal} digits, but for all kinds of digits.  A consequence is
  418: that code like the following will @strong{not} work unconditionally for
  419: wide characters:
  420: 
  421: @smallexample
  422: n = 0;
  423: while (iswdigit (*wc))
  424:   @{
  425:     n *= 10;
  426:     n += *wc++ - L'0';
  427:   @}
  428: @end smallexample
  429: 
  430: @noindent
  431: This function can be implemented using
  432: 
  433: @smallexample
  434: iswctype (wc, wctype ("digit"))
  435: @end smallexample
  436: 
  437: @pindex wctype.h
  438: It is declared in @file{wctype.h}.
  439: @end deftypefun
  440: 
  441: @cindex graphic character
  442: @comment wctype.h
  443: @comment ISO
  444: @deftypefun int iswgraph (wint_t @var{wc})
  445: Returns true if @var{wc} is a graphic character; that is, a character
  446: that has a glyph associated with it.  The whitespace characters are not
  447: considered graphic.
  448: 
  449: @noindent
  450: This function can be implemented using
  451: 
  452: @smallexample
  453: iswctype (wc, wctype ("graph"))
  454: @end smallexample
  455: 
  456: @pindex wctype.h
  457: It is declared in @file{wctype.h}.
  458: @end deftypefun
  459: 
  460: @cindex lower-case character
  461: @comment ctype.h
  462: @comment ISO
  463: @deftypefun int iswlower (wint_t @var{wc})
  464: Returns true if @var{wc} is a lower-case letter.  The letter need not be
  465: from the Latin alphabet, any alphabet representable is valid.
  466: 
  467: @noindent
  468: This function can be implemented using
  469: 
  470: @smallexample
  471: iswctype (wc, wctype ("lower"))
  472: @end smallexample
  473: 
  474: @pindex wctype.h
  475: It is declared in @file{wctype.h}.
  476: @end deftypefun
  477: 
  478: @cindex printing character
  479: @comment wctype.h
  480: @comment ISO
  481: @deftypefun int iswprint (wint_t @var{wc})
  482: Returns true if @var{wc} is a printing character.  Printing characters
  483: include all the graphic characters, plus the space (@samp{ }) character.
  484: 
  485: @noindent
  486: This function can be implemented using
  487: 
  488: @smallexample
  489: iswctype (wc, wctype ("print"))
  490: @end smallexample
  491: 
  492: @pindex wctype.h
  493: It is declared in @file{wctype.h}.
  494: @end deftypefun
  495: 
  496: @cindex punctuation character
  497: @comment wctype.h
  498: @comment ISO
  499: @deftypefun int iswpunct (wint_t @var{wc})
  500: Returns true if @var{wc} is a punctuation character.
  501: This means any printing character that is not alphanumeric or a space
  502: character.
  503: 
  504: @noindent
  505: This function can be implemented using
  506: 
  507: @smallexample
  508: iswctype (wc, wctype ("punct"))
  509: @end smallexample
  510: 
  511: @pindex wctype.h
  512: It is declared in @file{wctype.h}.
  513: @end deftypefun
  514: 
  515: @cindex whitespace character
  516: @comment wctype.h
  517: @comment ISO
  518: @deftypefun int iswspace (wint_t @var{wc})
  519: Returns true if @var{wc} is a @dfn{whitespace} character.  In the standard
  520: @code{"C"} locale, @code{iswspace} returns true for only the standard
  521: whitespace characters:
  522: 
  523: @table @code
  524: @item L' '
  525: space
  526: 
  527: @item L'\f'
  528: formfeed
  529: 
  530: @item L'\n'
  531: newline
  532: 
  533: @item L'\r'
  534: carriage return
  535: 
  536: @item L'\t'
  537: horizontal tab
  538: 
  539: @item L'\v'
  540: vertical tab
  541: @end table
  542: 
  543: @noindent
  544: This function can be implemented using
  545: 
  546: @smallexample
  547: iswctype (wc, wctype ("space"))
  548: @end smallexample
  549: 
  550: @pindex wctype.h
  551: It is declared in @file{wctype.h}.
  552: @end deftypefun
  553: 
  554: @cindex upper-case character
  555: @comment wctype.h
  556: @comment ISO
  557: @deftypefun int iswupper (wint_t @var{wc})
  558: Returns true if @var{wc} is an upper-case letter.  The letter need not be
  559: from the Latin alphabet, any alphabet representable is valid.
  560: 
  561: @noindent
  562: This function can be implemented using
  563: 
  564: @smallexample
  565: iswctype (wc, wctype ("upper"))
  566: @end smallexample
  567: 
  568: @pindex wctype.h
  569: It is declared in @file{wctype.h}.
  570: @end deftypefun
  571: 
  572: @cindex hexadecimal digit character
  573: @comment wctype.h
  574: @comment ISO
  575: @deftypefun int iswxdigit (wint_t @var{wc})
  576: Returns true if @var{wc} is a hexadecimal digit.
  577: Hexadecimal digits include the normal decimal digits @samp{0} through
  578: @samp{9} and the letters @samp{A} through @samp{F} and
  579: @samp{a} through @samp{f}.
  580: 
  581: @noindent
  582: This function can be implemented using
  583: 
  584: @smallexample
  585: iswctype (wc, wctype ("xdigit"))
  586: @end smallexample
  587: 
  588: @pindex wctype.h
  589: It is declared in @file{wctype.h}.
  590: @end deftypefun
  591: 
  592: The GNU C library also provides a function which is not defined in the
  593: @w{ISO C} standard but which is available as a version for single byte
  594: characters as well.
  595: 
  596: @cindex blank character
  597: @comment wctype.h
  598: @comment ISO
  599: @deftypefun int iswblank (wint_t @var{wc})
  600: Returns true if @var{wc} is a blank character; that is, a space or a tab.
  601: This function was originally a GNU extension, but was added in @w{ISO C99}.
  602: It is declared in @file{wchar.h}.
  603: @end deftypefun
  604: 
  605: @node Using Wide Char Classes, Wide Character Case Conversion, Classification of Wide Characters, Character Handling
  606: @section Notes on using the wide character classes
  607: 
  608: The first note is probably not astonishing but still occasionally a
  609: cause of problems.  The @code{isw@var{XXX}} functions can be implemented
  610: using macros and in fact, the GNU C library does this.  They are still
  611: available as real functions but when the @file{wctype.h} header is
  612: included the macros will be used.  This is the same as the
  613: @code{char} type versions of these functions.
  614: 
  615: The second note covers something new.  It can be best illustrated by a
  616: (real-world) example.  The first piece of code is an excerpt from the
  617: original code.  It is truncated a bit but the intention should be clear.
  618: 
  619: @smallexample
  620: int
  621: is_in_class (int c, const char *class)
  622: @{
  623:   if (strcmp (class, "alnum") == 0)
  624:     return isalnum (c);
  625:   if (strcmp (class, "alpha") == 0)
  626:     return isalpha (c);
  627:   if (strcmp (class, "cntrl") == 0)
  628:     return iscntrl (c);
  629:   @dots{}
  630:   return 0;
  631: @}
  632: @end smallexample
  633: 
  634: Now, with the @code{wctype} and @code{iswctype} you can avoid the
  635: @code{if} cascades, but rewriting the code as follows is wrong:
  636: 
  637: @smallexample
  638: int
  639: is_in_class (int c, const char *class)
  640: @{
  641:   wctype_t desc = wctype (class);
  642:   return desc ? iswctype ((wint_t) c, desc) : 0;
  643: @}
  644: @end smallexample
  645: 
  646: The problem is that it is not guaranteed that the wide character
  647: representation of a single-byte character can be found using casting.
  648: In fact, usually this fails miserably.  The correct solution to this
  649: problem is to write the code as follows:
  650: 
  651: @smallexample
  652: int
  653: is_in_class (int c, const char *class)
  654: @{
  655:   wctype_t desc = wctype (class);
  656:   return desc ? iswctype (btowc (c), desc) : 0;
  657: @}
  658: @end smallexample
  659: 
  660: @xref{Converting a Character}, for more information on @code{btowc}.
  661: Note that this change probably does not improve the performance
  662: of the program a lot since the @code{wctype} function still has to make
  663: the string comparisons.  It gets really interesting if the
  664: @code{is_in_class} function is called more than once for the
  665: same class name.  In this case the variable @var{desc} could be computed
  666: once and reused for all the calls.  Therefore the above form of the
  667: function is probably not the final one.
  668: 
  669: 
  670: @node Wide Character Case Conversion, , Using Wide Char Classes, Character Handling
  671: @section Mapping of wide characters.
  672: 
  673: The classification functions are also generalized by the @w{ISO C}
  674: standard.  Instead of just allowing the two standard mappings, a
  675: locale can contain others.  Again, the @code{localedef} program
  676: already supports generating such locale data files.
  677: 
  678: @comment wctype.h
  679: @comment ISO
  680: @deftp {Data Type} wctrans_t
  681: This data type is defined as a scalar type which can hold a value
  682: representing the locale-dependent character mapping.  There is no way to
  683: construct such a value apart from using the return value of the
  684: @code{wctrans} function.
  685: 
  686: @pindex wctype.h
  687: @noindent
  688: This type is defined in @file{wctype.h}.
  689: @end deftp
  690: 
  691: @comment wctype.h
  692: @comment ISO
  693: @deftypefun wctrans_t wctrans (const char *@var{property})
  694: The @code{wctrans} function has to be used to find out whether a named
  695: mapping is defined in the current locale selected for the
  696: @code{LC_CTYPE} category.  If the returned value is non-zero, you can use
  697: it afterwards in calls to @code{towctrans}.  If the return value is
  698: zero no such mapping is known in the current locale.
  699: 
  700: Beside locale-specific mappings there are two mappings which are
  701: guaranteed to be available in every locale:
  702: 
  703: @multitable @columnfractions .5 .5
  704: @item
  705: @code{"tolower"} @tab @code{"toupper"}
  706: @end multitable
  707: 
  708: @pindex wctype.h
  709: @noindent
  710: These functions are declared in @file{wctype.h}.
  711: @end deftypefun
  712: 
  713: @comment wctype.h
  714: @comment ISO
  715: @deftypefun wint_t towctrans (wint_t @var{wc}, wctrans_t @var{desc})
  716: @code{towctrans} maps the input character @var{wc}
  717: according to the rules of the mapping for which @var{desc} is a
  718: descriptor, and returns the value it finds.  @var{desc} must be
  719: obtained by a successful call to @code{wctrans}.
  720: 
  721: @pindex wctype.h
  722: @noindent
  723: This function is declared in @file{wctype.h}.
  724: @end deftypefun
  725: 
  726: For the generally available mappings, the @w{ISO C} standard defines
  727: convenient shortcuts so that it is not necessary to call @code{wctrans}
  728: for them.
  729: 
  730: @comment wctype.h
  731: @comment ISO
  732: @deftypefun wint_t towlower (wint_t @var{wc})
  733: If @var{wc} is an upper-case letter, @code{towlower} returns the corresponding
  734: lower-case letter.  If @var{wc} is not an upper-case letter,
  735: @var{wc} is returned unchanged.
  736: 
  737: @noindent
  738: @code{towlower} can be implemented using
  739: 
  740: @smallexample
  741: towctrans (wc, wctrans ("tolower"))
  742: @end smallexample
  743: 
  744: @pindex wctype.h
  745: @noindent
  746: This function is declared in @file{wctype.h}.
  747: @end deftypefun
  748: 
  749: @comment wctype.h
  750: @comment ISO
  751: @deftypefun wint_t towupper (wint_t @var{wc})
  752: If @var{wc} is a lower-case letter, @code{towupper} returns the corresponding
  753: upper-case letter.  Otherwise @var{wc} is returned unchanged.
  754: 
  755: @noindent
  756: @code{towupper} can be implemented using
  757: 
  758: @smallexample
  759: towctrans (wc, wctrans ("toupper"))
  760: @end smallexample
  761: 
  762: @pindex wctype.h
  763: @noindent
  764: This function is declared in @file{wctype.h}.
  765: @end deftypefun
  766: 
  767: The same warnings given in the last section for the use of the wide
  768: character classification functions apply here.  It is not possible to
  769: simply cast a @code{char} type value to a @code{wint_t} and use it as an
  770: argument to @code{towctrans} calls.
1
Syntax (Markdown)