]> git.saurik.com Git - wxWidgets.git/commitdiff
add wxXLocale class and wxIsxxx_l() and wxToxxx_l() functions (heavily modified and...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 10 Feb 2008 17:03:23 +0000 (17:03 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 10 Feb 2008 17:03:23 +0000 (17:03 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51632 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

38 files changed:
Makefile.in
build/bakefiles/files.bkl
build/msw/makefile.bcc
build/msw/makefile.gcc
build/msw/makefile.vc
build/msw/makefile.wat
build/msw/wx_base.dsp
build/msw/wx_vc7_base.vcproj
build/msw/wx_vc8_base.vcproj
configure
configure.in
docs/latex/wx/classes.tex
docs/latex/wx/locale.tex
include/wx/features.h
include/wx/mac/setup0.h
include/wx/motif/setup0.h
include/wx/msw/setup0.h
include/wx/msw/wince/setup.h
include/wx/os2/setup0.h
include/wx/palmos/setup0.h
include/wx/setup_inc.h
include/wx/univ/setup0.h
include/wx/xlocale.h [new file with mode: 0644]
setup.h.in
src/common/xlocale.cpp [new file with mode: 0644]
tests/Makefile.in
tests/makefile.bcc
tests/makefile.gcc
tests/makefile.vc
tests/makefile.wat
tests/test.bkl
tests/test_test.dsp
tests/test_vc7_test.vcproj
tests/test_vc8_test.vcproj
tests/xlocale/xlocale.cpp [new file with mode: 0644]
wxGTK.spec
wxMotif.spec
wxX11.spec

index 272a21a91759cb7e0ace16a2d23a654aad7bf19a..cc34564bfa3c5d573efca3b93060e92dc1a7e3b9 100644 (file)
@@ -427,6 +427,7 @@ ALL_BASE_HEADERS =  \
        wx/wxcrtbase.h \
        wx/wxcrtvararg.h \
        wx/wxprec.h \
+       wx/xlocale.h \
        wx/xti.h \
        wx/xtistrm.h \
        wx/zipstrm.h \
@@ -576,6 +577,7 @@ ALL_PORTS_BASE_HEADERS =  \
        wx/wxcrtbase.h \
        wx/wxcrtvararg.h \
        wx/wxprec.h \
+       wx/xlocale.h \
        wx/xti.h \
        wx/xtistrm.h \
        wx/zipstrm.h \
@@ -718,6 +720,7 @@ ALL_BASE_SOURCES =  \
        src/common/wfstream.cpp \
        src/common/wxcrt.cpp \
        src/common/wxprintf.cpp \
+       src/common/xlocale.cpp \
        src/common/xti.cpp \
        src/common/xtistrm.cpp \
        src/common/zipstrm.cpp \
@@ -902,6 +905,7 @@ MONODLL_OBJECTS =  \
        monodll_wfstream.o \
        monodll_wxcrt.o \
        monodll_wxprintf.o \
+       monodll_xlocale.o \
        monodll_xti.o \
        monodll_xtistrm.o \
        monodll_zipstrm.o \
@@ -1016,6 +1020,7 @@ MONOLIB_OBJECTS =  \
        monolib_wfstream.o \
        monolib_wxcrt.o \
        monolib_wxprintf.o \
+       monolib_xlocale.o \
        monolib_xti.o \
        monolib_xtistrm.o \
        monolib_zipstrm.o \
@@ -1128,6 +1133,7 @@ BASEDLL_OBJECTS =  \
        basedll_wfstream.o \
        basedll_wxcrt.o \
        basedll_wxprintf.o \
+       basedll_xlocale.o \
        basedll_xti.o \
        basedll_xtistrm.o \
        basedll_zipstrm.o \
@@ -1223,6 +1229,7 @@ BASELIB_OBJECTS =  \
        baselib_wfstream.o \
        baselib_wxcrt.o \
        baselib_wxprintf.o \
+       baselib_xlocale.o \
        baselib_xti.o \
        baselib_xtistrm.o \
        baselib_zipstrm.o \
@@ -13778,6 +13785,9 @@ monodll_wxcrt.o: $(srcdir)/src/common/wxcrt.cpp $(MONODLL_ODEP)
 monodll_wxprintf.o: $(srcdir)/src/common/wxprintf.cpp $(MONODLL_ODEP)
        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/wxprintf.cpp
 
+monodll_xlocale.o: $(srcdir)/src/common/xlocale.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/xlocale.cpp
+
 monodll_xti.o: $(srcdir)/src/common/xti.cpp $(MONODLL_ODEP)
        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/xti.cpp
 
@@ -18281,6 +18291,9 @@ monolib_wxcrt.o: $(srcdir)/src/common/wxcrt.cpp $(MONOLIB_ODEP)
 monolib_wxprintf.o: $(srcdir)/src/common/wxprintf.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/wxprintf.cpp
 
+monolib_xlocale.o: $(srcdir)/src/common/xlocale.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/xlocale.cpp
+
 monolib_xti.o: $(srcdir)/src/common/xti.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/xti.cpp
 
@@ -22784,6 +22797,9 @@ basedll_wxcrt.o: $(srcdir)/src/common/wxcrt.cpp $(BASEDLL_ODEP)
 basedll_wxprintf.o: $(srcdir)/src/common/wxprintf.cpp $(BASEDLL_ODEP)
        $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/wxprintf.cpp
 
+basedll_xlocale.o: $(srcdir)/src/common/xlocale.cpp $(BASEDLL_ODEP)
+       $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/xlocale.cpp
+
 basedll_xti.o: $(srcdir)/src/common/xti.cpp $(BASEDLL_ODEP)
        $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/xti.cpp
 
@@ -23591,6 +23607,9 @@ baselib_wxcrt.o: $(srcdir)/src/common/wxcrt.cpp $(BASELIB_ODEP)
 baselib_wxprintf.o: $(srcdir)/src/common/wxprintf.cpp $(BASELIB_ODEP)
        $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/wxprintf.cpp
 
+baselib_xlocale.o: $(srcdir)/src/common/xlocale.cpp $(BASELIB_ODEP)
+       $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/xlocale.cpp
+
 baselib_xti.o: $(srcdir)/src/common/xti.cpp $(BASELIB_ODEP)
        $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/common/xti.cpp
 
index c30a5b8733076206bee7a12d7d8b68488fb3c891..5a8f01d2770f5625aa1d62febaa27fdaa17b312d 100644 (file)
@@ -416,6 +416,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     src/common/wfstream.cpp
     src/common/wxcrt.cpp
     src/common/wxprintf.cpp
+    src/common/xlocale.cpp
     src/common/xti.cpp
     src/common/xtistrm.cpp
     src/common/zipstrm.cpp
@@ -550,6 +551,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     wx/wxcrtbase.h
     wx/wxcrtvararg.h
     wx/wxprec.h
+    wx/xlocale.h
     wx/xti.h
     wx/xtistrm.h
     wx/zipstrm.h
index 8bc6649edbc405d455b09c44c3788c2b4f2b9bb1..c99d09f4f4f89a7439587191b9250f6d2baf3428 100644 (file)
@@ -377,6 +377,7 @@ MONODLL_OBJECTS =  \
        $(OBJS)\monodll_wfstream.obj \
        $(OBJS)\monodll_wxcrt.obj \
        $(OBJS)\monodll_wxprintf.obj \
+       $(OBJS)\monodll_xlocale.obj \
        $(OBJS)\monodll_xti.obj \
        $(OBJS)\monodll_xtistrm.obj \
        $(OBJS)\monodll_zipstrm.obj \
@@ -514,6 +515,7 @@ MONOLIB_OBJECTS =  \
        $(OBJS)\monolib_wfstream.obj \
        $(OBJS)\monolib_wxcrt.obj \
        $(OBJS)\monolib_wxprintf.obj \
+       $(OBJS)\monolib_xlocale.obj \
        $(OBJS)\monolib_xti.obj \
        $(OBJS)\monolib_xtistrm.obj \
        $(OBJS)\monolib_zipstrm.obj \
@@ -648,6 +650,7 @@ BASEDLL_OBJECTS =  \
        $(OBJS)\basedll_wfstream.obj \
        $(OBJS)\basedll_wxcrt.obj \
        $(OBJS)\basedll_wxprintf.obj \
+       $(OBJS)\basedll_xlocale.obj \
        $(OBJS)\basedll_xti.obj \
        $(OBJS)\basedll_xtistrm.obj \
        $(OBJS)\basedll_zipstrm.obj \
@@ -766,6 +769,7 @@ BASELIB_OBJECTS =  \
        $(OBJS)\baselib_wfstream.obj \
        $(OBJS)\baselib_wxcrt.obj \
        $(OBJS)\baselib_wxprintf.obj \
+       $(OBJS)\baselib_xlocale.obj \
        $(OBJS)\baselib_xti.obj \
        $(OBJS)\baselib_xtistrm.obj \
        $(OBJS)\baselib_zipstrm.obj \
@@ -5387,6 +5391,9 @@ $(OBJS)\monodll_wxcrt.obj: ..\..\src\common\wxcrt.cpp
 $(OBJS)\monodll_wxprintf.obj: ..\..\src\common\wxprintf.cpp
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\wxprintf.cpp
 
+$(OBJS)\monodll_xlocale.obj: ..\..\src\common\xlocale.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\xlocale.cpp
+
 $(OBJS)\monodll_xti.obj: ..\..\src\common\xti.cpp
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\xti.cpp
 
@@ -7490,6 +7497,9 @@ $(OBJS)\monolib_wxcrt.obj: ..\..\src\common\wxcrt.cpp
 $(OBJS)\monolib_wxprintf.obj: ..\..\src\common\wxprintf.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\wxprintf.cpp
 
+$(OBJS)\monolib_xlocale.obj: ..\..\src\common\xlocale.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\xlocale.cpp
+
 $(OBJS)\monolib_xti.obj: ..\..\src\common\xti.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\xti.cpp
 
@@ -9593,6 +9603,9 @@ $(OBJS)\basedll_wxcrt.obj: ..\..\src\common\wxcrt.cpp
 $(OBJS)\basedll_wxprintf.obj: ..\..\src\common\wxprintf.cpp
        $(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\wxprintf.cpp
 
+$(OBJS)\basedll_xlocale.obj: ..\..\src\common\xlocale.cpp
+       $(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\xlocale.cpp
+
 $(OBJS)\basedll_xti.obj: ..\..\src\common\xti.cpp
        $(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\xti.cpp
 
@@ -9896,6 +9909,9 @@ $(OBJS)\baselib_wxcrt.obj: ..\..\src\common\wxcrt.cpp
 $(OBJS)\baselib_wxprintf.obj: ..\..\src\common\wxprintf.cpp
        $(CXX) -q -c -P -o$@ $(BASELIB_CXXFLAGS) ..\..\src\common\wxprintf.cpp
 
+$(OBJS)\baselib_xlocale.obj: ..\..\src\common\xlocale.cpp
+       $(CXX) -q -c -P -o$@ $(BASELIB_CXXFLAGS) ..\..\src\common\xlocale.cpp
+
 $(OBJS)\baselib_xti.obj: ..\..\src\common\xti.cpp
        $(CXX) -q -c -P -o$@ $(BASELIB_CXXFLAGS) ..\..\src\common\xti.cpp
 
index 9de596d1046d954e0a2847f3b776703f251d5a12..dd2ebce2c8bd0eaae4e470cde13f7adcafeee587 100644 (file)
@@ -364,6 +364,7 @@ MONODLL_OBJECTS =  \
        $(OBJS)\monodll_wfstream.o \
        $(OBJS)\monodll_wxcrt.o \
        $(OBJS)\monodll_wxprintf.o \
+       $(OBJS)\monodll_xlocale.o \
        $(OBJS)\monodll_xti.o \
        $(OBJS)\monodll_xtistrm.o \
        $(OBJS)\monodll_zipstrm.o \
@@ -502,6 +503,7 @@ MONOLIB_OBJECTS =  \
        $(OBJS)\monolib_wfstream.o \
        $(OBJS)\monolib_wxcrt.o \
        $(OBJS)\monolib_wxprintf.o \
+       $(OBJS)\monolib_xlocale.o \
        $(OBJS)\monolib_xti.o \
        $(OBJS)\monolib_xtistrm.o \
        $(OBJS)\monolib_zipstrm.o \
@@ -638,6 +640,7 @@ BASEDLL_OBJECTS =  \
        $(OBJS)\basedll_wfstream.o \
        $(OBJS)\basedll_wxcrt.o \
        $(OBJS)\basedll_wxprintf.o \
+       $(OBJS)\basedll_xlocale.o \
        $(OBJS)\basedll_xti.o \
        $(OBJS)\basedll_xtistrm.o \
        $(OBJS)\basedll_zipstrm.o \
@@ -756,6 +759,7 @@ BASELIB_OBJECTS =  \
        $(OBJS)\baselib_wfstream.o \
        $(OBJS)\baselib_wxcrt.o \
        $(OBJS)\baselib_wxprintf.o \
+       $(OBJS)\baselib_xlocale.o \
        $(OBJS)\baselib_xti.o \
        $(OBJS)\baselib_xtistrm.o \
        $(OBJS)\baselib_zipstrm.o \
@@ -5529,6 +5533,9 @@ $(OBJS)\monodll_wxcrt.o: ../../src/common/wxcrt.cpp
 $(OBJS)\monodll_wxprintf.o: ../../src/common/wxprintf.cpp
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\monodll_xlocale.o: ../../src/common/xlocale.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\monodll_xti.o: ../../src/common/xti.cpp
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 
@@ -7734,6 +7741,9 @@ $(OBJS)\monolib_wxcrt.o: ../../src/common/wxcrt.cpp
 $(OBJS)\monolib_wxprintf.o: ../../src/common/wxprintf.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\monolib_xlocale.o: ../../src/common/xlocale.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\monolib_xti.o: ../../src/common/xti.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 
@@ -9939,6 +9949,9 @@ $(OBJS)\basedll_wxcrt.o: ../../src/common/wxcrt.cpp
 $(OBJS)\basedll_wxprintf.o: ../../src/common/wxprintf.cpp
        $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\basedll_xlocale.o: ../../src/common/xlocale.cpp
+       $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\basedll_xti.o: ../../src/common/xti.cpp
        $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
 
@@ -10242,6 +10255,9 @@ $(OBJS)\baselib_wxcrt.o: ../../src/common/wxcrt.cpp
 $(OBJS)\baselib_wxprintf.o: ../../src/common/wxprintf.cpp
        $(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\baselib_xlocale.o: ../../src/common/xlocale.cpp
+       $(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\baselib_xti.o: ../../src/common/xti.cpp
        $(CXX) -c -o $@ $(BASELIB_CXXFLAGS) $(CPPDEPS) $<
 
index 8603955e9ff1e388c157fe0a72e6292087cdc214..704df78cfc291557425ae5d058073fb71a399de5 100644 (file)
@@ -379,6 +379,7 @@ MONODLL_OBJECTS =  \
        $(OBJS)\monodll_wfstream.obj \
        $(OBJS)\monodll_wxcrt.obj \
        $(OBJS)\monodll_wxprintf.obj \
+       $(OBJS)\monodll_xlocale.obj \
        $(OBJS)\monodll_xti.obj \
        $(OBJS)\monodll_xtistrm.obj \
        $(OBJS)\monodll_zipstrm.obj \
@@ -521,6 +522,7 @@ MONOLIB_OBJECTS =  \
        $(OBJS)\monolib_wfstream.obj \
        $(OBJS)\monolib_wxcrt.obj \
        $(OBJS)\monolib_wxprintf.obj \
+       $(OBJS)\monolib_xlocale.obj \
        $(OBJS)\monolib_xti.obj \
        $(OBJS)\monolib_xtistrm.obj \
        $(OBJS)\monolib_zipstrm.obj \
@@ -661,6 +663,7 @@ BASEDLL_OBJECTS =  \
        $(OBJS)\basedll_wfstream.obj \
        $(OBJS)\basedll_wxcrt.obj \
        $(OBJS)\basedll_wxprintf.obj \
+       $(OBJS)\basedll_xlocale.obj \
        $(OBJS)\basedll_xti.obj \
        $(OBJS)\basedll_xtistrm.obj \
        $(OBJS)\basedll_zipstrm.obj \
@@ -784,6 +787,7 @@ BASELIB_OBJECTS =  \
        $(OBJS)\baselib_wfstream.obj \
        $(OBJS)\baselib_wxcrt.obj \
        $(OBJS)\baselib_wxprintf.obj \
+       $(OBJS)\baselib_xlocale.obj \
        $(OBJS)\baselib_xti.obj \
        $(OBJS)\baselib_xtistrm.obj \
        $(OBJS)\baselib_zipstrm.obj \
@@ -5719,6 +5723,9 @@ $(OBJS)\monodll_wxcrt.obj: ..\..\src\common\wxcrt.cpp
 $(OBJS)\monodll_wxprintf.obj: ..\..\src\common\wxprintf.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\wxprintf.cpp
 
+$(OBJS)\monodll_xlocale.obj: ..\..\src\common\xlocale.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\xlocale.cpp
+
 $(OBJS)\monodll_xti.obj: ..\..\src\common\xti.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\xti.cpp
 
@@ -7822,6 +7829,9 @@ $(OBJS)\monolib_wxcrt.obj: ..\..\src\common\wxcrt.cpp
 $(OBJS)\monolib_wxprintf.obj: ..\..\src\common\wxprintf.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\wxprintf.cpp
 
+$(OBJS)\monolib_xlocale.obj: ..\..\src\common\xlocale.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\xlocale.cpp
+
 $(OBJS)\monolib_xti.obj: ..\..\src\common\xti.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\xti.cpp
 
@@ -9925,6 +9935,9 @@ $(OBJS)\basedll_wxcrt.obj: ..\..\src\common\wxcrt.cpp
 $(OBJS)\basedll_wxprintf.obj: ..\..\src\common\wxprintf.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\wxprintf.cpp
 
+$(OBJS)\basedll_xlocale.obj: ..\..\src\common\xlocale.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\xlocale.cpp
+
 $(OBJS)\basedll_xti.obj: ..\..\src\common\xti.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\xti.cpp
 
@@ -10228,6 +10241,9 @@ $(OBJS)\baselib_wxcrt.obj: ..\..\src\common\wxcrt.cpp
 $(OBJS)\baselib_wxprintf.obj: ..\..\src\common\wxprintf.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\wxprintf.cpp
 
+$(OBJS)\baselib_xlocale.obj: ..\..\src\common\xlocale.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\xlocale.cpp
+
 $(OBJS)\baselib_xti.obj: ..\..\src\common\xti.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(BASELIB_CXXFLAGS) ..\..\src\common\xti.cpp
 
index f58e1e0a4e3b3a37e65f3a90e4ea8659b4cca033..3f82c465db213bde9616c6c885cea27a195cd609 100644 (file)
@@ -3314,6 +3314,7 @@ MONODLL_OBJECTS =  &
        $(OBJS)\monodll_wfstream.obj &
        $(OBJS)\monodll_wxcrt.obj &
        $(OBJS)\monodll_wxprintf.obj &
+       $(OBJS)\monodll_xlocale.obj &
        $(OBJS)\monodll_xti.obj &
        $(OBJS)\monodll_xtistrm.obj &
        $(OBJS)\monodll_zipstrm.obj &
@@ -3451,6 +3452,7 @@ MONOLIB_OBJECTS =  &
        $(OBJS)\monolib_wfstream.obj &
        $(OBJS)\monolib_wxcrt.obj &
        $(OBJS)\monolib_wxprintf.obj &
+       $(OBJS)\monolib_xlocale.obj &
        $(OBJS)\monolib_xti.obj &
        $(OBJS)\monolib_xtistrm.obj &
        $(OBJS)\monolib_zipstrm.obj &
@@ -3586,6 +3588,7 @@ BASEDLL_OBJECTS =  &
        $(OBJS)\basedll_wfstream.obj &
        $(OBJS)\basedll_wxcrt.obj &
        $(OBJS)\basedll_wxprintf.obj &
+       $(OBJS)\basedll_xlocale.obj &
        $(OBJS)\basedll_xti.obj &
        $(OBJS)\basedll_xtistrm.obj &
        $(OBJS)\basedll_zipstrm.obj &
@@ -3704,6 +3707,7 @@ BASELIB_OBJECTS =  &
        $(OBJS)\baselib_wfstream.obj &
        $(OBJS)\baselib_wxcrt.obj &
        $(OBJS)\baselib_wxprintf.obj &
+       $(OBJS)\baselib_xlocale.obj &
        $(OBJS)\baselib_xti.obj &
        $(OBJS)\baselib_xtistrm.obj &
        $(OBJS)\baselib_zipstrm.obj &
@@ -5761,6 +5765,9 @@ $(OBJS)\monodll_wxcrt.obj :  .AUTODEPEND ..\..\src\common\wxcrt.cpp
 $(OBJS)\monodll_wxprintf.obj :  .AUTODEPEND ..\..\src\common\wxprintf.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 
+$(OBJS)\monodll_xlocale.obj :  .AUTODEPEND ..\..\src\common\xlocale.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
 $(OBJS)\monodll_xti.obj :  .AUTODEPEND ..\..\src\common\xti.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 
@@ -7966,6 +7973,9 @@ $(OBJS)\monolib_wxcrt.obj :  .AUTODEPEND ..\..\src\common\wxcrt.cpp
 $(OBJS)\monolib_wxprintf.obj :  .AUTODEPEND ..\..\src\common\wxprintf.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 
+$(OBJS)\monolib_xlocale.obj :  .AUTODEPEND ..\..\src\common\xlocale.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
 $(OBJS)\monolib_xti.obj :  .AUTODEPEND ..\..\src\common\xti.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 
@@ -10171,6 +10181,9 @@ $(OBJS)\basedll_wxcrt.obj :  .AUTODEPEND ..\..\src\common\wxcrt.cpp
 $(OBJS)\basedll_wxprintf.obj :  .AUTODEPEND ..\..\src\common\wxprintf.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(BASEDLL_CXXFLAGS) $<
 
+$(OBJS)\basedll_xlocale.obj :  .AUTODEPEND ..\..\src\common\xlocale.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(BASEDLL_CXXFLAGS) $<
+
 $(OBJS)\basedll_xti.obj :  .AUTODEPEND ..\..\src\common\xti.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(BASEDLL_CXXFLAGS) $<
 
@@ -10474,6 +10487,9 @@ $(OBJS)\baselib_wxcrt.obj :  .AUTODEPEND ..\..\src\common\wxcrt.cpp
 $(OBJS)\baselib_wxprintf.obj :  .AUTODEPEND ..\..\src\common\wxprintf.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(BASELIB_CXXFLAGS) $<
 
+$(OBJS)\baselib_xlocale.obj :  .AUTODEPEND ..\..\src\common\xlocale.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(BASELIB_CXXFLAGS) $<
+
 $(OBJS)\baselib_xti.obj :  .AUTODEPEND ..\..\src\common\xti.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(BASELIB_CXXFLAGS) $<
 
index 260d93f51d78b830419be5c6f995a92d08a81d9e..086e987c2f6393351c83f2511bce3262e6a141f1 100644 (file)
@@ -551,6 +551,10 @@ SOURCE=..\..\src\common\wxprintf.cpp
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\src\common\xlocale.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\src\common\xti.cpp\r
 # End Source File\r
 # Begin Source File\r
@@ -1507,6 +1511,10 @@ SOURCE=..\..\include\wx\wxprec.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\include\wx\xlocale.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\include\wx\xti.h\r
 # End Source File\r
 # Begin Source File\r
index 51c44a86594a14b1bd4dc1dc955b98dd1132d572..f256e4d52658c59f4a691df6f1a6f6183d1d8335 100644 (file)
                                RelativePath="..\..\src\common\wxcrt.cpp"/>\r
                        <File\r
                                RelativePath="..\..\src\common\wxprintf.cpp"/>\r
+                       <File\r
+                               RelativePath="..\..\src\common\xlocale.cpp"/>\r
                        <File\r
                                RelativePath="..\..\src\common\xti.cpp"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\wxcrtvararg.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\wxprec.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\xlocale.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\xti.h"/>\r
                        <File\r
index c0da1a984eb1420128c4fc3a6175787406f00ee8..6cd272a6c06ac4fe6778578665246834c04e8d98 100644 (file)
                        <File\r
                                RelativePath="..\..\src\common\wxprintf.cpp"\r
                        />\r
+                       <File\r
+                               RelativePath="..\..\src\common\xlocale.cpp"\r
+                       />\r
                        <File\r
                                RelativePath="..\..\src\common\xti.cpp"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\wxprec.h"\r
                        />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\xlocale.h"\r
+                       />\r
                        <File\r
                                RelativePath="..\..\include\wx\xti.h"\r
                        />\r
index 3e4a3663ace4abb0f50fff9520c272b1c84b371f..45ba3b02870130d592bd5ec4c4a22458dc157e80 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Id: configure.in 51582 2008-02-07 20:59:50Z DE .
+# From configure.in Id: configure.in 51614 2008-02-09 14:40:26Z VZ .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61 for wxWidgets 2.9.0.
 #
@@ -1669,6 +1669,7 @@ Optional Features:
   --enable-objc_uniquifying enable Objective-C class name uniquifying
   --disable-visibility    disable use of ELF symbols visibility even if supported
   --enable-intl           use internationalization system
+  --enable-xlocale        use x-locale support (requires wxLocale)
   --enable-config         use wxConfig (and derived) classes
   --enable-protocols      use wxProtocol and derived classes
   --enable-ftp            use wxFTP (requires wxProtocol
@@ -5611,6 +5612,50 @@ fi
 echo "${ECHO_T}$result" >&6; }
 
 
+          enablestring=
+          defaultval=$wxUSE_ALL_FEATURES
+          if test -z "$defaultval"; then
+              if test x"$enablestring" = xdisable; then
+                  defaultval=yes
+              else
+                  defaultval=no
+              fi
+          fi
+
+          { echo "$as_me:$LINENO: checking for --${enablestring:-enable}-xlocale" >&5
+echo $ECHO_N "checking for --${enablestring:-enable}-xlocale... $ECHO_C" >&6; }
+          # Check whether --enable-xlocale was given.
+if test "${enable_xlocale+set}" = set; then
+  enableval=$enable_xlocale;
+                          if test "$enableval" = yes; then
+                            wx_cv_use_xlocale='wxUSE_XLOCALE=yes'
+                          else
+                            wx_cv_use_xlocale='wxUSE_XLOCALE=no'
+                          fi
+
+else
+
+                          wx_cv_use_xlocale='wxUSE_XLOCALE=${'DEFAULT_wxUSE_XLOCALE":-$defaultval}"
+
+fi
+
+
+          eval "$wx_cv_use_xlocale"
+
+          if test x"$enablestring" = xdisable; then
+            if test $wxUSE_XLOCALE = yes; then
+              result=no
+            else
+              result=yes
+            fi
+          else
+            result=$wxUSE_XLOCALE
+          fi
+
+          { echo "$as_me:$LINENO: result: $result" >&5
+echo "${ECHO_T}$result" >&6; }
+
+
           enablestring=
           defaultval=$wxUSE_ALL_FEATURES
           if test -z "$defaultval"; then
@@ -42726,6 +42771,77 @@ _ACEOF
   fi
 fi
 
+if test "$wxUSE_XLOCALE" == "yes" ; then
+    cat >>confdefs.h <<\_ACEOF
+#define wxUSE_XLOCALE 1
+_ACEOF
+
+    { echo "$as_me:$LINENO: checking for locale_t" >&5
+echo $ECHO_N "checking for locale_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_locale_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <xlocale.h>
+                    #include <locale.h>
+
+typedef locale_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_locale_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_locale_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_locale_t" >&5
+echo "${ECHO_T}$ac_cv_type_locale_t" >&6; }
+if test $ac_cv_type_locale_t = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LOCALE_T 1
+_ACEOF
+
+
+fi
+
+fi
+
 if test "$wxUSE_LOG" = "yes"; then
   cat >>confdefs.h <<\_ACEOF
 #define wxUSE_LOG 1
index 85d3771cad4c4766454532dd70c91824cb06a241..0386e440181da2a92b71f80fc1a5ed38bd48587d 100644 (file)
@@ -664,6 +664,7 @@ dnl optional non GUI features
 dnl ---------------------------------------------------------------------------
 
 WX_ARG_FEATURE(intl,          [  --enable-intl           use internationalization system], wxUSE_INTL)
+WX_ARG_FEATURE(xlocale,       [  --enable-xlocale        use x-locale support (requires wxLocale)], wxUSE_XLOCALE)
 WX_ARG_FEATURE(config,        [  --enable-config         use wxConfig (and derived) classes], wxUSE_CONFIG)
 
 WX_ARG_FEATURE(protocols,     [  --enable-protocols      use wxProtocol and derived classes], wxUSE_PROTOCOL)
@@ -5559,6 +5560,13 @@ if test "$wxUSE_INTL" = "yes" ; then
   fi
 fi
 
+if test "$wxUSE_XLOCALE" == "yes" ; then
+    AC_DEFINE(wxUSE_XLOCALE)
+    AC_CHECK_TYPES(locale_t,,,
+                   [#include <xlocale.h>
+                    #include <locale.h>])
+fi
+
 if test "$wxUSE_LOG" = "yes"; then
   AC_DEFINE(wxUSE_LOG)
 
index 78fe1db4bd55f37828e734bdfc8f6900c27be74c..d3eee084515b0072ed89124dd124100c94172492 100644 (file)
 \input wizard.tex
 \input wizevt.tex
 \input wizpage.tex
+\input xlocale.tex
 \input xmldocument.tex
 \input xmlnode.tex
 \input xmlattr.tex
index 22f4d123dc658fff531b27c8d570581c7f3b11ee..dfc2de40b60d85b5a0d1cdd93cb6319e4569ed12 100644 (file)
@@ -49,7 +49,8 @@ No base class
 \wxheading{See also}
 
 \helpref{Internationalization overview}{internationalization},\\
-\helpref{Internat sample}{sampleinternat}
+\helpref{Internat sample}{sampleinternat},\\
+\helpref{wxXLocale}{wxxlocale}
 
 \wxheading{Include files}
 
index 9d400205f22a5ca97484ab0336308e002bcf670c..52c84a27e03f71cdb3a40d5ce2ab127393c9802f 100644 (file)
     #define wxHAS_NATIVE_TAB_TRAVERSAL
 #endif
 
+/* This is defined when the compiler provides some type of extended locale
+   functions.  Otherwise, we implement them ourselves to only support the
+   'C' locale */
+#if defined(HAVE_LOCALE_T) || wxCHECK_VISUALC_VERSION(8)
+    #define wxHAS_XLOCALE_SUPPORT
+#else
+    #undef wxHAS_XLOCALE_SUPPORT
+#endif
+
 #endif /*  _WX_FEATURES_H_ */
 
index d3f2e97f7981941df4f6de3f2c458fde6616300a..de3bd675ec2dcec1b9675c696dfa8a779798fca6 100644 (file)
 // i18n support: _() macro, wxLocale class. Requires wxTextFile.
 #define wxUSE_INTL          1
 
+// Provide wxFoo_l() functions similar to standard foo() functions but taking
+// an extra locale parameter.
+//
+// Notice that this is fully implemented only for the systems providing POSIX
+// xlocale support or Microsoft Visual C++ >= 8 (which provides proprietary
+// almost-equivalent of xlocale functions), otherwise wxFoo_l() functions will
+// only work for the current user locale and "C" locale. You can use
+// wxHAS_XLOCALE_SUPPORT to test whether the full support is available.
+//
+// Default is 1
+//
+// Recommended setting: 1 but may be disabled if you are writing programs
+// running only in C locale anyhow
+#define wxUSE_XLOCALE       1
+
 // Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which
 // allow to manipulate dates, times and time intervals. wxDateTime replaces the
 // old wxTime and wxDate classes which are still provided for backwards
index 080be0a033a44ce9d057042550d2495a216db23f..55631e9d9f88b7f8f57ffcc62aae7870da224184 100644 (file)
 // i18n support: _() macro, wxLocale class. Requires wxTextFile.
 #define wxUSE_INTL          1
 
+// Provide wxFoo_l() functions similar to standard foo() functions but taking
+// an extra locale parameter.
+//
+// Notice that this is fully implemented only for the systems providing POSIX
+// xlocale support or Microsoft Visual C++ >= 8 (which provides proprietary
+// almost-equivalent of xlocale functions), otherwise wxFoo_l() functions will
+// only work for the current user locale and "C" locale. You can use
+// wxHAS_XLOCALE_SUPPORT to test whether the full support is available.
+//
+// Default is 1
+//
+// Recommended setting: 1 but may be disabled if you are writing programs
+// running only in C locale anyhow
+#define wxUSE_XLOCALE       1
+
 // Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which
 // allow to manipulate dates, times and time intervals. wxDateTime replaces the
 // old wxTime and wxDate classes which are still provided for backwards
index d59a717c055ce2f260be537fa095a92a68fd8da0..dc45efdd1678e71470e92aa80f5d6e5f53d7d9a6 100644 (file)
 // i18n support: _() macro, wxLocale class. Requires wxTextFile.
 #define wxUSE_INTL          1
 
+// Provide wxFoo_l() functions similar to standard foo() functions but taking
+// an extra locale parameter.
+//
+// Notice that this is fully implemented only for the systems providing POSIX
+// xlocale support or Microsoft Visual C++ >= 8 (which provides proprietary
+// almost-equivalent of xlocale functions), otherwise wxFoo_l() functions will
+// only work for the current user locale and "C" locale. You can use
+// wxHAS_XLOCALE_SUPPORT to test whether the full support is available.
+//
+// Default is 1
+//
+// Recommended setting: 1 but may be disabled if you are writing programs
+// running only in C locale anyhow
+#define wxUSE_XLOCALE       1
+
 // Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which
 // allow to manipulate dates, times and time intervals. wxDateTime replaces the
 // old wxTime and wxDate classes which are still provided for backwards
index 7152cc2437db2bcdc77c746ecda4344ef706a1e5..98c18229e64ed513607a5581a2e0a5c2eed04513 100644 (file)
 // i18n support: _() macro, wxLocale class. Requires wxTextFile.
 #define wxUSE_INTL          1
 
+// Provide wxFoo_l() functions similar to standard foo() functions but taking
+// an extra locale parameter.
+//
+// Notice that this is fully implemented only for the systems providing POSIX
+// xlocale support or Microsoft Visual C++ >= 8 (which provides proprietary
+// almost-equivalent of xlocale functions), otherwise wxFoo_l() functions will
+// only work for the current user locale and "C" locale. You can use
+// wxHAS_XLOCALE_SUPPORT to test whether the full support is available.
+//
+// Default is 1
+//
+// Recommended setting: 1 but may be disabled if you are writing programs
+// running only in C locale anyhow
+#define wxUSE_XLOCALE       1
+
 // Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which
 // allow to manipulate dates, times and time intervals. wxDateTime replaces the
 // old wxTime and wxDate classes which are still provided for backwards
index 3763726239e3b4f06b9ae47393ce2a27dfbdb9f7..eea4f59b55b89af5af0b3663cbed9af1955adf60 100644 (file)
 // i18n support: _() macro, wxLocale class. Requires wxTextFile.
 #define wxUSE_INTL          1
 
+// Provide wxFoo_l() functions similar to standard foo() functions but taking
+// an extra locale parameter.
+//
+// Notice that this is fully implemented only for the systems providing POSIX
+// xlocale support or Microsoft Visual C++ >= 8 (which provides proprietary
+// almost-equivalent of xlocale functions), otherwise wxFoo_l() functions will
+// only work for the current user locale and "C" locale. You can use
+// wxHAS_XLOCALE_SUPPORT to test whether the full support is available.
+//
+// Default is 1
+//
+// Recommended setting: 1 but may be disabled if you are writing programs
+// running only in C locale anyhow
+#define wxUSE_XLOCALE       1
+
 // Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which
 // allow to manipulate dates, times and time intervals. wxDateTime replaces the
 // old wxTime and wxDate classes which are still provided for backwards
index 312c8c0aafc45735c0c61cb994c1f572ac6c813c..cf8547e8e1d64f6d620c83f934b7f822dcd63e38 100644 (file)
 // i18n support: _() macro, wxLocale class. Requires wxTextFile.
 #define wxUSE_INTL          1
 
+// Provide wxFoo_l() functions similar to standard foo() functions but taking
+// an extra locale parameter.
+//
+// Notice that this is fully implemented only for the systems providing POSIX
+// xlocale support or Microsoft Visual C++ >= 8 (which provides proprietary
+// almost-equivalent of xlocale functions), otherwise wxFoo_l() functions will
+// only work for the current user locale and "C" locale. You can use
+// wxHAS_XLOCALE_SUPPORT to test whether the full support is available.
+//
+// Default is 1
+//
+// Recommended setting: 1 but may be disabled if you are writing programs
+// running only in C locale anyhow
+#define wxUSE_XLOCALE       1
+
 // Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which
 // allow to manipulate dates, times and time intervals. wxDateTime replaces the
 // old wxTime and wxDate classes which are still provided for backwards
index bf6ff406ccd4518a7bc4409c732142b8d239a14f..44a5fbb79c67454e4d8b6fa2bf25c0f1e31d8295 100644 (file)
 // i18n support: _() macro, wxLocale class. Requires wxTextFile.
 #define wxUSE_INTL          1
 
+// Provide wxFoo_l() functions similar to standard foo() functions but taking
+// an extra locale parameter.
+//
+// Notice that this is fully implemented only for the systems providing POSIX
+// xlocale support or Microsoft Visual C++ >= 8 (which provides proprietary
+// almost-equivalent of xlocale functions), otherwise wxFoo_l() functions will
+// only work for the current user locale and "C" locale. You can use
+// wxHAS_XLOCALE_SUPPORT to test whether the full support is available.
+//
+// Default is 1
+//
+// Recommended setting: 1 but may be disabled if you are writing programs
+// running only in C locale anyhow
+#define wxUSE_XLOCALE       1
+
 // Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which
 // allow to manipulate dates, times and time intervals. wxDateTime replaces the
 // old wxTime and wxDate classes which are still provided for backwards
index 56e191740d1c78e37761dd94e705fe17e150a5d3..4b693ac864794a079bfbc7611cb72e4eeeefd81f 100644 (file)
 // i18n support: _() macro, wxLocale class. Requires wxTextFile.
 #define wxUSE_INTL          1
 
+// Provide wxFoo_l() functions similar to standard foo() functions but taking
+// an extra locale parameter.
+//
+// Notice that this is fully implemented only for the systems providing POSIX
+// xlocale support or Microsoft Visual C++ >= 8 (which provides proprietary
+// almost-equivalent of xlocale functions), otherwise wxFoo_l() functions will
+// only work for the current user locale and "C" locale. You can use
+// wxHAS_XLOCALE_SUPPORT to test whether the full support is available.
+//
+// Default is 1
+//
+// Recommended setting: 1 but may be disabled if you are writing programs
+// running only in C locale anyhow
+#define wxUSE_XLOCALE       1
+
 // Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which
 // allow to manipulate dates, times and time intervals. wxDateTime replaces the
 // old wxTime and wxDate classes which are still provided for backwards
diff --git a/include/wx/xlocale.h b/include/wx/xlocale.h
new file mode 100644 (file)
index 0000000..58069d6
--- /dev/null
@@ -0,0 +1,292 @@
+//////////////////////////////////////////////////////////////////////////////
+// Name:        wx/xlocale.h
+// Purpose:     Header to provide some xlocale wrappers
+// Author:      Brian Vanderburg II, Vadim Zeitlin
+// Created:     2008-01-07
+// RCS-ID:      $Id$
+// Copyright:   (c) 2008 Brian Vanderburg II
+//                  2008 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+/*
+    This header defines portable wrappers around xlocale foo_l() functions or
+    their MSVC proprietary _foo_l() equivalents when they are available and
+    implements these functions for the "C" locale [only] if they are not. This
+    allows the program running under the default user locale to still use "C"
+    locale for operations such as reading data from files where they are stored
+    using decimal point &c.
+
+    TODO: Currently only the character classification and transformation
+          functions are implemented, we also need at least
+            - numbers: atof_l(), strtod_l() &c
+            - formatted IO: scanf_l(), printf_l() &c
+            - time: strftime_l(), strptime_l()
+ */
+
+#ifndef _WX_XLOCALE_H_
+#define _WX_XLOCALE_H_
+
+#include "wx/defs.h"    // wxUSE_XLOCALE
+
+#if wxUSE_XLOCALE
+
+#include "wx/crt.h"     // Includes wx/chartype.h, wx/wxcrt.h(wx/string.h)
+#include "wx/intl.h"    // wxLanguage
+
+// The platform-specific locale type
+// If wxXLocale_t is not defined, then only "C" locale support is provided
+#ifdef wxHAS_XLOCALE_SUPPORT
+    #if wxCHECK_VISUALC_VERSION(8)
+        typedef _locale_t wxXLocale_t;
+        #define wxXLOCALE_IDENT(name) _ ## name
+    #elif defined(HAVE_LOCALE_T)
+        #include <locale.h>
+        #include <xlocale.h>
+        #include <ctype.h>
+
+        #if wxUSE_UNICODE
+            #include <wctype.h>
+        #endif
+
+        // Locale type and identifier name
+        typedef locale_t wxXLocale_t;
+
+        #define wxXLOCALE_IDENT(name) name
+    #else
+        #error "Unknown xlocale support"
+    #endif
+#endif // wxHAS_XLOCALE_SUPPORT
+
+
+// wxXLocale is a wrapper around the native type representing a locale.
+//
+// It is not to be confused with wxLocale, which handles actually changing the
+// locale, loading message catalogs, etc.  This just stores a locale value.
+// The similarity of names is unfortunate, but there doesn't seem to be any
+// better alternative right now. Perhaps by wxWidgets 4.0 better naming could
+// be used, or this class could become wxLocale (a wrapper for the value), and
+// some other class could be used to load the language catalogs or something
+// that would be clearer
+#ifdef wxHAS_XLOCALE_SUPPORT
+
+class WXDLLIMPEXP_BASE wxXLocale
+{
+public:
+    // Construct an uninitialized locale
+    wxXLocale() { m_locale = NULL; }
+
+    // Construct from a symbolic language constant
+    wxXLocale(wxLanguage lang);
+
+    // Construct from the given language string
+    wxXLocale(const char *loc) { Init(loc); }
+
+    // Destroy the locale
+    ~wxXLocale() { Free(); }
+
+
+    // Get the global "C" locale object
+    static wxXLocale& GetCLocale();
+
+    // Check if the object represents a valid locale (notice that without
+    // wxHAS_XLOCALE_SUPPORT the only valid locale is the "C" one)
+    bool IsOk() const { return m_locale != NULL; }
+
+    // Get the type
+    wxXLocale_t Get() const { return m_locale; }
+
+private:
+    // Special ctor for the "C" locale, it's only used internally as the user
+    // code is supposed to use GetCLocale()
+    wxXLocale(struct wxXLocaleCTag * WXUNUSED(dummy)) { Init("C"); }
+
+    // Create from the given language string (called from ctors)
+    void Init(const char *loc);
+
+    // Free the locale if it's non-NULL
+    void Free();
+
+
+    // The corresponding locale handle, NULL if invalid
+    wxXLocale_t m_locale;
+
+
+    // POSIX xlocale API provides a duplocale() function but MSVC locale API
+    // doesn't give us any means to copy a _locale_t object so we reduce the
+    // functionality to least common denominator here -- it shouldn't be a
+    // problem as copying the locale objects shouldn't be often needed
+    DECLARE_NO_COPY_CLASS(wxXLocale)
+};
+
+#else // !wxHAS_XLOCALE_SUPPORT
+
+// Skeleton version supporting only the "C" locale for the systems without
+// xlocale support
+class WXDLLIMPEXP_BASE wxXLocale
+{
+public:
+    // Construct an uninitialized locale
+    wxXLocale() { m_isC = false; }
+
+    // Construct from a symbolic language constant: unless the language is
+    // wxLANGUAGE_ENGLISH_US (which we suppose to be the same as "C" locale)
+    // the object will be invalid
+    wxXLocale(wxLanguage lang)
+    {
+        m_isC = lang == wxLANGUAGE_ENGLISH_US;
+    }
+
+    // Construct from the given language string: unless the string is "C" or
+    // "POSIX" the object will be invalid
+    wxXLocale(const char *loc)
+    {
+        m_isC = loc && (strcmp(loc, "C") == 0 || strcmp(loc, "POSIX") == 0);
+    }
+
+    // Default copy ctor, assignment operator and dtor are ok (or would be if
+    // we didn't use DECLARE_NO_COPY_CLASS() for consistency with the xlocale
+    // version)
+
+
+    // Get the global "C" locale object
+    static wxXLocale& GetCLocale();
+
+    // Check if the object represents a valid locale (notice that without
+    // wxHAS_XLOCALE_SUPPORT the only valid locale is the "C" one)
+    bool IsOk() const { return m_isC; }
+
+private:
+    // Special ctor for the "C" locale, it's only used internally as the user
+    // code is supposed to use GetCLocale()
+    wxXLocale(struct wxXLocaleCTag * WXUNUSED(dummy)) { m_isC = true; }
+
+    // Without xlocale support this class can only represent "C" locale, if
+    // this is false the object is invalid
+    bool m_isC;
+
+
+    // although it's not a problem to copy the objects of this class, we use
+    // this macro in this implementation for consistency with the xlocale-based
+    // one which can't be copied when using MSVC locale API
+    DECLARE_NO_COPY_CLASS(wxXLocale)
+};
+
+#endif // wxHAS_XLOCALE_SUPPORT/!wxHAS_XLOCALE_SUPPORT
+
+
+// A shorter synonym for the most commonly used locale object
+#define wxCLocale (wxXLocale::GetCLocale())
+
+
+// Wrappers for various functions:
+#ifdef wxHAS_XLOCALE_SUPPORT
+
+    // ctype functions
+    #define wxCRT_Isalnum_lA wxXLOCALE_IDENT(isalnum_l)
+    #define wxCRT_Isalpha_lA wxXLOCALE_IDENT(isalpha_l)
+    #define wxCRT_Iscntrl_lA wxXLOCALE_IDENT(iscntrl_l)
+    #define wxCRT_Isdigit_lA wxXLOCALE_IDENT(isdigit_l)
+    #define wxCRT_Isgraph_lA wxXLOCALE_IDENT(isgraph_l)
+    #define wxCRT_Islower_lA wxXLOCALE_IDENT(islower_l)
+    #define wxCRT_Isprint_lA wxXLOCALE_IDENT(isprint_l)
+    #define wxCRT_Ispunct_lA wxXLOCALE_IDENT(ispunct_l)
+    #define wxCRT_Isspace_lA wxXLOCALE_IDENT(isspace_l)
+    #define wxCRT_Isupper_lA wxXLOCALE_IDENT(isupper_l)
+    #define wxCRT_Isxdigit_lA wxXLOCALE_IDENT(isxdigit_l)
+    #define wxCRT_Tolower_lA wxXLOCALE_IDENT(tolower_l)
+    #define wxCRT_Toupper_lA wxXLOCALE_IDENT(toupper_l)
+
+    inline int wxIsalnum_l(char c, const wxXLocale& loc)
+        { return wxCRT_Isalnum_lA(c, loc.Get()); }
+    inline int wxIsalpha_l(char c, const wxXLocale& loc)
+        { return wxCRT_Isalpha_lA(c, loc.Get()); }
+    inline int wxIscntrl_l(char c, const wxXLocale& loc)
+        { return wxCRT_Iscntrl_lA(c, loc.Get()); }
+    inline int wxIsdigit_l(char c, const wxXLocale& loc)
+        { return wxCRT_Isdigit_lA(c, loc.Get()); }
+    inline int wxIsgraph_l(char c, const wxXLocale& loc)
+        { return wxCRT_Isgraph_lA(c, loc.Get()); }
+    inline int wxIslower_l(char c, const wxXLocale& loc)
+        { return wxCRT_Islower_lA(c, loc.Get()); }
+    inline int wxIsprint_l(char c, const wxXLocale& loc)
+        { return wxCRT_Isprint_lA(c, loc.Get()); }
+    inline int wxIspunct_l(char c, const wxXLocale& loc)
+        { return wxCRT_Ispunct_lA(c, loc.Get()); }
+    inline int wxIsspace_l(char c, const wxXLocale& loc)
+        { return wxCRT_Isspace_lA(c, loc.Get()); }
+    inline int wxIsupper_l(char c, const wxXLocale& loc)
+        { return wxCRT_Isupper_lA(c, loc.Get()); }
+    inline int wxIsxdigit_l(char c, const wxXLocale& loc)
+        { return wxCRT_Isxdigit_lA(c, loc.Get()); }
+    inline char wxTolower_l(char c, const wxXLocale& loc)
+        { return wxCRT_Tolower_lA(c, loc.Get()); }
+    inline char wxToupper_l(char c, const wxXLocale& loc)
+        { return wxCRT_Toupper_lA(c, loc.Get()); }
+
+    #if wxUSE_UNICODE
+        #define wxCRT_Isalnum_lW wxXLOCALE_IDENT(iswalnum_l)
+        #define wxCRT_Isalpha_lW wxXLOCALE_IDENT(iswalpha_l)
+        #define wxCRT_Iscntrl_lW wxXLOCALE_IDENT(iswcntrl_l)
+        #define wxCRT_Isdigit_lW wxXLOCALE_IDENT(iswdigit_l)
+        #define wxCRT_Isgraph_lW wxXLOCALE_IDENT(iswgraph_l)
+        #define wxCRT_Islower_lW wxXLOCALE_IDENT(iswlower_l)
+        #define wxCRT_Isprint_lW wxXLOCALE_IDENT(iswprint_l)
+        #define wxCRT_Ispunct_lW wxXLOCALE_IDENT(iswpunct_l)
+        #define wxCRT_Isspace_lW wxXLOCALE_IDENT(iswspace_l)
+        #define wxCRT_Isupper_lW wxXLOCALE_IDENT(iswupper_l)
+        #define wxCRT_Isxdigit_lW wxXLOCALE_IDENT(iswxdigit_l)
+        #define wxCRT_Tolower_lW wxXLOCALE_IDENT(towlower_l)
+        #define wxCRT_Toupper_lW wxXLOCALE_IDENT(towupper_l)
+
+        inline int wxIsalnum_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Isalnum_lW(c, loc.Get()); }
+        inline int wxIsalpha_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Isalpha_lW(c, loc.Get()); }
+        inline int wxIscntrl_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Iscntrl_lW(c, loc.Get()); }
+        inline int wxIsdigit_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Isdigit_lW(c, loc.Get()); }
+        inline int wxIsgraph_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Isgraph_lW(c, loc.Get()); }
+        inline int wxIslower_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Islower_lW(c, loc.Get()); }
+        inline int wxIsprint_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Isprint_lW(c, loc.Get()); }
+        inline int wxIspunct_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Ispunct_lW(c, loc.Get()); }
+        inline int wxIsspace_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Isspace_lW(c, loc.Get()); }
+        inline int wxIsupper_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Isupper_lW(c, loc.Get()); }
+        inline int wxIsxdigit_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Isxdigit_lW(c, loc.Get()); }
+        inline wchar_t wxTolower_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Tolower_lW(c, loc.Get()); }
+        inline wchar_t wxToupper_l(wchar_t c, const wxXLocale& loc)
+            { return wxCRT_Toupper_lW(c, loc.Get()); }
+
+    #endif // wxUSE_UNICDE (ctype functions)
+#else // !wxHAS_XLOCALE_SUPPORT
+
+    // ctype functions
+    int WXDLLIMPEXP_BASE wxIsalnum_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIsalpha_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIscntrl_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIsdigit_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIsgraph_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIslower_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIsprint_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIspunct_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIsspace_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIsupper_l(const wxUniChar& c, const wxXLocale& loc);
+    int WXDLLIMPEXP_BASE wxIsxdigit_l(const wxUniChar& c, const wxXLocale& loc);
+    wxUniChar WXDLLIMPEXP_BASE wxTolower_l(const wxUniChar& c, const wxXLocale& loc);
+    wxUniChar WXDLLIMPEXP_BASE wxToupper_l(const wxUniChar& c, const wxXLocale& loc);
+
+
+#endif // wxHAS_XLOCALE_SUPPORT/!wxHAS_XLOCALE_SUPPORT
+
+#endif // wxUSE_XLOCALE
+
+#endif // _WX_XLOCALE_H_
index 5d0746c7d0cfa08f2b53b4ded1c934cfcb6f66bc..95fdf6c7d9908ea3a269a225f29a666c7f12c79b 100644 (file)
 
 #define wxUSE_INTL          0
 
+#define wxUSE_XLOCALE       0
+
 #define wxUSE_DATETIME      0
 
 #define wxUSE_TIMER         0
 /* Define if getgrgid_r is available. */
 #undef HAVE_GETGRGID_R
 
+/* Define if locale_t is available */
+#undef HAVE_LOCALE_T
+
 /* -------------------------------------------------------------------------
    Win32 adjustments section
    ------------------------------------------------------------------------- */
diff --git a/src/common/xlocale.cpp b/src/common/xlocale.cpp
new file mode 100644 (file)
index 0000000..1f00c13
--- /dev/null
@@ -0,0 +1,228 @@
+//////////////////////////////////////////////////////////////////////////////
+// Name:        src/common/xlocale.cpp
+// Purpose:     xlocale wrappers/impl to provide some xlocale wrappers
+// Author:      Brian Vanderburg II, Vadim Zeitlin
+// Created:     2008-01-07
+// RCS-ID:      $Id$
+// Copyright:   (c) 2008 Brian Vanderburg II
+//                  2008 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#if wxUSE_XLOCALE
+
+#ifndef WX_PRECOMP
+    #include "wx/module.h"
+#endif
+
+#include "wx/xlocale.h"
+
+// ----------------------------------------------------------------------------
+// module globals
+// ----------------------------------------------------------------------------
+
+// This is the C locale object, it is created on demand
+static wxXLocale *gs_cLocale = NULL;
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// Module for gs_cLocale cleanup
+// ----------------------------------------------------------------------------
+
+class wxXLocaleModule : public wxModule
+{
+public:
+    virtual bool OnInit() { return true; }
+    virtual void OnExit() { wxDELETE(gs_cLocale); }
+
+    DECLARE_DYNAMIC_CLASS(wxXLocaleModule)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxXLocaleModule, wxModule)
+
+
+// ============================================================================
+// wxXLocale implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// common parts
+// ----------------------------------------------------------------------------
+
+// Get the C locale
+wxXLocale& wxXLocale::GetCLocale()
+{
+    if ( !gs_cLocale )
+    {
+        gs_cLocale = new wxXLocale(wx_static_cast(wxXLocaleCTag *, NULL));
+    }
+
+    return *gs_cLocale;
+}
+
+wxXLocale::wxXLocale(wxLanguage lang)
+{
+    const wxLanguageInfo * const info = wxLocale::GetLanguageInfo(lang);
+    if ( !info )
+    {
+        m_locale = NULL;
+    }
+    else
+    {
+        Init(info->CanonicalName);
+    }
+}
+
+#ifdef wxHAS_XLOCALE_SUPPORT
+
+#if wxCHECK_VISUALC_VERSION(8)
+
+// ----------------------------------------------------------------------------
+// implementation using MSVC locale API
+// ----------------------------------------------------------------------------
+
+void wxXLocale::Init(const char *loc)
+{
+    m_locale = _create_locale(LC_ALL, loc);
+}
+
+void wxXLocale::Free()
+{
+    if ( m_locale )
+        _free_locale(m_locale);
+}
+
+#elif defined(HAVE_LOCALE_T)
+
+// ----------------------------------------------------------------------------
+// implementation using xlocale API
+// ----------------------------------------------------------------------------
+
+void wxXLocale::Init(const char *loc)
+{
+    m_locale = newlocale(LC_ALL_MASK, loc, NULL);
+}
+
+void wxXLocale::Free()
+{
+    if ( m_locale )
+        freelocale(m_locale);
+}
+
+#else
+    #error "Unknown xlocale support."
+#endif
+
+#endif // wxHAS_XLOCALE_SUPPORT
+
+#ifndef wxHAS_XLOCALE_SUPPORT
+
+// ============================================================================
+// Implementation of wxFoo_l() functions for "C" locale without xlocale support
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// character classification and transformation functions
+// ----------------------------------------------------------------------------
+
+// lookup table and macros for character type functions
+#define CTYPE_ALNUM 0x0001
+#define CTYPE_ALPHA 0x0002
+#define CTYPE_CNTRL 0x0004
+#define CTYPE_DIGIT 0x0008
+#define CTYPE_GRAPH 0x0010
+#define CTYPE_LOWER 0x0020
+#define CTYPE_PRINT 0x0040
+#define CTYPE_PUNCT 0x0080
+#define CTYPE_SPACE 0x0100
+#define CTYPE_UPPER 0x0200
+#define CTYPE_XDIGIT 0x0400
+
+static unsigned int gs_lookup[] =
+{
+    0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
+    0x0004, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004,
+    0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
+    0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
+    0x0140, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0,
+    0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0,
+    0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459, 0x0459,
+    0x0459, 0x0459, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0,
+    0x00D0, 0x0653, 0x0653, 0x0653, 0x0653, 0x0653, 0x0653, 0x0253,
+    0x0253, 0x0253, 0x0253, 0x0253, 0x0253, 0x0253, 0x0253, 0x0253,
+    0x0253, 0x0253, 0x0253, 0x0253, 0x0253, 0x0253, 0x0253, 0x0253,
+    0x0253, 0x0253, 0x0253, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0,
+    0x00D0, 0x0473, 0x0473, 0x0473, 0x0473, 0x0473, 0x0473, 0x0073,
+    0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073,
+    0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073, 0x0073,
+    0x0073, 0x0073, 0x0073, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004
+};
+
+
+#define CTYPE_TEST(c, t) ( (c) <= 127 && (gs_lookup[(c)] & (t)) )
+
+
+// ctype functions
+#define GEN_ISFUNC(name, test) \
+int name(const wxUniChar& c, const wxXLocale& loc) \
+{ \
+    wxCHECK(loc.IsOk(), false); \
+    return CTYPE_TEST(c.GetValue(), test); \
+}
+
+GEN_ISFUNC(wxIsalnum_l, CTYPE_ALNUM)
+GEN_ISFUNC(wxIsalpha_l, CTYPE_ALPHA)
+GEN_ISFUNC(wxIscntrl_l, CTYPE_CNTRL)
+GEN_ISFUNC(wxIsdigit_l, CTYPE_DIGIT)
+GEN_ISFUNC(wxIsgraph_l, CTYPE_GRAPH)
+GEN_ISFUNC(wxIslower_l, CTYPE_LOWER)
+GEN_ISFUNC(wxIsprint_l, CTYPE_PRINT)
+GEN_ISFUNC(wxIspunct_l, CTYPE_PUNCT)
+GEN_ISFUNC(wxIsspace_l, CTYPE_SPACE)
+GEN_ISFUNC(wxIsupper_l, CTYPE_UPPER)
+GEN_ISFUNC(wxIsxdigit_l, CTYPE_XDIGIT)
+
+wxUniChar wxTolower_l(const wxUniChar& c, const wxXLocale& loc)
+{
+    wxCHECK(loc.IsOk(), false);
+
+    if(CTYPE_TEST(c, CTYPE_UPPER))
+    {
+        return c - 'A' + 'a';
+    }
+
+    return c;
+}
+
+wxUniChar wxToupper_l(const wxUniChar& c, const wxXLocale& loc)
+{
+    wxCHECK(loc.IsOk(), false);
+
+    if(CTYPE_TEST(c, CTYPE_LOWER))
+    {
+        return c - 'a' + 'A';
+    }
+
+    return c;
+}
+
+#endif // !defined(wxHAS_XLOCALE_SUPPORT)
+
+#endif // wxUSE_XLOCALE
index f60b44b91942a15e6141185778137c1a610c4f50..56205bab41b2b78b2f18c93a1a545a9e7143105a 100644 (file)
@@ -98,7 +98,8 @@ TEST_OBJECTS =  \
        test_uris.o \
        test_vectors.o \
        test_evtconnection.o \
