[ros-diffs] [hyperion] 33703: modified include/psdk/winnls.h Added definitions for NormalizeString and IsNormalizedString (Vista and later) Correct an embarassing bug (some macros were terminated with "; ", shame shame) added nls added nls/3rdparty added nls/3rdparty/icu We officially welcome IBM's excellent ICU4C library for Unicode support to our humble source tree. May our marriage be long, happy and fertile. added nls/3rdparty/icu4ros.rbuild added nls/dll added nls/dll/normaliz_redist added nls/dll/normaliz_redist/normaliz.cpp added nls/dll/normaliz_redist/normaliz.def added nls/dll/normaliz_redist/normaliz_redist.rbuild added nls/lib added nls/lib/normalize added nls/lib/normalize/normalize.cpp added nls/lib/normalize/normalize.rbuild added nls/nls.rbuild modified ReactOS-generic.rbuild Incomplete implementation of the redistributable normaliz.dll DLL for Unicode normalization, as a technical preview of what's to come from the use of ICU4C - namely, straightforward, painless implementation of complex algorithms and several megabytes worth of data, with a Win32-compatible interface on top. Currently disabled in the build until basic testing is over. Watch this space for more of the same.

hyperion at svn.reactos.org hyperion at svn.reactos.org
Sun May 25 23:00:08 CEST 2008


Author: hyperion
Date: Sun May 25 16:00:08 2008
New Revision: 33703

URL: http://svn.reactos.org/svn/reactos?rev=33703&view=rev
Log:
modified   include/psdk/winnls.h
   Added definitions for NormalizeString and IsNormalizedString (Vista and later)
   Correct an embarassing bug (some macros were terminated with ";", shame shame)

added      nls
added      nls/3rdparty
added      nls/3rdparty/icu
   We officially welcome IBM's excellent ICU4C library for Unicode support to our humble source tree. May our marriage be long, happy and fertile.

added      nls/3rdparty/icu4ros.rbuild
added      nls/dll
added      nls/dll/normaliz_redist
added      nls/dll/normaliz_redist/normaliz.cpp
added      nls/dll/normaliz_redist/normaliz.def
added      nls/dll/normaliz_redist/normaliz_redist.rbuild
added      nls/lib
added      nls/lib/normalize
added      nls/lib/normalize/normalize.cpp
added      nls/lib/normalize/normalize.rbuild
added      nls/nls.rbuild
modified   ReactOS-generic.rbuild
   Incomplete implementation of the redistributable normaliz.dll DLL for Unicode normalization, as a technical preview of what's to come from the use of ICU4C - namely, straightforward, painless implementation of complex algorithms and several megabytes worth of data, with a Win32-compatible interface on top. Currently disabled in the build until basic testing is over.

Watch this space for more of the same.

Added:
    trunk/reactos/nls/
    trunk/reactos/nls/3rdparty/
    trunk/reactos/nls/3rdparty/icu/
      - copied from r33686, vendor/icu4c/current/icu/
    trunk/reactos/nls/3rdparty/icu4ros.rbuild   (with props)
    trunk/reactos/nls/dll/
    trunk/reactos/nls/dll/normaliz_redist/
    trunk/reactos/nls/dll/normaliz_redist/normaliz.cpp   (with props)
    trunk/reactos/nls/dll/normaliz_redist/normaliz.def   (with props)
    trunk/reactos/nls/dll/normaliz_redist/normaliz_redist.rbuild   (with props)
    trunk/reactos/nls/lib/
    trunk/reactos/nls/lib/normalize/
    trunk/reactos/nls/lib/normalize/normalize.cpp   (with props)
    trunk/reactos/nls/lib/normalize/normalize.rbuild   (with props)
    trunk/reactos/nls/nls.rbuild   (with props)
Modified:
    trunk/reactos/ReactOS-generic.rbuild
    trunk/reactos/include/psdk/winnls.h

Modified: trunk/reactos/ReactOS-generic.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ReactOS-generic.rbuild?rev=33703&r1=33702&r2=33703&view=diff
==============================================================================
--- trunk/reactos/ReactOS-generic.rbuild [iso-8859-1] (original)
+++ trunk/reactos/ReactOS-generic.rbuild [iso-8859-1] Sun May 25 16:00:08 2008
@@ -58,6 +58,9 @@
 	<directory name="modules">
 		<xi:include href="modules/directory.rbuild" />
 	</directory>
+	<!--<directory name="nls">
+		<xi:include href="nls/nls.rbuild" />
+	</directory>-->
 	<directory name="ntoskrnl">
 		<xi:include href="ntoskrnl/ntoskrnl.rbuild" />
 		<!-- <xi:include href="ntoskrnl/ntkrnlmp.rbuild" /> -->

