Mercurial > projects > dwt-addons
diff dwtx/dwtxhelper/mangoicu/UResourceBundle.d @ 92:f05207c07a98
changed filetype to unix
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 07 Jul 2008 15:54:03 +0200 |
parents | 11e8159caf7a |
children |
line wrap: on
line diff
--- a/dwtx/dwtxhelper/mangoicu/UResourceBundle.d Mon Jul 07 15:53:07 2008 +0200 +++ b/dwtx/dwtxhelper/mangoicu/UResourceBundle.d Mon Jul 07 15:54:03 2008 +0200 @@ -1,544 +1,544 @@ -/******************************************************************************* - - @file UResourceBundle.d - - Copyright (c) 2004 Kris Bell - - 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, November 2004 - @author Kris - - 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.UResourceBundle; - -private import dwtx.dwtxhelper.mangoicu.ICU, - dwtx.dwtxhelper.mangoicu.UString; - -public import dwtx.dwtxhelper.mangoicu.ULocale; - -/******************************************************************************* - - API representing a collection of resource information pertaining to - a given locale. A resource bundle provides a way of accessing locale- - specific information in a data file. You create a resource bundle that - manages the resources for a given locale and then ask it for individual - resources. - - Resource bundles in ICU4C are currently defined using text files which - conform to the following BNF definition. More on resource bundle concepts - and syntax can be found in the Users Guide. - - See <A HREF="http://oss.software.ibm.com/icu/apiref/ures_8h.html"> - this page</A> for full details. - -*******************************************************************************/ - -class UResourceBundle : ICU -{ - private Handle handle; - - /*********************************************************************** - - Internals opened up to the public - - ***********************************************************************/ - - // Numeric constants for types of resource items - public enum ResType - { - None = -1, - String = 0, - Binary = 1, - Table = 2, - Alias = 3, - Int = 7, - Array = 8, - IntVector = 14 - } - - /*********************************************************************** - - private constructor for internal use only - - ***********************************************************************/ - - private this (Handle handle) - { - this.handle = handle; - } - - /*********************************************************************** - - Constructs a resource bundle for the locale-specific bundle - in the specified path. - - locale This is the locale this resource bundle is for. To - get resources for the French locale, for example, you - would create a ResourceBundle passing ULocale::FRENCH - for the "locale" parameter, and all subsequent calls - to that resource bundle will return resources that - pertain to the French locale. If the caller passes a - Locale.Default parameter, the default locale for the - system (as returned by ULocale.getDefault()) will be - used. Passing Locale.Root will cause the root-locale - to be used. - - path This is a full pathname in the platform-specific - format for the directory containing the resource - data files we want to load resources from. We use - locale IDs to generate filenames, and the filenames - have this string prepended to them before being passed - to the C++ I/O functions. Therefore, this string must - always end with a directory delimiter (whatever that - is for the target OS) for this class to work correctly. - A null value will open the default ICU data-files - - ***********************************************************************/ - - this (inout ULocale locale, char[] path = null) - { - UErrorCode e; - - handle = ures_open (toString(path), toString(locale.name), e); - testError (e, "failed to open resource bundle"); - } - - /*********************************************************************** - - ***********************************************************************/ - - ~this () - { - ures_close (handle); - } - - /*********************************************************************** - - Returns the size of a resource. Size for scalar types is - always 1, and for vector/table types is the number of child - resources. - - ***********************************************************************/ - - uint getSize () - { - return ures_getSize (handle); - } - - /*********************************************************************** - - Returns a signed integer from a resource. This integer is - originally 28 bit and the sign gets propagated. - - ***********************************************************************/ - - int getInt () - { - UErrorCode e; - - int x = ures_getInt (handle, e); - testError (e, "failed to get resource integer"); - return x; - } - - /*********************************************************************** - - Returns a string from a string resource type - - ***********************************************************************/ - - UStringView getString () - { - UErrorCode e; - uint len; - - wchar* x = ures_getString (handle, len, e); - testError (e, "failed to get resource string"); - return new UStringView (x[0..len]); - } - - /*********************************************************************** - - Returns the string in a given resource at the specified - index - - ***********************************************************************/ - - UStringView getString (uint index) - { - UErrorCode e; - uint len; - - wchar* x = ures_getStringByIndex (handle, index, len, e); - testError (e, "failed to get resource string"); - return new UStringView (x[0..len]); - } - - /*********************************************************************** - - Returns a string in a resource that has a given key. This - procedure works only with table resources. - - ***********************************************************************/ - - UStringView getString (char[] key) - { - UErrorCode e; - uint len; - - wchar* x = ures_getStringByKey (handle, toString(key), len, e); - testError (e, "failed to get resource string"); - return new UStringView (x[0..len]); - } - - /*********************************************************************** - - Returns the next string in a resource or NULL if there are - no more resources to iterate over - - ***********************************************************************/ - - UStringView getNextString () - { - UErrorCode e; - uint len; - char* key; - - wchar* x = ures_getNextString (handle, len, key, e); - testError (e, "failed to get next resource string"); - return new UStringView (x[0..len]); - } - - /*********************************************************************** - - Returns a binary data from a resource. Can be used at most - primitive resource types (binaries, strings, ints) - - ***********************************************************************/ - - void[] getBinary () - { - UErrorCode e; - uint len; - - void* x = ures_getBinary (handle, len, e); - testError (e, "failed to get binary resource"); - return x[0..len]; - } - - /*********************************************************************** - - Returns an integer vector from a resource - - ***********************************************************************/ - - int[] getIntVector () - { - UErrorCode e; - uint len; - - int* x = ures_getIntVector (handle, len, e); - testError (e, "failed to get vector resource"); - return x[0..len]; - } - - /*********************************************************************** - - Checks whether the resource has another element to - iterate over - - ***********************************************************************/ - - bool hasNext () - { - return ures_hasNext (handle) != 0; - } - - /*********************************************************************** - - Resets the internal context of a resource so that - iteration starts from the first element - - ***********************************************************************/ - - void resetIterator () - { - ures_resetIterator (handle); - } - - /*********************************************************************** - - Returns the next resource in a given resource or NULL if - there are no more resources - - ***********************************************************************/ - - UResourceBundle getNextResource () - { - UErrorCode e; - - return get (ures_getNextResource (handle, null, e), e); - } - - /*********************************************************************** - - Returns a resource that has a given key. This procedure - works only with table resources. - - ***********************************************************************/ - - UResourceBundle getResource (char[] key) - { - UErrorCode e; - - return get (ures_getByKey (handle, toString(key), null, e), e); - } - - /*********************************************************************** - - Returns the resource at the specified index - - ***********************************************************************/ - - UResourceBundle getResource (uint index) - { - UErrorCode e; - - return get (ures_getByIndex (handle, index, null, e), e); - } - - /*********************************************************************** - - Return the version number associated with this ResourceBundle - as a UVersionInfo array - - ***********************************************************************/ - - void getVersion (inout Version info) - { - ures_getVersion (handle, info); - } - - /*********************************************************************** - - Return the ULocale associated with this ResourceBundle - - ***********************************************************************/ - - void getLocale (inout ULocale locale) - { - UErrorCode e; - - locale.name = toArray (ures_getLocale (handle, e)); - testError (e, "failed to get resource locale"); - } - - /*********************************************************************** - - Returns the key associated with this resource. Not all - the resources have a key - only those that are members - of a table. - - ***********************************************************************/ - - char[] getKey () - { - return toArray (ures_getKey (handle)); - } - - /*********************************************************************** - - Returns the type of a resource. Available types are - defined in enum UResType - - ***********************************************************************/ - - ResType getType () - { - return cast(ResType) ures_getType (handle); - } - - /*********************************************************************** - - Worker function for constructing internal ResourceBundle - instances. Returns null when the provided handle is null. - - ***********************************************************************/ - - private static final UResourceBundle get (Handle handle, inout UErrorCode e) - { - testError (e, "failed to create resource bundle"); - if (handle) - return new UResourceBundle (handle); - return null; - } - - - /*********************************************************************** - - 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; - - /*********************************************************************** - - ***********************************************************************/ - - private static extern (C) - { - Handle function (char*, char*, inout UErrorCode) ures_open; - void function (Handle) ures_close; - char* function (Handle, inout UErrorCode) ures_getLocale; - void function (Handle, inout Version) ures_getVersion; - uint function (Handle) ures_getSize; - int function (Handle, inout UErrorCode) ures_getInt; - wchar* function (Handle, inout uint, inout UErrorCode) ures_getString; - wchar* function (Handle, uint, inout uint, inout UErrorCode) ures_getStringByIndex; - wchar* function (Handle, char*, inout uint, inout UErrorCode) ures_getStringByKey; - void* function (Handle, inout uint, inout UErrorCode) ures_getBinary; - int* function (Handle, inout uint, inout UErrorCode) ures_getIntVector; - byte function (Handle) ures_hasNext; - void function (Handle) ures_resetIterator; - wchar* function (Handle, inout uint, inout char*, inout UErrorCode) ures_getNextString; - char* function (Handle) ures_getKey; - int function (Handle) ures_getType; - Handle function (Handle, Handle, inout UErrorCode) ures_getNextResource; - Handle function (Handle, uint, Handle, inout UErrorCode) ures_getByIndex; - Handle function (Handle, char*, Handle, inout UErrorCode) ures_getByKey; - } - - /*********************************************************************** - - ***********************************************************************/ - - static FunctionLoader.Bind[] targets = - [ - {cast(void**) &ures_open, "ures_open"}, - {cast(void**) &ures_close, "ures_close"}, - {cast(void**) &ures_getLocale, "ures_getLocale"}, - {cast(void**) &ures_getVersion, "ures_getVersion"}, - {cast(void**) &ures_getSize, "ures_getSize"}, - {cast(void**) &ures_getInt, "ures_getInt"}, - {cast(void**) &ures_getString, "ures_getString"}, - {cast(void**) &ures_getStringByIndex, "ures_getStringByIndex"}, - {cast(void**) &ures_getStringByKey, "ures_getStringByKey"}, - {cast(void**) &ures_getBinary, "ures_getBinary"}, - {cast(void**) &ures_hasNext, "ures_hasNext"}, - {cast(void**) &ures_resetIterator, "ures_resetIterator"}, - {cast(void**) &ures_getNextString, "ures_getNextString"}, - {cast(void**) &ures_getKey, "ures_getKey"}, - {cast(void**) &ures_getType, "ures_getType"}, - {cast(void**) &ures_getNextResource, "ures_getNextResource"}, - {cast(void**) &ures_getByIndex, "ures_getByIndex"}, - {cast(void**) &ures_getByKey, "ures_getByKey"}, - ]; - - /*********************************************************************** - - ***********************************************************************/ - - static this () - { - library = FunctionLoader.bind (icuuc, targets); - //test (); - } - - /*********************************************************************** - - ***********************************************************************/ - - static ~this () - { - FunctionLoader.unbind (library); - } - - /*********************************************************************** - - ***********************************************************************/ - - static void test() - { - UResourceBundle b = new UResourceBundle (ULocale.Default); - UStringView t = b.getNextString(); - UResourceBundle b1 = b.getNextResource (); - } -} - - +/******************************************************************************* + + @file UResourceBundle.d + + Copyright (c) 2004 Kris Bell + + 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, November 2004 + @author Kris + + 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.UResourceBundle; + +private import dwtx.dwtxhelper.mangoicu.ICU, + dwtx.dwtxhelper.mangoicu.UString; + +public import dwtx.dwtxhelper.mangoicu.ULocale; + +/******************************************************************************* + + API representing a collection of resource information pertaining to + a given locale. A resource bundle provides a way of accessing locale- + specific information in a data file. You create a resource bundle that + manages the resources for a given locale and then ask it for individual + resources. + + Resource bundles in ICU4C are currently defined using text files which + conform to the following BNF definition. More on resource bundle concepts + and syntax can be found in the Users Guide. + + See <A HREF="http://oss.software.ibm.com/icu/apiref/ures_8h.html"> + this page</A> for full details. + +*******************************************************************************/ + +class UResourceBundle : ICU +{ + private Handle handle; + + /*********************************************************************** + + Internals opened up to the public + + ***********************************************************************/ + + // Numeric constants for types of resource items + public enum ResType + { + None = -1, + String = 0, + Binary = 1, + Table = 2, + Alias = 3, + Int = 7, + Array = 8, + IntVector = 14 + } + + /*********************************************************************** + + private constructor for internal use only + + ***********************************************************************/ + + private this (Handle handle) + { + this.handle = handle; + } + + /*********************************************************************** + + Constructs a resource bundle for the locale-specific bundle + in the specified path. + + locale This is the locale this resource bundle is for. To + get resources for the French locale, for example, you + would create a ResourceBundle passing ULocale::FRENCH + for the "locale" parameter, and all subsequent calls + to that resource bundle will return resources that + pertain to the French locale. If the caller passes a + Locale.Default parameter, the default locale for the + system (as returned by ULocale.getDefault()) will be + used. Passing Locale.Root will cause the root-locale + to be used. + + path This is a full pathname in the platform-specific + format for the directory containing the resource + data files we want to load resources from. We use + locale IDs to generate filenames, and the filenames + have this string prepended to them before being passed + to the C++ I/O functions. Therefore, this string must + always end with a directory delimiter (whatever that + is for the target OS) for this class to work correctly. + A null value will open the default ICU data-files + + ***********************************************************************/ + + this (inout ULocale locale, char[] path = null) + { + UErrorCode e; + + handle = ures_open (toString(path), toString(locale.name), e); + testError (e, "failed to open resource bundle"); + } + + /*********************************************************************** + + ***********************************************************************/ + + ~this () + { + ures_close (handle); + } + + /*********************************************************************** + + Returns the size of a resource. Size for scalar types is + always 1, and for vector/table types is the number of child + resources. + + ***********************************************************************/ + + uint getSize () + { + return ures_getSize (handle); + } + + /*********************************************************************** + + Returns a signed integer from a resource. This integer is + originally 28 bit and the sign gets propagated. + + ***********************************************************************/ + + int getInt () + { + UErrorCode e; + + int x = ures_getInt (handle, e); + testError (e, "failed to get resource integer"); + return x; + } + + /*********************************************************************** + + Returns a string from a string resource type + + ***********************************************************************/ + + UStringView getString () + { + UErrorCode e; + uint len; + + wchar* x = ures_getString (handle, len, e); + testError (e, "failed to get resource string"); + return new UStringView (x[0..len]); + } + + /*********************************************************************** + + Returns the string in a given resource at the specified + index + + ***********************************************************************/ + + UStringView getString (uint index) + { + UErrorCode e; + uint len; + + wchar* x = ures_getStringByIndex (handle, index, len, e); + testError (e, "failed to get resource string"); + return new UStringView (x[0..len]); + } + + /*********************************************************************** + + Returns a string in a resource that has a given key. This + procedure works only with table resources. + + ***********************************************************************/ + + UStringView getString (char[] key) + { + UErrorCode e; + uint len; + + wchar* x = ures_getStringByKey (handle, toString(key), len, e); + testError (e, "failed to get resource string"); + return new UStringView (x[0..len]); + } + + /*********************************************************************** + + Returns the next string in a resource or NULL if there are + no more resources to iterate over + + ***********************************************************************/ + + UStringView getNextString () + { + UErrorCode e; + uint len; + char* key; + + wchar* x = ures_getNextString (handle, len, key, e); + testError (e, "failed to get next resource string"); + return new UStringView (x[0..len]); + } + + /*********************************************************************** + + Returns a binary data from a resource. Can be used at most + primitive resource types (binaries, strings, ints) + + ***********************************************************************/ + + void[] getBinary () + { + UErrorCode e; + uint len; + + void* x = ures_getBinary (handle, len, e); + testError (e, "failed to get binary resource"); + return x[0..len]; + } + + /*********************************************************************** + + Returns an integer vector from a resource + + ***********************************************************************/ + + int[] getIntVector () + { + UErrorCode e; + uint len; + + int* x = ures_getIntVector (handle, len, e); + testError (e, "failed to get vector resource"); + return x[0..len]; + } + + /*********************************************************************** + + Checks whether the resource has another element to + iterate over + + ***********************************************************************/ + + bool hasNext () + { + return ures_hasNext (handle) != 0; + } + + /*********************************************************************** + + Resets the internal context of a resource so that + iteration starts from the first element + + ***********************************************************************/ + + void resetIterator () + { + ures_resetIterator (handle); + } + + /*********************************************************************** + + Returns the next resource in a given resource or NULL if + there are no more resources + + ***********************************************************************/ + + UResourceBundle getNextResource () + { + UErrorCode e; + + return get (ures_getNextResource (handle, null, e), e); + } + + /*********************************************************************** + + Returns a resource that has a given key. This procedure + works only with table resources. + + ***********************************************************************/ + + UResourceBundle getResource (char[] key) + { + UErrorCode e; + + return get (ures_getByKey (handle, toString(key), null, e), e); + } + + /*********************************************************************** + + Returns the resource at the specified index + + ***********************************************************************/ + + UResourceBundle getResource (uint index) + { + UErrorCode e; + + return get (ures_getByIndex (handle, index, null, e), e); + } + + /*********************************************************************** + + Return the version number associated with this ResourceBundle + as a UVersionInfo array + + ***********************************************************************/ + + void getVersion (inout Version info) + { + ures_getVersion (handle, info); + } + + /*********************************************************************** + + Return the ULocale associated with this ResourceBundle + + ***********************************************************************/ + + void getLocale (inout ULocale locale) + { + UErrorCode e; + + locale.name = toArray (ures_getLocale (handle, e)); + testError (e, "failed to get resource locale"); + } + + /*********************************************************************** + + Returns the key associated with this resource. Not all + the resources have a key - only those that are members + of a table. + + ***********************************************************************/ + + char[] getKey () + { + return toArray (ures_getKey (handle)); + } + + /*********************************************************************** + + Returns the type of a resource. Available types are + defined in enum UResType + + ***********************************************************************/ + + ResType getType () + { + return cast(ResType) ures_getType (handle); + } + + /*********************************************************************** + + Worker function for constructing internal ResourceBundle + instances. Returns null when the provided handle is null. + + ***********************************************************************/ + + private static final UResourceBundle get (Handle handle, inout UErrorCode e) + { + testError (e, "failed to create resource bundle"); + if (handle) + return new UResourceBundle (handle); + return null; + } + + + /*********************************************************************** + + 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; + + /*********************************************************************** + + ***********************************************************************/ + + private static extern (C) + { + Handle function (char*, char*, inout UErrorCode) ures_open; + void function (Handle) ures_close; + char* function (Handle, inout UErrorCode) ures_getLocale; + void function (Handle, inout Version) ures_getVersion; + uint function (Handle) ures_getSize; + int function (Handle, inout UErrorCode) ures_getInt; + wchar* function (Handle, inout uint, inout UErrorCode) ures_getString; + wchar* function (Handle, uint, inout uint, inout UErrorCode) ures_getStringByIndex; + wchar* function (Handle, char*, inout uint, inout UErrorCode) ures_getStringByKey; + void* function (Handle, inout uint, inout UErrorCode) ures_getBinary; + int* function (Handle, inout uint, inout UErrorCode) ures_getIntVector; + byte function (Handle) ures_hasNext; + void function (Handle) ures_resetIterator; + wchar* function (Handle, inout uint, inout char*, inout UErrorCode) ures_getNextString; + char* function (Handle) ures_getKey; + int function (Handle) ures_getType; + Handle function (Handle, Handle, inout UErrorCode) ures_getNextResource; + Handle function (Handle, uint, Handle, inout UErrorCode) ures_getByIndex; + Handle function (Handle, char*, Handle, inout UErrorCode) ures_getByKey; + } + + /*********************************************************************** + + ***********************************************************************/ + + static FunctionLoader.Bind[] targets = + [ + {cast(void**) &ures_open, "ures_open"}, + {cast(void**) &ures_close, "ures_close"}, + {cast(void**) &ures_getLocale, "ures_getLocale"}, + {cast(void**) &ures_getVersion, "ures_getVersion"}, + {cast(void**) &ures_getSize, "ures_getSize"}, + {cast(void**) &ures_getInt, "ures_getInt"}, + {cast(void**) &ures_getString, "ures_getString"}, + {cast(void**) &ures_getStringByIndex, "ures_getStringByIndex"}, + {cast(void**) &ures_getStringByKey, "ures_getStringByKey"}, + {cast(void**) &ures_getBinary, "ures_getBinary"}, + {cast(void**) &ures_hasNext, "ures_hasNext"}, + {cast(void**) &ures_resetIterator, "ures_resetIterator"}, + {cast(void**) &ures_getNextString, "ures_getNextString"}, + {cast(void**) &ures_getKey, "ures_getKey"}, + {cast(void**) &ures_getType, "ures_getType"}, + {cast(void**) &ures_getNextResource, "ures_getNextResource"}, + {cast(void**) &ures_getByIndex, "ures_getByIndex"}, + {cast(void**) &ures_getByKey, "ures_getByKey"}, + ]; + + /*********************************************************************** + + ***********************************************************************/ + + static this () + { + library = FunctionLoader.bind (icuuc, targets); + //test (); + } + + /*********************************************************************** + + ***********************************************************************/ + + static ~this () + { + FunctionLoader.unbind (library); + } + + /*********************************************************************** + + ***********************************************************************/ + + static void test() + { + UResourceBundle b = new UResourceBundle (ULocale.Default); + UStringView t = b.getNextString(); + UResourceBundle b1 = b.getNextResource (); + } +} + +