-       test_weakref.o
+       test_weakref.o \
+       test_xlocale.o
 TEST_ODEP =  $(___pch_testprec_test_testprec_h_gch___depname)
 TEST_GUI_CXXFLAGS = $(__test_gui_PCH_INC) -D__WX$(TOOLKIT)__ \
        $(__WXUNIV_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
@@ -465,6 +466,9 @@ test_evtconnection.o: $(srcdir)/weakref/evtconnection.cpp $(TEST_ODEP)
 test_weakref.o: $(srcdir)/weakref/weakref.cpp $(TEST_ODEP)
        $(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/weakref/weakref.cpp
 
+test_xlocale.o: $(srcdir)/xlocale/xlocale.cpp $(TEST_ODEP)
+       $(CXXC) -c -o $@ $(TEST_CXXFLAGS) $(srcdir)/xlocale/xlocale.cpp
+
 test_gui_sample_rc.o: $(srcdir)/../samples/sample.rc $(TEST_GUI_ODEP)
        $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_5)  $(__EXCEPTIONS_DEFINE_p_5) $(__RTTI_DEFINE_p_5) $(__THREAD_DEFINE_p_5)   --include-dir $(srcdir) $(__DLLFLAG_p_5) --include-dir $(srcdir)/../samples $(__RCDEFDIR_p_1) --include-dir $(top_srcdir)/include
 
index 29dd9fb06dc669ab9d97cdff43a613d152302a9b..1c630af6ffd62be35a2857cbf6f53179961f9038 100644 (file)
@@ -85,7 +85,8 @@ TEST_OBJECTS =  \
        $(OBJS)\test_uris.obj \
        $(OBJS)\test_vectors.obj \
        $(OBJS)\test_evtconnection.obj \
-       $(OBJS)\test_weakref.obj
+       $(OBJS)\test_weakref.obj \
+       $(OBJS)\test_xlocale.obj
 TEST_GUI_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
        $(__OPTIMIZEFLAG) $(__THREADSFLAG_1) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
        $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
@@ -497,6 +498,9 @@ $(OBJS)\test_evtconnection.obj: .\weakref\evtconnection.cpp
 $(OBJS)\test_weakref.obj: .\weakref\weakref.cpp
        $(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) .\weakref\weakref.cpp
 
+$(OBJS)\test_xlocale.obj: .\xlocale\xlocale.cpp
+       $(CXX) -q -c -P -o$@ $(TEST_CXXFLAGS) .\xlocale\xlocale.cpp
+
 $(OBJS)\test_gui_sample.res: .\..\samples\sample.rc
        brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_3) $(__DEBUG_DEFINE_p_3) $(__EXCEPTIONS_DEFINE_p_3) $(__RTTI_DEFINE_p_3) $(__THREAD_DEFINE_p_3) $(__UNICODE_DEFINE_p_3) $(__MSLU_DEFINE_p_3) $(__GFXCTX_DEFINE_p_3) -i$(SETUPHDIR) -i.\..\include -i. $(__DLLFLAG_p_3) -i.\..\samples -dNOPCH .\..\samples\sample.rc
 
