socsvn commit: r269660 - in soc2014/ghostmansd/head: include lib/libc/string
ghostmansd at FreeBSD.org
ghostmansd at FreeBSD.org
Mon Jun 16 22:53:49 UTC 2014
Author: ghostmansd
Date: Mon Jun 16 22:53:46 2014
New Revision: 269660
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269660
Log:
Unicode Normalization Algorithm
Added:
soc2014/ghostmansd/head/lib/libc/string/normalization.h
soc2014/ghostmansd/head/lib/libc/string/strnorm.3
soc2014/ghostmansd/head/lib/libc/string/strnorm.c
soc2014/ghostmansd/head/lib/libc/string/wcsnorm.3
soc2014/ghostmansd/head/lib/libc/string/wcsnorm.c
Modified:
soc2014/ghostmansd/head/include/string.h
soc2014/ghostmansd/head/lib/libc/string/Makefile.inc
Modified: soc2014/ghostmansd/head/include/string.h
==============================================================================
--- soc2014/ghostmansd/head/include/string.h Mon Jun 16 22:44:38 2014 (r269659)
+++ soc2014/ghostmansd/head/include/string.h Mon Jun 16 22:53:46 2014 (r269660)
@@ -36,6 +36,7 @@
#include <sys/cdefs.h>
#include <sys/_null.h>
#include <sys/_types.h>
+#include <xlocale.h>
/*
* Prototype functions which were historically defined in <string.h>, but
@@ -139,6 +140,26 @@
#if __POSIX_VISIBLE >= 200809 || defined(_XLOCALE_H_)
#include <xlocale/_string.h>
#endif
+
+/* Unicode Normalization algorithm */
+#define __NORM_NFD 0
+#define __NORM_NFC 1
+#define __NORM_NFKD 2
+#define __NORM_NFKC 3
+
+size_t __strnorm(char*, size_t, char const*, int);
+size_t __strnorm_l(char*, size_t, char const*, int, locale_t);
+size_t __wcsnorm(wchar_t*, size_t, wchar_t const*, int);
+#ifdef _UNICODE_ADDENDA
+ #define strnorm __strnorm
+ #define wcsnorm __wcsnorm
+ #define NORM_NFD __NORM_NFD
+ #define NORM_NFC __NORM_NFC
+ #define NORM_NFKD __NORM_NFKD
+ #define NORM_NFKC __NORM_NFKC
+#endif
+
+
__END_DECLS
#endif /* _STRING_H_ */
Modified: soc2014/ghostmansd/head/lib/libc/string/Makefile.inc
==============================================================================
--- soc2014/ghostmansd/head/lib/libc/string/Makefile.inc Mon Jun 16 22:44:38 2014 (r269659)
+++ soc2014/ghostmansd/head/lib/libc/string/Makefile.inc Mon Jun 16 22:53:46 2014 (r269660)
@@ -21,6 +21,7 @@
wcsrchr.c wcsspn.c wcsstr.c wcstok.c wcswidth.c wcsxfrm.c wmemchr.c \
wmemcmp.c \
wmemcpy.c wmemmove.c wmemset.c
+MISRCS+=strnorm.c wcsnorm.c
SYM_MAPS+= ${LIBC_SRCTOP}/string/Symbol.map
@@ -28,12 +29,13 @@
# machine-dependent string sources
.sinclude "${LIBC_SRCTOP}/${LIBC_ARCH}/string/Makefile.inc"
-MAN+= bcmp.3 bcopy.3 bstring.3 bzero.3 ffs.3 index.3 memccpy.3 memchr.3 \
+MAN+=bcmp.3 bcopy.3 bstring.3 bzero.3 ffs.3 index.3 memccpy.3 memchr.3 \
memcmp.3 memcpy.3 memmem.3 memmove.3 memset.3 strcasecmp.3 strcat.3 \
strchr.3 strcmp.3 strcoll.3 strcpy.3 strdup.3 strerror.3 \
string.3 strlcpy.3 strlen.3 strmode.3 strpbrk.3 strsep.3 \
strspn.3 strstr.3 strtok.3 strxfrm.3 swab.3 wcscoll.3 wcstok.3 \
wcswidth.3 wcsxfrm.3 wmemchr.3
+MAN+=strnorm.3 wcsnorm.3
MLINKS+=ffs.3 ffsl.3 \
ffs.3 ffsll.3 \
@@ -91,3 +93,4 @@
wmemchr.3 wmemcpy.3 \
wmemchr.3 wmemmove.3 \
wmemchr.3 wmemset.3
+MLINKS+=strnorm.3 wcsnorm.3
Added: soc2014/ghostmansd/head/lib/libc/string/normalization.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/ghostmansd/head/lib/libc/string/normalization.h Mon Jun 16 22:53:46 2014 (r269660)
@@ -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 (int) 0;
+}
+
+
+#endif /* _NORM_H_ */
Added: soc2014/ghostmansd/head/lib/libc/string/strnorm.3
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/ghostmansd/head/lib/libc/string/strnorm.3 Mon Jun 16 22:53:46 2014 (r269660)
@@ -0,0 +1,102 @@
+.\" Copyright (c) 2014 Dmitry Selyutin <ghostmansd at FreeBSD.org>
+.\" Lomonosov Moscow State University. 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.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+.\"
+.Dd June 14, 2014
+.Dt __STRNORM 3
+.Os
+.Sh NAME
+.Nm __strnorm
+.Nd normalize string according to normalization form
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In wchar.h
+.Ft size_t
+.Fn __strnorm "char *buffer" "size_t size" "char const *str" "int form"
+.Sh DESCRIPTION
+The
+.Fn __strnorm
+function normalizes wide string according to normalization form.
+.br
+The caller must ensure that buffer is large enough to store text along with
+null-terminating character.
+.br
+Normalization form can be one of \fB__NORM_NFD\fP, \fB__NORM_NFKD\fP,
+\fB__NORM_NFC\fP, \fB__NORM_NFKC\fP macros.
+.br
+.br
+If \fB_UNICODE_ADDENDA\fP macro is defined, then it is available
+under
+.Fn strnorm
+name.
+.br
+If \fB_UNICODE_ADDENDA\fP macro is defined, normalization forms also
+appear without an underscore prefix.
+.Sh NORMALIZATION FORMS
+.Bl -tag -width Er
+.It \fB__NORM_NFD\fP
+Normalization Form D
+(canonical decomposition)
+.It \fB__NORM_NFKD\fP
+Normalization Form KD
+(compatibility decomposition)
+.It \fB__NORM_NFC\fP
+Normalization Form C
+(canonical decomposition, followed by canonical composition)
+.It \fB__NORM_NFKC\fP
+Normalization Form KC
+(compatibility decomposition, followed by canonical composition)
+.Sh RETURN VALUES
+The
+.Fn __strnorm
+function returns either size of buffer required to store normalized form
+of the string or 0 on error.
+.br
+If buffer is too small to store normalized form,
+function returns the required size (including a space for null-terminating
+character) and sets errno to \fBERANGE\fP. On success, function return number
+of characters written.
+.Sh ERRORS
+The
+.Fn __strnorm
+function will fail if:
+.Bl -tag -width Er
+.It Er \fBEINVAL\fP
+Function received an illegal argument.
+.It Er \fBEILSEQ\fP
+Error during string decode or encode process.
+.It Er \fBERANGE\fP
+Buffer is not large enough to store normalized form of the string.
+.It Er \fBENOMEM\fP
+Cannot allocate enough memory for temporary buffers.
+.El
+.Sh SEE ALSO
+.Xr strnorm 3
+.Sh STANDARDS
+The
+.Fn __strnorm
+is a non-standart extension, used by Unicode Collation Algorithm.
Added: soc2014/ghostmansd/head/lib/libc/string/strnorm.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/ghostmansd/head/lib/libc/string/strnorm.c Mon Jun 16 22:53:46 2014 (r269660)
@@ -0,0 +1,150 @@
+/*
+ * 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.
+ */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <wchar.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,
+ locale_t locale)
+{
+ static const mbstate_t initial;
+ size_t length = 0;
+ char *mbs = NULL;
+ wchar_t const *wcs = wstr;
+ mbstate_t state = initial;
+
+ FIX_LOCALE(locale);
+ length = wcsrtombs_l(NULL, &wcs, 0, &state, locale);
+ if (length == ((size_t)-1))
+ return 0;
+ else if (length > size)
+ {
+ if (size == 0)
+ return length;
+ errno = ERANGE;
+ return 0;
+ }
+ return wcsrtombs_l(mbs, &wstr, length, &state, locale);
+}
+
+
+static wchar_t *__norm_decode(char const *str, locale_t locale)
+{
+ static const mbstate_t initial;
+ size_t length = 0;
+ wchar_t *wcs = NULL;
+ const char *mbs = str;
+ mbstate_t state = initial;
+
+ FIX_LOCALE(locale);
+ length = mbsrtowcs_l(NULL, &mbs, 0, &state, locale);
+ if (length == ((size_t)-1))
+ return NULL;
+ if ((wcs = malloc((length + 1) * sizeof(wchar_t))) == NULL)
+ return NULL;
+ mbsrtowcs_l(wcs, &str, length, &state, locale);
+ wcs[length] = 0;
+ state = initial;
+ return wcs;
+}
+
+
+size_t __strnorm_l(char *buffer, size_t size, char const *str, int form,
+ locale_t locale)
+{
+ int error = 0;
+ size_t wsize = 0;
+ size_t reqsize = 0;
+ size_t wreqsize = 0;
+ wchar_t *wstr = NULL;
+ wchar_t *wbuffer = NULL;
+
+#define __strnorm_failure() \
+do { \
+ error = errno; \
+ free(wbuffer); \
+ free(wstr); \
+ errno = error; \
+ return 0; \
+} while (0)
+
+ /* Check initial arguments. */
+ if ((str == NULL) || ((buffer != NULL) && (size == 0)))
+ {
+ errno = EINVAL;
+ return 0;
+ }
+ switch (form)
+ {
+ case __NORM_NFD:
+ case __NORM_NFC:
+ case __NORM_NFKD:
+ case __NORM_NFKC:
+ break;
+ default:
+ errno = EINVAL;
+ return 0;
+ }
+
+ /* Acquire __wcsnorm() arguments. */
+ FIX_LOCALE(locale);
+ if ((wstr = __norm_decode(str, locale)) == NULL)
+ __strnorm_failure();
+ if ((wsize = __wcsnorm(NULL, 0, wstr, form) == 0))
+ __strnorm_failure();
+ if ((wbuffer = malloc(wsize * sizeof(wchar_t))) == NULL)
+ __strnorm_failure();
+
+ /* Normalize the wide string. */
+ wreqsize = __wcsnorm(wbuffer, wsize, wstr, form);
+ if ((wreqsize == 0) || (wreqsize > wsize))
+ __strnorm_failure();
+
+ /* Check if byte buffer is large enough. */
+ reqsize = __norm_encode(buffer, size, wbuffer, locale);
+ if (reqsize == ((size_t)-1))
+ __strnorm_failure();
+ error = errno;
+ free(wbuffer);
+ free(wstr);
+ errno = error;
+ return reqsize;
+}
+
+
+size_t __strnorm(char *buffer, size_t size, char const *str, int form)
+{ return __strnorm_l(buffer, size, str, form, __get_locale()); }
Added: soc2014/ghostmansd/head/lib/libc/string/wcsnorm.3
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/ghostmansd/head/lib/libc/string/wcsnorm.3 Mon Jun 16 22:53:46 2014 (r269660)
@@ -0,0 +1,100 @@
+.\" Copyright (c) 2014 Dmitry Selyutin <ghostmansd at FreeBSD.org>
+.\" Lomonosov Moscow State University. 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.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+.\"
+.Dd June 14, 2014
+.Dt __WCSNORM 3
+.Os
+.Sh NAME
+.Nm __wcsnorm
+.Nd normalize wide string according to normalization form
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In wchar.h
+.Ft size_t
+.Fn __wcsnorm "wchar_t *buffer" "size_t size" "wchar_t const *str" "int form"
+.Sh DESCRIPTION
+The
+.Fn __wcsnorm
+function normalizes wide string according to normalization form.
+.br
+The caller must ensure that buffer is large enough to store text along with
+null-terminating character.
+.br
+Normalization form can be one of \fB__NORM_NFD\fP, \fB__NORM_NFKD\fP,
+\fB__NORM_NFC\fP, \fB__NORM_NFKC\fP macros.
+.br
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-soc-all
mailing list