mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-03 21:17:23 +01:00 
			
		
		
		
	git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12153 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			344 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			344 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/** @file
 | 
						|
    Wide character classification and mapping utilities.
 | 
						|
 | 
						|
    The following macros are defined in this file:<BR>
 | 
						|
@verbatim
 | 
						|
      WEOF        Wide char version of end-of-file.
 | 
						|
@endverbatim
 | 
						|
 | 
						|
    The following types are defined in this file:<BR>
 | 
						|
@verbatim
 | 
						|
      wint_t      Type capable of holding all wchar_t values and WEOF.
 | 
						|
      wctrans_t   A type for holding locale-specific character mappings.
 | 
						|
      wctype_t    Type for holding locale-specific character classifications.
 | 
						|
@endverbatim
 | 
						|
 | 
						|
    The following functions are declared in this file:<BR>
 | 
						|
@verbatim
 | 
						|
      ###############  Wide Character Classification Functions
 | 
						|
      int           iswalnum  (wint_t);
 | 
						|
      int           iswalpha  (wint_t);
 | 
						|
      int           iswcntrl  (wint_t);
 | 
						|
      int           iswdigit  (wint_t);
 | 
						|
      int           iswgraph  (wint_t);
 | 
						|
      int           iswlower  (wint_t);
 | 
						|
      int           iswprint  (wint_t);
 | 
						|
      int           iswpunct  (wint_t);
 | 
						|
      int           iswblank  (wint_t);
 | 
						|
      int           iswspace  (wint_t);
 | 
						|
      int           iswupper  (wint_t);
 | 
						|
      int           iswxdigit (wint_t);
 | 
						|
 | 
						|
      ###############  Extensible Wide Character Classification Functions
 | 
						|
      wctype_t      wctype    (const char *);
 | 
						|
      int           iswctype  (wint_t, wctype_t);
 | 
						|
 | 
						|
      ###############  Wide Character Case Mapping Utilities
 | 
						|
      wint_t        towlower  (wint_t);
 | 
						|
      wint_t        towupper  (wint_t);
 | 
						|
 | 
						|
      ###############  Extensible Wide Character Case Mapping Utilities
 | 
						|
      wctrans_t     wctrans   (const char *);
 | 
						|
      wint_t        towctrans (wint_t, wctrans_t);
 | 
						|
@endverbatim
 | 
						|
 | 
						|
    Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
 | 
						|
    This program and the accompanying materials are licensed and made available under
 | 
						|
    the terms and conditions of the BSD License that accompanies this distribution.
 | 
						|
    The full text of the license may be found at
 | 
						|
    http://opensource.org/licenses/bsd-license.
 | 
						|
 | 
						|
    THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
    WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
 * Copyright (c)1999 Citrus Project,
 | 
						|
 * All rights reserved.
 | 
						|
 *
 | 
						|
 * Redistribution and use in source and binary forms, with or without
 | 
						|
 * modification, are permitted provided that the following conditions
 | 
						|
 * are met:
 | 
						|
 * 1. Redistributions of source code must retain the above copyright
 | 
						|
 *    notice, this list of conditions and the following disclaimer.
 | 
						|
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
 *    notice, this list of conditions and the following disclaimer in the
 | 
						|
 *    documentation and/or other materials provided with the distribution.
 | 
						|
 *
 | 
						|
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 | 
						|
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
						|
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
						|
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
						|
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
						|
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
						|
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
						|
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
						|
 * SUCH DAMAGE.
 | 
						|
 *
 | 
						|
 *  citrus Id: wctype.h,v 1.4 2000/12/21 01:50:21 itojun Exp
 | 
						|
 | 
						|
    NetBSD: wctype.h,v 1.6 2005/02/03 04:39:32 perry Exp
 | 
						|
**/
 | 
						|
#ifndef _WCTYPE_H_
 | 
						|
#define _WCTYPE_H_
 | 
						|
 | 
						|
#include  <sys/EfiCdefs.h>
 | 
						|
#include  <machine/ansi.h>
 | 
						|
 | 
						|
