X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fdocstring.h;h=2c2901bf9d7dcde75e90eeeb2429d4b2c6043408;hb=5d3d26b0241da8f28e0b6b7cce23a8c5761e43de;hp=87c5ed43f2477174d850d026c0f748ab731c45c7;hpb=b9aa557b359463dfb0a2132b665570c8d1e5d605;p=lyx.git diff --git a/src/support/docstring.h b/src/support/docstring.h index 87c5ed43f2..2c2901bf9d 100644 --- a/src/support/docstring.h +++ b/src/support/docstring.h @@ -13,16 +13,12 @@ #ifndef LYX_DOCSTRING_H #define LYX_DOCSTRING_H -#include "support/types.h" +#include "support/strfwd.h" #include -#include namespace lyx { -/// String type for storing the main text in UCS4 encoding -typedef std::basic_string docstring; - /// Creates a docstring from a C string of ASCII characters docstring const from_ascii(char const *); @@ -41,14 +37,6 @@ std::string const to_utf8(docstring const &); /// convert \p s from the encoding of the locale to ucs4. docstring const from_local8bit(std::string const & s); -/// Exception thrown by to_local8bit if the string could not be converted -class to_local8bit_failure : public std::bad_cast { -public: - to_local8bit_failure() throw() : std::bad_cast() {} - virtual ~to_local8bit_failure() throw() {} - virtual const char* what() const throw(); -}; - /** * Convert \p s from ucs4 to the encoding of the locale. * This may fail and throw an exception, the caller is expected to act @@ -62,153 +50,47 @@ docstring const from_filesystem8bit(std::string const & s); /// convert \p s from ucs4 to the encoding of the file system. std::string const to_filesystem8bit(docstring const & s); +/// convert \p s from ucs4 to the \p encoding. +std::string const to_iconv_encoding(docstring const & s, + std::string const & encoding); + +/// convert \p s from \p encoding to ucs4. +docstring const from_iconv_encoding(std::string const & s, + std::string const & encoding); + +/// normalize \p s to precomposed form c +docstring const normalize_c(docstring const & s); + /// Compare a docstring with a C string of ASCII characters -bool operator==(lyx::docstring const &, char const *); +bool operator==(docstring const &, char const *); /// Compare a C string of ASCII characters with a docstring -inline bool operator==(char const * l, lyx::docstring const & r) { return r == l; } +inline bool operator==(char const * l, docstring const & r) { return r == l; } /// Compare a docstring with a C string of ASCII characters -inline bool operator!=(lyx::docstring const & l, char const * r) { return !(l == r); } +inline bool operator!=(docstring const & l, char const * r) { return !(l == r); } /// Compare a C string of ASCII characters with a docstring -inline bool operator!=(char const * l, lyx::docstring const & r) { return !(r == l); } +inline bool operator!=(char const * l, docstring const & r) { return !(r == l); } /// Concatenate a docstring and a C string of ASCII characters -lyx::docstring operator+(lyx::docstring const &, char const *); +docstring operator+(docstring const &, char const *); /// Concatenate a C string of ASCII characters and a docstring -lyx::docstring operator+(char const *, lyx::docstring const &); +docstring operator+(char const *, docstring const &); /// Concatenate a docstring and a single ASCII character -lyx::docstring operator+(lyx::docstring const & l, char r); +docstring operator+(docstring const & l, char r); /// Concatenate a single ASCII character and a docstring -lyx::docstring operator+(char l, lyx::docstring const & r); +docstring operator+(char l, docstring const & r); /// Append a C string of ASCII characters to a docstring -lyx::docstring & operator+=(lyx::docstring &, char const *); +docstring & operator+=(docstring &, char const *); /// Append a single ASCII character to a docstring -lyx::docstring & operator+=(lyx::docstring & l, char r); +docstring & operator+=(docstring & l, char r); } // namespace lyx - -#if SIZEOF_WCHAR_T != 4 && defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ == 3 && __GNUC_MINOR__ < 4 -// Missing char_traits methods in gcc 3.3 and older. Taken from gcc 4.2svn. -namespace std {$ - -template void -char_traits::assign(char_type & c1, char_type const & c2) -{ - c1 = c2; -} - - -template bool -char_traits::eq(char_type const & c1, char_type const & c2) -{ - return c1 == c2; -} - - -template bool -char_traits::lt(char_type const & c1, char_type const & c2) -{ - return c1 < c2; -} - - -template int -char_traits::compare(char_type const * s1, char_type const * s2, std::size_t n) -{ - for (std::size_t i = 0; i < n; ++i) - if (lt(s1[i], s2[i])) - return -1; - else if (lt(s2[i], s1[i])) - return 1; - return 0; -} - - -template std::size_t -char_traits::length(char_type const * p) -{ - std::size_t i = 0; - while (!eq(p[i], char_type())) - ++i; - return i; -} - - -template typename char_traits::char_type const * -char_traits::find(char_type const * s, size_t n, char_type const & a) -{ - for (std::size_t i = 0; i < n; ++i) - if (eq(s[i], a)) - return s + i; - return 0; -} - - -template typename char_traits::char_type * -char_traits::move(char_type * s1, char_type const * s2, std::size_t n) -{ - return static_cast(std::memmove(s1, s2, n * sizeof(char_type))); -} - - -template typename char_traits::char_type * -char_traits::copy(char_type * s1, char_type const * s2, std::size_t n) -{ - std::copy(s2, s2 + n, s1); - return s1; -} - - -template typename char_traits::char_type * -char_traits::assign(char_type * s, std::size_t n, char_type a) -{ - std::fill_n(s, n, a); - return s; -} - - -template typename char_traits::char_type -char_traits::to_char_type(int_type const & c) -{ - return static_cast(c); -} - - -template typename char_traits::int_type -char_traits::to_int_type(char_type const & c) -{ - return static_cast(c); -} - - -template bool -char_traits::eq_int_type(int_type const & c1, int_type const & c2) -{ - return c1 == c2; -} - - -template typename char_traits::int_type -char_traits::eof() -{ - return static_cast(EOF); -} - - -template typename char_traits::int_type -char_traits::not_eof(int_type const & c) -{ - return !eq_int_type(c, eof()) ? c : to_int_type(char_type()); -} - -} -#endif #endif