index ae8a12366d8b110174be4f0df37d04bee2b6a2fe..9de958824d374edc50f1a55db68088f387a633ec 100644 (file)
@@ -77,7 +77,8 @@ TEST_OBJECTS =  \
        $(OBJS)\test_uris.o \
        $(OBJS)\test_vectors.o \
        $(OBJS)\test_evtconnection.o \
-       $(OBJS)\test_weakref.o
+       $(OBJS)\test_weakref.o \
+       $(OBJS)\test_xlocale.o
 TEST_GUI_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
        $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
        $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
@@ -475,6 +476,9 @@ $(OBJS)\test_evtconnection.o: ./weakref/evtconnection.cpp
 $(OBJS)\test_weakref.o: ./weakref/weakref.cpp
        $(CXX) -c -o $@ $(TEST_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\test_xlocale.o: ./xlocale/xlocale.cpp
+       $(CXX) -c -o $@ $(TEST_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\test_gui_sample_rc.o: ./../samples/sample.rc
        windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_3) $(__DEBUG_DEFINE_p_3) $(__EXCEPTIONS_DEFINE_p_3) $(__RTTI_DEFINE_p_3) $(__THREAD_DEFINE_p_3) $(__UNICODE_DEFINE_p_3) $(__MSLU_DEFINE_p_3) $(__GFXCTX_DEFINE_p_3) --include-dir $(SETUPHDIR) --include-dir ./../include --include-dir . $(__DLLFLAG_p_3) --include-dir ./../samples --define NOPCH
 
index 029031375988a2761481826d8ed736c26d168f37..395b6c4ac6388ee6a027203039ab573cd696f2fa 100644 (file)
@@ -78,7 +78,8 @@ TEST_OBJECTS =  \
        $(OBJS)\test_uris.obj \
        $(OBJS)\test_vectors.obj \
        $(OBJS)\test_evtconnection.obj \
-       $(OBJS)\test_weakref.obj
+       $(OBJS)\test_weakref.obj \
+       $(OBJS)\test_xlocale.obj
 TEST_GUI_CXXFLAGS = /M$(__RUNTIME_LIBS_23)$(__DEBUGRUNTIME) /DWIN32 \
        $(__DEBUGINFO) /Fd$(OBJS)\test_gui.pdb $(____DEBUGRUNTIME) \
        $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ $(__WXUNIV_DEFINE_p) \
@@ -582,6 +583,9 @@ $(OBJS)\test_evtconnection.obj: .\weakref\evtconnection.cpp
 $(OBJS)\test_weakref.obj: .\weakref\weakref.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) .\weakref\weakref.cpp
 
