Am Mittwoch, 13. September 2006 18:17 schrieb Lars Gullik Bjønnes:
> Georg Baum <[EMAIL PROTECTED]> writes:
> 
> | Index: src/support/docstring.h
> | ===================================================================
> | --- src/support/docstring.h (Revision 14982)
> | +++ src/support/docstring.h (Arbeitskopie)
> | @@ -18,8 +18,19 @@
> |  
> |  namespace lyx {
> |  
> | +/// The type used to hold characters in paragraphs
> | +#if defined(HAVE_WCHAR_T) && SIZEOF_WCHAR_T == 4
> | +// Prefer this if possible because GNU libstdc++ has usable 
std::ctype<wchar_t>
> | +// locale facets but not std::ctype<boost::uint32_t>. gcc older than 
3.4 is
> | +// also missing usable std::char_traits<boost::uint32_t>.
> | +typedef wchar_t char_type;
> | +#else
> | +// This works on msvc
> | +typedef boost::uint32_t char_type;
> | +#endif
> 
> I think I'd like to keep this in types.h.

I knew that would come ;-) When I wrote the above I did not think of 
std::wstring. I committed the boost::uint32_t->lyx::char_type patch, so 
the boost::uint32_t -> wchar_t change looks like the attached now.

> Should we have AC_CHECK_TYPES(wchar_t) as well?
> (for completeness.)

AC_CHECK_SIZEOF does this for us.

Shall I put this in?


Georg
Index: src/support/types.h
===================================================================
--- src/support/types.h	(Revision 14987)
+++ src/support/types.h	(Arbeitskopie)
@@ -18,19 +18,20 @@
 
 #include "docstring.h"
 
-#include <boost/cstdint.hpp>
-
 #include <cstddef>
-#include <string>
 
 namespace lyx {
 
-	// The type used to hold characters in paragraphs
-	typedef boost::uint32_t char_type; // Possibly the ucs-4 type we will use
-	//typedef wchar_t char_type;  // The wide char type CJK-LyX uses
-	//typedef char char_type;       // Current narrow char type in use
-
-	//typedef std::wstring docstring;
+	/// The type used to hold characters in paragraphs
+#if defined(HAVE_WCHAR_T) && SIZEOF_WCHAR_T == 4
+	// Prefer this if possible because GNU libstdc++ has usable
+	// std::ctype<wchar_t> locale facets but not
+	// std::ctype<boost::uint32_t>. gcc older than 3.4 is also missing
+	// usable std::char_traits<boost::uint32_t>.
+	typedef wchar_t char_type;
+#else
+	typedef boost::uint32_t char_type;
+#endif
 
 	/// a type for positions used in paragraphs
 	// needs to be signed for a while to hold the special value -1 that is
Index: src/support/docstring.h
===================================================================
--- src/support/docstring.h	(Revision 14987)
+++ src/support/docstring.h	(Arbeitskopie)
@@ -19,7 +19,14 @@
 namespace lyx {
 
 /// String type for storing the main text in UCS4 encoding
+#if defined(HAVE_WCHAR_T) && SIZEOF_WCHAR_T == 4
+// Prefer this if possible because GNU libstdc++ has usable std::ctype<wchar_t>
+// locale facets but not std::ctype<boost::uint32_t>. gcc older than 3.4 is
+// also missing usable std::char_traits<boost::uint32_t>.
+typedef std::wstring docstring;
+#else
 typedef std::basic_string<boost::uint32_t> docstring;
+#endif
 
 /// Creates a docstring from a C string of ASCII characters
 docstring const from_ascii(char const *);
@@ -60,7 +67,7 @@ lyx::docstring operator+(lyx::docstring 
 lyx::docstring operator+(char l, lyx::docstring const & r);
 
 
-#if defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ == 3 && __GNUC_MINOR__ < 4
+#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 {
 
Index: configure.ac
===================================================================
--- configure.ac	(Revision 14987)
+++ configure.ac	(Arbeitskopie)
@@ -147,6 +147,9 @@ AC_SUBST(AIKSAURUS_LIBS)
 
 LYX_USE_INCLUDED_BOOST
 
+# Needed for our char_type
+AC_CHECK_SIZEOF(wchar_t)
+
 ### Setup libtool
 dnl Dirty trick ahead: disable libtool checking for a fortran compiler
 dnl see http://permalink.gmane.org/gmane.comp.gnu.libtool.general/6699

Reply via email to