Modified: trunk/reactos/include/psdk/winnls.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/winnls.h?rev=33703&r1=33702&r2=33703&view=diff
==============================================================================
--- trunk/reactos/include/psdk/winnls.h [iso-8859-1] (original)
+++ trunk/reactos/include/psdk/winnls.h [iso-8859-1] Sun May 25 16:00:08 2008
@@ -543,6 +543,15 @@
 	LPWSTR lpThousandSep;
 	UINT NegativeOrder;
 } NUMBERFMTW,*LPNUMBERFMTW;
+#if (WINVER >= 0x0600)
+typedef enum _NORM_FORM {
+	NormalizationOther = 0,
+	NormalizationC = 0x1,
+	NormalizationD = 0x2,
+	NormalizationKC = 0x5,
+	NormalizationKD = 0x6
+} NORM_FORM;
+#endif /* (WINVER >= 0x0600) */
 
 int WINAPI CompareStringA(LCID,DWORD,LPCSTR,int,LPCSTR,int);
 int WINAPI CompareStringW(LCID,DWORD,LPCWSTR,int,LPCWSTR,int);
@@ -623,6 +632,10 @@
 LANGID WINAPI GetUserDefaultUILanguage(void);
 BOOL WINAPI IsValidLanguageGroup(LGRPID,DWORD);
 #endif /* (WINVER >= 0x0500) */
+#if (WINVER >= 0x0600)
+int WINAPI NormalizeString(NORM_FORM,LPCWSTR,int,LPWSTR,int);
+BOOL WINAPI IsNormalizedString(NORM_FORM,LPCWSTR,int);
+#endif /* (WINVER >= 0x0600) */
 
 #ifdef UNICODE
 #define CALINFO_ENUMPROC CALINFO_ENUMPROCW
@@ -661,11 +674,11 @@
 #define SetCalendarInfo  SetCalendarInfoW
 #define SetLocaleInfo SetLocaleInfoW
 #if (WINVER >= 0x0500)
-#define EnumCalendarInfoEx EnumCalendarInfoExW;
-#define EnumDateFormatsEx EnumDateFormatsExW;
-#define EnumSystemLanguageGroups EnumSystemLanguageGroupsW;
-#define EnumLanguageGroupLocales EnumLanguageGroupLocalesW;
-#define EnumUILanguages EnumUILanguagesW;
+#define EnumCalendarInfoEx EnumCalendarInfoExW
+#define EnumDateFormatsEx EnumDateFormatsExW
+#define EnumSystemLanguageGroups EnumSystemLanguageGroupsW
+#define EnumLanguageGroupLocales EnumLanguageGroupLocalesW
+#define EnumUILanguages EnumUILanguagesW
 #endif /* (WINVER >= 0x0500) */
 #else
 #define CALINFO_ENUMPROC CALINFO_ENUMPROCA
@@ -704,11 +717,11 @@
 #define SetCalendarInfo SetCalendarInfoA
 #define SetLocaleInfo SetLocaleInfoA
 #if (WINVER >= 0x0500)
-#define EnumCalendarInfoEx EnumCalendarInfoExA;
-#define EnumDateFormatsEx EnumDateFormatsExA;
-#define EnumSystemLanguageGroups EnumSystemLanguageGroupsA;
-#define EnumLanguageGroupLocales EnumLanguageGroupLocalesA;
-#define EnumUILanguages EnumUILanguagesA;
+#define EnumCalendarInfoEx EnumCalendarInfoExA
+#define EnumDateFormatsEx EnumDateFormatsExA
+#define EnumSystemLanguageGroups EnumSystemLanguageGroupsA
+#define EnumLanguageGroupLocales EnumLanguageGroupLocalesA
+#define EnumUILanguages EnumUILanguagesA
 #endif /* (WINVER >= 0x0500) */
 #endif /* UNICODE */
 #endif /* RC_INVOKED */

