socsvn commit: r269713 - in soc2014/ghostmansd/head: include lib/libc/string lib/libc/string/norm

ghostmansd at FreeBSD.org ghostmansd at FreeBSD.org
Wed Jun 18 03:07:19 UTC 2014


Author: ghostmansd
Date: Wed Jun 18 03:07:16 2014
New Revision: 269713
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269713

Log:
  NFD quick check algorithm; style(9) fixes.
  

Added:
  soc2014/ghostmansd/head/lib/libc/string/norm/
  soc2014/ghostmansd/head/lib/libc/string/norm/hangul.h
  soc2014/ghostmansd/head/lib/libc/string/norm/nfd.h
Deleted:
  soc2014/ghostmansd/head/lib/libc/string/normalization.h
Modified:
  soc2014/ghostmansd/head/include/string.h
  soc2014/ghostmansd/head/include/wchar.h
  soc2014/ghostmansd/head/lib/libc/string/strnorm.c
  soc2014/ghostmansd/head/lib/libc/string/wcsnorm.c

Modified: soc2014/ghostmansd/head/include/string.h
==============================================================================
--- soc2014/ghostmansd/head/include/string.h	Wed Jun 18 02:36:21 2014	(r269712)
+++ soc2014/ghostmansd/head/include/string.h	Wed Jun 18 03:07:16 2014	(r269713)
@@ -141,25 +141,28 @@
 #include <xlocale/_string.h>
 #endif
 
+
 /* Unicode Normalization algorithm */
 #ifndef _WCHAR_H_
-	#define __NORM_NFD		0
-	#define __NORM_NFC		1
-	#define __NORM_NFKD		2
-	#define __NORM_NFKC		3
+#define __NORM_NFD		0
+#define __NORM_NFC		1
+#define __NORM_NFKD		2
+#define __NORM_NFKC		3
 #endif
-size_t	__strnorm(char*, size_t, char const*, int);
-size_t	__strnorm_l(char*, size_t, char const*, int, locale_t);
+
+size_t	__strnorm(char*, size_t, const char*, int);
+size_t	__strnorm_l(char*, size_t, const char*, int, locale_t);
+
 #ifdef _UNICODE_ADDENDA
-	#define strnorm 	__strnorm
-	#define wcsnorm		__wcsnorm
+#define strnorm 	__strnorm
+#define wcsnorm		__wcsnorm
 #endif
-#if !defined(_WCHAR_H_) \
-&& defined(_UNICODE_ADDENDA)
-	#define NORM_NFD	__NORM_NFD
-	#define NORM_NFC	__NORM_NFC
-	#define NORM_NFKD	__NORM_NFKD
-	#define NORM_NFKC	__NORM_NFKC
+
+#if !defined(_WCHAR_H_) && defined(_UNICODE_ADDENDA)
+#define NORM_NFD	__NORM_NFD
+#define NORM_NFC	__NORM_NFC
+#define NORM_NFKD	__NORM_NFKD
+#define NORM_NFKC	__NORM_NFKC
 #endif
 __END_DECLS
 

Modified: soc2014/ghostmansd/head/include/wchar.h
==============================================================================
--- soc2014/ghostmansd/head/include/wchar.h	Wed Jun 18 02:36:21 2014	(r269712)
+++ soc2014/ghostmansd/head/include/wchar.h	Wed Jun 18 03:07:16 2014	(r269713)
@@ -228,23 +228,26 @@
 #include <xlocale/_wchar.h>
 #endif
 
+
 /* Unicode Normalization Algorithm */
 #ifndef _STRING_H_
-	#define __NORM_NFD	0
-	#define __NORM_NFC	1
-	#define __NORM_NFKD	2
-	#define __NORM_NFKC	3
+#define __NORM_NFD	0
+#define __NORM_NFC	1
+#define __NORM_NFKD	2
+#define __NORM_NFKC	3
 #endif
-size_t	__wcsnorm(wchar_t*, size_t, wchar_t const*, int);
+
+size_t	__wcsnorm(wchar_t*, size_t, const wchar_t*, int);
+
 #ifdef _UNICODE_ADDENDA
-	#define wcscoll		__wcscoll
+#define wcscoll		__wcscoll
 #endif
-#if !defined(_STRING_H_) \
-&& defined(_UNICODE_ADDENDA)
-	#define NORM_NFD	__NORM_NFD
-	#define NORM_NFC	__NORM_NFC
-	#define NORM_NFKD	__NORM_NFKD
-	#define NORM_NFKC	__NORM_NFKC
+
+#if !defined(_STRING_H_) && defined(_UNICODE_ADDENDA)
+#define NORM_NFD	__NORM_NFD
+#define NORM_NFC	__NORM_NFC
+#define NORM_NFKD	__NORM_NFKD
+#define NORM_NFKC	__NORM_NFKC
 #endif
 __END_DECLS
 

