User:Ans/firstChar
From MediaWiki.org
< User:Ans
bugzilla:1701: special firstChar() routine for Korean characters
function c($code) { # (0) #$index = ($code - 0xac00 - (($code - 0xac00) % 0x024c)) / 0x024c; #$index = $code - 0xac00; # (1) #$index = ($index - ($index % 0x024c)) / 0x024c; # $index = $index div 0x024c # (2) #$index = floor($index / 0x024c); # a bit slower than (2) # (3) #$index = floor(($code-0xac00) / 0x024c); # a bit faster than (1),(2) # however, (0) is a bit faster than (1),(2),(3) # (4) #switch ($index) # (5) #switch (floor(($code-0xac00) / 0x024c)) # 10-15% faster than (4) # (6) # 9-10% faster than (5), but 1.5-2% slower than if/else switch ((($code - 0xac00) - (($code - 0xac00) % 0x024c)) / 0x024c) { # (7) # slower than (6),(5), but faster than (4) #switch (($index - ($index % 0x024c)) / 0x024c) # 0xac00 case 0: case 1: return "\xe3\x84\xb1"; # 0xb098 case 2: return "\xe3\x84\xb4"; # 0xb2e4 case 3: case 4: return "\xe3\x84\xb7"; # 0xb77c case 5: return "\xe3\x84\xb9"; # 0xb9c8 case 6: return "\xe3\x85\x81"; # 0xbc14 case 7: case 8: return "\xe3\x85\x82"; # 0xc0ac case 9: case 10: return "\xe3\x85\x85"; # 0xc544 case 11: return "\xe3\x85\x87"; # 0xc790 case 12: case 13: return "\xe3\x85\x88"; # 0xcc28 case 14: return "\xe3\x85\x8a"; # 0xce74 case 15: return "\xe3\x85\x8b"; # 0xd0c0 case 16: return "\xe3\x85\x8c"; # 0xd30c case 17: return "\xe3\x85\x8d"; # 0xd558 case 18: default: return "\xe3\x85\x8e"; } } function c2($code) { if ( $code < 0xb098 ) { return "\xe3\x84\xb1"; } elseif ( $code < 0xb2e4 ) { return "\xe3\x84\xb4"; } elseif ( $code < 0xb77c ) { return "\xe3\x84\xb7"; } elseif ( $code < 0xb9c8 ) { return "\xe3\x84\xb9"; } elseif ( $code < 0xbc14 ) { return "\xe3\x85\x81"; } elseif ( $code < 0xc0ac ) { return "\xe3\x85\x82"; } elseif ( $code < 0xc544 ) { return "\xe3\x85\x85"; } elseif ( $code < 0xc790 ) { return "\xe3\x85\x87"; } elseif ( $code < 0xcc28 ) { return "\xe3\x85\x88"; } elseif ( $code < 0xce74 ) { return "\xe3\x85\x8a"; } elseif ( $code < 0xd0c0 ) { return "\xe3\x85\x8b"; } elseif ( $code < 0xd30c ) { return "\xe3\x85\x8c"; } elseif ( $code < 0xd558 ) { return "\xe3\x85\x8d"; } else { return "\xe3\x85\x8e"; } } #for ($j=0xac00; $j<0xffff; ++$j) { print c($j)."\n"; } # test case for ($j=0; $j<100; ++$j) { #for ($code=0xac00; $code<0xffff; ++$code) { c($code); } for ($code=0xac00; $code<0xd7a4; ++$code) { c($code); } }