Added: trunk/reactos/nls/3rdparty/icu4ros.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/nls/3rdparty/icu4ros.rbuild?rev=33703&view=auto
==============================================================================
--- trunk/reactos/nls/3rdparty/icu4ros.rbuild (added)
+++ trunk/reactos/nls/3rdparty/icu4ros.rbuild [iso-8859-1] Sun May 25 16:00:08 2008
@@ -1,0 +1,41 @@
+<?xml version="1.0"?>
+<!DOCTYPE module SYSTEM "../../tools/rbuild/project.dtd">
+<module name="icu4ros" type="staticlibrary" allowwarnings="true">
+	<define name="U_STATIC_IMPLEMENTATION" />
+	<define name="U_HAVE_INTTYPES_H" />
+	<compilerflag>-fno-exceptions</compilerflag>
+	<compilerflag>-fno-rtti</compilerflag>
+	<include base="icu4ros">icu/source/common</include>
+	<directory name="icu">
+	<directory name="source">
+	<directory name="common">
+		<file>bmpset.cpp</file>
+		<file>uhash_us.cpp</file>
+		<file>uiter.cpp</file>
+		<file>unifilt.cpp</file>
+		<file>unifunct.cpp</file>
+		<file>uniset.cpp</file>
+		<file>unisetspan.cpp</file>
+		<file>unistr.cpp</file>
+		<file>unorm.cpp</file>
+		<file>uobject.cpp</file>
+		<file>uset.cpp</file>
+		<file>util.cpp</file>
+		<file>uvector.cpp</file>
+		<file>cmemory.c</file>
+		<file>cstring.c</file>
+		<file>ucln_cmn.c</file>
+		<file>udata.c</file>
+		<file>udataswp.c</file>
+		<file>uhash.c</file>
+		<file>uinvchar.c</file>
+		<file>umath.c</file>
+		<file>umutex.c</file>
+		<file>ustring.c</file>
+		<file>ustrtrns.c</file>
+		<file>utf_impl.c</file>
+		<file>utrie.c</file>
+	</directory>
+	</directory>
+	</directory>
+</module>

Propchange: trunk/reactos/nls/3rdparty/icu4ros.rbuild
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/nls/dll/normaliz_redist/normaliz.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/nls/dll/normaliz_redist/normaliz.cpp?rev=33703&view=auto
==============================================================================
--- trunk/reactos/nls/dll/normaliz_redist/normaliz.cpp (added)
+++ trunk/reactos/nls/dll/normaliz_redist/normaliz.cpp [iso-8859-1] Sun May 25 16:00:08 2008
@@ -1,0 +1,40 @@
+// FIXME: clean up this mess
+
+#ifndef _DEBUG
+#include <stdlib.h>
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+void free(void * memory)
+{
+	HeapFree(GetProcessHeap(), 0, memory);
+}
+
+void * malloc(size_t size)
+{
+	return HeapAlloc(GetProcessHeap(), 0, size);
+}
+
+void * realloc(void * memory, size_t size)
+{
+	return HeapReAlloc(GetProcessHeap(), 0, memory, size);
+}
+
+void operator delete(void * memory)
+{
+	free(memory);
+}
+
+extern "C" int __cdecl _purecall()
+{
+	FatalAppExitW(0, L"pure virtual call");
+	FatalExit(0);
+	return 0;
+}
+
+extern "C" void __cxa_pure_virtual() { _purecall(); }
+
+#endif
+
+// EOF

Propchange: trunk/reactos/nls/dll/normaliz_redist/normaliz.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/nls/dll/normaliz_redist/normaliz.def
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/nls/dll/normaliz_redist/normaliz.def?rev=33703&view=auto
==============================================================================
--- trunk/reactos/nls/dll/normaliz_redist/normaliz.def (added)
+++ trunk/reactos/nls/dll/normaliz_redist/normaliz.def [iso-8859-1] Sun May 25 16:00:08 2008
@@ -1,0 +1,5 @@
+LIBRARY	"normaliz"
+
+EXPORTS
+	NormalizeString=NormalizeString at 20
+	IsNormalizedString=IsNormalizedString at 12

Propchange: trunk/reactos/nls/dll/normaliz_redist/normaliz.def
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/nls/dll/normaliz_redist/normaliz_redist.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/nls/dll/normaliz_redist/normaliz_redist.rbuild?rev=33703&view=auto
==============================================================================
--- trunk/reactos/nls/dll/normaliz_redist/normaliz_redist.rbuild (added)
+++ trunk/reactos/nls/dll/normaliz_redist/normaliz_redist.rbuild [iso-8859-1] Sun May 25 16:00:08 2008
@@ -1,0 +1,10 @@
+<?xml version="1.0"?>
+<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
+<module name="normaliz_redist" type="win32dll" installname="normaliz.dll">
+	<library>normalize</library>
+	<library>icu4ros</library>
+	<compilerflag>-fno-exceptions</compilerflag>
+	<compilerflag>-fno-rtti</compilerflag>
+	<importlibrary definition="normaliz.def" />
+	<file>normaliz.cpp</file>
+</module>