Added: soc2014/ghostmansd/head/lib/libc/string/norm/hangul.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2014/ghostmansd/head/lib/libc/string/norm/hangul.h	Wed Jun 18 03:07:16 2014	(r269713)
@@ -0,0 +1,619 @@
+/*
+ * Copyright (c) 2014 Dmitry Selyutin <ghostmansd at FreeBSD.org>
+ *     at Lomonosov Moscow State University - www.msu.ru
+ *                   All rights reserved.
+ *
+ * Copyright (c) 2014 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * 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 ``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 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.
+ */
+
+#ifndef _NORM_H_
+#define _NORM_H_
+
+
+#define HANGUL_MIN			0xAC00
+#define HANGUL_MAX			0xD7A4
+#define HANGUL_BASE			HANGUL_MIN
+
+#define HANGUL_LEAD_COUNT	19
+#define HANGUL_VOWEL_COUNT	21
+#define HANGUL_TRAIL_COUNT	28
+
+#define HANGUL_LEAD_MIN		0x1100
+#define HANGUL_VOWEL_MIN	0x1161
+#define HANGUL_TRAIL_MIN	0x11A7
+
+#define HANGUL_LEAD_MAX		((HANGUL_LEAD_MIN + HANGUL_LEAD_COUNT) - 1)
+#define HANGUL_VOWEL_MAX	((HANGUL_VOWEL_MIN + HANGUL_VOWEL_COUNT) - 1)
+#define HANGUL_TRAIL_MAX	((HANGUL_TRAIL_MIN + HANGUL_TRAIL_COUNT) - 1)
+
+#define HANGUL_BASE_COUNT	588
+#define HANGUL_FULL_COUNT	11172
+
+#define HANGUL_LEAD_TYPE				1
+#define HANGUL_VOWEL_TYPE				2
+#define HANGUL_TRAIL_TYPE				3
+#define HANGUL_LEAD_VOWEL_TYPE			4
+#define HANGUL_LEAD_VOWEL_TRAIL_TYPE	5
+
+
+/* The source code was automatically generated from HangulSyllableType.txt.
+ * This function is used to check type of the Hangul syllables. */
+static int hangul_syllable(wchar_t code)
+{
+	if (((0x1100 <= code) && (code <= 0x115F)) ||
+	((0xA960 <= code) && (code <= 0xA97C)))
+		return HANGUL_LEAD_TYPE;
+
+	if (((0x1160 <= code) && (code <= 0x11A7)) ||
+	((0xD7B0 <= code) && (code <= 0xD7C6)))
+		return HANGUL_VOWEL_TYPE;
+
+	if (((0x11A8 <= code) && (code <= 0x11FF)) ||
+	((0xD7CB <= code) && (code <= 0xD7FB)))
+		return HANGUL_TRAIL_TYPE;
+
+	if ((code == 0xAC00) || (code == 0xAC1C) || (code == 0xAC38) ||
+	(code == 0xAC54) || (code == 0xAC70) || (code == 0xAC8C) ||
+	(code == 0xACA8) || (code == 0xACC4) || (code == 0xACE0) ||
+	(code == 0xACFC) || (code == 0xAD18) || (code == 0xAD34) ||
+	(code == 0xAD50) || (code == 0xAD6C) || (code == 0xAD88) ||
+	(code == 0xADA4) || (code == 0xADC0) || (code == 0xADDC) ||
+	(code == 0xADF8) || (code == 0xAE14) || (code == 0xAE30) ||
+	(code == 0xAE4C) || (code == 0xAE68) || (code == 0xAE84) ||
+	(code == 0xAEA0) || (code == 0xAEBC) || (code == 0xAED8) ||
+	(code == 0xAEF4) || (code == 0xAF10) || (code == 0xAF2C) ||
+	(code == 0xAF48) || (code == 0xAF64) || (code == 0xAF80) ||
+	(code == 0xAF9C) || (code == 0xAFB8) || (code == 0xAFD4) ||
+	(code == 0xAFF0) || (code == 0xB00C) || (code == 0xB028) ||
+	(code == 0xB044) || (code == 0xB060) || (code == 0xB07C) ||
+	(code == 0xB098) || (code == 0xB0B4) || (code == 0xB0D0) ||
+	(code == 0xB0EC) || (code == 0xB108) || (code == 0xB124) ||
+	(code == 0xB140) || (code == 0xB15C) || (code == 0xB178) ||
+	(code == 0xB194) || (code == 0xB1B0) || (code == 0xB1CC) ||
+	(code == 0xB1E8) || (code == 0xB204) || (code == 0xB220) ||
+	(code == 0xB23C) || (code == 0xB258) || (code == 0xB274) ||
+	(code == 0xB290) || (code == 0xB2AC) || (code == 0xB2C8) ||
+	(code == 0xB2E4) || (code == 0xB300) || (code == 0xB31C) ||
+	(code == 0xB338) || (code == 0xB354) || (code == 0xB370) ||
+	(code == 0xB38C) || (code == 0xB3A8) || (code == 0xB3C4) ||
+	(code == 0xB3E0) || (code == 0xB3FC) || (code == 0xB418) ||
+	(code == 0xB434) || (code == 0xB450) || (code == 0xB46C) ||
+	(code == 0xB488) || (code == 0xB4A4) || (code == 0xB4C0) ||
+	(code == 0xB4DC) || (code == 0xB4F8) || (code == 0xB514) ||
+	(code == 0xB530) || (code == 0xB54C) || (code == 0xB568) ||
+	(code == 0xB584) || (code == 0xB5A0) || (code == 0xB5BC) ||
+	(code == 0xB5D8) || (code == 0xB5F4) || (code == 0xB610) ||
+	(code == 0xB62C) || (code == 0xB648) || (code == 0xB664) ||
+	(code == 0xB680) || (code == 0xB69C) || (code == 0xB6B8) ||
+	(code == 0xB6D4) || (code == 0xB6F0) || (code == 0xB70C) ||
+	(code == 0xB728) || (code == 0xB744) || (code == 0xB760) ||
+	(code == 0xB77C) || (code == 0xB798) || (code == 0xB7B4) ||
+	(code == 0xB7D0) || (code == 0xB7EC) || (code == 0xB808) ||
+	(code == 0xB824) || (code == 0xB840) || (code == 0xB85C) ||
+	(code == 0xB878) || (code == 0xB894) || (code == 0xB8B0) ||
+	(code == 0xB8CC) || (code == 0xB8E8) || (code == 0xB904) ||
+	(code == 0xB920) || (code == 0xB93C) || (code == 0xB958) ||
+	(code == 0xB974) || (code == 0xB990) || (code == 0xB9AC) ||
+	(code == 0xB9C8) || (code == 0xB9E4) || (code == 0xBA00) ||
+	(code == 0xBA1C) || (code == 0xBA38) || (code == 0xBA54) ||
+	(code == 0xBA70) || (code == 0xBA8C) || (code == 0xBAA8) ||
+	(code == 0xBAC4) || (code == 0xBAE0) || (code == 0xBAFC) ||
+	(code == 0xBB18) || (code == 0xBB34) || (code == 0xBB50) ||
+	(code == 0xBB6C) || (code == 0xBB88) || (code == 0xBBA4) ||
+	(code == 0xBBC0) || (code == 0xBBDC) || (code == 0xBBF8) ||
+	(code == 0xBC14) || (code == 0xBC30) || (code == 0xBC4C) ||
+	(code == 0xBC68) || (code == 0xBC84) || (code == 0xBCA0) ||
+	(code == 0xBCBC) || (code == 0xBCD8) || (code == 0xBCF4) ||
+	(code == 0xBD10) || (code == 0xBD2C) || (code == 0xBD48) ||
+	(code == 0xBD64) || (code == 0xBD80) || (code == 0xBD9C) ||
+	(code == 0xBDB8) || (code == 0xBDD4) || (code == 0xBDF0) ||
+	(code == 0xBE0C) || (code == 0xBE28) || (code == 0xBE44) ||
+	(code == 0xBE60) || (code == 0xBE7C) || (code == 0xBE98) ||
+	(code == 0xBEB4) || (code == 0xBED0) || (code == 0xBEEC) ||
+	(code == 0xBF08) || (code == 0xBF24) || (code == 0xBF40) ||
+	(code == 0xBF5C) || (code == 0xBF78) || (code == 0xBF94) ||
+	(code == 0xBFB0) || (code == 0xBFCC) || (code == 0xBFE8) ||
+	(code == 0xC004) || (code == 0xC020) || (code == 0xC03C) ||
+	(code == 0xC058) || (code == 0xC074) || (code == 0xC090) ||
+	(code == 0xC0AC) || (code == 0xC0C8) || (code == 0xC0E4) ||
+	(code == 0xC100) || (code == 0xC11C) || (code == 0xC138) ||
+	(code == 0xC154) || (code == 0xC170) || (code == 0xC18C) ||
+	(code == 0xC1A8) || (code == 0xC1C4) || (code == 0xC1E0) ||
+	(code == 0xC1FC) || (code == 0xC218) || (code == 0xC234) ||
+	(code == 0xC250) || (code == 0xC26C) || (code == 0xC288) ||
+	(code == 0xC2A4) || (code == 0xC2C0) || (code == 0xC2DC) ||
+	(code == 0xC2F8) || (code == 0xC314) || (code == 0xC330) ||
+	(code == 0xC34C) || (code == 0xC368) || (code == 0xC384) ||
+	(code == 0xC3A0) || (code == 0xC3BC) || (code == 0xC3D8) ||
+	(code == 0xC3F4) || (code == 0xC410) || (code == 0xC42C) ||
+	(code == 0xC448) || (code == 0xC464) || (code == 0xC480) ||
+	(code == 0xC49C) || (code == 0xC4B8) || (code == 0xC4D4) ||
+	(code == 0xC4F0) || (code == 0xC50C) || (code == 0xC528) ||
+	(code == 0xC544) || (code == 0xC560) || (code == 0xC57C) ||
+	(code == 0xC598) || (code == 0xC5B4) || (code == 0xC5D0) ||
+	(code == 0xC5EC) || (code == 0xC608) || (code == 0xC624) ||
+	(code == 0xC640) || (code == 0xC65C) || (code == 0xC678) ||
+	(code == 0xC694) || (code == 0xC6B0) || (code == 0xC6CC) ||
+	(code == 0xC6E8) || (code == 0xC704) || (code == 0xC720) ||
+	(code == 0xC73C) || (code == 0xC758) || (code == 0xC774) ||
+	(code == 0xC790) || (code == 0xC7AC) || (code == 0xC7C8) ||
+	(code == 0xC7E4) || (code == 0xC800) || (code == 0xC81C) ||
+	(code == 0xC838) || (code == 0xC854) || (code == 0xC870) ||
+	(code == 0xC88C) || (code == 0xC8A8) || (code == 0xC8C4) ||
+	(code == 0xC8E0) || (code == 0xC8FC) || (code == 0xC918) ||
+	(code == 0xC934) || (code == 0xC950) || (code == 0xC96C) ||
+	(code == 0xC988) || (code == 0xC9A4) || (code == 0xC9C0) ||
+	(code == 0xC9DC) || (code == 0xC9F8) || (code == 0xCA14) ||
+	(code == 0xCA30) || (code == 0xCA4C) || (code == 0xCA68) ||
+	(code == 0xCA84) || (code == 0xCAA0) || (code == 0xCABC) ||
+	(code == 0xCAD8) || (code == 0xCAF4) || (code == 0xCB10) ||
+	(code == 0xCB2C) || (code == 0xCB48) || (code == 0xCB64) ||
+	(code == 0xCB80) || (code == 0xCB9C) || (code == 0xCBB8) ||
+	(code == 0xCBD4) || (code == 0xCBF0) || (code == 0xCC0C) ||
+	(code == 0xCC28) || (code == 0xCC44) || (code == 0xCC60) ||
+	(code == 0xCC7C) || (code == 0xCC98) || (code == 0xCCB4) ||
+	(code == 0xCCD0) || (code == 0xCCEC) || (code == 0xCD08) ||
+	(code == 0xCD24) || (code == 0xCD40) || (code == 0xCD5C) ||
+	(code == 0xCD78) || (code == 0xCD94) || (code == 0xCDB0) ||
+	(code == 0xCDCC) || (code == 0xCDE8) || (code == 0xCE04) ||
+	(code == 0xCE20) || (code == 0xCE3C) || (code == 0xCE58) ||
+	(code == 0xCE74) || (code == 0xCE90) || (code == 0xCEAC) ||
+	(code == 0xCEC8) || (code == 0xCEE4) || (code == 0xCF00) ||
+	(code == 0xCF1C) || (code == 0xCF38) || (code == 0xCF54) ||
+	(code == 0xCF70) || (code == 0xCF8C) || (code == 0xCFA8) ||
+	(code == 0xCFC4) || (code == 0xCFE0) || (code == 0xCFFC) ||
+	(code == 0xD018) || (code == 0xD034) || (code == 0xD050) ||
+	(code == 0xD06C) || (code == 0xD088) || (code == 0xD0A4) ||
+	(code == 0xD0C0) || (code == 0xD0DC) || (code == 0xD0F8) ||
+	(code == 0xD114) || (code == 0xD130) || (code == 0xD14C) ||
+	(code == 0xD168) || (code == 0xD184) || (code == 0xD1A0) ||
+	(code == 0xD1BC) || (code == 0xD1D8) || (code == 0xD1F4) ||
+	(code == 0xD210) || (code == 0xD22C) || (code == 0xD248) ||
+	(code == 0xD264) || (code == 0xD280) || (code == 0xD29C) ||
+	(code == 0xD2B8) || (code == 0xD2D4) || (code == 0xD2F0) ||
+	(code == 0xD30C) || (code == 0xD328) || (code == 0xD344) ||
+	(code == 0xD360) || (code == 0xD37C) || (code == 0xD398) ||
+	(code == 0xD3B4) || (code == 0xD3D0) || (code == 0xD3EC) ||
+	(code == 0xD408) || (code == 0xD424) || (code == 0xD440) ||
+	(code == 0xD45C) || (code == 0xD478) || (code == 0xD494) ||
+	(code == 0xD4B0) || (code == 0xD4CC) || (code == 0xD4E8) ||
+	(code == 0xD504) || (code == 0xD520) || (code == 0xD53C) ||
+	(code == 0xD558) || (code == 0xD574) || (code == 0xD590) ||
+	(code == 0xD5AC) || (code == 0xD5C8) || (code == 0xD5E4) ||
+	(code == 0xD600) || (code == 0xD61C) || (code == 0xD638) ||
+	(code == 0xD654) || (code == 0xD670) || (code == 0xD68C) ||
+	(code == 0xD6A8) || (code == 0xD6C4) || (code == 0xD6E0) ||
+	(code == 0xD6FC) || (code == 0xD718) || (code == 0xD734) ||
+	(code == 0xD750) || (code == 0xD76C) || (code == 0xD788))
+		return HANGUL_LEAD_VOWEL_TYPE;
+
+	if (((0xAC01 <= code) && (code <= 0xAC1B)) ||
+	((0xAC1D <= code) && (code <= 0xAC37)) ||
+	((0xAC39 <= code) && (code <= 0xAC53)) ||
+	((0xAC55 <= code) && (code <= 0xAC6F)) ||
+	((0xAC71 <= code) && (code <= 0xAC8B)) ||
+	((0xAC8D <= code) && (code <= 0xACA7)) ||
+	((0xACA9 <= code) && (code <= 0xACC3)) ||
+	((0xACC5 <= code) && (code <= 0xACDF)) ||
+	((0xACE1 <= code) && (code <= 0xACFB)) ||
+	((0xACFD <= code) && (code <= 0xAD17)) ||
+	((0xAD19 <= code) && (code <= 0xAD33)) ||
+	((0xAD35 <= code) && (code <= 0xAD4F)) ||
+	((0xAD51 <= code) && (code <= 0xAD6B)) ||
+	((0xAD6D <= code) && (code <= 0xAD87)) ||
+	((0xAD89 <= code) && (code <= 0xADA3)) ||
+	((0xADA5 <= code) && (code <= 0xADBF)) ||
+	((0xADC1 <= code) && (code <= 0xADDB)) ||
+	((0xADDD <= code) && (code <= 0xADF7)) ||
+	((0xADF9 <= code) && (code <= 0xAE13)) ||
+	((0xAE15 <= code) && (code <= 0xAE2F)) ||
+	((0xAE31 <= code) && (code <= 0xAE4B)) ||
+	((0xAE4D <= code) && (code <= 0xAE67)) ||
+	((0xAE69 <= code) && (code <= 0xAE83)) ||
+	((0xAE85 <= code) && (code <= 0xAE9F)) ||
+	((0xAEA1 <= code) && (code <= 0xAEBB)) ||
+	((0xAEBD <= code) && (code <= 0xAED7)) ||
+	((0xAED9 <= code) && (code <= 0xAEF3)) ||
+	((0xAEF5 <= code) && (code <= 0xAF0F)) ||
+	((0xAF11 <= code) && (code <= 0xAF2B)) ||
+	((0xAF2D <= code) && (code <= 0xAF47)) ||
+	((0xAF49 <= code) && (code <= 0xAF63)) ||
+	((0xAF65 <= code) && (code <= 0xAF7F)) ||
+	((0xAF81 <= code) && (code <= 0xAF9B)) ||
+	((0xAF9D <= code) && (code <= 0xAFB7)) ||
+	((0xAFB9 <= code) && (code <= 0xAFD3)) ||
+	((0xAFD5 <= code) && (code <= 0xAFEF)) ||
+	((0xAFF1 <= code) && (code <= 0xB00B)) ||
+	((0xB00D <= code) && (code <= 0xB027)) ||
+	((0xB029 <= code) && (code <= 0xB043)) ||
+	((0xB045 <= code) && (code <= 0xB05F)) ||
+	((0xB061 <= code) && (code <= 0xB07B)) ||
+	((0xB07D <= code) && (code <= 0xB097)) ||
+	((0xB099 <= code) && (code <= 0xB0B3)) ||
+	((0xB0B5 <= code) && (code <= 0xB0CF)) ||
+	((0xB0D1 <= code) && (code <= 0xB0EB)) ||
+	((0xB0ED <= code) && (code <= 0xB107)) ||
+	((0xB109 <= code) && (code <= 0xB123)) ||
+	((0xB125 <= code) && (code <= 0xB13F)) ||
+	((0xB141 <= code) && (code <= 0xB15B)) ||
+	((0xB15D <= code) && (code <= 0xB177)) ||
+	((0xB179 <= code) && (code <= 0xB193)) ||
+	((0xB195 <= code) && (code <= 0xB1AF)) ||
+	((0xB1B1 <= code) && (code <= 0xB1CB)) ||
+	((0xB1CD <= code) && (code <= 0xB1E7)) ||
+	((0xB1E9 <= code) && (code <= 0xB203)) ||
+	((0xB205 <= code) && (code <= 0xB21F)) ||
+	((0xB221 <= code) && (code <= 0xB23B)) ||
+	((0xB23D <= code) && (code <= 0xB257)) ||
+	((0xB259 <= code) && (code <= 0xB273)) ||
+	((0xB275 <= code) && (code <= 0xB28F)) ||
+	((0xB291 <= code) && (code <= 0xB2AB)) ||
+	((0xB2AD <= code) && (code <= 0xB2C7)) ||
+	((0xB2C9 <= code) && (code <= 0xB2E3)) ||
+	((0xB2E5 <= code) && (code <= 0xB2FF)) ||
+	((0xB301 <= code) && (code <= 0xB31B)) ||
+	((0xB31D <= code) && (code <= 0xB337)) ||
+	((0xB339 <= code) && (code <= 0xB353)) ||
+	((0xB355 <= code) && (code <= 0xB36F)) ||
+	((0xB371 <= code) && (code <= 0xB38B)) ||
+	((0xB38D <= code) && (code <= 0xB3A7)) ||
+	((0xB3A9 <= code) && (code <= 0xB3C3)) ||
+	((0xB3C5 <= code) && (code <= 0xB3DF)) ||
+	((0xB3E1 <= code) && (code <= 0xB3FB)) ||
+	((0xB3FD <= code) && (code <= 0xB417)) ||
+	((0xB419 <= code) && (code <= 0xB433)) ||
+	((0xB435 <= code) && (code <= 0xB44F)) ||
+	((0xB451 <= code) && (code <= 0xB46B)) ||
+	((0xB46D <= code) && (code <= 0xB487)) ||
+	((0xB489 <= code) && (code <= 0xB4A3)) ||
+	((0xB4A5 <= code) && (code <= 0xB4BF)) ||
+	((0xB4C1 <= code) && (code <= 0xB4DB)) ||
+	((0xB4DD <= code) && (code <= 0xB4F7)) ||
+	((0xB4F9 <= code) && (code <= 0xB513)) ||
+	((0xB515 <= code) && (code <= 0xB52F)) ||
+	((0xB531 <= code) && (code <= 0xB54B)) ||
+	((0xB54D <= code) && (code <= 0xB567)) ||
+	((0xB569 <= code) && (code <= 0xB583)) ||
+	((0xB585 <= code) && (code <= 0xB59F)) ||
+	((0xB5A1 <= code) && (code <= 0xB5BB)) ||
+	((0xB5BD <= code) && (code <= 0xB5D7)) ||
+	((0xB5D9 <= code) && (code <= 0xB5F3)) ||
+	((0xB5F5 <= code) && (code <= 0xB60F)) ||
+	((0xB611 <= code) && (code <= 0xB62B)) ||
+	((0xB62D <= code) && (code <= 0xB647)) ||
+	((0xB649 <= code) && (code <= 0xB663)) ||
+	((0xB665 <= code) && (code <= 0xB67F)) ||
+	((0xB681 <= code) && (code <= 0xB69B)) ||
+	((0xB69D <= code) && (code <= 0xB6B7)) ||
+	((0xB6B9 <= code) && (code <= 0xB6D3)) ||
+	((0xB6D5 <= code) && (code <= 0xB6EF)) ||
+	((0xB6F1 <= code) && (code <= 0xB70B)) ||
+	((0xB70D <= code) && (code <= 0xB727)) ||
+	((0xB729 <= code) && (code <= 0xB743)) ||
+	((0xB745 <= code) && (code <= 0xB75F)) ||
+	((0xB761 <= code) && (code <= 0xB77B)) ||
+	((0xB77D <= code) && (code <= 0xB797)) ||
+	((0xB799 <= code) && (code <= 0xB7B3)) ||
+	((0xB7B5 <= code) && (code <= 0xB7CF)) ||
+	((0xB7D1 <= code) && (code <= 0xB7EB)) ||
+	((0xB7ED <= code) && (code <= 0xB807)) ||
+	((0xB809 <= code) && (code <= 0xB823)) ||
+	((0xB825 <= code) && (code <= 0xB83F)) ||
+	((0xB841 <= code) && (code <= 0xB85B)) ||
+	((0xB85D <= code) && (code <= 0xB877)) ||
+	((0xB879 <= code) && (code <= 0xB893)) ||
+	((0xB895 <= code) && (code <= 0xB8AF)) ||
+	((0xB8B1 <= code) && (code <= 0xB8CB)) ||
+	((0xB8CD <= code) && (code <= 0xB8E7)) ||
+	((0xB8E9 <= code) && (code <= 0xB903)) ||
+	((0xB905 <= code) && (code <= 0xB91F)) ||
+	((0xB921 <= code) && (code <= 0xB93B)) ||
+	((0xB93D <= code) && (code <= 0xB957)) ||
+	((0xB959 <= code) && (code <= 0xB973)) ||
+	((0xB975 <= code) && (code <= 0xB98F)) ||
+	((0xB991 <= code) && (code <= 0xB9AB)) ||
+	((0xB9AD <= code) && (code <= 0xB9C7)) ||
+	((0xB9C9 <= code) && (code <= 0xB9E3)) ||
+	((0xB9E5 <= code) && (code <= 0xB9FF)) ||
+	((0xBA01 <= code) && (code <= 0xBA1B)) ||
+	((0xBA1D <= code) && (code <= 0xBA37)) ||
+	((0xBA39 <= code) && (code <= 0xBA53)) ||
+	((0xBA55 <= code) && (code <= 0xBA6F)) ||
+	((0xBA71 <= code) && (code <= 0xBA8B)) ||
+	((0xBA8D <= code) && (code <= 0xBAA7)) ||
+	((0xBAA9 <= code) && (code <= 0xBAC3)) ||
+	((0xBAC5 <= code) && (code <= 0xBADF)) ||
+	((0xBAE1 <= code) && (code <= 0xBAFB)) ||
+	((0xBAFD <= code) && (code <= 0xBB17)) ||
+	((0xBB19 <= code) && (code <= 0xBB33)) ||
+	((0xBB35 <= code) && (code <= 0xBB4F)) ||
+	((0xBB51 <= code) && (code <= 0xBB6B)) ||
+	((0xBB6D <= code) && (code <= 0xBB87)) ||
+	((0xBB89 <= code) && (code <= 0xBBA3)) ||
+	((0xBBA5 <= code) && (code <= 0xBBBF)) ||
+	((0xBBC1 <= code) && (code <= 0xBBDB)) ||
+	((0xBBDD <= code) && (code <= 0xBBF7)) ||
+	((0xBBF9 <= code) && (code <= 0xBC13)) ||
+	((0xBC15 <= code) && (code <= 0xBC2F)) ||
+	((0xBC31 <= code) && (code <= 0xBC4B)) ||
+	((0xBC4D <= code) && (code <= 0xBC67)) ||
+	((0xBC69 <= code) && (code <= 0xBC83)) ||
+	((0xBC85 <= code) && (code <= 0xBC9F)) ||
+	((0xBCA1 <= code) && (code <= 0xBCBB)) ||
+	((0xBCBD <= code) && (code <= 0xBCD7)) ||
+	((0xBCD9 <= code) && (code <= 0xBCF3)) ||
+	((0xBCF5 <= code) && (code <= 0xBD0F)) ||
+	((0xBD11 <= code) && (code <= 0xBD2B)) ||
+	((0xBD2D <= code) && (code <= 0xBD47)) ||
+	((0xBD49 <= code) && (code <= 0xBD63)) ||
+	((0xBD65 <= code) && (code <= 0xBD7F)) ||
+	((0xBD81 <= code) && (code <= 0xBD9B)) ||
+	((0xBD9D <= code) && (code <= 0xBDB7)) ||
+	((0xBDB9 <= code) && (code <= 0xBDD3)) ||
+	((0xBDD5 <= code) && (code <= 0xBDEF)) ||
+	((0xBDF1 <= code) && (code <= 0xBE0B)) ||
+	((0xBE0D <= code) && (code <= 0xBE27)) ||
+	((0xBE29 <= code) && (code <= 0xBE43)) ||
+	((0xBE45 <= code) && (code <= 0xBE5F)) ||
+	((0xBE61 <= code) && (code <= 0xBE7B)) ||
+	((0xBE7D <= code) && (code <= 0xBE97)) ||
+	((0xBE99 <= code) && (code <= 0xBEB3)) ||
+	((0xBEB5 <= code) && (code <= 0xBECF)) ||
+	((0xBED1 <= code) && (code <= 0xBEEB)) ||
+	((0xBEED <= code) && (code <= 0xBF07)) ||
+	((0xBF09 <= code) && (code <= 0xBF23)) ||
+	((0xBF25 <= code) && (code <= 0xBF3F)) ||
+	((0xBF41 <= code) && (code <= 0xBF5B)) ||
+	((0xBF5D <= code) && (code <= 0xBF77)) ||
+	((0xBF79 <= code) && (code <= 0xBF93)) ||
+	((0xBF95 <= code) && (code <= 0xBFAF)) ||
+	((0xBFB1 <= code) && (code <= 0xBFCB)) ||
+	((0xBFCD <= code) && (code <= 0xBFE7)) ||
+	((0xBFE9 <= code) && (code <= 0xC003)) ||
+	((0xC005 <= code) && (code <= 0xC01F)) ||
+	((0xC021 <= code) && (code <= 0xC03B)) ||
+	((0xC03D <= code) && (code <= 0xC057)) ||
+	((0xC059 <= code) && (code <= 0xC073)) ||
+	((0xC075 <= code) && (code <= 0xC08F)) ||
+	((0xC091 <= code) && (code <= 0xC0AB)) ||
+	((0xC0AD <= code) && (code <= 0xC0C7)) ||
+	((0xC0C9 <= code) && (code <= 0xC0E3)) ||
+	((0xC0E5 <= code) && (code <= 0xC0FF)) ||
+	((0xC101 <= code) && (code <= 0xC11B)) ||
+	((0xC11D <= code) && (code <= 0xC137)) ||
+	((0xC139 <= code) && (code <= 0xC153)) ||
+	((0xC155 <= code) && (code <= 0xC16F)) ||
+	((0xC171 <= code) && (code <= 0xC18B)) ||
+	((0xC18D <= code) && (code <= 0xC1A7)) ||
+	((0xC1A9 <= code) && (code <= 0xC1C3)) ||
+	((0xC1C5 <= code) && (code <= 0xC1DF)) ||
+	((0xC1E1 <= code) && (code <= 0xC1FB)) ||
+	((0xC1FD <= code) && (code <= 0xC217)) ||
+	((0xC219 <= code) && (code <= 0xC233)) ||
+	((0xC235 <= code) && (code <= 0xC24F)) ||
+	((0xC251 <= code) && (code <= 0xC26B)) ||
+	((0xC26D <= code) && (code <= 0xC287)) ||
+	((0xC289 <= code) && (code <= 0xC2A3)) ||
+	((0xC2A5 <= code) && (code <= 0xC2BF)) ||
+	((0xC2C1 <= code) && (code <= 0xC2DB)) ||
+	((0xC2DD <= code) && (code <= 0xC2F7)) ||
+	((0xC2F9 <= code) && (code <= 0xC313)) ||
+	((0xC315 <= code) && (code <= 0xC32F)) ||
+	((0xC331 <= code) && (code <= 0xC34B)) ||
+	((0xC34D <= code) && (code <= 0xC367)) ||
+	((0xC369 <= code) && (code <= 0xC383)) ||
+	((0xC385 <= code) && (code <= 0xC39F)) ||
+	((0xC3A1 <= code) && (code <= 0xC3BB)) ||
+	((0xC3BD <= code) && (code <= 0xC3D7)) ||
+	((0xC3D9 <= code) && (code <= 0xC3F3)) ||
+	((0xC3F5 <= code) && (code <= 0xC40F)) ||
+	((0xC411 <= code) && (code <= 0xC42B)) ||
+	((0xC42D <= code) && (code <= 0xC447)) ||
+	((0xC449 <= code) && (code <= 0xC463)) ||
+	((0xC465 <= code) && (code <= 0xC47F)) ||
+	((0xC481 <= code) && (code <= 0xC49B)) ||
+	((0xC49D <= code) && (code <= 0xC4B7)) ||
+	((0xC4B9 <= code) && (code <= 0xC4D3)) ||
+	((0xC4D5 <= code) && (code <= 0xC4EF)) ||
+	((0xC4F1 <= code) && (code <= 0xC50B)) ||
+	((0xC50D <= code) && (code <= 0xC527)) ||
+	((0xC529 <= code) && (code <= 0xC543)) ||
+	((0xC545 <= code) && (code <= 0xC55F)) ||
+	((0xC561 <= code) && (code <= 0xC57B)) ||
+	((0xC57D <= code) && (code <= 0xC597)) ||
+	((0xC599 <= code) && (code <= 0xC5B3)) ||
+	((0xC5B5 <= code) && (code <= 0xC5CF)) ||
+	((0xC5D1 <= code) && (code <= 0xC5EB)) ||
+	((0xC5ED <= code) && (code <= 0xC607)) ||
+	((0xC609 <= code) && (code <= 0xC623)) ||
+	((0xC625 <= code) && (code <= 0xC63F)) ||
+	((0xC641 <= code) && (code <= 0xC65B)) ||
+	((0xC65D <= code) && (code <= 0xC677)) ||
+	((0xC679 <= code) && (code <= 0xC693)) ||
+	((0xC695 <= code) && (code <= 0xC6AF)) ||
+	((0xC6B1 <= code) && (code <= 0xC6CB)) ||
+	((0xC6CD <= code) && (code <= 0xC6E7)) ||
+	((0xC6E9 <= code) && (code <= 0xC703)) ||
+	((0xC705 <= code) && (code <= 0xC71F)) ||
+	((0xC721 <= code) && (code <= 0xC73B)) ||
+	((0xC73D <= code) && (code <= 0xC757)) ||
+	((0xC759 <= code) && (code <= 0xC773)) ||
+	((0xC775 <= code) && (code <= 0xC78F)) ||
+	((0xC791 <= code) && (code <= 0xC7AB)) ||
+	((0xC7AD <= code) && (code <= 0xC7C7)) ||
+	((0xC7C9 <= code) && (code <= 0xC7E3)) ||
+	((0xC7E5 <= code) && (code <= 0xC7FF)) ||
+	((0xC801 <= code) && (code <= 0xC81B)) ||
+	((0xC81D <= code) && (code <= 0xC837)) ||
+	((0xC839 <= code) && (code <= 0xC853)) ||
+	((0xC855 <= code) && (code <= 0xC86F)) ||
+	((0xC871 <= code) && (code <= 0xC88B)) ||
+	((0xC88D <= code) && (code <= 0xC8A7)) ||
+	((0xC8A9 <= code) && (code <= 0xC8C3)) ||
+	((0xC8C5 <= code) && (code <= 0xC8DF)) ||
+	((0xC8E1 <= code) && (code <= 0xC8FB)) ||
+	((0xC8FD <= code) && (code <= 0xC917)) ||
+	((0xC919 <= code) && (code <= 0xC933)) ||
+	((0xC935 <= code) && (code <= 0xC94F)) ||
+	((0xC951 <= code) && (code <= 0xC96B)) ||
+	((0xC96D <= code) && (code <= 0xC987)) ||
+	((0xC989 <= code) && (code <= 0xC9A3)) ||
+	((0xC9A5 <= code) && (code <= 0xC9BF)) ||
+	((0xC9C1 <= code) && (code <= 0xC9DB)) ||
+	((0xC9DD <= code) && (code <= 0xC9F7)) ||
+	((0xC9F9 <= code) && (code <= 0xCA13)) ||
+	((0xCA15 <= code) && (code <= 0xCA2F)) ||
+	((0xCA31 <= code) && (code <= 0xCA4B)) ||
+	((0xCA4D <= code) && (code <= 0xCA67)) ||
+	((0xCA69 <= code) && (code <= 0xCA83)) ||
+	((0xCA85 <= code) && (code <= 0xCA9F)) ||
+	((0xCAA1 <= code) && (code <= 0xCABB)) ||
+	((0xCABD <= code) && (code <= 0xCAD7)) ||
+	((0xCAD9 <= code) && (code <= 0xCAF3)) ||
+	((0xCAF5 <= code) && (code <= 0xCB0F)) ||
+	((0xCB11 <= code) && (code <= 0xCB2B)) ||
+	((0xCB2D <= code) && (code <= 0xCB47)) ||
+	((0xCB49 <= code) && (code <= 0xCB63)) ||
+	((0xCB65 <= code) && (code <= 0xCB7F)) ||
+	((0xCB81 <= code) && (code <= 0xCB9B)) ||
+	((0xCB9D <= code) && (code <= 0xCBB7)) ||
+	((0xCBB9 <= code) && (code <= 0xCBD3)) ||
+	((0xCBD5 <= code) && (code <= 0xCBEF)) ||
+	((0xCBF1 <= code) && (code <= 0xCC0B)) ||
+	((0xCC0D <= code) && (code <= 0xCC27)) ||
+	((0xCC29 <= code) && (code <= 0xCC43)) ||
+	((0xCC45 <= code) && (code <= 0xCC5F)) ||
+	((0xCC61 <= code) && (code <= 0xCC7B)) ||
+	((0xCC7D <= code) && (code <= 0xCC97)) ||
+	((0xCC99 <= code) && (code <= 0xCCB3)) ||
+	((0xCCB5 <= code) && (code <= 0xCCCF)) ||
+	((0xCCD1 <= code) && (code <= 0xCCEB)) ||
+	((0xCCED <= code) && (code <= 0xCD07)) ||
+	((0xCD09 <= code) && (code <= 0xCD23)) ||
+	((0xCD25 <= code) && (code <= 0xCD3F)) ||
+	((0xCD41 <= code) && (code <= 0xCD5B)) ||
+	((0xCD5D <= code) && (code <= 0xCD77)) ||
+	((0xCD79 <= code) && (code <= 0xCD93)) ||
+	((0xCD95 <= code) && (code <= 0xCDAF)) ||
+	((0xCDB1 <= code) && (code <= 0xCDCB)) ||
+	((0xCDCD <= code) && (code <= 0xCDE7)) ||
+	((0xCDE9 <= code) && (code <= 0xCE03)) ||
+	((0xCE05 <= code) && (code <= 0xCE1F)) ||
+	((0xCE21 <= code) && (code <= 0xCE3B)) ||
+	((0xCE3D <= code) && (code <= 0xCE57)) ||
+	((0xCE59 <= code) && (code <= 0xCE73)) ||
+	((0xCE75 <= code) && (code <= 0xCE8F)) ||
+	((0xCE91 <= code) && (code <= 0xCEAB)) ||
+	((0xCEAD <= code) && (code <= 0xCEC7)) ||
+	((0xCEC9 <= code) && (code <= 0xCEE3)) ||
+	((0xCEE5 <= code) && (code <= 0xCEFF)) ||
+	((0xCF01 <= code) && (code <= 0xCF1B)) ||
+	((0xCF1D <= code) && (code <= 0xCF37)) ||
+	((0xCF39 <= code) && (code <= 0xCF53)) ||
+	((0xCF55 <= code) && (code <= 0xCF6F)) ||
+	((0xCF71 <= code) && (code <= 0xCF8B)) ||
+	((0xCF8D <= code) && (code <= 0xCFA7)) ||
+	((0xCFA9 <= code) && (code <= 0xCFC3)) ||
+	((0xCFC5 <= code) && (code <= 0xCFDF)) ||
+	((0xCFE1 <= code) && (code <= 0xCFFB)) ||
+	((0xCFFD <= code) && (code <= 0xD017)) ||
+	((0xD019 <= code) && (code <= 0xD033)) ||
+	((0xD035 <= code) && (code <= 0xD04F)) ||
+	((0xD051 <= code) && (code <= 0xD06B)) ||
+	((0xD06D <= code) && (code <= 0xD087)) ||
+	((0xD089 <= code) && (code <= 0xD0A3)) ||
+	((0xD0A5 <= code) && (code <= 0xD0BF)) ||
+	((0xD0C1 <= code) && (code <= 0xD0DB)) ||
+	((0xD0DD <= code) && (code <= 0xD0F7)) ||
+	((0xD0F9 <= code) && (code <= 0xD113)) ||
+	((0xD115 <= code) && (code <= 0xD12F)) ||
+	((0xD131 <= code) && (code <= 0xD14B)) ||
+	((0xD14D <= code) && (code <= 0xD167)) ||
+	((0xD169 <= code) && (code <= 0xD183)) ||
+	((0xD185 <= code) && (code <= 0xD19F)) ||
+	((0xD1A1 <= code) && (code <= 0xD1BB)) ||
+	((0xD1BD <= code) && (code <= 0xD1D7)) ||
+	((0xD1D9 <= code) && (code <= 0xD1F3)) ||
+	((0xD1F5 <= code) && (code <= 0xD20F)) ||
+	((0xD211 <= code) && (code <= 0xD22B)) ||
+	((0xD22D <= code) && (code <= 0xD247)) ||
+	((0xD249 <= code) && (code <= 0xD263)) ||
+	((0xD265 <= code) && (code <= 0xD27F)) ||
+	((0xD281 <= code) && (code <= 0xD29B)) ||
+	((0xD29D <= code) && (code <= 0xD2B7)) ||
+	((0xD2B9 <= code) && (code <= 0xD2D3)) ||
+	((0xD2D5 <= code) && (code <= 0xD2EF)) ||
+	((0xD2F1 <= code) && (code <= 0xD30B)) ||
+	((0xD30D <= code) && (code <= 0xD327)) ||
+	((0xD329 <= code) && (code <= 0xD343)) ||
+	((0xD345 <= code) && (code <= 0xD35F)) ||
+	((0xD361 <= code) && (code <= 0xD37B)) ||
+	((0xD37D <= code) && (code <= 0xD397)) ||
+	((0xD399 <= code) && (code <= 0xD3B3)) ||
+	((0xD3B5 <= code) && (code <= 0xD3CF)) ||
+	((0xD3D1 <= code) && (code <= 0xD3EB)) ||
+	((0xD3ED <= code) && (code <= 0xD407)) ||
+	((0xD409 <= code) && (code <= 0xD423)) ||
+	((0xD425 <= code) && (code <= 0xD43F)) ||
+	((0xD441 <= code) && (code <= 0xD45B)) ||
+	((0xD45D <= code) && (code <= 0xD477)) ||
+	((0xD479 <= code) && (code <= 0xD493)) ||
+	((0xD495 <= code) && (code <= 0xD4AF)) ||
+	((0xD4B1 <= code) && (code <= 0xD4CB)) ||
+	((0xD4CD <= code) && (code <= 0xD4E7)) ||
+	((0xD4E9 <= code) && (code <= 0xD503)) ||
+	((0xD505 <= code) && (code <= 0xD51F)) ||
+	((0xD521 <= code) && (code <= 0xD53B)) ||
+	((0xD53D <= code) && (code <= 0xD557)) ||
+	((0xD559 <= code) && (code <= 0xD573)) ||
+	((0xD575 <= code) && (code <= 0xD58F)) ||
+	((0xD591 <= code) && (code <= 0xD5AB)) ||
+	((0xD5AD <= code) && (code <= 0xD5C7)) ||
+	((0xD5C9 <= code) && (code <= 0xD5E3)) ||
+	((0xD5E5 <= code) && (code <= 0xD5FF)) ||
+	((0xD601 <= code) && (code <= 0xD61B)) ||
+	((0xD61D <= code) && (code <= 0xD637)) ||
+	((0xD639 <= code) && (code <= 0xD653)) ||
+	((0xD655 <= code) && (code <= 0xD66F)) ||
+	((0xD671 <= code) && (code <= 0xD68B)) ||
+	((0xD68D <= code) && (code <= 0xD6A7)) ||
+	((0xD6A9 <= code) && (code <= 0xD6C3)) ||
+	((0xD6C5 <= code) && (code <= 0xD6DF)) ||
+	((0xD6E1 <= code) && (code <= 0xD6FB)) ||
+	((0xD6FD <= code) && (code <= 0xD717)) ||
+	((0xD719 <= code) && (code <= 0xD733)) ||
+	((0xD735 <= code) && (code <= 0xD74F)) ||
+	((0xD751 <= code) && (code <= 0xD76B)) ||
+	((0xD76D <= code) && (code <= 0xD787)) ||
+	((0xD789 <= code) && (code <= 0xD7A3)))
+		return HANGUL_LEAD_VOWEL_TRAIL_TYPE;
+
+	return 0;
+}
+
+
+#endif /* _NORM_H_ */