#ifdef _EFI_WINT_T
 | 
						|
  /** wint_t is an integer type unchanged by default argument promotions that can
 | 
						|
      hold any value corresponding to members of the extended character set, as
 | 
						|
      well as at least one value that does not correspond to any member of the
 | 
						|
      extended character set: WEOF.
 | 
						|
  */
 | 
						|
  typedef _EFI_WINT_T  wint_t;
 | 
						|
  #undef _BSD_WINT_T_
 | 
						|
  #undef _EFI_WINT_T
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef  _BSD_WCTRANS_T_
 | 
						|
  /** A scalar type for holding locale-specific character mappings. */
 | 
						|
  typedef wint_t (*wctrans_t)(wint_t);
 | 
						|
  #undef  _BSD_WCTRANS_T_
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef  _BSD_WCTYPE_T_
 | 
						|
  /** A scalar type capable of holding values representing locale-specific
 | 
						|
      character classifications. */
 | 
						|
  typedef _BSD_WCTYPE_T_  wctype_t;
 | 
						|
  #undef  _BSD_WCTYPE_T_
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef WEOF
 | 
						|
  /** WEOF expands to a constant expression of type wint_t whose value does not
 | 
						|
      correspond to any member of the extended character set. It is accepted
 | 
						|
      (and returned) by several functions, declared in this file, to indicate
 | 
						|
      end-of-file, that is, no more input from a stream. It is also used as a
 | 
						|
      wide character value that does not correspond to any member of the
 | 
						|
      extended character set.
 | 
						|
  */
 | 
						|
  #define WEOF  ((wint_t)-1)
 | 
						|
#endif
 | 
						|
 | 
						|
__BEGIN_DECLS
 | 
						|
  /** Test for any wide character for which iswalpha or iswdigit is TRUE.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswalnum  (wint_t WC);
 | 
						|
 | 
						|
  /** Test for any wide character for which iswupper or iswlower is TRUE,
 | 
						|
      OR, a locale-specific character where none of iswcntrl, iswdigit,
 | 
						|
      iswpunct, or iswspace is TRUE.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswalpha  (wint_t WC);
 | 
						|
 | 
						|
  /** Test for any wide control character.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswcntrl  (wint_t WC);
 | 
						|
 | 
						|
  /** Test if the value of WC is a wide character that corresponds to a decimal digit.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswdigit  (wint_t WC);
 | 
						|
 | 
						|
  /** Test for wide characters for which iswprint is TRUE and iswspace is FALSE.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswgraph  (wint_t WC);
 | 
						|
 | 
						|
  /** The iswlower function tests for any wide character that corresponds to a
 | 
						|
      lowercase letter or is one of a locale-specific set of wide characters
 | 
						|
      for which none of iswcntrl, iswdigit, iswpunct, or iswspace is TRUE.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswlower  (wint_t WC);
 | 
						|
 | 
						|
  /** Test for any printing wide character.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswprint  (wint_t WC);
 | 
						|
 | 
						|
  /** The iswpunct function tests for any printing wide character that is one
 | 
						|
      of a locale-specific set of punctuation wide characters for which
 | 
						|
      neither iswspace nor iswalnum is TRUE.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswpunct  (wint_t WC);
 | 
						|
 | 
						|
  /** Test for standard blank characters or locale-specific characters
 | 
						|
      for which iswspace is TRUE and are used to separate words within a line
 | 
						|
      of text.  In the "C" locale, iswblank only returns TRUE for the standard
 | 
						|
      blank characters space (L' ') and horizontal tab (L'\t').
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswblank  (wint_t WC);
 | 
						|
 | 
						|
  /** The iswspace function tests for any wide character that corresponds to a
 | 
						|
      locale-specific set of white-space wide characters for which none of
 | 
						|
      iswalnum, iswgraph, or iswpunct is TRUE.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswspace  (wint_t WC);
 | 
						|
 | 
						|
  /** Tests for any wide character that corresponds to an uppercase letter or
 | 
						|
      is one of a locale-specific set of wide characters for which none of
 | 
						|
      iswcntrl, iswdigit, iswpunct, or iswspace is TRUE.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswupper  (wint_t WC);
 | 
						|
 | 
						|
  /** The iswxdigit function tests for any wide character that corresponds to a
 | 
						|
      hexadecimal-digit character.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be classified.
 | 
						|
 | 
						|
    @return   Returns non-zero (TRUE) if and only if the value of WC conforms
 | 
						|
              to the classification described for this function.
 | 
						|
  */
 | 
						|
  int           iswxdigit (wint_t WC);
 | 
						|
 | 
						|
  /** Construct a value that describes a class of wide characters, identified
 | 
						|
      by the string pointed to by Desc.  The constructed value is suitable for
 | 
						|
      use as the second argument to the iswctype function.
 | 
						|
 | 
						|
      The following strings name classes of wide characters that the iswctype
 | 
						|
      function is able to test against.  These strings are valid in all locales
 | 
						|
      as Desc arguments to wctype().
 | 
						|
        - "alnum"
 | 
						|
        - "alpha"
 | 
						|
        - "blank"
 | 
						|
        - "cntrl"
 | 
						|
        - "digit"
 | 
						|
        - "graph"
 | 
						|
        - "lower"
 | 
						|
        - "print"
 | 
						|
        - "punct"
 | 
						|
        - "space"
 | 
						|
        - "upper"
 | 
						|
        - "xdigit
 | 
						|
 | 
						|
    @param[in]  Desc    A pointer to a multibyte character string naming a
 | 
						|
                        class of wide characters.
 | 
						|
 | 
						|
    @return   If Desc identifies a valid class of wide characters in the
 | 
						|
              current locale, the wctype function returns a nonzero value that
 | 
						|
              is valid as the second argument to the iswctype function;
 | 
						|
              otherwise, it returns zero.
 | 
						|
  */
 | 
						|
  wctype_t      wctype    (const char *Desc);
 | 
						|
 | 
						|
  /** Determine whether the wide character WC has the property described by Wct.
 | 
						|
 | 
						|
    @param[in]  WC      The wide character to be classified.
 | 
						|
    @param[in]  Wct     A value describing a class of wide characters.
 | 
						|
 | 
						|
    @return   The iswctype function returns nonzero (TRUE) if and only if the
 | 
						|
              value of the wide character WC has the property described by Wct.
 | 
						|
  */
 | 
						|
  int           iswctype  (wint_t WC, wctype_t Wct);
 | 
						|
 | 
						|
  /** Convert an uppercase letter to a corresponding lowercase letter.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be converted.
 | 
						|
 | 
						|
    @return   If the argument is a wide character for which iswupper is TRUE
 | 
						|
              and there are one or more corresponding wide characters, as
 | 
						|
              specified by the current locale, for which iswlower is TRUE, the
 | 
						|
              towlower function returns one of the corresponding wide
 | 
						|
              characters (always the same one for any given locale); otherwise,
 | 
						|
              the argument is returned unchanged.
 | 
						|
  */
 | 
						|
  wint_t        towlower  (wint_t WC);
 | 
						|
 | 
						|
  /** Convert a lowercase letter to a corresponding uppercase letter.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be converted.
 | 
						|
 | 
						|
    @return   If the argument is a wide character for which iswlower is TRUE
 | 
						|
              and there are one or more corresponding wide characters, as
 | 
						|
              specified by the current locale, for which iswupper is TRUE, the
 | 
						|
              towupper function returns one of the corresponding wide
 | 
						|
              characters (always the same one for any given locale); otherwise,
 | 
						|
              the argument is returned unchanged.
 | 
						|
  */
 | 
						|
  wint_t        towupper  (wint_t WC);
 | 
						|
 | 
						|
  /** Construct a value that describes a mapping between wide characters
 | 
						|
      identified by the string argument, S.
 | 
						|
 | 
						|
      The strings listed below are valid in all locales as the S argument to
 | 
						|
      the wctrans function.
 | 
						|
        - "tolower"
 | 
						|
        - "toupper"
 | 
						|
 | 
						|
    @param[in]  S   A pointer to a multibyte character string naming a
 | 
						|
                    mapping between wide characters.
 | 
						|
 | 
						|
    @return   If S identifies a valid mapping of wide characters in the current
 | 
						|
              locale, the wctrans function returns a nonzero value that is
 | 
						|
              valid as the second argument to the towctrans function;
 | 
						|
              otherwise, it returns zero.
 | 
						|
  */
 | 
						|
  wctrans_t     wctrans   (const char *S);
 | 
						|
 | 
						|
  /** Map the wide character WC using the mapping described by WTr. The current
 | 
						|
      locale will be the same as during the call to wctrans that returned
 | 
						|
      the value WTr.
 | 
						|
 | 
						|
    @param[in]  WC    The wide character to be converted.
 | 
						|
    @param[in]  WTr   A value describing a mapping of wide characters in the
 | 
						|
                      current locale.
 | 
						|
 | 
						|
    @return   Returns the mapped value of WC using the mapping selected by WTr.
 | 
						|
  */
 | 
						|
  wint_t        towctrans (wint_t WC, wctrans_t WTr);
 | 
						|
__END_DECLS
 | 
						|
 | 
						|
#endif    /* _WCTYPE_H_ */
 |