Mercurial > projects > dwt-linux
diff dwt/internal/mozilla/nsEmbedString.d @ 340:3f4a5c7d138f
Fixes
author | John Reimer <terminal.node@gmail.com> |
---|---|
date | Sun, 26 Oct 2008 08:09:00 -0700 |
parents | 93409d9838c5 |
children | 9a4d7706df52 |
line wrap: on
line diff
--- a/dwt/internal/mozilla/nsEmbedString.d Sat Oct 25 21:01:54 2008 -0700 +++ b/dwt/internal/mozilla/nsEmbedString.d Sun Oct 26 08:09:00 2008 -0700 @@ -1,99 +1,90 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code, released March 31, 1998. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by Netscape are Copyright (C) 1998-1999 - * Netscape Communications Corporation. All Rights Reserved. - * - * Contributor(s): - * - * IBM - * - Binding to permit interfacing between Mozilla and DWT - * - Copyright (C) 2004 IBM Corp. All Rights Reserved. - * - * Port to the D programming language: - * John Reimer <terminal.node@gmail.com> - * - * ***** END LICENSE BLOCK ***** */ - module dwt.internal.mozilla.nsEmbedString; -import dwt.dwthelper.utils; +import Utf = tango.text.convert.Utf; + +import dwt.internal.mozilla.Common; import dwt.internal.mozilla.nsStringAPI; -public class nsEmbedString -{ - int /*long*/ handle; - - /************************************************************************** - - **************************************************************************/ - - public this() - { - handle = XPCOM.nsEmbedString_new(); - } - - /************************************************************************** +scope class nsEmbedString +{ + this(wchar[] s) + { + nsresult result; + result = NS_StringContainerInit2(&str, s.ptr, s.length, 0); + if (result != 0) // TODO: convert to XPCOM fail macro + throw new Exception("Init string container fail"); + } - **************************************************************************/ + this() + { + nsresult result; + result = NS_StringContainerInit(&str); + if (result != 0) // TODO: convert to XPCOM fail macro + throw new Exception("Init string container fail"); + } - public nsEmbedString(String string) - { - if (string !is null) - { - char[] aString = new char[string.length() + 1]; - string.getChars(0, string.length(), aString, 0); - handle = XPCOM.nsEmbedString_new(aString); - } - } - - /************************************************************************** - - **************************************************************************/ + nsAString* opCast() + { + return cast(nsAString*)&str; + } - public int /*long*/ getAddress() - { - return handle; - } - - /************************************************************************** - - **************************************************************************/ - - public String toString() + wchar[] toString16() + { + wchar* buffer = null; + PRBool terminated; + uint len = NS_StringGetData(cast(nsAString*)&str, &buffer, &terminated); + return buffer[0 .. len].dup; + } + + char[] toString() { - if (handle is 0) - return null; - int length = XPCOM.nsEmbedString_Length(handle); - int /*long*/ buffer = XPCOM.nsEmbedString_get(handle); - char[] dest = new char[length]; - XPCOM.memmove(dest, buffer, length * 2); - return new String(dest); - } - - /************************************************************************** + return Utf.toString(this.toString16()); + } + ~this() + { + NS_StringContainerFinish(&str); + } +private: + nsStringContainer str; +} + + +scope class nsEmbedCString +{ + this(char[] s) + { + nsresult result; + result = NS_CStringContainerInit2(&str, s.ptr, s.length, 0); + if (result != 0) // TODO: convert to XPCOM fail macro + throw new Exception("Init string container fail"); + } - **************************************************************************/ + this() + { + nsresult result; + result = NS_CStringContainerInit(&str); + if (result != 0) // TODO: convert to XPCOM fail macro + throw new Exception("Init string container fail"); + } + + nsACString* opCast() + { + return cast(nsACString*)&str; + } - public void dispose() - { - if (handle is 0) - return; - XPCOM.nsEmbedString_delete(handle); - handle = 0; - } -} \ No newline at end of file + char[] toString() + { + char* buffer = null; + PRBool terminated; + uint len = NS_CStringGetData(cast(nsACString*)&str, &buffer, &terminated); + return buffer[0 .. len].dup; + } + + ~this() + { + NS_CStringContainerFinish(&str); + } +private: + nsCStringContainer str; +} +