mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-11-03 02:56:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef COMPONENTS_TOUTF8_H
 | 
						|
#define COMPONENTS_TOUTF8_H
 | 
						|
 | 
						|
#include <string>
 | 
						|
#include <cstring>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
namespace ToUTF8
 | 
						|
{
 | 
						|
    // These are all the currently supported code pages
 | 
						|
    enum FromType
 | 
						|
    {
 | 
						|
        WINDOWS_1250,      // Central ane Eastern European languages
 | 
						|
        WINDOWS_1251,      // Cyrillic languages
 | 
						|
        WINDOWS_1252,       // Used by English version of Morrowind (and
 | 
						|
            // probably others)
 | 
						|
        CP437           // Used for fonts (*.fnt) if data files encoding is 1252. Otherwise, uses the same encoding as the data files.
 | 
						|
    };
 | 
						|
 | 
						|
    FromType calculateEncoding(const std::string& encodingName);
 | 
						|
    std::string encodingUsingMessage(const std::string& encodingName);
 | 
						|
 | 
						|
    // class
 | 
						|
 | 
						|
    class Utf8Encoder
 | 
						|
    {
 | 
						|
        public:
 | 
						|
            Utf8Encoder(FromType sourceEncoding);
 | 
						|
 | 
						|
            // Convert to UTF8 from the previously given code page.
 | 
						|
            std::string getUtf8(const char *input, size_t size);
 | 
						|
            inline std::string getUtf8(const std::string &str)
 | 
						|
            {
 | 
						|
                return getUtf8(str.c_str(), str.size());
 | 
						|
            }
 | 
						|
 | 
						|
            std::string getLegacyEnc(const char *input, size_t size);
 | 
						|
            inline std::string getLegacyEnc(const std::string &str)
 | 
						|
            {
 | 
						|
                return getLegacyEnc(str.c_str(), str.size());
 | 
						|
            }
 | 
						|
 | 
						|
        private:
 | 
						|
            void resize(size_t size);
 | 
						|
            size_t getLength(const char* input, bool &ascii);
 | 
						|
            void copyFromArray(unsigned char chp, char* &out);
 | 
						|
            size_t getLength2(const char* input, bool &ascii);
 | 
						|
            void copyFromArray2(const char*& chp, char* &out);
 | 
						|
 | 
						|
            std::vector<char> mOutput;
 | 
						|
            signed char* translationArray;
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |