<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>SFML - Simple and Fast Multimedia Library</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <link href="doxygen.css" rel="stylesheet" type="text/css" /> <link href="tabs.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="logo"> <img src="./logo.jpg" width="770" height="200" title="SFML home" alt="SFML logo" /> </div> <!-- Generated by Doxygen 1.6.3 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.htm"><span>Main Page</span></a></li> <li><a href="modules.htm"><span>Modules</span></a></li> <li><a href="annotated.htm"><span>Classes</span></a></li> <li class="current"><a href="files.htm"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.htm"><span>File List</span></a></li> </ul> </div> <h1>Utf.hpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <a name="l00002"></a>00002 <span class="comment">//</span> <a name="l00003"></a>00003 <span class="comment">// SFML - Simple and Fast Multimedia Library</span> <a name="l00004"></a>00004 <span class="comment">// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com)</span> <a name="l00005"></a>00005 <span class="comment">//</span> <a name="l00006"></a>00006 <span class="comment">// This software is provided 'as-is', without any express or implied warranty.</span> <a name="l00007"></a>00007 <span class="comment">// In no event will the authors be held liable for any damages arising from the use of this software.</span> <a name="l00008"></a>00008 <span class="comment">//</span> <a name="l00009"></a>00009 <span class="comment">// Permission is granted to anyone to use this software for any purpose,</span> <a name="l00010"></a>00010 <span class="comment">// including commercial applications, and to alter it and redistribute it freely,</span> <a name="l00011"></a>00011 <span class="comment">// subject to the following restrictions:</span> <a name="l00012"></a>00012 <span class="comment">//</span> <a name="l00013"></a>00013 <span class="comment">// 1. The origin of this software must not be misrepresented;</span> <a name="l00014"></a>00014 <span class="comment">// you must not claim that you wrote the original software.</span> <a name="l00015"></a>00015 <span class="comment">// If you use this software in a product, an acknowledgment</span> <a name="l00016"></a>00016 <span class="comment">// in the product documentation would be appreciated but is not required.</span> <a name="l00017"></a>00017 <span class="comment">//</span> <a name="l00018"></a>00018 <span class="comment">// 2. Altered source versions must be plainly marked as such,</span> <a name="l00019"></a>00019 <span class="comment">// and must not be misrepresented as being the original software.</span> <a name="l00020"></a>00020 <span class="comment">//</span> <a name="l00021"></a>00021 <span class="comment">// 3. This notice may not be removed or altered from any source distribution.</span> <a name="l00022"></a>00022 <span class="comment">//</span> <a name="l00024"></a>00024 <span class="comment"></span> <a name="l00025"></a>00025 <span class="preprocessor">#ifndef SFML_UTF_HPP</span> <a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define SFML_UTF_HPP</span> <a name="l00027"></a>00027 <span class="preprocessor"></span> <a name="l00029"></a>00029 <span class="comment">// Headers</span> <a name="l00031"></a>00031 <span class="comment"></span><span class="preprocessor">#include <SFML/Config.hpp></span> <a name="l00032"></a>00032 <span class="preprocessor">#include <algorithm></span> <a name="l00033"></a>00033 <span class="preprocessor">#include <locale></span> <a name="l00034"></a>00034 <span class="preprocessor">#include <string></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <cstdlib></span> <a name="l00036"></a>00036 <a name="l00037"></a>00037 <a name="l00038"></a>00038 <span class="keyword">namespace </span>sf <a name="l00039"></a>00039 { <a name="l00040"></a>00040 <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> N> <a name="l00041"></a>00041 <span class="keyword">class </span>Utf; <a name="l00042"></a>00042 <a name="l00047"></a>00047 <span class="keyword">template</span> <> <a name="l00048"></a><a class="code" href="classsf_1_1Utf_3_018_01_4.htm">00048</a> <span class="keyword">class </span><a class="code" href="classsf_1_1Utf.htm" title="Utility class providing generic functions for UTF conversions.">Utf</a><8> <a name="l00049"></a>00049 { <a name="l00050"></a>00050 <span class="keyword">public</span> : <a name="l00051"></a>00051 <a name="l00066"></a>00066 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00067"></a>00067 <span class="keyword">static</span> In Decode(In begin, In end, Uint32& output, Uint32 replacement = 0); <a name="l00068"></a>00068 <a name="l00082"></a>00082 <span class="keyword">template</span> <<span class="keyword">typename</span> Out> <a name="l00083"></a>00083 <span class="keyword">static</span> Out Encode(Uint32 input, Out output, Uint8 replacement = 0); <a name="l00084"></a>00084 <a name="l00097"></a>00097 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00098"></a>00098 <span class="keyword">static</span> In Next(In begin, In end); <a name="l00099"></a>00099 <a name="l00113"></a>00113 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00114"></a>00114 <span class="keyword">static</span> std::size_t Count(In begin, In end); <a name="l00115"></a>00115 <a name="l00130"></a>00130 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00131"></a>00131 <span class="keyword">static</span> Out FromAnsi(In begin, In end, Out output, <span class="keyword">const</span> std::locale& locale = std::locale()); <a name="l00132"></a>00132 <a name="l00143"></a>00143 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00144"></a>00144 <span class="keyword">static</span> Out FromWide(In begin, In end, Out output); <a name="l00145"></a>00145 <a name="l00157"></a>00157 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00158"></a>00158 <span class="keyword">static</span> Out FromLatin1(In begin, In end, Out output); <a name="l00159"></a>00159 <a name="l00175"></a>00175 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00176"></a>00176 <span class="keyword">static</span> Out ToAnsi(In begin, In end, Out output, <span class="keywordtype">char</span> replacement = 0, <span class="keyword">const</span> std::locale& locale = std::locale()); <a name="l00177"></a>00177 <a name="l00189"></a>00189 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00190"></a>00190 <span class="keyword">static</span> Out ToWide(In begin, In end, Out output, <span class="keywordtype">wchar_t</span> replacement = 0); <a name="l00191"></a>00191 <a name="l00203"></a>00203 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00204"></a>00204 <span class="keyword">static</span> Out ToLatin1(In begin, In end, Out output, <span class="keywordtype">char</span> replacement = 0); <a name="l00205"></a>00205 <a name="l00221"></a>00221 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00222"></a>00222 <span class="keyword">static</span> Out ToUtf8(In begin, In end, Out output); <a name="l00223"></a>00223 <a name="l00234"></a>00234 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00235"></a>00235 <span class="keyword">static</span> Out ToUtf16(In begin, In end, Out output); <a name="l00236"></a>00236 <a name="l00247"></a>00247 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00248"></a>00248 <span class="keyword">static</span> Out ToUtf32(In begin, In end, Out output); <a name="l00249"></a>00249 }; <a name="l00250"></a>00250 <a name="l00255"></a>00255 <span class="keyword">template</span> <> <a name="l00256"></a><a class="code" href="classsf_1_1Utf_3_0116_01_4.htm">00256</a> <span class="keyword">class </span><a class="code" href="classsf_1_1Utf.htm" title="Utility class providing generic functions for UTF conversions.">Utf</a><16> <a name="l00257"></a>00257 { <a name="l00258"></a>00258 <span class="keyword">public</span> : <a name="l00259"></a>00259 <a name="l00274"></a>00274 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00275"></a>00275 <span class="keyword">static</span> In Decode(In begin, In end, Uint32& output, Uint32 replacement = 0); <a name="l00276"></a>00276 <a name="l00290"></a>00290 <span class="keyword">template</span> <<span class="keyword">typename</span> Out> <a name="l00291"></a>00291 <span class="keyword">static</span> Out Encode(Uint32 input, Out output, Uint16 replacement = 0); <a name="l00292"></a>00292 <a name="l00305"></a>00305 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00306"></a>00306 <span class="keyword">static</span> In Next(In begin, In end); <a name="l00307"></a>00307 <a name="l00321"></a>00321 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00322"></a>00322 <span class="keyword">static</span> std::size_t Count(In begin, In end); <a name="l00323"></a>00323 <a name="l00338"></a>00338 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00339"></a>00339 <span class="keyword">static</span> Out FromAnsi(In begin, In end, Out output, <span class="keyword">const</span> std::locale& locale = std::locale()); <a name="l00340"></a>00340 <a name="l00351"></a>00351 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00352"></a>00352 <span class="keyword">static</span> Out FromWide(In begin, In end, Out output); <a name="l00353"></a>00353 <a name="l00365"></a>00365 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00366"></a>00366 <span class="keyword">static</span> Out FromLatin1(In begin, In end, Out output); <a name="l00367"></a>00367 <a name="l00383"></a>00383 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00384"></a>00384 <span class="keyword">static</span> Out ToAnsi(In begin, In end, Out output, <span class="keywordtype">char</span> replacement = 0, <span class="keyword">const</span> std::locale& locale = std::locale()); <a name="l00385"></a>00385 <a name="l00397"></a>00397 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00398"></a>00398 <span class="keyword">static</span> Out ToWide(In begin, In end, Out output, <span class="keywordtype">wchar_t</span> replacement = 0); <a name="l00399"></a>00399 <a name="l00411"></a>00411 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00412"></a>00412 <span class="keyword">static</span> Out ToLatin1(In begin, In end, Out output, <span class="keywordtype">char</span> replacement = 0); <a name="l00413"></a>00413 <a name="l00424"></a>00424 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00425"></a>00425 <span class="keyword">static</span> Out ToUtf8(In begin, In end, Out output); <a name="l00426"></a>00426 <a name="l00442"></a>00442 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00443"></a>00443 <span class="keyword">static</span> Out ToUtf16(In begin, In end, Out output); <a name="l00444"></a>00444 <a name="l00455"></a>00455 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00456"></a>00456 <span class="keyword">static</span> Out ToUtf32(In begin, In end, Out output); <a name="l00457"></a>00457 }; <a name="l00458"></a>00458 <a name="l00463"></a>00463 <span class="keyword">template</span> <> <a name="l00464"></a><a class="code" href="classsf_1_1Utf_3_0132_01_4.htm">00464</a> <span class="keyword">class </span><a class="code" href="classsf_1_1Utf.htm" title="Utility class providing generic functions for UTF conversions.">Utf</a><32> <a name="l00465"></a>00465 { <a name="l00466"></a>00466 <span class="keyword">public</span> : <a name="l00467"></a>00467 <a name="l00483"></a>00483 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00484"></a>00484 <span class="keyword">static</span> In Decode(In begin, In end, Uint32& output, Uint32 replacement = 0); <a name="l00485"></a>00485 <a name="l00500"></a>00500 <span class="keyword">template</span> <<span class="keyword">typename</span> Out> <a name="l00501"></a>00501 <span class="keyword">static</span> Out Encode(Uint32 input, Out output, Uint32 replacement = 0); <a name="l00502"></a>00502 <a name="l00515"></a>00515 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00516"></a>00516 <span class="keyword">static</span> In Next(In begin, In end); <a name="l00517"></a>00517 <a name="l00530"></a>00530 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00531"></a>00531 <span class="keyword">static</span> std::size_t Count(In begin, In end); <a name="l00532"></a>00532 <a name="l00547"></a>00547 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00548"></a>00548 <span class="keyword">static</span> Out FromAnsi(In begin, In end, Out output, <span class="keyword">const</span> std::locale& locale = std::locale()); <a name="l00549"></a>00549 <a name="l00560"></a>00560 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00561"></a>00561 <span class="keyword">static</span> Out FromWide(In begin, In end, Out output); <a name="l00562"></a>00562 <a name="l00574"></a>00574 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00575"></a>00575 <span class="keyword">static</span> Out FromLatin1(In begin, In end, Out output); <a name="l00576"></a>00576 <a name="l00592"></a>00592 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00593"></a>00593 <span class="keyword">static</span> Out ToAnsi(In begin, In end, Out output, <span class="keywordtype">char</span> replacement = 0, <span class="keyword">const</span> std::locale& locale = std::locale()); <a name="l00594"></a>00594 <a name="l00606"></a>00606 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00607"></a>00607 <span class="keyword">static</span> Out ToWide(In begin, In end, Out output, <span class="keywordtype">wchar_t</span> replacement = 0); <a name="l00608"></a>00608 <a name="l00620"></a>00620 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00621"></a>00621 <span class="keyword">static</span> Out ToLatin1(In begin, In end, Out output, <span class="keywordtype">char</span> replacement = 0); <a name="l00622"></a>00622 <a name="l00633"></a>00633 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00634"></a>00634 <span class="keyword">static</span> Out ToUtf8(In begin, In end, Out output); <a name="l00635"></a>00635 <a name="l00646"></a>00646 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00647"></a>00647 <span class="keyword">static</span> Out ToUtf16(In begin, In end, Out output); <a name="l00648"></a>00648 <a name="l00664"></a>00664 <span class="keyword">template</span> <<span class="keyword">typename</span> In, <span class="keyword">typename</span> Out> <a name="l00665"></a>00665 <span class="keyword">static</span> Out ToUtf32(In begin, In end, Out output); <a name="l00666"></a>00666 <a name="l00680"></a>00680 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00681"></a>00681 <span class="keyword">static</span> Uint32 DecodeAnsi(In input, <span class="keyword">const</span> std::locale& locale = std::locale()); <a name="l00682"></a>00682 <a name="l00695"></a>00695 <span class="keyword">template</span> <<span class="keyword">typename</span> In> <a name="l00696"></a>00696 <span class="keyword">static</span> Uint32 DecodeWide(In input); <a name="l00697"></a>00697 <a name="l00713"></a>00713 <span class="keyword">template</span> <<span class="keyword">typename</span> Out> <a name="l00714"></a>00714 <span class="keyword">static</span> Out EncodeAnsi(Uint32 codepoint, Out output, <span class="keywordtype">char</span> replacement = 0, <span class="keyword">const</span> std::locale& locale = std::locale()); <a name="l00715"></a>00715 <a name="l00730"></a>00730 <span class="keyword">template</span> <<span class="keyword">typename</span> Out> <a name="l00731"></a>00731 <span class="keyword">static</span> Out EncodeWide(Uint32 codepoint, Out output, <span class="keywordtype">wchar_t</span> replacement = 0); <a name="l00732"></a>00732 }; <a name="l00733"></a>00733 <a name="l00734"></a>00734 <span class="preprocessor">#include <SFML/System/Utf.inl></span> <a name="l00735"></a>00735 <a name="l00736"></a>00736 <span class="comment">// Make typedefs to get rid of the template syntax</span> <a name="l00737"></a>00737 <span class="keyword">typedef</span> <a class="code" href="classsf_1_1Utf_3_018_01_4.htm" title="Specialization of the Utf template for UTF-8.">Utf<8></a> <a class="code" href="classsf_1_1Utf_3_018_01_4.htm" title="Specialization of the Utf template for UTF-8.">Utf8</a>; <a name="l00738"></a>00738 <span class="keyword">typedef</span> <a class="code" href="classsf_1_1Utf_3_0116_01_4.htm" title="Specialization of the Utf template for UTF-16.">Utf<16></a> <a class="code" href="classsf_1_1Utf_3_0116_01_4.htm" title="Specialization of the Utf template for UTF-16.">Utf16</a>; <a name="l00739"></a>00739 <span class="keyword">typedef</span> <a class="code" href="classsf_1_1Utf_3_0132_01_4.htm" title="Specialization of the Utf template for UTF-32.">Utf<32></a> <a class="code" href="classsf_1_1Utf_3_0132_01_4.htm" title="Specialization of the Utf template for UTF-32.">Utf32</a>; <a name="l00740"></a>00740 <a name="l00741"></a>00741 } <span class="comment">// namespace sf</span> <a name="l00742"></a>00742 <a name="l00743"></a>00743 <a name="l00744"></a>00744 <span class="preprocessor">#endif // SFML_UTF_HPP</span> <a name="l00745"></a>00745 <span class="preprocessor"></span> <a name="l00746"></a>00746 </pre></div></div> <p id="footer"> :: Copyright © 2007-2008 Laurent Gomila, all rights reserved :: Documentation generated by <a href="http://www.doxygen.org/" title="doxygen website">doxygen 1.5.2</a> :: </p> </body> </html>