Added: soc2014/ghostmansd/head/lib/libc/string/norm/nfd.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2014/ghostmansd/head/lib/libc/string/norm/nfd.h	Wed Jun 18 03:07:16 2014	(r269713)
@@ -0,0 +1,100 @@
+/*-
+ * Copyright (c) 2014 Dmitry Selyutin <ghostmansd at FreeBSD.org>
+ *
+ * Copyright (c) 2014 The FreeBSD Foundation
+ * All rights reserved.
+ * Portions of this software were developed by David Chisnall
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * 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 curr 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 ``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 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.
+ */
+
+#define NFD_QCHECK_MIN 000000C0
+#define NFD_QCHECK_MAX 0002FA1E
+
+static const wchar_t nfd_qc_single[] = {
+	0x00000374, 0x0000037E, 0x00000385, 0x00000386, 0x00000387, 0x0000038C,
+	0x00000403, 0x00000407, 0x00000419, 0x00000439, 0x00000453, 0x00000457,
+	0x000006C0, 0x000006C2, 0x000006D3, 0x00000929, 0x00000931, 0x00000934,
+	0x000009DF, 0x00000A33, 0x00000A36, 0x00000A5E, 0x00000B48, 0x00000B94,
+	0x00000C48, 0x00000CC0, 0x00000DDA, 0x00000F43, 0x00000F4D, 0x00000F52,
+	0x00000F57, 0x00000F5C, 0x00000F69, 0x00000F73, 0x00000F78, 0x00000F81,
+	0x00000F93, 0x00000F9D, 0x00000FA2, 0x00000FA7, 0x00000FAC, 0x00000FB9,
+	0x00001026, 0x00001B06, 0x00001B08, 0x00001B0A, 0x00001B0C, 0x00001B0E,
+	0x00001B12, 0x00001B3B, 0x00001B3D, 0x00001B43, 0x00001E9B, 0x00001F59,
+	0x00001F5B, 0x00001F5D, 0x00001FBE, 0x00001FC1, 0x00001FFD, 0x00002126,
+	0x000021AE, 0x000021CD, 0x00002204, 0x00002209, 0x0000220C, 0x00002224,
+	0x00002226, 0x00002241, 0x00002244, 0x00002247, 0x00002249, 0x00002260,
+	0x00002262, 0x00002329, 0x0000232A, 0x00002ADC, 0x0000304C, 0x0000304E,
+	0x00003050, 0x00003052, 0x00003054, 0x00003056, 0x00003058, 0x0000305A,
+	0x0000305C, 0x0000305E, 0x00003060, 0x00003062, 0x00003065, 0x00003067,
+	0x00003069, 0x00003094, 0x0000309E, 0x000030AC, 0x000030AE, 0x000030B0,
+	0x000030B2, 0x000030B4, 0x000030B6, 0x000030B8, 0x000030BA, 0x000030BC,
+	0x000030BE, 0x000030C0, 0x000030C2, 0x000030C5, 0x000030C7, 0x000030C9,
+	0x000030F4, 0x000030FE, 0x0000FA10, 0x0000FA12, 0x0000FA20, 0x0000FA22,
+	0x0000FB1D, 0x0000FB1F, 0x0000FB3E, 0x0001109A, 0x0001109C, 0x000110AB,
+	0x000114BE, 0x0000FFFF
+}; /* static const wchar_t nfd_qc_single */
+
+static const wchar_t nfd_qc_ranges[] = {
+	0x000000C0, 0x000000C5, 0x000000C7, 0x000000CF, 0x000000D1, 0x000000D6,
+	0x000000D9, 0x000000DD, 0x000000E0, 0x000000E5, 0x000000E7, 0x000000EF,
+	0x000000F1, 0x000000F6, 0x000000F9, 0x000000FD, 0x000000FF, 0x0000010F,
+	0x00000112, 0x00000125, 0x00000128, 0x00000130, 0x00000134, 0x00000137,
+	0x00000139, 0x0000013E, 0x00000143, 0x00000148, 0x0000014C, 0x00000151,
+	0x00000154, 0x00000165, 0x00000168, 0x0000017E, 0x000001A0, 0x000001A1,
+	0x000001AF, 0x000001B0, 0x000001CD, 0x000001DC, 0x000001DE, 0x000001E3,
+	0x000001E6, 0x000001F0, 0x000001F4, 0x000001F5, 0x000001F8, 0x0000021B,
+	0x0000021E, 0x0000021F, 0x00000226, 0x00000233, 0x00000340, 0x00000341,
+	0x00000343, 0x00000344, 0x00000388, 0x0000038A, 0x0000038E, 0x00000390,
+	0x000003AA, 0x000003B0, 0x000003CA, 0x000003CE, 0x000003D3, 0x000003D4,
+	0x00000400, 0x00000401, 0x0000040C, 0x0000040E, 0x00000450, 0x00000451,
+	0x0000045C, 0x0000045E, 0x00000476, 0x00000477, 0x000004C1, 0x000004C2,
+	0x000004D0, 0x000004D3, 0x000004D6, 0x000004D7, 0x000004DA, 0x000004DF,
+	0x000004E2, 0x000004E7, 0x000004EA, 0x000004F5, 0x000004F8, 0x000004F9,
+	0x00000622, 0x00000626, 0x00000958, 0x0000095F, 0x000009CB, 0x000009CC,
+	0x000009DC, 0x000009DD, 0x00000A59, 0x00000A5B, 0x00000B4B, 0x00000B4C,
+	0x00000B5C, 0x00000B5D, 0x00000BCA, 0x00000BCC, 0x00000CC7, 0x00000CC8,
+	0x00000CCA, 0x00000CCB, 0x00000D4A, 0x00000D4C, 0x00000DDC, 0x00000DDE,
+	0x00000F75, 0x00000F76, 0x00001B40, 0x00001B41, 0x00001E00, 0x00001E99,
+	0x00001EA0, 0x00001EF9, 0x00001F00, 0x00001F15, 0x00001F18, 0x00001F1D,
+	0x00001F20, 0x00001F45, 0x00001F48, 0x00001F4D, 0x00001F50, 0x00001F57,
+	0x00001F5F, 0x00001F7D, 0x00001F80, 0x00001FB4, 0x00001FB6, 0x00001FBC,
+	0x00001FC2, 0x00001FC4, 0x00001FC6, 0x00001FCC, 0x00001FCD, 0x00001FCF,
+	0x00001FD0, 0x00001FD3, 0x00001FD6, 0x00001FDB, 0x00001FDD, 0x00001FDF,
+	0x00001FE0, 0x00001FEC, 0x00001FED, 0x00001FEF, 0x00001FF2, 0x00001FF4,
+	0x00001FF6, 0x00001FFC, 0x00002000, 0x00002001, 0x0000212A, 0x0000212B,
+	0x0000219A, 0x0000219B, 0x000021CE, 0x000021CF, 0x0000226D, 0x00002271,
+	0x00002274, 0x00002275, 0x00002278, 0x00002279, 0x00002280, 0x00002281,
+	0x00002284, 0x00002285, 0x00002288, 0x00002289, 0x000022AC, 0x000022AF,
+	0x000022E0, 0x000022E3, 0x000022EA, 0x000022ED, 0x00003070, 0x00003071,
+	0x00003073, 0x00003074, 0x00003076, 0x00003077, 0x00003079, 0x0000307A,
+	0x0000307C, 0x0000307D, 0x000030D0, 0x000030D1, 0x000030D3, 0x000030D4,
+	0x000030D6, 0x000030D7, 0x000030D9, 0x000030DA, 0x000030DC, 0x000030DD,
+	0x000030F7, 0x000030FA, 0x0000AC00, 0x0000D7A3, 0x0000F900, 0x0000FA0D,
+	0x0000FA15, 0x0000FA1E, 0x0000FA25, 0x0000FA26, 0x0000FA2A, 0x0000FA6D,
+	0x0000FA70, 0x0000FAD9, 0x0000FB2A, 0x0000FB36, 0x0000FB38, 0x0000FB3C,
+	0x0000FB40, 0x0000FB41, 0x0000FB43, 0x0000FB44, 0x0000FB46, 0x0000FB4E,
+	0x0001112E, 0x0001112F, 0x0001134B, 0x0001134C, 0x000114BB, 0x000114BC,
+	0x000115BA, 0x000115BB, 0x0001D15E, 0x0001D164, 0x0001D1BB, 0x0001D1C0,
+	0x0002F800, 0x0002FA1D, 0x0000FFFF, 0x0000FFFF,
+}; /* static const wchar_t nfd_qc_ranges */

