diff -r 000000000000 -r 6474c204b198 dom/encoding/EncodingUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/encoding/EncodingUtils.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,119 @@ +/* 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 mozilla_dom_encodingutils_h_ +#define mozilla_dom_encodingutils_h_ + +#include "nsDataHashtable.h" +#include "nsString.h" + +class nsIUnicodeDecoder; +class nsIUnicodeEncoder; + +namespace mozilla { +namespace dom { + +class EncodingUtils +{ +public: + + /** + * Implements get an encoding algorithm from Encoding spec. + * http://encoding.spec.whatwg.org/#concept-encoding-get + * Given a label, this function returns the corresponding encoding or a + * false. + * The returned name may not be lowercased due to compatibility with + * our internal implementations. + * + * @param aLabel, incoming label describing charset to be decoded. + * @param aRetEncoding, returning corresponding encoding for label. + * @return false if no encoding was found for label. + * true if valid encoding found. + */ + static bool FindEncodingForLabel(const nsACString& aLabel, + nsACString& aOutEncoding); + + static bool FindEncodingForLabel(const nsAString& aLabel, + nsACString& aOutEncoding) + { + return FindEncodingForLabel(NS_ConvertUTF16toUTF8(aLabel), aOutEncoding); + } + + /** + * Remove any leading and trailing space characters, following the + * definition of space characters from Encoding spec. + * http://encoding.spec.whatwg.org/#terminology + * Note that nsAString::StripWhitespace() doesn't exactly match the + * definition. It also removes all matching chars in the string, + * not just leading and trailing. + * + * @param aString, string to be trimmed. + */ + template + static void TrimSpaceCharacters(T& aString) + { + aString.Trim(" \t\n\f\r"); + } + + /** + * Check is the encoding is ASCII-compatible in the sense that Basic Latin + * encodes to ASCII bytes. (The reverse may not be true!) + * + * @param aPreferredName a preferred encoding label + * @return whether the encoding is ASCII-compatible + */ + static bool IsAsciiCompatible(const nsACString& aPreferredName); + + /** + * Instantiates a decoder for an encoding. The input must be a + * Gecko-canonical encoding name. + * @param aEncoding a Gecko-canonical encoding name + * @return a decoder + */ + static already_AddRefed + DecoderForEncoding(const char* aEncoding) + { + nsDependentCString encoding(aEncoding); + return DecoderForEncoding(encoding); + } + + /** + * Instantiates a decoder for an encoding. The input must be a + * Gecko-canonical encoding name + * @param aEncoding a Gecko-canonical encoding name + * @return a decoder + */ + static already_AddRefed + DecoderForEncoding(const nsACString& aEncoding); + + /** + * Instantiates an encoder for an encoding. The input must be a + * Gecko-canonical encoding name. + * @param aEncoding a Gecko-canonical encoding name + * @return an encoder + */ + static already_AddRefed + EncoderForEncoding(const char* aEncoding) + { + nsDependentCString encoding(aEncoding); + return EncoderForEncoding(encoding); + } + + /** + * Instantiates an encoder for an encoding. The input must be a + * Gecko-canonical encoding name. + * @param aEncoding a Gecko-canonical encoding name + * @return an encoder + */ + static already_AddRefed + EncoderForEncoding(const nsACString& aEncoding); + +private: + EncodingUtils() MOZ_DELETE; +}; + +} // dom +} // mozilla + +#endif // mozilla_dom_encodingutils_h_