D on next-gen consoles and for game development

Dmitry Olshansky dmitry.olsh at gmail.com
Fri May 24 08:36:10 PDT 2013


24-May-2013 18:38, Manu пишет:
> On 24 May 2013 19:49, Jacob Carlborg <doob at me.com <mailto:doob at me.com>>
> wrote:
>
>     On 2013-05-23 23:42, Joseph Rushton Wakeling wrote:
>
>         I'm also in agreement with Manu.  There may well already be bugs
>         for some of
>         them -- e.g. there is one for toUpperInPlace which he referred
>         to, and the
>         source of the allocation is clear and is even responsible for
>         other bugs:
>         http://d.puremagic.com/issues/__show_bug.cgi?id=9629
>         <http://d.puremagic.com/issues/show_bug.cgi?id=9629>
>
>
>     toUpper/lower cannot be made in place if it should handle all
>     Unicode. Some characters will change their length when convert
>     to/from uppercase. Examples of these are the German double S and
>     some Turkish I.
>
>
> ß and SS are both actually 2 bytes, so it works in UTF-8 at least! ;)

Okay, here you go - an UTF-8 table of cased sin :)

Codepoint - upper-case - lower-case
0x01e9e : 0x000df - 3 : 2
0x0023a : 0x02c65 - 2 : 3
0x0023e : 0x02c66 - 2 : 3
0x02c7e : 0x0023f - 3 : 2
0x02c7f : 0x00240 - 3 : 2
0x02c6f : 0x00250 - 3 : 2
0x02c6d : 0x00251 - 3 : 2
0x02c70 : 0x00252 - 3 : 2
0x0a78d : 0x00265 - 3 : 2
0x0a7aa : 0x00266 - 3 : 2
0x02c62 : 0x0026b - 3 : 2
0x02c6e : 0x00271 - 3 : 2
0x02c64 : 0x0027d - 3 : 2
0x01e9e : 0x000df - 3 : 2
0x02c62 : 0x0026b - 3 : 2
0x02c64 : 0x0027d - 3 : 2
0x0023a : 0x02c65 - 2 : 3
0x0023e : 0x02c66 - 2 : 3
0x02c6d : 0x00251 - 3 : 2
0x02c6e : 0x00271 - 3 : 2
0x02c6f : 0x00250 - 3 : 2
0x02c70 : 0x00252 - 3 : 2
0x02c7e : 0x0023f - 3 : 2
0x02c7f : 0x00240 - 3 : 2
0x0a78d : 0x00265 - 3 : 2
0x0a7aa : 0x00266 - 3 : 2

And this is only with 1:1 mapping.

Generated by:

void main(){
     import std.uni, std.utf, std.stdio;
     char buf[4];
     foreach(dchar ch; unicode.Cased_Letter.byCodepoint){
         dchar upper = toUpper(ch);
         dchar lower = toLower(ch);

         int uLen = encode(buf, upper);
         int lLen = encode(buf, lower);
         if(uLen != lLen)
             writefln("0x%05x : 0x%05x - %d : %d", upper, lower, uLen, 
lLen);
     }
}



-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list