зеркало из https://github.com/mozilla/pjs.git
288877 add a function to easily convert a string to a stream, using a given
charset r=jshin sr=bz
This commit is contained in:
Родитель
37bcd52084
Коммит
91a20fddf0
|
@ -37,6 +37,8 @@
|
||||||
|
|
||||||
#include "nsISupports.idl"
|
#include "nsISupports.idl"
|
||||||
|
|
||||||
|
interface nsIInputStream;
|
||||||
|
|
||||||
%{C++
|
%{C++
|
||||||
// {0A698C44-3BFF-11d4-9649-00C0CA135B4E}
|
// {0A698C44-3BFF-11d4-9649-00C0CA135B4E}
|
||||||
#define NS_ISCRIPTABLEUNICODECONVERTER_CID { 0x0A698C44, 0x3BFF, 0x11d4, { 0x96, 0x49, 0x00, 0xC0, 0xCA, 0x13, 0x5B, 0x4E } }
|
#define NS_ISCRIPTABLEUNICODECONVERTER_CID { 0x0A698C44, 0x3BFF, 0x11d4, { 0x96, 0x49, 0x00, 0xC0, 0xCA, 0x13, 0x5B, 0x4E } }
|
||||||
|
@ -49,7 +51,7 @@
|
||||||
* @created 8/Jun/2000
|
* @created 8/Jun/2000
|
||||||
* @author Makoto Kato [m_kato@ga2.so-net.ne.jp]
|
* @author Makoto Kato [m_kato@ga2.so-net.ne.jp]
|
||||||
*/
|
*/
|
||||||
[scriptable, uuid(6a4bd9ef-abbc-47bb-a634-8c944205515a)]
|
[scriptable, uuid(b5a06c58-1e32-4386-85ba-f54c4e8a9b48)]
|
||||||
interface nsIScriptableUnicodeConverter : nsISupports
|
interface nsIScriptableUnicodeConverter : nsISupports
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -57,7 +59,7 @@ interface nsIScriptableUnicodeConverter : nsISupports
|
||||||
* Returns the converted string. After converting, Finish should be called
|
* Returns the converted string. After converting, Finish should be called
|
||||||
* and its return value appended to this return value.
|
* and its return value appended to this return value.
|
||||||
*/
|
*/
|
||||||
string ConvertFromUnicode(in wstring aSrc);
|
string ConvertFromUnicode(in AString aSrc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the terminator string.
|
* Returns the terminator string.
|
||||||
|
@ -69,26 +71,34 @@ interface nsIScriptableUnicodeConverter : nsISupports
|
||||||
/**
|
/**
|
||||||
* Converts the data from one Charset to Unicode.
|
* Converts the data from one Charset to Unicode.
|
||||||
*/
|
*/
|
||||||
wstring ConvertToUnicode(in string aSrc);
|
AString ConvertToUnicode(in string aSrc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts an array of bytes to a unicode string.
|
* Converts an array of bytes to a unicode string.
|
||||||
*/
|
*/
|
||||||
wstring convertFromByteArray([const,array,size_is(aCount)] in octet aData,
|
AString convertFromByteArray([const,array,size_is(aCount)] in octet aData,
|
||||||
in unsigned long aCount);
|
in unsigned long aCount);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a unicode string to an array of bytes. Finish does not need to be
|
* Convert a unicode string to an array of bytes. Finish does not need to be
|
||||||
* called.
|
* called.
|
||||||
*/
|
*/
|
||||||
void convertToByteArray(in wstring aString,
|
void convertToByteArray(in AString aString,
|
||||||
out unsigned long aLen,
|
out unsigned long aLen,
|
||||||
[array, size_is(aLen),retval] out octet aData);
|
[array, size_is(aLen),retval] out octet aData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a unicode string to an input stream. The bytes in the stream are
|
||||||
|
* encoded according to the charset attribute.
|
||||||
|
* The returned stream will be nonblocking.
|
||||||
|
*/
|
||||||
|
nsIInputStream convertToInputStream(in AString aString);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current character set.
|
* Current character set.
|
||||||
*
|
*
|
||||||
* @throw NS_ERROR_UCONV_NOCONV The requested charset is not supported.
|
* @throw NS_ERROR_UCONV_NOCONV
|
||||||
|
* The requested charset is not supported.
|
||||||
*/
|
*/
|
||||||
attribute string charset;
|
attribute string charset;
|
||||||
};
|
};
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "nsICharsetConverterManager.h"
|
#include "nsICharsetConverterManager.h"
|
||||||
#include "nsIScriptableUConv.h"
|
#include "nsIScriptableUConv.h"
|
||||||
#include "nsScriptableUConv.h"
|
#include "nsScriptableUConv.h"
|
||||||
|
#include "nsIStringStream.h"
|
||||||
#include "nsCRT.h"
|
#include "nsCRT.h"
|
||||||
|
|
||||||
#include "nsIPlatformCharset.h"
|
#include "nsIPlatformCharset.h"
|
||||||
|
@ -64,7 +65,7 @@ nsScriptableUnicodeConverter::~nsScriptableUnicodeConverter()
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsScriptableUnicodeConverter::ConvertFromUnicodeWithLength(const PRUnichar *aSrc,
|
nsScriptableUnicodeConverter::ConvertFromUnicodeWithLength(const nsAString& aSrc,
|
||||||
PRInt32* aOutLen,
|
PRInt32* aOutLen,
|
||||||
char **_retval)
|
char **_retval)
|
||||||
{
|
{
|
||||||
|
@ -72,14 +73,15 @@ nsScriptableUnicodeConverter::ConvertFromUnicodeWithLength(const PRUnichar *aSrc
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
PRInt32 inLength = nsCRT::strlen(aSrc);
|
PRInt32 inLength = aSrc.Length();
|
||||||
rv = mEncoder->GetMaxLength(aSrc, inLength, aOutLen);
|
const nsAFlatString& flatSrc = PromiseFlatString(aSrc);
|
||||||
|
rv = mEncoder->GetMaxLength(flatSrc.get(), inLength, aOutLen);
|
||||||
if (NS_SUCCEEDED(rv)) {
|
if (NS_SUCCEEDED(rv)) {
|
||||||
*_retval = (char*) nsMemory::Alloc(*aOutLen+1);
|
*_retval = (char*) nsMemory::Alloc(*aOutLen+1);
|
||||||
if (!*_retval)
|
if (!*_retval)
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
rv = mEncoder->Convert(aSrc, &inLength, *_retval, aOutLen);
|
rv = mEncoder->Convert(flatSrc.get(), &inLength, *_retval, aOutLen);
|
||||||
if (NS_SUCCEEDED(rv))
|
if (NS_SUCCEEDED(rv))
|
||||||
{
|
{
|
||||||
(*_retval)[*aOutLen] = '\0';
|
(*_retval)[*aOutLen] = '\0';
|
||||||
|
@ -91,9 +93,9 @@ nsScriptableUnicodeConverter::ConvertFromUnicodeWithLength(const PRUnichar *aSrc
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* string ConvertFromUnicode ([const] in wstring src); */
|
/* string ConvertFromUnicode ([const] in AString src); */
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsScriptableUnicodeConverter::ConvertFromUnicode(const PRUnichar *aSrc, char **_retval)
|
nsScriptableUnicodeConverter::ConvertFromUnicode(const nsAString& aSrc, char **_retval)
|
||||||
{
|
{
|
||||||
PRInt32 len;
|
PRInt32 len;
|
||||||
return ConvertFromUnicodeWithLength(aSrc, &len, _retval);
|
return ConvertFromUnicodeWithLength(aSrc, &len, _retval);
|
||||||
|
@ -130,22 +132,22 @@ nsScriptableUnicodeConverter::Finish(char **_retval)
|
||||||
return FinishWithLength(_retval, &len);
|
return FinishWithLength(_retval, &len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wstring ConvertToUnicode ([const] in string src); */
|
/* AString ConvertToUnicode ([const] in string src); */
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsScriptableUnicodeConverter::ConvertToUnicode(const char *aSrc, PRUnichar **_retval)
|
nsScriptableUnicodeConverter::ConvertToUnicode(const char *aSrc, nsAString& _retval)
|
||||||
{
|
{
|
||||||
return ConvertFromByteArray(NS_REINTERPRET_CAST(const PRUint8*, aSrc),
|
return ConvertFromByteArray(NS_REINTERPRET_CAST(const PRUint8*, aSrc),
|
||||||
strlen(aSrc),
|
strlen(aSrc),
|
||||||
_retval);
|
_retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wstring convertFromByteArray([const,array,size_is(aCount)] in octet aData,
|
/* AString convertFromByteArray([const,array,size_is(aCount)] in octet aData,
|
||||||
in unsigned long aCount);
|
in unsigned long aCount);
|
||||||
*/
|
*/
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsScriptableUnicodeConverter::ConvertFromByteArray(const PRUint8* aData,
|
nsScriptableUnicodeConverter::ConvertFromByteArray(const PRUint8* aData,
|
||||||
PRUint32 aCount,
|
PRUint32 aCount,
|
||||||
PRUnichar** _retval)
|
nsAString& _retval)
|
||||||
{
|
{
|
||||||
if (!mDecoder)
|
if (!mDecoder)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
@ -157,30 +159,30 @@ nsScriptableUnicodeConverter::ConvertFromByteArray(const PRUint8* aData,
|
||||||
inLength, &outLength);
|
inLength, &outLength);
|
||||||
if (NS_SUCCEEDED(rv))
|
if (NS_SUCCEEDED(rv))
|
||||||
{
|
{
|
||||||
*_retval = (PRUnichar*) nsMemory::Alloc((outLength+1)*sizeof(PRUnichar));
|
PRUnichar* buf = (PRUnichar*) nsMemory::Alloc((outLength+1)*sizeof(PRUnichar));
|
||||||
if (!*_retval)
|
if (!buf)
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
rv = mDecoder->Convert(NS_REINTERPRET_CAST(const char*, aData),
|
rv = mDecoder->Convert(NS_REINTERPRET_CAST(const char*, aData),
|
||||||
&inLength, *_retval, &outLength);
|
&inLength, buf, &outLength);
|
||||||
if (NS_SUCCEEDED(rv))
|
if (NS_SUCCEEDED(rv))
|
||||||
{
|
{
|
||||||
(*_retval)[outLength] = 0;
|
buf[outLength] = 0;
|
||||||
return NS_OK;
|
_retval.Assign(buf, outLength);
|
||||||
}
|
}
|
||||||
nsMemory::Free(*_retval);
|
nsMemory::Free(buf);
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
*_retval = nsnull;
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* void convertToByteArray(in wstring aString,
|
/* void convertToByteArray(in AString aString,
|
||||||
out unsigned long aLen,
|
out unsigned long aLen,
|
||||||
[array, size_is(aLen),retval] out octet aData);
|
[array, size_is(aLen),retval] out octet aData);
|
||||||
*/
|
*/
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsScriptableUnicodeConverter::ConvertToByteArray(const PRUnichar* aString,
|
nsScriptableUnicodeConverter::ConvertToByteArray(const nsAString& aString,
|
||||||
PRUint32* aLen,
|
PRUint32* aLen,
|
||||||
PRUint8** _aData)
|
PRUint8** _aData)
|
||||||
{
|
{
|
||||||
|
@ -206,7 +208,34 @@ nsScriptableUnicodeConverter::ConvertToByteArray(const PRUnichar* aString,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* attribute wstring charset; */
|
/* nsIInputStream convertToInputStream(in AString aString); */
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsScriptableUnicodeConverter::ConvertToInputStream(const nsAString& aString,
|
||||||
|
nsIInputStream** _retval)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
nsCOMPtr<nsIStringInputStream> inputStream =
|
||||||
|
do_CreateInstance("@mozilla.org/io/string-input-stream;1", &rv);
|
||||||
|
if (NS_FAILED(rv))
|
||||||
|
return rv;
|
||||||
|
|
||||||
|
PRUint8* data;
|
||||||
|
PRUint32 dataLen;
|
||||||
|
rv = ConvertToByteArray(aString, &dataLen, &data);
|
||||||
|
if (NS_FAILED(rv))
|
||||||
|
return rv;
|
||||||
|
|
||||||
|
rv = inputStream->AdoptData(NS_REINTERPRET_CAST(char*, data), dataLen);
|
||||||
|
if (NS_FAILED(rv)) {
|
||||||
|
nsMemory::Free(data);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_ADDREF(*_retval = inputStream);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* attribute string charset; */
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsScriptableUnicodeConverter::GetCharset(char * *aCharset)
|
nsScriptableUnicodeConverter::GetCharset(char * *aCharset)
|
||||||
{
|
{
|
||||||
|
|
|
@ -61,7 +61,7 @@ protected:
|
||||||
nsCOMPtr<nsIUnicodeDecoder> mDecoder;
|
nsCOMPtr<nsIUnicodeDecoder> mDecoder;
|
||||||
|
|
||||||
nsresult FinishWithLength(char **_retval, PRInt32* aLength);
|
nsresult FinishWithLength(char **_retval, PRInt32* aLength);
|
||||||
nsresult ConvertFromUnicodeWithLength(const PRUnichar *aSrc,
|
nsresult ConvertFromUnicodeWithLength(const nsAString& aSrc,
|
||||||
PRInt32* aOutLen,
|
PRInt32* aOutLen,
|
||||||
char **_retval);
|
char **_retval);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче