diff -r 000000000000 -r 6474c204b198 intl/unicharutil/src/nsSaveAsCharset.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/intl/unicharutil/src/nsSaveAsCharset.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,72 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsSaveAsCharset_h__ +#define nsSaveAsCharset_h__ + +#include "nsStringFwd.h" +#include "nsTArray.h" +#include "nsISaveAsCharset.h" + + +#define MASK_FALLBACK(a) (nsISaveAsCharset::mask_Fallback & (a)) +#define MASK_ENTITY(a) (nsISaveAsCharset::mask_Entity & (a)) +#define MASK_CHARSET_FALLBACK(a) (nsISaveAsCharset::mask_CharsetFallback & (a)) +#define ATTR_NO_FALLBACK(a) (nsISaveAsCharset::attr_FallbackNone == MASK_FALLBACK(a) && \ + nsISaveAsCharset::attr_EntityAfterCharsetConv != MASK_ENTITY(a)) + +class nsIUnicodeEncoder; +class nsIEntityConverter; + +class nsSaveAsCharset : public nsISaveAsCharset +{ +public: + + // + // implementation methods + // + nsSaveAsCharset(); + virtual ~nsSaveAsCharset(); + + // + // nsISupports + // + NS_DECL_ISUPPORTS + + // + // nsIEntityConverter + // + NS_IMETHOD Init(const char *charset, uint32_t attr, uint32_t entityVersion); + + NS_IMETHOD Convert(const char16_t *inString, char **_retval); + + NS_IMETHODIMP GetCharset(char * *aCharset); + +protected: + + NS_IMETHOD DoCharsetConversion(const char16_t *inString, char **outString); + + NS_IMETHOD DoConversionFallBack(uint32_t inUCS4, char *outString, int32_t bufferLength); + + // do the fallback, reallocate the buffer if necessary + // need to pass destination buffer info (size, current position and estimation of rest of the conversion) + NS_IMETHOD HandleFallBack(uint32_t character, char **outString, int32_t *bufferLength, + int32_t *currentPos, int32_t estimatedLength); + + nsresult SetupUnicodeEncoder(const char* charset); + + nsresult SetupCharsetList(const char *charsetList); + + const char * GetNextCharset(); + + uint32_t mAttribute; // conversion attribute + uint32_t mEntityVersion; // see nsIEntityConverter + nsCOMPtr mEncoder; // encoder (convert from unicode) + nsCOMPtr mEntityConverter; + nsTArray mCharsetList; + int32_t mCharsetListIndex; +}; + +#endif