diff dwtx/dwtxhelper/mangoicu/UMessageFormat.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/UMessageFormat.d	Mon Jul 07 15:53:07 2008 +0200
+++ b/dwtx/dwtxhelper/mangoicu/UMessageFormat.d	Mon Jul 07 15:54:03 2008 +0200
@@ -1,395 +1,395 @@
-/*******************************************************************************
-
-        @file UMessageFormat.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.UMessageFormat;
-
-private import  dwtx.dwtxhelper.mangoicu.ICU,
-                dwtx.dwtxhelper.mangoicu.UString;
-
-public  import  dwtx.dwtxhelper.mangoicu.ULocale;
-
-/*******************************************************************************
-
-        Provides means to produce concatenated messages in language-neutral 
-        way. Use this for all concatenations that show up to end users. Takes 
-        a set of objects, formats them, then inserts the formatted strings into 
-        the pattern at the appropriate places. 
-
-        See <A HREF="http://oss.software.ibm.com/icu/apiref/umsg_8h.html">
-        this page</A> for full details.
-
-*******************************************************************************/
-
-class UMessageFormat : ICU
-{       
-        private Handle handle;
-
-        /***********************************************************************
-
-                Open a message formatter with given wchar[] and for the 
-                given locale.
-
-        ***********************************************************************/
-
-        this (wchar[] pattern, inout ULocale locale = ULocale.Default)
-        {       
-                UErrorCode e;
-
-                handle = umsg_open (pattern.ptr, pattern.length, toString(locale.name), null, e);
-                testError (e, "failed to open message formatter");
-        }
-
-        /***********************************************************************
-
-                Open a message formatter with given pattern and for the 
-                given locale.
-
-        ***********************************************************************/
-
-        this (UStringView pattern, inout ULocale locale = ULocale.Default)
-        {
-                this (pattern.get, locale);
-        }
-
-        /***********************************************************************
-        
-                Release message formatter
-
-        ***********************************************************************/
-
-        ~this ()
-        {
-                umsg_close (handle);
-        }
-
-        /***********************************************************************
-
-                This locale is used for fetching default number or date 
-                format information
-
-        ***********************************************************************/
-
-        UMessageFormat setLocale (inout ULocale locale)
-        {
-                umsg_setLocale (handle, toString(locale.name));
-                return this;
-        }
-
-        /***********************************************************************
-
-                This locale is used for fetching default number or date 
-                format information
-
-        ***********************************************************************/
-
-        UMessageFormat getLocale (inout ULocale locale)
-        {
-                locale.name = toArray (umsg_getLocale (handle));
-                return this;
-        }
-
-        /***********************************************************************
-
-                Sets the pattern
-
-        ***********************************************************************/
-
-        UMessageFormat setPattern (UStringView pattern)
-        {
-                UErrorCode e;
-
-                umsg_applyPattern (handle, pattern.get.ptr, pattern.len, null, e);
-                testError (e, "failed to set formatter pattern");
-                return this;
-        }
-
-        /***********************************************************************
-
-                Gets the pattern
-                      
-        ***********************************************************************/
-
-        UMessageFormat getPattern (UString s)
-        {
-                uint fmt (wchar* dst, uint length, inout UErrorCode e)
-                {
-                        return umsg_toPattern (handle, dst, length, e);
-                }
-
-                s.format (&fmt, "failed to get formatter pattern");
-                return this;
-        }
-
-        /***********************************************************************
-
-                This function may perform re-ordering of the arguments 
-                depending on the locale. For all numeric arguments, double 
-                is assumed unless the type is explicitly integer. All choice 
-                format arguments must be of type double.
-
-        ***********************************************************************/
-
-        UMessageFormat format (UString s, Args* list)
-        {
-                uint fmt (wchar* dst, uint length, inout UErrorCode e)
-                {
-                        return umsg_vformat (handle, dst, length, list.args.ptr, e);
-                }
-
-                s.format (&fmt, "failed to format pattern");
-                return this;
-        }
-        
-
-        /***********************************************************************
-
-                A typesafe list of arguments for the UMessageFormat.format() 
-                method. This should be used in the following manner:
-
-                @code
-                wchar[] format = "{0} {1, number, currency} {2, number, integer}";
-                UMessageFormat msg = new UMessageFormat (format);
-
-                msg.Args args;
-                msg.format (output, args.add("abc").add(152.0).add(456));
-                @endcode
-
-                Note that the argument order must follow that of the format 
-                string, although the format string may dictate the ultimate 
-                position of each argument. 
-
-                See http://oss.software.ibm.com/icu/apiref/umsg_8h.html for 
-                details on the format string.
-
-                @todo this will likely fail on certain CPU architectures.
-
-        ***********************************************************************/
-
-        struct Args
-        {
-                private uint[32] args;
-                private uint     index;
-
-                /***************************************************************
-
-                ***************************************************************/
-
-                invariant 
-                {
-                       assert (index < args.length);
-                }
-
-                /***************************************************************
-
-                ***************************************************************/
-
-                Args* reset ()
-                {
-                        index = 0;
-                        return this;
-                }
-
-                /***************************************************************
-
-                ***************************************************************/
-
-                Args* add (UStringView x)
-                {
-                        args[index] = cast(uint) cast(wchar*) x.get();
-                        ++index;
-                        return this;
-                }
-
-                /***************************************************************
-
-                ***************************************************************/
-
-                Args* add (wchar[] x)
-                {
-                        args[index] = cast(uint) cast(wchar*) x;
-                        ++index;
-                        return this;
-                }
-
-                /***************************************************************
-
-                ***************************************************************/
-
-                Args* add (int x)
-                {
-                        args[index] = x;
-                        ++index;
-                        return this;
-                }
-
-                /***************************************************************
-
-                ***************************************************************/
-
-                Args* add (double x)
-                {
-                        *(cast(double*) &args[index]) = x;
-                        index += 2;
-                        return this;
-                }
-        }
-
-
-        /***********************************************************************
-        
-                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 (wchar*, uint, char*, void*, inout UErrorCode) umsg_open;
-                void    function (Handle) umsg_close;
-                void    function (Handle, char*) umsg_setLocale;
-                char*   function (Handle) umsg_getLocale;
-                uint    function (Handle, wchar*, uint, inout UErrorCode) umsg_toPattern;
-                void    function (Handle, wchar*, uint, void*, inout UErrorCode) umsg_applyPattern;
-                uint    function (Handle, wchar*, uint, void*, inout UErrorCode) umsg_vformat;
-        }
-
-        /***********************************************************************
-
-        ***********************************************************************/
-
-        static  FunctionLoader.Bind[] targets = 
-                [
-                {cast(void**) &umsg_open,               "umsg_open"}, 
-                {cast(void**) &umsg_close,              "umsg_close"},
-                {cast(void**) &umsg_setLocale,          "umsg_setLocale"},
-                {cast(void**) &umsg_getLocale,          "umsg_getLocale"},
-                {cast(void**) &umsg_toPattern,          "umsg_toPattern"},
-                {cast(void**) &umsg_applyPattern,       "umsg_applyPattern"},
-                {cast(void**) &umsg_vformat,            "umsg_vformat"},
-                ];
-
-        /***********************************************************************
-
-        ***********************************************************************/
-
-        static this ()
-        {
-                library = FunctionLoader.bind (icuin, targets);
-                //test ();
-        }
-
-        /***********************************************************************
-
-        ***********************************************************************/
-
-        static ~this ()
-        {
-                FunctionLoader.unbind (library);
-        }
-
-        /***********************************************************************
-
-        ***********************************************************************/
-
-        static void test()
-        {
-                UString output = new UString(100);
-                wchar[] format = "{0} {1, number, currency} {2, number, integer}";
-
-                UMessageFormat msg = new UMessageFormat (format);
-
-                msg.Args args;
-                msg.format (output, args.add("abc").add(152.0).add(456));
-        }
-}
-
-
-
+/*******************************************************************************
+
+        @file UMessageFormat.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.UMessageFormat;
+
+private import  dwtx.dwtxhelper.mangoicu.ICU,
+                dwtx.dwtxhelper.mangoicu.UString;
+
+public  import  dwtx.dwtxhelper.mangoicu.ULocale;
+
+/*******************************************************************************
+
+        Provides means to produce concatenated messages in language-neutral 
+        way. Use this for all concatenations that show up to end users. Takes 
+        a set of objects, formats them, then inserts the formatted strings into 
+        the pattern at the appropriate places. 
+
+        See <A HREF="http://oss.software.ibm.com/icu/apiref/umsg_8h.html">
+        this page</A> for full details.
+
+*******************************************************************************/
+
+class UMessageFormat : ICU
+{       
+        private Handle handle;
+
+        /***********************************************************************
+
+                Open a message formatter with given wchar[] and for the 
+                given locale.
+
+        ***********************************************************************/
+
+        this (wchar[] pattern, inout ULocale locale = ULocale.Default)
+        {       
+                UErrorCode e;
+
+                handle = umsg_open (pattern.ptr, pattern.length, toString(locale.name), null, e);
+                testError (e, "failed to open message formatter");
+        }
+
+        /***********************************************************************
+
+                Open a message formatter with given pattern and for the 
+                given locale.
+
+        ***********************************************************************/
+
+        this (UStringView pattern, inout ULocale locale = ULocale.Default)
+        {
+                this (pattern.get, locale);
+        }
+
+        /***********************************************************************
+        
+                Release message formatter
+
+        ***********************************************************************/
+
+        ~this ()
+        {
+                umsg_close (handle);
+        }
+
+        /***********************************************************************
+
+                This locale is used for fetching default number or date 
+                format information
+
+        ***********************************************************************/
+
+        UMessageFormat setLocale (inout ULocale locale)
+        {
+                umsg_setLocale (handle, toString(locale.name));
+                return this;
+        }
+
+        /***********************************************************************
+
+                This locale is used for fetching default number or date 
+                format information
+
+        ***********************************************************************/
+
+        UMessageFormat getLocale (inout ULocale locale)
+        {
+                locale.name = toArray (umsg_getLocale (handle));
+                return this;
+        }
+
+        /***********************************************************************
+
+                Sets the pattern
+
+        ***********************************************************************/
+
+        UMessageFormat setPattern (UStringView pattern)
+        {
+                UErrorCode e;
+
+                umsg_applyPattern (handle, pattern.get.ptr, pattern.len, null, e);
+                testError (e, "failed to set formatter pattern");
+                return this;
+        }
+
+        /***********************************************************************
+
+                Gets the pattern
+                      
+        ***********************************************************************/
+
+        UMessageFormat getPattern (UString s)
+        {
+                uint fmt (wchar* dst, uint length, inout UErrorCode e)
+                {
+                        return umsg_toPattern (handle, dst, length, e);
+                }
+
+                s.format (&fmt, "failed to get formatter pattern");
+                return this;
+        }
+
+        /***********************************************************************
+
+                This function may perform re-ordering of the arguments 
+                depending on the locale. For all numeric arguments, double 
+                is assumed unless the type is explicitly integer. All choice 
+                format arguments must be of type double.
+
+        ***********************************************************************/
+
+        UMessageFormat format (UString s, Args* list)
+        {
+                uint fmt (wchar* dst, uint length, inout UErrorCode e)
+                {
+                        return umsg_vformat (handle, dst, length, list.args.ptr, e);
+                }
+
+                s.format (&fmt, "failed to format pattern");
+                return this;
+        }
+        
+
+        /***********************************************************************
+
+                A typesafe list of arguments for the UMessageFormat.format() 
+                method. This should be used in the following manner:
+
+                @code
+                wchar[] format = "{0} {1, number, currency} {2, number, integer}";
+                UMessageFormat msg = new UMessageFormat (format);
+
+                msg.Args args;
+                msg.format (output, args.add("abc").add(152.0).add(456));
+                @endcode
+
+                Note that the argument order must follow that of the format 
+                string, although the format string may dictate the ultimate 
+                position of each argument. 
+
+                See http://oss.software.ibm.com/icu/apiref/umsg_8h.html for 
+                details on the format string.
+
+                @todo this will likely fail on certain CPU architectures.
+
+        ***********************************************************************/
+
+        struct Args
+        {
+                private uint[32] args;
+                private uint     index;
+
+                /***************************************************************
+
+                ***************************************************************/
+
+                invariant 
+                {
+                       assert (index < args.length);
+                }
+
+                /***************************************************************
+
+                ***************************************************************/
+
+                Args* reset ()
+                {
+                        index = 0;
+                        return this;
+                }
+
+                /***************************************************************
+
+                ***************************************************************/
+
+                Args* add (UStringView x)
+                {
+                        args[index] = cast(uint) cast(wchar*) x.get();
+                        ++index;
+                        return this;
+                }
+
+                /***************************************************************
+
+                ***************************************************************/
+
+                Args* add (wchar[] x)
+                {
+                        args[index] = cast(uint) cast(wchar*) x;
+                        ++index;
+                        return this;
+                }
+
+                /***************************************************************
+
+                ***************************************************************/
+
+                Args* add (int x)
+                {
+                        args[index] = x;
+                        ++index;
+                        return this;
+                }
+
+                /***************************************************************
+
+                ***************************************************************/
+
+                Args* add (double x)
+                {
+                        *(cast(double*) &args[index]) = x;
+                        index += 2;
+                        return this;
+                }
+        }
+
+
+        /***********************************************************************
+        
+                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 (wchar*, uint, char*, void*, inout UErrorCode) umsg_open;
+                void    function (Handle) umsg_close;
+                void    function (Handle, char*) umsg_setLocale;
+                char*   function (Handle) umsg_getLocale;
+                uint    function (Handle, wchar*, uint, inout UErrorCode) umsg_toPattern;
+                void    function (Handle, wchar*, uint, void*, inout UErrorCode) umsg_applyPattern;
+                uint    function (Handle, wchar*, uint, void*, inout UErrorCode) umsg_vformat;
+        }
+
+        /***********************************************************************
+
+        ***********************************************************************/
+
+        static  FunctionLoader.Bind[] targets = 
+                [
+                {cast(void**) &umsg_open,               "umsg_open"}, 
+                {cast(void**) &umsg_close,              "umsg_close"},
+                {cast(void**) &umsg_setLocale,          "umsg_setLocale"},
+                {cast(void**) &umsg_getLocale,          "umsg_getLocale"},
+                {cast(void**) &umsg_toPattern,          "umsg_toPattern"},
+                {cast(void**) &umsg_applyPattern,       "umsg_applyPattern"},
+                {cast(void**) &umsg_vformat,            "umsg_vformat"},
+                ];
+
+        /***********************************************************************
+
+        ***********************************************************************/
+
+        static this ()
+        {
+                library = FunctionLoader.bind (icuin, targets);
+                //test ();
+        }
+
+        /***********************************************************************
+
+        ***********************************************************************/
+
+        static ~this ()
+        {
+                FunctionLoader.unbind (library);
+        }
+
+        /***********************************************************************
+
+        ***********************************************************************/
+
+        static void test()
+        {
+                UString output = new UString(100);
+                wchar[] format = "{0} {1, number, currency} {2, number, integer}";
+
+                UMessageFormat msg = new UMessageFormat (format);
+
+                msg.Args args;
+                msg.format (output, args.add("abc").add(152.0).add(456));
+        }
+}
+
+
+