X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fstrfwd.h;h=eef3a83a0ce44a04eeb42ff55e0e57f45a8415ff;hb=cf14e814124ccbc8155fa1dde98d03be319c0e87;hp=b21631821527a6d66f886c5d640aa056a8455d7d;hpb=a5263e0f927034885870a65053ef3908d1c6f885;p=lyx.git diff --git a/src/support/strfwd.h b/src/support/strfwd.h index b216318215..eef3a83a0c 100644 --- a/src/support/strfwd.h +++ b/src/support/strfwd.h @@ -13,21 +13,6 @@ #ifndef STRFWD_H #define STRFWD_H -namespace std { - -template struct char_traits; -template<> struct char_traits; -template<> struct char_traits; - -template class allocator; - -template class basic_string; - -typedef basic_string, allocator > string; - -} - - #ifdef USE_WCHAR_T // Prefer this if possible because GNU libstdc++ has usable @@ -38,80 +23,91 @@ namespace lyx { typedef wchar_t char_type; } #else -#include -namepace lyx { typedef boost::uint32_t char_type; } +#include +#if defined(_MSC_VER) && (_MSC_VER >= 1600) +namespace lyx { typedef uint32_t char_type; } +#include "support/numpunct_lyx_char_type.h" // implementation for our char_type needed +#else +namespace lyx { typedef std::uint32_t char_type; } #endif +#endif -namespace lyx { - -typedef std::basic_string, - std::allocator > docstring; +// Forward definitions do not work with libc++ +// For gcc5 with the new std::string ABI forward declarations would work in +// principle, but I am not sure whether we want non-standard +// "namespace __cxx11" in our sources. +#if defined(USE_LLVM_LIBCPP) || defined(USE_GLIBCXX_CXX11_ABI) +#include +#else -/// Creates a docstring from a C string of ASCII characters -docstring const from_ascii(char const *); +namespace std { -/// Creates a docstring from a std::string of ASCII characters -docstring const from_ascii(std::string const &); +template class allocator; -/// Creates a std::string of ASCII characters from a docstring -std::string const to_ascii(docstring const &); +template struct char_traits; +template<> struct char_traits; +#ifdef USE_WCHAR_T +template<> struct char_traits; +#endif -/// Creates a docstring from a UTF8 string. This should go eventually. -docstring const from_utf8(std::string const &); +template class basic_string; +typedef basic_string, allocator > string; -/// Creates a UTF8 string from a docstring. This should go eventually. -std::string const to_utf8(docstring const &); +template class basic_istream; +template class basic_ostream; +template class basic_ostringstream; -/// convert \p s from the encoding of the locale to ucs4. -docstring const from_local8bit(std::string const & s); +typedef basic_istream > istream; +typedef basic_ostream > ostream; +typedef basic_ostringstream, allocator > ostringstream; -/** - * Convert \p s from ucs4 to the encoding of the locale. - * This may fail and throw an exception, the caller is expected to act - * appropriately. - */ -std::string const to_local8bit(docstring const & s); +} // namespace std -/// convert \p s from the encoding of the file system to ucs4. -docstring const from_filesystem8bit(std::string const & s); +#endif -/// convert \p s from ucs4 to the encoding of the file system. -std::string const to_filesystem8bit(docstring const & s); -/// 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==(docstring const &, char const *); -/// Compare a C string of ASCII characters with a docstring -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!=(docstring const & l, char const * r) { return !(l == r); } +namespace lyx { -/// Compare a C string of ASCII characters with a docstring -inline bool operator!=(char const * l, docstring const & r) { return !(r == l); } +/** + * String type for storing the main text in UCS4 encoding. + * Use std::string only in cases 7-bit ASCII is to be manipulated + * within the variable. + */ +typedef std::basic_string, + std::allocator > docstring; -/// Concatenate a docstring and a C string of ASCII characters -docstring operator+(docstring const &, char const *); +/// Base class for UCS4 input streams +typedef std::basic_istream > idocstream; -/// Concatenate a C string of ASCII characters and a docstring -docstring operator+(char const *, docstring const &); +/// Base class for UCS4 output streams +typedef std::basic_ostream > odocstream; -/// Concatenate a docstring and a single ASCII character -docstring operator+(docstring const & l, char r); +/// UCS4 output stringstream +typedef std::basic_ostringstream, std::allocator > odocstringstream; -/// Concatenate a single ASCII character and a docstring -docstring operator+(char l, docstring const & r); +#if ! defined(USE_WCHAR_T) +extern odocstream & operator<<(odocstream &, char); +#endif -/// Append a C string of ASCII characters to a docstring -docstring & operator+=(docstring &, char const *); +// defined in lstrings.cpp +docstring const & empty_docstring(); +std::string const & empty_string(); +// defined in docstring.cpp +bool operator==(docstring const &, char const *); -/// Append a single ASCII character to a docstring -docstring & operator+=(docstring & l, char r); +#ifdef STD_STRING_USES_COW +template class trivial_string; +typedef trivial_string trivstring; +typedef trivial_string trivdocstring; +#else +typedef std::string trivstring; +typedef docstring trivdocstring; +#endif } // namespace lyx