2006-08-13 22:54:59 +00:00
|
|
|
/**
|
|
|
|
* \file unicode.h
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
*
|
2008-11-14 15:58:50 +00:00
|
|
|
* \author Lars Gullik Bjønnes
|
2006-08-13 22:54:59 +00:00
|
|
|
*
|
|
|
|
* Full author contact details are available in file CREDITS.
|
|
|
|
*
|
|
|
|
* A collection of unicode conversion functions, using iconv.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef LYX_SUPPORT_UNICODE_H
|
|
|
|
#define LYX_SUPPORT_UNICODE_H
|
|
|
|
|
2007-10-31 22:40:34 +00:00
|
|
|
#include "support/strfwd.h"
|
2006-09-13 17:11:39 +00:00
|
|
|
|
2006-08-13 22:54:59 +00:00
|
|
|
#include <vector>
|
|
|
|
|
2006-10-21 00:16:43 +00:00
|
|
|
|
|
|
|
namespace lyx {
|
|
|
|
|
2006-10-29 21:59:59 +00:00
|
|
|
class IconvProcessor
|
|
|
|
{
|
|
|
|
public:
|
2007-11-29 07:24:55 +00:00
|
|
|
IconvProcessor(char const * tocode = "", char const * fromcode = "");
|
2006-11-15 21:40:46 +00:00
|
|
|
/// copy constructor needed because of pimpl_
|
|
|
|
IconvProcessor(IconvProcessor const &);
|
|
|
|
/// assignment operator needed because of pimpl_
|
2007-11-29 07:24:55 +00:00
|
|
|
void operator=(IconvProcessor const &);
|
|
|
|
/// destructor
|
2006-10-29 21:59:59 +00:00
|
|
|
~IconvProcessor();
|
|
|
|
|
|
|
|
/// convert any data from \c fromcode to \c tocode unicode format.
|
|
|
|
/// \return the number of bytes of the converted output buffer.
|
2007-11-29 07:24:55 +00:00
|
|
|
int convert(char const * in_buffer, size_t in_size,
|
|
|
|
char * out_buffer, size_t max_out_size);
|
|
|
|
|
2009-05-19 15:27:54 +00:00
|
|
|
/// source encoding
|
|
|
|
std::string from() const;
|
|
|
|
/// target encoding
|
|
|
|
std::string to() const;
|
|
|
|
|
2006-10-29 21:59:59 +00:00
|
|
|
private:
|
|
|
|
/// open iconv.
|
|
|
|
/// \return true if the processor is ready to use.
|
|
|
|
bool init();
|
2007-11-29 07:24:55 +00:00
|
|
|
/// hide internals
|
|
|
|
struct Impl;
|
|
|
|
Impl * pimpl_;
|
2006-10-29 21:59:59 +00:00
|
|
|
};
|
|
|
|
|
2006-09-10 18:34:24 +00:00
|
|
|
// A single codepoint conversion for utf8_to_ucs4 does not make
|
|
|
|
// sense, so that function is left out.
|
|
|
|
|
2007-05-08 14:09:27 +00:00
|
|
|
std::vector<char_type> utf8_to_ucs4(std::vector<char> const & utf8str);
|
2006-08-13 22:54:59 +00:00
|
|
|
|
2007-05-08 14:09:27 +00:00
|
|
|
std::vector<char_type> utf8_to_ucs4(char const * utf8str, size_t ls);
|
2006-09-10 18:34:24 +00:00
|
|
|
|
2006-12-04 13:50:46 +00:00
|
|
|
// utf16_to_ucs4
|
2006-09-10 18:34:24 +00:00
|
|
|
|
2006-12-04 13:50:46 +00:00
|
|
|
std::vector<char_type> utf16_to_ucs4(unsigned short const * s, size_t ls);
|
2006-09-10 18:34:24 +00:00
|
|
|
|
2006-12-04 13:50:46 +00:00
|
|
|
// ucs4_to_utf16
|
2006-08-13 22:54:59 +00:00
|
|
|
|
2006-12-04 13:50:46 +00:00
|
|
|
std::vector<unsigned short> ucs4_to_utf16(char_type const * s, size_t ls);
|
2006-08-13 22:54:59 +00:00
|
|
|
|
2006-09-10 18:34:24 +00:00
|
|
|
// ucs4_to_utf8
|
|
|
|
|
2007-05-08 14:09:27 +00:00
|
|
|
std::vector<char> ucs4_to_utf8(char_type c);
|
2006-08-13 22:54:59 +00:00
|
|
|
|
2007-05-08 14:09:27 +00:00
|
|
|
std::vector<char> ucs4_to_utf8(std::vector<char_type> const & ucs4str);
|
2006-08-13 22:54:59 +00:00
|
|
|
|
2007-05-08 14:09:27 +00:00
|
|
|
std::vector<char> ucs4_to_utf8(char_type const * ucs4str, size_t ls);
|
2006-08-13 22:54:59 +00:00
|
|
|
|
2006-10-26 15:01:45 +00:00
|
|
|
/// convert \p s from encoding \p encoding to ucs4.
|
|
|
|
/// \p encoding must be a valid iconv 8bit encoding
|
2007-05-08 14:09:27 +00:00
|
|
|
std::vector<char_type>
|
2006-10-26 15:01:45 +00:00
|
|
|
eightbit_to_ucs4(char const * s, size_t ls, std::string const & encoding);
|
|
|
|
|
|
|
|
/// convert \p s from ucs4 to encoding \p encoding.
|
|
|
|
/// \p encoding must be a valid iconv 8bit encoding
|
2007-11-03 20:52:09 +00:00
|
|
|
std::vector<char> ucs4_to_eightbit(char_type const * ucs4str,
|
|
|
|
size_t ls, std::string const & encoding);
|
2006-10-26 15:01:45 +00:00
|
|
|
|
2007-05-14 09:41:00 +00:00
|
|
|
/// convert ucs4 character \p c to encoding \p encoding.
|
|
|
|
/// \p encoding must be a valid iconv 8bit encoding
|
|
|
|
char ucs4_to_eightbit(char_type c, std::string const & encoding);
|
|
|
|
|
|
|
|
///
|
|
|
|
void ucs4_to_multibytes(char_type ucs4, std::vector<char> & out,
|
|
|
|
std::string const & encoding);
|
|
|
|
|
2006-10-17 11:58:21 +00:00
|
|
|
extern char const * ucs4_codeset;
|
|
|
|
|
2009-05-19 15:27:54 +00:00
|
|
|
/// How many bytes does one UCS4 code point use at most in encoding \p encoding?
|
|
|
|
int max_encoded_bytes(std::string const & encoding);
|
2006-10-21 00:16:43 +00:00
|
|
|
|
|
|
|
} // namespace lyx
|
|
|
|
|
2006-08-13 22:54:59 +00:00
|
|
|
#endif
|