+$(OBJS)\test_xlocale.obj: .\xlocale\xlocale.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(TEST_CXXFLAGS) .\xlocale\xlocale.cpp
+
 $(OBJS)\test_gui_dummy.obj: .\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(TEST_GUI_CXXFLAGS) /Yctestprec.h .\dummy.cpp
 
index 8d7aa750a2ed3a9d10e6385ac8c8a9b53269222e..60d133b8cbd67fadb76c44c38057ca80c8e10b57 100644 (file)
@@ -285,7 +285,8 @@ TEST_OBJECTS =  &
        $(OBJS)\test_uris.obj &
        $(OBJS)\test_vectors.obj &
        $(OBJS)\test_evtconnection.obj &
-       $(OBJS)\test_weakref.obj
+       $(OBJS)\test_weakref.obj &
+       $(OBJS)\test_xlocale.obj
 TEST_GUI_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
        $(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
        $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) &
@@ -527,6 +528,9 @@ $(OBJS)\test_evtconnection.obj :  .AUTODEPEND .\weakref\evtconnection.cpp
 $(OBJS)\test_weakref.obj :  .AUTODEPEND .\weakref\weakref.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(TEST_CXXFLAGS) $<
 
+$(OBJS)\test_xlocale.obj :  .AUTODEPEND .\xlocale\xlocale.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(TEST_CXXFLAGS) $<
+
 $(OBJS)\test_gui_sample.res :  .AUTODEPEND .\..\samples\sample.rc
        wrc -q -ad -bt=nt -r -fo=$^@    -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p)  $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) -i=.\..\include -i=. $(__DLLFLAG_p) -i=.\..\samples -dNOPCH $<
 
