iswprint.c raw

   1  #include <wctype.h>
   2  
   3  /* Consider all legal codepoints as printable except for:
   4   * - C0 and C1 control characters
   5   * - U+2028 and U+2029 (line/para break)
   6   * - U+FFF9 through U+FFFB (interlinear annotation controls)
   7   * The following code is optimized heavily to make hot paths for the
   8   * expected printable characters. */
   9  
  10  int iswprint(wint_t wc)
  11  {
  12  	if (wc < 0xffU)
  13  		return (wc+1 & 0x7f) >= 0x21;
  14  	if (wc < 0x2028U || wc-0x202aU < 0xd800-0x202a || wc-0xe000U < 0xfff9-0xe000)
  15  		return 1;
  16  	if (wc-0xfffcU > 0x10ffff-0xfffc || (wc&0xfffe)==0xfffe)
  17  		return 0;
  18  	return 1;
  19  }
  20  
  21  int __iswprint_l(wint_t c, locale_t l)
  22  {
  23  	return iswprint(c);
  24  }
  25  
  26  weak_alias(__iswprint_l, iswprint_l);
  27