Mercurial > projects > dwt-addons
diff dwtx/dwtxhelper/mangoicu/UText.d @ 91:11e8159caf7a
make the mango icu fork work.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 07 Jul 2008 15:53:07 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtx/dwtxhelper/mangoicu/UText.d Mon Jul 07 15:53:07 2008 +0200 @@ -0,0 +1,241 @@ +/******************************************************************************* + + @file UString.d + + Copyright (c) 2008 Frank Benoit + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for damages + of any kind arising from the use of this software. + + Permission is hereby granted to anyone to use this software for any + purpose, including commercial applications, and to alter it and/or + redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment within documentation of + said product would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any distribution + of the source. + + 4. Derivative works are permitted, but they must carry this notice + in full and credit the original source. + + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + @version Initial version, July 2008 + @author Frank + + Note that this package and documentation is built around the ICU + project (http://oss.software.ibm.com/icu/). Below is the license + statement as specified by that software: + + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + ICU License - ICU 1.8.1 and later + + COPYRIGHT AND PERMISSION NOTICE + + Copyright (c) 1995-2003 International Business Machines Corporation and + others. + + All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, and/or sell copies of the Software, and to permit persons + to whom the Software is furnished to do so, provided that the above + copyright notice(s) and this permission notice appear in all copies of + the Software and that both the above copyright notice(s) and this + permission notice appear in supporting documentation. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Except as contained in this notice, the name of a copyright holder + shall not be used in advertising or otherwise to promote the sale, use + or other dealings in this Software without prior written authorization + of the copyright holder. + + ---------------------------------------------------------------------- + + All trademarks and registered trademarks mentioned herein are the + property of their respective owners. + +*******************************************************************************/ +module dwtx.dwtxhelper.mangoicu.UText; + +import dwtx.dwtxhelper.mangoicu.ICU; + +struct UText { + // UText private fields -- start + private { + uint magic = UTEXT_MAGIC; + int flags = 0; + int providerProperties = 0; + int sizeOfStruct = UText.sizeof; + long chunkNativeLimit = 0; + int extraSize = 0; + int nativeIndexingLimit = 0; + long chunkNativeStart = 0; + int chunkOffset = 0; + int chunkLength = 0; + wchar* chunkContents = null; + void* pFuncs = null; + void* pExtra = null; + void* context = null; + void* p = null; + void* q = null; + void* r = null; + void* privP = null; + long a = 0; + int b = 0; + int c = 0; + long privA = 0; + int privB = 0; + int privC = 0; + } // UText private fields -- end + // do not add any non-static fields + + private enum { + UTEXT_MAGIC = 0x345ad82c + } + void close(){ + utext_close(this); + } + private void ensureStatusOk( ICU.UErrorCode status ){ + if( status !is ICU.UErrorCode.OK ){ + throw new Exception( "ICU Exception" ); + } + } + void openUTF8( char[] str ){ + auto status = ICU.UErrorCode.OK; + utext_openUTF8(this, str.ptr, str.length, status ); + ensureStatusOk( status ); + } + + + /*********************************************************************** + + Bind the ICU functions from a shared library. This is + complicated by the issues regarding D and DLLs on the + Windows platform + + ***********************************************************************/ + + private static void* library; + + /*********************************************************************** + + ***********************************************************************/ + static extern(System){ + UText * function(UText* ut) utext_close; + UText * function(UText* ut, char *s, long length, inout ICU.UErrorCode status) utext_openUTF8; +// UText * function(UText* ut, UChar *s, int64_t length, inout UErrorCode status) utext_openUChars; +// UText * function(UText* ut, U_NAMESPACE_QUALIFIER UnicodeString *s, inout UErrorCode status) utext_openUnicodeString; +// UText * function(UText* ut, U_NAMESPACE_QUALIFIER UnicodeString *s, inout UErrorCode status) utext_openConstUnicodeString; +// UText * function(UText* ut, U_NAMESPACE_QUALIFIER Replaceable *rep, inout UErrorCode status) utext_openReplaceable; +// UText * function(UText* ut, U_NAMESPACE_QUALIFIER CharacterIterator *ic, inout UErrorCode status) utext_openCharacterIterator; +// UText * function(UText* ut, UText *src, UBool deep, UBool readOnly, inout UErrorCode status) utext_clone; +// UBool function(const UText *a, const UText *b) utext_equals; +// int64_t function(UText* ut) utext_nativeLength; +// UBool function(UText* ut) utext_isLengthExpensive; +// UChar32 function(UText* ut, int64_t nativeIndex) utext_char32At; +// UChar32 function(UText* ut) utext_current32; +// UChar32 function(UText* ut) utext_next32; +// UChar32 function(UText* ut) utext_previous32; +// UChar32 function(UText* ut, int64_t nativeIndex) utext_next32From; +// UChar32 function(UText* ut, int64_t nativeIndex) utext_previous32From; +// int64_t function(UText* ut) utext_getNativeIndex; +// void function(UText* ut, int64_t nativeIndex) utext_setNativeIndex; +// UBool function(UText* ut, int delta) utext_moveIndex32; +// int64_t function(UText* ut) utext_getPreviousNativeIndex; +// int function(UText* ut, int64_t nativeStart, int64_t nativeLimit, +// UChar *dest, int destCapacity, +// inout UErrorCode status) utext_extract; +// UBool function(UText* ut) utext_isWritable; +// UBool function(UText* ut) utext_hasMetaData; +// int function(UText* ut, +// int64_t nativeStart, int64_t nativeLimit, +// UChar *replacementText, int replacementLength, +// inout UErrorCode status) utext_replace; +// void function(UText* ut, +// int64_t nativeStart, int64_t nativeLimit, +// int64_t destIndex, +// UBool move, +// inout UErrorCode status) utext_copy; +// void function(UText* ut) utext_freeze; +// UText * function(UText* ut, int extraSpace, inout UErrorCode status) utext_setup; + } + + /*********************************************************************** + + ***********************************************************************/ + static FunctionLoader.Bind[] targets = [ + {cast(void**) &utext_close, "utext_close"}, + {cast(void**) &utext_openUTF8, "utext_openUTF8"}, +// {cast(void**) &utext_openUChars, "utext_openUChars"}, +// {cast(void**) &utext_openUnicodeString, "utext_openUnicodeString"}, +// {cast(void**) &utext_openConstUnicodeString, "utext_openConstUnicodeString"}, +// {cast(void**) &utext_openReplaceable, "utext_openReplaceable"}, +// {cast(void**) &utext_openCharacterIterator, "utext_openCharacterIterator"}, +// {cast(void**) &utext_clone, "utext_clone"}, +// {cast(void**) &utext_equals, "utext_equals"}, +// {cast(void**) &utext_nativeLength, "utext_nativeLength"}, +// {cast(void**) &utext_isLengthExpensive, "utext_isLengthExpensive"}, +// {cast(void**) &utext_char32At, "utext_char32At"}, +// {cast(void**) &utext_current32, "utext_current32"}, +// {cast(void**) &utext_next32, "utext_next32"}, +// {cast(void**) &utext_next32From, "utext_next32From"}, +// {cast(void**) &utext_previous32, "utext_previous32"}, +// {cast(void**) &utext_previous32From, "utext_previous32From"}, +// {cast(void**) &utext_setNativeIndex, "utext_setNativeIndex"}, +// {cast(void**) &utext_moveIndex32, "utext_moveIndex32"}, +// {cast(void**) &utext_getPreviousNativeIndex, "utext_getPreviousNativeIndex"}, +// {cast(void**) &utext_extract, "utext_extract"}, +// {cast(void**) &utext_isWritable, "utext_isWritable"}, +// {cast(void**) &utext_hasMetaData, "utext_hasMetaData"}, +// {cast(void**) &utext_replace, "utext_replace"}, +// {cast(void**) &utext_copy, "utext_copy"}, +// {cast(void**) &utext_freeze, "utext_freeze"}, +// {cast(void**) &utext_setup, "utext_setup"}, + ]; + + /*********************************************************************** + + ***********************************************************************/ + + static this () + { + library = FunctionLoader.bind (ICU.icuuc, targets); + //test (); + } + + /*********************************************************************** + + ***********************************************************************/ + + static ~this () + { + FunctionLoader.unbind (library); + } + +}