index 68132e086d9e8dae81e31c0d9fcec9f8c1c996f9..bfdcbbd93c27900a0c4681b4bf328599f78f9cbc 100644 (file)
@@ -72,6 +72,7 @@
             vectors/vectors.cpp
             weakref/evtconnection.cpp
             weakref/weakref.cpp
+            xlocale/xlocale.cpp
         </sources>
         <wx-lib>net</wx-lib>
         <wx-lib>base</wx-lib>
index 9f40449273ac889fd4a1fa794fb9187e7c238c56..ea24f8ecebaf2815e5267823e672c706bfac8bb4 100644 (file)
@@ -429,6 +429,10 @@ SOURCE=.\regex\wxregextest.cpp
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\xlocale\xlocale.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\archive\ziptest.cpp\r
 # End Source File\r
 # Begin Source File\r
index 10744bf8cbf092799494645a3d94dba0c13abca1..9494e01caa373e4d2dac90a43f718848b896cb7e 100644 (file)
                                RelativePath=".\weakref\weakref.cpp"/>\r
                        <File\r
                                RelativePath=".\regex\wxregextest.cpp"/>\r
+                       <File\r
+                               RelativePath=".\xlocale\xlocale.cpp"/>\r
                        <File\r
                                RelativePath=".\archive\ziptest.cpp"/>\r
                        <File\r
