Commit 3d21af20 authored by nadro's avatar nadro

Added helper functions for converting between wchar and utf-8. Patch provided by Hendu.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4922 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 48f84e28
...@@ -27,6 +27,9 @@ This means that c8 strings are treated as ASCII/Latin-1, not UTF-8, and ...@@ -27,6 +27,9 @@ This means that c8 strings are treated as ASCII/Latin-1, not UTF-8, and
are simply expanded to the equivalent wchar_t, while Unicode/wchar_t are simply expanded to the equivalent wchar_t, while Unicode/wchar_t
characters are truncated to 8-bit ASCII/Latin-1 characters, discarding all characters are truncated to 8-bit ASCII/Latin-1 characters, discarding all
other information in the wchar_t. other information in the wchar_t.
Helper functions for converting between UTF-8 and wchar_t are provided
outside the string class for explicit use.
*/ */
enum eLocaleID enum eLocaleID
...@@ -68,6 +71,18 @@ static inline u32 locale_upper ( u32 x ) ...@@ -68,6 +71,18 @@ static inline u32 locale_upper ( u32 x )
return x >= 'a' && x <= 'z' ? x + ( 'A' - 'a' ) : x; return x >= 'a' && x <= 'z' ? x + ( 'A' - 'a' ) : x;
} }
//! Convert this utf-8-encoded string to the platform's wchar.
/** The resulting string is always NULL-terminated and well-formed.
\param len The size of the output buffer in bytes.
*/
void utf8ToWchar(const char *in, wchar_t *out, const u64 len);
//! Convert this wchar string to utf-8.
/** The resulting string is always NULL-terminated and well-formed.
\param len The size of the output buffer in bytes.
*/
void wcharToUtf8(const wchar_t *in, char *out, const u64 len);
template <typename T, typename TAlloc = irrAllocator<T> > template <typename T, typename TAlloc = irrAllocator<T> >
class string class string
...@@ -1360,7 +1375,6 @@ typedef string<c8> stringc; ...@@ -1360,7 +1375,6 @@ typedef string<c8> stringc;
//! Typedef for wide character strings //! Typedef for wide character strings
typedef string<wchar_t> stringw; typedef string<wchar_t> stringw;
} // end namespace core } // end namespace core
} // end namespace irr } // end namespace irr
......
...@@ -1277,6 +1277,7 @@ ...@@ -1277,6 +1277,7 @@
<Unit filename="lzma\Types.h" /> <Unit filename="lzma\Types.h" />
<Unit filename="os.cpp" /> <Unit filename="os.cpp" />
<Unit filename="os.h" /> <Unit filename="os.h" />
<Unit filename="utf8.cpp" />
<Unit filename="zlib\adler32.c"> <Unit filename="zlib\adler32.c">
<Option compilerVar="CC" /> <Option compilerVar="CC" />
</Unit> </Unit>
......
...@@ -1418,6 +1418,7 @@ ...@@ -1418,6 +1418,7 @@
<ClCompile Include="Irrlicht.cpp" /> <ClCompile Include="Irrlicht.cpp" />
<ClCompile Include="leakHunter.cpp" /> <ClCompile Include="leakHunter.cpp" />
<ClCompile Include="os.cpp" /> <ClCompile Include="os.cpp" />
<ClCompile Include="utf8.cpp" />
<ClCompile Include="CProfiler.cpp" /> <ClCompile Include="CProfiler.cpp" />
<ClCompile Include="lzma\LzmaDec.c" /> <ClCompile Include="lzma\LzmaDec.c" />
<ClCompile Include="zlib\adler32.c" /> <ClCompile Include="zlib\adler32.c" />
......
...@@ -1838,6 +1838,9 @@ ...@@ -1838,6 +1838,9 @@
<ClCompile Include="os.cpp"> <ClCompile Include="os.cpp">
<Filter>Irrlicht\irr</Filter> <Filter>Irrlicht\irr</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="utf8.cpp">
<Filter>Irrlicht\irr</Filter>
</ClCompile>
<ClCompile Include="CProfiler.cpp"> <ClCompile Include="CProfiler.cpp">
<Filter>Irrlicht\irr</Filter> <Filter>Irrlicht\irr</Filter>
</ClCompile> </ClCompile>
......
...@@ -1424,6 +1424,7 @@ ...@@ -1424,6 +1424,7 @@
<ClCompile Include="COSOperator.cpp" /> <ClCompile Include="COSOperator.cpp" />
<ClCompile Include="Irrlicht.cpp" /> <ClCompile Include="Irrlicht.cpp" />
<ClCompile Include="os.cpp" /> <ClCompile Include="os.cpp" />
<ClCompile Include="utf8.cpp" />
<ClCompile Include="CProfiler.cpp" /> <ClCompile Include="CProfiler.cpp" />
<ClCompile Include="leakHunter.cpp" /> <ClCompile Include="leakHunter.cpp" />
<ClCompile Include="lzma\LzmaDec.c" /> <ClCompile Include="lzma\LzmaDec.c" />
......
...@@ -1837,6 +1837,9 @@ ...@@ -1837,6 +1837,9 @@
</ClCompile> </ClCompile>
<ClCompile Include="os.cpp"> <ClCompile Include="os.cpp">
<Filter>Irrlicht\irr</Filter> <Filter>Irrlicht\irr</Filter>
</ClCompile>
<ClCompile Include="utf8.cpp">
<Filter>Irrlicht\irr</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="CProfiler.cpp"> <ClCompile Include="CProfiler.cpp">
<Filter>Irrlicht\irr</Filter> <Filter>Irrlicht\irr</Filter>
......
...@@ -3017,6 +3017,10 @@ ...@@ -3017,6 +3017,10 @@
RelativePath="os.cpp" RelativePath="os.cpp"
> >
</File> </File>
<File
RelativePath="utf8.cpp"
>
</File>
<File <File
RelativePath="CProfiler.cpp" RelativePath="CProfiler.cpp"
> >
......
...@@ -2735,6 +2735,9 @@ ...@@ -2735,6 +2735,9 @@
<File <File
RelativePath="os.cpp" RelativePath="os.cpp"
> >
<File
RelativePath="utf8.cpp"
>
</File> </File>
<File <File
RelativePath="CProfiler.cpp" RelativePath="CProfiler.cpp"
......
...@@ -44,7 +44,7 @@ IRRIMAGEOBJ = CColorConverter.o CImage.o CImageLoaderBMP.o CImageLoaderDDS.o CIm ...@@ -44,7 +44,7 @@ IRRIMAGEOBJ = CColorConverter.o CImage.o CImageLoaderBMP.o CImageLoaderDDS.o CIm
IRRVIDEOOBJ = CVideoModeList.o CFPSCounter.o $(IRRDRVROBJ) $(IRRIMAGEOBJ) IRRVIDEOOBJ = CVideoModeList.o CFPSCounter.o $(IRRDRVROBJ) $(IRRIMAGEOBJ)
IRRSWRENDEROBJ = CSoftwareDriver.o CSoftwareTexture.o CTRFlat.o CTRFlatWire.o CTRGouraud.o CTRGouraudWire.o CTRNormalMap.o CTRStencilShadow.o CTRTextureFlat.o CTRTextureFlatWire.o CTRTextureGouraud.o CTRTextureGouraudAdd.o CTRTextureGouraudNoZ.o CTRTextureGouraudWire.o CZBuffer.o CTRTextureGouraudVertexAlpha2.o CTRTextureGouraudNoZ2.o CTRTextureLightMap2_M2.o CTRTextureLightMap2_M4.o CTRTextureLightMap2_M1.o CSoftwareDriver2.o CSoftwareTexture2.o CTRTextureGouraud2.o CTRGouraud2.o CTRGouraudAlpha2.o CTRGouraudAlphaNoZ2.o CTRTextureDetailMap2.o CTRTextureGouraudAdd2.o CTRTextureGouraudAddNoZ2.o CTRTextureWire2.o CTRTextureLightMap2_Add.o CTRTextureLightMapGouraud2_M4.o IBurningShader.o CTRTextureBlend.o CTRTextureGouraudAlpha.o CTRTextureGouraudAlphaNoZ.o CDepthBuffer.o CBurningShader_Raster_Reference.o IRRSWRENDEROBJ = CSoftwareDriver.o CSoftwareTexture.o CTRFlat.o CTRFlatWire.o CTRGouraud.o CTRGouraudWire.o CTRNormalMap.o CTRStencilShadow.o CTRTextureFlat.o CTRTextureFlatWire.o CTRTextureGouraud.o CTRTextureGouraudAdd.o CTRTextureGouraudNoZ.o CTRTextureGouraudWire.o CZBuffer.o CTRTextureGouraudVertexAlpha2.o CTRTextureGouraudNoZ2.o CTRTextureLightMap2_M2.o CTRTextureLightMap2_M4.o CTRTextureLightMap2_M1.o CSoftwareDriver2.o CSoftwareTexture2.o CTRTextureGouraud2.o CTRGouraud2.o CTRGouraudAlpha2.o CTRGouraudAlphaNoZ2.o CTRTextureDetailMap2.o CTRTextureGouraudAdd2.o CTRTextureGouraudAddNoZ2.o CTRTextureWire2.o CTRTextureLightMap2_Add.o CTRTextureLightMapGouraud2_M4.o IBurningShader.o CTRTextureBlend.o CTRTextureGouraudAlpha.o CTRTextureGouraudAlphaNoZ.o CDepthBuffer.o CBurningShader_Raster_Reference.o
IRRIOOBJ = CFileList.o CFileSystem.o CLimitReadFile.o CMemoryFile.o CReadFile.o CWriteFile.o CXMLReader.o CXMLWriter.o CWADReader.o CZipReader.o CPakReader.o CNPKReader.o CTarReader.o CMountPointReader.o irrXML.o CAttributes.o lzma/LzmaDec.o IRRIOOBJ = CFileList.o CFileSystem.o CLimitReadFile.o CMemoryFile.o CReadFile.o CWriteFile.o CXMLReader.o CXMLWriter.o CWADReader.o CZipReader.o CPakReader.o CNPKReader.o CTarReader.o CMountPointReader.o irrXML.o CAttributes.o lzma/LzmaDec.o
IRROTHEROBJ = CIrrDeviceSDL.o CIrrDeviceLinux.o CIrrDeviceConsole.o CIrrDeviceStub.o CIrrDeviceWin32.o CIrrDeviceFB.o CLogger.o COSOperator.o Irrlicht.o os.o leakHunter.o CProfiler.o IRROTHEROBJ = CIrrDeviceSDL.o CIrrDeviceLinux.o CIrrDeviceConsole.o CIrrDeviceStub.o CIrrDeviceWin32.o CIrrDeviceFB.o CLogger.o COSOperator.o Irrlicht.o os.o leakHunter.o CProfiler.o utf8.o
IRRGUIOBJ = CGUIButton.o CGUICheckBox.o CGUIComboBox.o CGUIContextMenu.o CGUIEditBox.o CGUIEnvironment.o CGUIFileOpenDialog.o CGUIFont.o CGUIImage.o CGUIInOutFader.o CGUIListBox.o CGUIMenu.o CGUIMeshViewer.o CGUIMessageBox.o CGUIModalScreen.o CGUIScrollBar.o CGUISpinBox.o CGUISkin.o CGUIStaticText.o CGUITabControl.o CGUITable.o CGUIToolBar.o CGUIWindow.o CGUIColorSelectDialog.o CDefaultGUIElementFactory.o CGUISpriteBank.o CGUIImageList.o CGUITreeView.o CGUIProfiler.o IRRGUIOBJ = CGUIButton.o CGUICheckBox.o CGUIComboBox.o CGUIContextMenu.o CGUIEditBox.o CGUIEnvironment.o CGUIFileOpenDialog.o CGUIFont.o CGUIImage.o CGUIInOutFader.o CGUIListBox.o CGUIMenu.o CGUIMeshViewer.o CGUIMessageBox.o CGUIModalScreen.o CGUIScrollBar.o CGUISpinBox.o CGUISkin.o CGUIStaticText.o CGUITabControl.o CGUITable.o CGUIToolBar.o CGUIWindow.o CGUIColorSelectDialog.o CDefaultGUIElementFactory.o CGUISpriteBank.o CGUIImageList.o CGUITreeView.o CGUIProfiler.o
ZLIBOBJ = zlib/adler32.o zlib/compress.o zlib/crc32.o zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/trees.o zlib/uncompr.o zlib/zutil.o ZLIBOBJ = zlib/adler32.o zlib/compress.o zlib/crc32.o zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/trees.o zlib/uncompr.o zlib/zutil.o
JPEGLIBOBJ = jpeglib/jcapimin.o jpeglib/jcapistd.o jpeglib/jccoefct.o jpeglib/jccolor.o jpeglib/jcdctmgr.o jpeglib/jchuff.o jpeglib/jcinit.o jpeglib/jcmainct.o jpeglib/jcmarker.o jpeglib/jcmaster.o jpeglib/jcomapi.o jpeglib/jcparam.o jpeglib/jcprepct.o jpeglib/jcsample.o jpeglib/jctrans.o jpeglib/jdapimin.o jpeglib/jdapistd.o jpeglib/jdatadst.o jpeglib/jdatasrc.o jpeglib/jdcoefct.o jpeglib/jdcolor.o jpeglib/jddctmgr.o jpeglib/jdhuff.o jpeglib/jdinput.o jpeglib/jdmainct.o jpeglib/jdmarker.o jpeglib/jdmaster.o jpeglib/jdmerge.o jpeglib/jdpostct.o jpeglib/jdsample.o jpeglib/jdtrans.o jpeglib/jerror.o jpeglib/jfdctflt.o jpeglib/jfdctfst.o jpeglib/jfdctint.o jpeglib/jidctflt.o jpeglib/jidctfst.o jpeglib/jidctint.o jpeglib/jmemmgr.o jpeglib/jmemnobs.o jpeglib/jquant1.o jpeglib/jquant2.o jpeglib/jutils.o jpeglib/jcarith.o jpeglib/jdarith.o jpeglib/jaricom.o JPEGLIBOBJ = jpeglib/jcapimin.o jpeglib/jcapistd.o jpeglib/jccoefct.o jpeglib/jccolor.o jpeglib/jcdctmgr.o jpeglib/jchuff.o jpeglib/jcinit.o jpeglib/jcmainct.o jpeglib/jcmarker.o jpeglib/jcmaster.o jpeglib/jcomapi.o jpeglib/jcparam.o jpeglib/jcprepct.o jpeglib/jcsample.o jpeglib/jctrans.o jpeglib/jdapimin.o jpeglib/jdapistd.o jpeglib/jdatadst.o jpeglib/jdatasrc.o jpeglib/jdcoefct.o jpeglib/jdcolor.o jpeglib/jddctmgr.o jpeglib/jdhuff.o jpeglib/jdinput.o jpeglib/jdmainct.o jpeglib/jdmarker.o jpeglib/jdmaster.o jpeglib/jdmerge.o jpeglib/jdpostct.o jpeglib/jdsample.o jpeglib/jdtrans.o jpeglib/jerror.o jpeglib/jfdctflt.o jpeglib/jfdctfst.o jpeglib/jfdctint.o jpeglib/jidctflt.o jpeglib/jidctfst.o jpeglib/jidctint.o jpeglib/jmemmgr.o jpeglib/jmemnobs.o jpeglib/jquant1.o jpeglib/jquant2.o jpeglib/jutils.o jpeglib/jcarith.o jpeglib/jdarith.o jpeglib/jaricom.o
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment