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;
+}
+