index 2634a7edd24de5a5300766441872705e0bd2b8aa..22fd92a23b72f918e6a29e5a7c74310d3b081b88 100644 (file)
                        <File\r
                                RelativePath=".\regex\wxregextest.cpp"\r
                        />\r
+                       <File\r
+                               RelativePath=".\xlocale\xlocale.cpp"\r
+                       />\r
                        <File\r
                                RelativePath=".\archive\ziptest.cpp"\r
                        />\r
diff --git a/tests/xlocale/xlocale.cpp b/tests/xlocale/xlocale.cpp
new file mode 100644 (file)
index 0000000..9a6ba3a
--- /dev/null
@@ -0,0 +1,182 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        tests/xlocale/xlocale.cpp
+// Purpose:     wxXLocale & related unit test
+// Author:      Brian Vanderburg II, Vadim Zeitlin
+// Created:     2008-01-16
+// RCS-ID:      $Id$
+// Copyright:   (c) 2008 Brian Vanderburg II
+//                  2008 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "testprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#if wxUSE_XLOCALE
+
+#ifndef WX_PRECOMP
+    #include "wx/wx.h"
+#endif // WX_PRECOMP
+
+#include "wx/xlocale.h"
+
+// --------------------------------------------------------------------------
+// test class
+// --------------------------------------------------------------------------
+
+class XLocaleTestCase : public CppUnit::TestCase
+{
+public:
+    XLocaleTestCase() { }
+
+private:
+    CPPUNIT_TEST_SUITE( XLocaleTestCase );
+        CPPUNIT_TEST( TestCtor );
+        CPPUNIT_TEST( TestCtypeFunctions );
+    CPPUNIT_TEST_SUITE_END();
+
+    void TestCtor();
+    void TestCtypeFunctions();
+
+    void TestCtypeFunctionsWith(const wxXLocale& loc);
+
+    DECLARE_NO_COPY_CLASS(XLocaleTestCase)
+};
+
+// register in the unnamed registry so that these tests are run by default
+CPPUNIT_TEST_SUITE_REGISTRATION( XLocaleTestCase );
+
+// also include in it's own registry so that these tests can be run alone
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( XLocaleTestCase, "XLocaleTestCase" );
+
+
+// test the different wxXLocale ctors
+void XLocaleTestCase::TestCtor()
+{
+    CPPUNIT_ASSERT( !wxXLocale().IsOk() );
+    CPPUNIT_ASSERT( wxCLocale.IsOk() );
+    CPPUNIT_ASSERT( wxXLocale("C").IsOk() );
+#ifdef wxHAS_XLOCALE_SUPPORT
+    CPPUNIT_ASSERT( wxXLocale(wxLANGUAGE_FRENCH).IsOk() );
+    CPPUNIT_ASSERT( wxXLocale("fr_FR").IsOk() );
+    CPPUNIT_ASSERT( wxXLocale("french").IsOk() );
+#endif
+    CPPUNIT_ASSERT( !wxXLocale("bloordyblop").IsOk() );
+}
+
+// test the ctype functions with the given locale
+void XLocaleTestCase::TestCtypeFunctionsWith(const wxXLocale& loc)
+{
+    // isalnum
+    CPPUNIT_ASSERT( wxIsalnum_l('0', loc) );
+    CPPUNIT_ASSERT( wxIsalnum_l('9', loc) );
+    CPPUNIT_ASSERT( wxIsalnum_l('A', loc) );
+    CPPUNIT_ASSERT( wxIsalnum_l('Z', loc) );
+    CPPUNIT_ASSERT( wxIsalnum_l('a', loc) );
+    CPPUNIT_ASSERT( wxIsalnum_l('z', loc) );
+    CPPUNIT_ASSERT( !wxIsalnum_l('*', loc) );
+    CPPUNIT_ASSERT( !wxIsalnum_l('@', loc) );
+    CPPUNIT_ASSERT( !wxIsalnum_l('+', loc) );
+
+    // isalpha
+    CPPUNIT_ASSERT( !wxIsalpha_l('0', loc) );
+    CPPUNIT_ASSERT( !wxIsalpha_l('9', loc) );
+    CPPUNIT_ASSERT( wxIsalpha_l('A', loc) );
+    CPPUNIT_ASSERT( wxIsalpha_l('Z', loc) );
+    CPPUNIT_ASSERT( wxIsalpha_l('a', loc) );
+    CPPUNIT_ASSERT( wxIsalpha_l('z', loc) );
+    CPPUNIT_ASSERT( !wxIsalpha_l('*', loc) );
+    CPPUNIT_ASSERT( !wxIsalpha_l('@', loc) );
+    CPPUNIT_ASSERT( !wxIsalpha_l('+', loc) );
+
+    // TODO: iscntrl
+
+    // isdigit
+    CPPUNIT_ASSERT( wxIsdigit_l('0', loc) );
+    CPPUNIT_ASSERT( wxIsdigit_l('9', loc) );
+    CPPUNIT_ASSERT( !wxIsdigit_l('A', loc) );
+    CPPUNIT_ASSERT( !wxIsdigit_l('Z', loc) );
+    CPPUNIT_ASSERT( !wxIsdigit_l('a', loc) );
+    CPPUNIT_ASSERT( !wxIsdigit_l('z', loc) );
+
+    // TODO: isgraph
+
+    // islower
+    CPPUNIT_ASSERT( !wxIslower_l('A', loc) );
+    CPPUNIT_ASSERT( !wxIslower_l('Z', loc) );
+    CPPUNIT_ASSERT( wxIslower_l('a', loc) );
+    CPPUNIT_ASSERT( wxIslower_l('z', loc) );
+    CPPUNIT_ASSERT( !wxIslower_l('0', loc) );
+    CPPUNIT_ASSERT( !wxIslower_l('9', loc) );
+
+
+    // TODO: isprint
+    // TODO: ispunct
+
+    // isspace
+    CPPUNIT_ASSERT( wxIsspace_l(' ', loc) );
+    CPPUNIT_ASSERT( wxIsspace_l('\t', loc) );
+    CPPUNIT_ASSERT( wxIsspace_l('\r', loc) );
+    CPPUNIT_ASSERT( wxIsspace_l('\n', loc) );
+    CPPUNIT_ASSERT( !wxIsspace_l('0', loc) );
+    CPPUNIT_ASSERT( !wxIsspace_l('a', loc) );
+    CPPUNIT_ASSERT( !wxIsspace_l('A', loc) );
+
+    // isupper
+    CPPUNIT_ASSERT( !wxIsupper_l('0', loc) );
+    CPPUNIT_ASSERT( !wxIsupper_l('9', loc) );
+    CPPUNIT_ASSERT( wxIsupper_l('A', loc) );
+    CPPUNIT_ASSERT( wxIsupper_l('Z', loc) );
+    CPPUNIT_ASSERT( !wxIsupper_l('a', loc) );
+    CPPUNIT_ASSERT( !wxIsupper_l('z', loc) );
+
+    // isxdigit
+    CPPUNIT_ASSERT( wxIsxdigit_l('0', loc) );
+    CPPUNIT_ASSERT( wxIsxdigit_l('9', loc) );
+    CPPUNIT_ASSERT( wxIsxdigit_l('A', loc) );
+    CPPUNIT_ASSERT( wxIsxdigit_l('F', loc) );
+    CPPUNIT_ASSERT( !wxIsxdigit_l('Z', loc) );
+    CPPUNIT_ASSERT( wxIsxdigit_l('a', loc) );
+    CPPUNIT_ASSERT( wxIsxdigit_l('f', loc) );
+    CPPUNIT_ASSERT( !wxIsxdigit_l('z', loc) );
+
+    // tolower
+    CPPUNIT_ASSERT_EQUAL( 'a', wxTolower_l('A', loc) );
+    CPPUNIT_ASSERT_EQUAL( 'a', wxTolower_l('a', loc) );
+    CPPUNIT_ASSERT_EQUAL( 'z', wxTolower_l('Z', loc) );
+    CPPUNIT_ASSERT_EQUAL( 'z', wxTolower_l('z', loc) );
+    CPPUNIT_ASSERT_EQUAL( '0', wxTolower_l('0', loc) );
+    CPPUNIT_ASSERT_EQUAL( '9', wxTolower_l('9', loc) );
+
+    // toupper
+    CPPUNIT_ASSERT_EQUAL( 'A', wxToupper_l('A', loc) );
+    CPPUNIT_ASSERT_EQUAL( 'A', wxToupper_l('a', loc) );
+    CPPUNIT_ASSERT_EQUAL( 'Z', wxToupper_l('Z', loc) );
+    CPPUNIT_ASSERT_EQUAL( 'Z', wxToupper_l('z', loc) );
+    CPPUNIT_ASSERT_EQUAL( '0', wxToupper_l('0', loc) );
+    CPPUNIT_ASSERT_EQUAL( '9', wxToupper_l('9', loc) );
+}
+
+void XLocaleTestCase::TestCtypeFunctions()
+{
+    TestCtypeFunctionsWith(wxCLocale);
+
+#ifdef wxHAS_XLOCALE_SUPPORT
+    wxXLocale locFR("fr_FR");
+    TestCtypeFunctionsWith(locFR);
+
+    CPPUNIT_ASSERT( wxIsalpha_l('é', locFR) );
+    CPPUNIT_ASSERT( wxIslower_l('é', locFR) );
+    CPPUNIT_ASSERT( !wxIslower_l('É', locFR) );
+    CPPUNIT_ASSERT( wxIsupper_l('É', locFR) );
+#endif
+}
+
+#endif // wxUSE_XLOCALE
index a265df2bf42794d6bac09ba60de6d891394125b5..b7b5c3f3182e06845e848928128ca78048a5e507 100644 (file)
@@ -327,6 +327,7 @@ wx/wxcrt.h
 wx/wxcrtbase.h
 wx/wxcrtvararg.h
 wx/wxprec.h