Propchange: trunk/reactos/nls/dll/normaliz_redist/normaliz_redist.rbuild
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/nls/lib/normalize/normalize.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/nls/lib/normalize/normalize.cpp?rev=33703&view=auto
==============================================================================
--- trunk/reactos/nls/lib/normalize/normalize.cpp (added)
+++ trunk/reactos/nls/lib/normalize/normalize.cpp [iso-8859-1] Sun May 25 16:00:08 2008
@@ -1,0 +1,89 @@
+#define WIN32_LEAN_AND_MEAN
+#define STRICT
+
+#define WINVER 0x0600
+
+#include <windows.h>
+#include <winnls.h>
+
+#include <unicode/unorm.h>
+
+static
+UNormalizationMode
+NORMALIZE_ModeToICU
+(
+	NORM_FORM NormForm
+)
+{
+	switch(NormForm)
+	{
+	case NormalizationC: return UNORM_NFC;
+	case NormalizationD: return UNORM_NFD;
+	case NormalizationKC: return UNORM_NFKC;
+	case NormalizationKD: return UNORM_NFKD;
+	case NormalizationOther: break;
+	}
+
+	return UNORM_NONE;
+}
+
+static
+DWORD
+NLS_ErrorFromICU
+(
+	UErrorCode ErrorCode
+)
+{
+	// TODO
+	return ERROR_GEN_FAILURE;
+}
+
+int
+WINAPI
+NormalizeString
+(
+	NORM_FORM NormForm,
+	LPCWSTR lpSrcString,
+	int cwSrcLength,
+	LPWSTR lpDstString,
+	int cwDstLength
+)
+{
+	UErrorCode ErrorCode = U_ZERO_ERROR;
+
+	int retval = unorm_normalize
+	(
+		lpSrcString,
+		cwSrcLength,
+		NORMALIZE_ModeToICU(NormForm),
+		0,
+		lpDstString,
+		cwDstLength,
+		&ErrorCode
+	);
+
+	if(U_FAILURE(ErrorCode))
+		SetLastError(NLS_ErrorFromICU(ErrorCode));
+
+	return retval;
+}
+
+BOOL
+WINAPI
+IsNormalizedString
+(
+	NORM_FORM NormForm,
+	LPCWSTR lpString,
+	int cwLength
+)
+{
+	UErrorCode ErrorCode = U_ZERO_ERROR;
+	BOOL retval = !!unorm_isNormalized(lpString, cwLength, NORMALIZE_ModeToICU(NormForm), &ErrorCode);
+
+	if(U_FAILURE(ErrorCode))
+		SetLastError(NLS_ErrorFromICU(ErrorCode));
+
+	return retval;
+}
+
+// EOF

Propchange: trunk/reactos/nls/lib/normalize/normalize.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/nls/lib/normalize/normalize.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/nls/lib/normalize/normalize.rbuild?rev=33703&view=auto
==============================================================================
--- trunk/reactos/nls/lib/normalize/normalize.rbuild (added)
+++ trunk/reactos/nls/lib/normalize/normalize.rbuild [iso-8859-1] Sun May 25 16:00:08 2008
@@ -1,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
+<module name="normalize" type="staticlibrary">
+	<library>icu4ros</library>
+	<compilerflag>-fno-exceptions</compilerflag>
+	<compilerflag>-fno-rtti</compilerflag>
+	<include base="icu4ros">icu/source/common</include>
+	<file>normalize.cpp</file>
+</module>

Propchange: trunk/reactos/nls/lib/normalize/normalize.rbuild
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/reactos/nls/nls.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/nls/nls.rbuild?rev=33703&view=auto
==============================================================================
--- trunk/reactos/nls/nls.rbuild (added)
+++ trunk/reactos/nls/nls.rbuild [iso-8859-1] Sun May 25 16:00:08 2008
@@ -1,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE group SYSTEM "../tools/rbuild/project.dtd">
+<group xmlns:xi="http://www.w3.org/2001/XInclude">
+	<directory name="3rdparty"><xi:include href="3rdparty/icu4ros.rbuild" /></directory>
+
+	<directory name="lib">
+		<directory name="normalize"><xi:include href="lib/normalize/normalize.rbuild" /></directory>
+	</directory>
+
+	<directory name="dll">
+		<directory name="normaliz_redist"><xi:include href="dll/normaliz_redist/normaliz_redist.rbuild" /></directory>
+	</directory>
+</group>

Propchange: trunk/reactos/nls/nls.rbuild
------------------------------------------------------------------------------
    svn:eol-style = native



More information about the Ros-diffs mailing list