Modified: soc2014/ghostmansd/head/lib/libc/string/strnorm.c
==============================================================================
--- soc2014/ghostmansd/head/lib/libc/string/strnorm.c	Wed Jun 18 02:36:21 2014	(r269712)
+++ soc2014/ghostmansd/head/lib/libc/string/strnorm.c	Wed Jun 18 03:07:16 2014	(r269713)
@@ -1,7 +1,5 @@
-/*
+/*-
  * Copyright (c) 2014 Dmitry Selyutin <ghostmansd at FreeBSD.org>
- *     at Lomonosov Moscow State University - www.msu.ru
- *                   All rights reserved.
  *
  * Copyright (c) 2014 The FreeBSD Foundation
  * All rights reserved.
@@ -33,9 +31,9 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <wchar.h>
+#include <string.h>
 #include <xlocale.h>
 #include "xlocale_private.h"
-#include "normalization.h"
 
 
 static size_t __norm_encode(char *buffer, size_t size, wchar_t const *wstr,
@@ -44,7 +42,7 @@
 	static const mbstate_t initial;
 	size_t length = 0;
 	char *mbs = NULL;
-	wchar_t const *wcs = wstr;
+	const wchar_t *wcs = wstr;
 	mbstate_t state = initial;
 
 	FIX_LOCALE(locale);
@@ -83,7 +81,7 @@
 }
 
 
-size_t __strnorm_l(char *buffer, size_t size, char const *str, int form,
+size_t __strnorm_l(char *buffer, size_t size, const char *str, int form,
 				   locale_t locale)
 {
 	int error = 0;
@@ -146,5 +144,5 @@
 }
 
 
-size_t __strnorm(char *buffer, size_t size, char const *str, int form)
+size_t __strnorm(char *buffer, size_t size, const char *str, int form)
 { return __strnorm_l(buffer, size, str, form, __get_locale()); }

Modified: soc2014/ghostmansd/head/lib/libc/string/wcsnorm.c
==============================================================================
--- soc2014/ghostmansd/head/lib/libc/string/wcsnorm.c	Wed Jun 18 02:36:21 2014	(r269712)
+++ soc2014/ghostmansd/head/lib/libc/string/wcsnorm.c	Wed Jun 18 03:07:16 2014	(r269713)
@@ -1,7 +1,5 @@
-/*
+/*-
  * Copyright (c) 2014 Dmitry Selyutin <ghostmansd at FreeBSD.org>
- *     at Lomonosov Moscow State University - www.msu.ru
- *                   All rights reserved.
  *
  * Copyright (c) 2014 The FreeBSD Foundation
  * All rights reserved.
@@ -32,17 +30,41 @@
 
 #include <errno.h>
 #include <stdint.h>
-#include "normalization.h"
+#include "norm/hangul.h"
+#include "norm/nfd.h"
 
 
-static size_t compose(wchar_t *buffer, size_t size, wchar_t const *str)
+static inline int __check(wchar_t code, const wchar_t *single,
+						  const wchar_t *range)
+{
+	wchar_t min = 0;
+	wchar_t max = 0;
+
+	for (; *single != 0x0000FFFF; ++single)
+	{
+		if (*single == code)
+			return 1;
+	}
+	while (*range != 0x0000FFFF)
+	{
+		min = *range++;
+		max = *range++;
+		if ((min <= code) && (code <= max))
+			return 1;
+	}
+	return 0;
+}
+
+
+static size_t __compose(wchar_t *buffer, size_t size, const wchar_t *str,
+						int compatibility)
 {
 	int32_t prev = 0;
 	int32_t curr = 0;
 	size_t index = 0;
 	size_t length = 0;
 	size_t reqsize = 0;
-	wchar_t const *iter = str;
+	const wchar_t *iter = str;
 
 	prev = *str++;
 	if (buffer != NULL)
@@ -90,13 +112,17 @@
 
 	if ((reqsize + 2) > size)
 	{
+		errno = ERANGE;
 		if (buffer != NULL)
 			*--buffer = L'\0';
 		return (reqsize + 2);
 	}
 	++reqsize;
 	if ((reqsize + 1) > size)
+	{
+		errno = ERANGE;
 		return ++reqsize;
+	}
 	if (buffer != NULL)
 	{
 		*buffer++ = prev;
@@ -106,7 +132,8 @@
 }
 
 
-static size_t decompose(wchar_t *buffer, size_t size, wchar_t const *str)
+static size_t __decompose(wchar_t *buffer, size_t size, const wchar_t *str,
+						  int compatibility)
 {
 	size_t count = 0;
 	int32_t curr = 0;
@@ -114,7 +141,7 @@
 	int32_t vowel = 0;
 	int32_t trail = 0;
 	size_t reqsize = 0;
-	wchar_t const *iter = str;
+	const wchar_t *iter = str;
 
 	do {
 		curr = *iter;
@@ -161,14 +188,17 @@
 	} while (++iter);
 
 	if ((reqsize + 1) > size)
+	{
+		errno = ERANGE;
 		return ++reqsize;
+	}
 	if (buffer != NULL)
 		*buffer++ = L'\0';
 	return reqsize;
 }
 
 
-size_t __wcsnorm(wchar_t *buffer, size_t size, wchar_t const *str, int form)
+size_t __wcsnorm(wchar_t *buffer, size_t size, const wchar_t *str, int form)
 {
 	size_t reqsize = 0;
 
@@ -177,29 +207,25 @@
 		errno = EINVAL;
 		return 0;
 	}
+	if (*str == 0)
+	{
+		if (buffer != NULL)
+			*buffer = L'\0';
+		return 1;
+	}
 	switch (form)
 	{
 		case __NORM_NFD:
+			return __decompose(buffer, size, str, 0);
 		case __NORM_NFC:
+			return __compose(buffer, size, str, 0);
 		case __NORM_NFKD:
+			return __decompose(buffer, size, str, 1);
 		case __NORM_NFKC:
-			break;
+			return __compose(buffer, size, str, 0);
 		default:
 			errno = EINVAL;
 			return 0;
 	}
-
-	if (*str == 0)
-	{
-		if (buffer != NULL)
-			*buffer = L'\0';

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-soc-all mailing list