+wx/xlocale.h
 wx/xti.h
 wx/xtistrm.h
 wx/zipstrm.h
@@ -344,11 +345,11 @@ wx/unix/chkconf.h
 wx/unix/evtloop.h
 wx/unix/pipe.h
 wx/unix/stdpaths.h
+wx/unix/stackwalk.h
 wx/unix/execute.h
 wx/unix/mimetype.h
 wx/unix/private.h
 wx/private/gsocketiohandler.h
-wx/unix/stackwalk.h
 wx/fs_inet.h
 wx/gsocket.h
 wx/protocol/file.h
index 1c6b54314cfd2c84824b4b9138fcafd4cff92408..d5fb0fef8715635b43844618fc4fd5f56dd6f4ef 100644 (file)
@@ -232,6 +232,7 @@ wx/wxcrt.h
 wx/wxcrtbase.h
 wx/wxcrtvararg.h
 wx/wxprec.h
+wx/xlocale.h
 wx/xti.h
 wx/xtistrm.h
 wx/zipstrm.h
@@ -249,11 +250,11 @@ wx/unix/chkconf.h
 wx/unix/evtloop.h
 wx/unix/pipe.h
 wx/unix/stdpaths.h
+wx/unix/stackwalk.h
 wx/unix/execute.h
 wx/unix/mimetype.h
 wx/unix/private.h
 wx/private/gsocketiohandler.h
-wx/unix/stackwalk.h
 wx/fs_inet.h
 wx/gsocket.h
 wx/protocol/file.h
index bc9faeaaacedfb209dd3226312e504cb9609cf83..62135b2953a8ff036873d2cda1b53fb812e229bc 100644 (file)
@@ -256,6 +256,7 @@ wx/wxcrt.h
 wx/wxcrtbase.h
 wx/wxcrtvararg.h
 wx/wxprec.h
+wx/xlocale.h
 wx/xti.h
 wx/xtistrm.h
 wx/zipstrm.h
@@ -273,11 +274,11 @@ wx/unix/chkconf.h
 wx/unix/evtloop.h
 wx/unix/pipe.h
 wx/unix/stdpaths.h
+wx/unix/stackwalk.h
 wx/unix/execute.h
 wx/unix/mimetype.h
 wx/unix/private.h
 wx/private/gsocketiohandler.h
-wx/unix/stackwalk.h
 wx/fs_inet.h
 wx/gsocket.h
 wx/protocol/file.h